public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
From: ltuikov@yahoo.com
To: gcc-gnats@gcc.gnu.org
Subject: c++/3101: ICE -- seg. fault compiling and encountering C::Angle(...)
Date: Sat, 09 Jun 2001 15:36:00 -0000	[thread overview]
Message-ID: <20010609223306.32419.qmail@sourceware.cygnus.com> (raw)

>Number:         3101
>Category:       c++
>Synopsis:       ICE -- seg. fault compiling and encountering C::Angle(...)
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Sat Jun 09 15:36:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Luben Tuikov
>Release:        gcc version 2.96 20000731 (Red Hat Linux 7.0)
>Organization:
>Environment:
RH7, 2.4.4, P2, 384 MB RAM.
>Description:
luben@lt1 ~/c/sgeom>g++ -save-temps -v -c -o box.o box.cpp
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc version 2.96 20000731 (Red Hat Linux 7.0)
 /usr/lib/gcc-lib/i386-redhat-linux/2.96/cpp0 -lang-c++ -D__GNUG__=2 -v -D__GNUC__=2 -D__GNUC_MINOR__=96 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_i386__ box.cpp box.ii
GNU CPP version 2.96 20000731 (Red Hat Linux 7.0) (cpplib)
 (i386 Linux/ELF)
ignoring nonexistent directory "/usr/i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/g++-3
 /usr/local/include
 /usr/lib/gcc-lib/i386-redhat-linux/2.96/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/i386-redhat-linux/2.96/cc1plus box.ii -quiet -dumpbase box.cpp -version -o box.s
GNU C++ version 2.96 20000731 (Red Hat Linux 7.0) (i386-redhat-linux) compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.0).
In file included from box.cpp:2:
cdefs.h:137: Internal error: Segmentation fault.
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.

If I comment out line 137 (Angle(...)) then it compiles
until it encounters calls to Angle() and it complains,
as it should...
>How-To-Repeat:
Apparently a method with the name of Angle() will cause
it to crash...
>Fix:
... I am looking for one.. :-)
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="box.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="box.ii"

IyAxICJib3guY3BwIgoKIyA1ICJjZGVmcy5oIiAxCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzEyICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDM0
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxOTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1y
ZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgc2l6ZV90OwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7
CgojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBp
bnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg
ICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwojIDEzMyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21h
eCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpf
X25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBh
dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBs
b25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3Vs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg
dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy
b3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK
X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAg
IHRocm93ICgpOwojIDI1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUg
X19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBf
X3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91
cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQg
X19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50
IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKTsKIyAzODUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0
YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25z
dCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgojIDI4
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwpleHRlcm4gIkMiIHsKCgojIDMwICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2No
YXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19p
bnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0
eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3Qg
Kl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQg
X191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9f
dDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0
eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVk
ZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBf
X3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBf
X2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90
OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVk
ZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsK
dHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtf
dDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90
OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBf
X2ZkX21hc2s7CgoKIyAxMDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBz
dHJ1Y3QKICB7CgoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0IC8gKDggKiBzaXpl
b2YgKF9fZmRfbWFzaykpXTsKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsK
Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25n
IGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRl
ZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7
CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9f
ZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYg
X191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlw
ZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190
X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fc29ja2xlbl90OwoKCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBl
cy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCnN0cnVjdCBfX3Nj
aGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5j
bHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sK
ewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBz
dHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVm
IHN0cnVjdAp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3Ry
dWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBp
bnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsK
ICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRy
X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xv
Y2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5
cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg
aW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9v
d25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2Nr
Owp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2lu
ZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsK
CgojIDE0MCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCBwdGhyZWFkX3Q7CgojIDE2NiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3Vf
Y2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1
X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0
eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5
cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CiMgNTggIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBl
ZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVk
ZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlw
ZWRlZiBfX29mZl90IG9mZl90OwojIDk2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlw
ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYg
X19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVm
IF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI3ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCnR5
cGVkZWYgX190aW1lX3QgdGltZV90OwoKIyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBl
ZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKCiMgOTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
dHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKCiMgMTI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDIgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxODQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18p
KSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18p
KSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p
KSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18p
KSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVm
IGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CgoK
CgoKCgoKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMDcgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDEgMwoKCgojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCnR5cGVkZWYgaW50
IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25n
IGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAg
fSBfX3NpZ3NldF90OwoKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCgoj
IDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxv
bmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKCiMgMzkgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKc3RydWN0IHRpbWV2YWw7
Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKCnR5cGVkZWYgX19mZF9zZXQgZmRfc2V0OwoK
CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBzZWxlY3QgKGlu
dCBfX25mZHMsIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAg
ICAgIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBf
X2ZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVj
dCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgojIDkyICIvdXNyL2lu
Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCn0KCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDIgMwoKCgojIDIyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtj
bnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlw
ZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTYgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMwp9CgojIDM5MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJu
IGludDMyX3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1
bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRl
ICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRz
dGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2Rh
dGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3Qg
KnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5k
X3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0
cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5k
b21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhy
b3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9f
cmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpf
X3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRv
bV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQg
KHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0
ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50
IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5z
aWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10p
IHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJh
bVs3XSkgdGhyb3cgKCk7CgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCB4WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGFbM107CiAgICB1bnNpZ25lZCBz
aG9ydCBpbnQgYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBvbGRfeFszXTsKICAgIGludCBpbml0
OwogIH07CgoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0
IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJh
bmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi
aVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp
Y3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBf
X3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2Vl
ZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7
CiMgNTI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6
ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVy
biB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxs
b2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoK
CgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKIyAyNiAiL3Vz
ci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lkICph
bGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KCiMgNTQ2ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA1NjAgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVu
YykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19vbl9leGl0ICh2b2lkICgqX19m
dW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93
ICgpOwpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZv
aWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg
ZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgojIDU4OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpnZXRlbnYg
KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJl
X2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
cHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYg
KF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxh
Y2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAq
X19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cg
KCk7CiMgNjI0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAo
Y2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNo
YXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKIyA2
NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2Nv
bXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgoKCgoKCgpleHRl
cm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jh
c2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwg
X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jh
c2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19j
b21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25n
IGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MTEgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50
IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl
cm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcyOSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y
ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93
ICgpOwoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f
cmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hh
ciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9f
bmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAq
X19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAog
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVj
dnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAg
ICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhy
b3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f
cmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29u
c3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0
b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXpl
X3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0
IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxl
bSkgdGhyb3cgKCk7CgoKCgoKfQoKIyA1ICJjZGVmcy5oIiAyCgojIDI4ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDEgMwpleHRlcm4gIkMiIHsKCgoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2
b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lk
ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAq
bWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0
IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lk
ICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBz
aXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19u
KQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCiMgNzcgIi91c3Iv
aW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0
IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoK
ZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNo
YXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50
IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBp
bnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhm
cm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgojIDEyMCAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hh
ciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAq
X19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgojIDE2NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
CmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq
X19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNj
ZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNo
YXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0
cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCgoKCmV4dGVybiBj
aGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgp
OwojIDIxOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBzaXplX3Qgc3RybGVuIChf
X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgoj
IDIyOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50
IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAoaW50IF9f
ZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGNo
YXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxl
bikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywg
dm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAo
dm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29u
c3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19j
b25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAo
aW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZz
IChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKIyAyNzQgIi91
c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwojIDI5NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVy
biBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwojIDM2
NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KCiMgNiAiY2RlZnMuaCIgMgoKCiMgNSAibWF0
aGZ1bnMuaCIgMQojIDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKZXh0ZXJuICJDIiB7CgoK
CgoKCgoKCgoKIyA2NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDU0ICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMSAzCmV4dGVybiBkb3VibGUgYWNvcyAoIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvcyAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGRvdWJsZSBhc2luICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19h
c2luICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKCBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKCBkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKCBkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yICggZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2NvcyAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKCBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3RhbiAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKIyA3OCAiL3Vzci9pbmNsdWRl
L2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBjb3NoICggZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3NoICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gZG91YmxlIHNpbmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Np
bmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuaCAoIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gZG91YmxlIGFjb3NoICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19hY29zaCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2lu
aCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKCBkb3VibGUg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbmggKCBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGRvdWJsZSBleHAgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4
cCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKIyAxMDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj
YWxscy5oIiAzCmV4dGVybiBkb3VibGUgZnJleHAgKCBkb3VibGUgX194LCBpbnQgKl9fZXhwb25l
bnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKCBkb3VibGUgX194LCBpbnQgKl9f
ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKCBkb3VibGUgX194LCBp
bnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoIGRvdWJsZSBf
X3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAoIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nICggZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fbG9nMTAgKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1v
ZGYgKCBkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19tb2RmICggZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g
ZG91YmxlIGV4cG0xICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBt
MSAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKCBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwICggZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19sb2diICggZG91YmxlIF9feCkgdGhyb3cgKCk7CiMgMTQzICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIHBvdyAoIGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93ICggZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0ICggZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19zcXJ0ICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBkb3VibGUgaHlwb3QgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2h5cG90ICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gZG91YmxlIGNicnQgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2NicnQgKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWlsICgg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jZWlsICggZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzICggZG91YmxlIF9feCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoIGRvdWJsZSBf
X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91Ymxl
IGZsb29yICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoIGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoIGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m
aW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRv
dWJsZSBpbmZuYW4gKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBkb3VibGUgX19pbmZuYW4gKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVtICggZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtICggZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKCBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpZ25pZmljYW5kICggZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduICggZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
ZG91YmxlIF9fY29weXNpZ24gKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjE3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs
bHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3Zh
bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJs
ZSBqMCAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMCAoIGRvdWJsZSkgdGhy
b3cgKCk7CmV4dGVybiBkb3VibGUgajEgKCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fajEgKCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qbiAoaW50LCBkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIHkwICggZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kwICggZG91
YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX195MSAoIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwg
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fZXJmICggZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmZjICggZG91Ymxl
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKCBkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIGxnYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2Ft
bWEgKCBkb3VibGUpIHRocm93ICgpOwojIDI0NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxz
LmgiIDMKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19nYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1h
X3IgKCBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19s
Z2FtbWFfciAoIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGRvdWJsZSByaW50ICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50
ICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKCBkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGRvdWJsZSByZW1h
aW5kZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X3JlbWFpbmRlciAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g
ZG91YmxlIHNjYWxiICggZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19zY2FsYiAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGRvdWJsZSBzY2FsYm4gKCBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3NjYWxibiAoIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IGlsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diIChk
b3VibGUgX194KSB0aHJvdyAoKTsKIyA2NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODMg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxz
LmgiIDEgMwpleHRlcm4gZmxvYXQgYWNvc2YgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19hY29zZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYg
KCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoIGZsb2F0IF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19hdGFuZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRh
bjJmICggZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFu
MmYgKCBmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2Yg
KCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmICggZmxvYXQgX194KSB0
aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5mICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fc2luZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAo
IGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RhbmYgKCBmbG9hdCBfX3gpIHRo
cm93ICgpOwoKIyA3OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZs
b2F0IGNvc2hmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKCBm
bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmICggZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGZsb2F0IHRhbmhmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYg
KCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgYWNvc2hmICggZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmICggZmxvYXQgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBmbG9hdCBhc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19hc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoIGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoIGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19leHBmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCiMgMTA2ICIvdXNyL2luY2x1
ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgZnJleHBmICggZmxvYXQgX194LCBp
bnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKCBmbG9hdCBf
X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoIGZs
b2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYg
KCBmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9n
ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKCBmbG9hdCBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19sb2cxMGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h
dCBtb2RmZiAoIGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX21vZGZmICggZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGZsb2F0IGV4cG0xZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0x
ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoIGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzFwZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fbG9nYmYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwojIDE0MyAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IHBvd2YgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fc3FydGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlw
b3RmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19oeXBv
dGYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY2Jy
dGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoIGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoIGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZmxvYXQgZmFic2YgKCBmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKCBmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmICggZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZmxvYXQgZm1vZGYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2Ztb2RmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAo
ZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGluZm5hbmYgKGludCBfX2Vycm9yKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2luZm5h
bmYgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
ZXh0ZXJuIGZsb2F0IGRyZW1mICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19kcmVtZiAoIGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3NpZ25pZmljYW5kZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQg
Y29weXNpZ25mICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mICggZmxvYXQgX194LCBmbG9h
dCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAyMTcgIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9f
dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGlu
dCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gZmxvYXQgajBmICggZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19qMGYgKCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBqMWYgKCBmbG9hdCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpu
ZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkg
dGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3kwZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoIGZsb2F0KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmICggZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQg
eW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoIGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fZXJmZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmICgg
ZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoIGZsb2F0KSB0aHJvdyAoKTsK
ZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xn
YW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7CiMgMjQ2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs
bHMuaCIgMwpleHRlcm4gZmxvYXQgZ2FtbWFmICggZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19nYW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFm
X3IgKCBmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdh
bW1hZl9yICggZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBm
bG9hdCByaW50ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmICgg
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoIGZsb2F0IF9f
eCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBmbG9hdCBfX25leHRhZnRlcmYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmICgg
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJm
ICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJm
ICggZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYg
KCBmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJu
ZiAoIGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYg
KCBmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKZXh0ZXJuIGxv
bmcgZG91YmxlIGFjb3NsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fYWNvc2wgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGFzaW5sICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fYXNpbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIGF0YW5sICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fYXRhbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGF0YW4ybCAoIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsICggbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsICggbG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAoIGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAoIGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJs
ZSBjb3NobCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2Nvc2hsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBz
aW5obCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Np
bmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5o
bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rhbmhs
ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3No
bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3No
bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhs
ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhs
ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwg
KCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwg
KCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBs
ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAo
IGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgojIDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0
aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAoIGxvbmcgZG91YmxlIF9feCwg
aW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsICgg
bG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBsZGV4cGwgKCBsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsICggbG9uZyBkb3VibGUgX194LCBpbnQgX19l
eHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKCBsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsICggbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsICggbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsICggbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKCBsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19t
b2RmbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoK
CmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKIyAx
NDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBw
b3dsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19wb3dsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAoIGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsICggbG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAoIGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsICggbG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGNicnRsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fY2JydGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgY2VpbGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19jZWlsbCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGZhYnNsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsICggbG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGZsb29ybCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2Zsb29ybCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGZtb2RsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFs
dWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9f
ZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwg
KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBpbmZuYW5sIChpbnQgX19lcnJvcikgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19pbmZu
YW5sIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKCBsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWdu
aWZpY2FuZGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19zaWduaWZpY2FuZGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGNvcHlzaWdubCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2NvcHlzaWdubCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjE3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo
Y2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChs
b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fajBsICggbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk
b3VibGUgajFsICggbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19q
MWwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwg
bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9u
ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsICggbG9uZyBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKCBsb25nIGRvdWJsZSkgdGhyb3cg
KCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX3kxbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
ZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGVyZmwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Vy
ZmwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAoIGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wgKCBsb25nIGRv
dWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsICggbG9uZyBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsICggbG9uZyBkb3VibGUpIHRo
cm93ICgpOwojIDI0NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxv
bmcgZG91YmxlIGdhbW1hbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fZ2FtbWFsICggbG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBk
b3VibGUgbGdhbW1hbF9yICggbG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAoIGxvbmcgZG91YmxlLCBpbnQgKl9fc2ln
bmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKCBsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAoIGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwgKCBsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsICggbG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAoIGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVy
bCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNjYWxibCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsICggbG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwg
KCBsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19zY2FsYm5sICggbG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9n
YmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5o
IiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwoj
IDIzNiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0x
LAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9O
X1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwojIDI1OSAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQg
dHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwog
ICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhj
ZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMjkwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMg
NzkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2Zsb2F0
LmgiIDEgMwp1bmlvbiBfX2NvbnZlcnRfbG9uZ19kb3VibGUgewogIHVuc2lnbmVkIF9fY29udmVy
dF9sb25nX2RvdWJsZV9pWzRdOwogIGxvbmcgZG91YmxlIF9fY29udmVydF9sb25nX2RvdWJsZV9k
Owp9OwojIDI5MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNDA5ICIvdXNyL2luY2x1ZGUv
bWF0aC5oIiAzCn0KCgojIDUgIm1hdGhmdW5zLmgiIDIKCmNsYXNzIFNTZWc7CmNsYXNzIFNQb2lu
dDsKY2xhc3MgU1ZlY3RvcjsKY2xhc3MgU1BsYW5lOwoKZXh0ZXJuIGRvdWJsZSBfc3NfZ2xvYmFs
X3RvbDsKZXh0ZXJuIGRvdWJsZSBfc3NfY29ubmVjdF90b2w7CmV4dGVybiBkb3VibGUgU1NfVElO
WTsKCiMgMzAgIm1hdGhmdW5zLmgiCnRlbXBsYXRlPGNsYXNzIF9fU1NfVD4gaW5saW5lCl9fU1Nf
VCBtYXgoX19TU19UIGEsIF9fU1NfVCBiKSB7IGlmIChhID4gYikgcmV0dXJuIGE7IHJldHVybiBi
OyB9Cgp0ZW1wbGF0ZTxjbGFzcyBfX1NTX1Q+IGlubGluZQpfX1NTX1QgbWluKF9fU1NfVCBhLCBf
X1NTX1QgYikgeyBpZiAoYSA+IGIpIHJldHVybiBiOyByZXR1cm4gYTsgfQoKdGVtcGxhdGU8Y2xh
c3MgX19TU19UPiBpbmxpbmUKaW50IGFicyhfX1NTX1QgYSkgeyByZXR1cm4gKChhKSA8IDApID8g
KC0oYSkpIDogKGEpO30KCnRlbXBsYXRlPGNsYXNzIF9fU1NfVD4gaW5saW5lCnZvaWQgc3dhcChf
X1NTX1QgJmEsIF9fU1NfVCAmYikge19fU1NfVCB0ID0gYTsgYSA9IGI7IGIgPSB0O30KCmNvbnN0
IGRvdWJsZSBTX1BJQlkyID0gYWNvcygwLjApOwpjb25zdCBkb3VibGUgU19QSSA9IDIuMCphY29z
KDAuMCk7CmNvbnN0IGRvdWJsZSBTXzNQSUJZMiA9IFNfUEkrU19QSUJZMjsKY29uc3QgZG91Ymxl
IFNfMlBJID0gNC4wKmFjb3MoMC4wKTsKCmRvdWJsZSBTc2V0VG9sKGRvdWJsZSB0KTsKaW50IFN0
b2xDb21wKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIHRvbD1fc3NfZ2xvYmFsX3RvbCk7CmRv
dWJsZSBzcShkb3VibGUgeCk7CmRvdWJsZSBTbW9kMnBpKGRvdWJsZSB4KTsKZG91YmxlIFNzd2Vl
cChkb3VibGUgc2EsIGRvdWJsZSBlYSk7CmRvdWJsZSBTdWxlbihkb3VibGUgdTEsIGRvdWJsZSB1
Mik7CmRvdWJsZSBTYXRhbjIoZG91YmxlIHksIGRvdWJsZSB4KTsKZG91YmxlIFNzaWduKGRvdWJs
ZSB1KTsKZG91YmxlIGxpbWl0MTEoZG91YmxlIGEpOwoKU1NlZyogU21ha2VTZWcoY29uc3QgU1Bv
aW50ICZzcCwgY29uc3QgU1BvaW50ICZtcCwgY29uc3QgU1BvaW50ICZlcCwgY29uc3QgU1BsYW5l
ICZwbCk7CgppbnQgY21wYnl4KGNvbnN0IHZvaWQgKmVsMSwgY29uc3Qgdm9pZCAqZWwyKTsKaW50
IENtcENQZXJpbShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKaW50IENtcENBcmVhKGNv
bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwppbnQgQ21wQnlVMShjb25zdCB2b2lkICphLCBj
b25zdCB2b2lkICpiKTsKaW50IENtcEJ5VTIoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7
CmludCBDbXBEYmwoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CgojIDggImNkZWZzLmgi
IDIKCiMgNiAiY29udGFpbmVyLmgiIDEKdHlwZWRlZiBpbnQgKCpwQ29tcGZfdCkoY29uc3Qgdm9p
ZCAqZTEsIGNvbnN0IHZvaWQgKmUyKTsKIyAxNSAiY29udGFpbmVyLmgiCnRlbXBsYXRlPGNsYXNz
IFQ+CmNsYXNzIFNDb250YWluZXJQIHsKCnByb3RlY3RlZDoKICBUICoqYXA7CiAgaW50IHN6Owog
IGludCBtZW1zaXplOwogIGludCBjaHVuazsKCiAgaW50IEdyb3coKQogIHsKICAgIFQgKip0ID0g
KFQgKiopIHJlYWxsb2MoYXAsIChtZW1zaXplICsgY2h1bmspICogc2l6ZW9mKFQgKikpOwoKICAg
IGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUgKz0gY2h1bms7CgogICAgaWYg
KHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgaW50IFNocmlu
aygpCiAgewogICAgaWYgKChtZW1zaXplLWNodW5rKSA8IDEpCiAgICAgIHJldHVybiAtMTsKCiAg
ICBUICoqdCA9IChUICoqKSByZWFsbG9jKGFwLCAobWVtc2l6ZSAtIGNodW5rKSAqIHNpemVvZihU
ICopKTsKCiAgICBpZiAoIXQpCiAgICAgIHJldHVybiAtMTsKCiAgICBtZW1zaXplIC09IGNodW5r
OwoKICAgIGlmICh0ICE9IGFwKQogICAgICBhcCA9IHQ7CgogICAgcmV0dXJuIDA7CiAgfQoKCgog
IGludCBtaW5teigpCiAgewogICAgcmVnaXN0ZXIgaW50IHMgPSAoKHN6LTEpL2NodW5rICsgMSkq
Y2h1bms7CiAgICByZXR1cm4gKHMgPCBjaHVuaykgPyBjaHVuayA6IHM7CiAgfQoKCgpwdWJsaWM6
CiAgU0NvbnRhaW5lclAoaW50IGNodW4gPSAzMCkKICB7CiAgICBjaHVuayA9IGNodW47CiAgICBz
eiA9IDA7CiAgICBtZW1zaXplID0gbWlubXooKTsKICAgIGFwID0gKFQgKiopIG1hbGxvYyhtZW1z
aXplICogc2l6ZW9mKFQqKSk7CiAgfQoKCgogIFNDb250YWluZXJQKGNvbnN0IFNDb250YWluZXJQ
PFQ+ICZzYykKICB7CiAgICByZWdpc3RlciBpbnQgaTsKCiAgICBjaHVuayA9IHNjLmNodW5rOwog
ICAgc3ogPSBzYy5zejsKICAgIG1lbXNpemUgPSBtaW5teigpOwogICAgYXAgPSAoVCAqKikgbWFs
bG9jKHNpemVvZihUKikgKiBtZW1zaXplKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgc2Muc3o7IGkr
KykKICAgICAgYXBbaV0gPSBuZXcgVCgqc2MuYXBbaV0pOwogIH0KCgoKICB2aXJ0dWFsIH5TQ29u
dGFpbmVyUCgpCiAgewogICAgd2hpbGUgKHN6LS0gPiAwKSB7CiAgICAgIGFwW3N6XS0+flQoKTsK
ICAgICAgZGVsZXRlIGFwW3N6XTsKICAgICAgYXBbc3pdPTA7CiAgICB9CiAgICBmcmVlKGFwKTsK
ICAgIGFwID0gMDsKICAgIHN6ID0gMDsKICAgIG1lbXNpemUgPSAwOwogIH0KCgoKICB2aXJ0dWFs
IHZvaWQgUmVzZXQoKQogIHsKICAgIHdoaWxlIChzei0tID4gMCkgewogICAgICBhcFtzel0tPn5U
KCk7CiAgICAgIGRlbGV0ZSBhcFtzel07CiAgICAgIGFwW3N6XT0wOwogICAgfQogICAgZnJlZShh
cCk7CiAgICBzeiA9IDA7CiAgICBtZW1zaXplID0gY2h1bmsgPiAwID8gY2h1bmsgOiAzMDsKICAg
IGFwID0gKFQgKiopIG1hbGxvYyhtZW1zaXplICogc2l6ZW9mKFQqKSk7CiAgfQoKCgogIHZpcnR1
YWwgU0NvbnRhaW5lclA8VD4mIG9wZXJhdG9yPShjb25zdCBTQ29udGFpbmVyUDxUPiAmc2MpCiAg
ewogICAgdGhpcy0+flNDb250YWluZXJQKCk7CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgY2h1
bmsgPSBzYy5jaHVuazsKICAgIHN6ID0gc2Muc3o7CiAgICBtZW1zaXplID0gbWlubXooKTsKICAg
IGFwID0gKFQgKiopIG1hbGxvYyhzaXplb2YoVCopICogbWVtc2l6ZSk7CgogICAgZm9yIChpID0g
MDsgaSA8IHNjLnN6OyBpKyspCiAgICAgIGFwW2ldID0gbmV3IFQoKnNjLmFwW2ldKTsKCiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKCgogIHZpcnR1YWwgU0NvbnRhaW5lclA8VD4gb3BlcmF0b3IrKGNv
bnN0IFNDb250YWluZXJQPFQ+ICZzYykgY29uc3QKICB7CiAgICByZWdpc3RlciBpbnQgaTsKICAg
IFNDb250YWluZXJQPFQ+IGNzYyA9ICp0aGlzOwoKICAgIGZvciAoaSA9IDA7IGkgPCBzYy5zejsg
aSsrKQogICAgICBjc2MuQWRkKG5ldyBUKCpzYy5hcFtpXSkpOwoKICAgIHJldHVybiBjc2M7CiAg
fQoKCgogIHZpcnR1YWwgU0NvbnRhaW5lclA8VD4mIG9wZXJhdG9yKz0oY29uc3QgU0NvbnRhaW5l
clA8VD4gJnNjKQogIHsKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBz
Yy5zejsgaSsrKQogICAgICBBZGQobmV3IFQoKnNjLmFwW2ldKSk7CgogICAgcmV0dXJuICp0aGlz
OwogIH0KCgoKICB2aXJ0dWFsIFQqIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0CiAgewogICAgaWYg
KChpIDwgMCkgfHwgKGkgPiAoc3otMSkpKQogICAgICByZXR1cm4gMDsKCiAgICByZXR1cm4gYXBb
aV07CiAgfQoKCgogIHZpcnR1YWwgU0NvbnRhaW5lclA8VD4gQ29weShpbnQgaSwgaW50IGopIGNv
bnN0CiAgewogICAgU0NvbnRhaW5lclA8VD4gc2M7CiAgICBmb3IgKCA7IGkgPiAtMSAmJiBpIDwg
aiAmJiBpIDwgc3o7IGkrKykKICAgICAgc2MuQWRkKG5ldyBUKCphcFtpXSkpOwogICAgcmV0dXJu
IHNjOwogIH0KCgoKICB2aXJ0dWFsIGludCBTaXplKCkgY29uc3QKICB7CiAgICByZXR1cm4gc3o7
CiAgfQoKCgogIHZpcnR1YWwgaW50IEFkZChUKiBhKQogIHsKICAgIGlmICghYSkKICAgICAgcmV0
dXJuIC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXplKQogICAgICBpZiAoR3JvdygpICE9IDApCiAg
ICAgICAgcmV0dXJuIC0xOwogICAgYXBbc3pdID0gYTsKICAgIHN6Kys7CgogICAgcmV0dXJuIDA7
CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0FmdGVyKGludCBzbiwgVCogYSkKICB7CiAgICBpZiAo
KHNuIDwgMCkgfHwgKHNuID4gKHN6LTEpKSB8fCAhYSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlm
IChzeiA+PSBtZW1zaXplKSB7CiAgICAgIGlmIChHcm93KCkgIT0gMCkKICAgICAgICByZXR1cm4g
LTE7CiAgICB9CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgZm9yIChpID0gc3o7IGkgPiAoc24r
MSk7IGktLSkKICAgICAgYXBbaV0gPSBhcFtpLTFdOwoKICAgIGFwW3NuKzFdID0gYTsKICAgIHN6
Kys7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0JlZm9yZShpbnQgc2Is
IFQqIGEpCiAgewogICAgaWYgKChzYiA8IDApIHx8IChzYiA+IChzei0xKSkgfHwgIWEpCiAgICAg
IHJldHVybiAtMTsKCiAgICBpZiAoc3ogPj0gbWVtc2l6ZSkgewogICAgICBpZiAoR3JvdygpICE9
IDApCiAgICAgICAgcmV0dXJuIC0xOwogICAgfQoKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZv
ciAoaSA9IHN6OyBpID4gc2I7IGktLSkKICAgICAgYXBbaV0gPSBhcFtpLTFdOwoKICAgIGFwW3Ni
XSA9IGE7CiAgICBzeisrOwoKICAgIHJldHVybiAwOwogIH0KCgoKICB2aXJ0dWFsIGludCBEZWxl
dGUoaW50IGspCiAgewogICAgaWYgKHN6IDwgMSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlmICgo
ayA8IDApIHx8IChrID4gKHN6LTEpKSkKICAgICAgcmV0dXJuIC0xOwoKICAgIHJlZ2lzdGVyIGlu
dCBpOwoKICAgIGFwW2tdLT5+VCgpOwogICAgZGVsZXRlIGFwW2tdOwoKICAgIGZvciAoaSA9IGs7
IGkgPCAoc3otMSk7IGkrKykKICAgICAgYXBbaV0gPSBhcFtpKzFdOwoKICAgIHN6LS07CgogICAg
aWYgKG1pbm16KCkgPCBtZW1zaXplKQogICAgICBTaHJpbmsoKTsKCiAgICByZXR1cm4gMDsKICB9
CgoKCiAgdmlydHVhbCB2b2lkIFN3YXAoaW50IGEsIGludCBiKQogIHsKICAgIFQqIHBhID0gYXBb
YV07CgogICAgYXBbYV0gPSBhcFtiXTsKICAgIGFwW2JdID0gcGE7CiAgfQoKCgogIHZpcnR1YWwg
dm9pZCBTb3J0KHBDb21wZl90IGNvbXBmKQogIHsKICAgIHFzb3J0KGFwLCBzeiwgc2l6ZW9mKFQq
KSwgY29tcGYpOwogIH0KCgoKICB2aXJ0dWFsIHZvaWQgQ2xlYW5TYW1lKCkKICB7CiAgICByZWdp
c3RlciBpbnQgaSwgajsKICAgIGZvciAoaSA9IDA7IGkgPCAoc3otMSk7IGkrKykKICAgICAgZm9y
IChqID0gaSsxOyBqIDwgc3o7IGorKykKICAgICAgICBpZiAoKihhcFtpXSkgPT0gKihhcFtqXSkp
CiAgICAgICAgICBEZWxldGUoai0tKTsKICB9Cgp9OwojIDMyMCAiY29udGFpbmVyLmgiCnRlbXBs
YXRlPGNsYXNzIFQ+CmNsYXNzIFNDb250YWluZXIgewoKcHJvdGVjdGVkOgogIFQgKmFwOwogIGlu
dCBzejsKICBpbnQgbWVtc2l6ZTsKICBpbnQgY2h1bms7CgogIGludCBHcm93KCkKICB7CiAgICBU
ICp0ID0gKFQgKikgcmVhbGxvYyhhcCwgKG1lbXNpemUgKyBjaHVuaykgKiBzaXplb2YoVCkpOwoK
ICAgIGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUgKz0gY2h1bms7CgogICAg
aWYgKHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgaW50IFNo
cmluaygpCiAgewogICAgaWYgKChtZW1zaXplLWNodW5rKSA8IDEpCiAgICAgIHJldHVybiAtMTsK
CiAgICBUICp0ID0gKFQgKikgcmVhbGxvYyhhcCwgKG1lbXNpemUgLSBjaHVuaykgKiBzaXplb2Yo
VCkpOwoKICAgIGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUgLT0gY2h1bms7
CgogICAgaWYgKHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAg
aW50IG1pbm16KCkKICB7CiAgICByZWdpc3RlciBpbnQgcyA9ICgoc3otMSkvY2h1bmsgKyAxKSpj
aHVuazsKICAgIHJldHVybiAocyA8IGNodW5rKSA/IGNodW5rIDogczsKICB9CgoKCnB1YmxpYzoK
ICBTQ29udGFpbmVyKGludCBjaHVuID0gMzApCiAgewogICAgY2h1bmsgPSBjaHVuOwogICAgc3og
PSAwOwogICAgbWVtc2l6ZSA9IG1pbm16KCk7CiAgICBhcCA9IChUICopIG1hbGxvYyhtZW1zaXpl
ICogc2l6ZW9mKFQpKTsKICB9CgoKCiAgU0NvbnRhaW5lcihjb25zdCBTQ29udGFpbmVyPFQ+ICZz
YykKICB7CiAgICByZWdpc3RlciBpbnQgaTsKCiAgICBjaHVuayA9IHNjLmNodW5rOwogICAgc3og
PSBzYy5zejsKICAgIG1lbXNpemUgPSBtaW5teigpOwogICAgYXAgPSAoVCAqKSBtYWxsb2Moc2l6
ZW9mKFQpICogbWVtc2l6ZSk7CgogICAgZm9yIChpID0gMDsgaSA8IHNjLnN6OyBpKyspCiAgICAg
IGFwW2ldID0gc2MuYXBbaV07CiAgfQoKCgogIHZpcnR1YWwgflNDb250YWluZXIoKQogIHsKICAg
IHdoaWxlIChzei0tID4gMCkKICAgICAgYXBbc3pdLn5UKCk7CiAgICBmcmVlKGFwKTsKICAgIGFw
ID0gMDsKICAgIHN6ID0gMDsKICAgIG1lbXNpemUgPSAwOwogIH0KCgoKICB2aXJ0dWFsIHZvaWQg
UmVzZXQoKQogIHsKICAgIHdoaWxlIChzei0tID4gMCkKICAgICAgYXBbc3pdLn5UKCk7CiAgICBm
cmVlKGFwKTsKICAgIHN6ID0gMDsKICAgIG1lbXNpemUgPSBjaHVuayA+IDAgPyBjaHVuayA6IDMw
OwogICAgYXAgPSAoVCAqKSBtYWxsb2MobWVtc2l6ZSAqIHNpemVvZihUKSk7CiAgfQoKCgogIHZp
cnR1YWwgU0NvbnRhaW5lcjxUPiYgb3BlcmF0b3I9KGNvbnN0IFNDb250YWluZXI8VD4gJnNjKQog
IHsKICAgIHRoaXMtPn5TQ29udGFpbmVyKCk7CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgY2h1
bmsgPSBzYy5jaHVuazsKICAgIHN6ID0gc2Muc3o7CiAgICBtZW1zaXplID0gbWlubXooKTsKICAg
IGFwID0gKFQgKikgbWFsbG9jKHNpemVvZihUKSAqIG1lbXNpemUpOwoKICAgIGZvciAoaSA9IDA7
IGkgPCBzYy5zejsgaSsrKQogICAgICBhcFtpXSA9IHNjLmFwW2ldOwoKICAgIHJldHVybiAqdGhp
czsKICB9CgoKCiAgdmlydHVhbCBTQ29udGFpbmVyPFQ+JiBvcGVyYXRvcisoY29uc3QgU0NvbnRh
aW5lcjxUPiAmc2MpIGNvbnN0CiAgewogICAgcmVnaXN0ZXIgaW50IGk7CiAgICBTQ29udGFpbmVy
PFQ+ICpwc2MgPSBuZXcgU0NvbnRhaW5lcjxUPigqdGhpcyk7CgogICAgZm9yIChpID0gMDsgaSA8
IHNjLnN6OyBpKyspCiAgICAgIHBzYy0+QWRkKHNjLmFwW2ldKTsKCiAgICByZXR1cm4gKnBzYzsK
ICB9CgoKCiAgdmlydHVhbCBTQ29udGFpbmVyPFQ+JiBvcGVyYXRvcis9KGNvbnN0IFNDb250YWlu
ZXI8VD4gJnNjKQogIHsKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBz
Yy5zejsgaSsrKQogICAgICBBZGQoc2MuYXBbaV0pOwoKICAgIHJldHVybiAqdGhpczsKICB9CgoK
CiAgdmlydHVhbCBUJiBvcGVyYXRvcltdKGludCBpKSBjb25zdAogIHsKICAgIHJldHVybiBhcFtp
XTsKICB9CgoKCiAgdmlydHVhbCBpbnQgU2l6ZSgpIGNvbnN0CiAgewogICAgcmV0dXJuIHN6Owog
IH0KCgoKICB2aXJ0dWFsIGludCBBZGQoVCBhKQogIHsKICAgIGlmIChzeiA+PSBtZW1zaXplKQog
ICAgICBpZiAoR3JvdygpICE9IDApCiAgICAgICAgcmV0dXJuIC0xOwogICAgYXBbc3pdID0gYTsK
ICAgIHN6Kys7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0FmdGVyKGlu
dCBzbiwgVCBhKQogIHsKICAgIGlmICgoc24gPCAwKSB8fCAoc24gPiAoc3otMSkpKQogICAgICBy
ZXR1cm4gLTE7CgogICAgaWYgKHN6ID49IG1lbXNpemUpIHsKICAgICAgaWYgKEdyb3coKSAhPSAw
KQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICByZWdpc3RlciBpbnQgaTsKCiAgICBmb3Ig
KGkgPSBzejsgaSA+IChzbisxKTsgaS0tKQogICAgICBhcFtpXSA9IGFwW2ktMV07CgogICAgYXBb
c24rMV0gPSBhOwogICAgc3orKzsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdmlydHVhbCBpbnQg
SW5zQmVmb3JlKGludCBzYiwgVCBhKQogIHsKICAgIGlmICgoc2IgPCAwKSB8fCAoc2IgPiAoc3ot
MSkpKQogICAgICByZXR1cm4gLTE7CgogICAgaWYgKHN6ID49IG1lbXNpemUpIHsKICAgICAgaWYg
KEdyb3coKSAhPSAwKQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICByZWdpc3RlciBpbnQg
aTsKCiAgICBmb3IgKGkgPSBzejsgaSA+IHNiOyBpLS0pCiAgICAgIGFwW2ldID0gYXBbaS0xXTsK
CiAgICBhcFtzYl0gPSBhOwogICAgc3orKzsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdmlydHVh
bCBpbnQgRGVsZXRlKGludCBrKQogIHsKICAgIGlmIChzeiA8IDEpCiAgICAgIHJldHVybiAtMTsK
CiAgICBpZiAoKGsgPCAwKSB8fCAoayA+IChzei0xKSkpCiAgICAgIHJldHVybiAtMTsKCiAgICBy
ZWdpc3RlciBpbnQgaTsKCiAgICBhcFtrXS5+VCgpOwoKICAgIGZvciAoaSA9IGs7IGkgPCAoc3ot
MSk7IGkrKykKICAgICAgYXBbaV0gPSBhcFtpKzFdOwoKICAgIHN6LS07CgogICAgaWYgKG1pbm16
KCkgPCBtZW1zaXplKQogICAgICBTaHJpbmsoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdmly
dHVhbCB2b2lkIFN3YXAoaW50IGEsIGludCBiKQogIHsKICAgIFQgZWwgPSBhcFthXTsKCiAgICBh
cFthXSA9IGFwW2JdOwogICAgYXBbYl0gPSBlbDsKICB9CgoKCiAgdmlydHVhbCB2b2lkIFNvcnQo
cENvbXBmX3QgY29tcGYpCiAgewogICAgcXNvcnQoYXAsIHN6LCBzaXplb2YoVCksIGNvbXBmKTsK
ICB9CgoKCiAgdmlydHVhbCB2b2lkIENsZWFuU2FtZSgpCiAgewogICAgcmVnaXN0ZXIgaW50IGks
ajsKICAgIGZvciAoaSA9IDA7IGkgPCAoc3otMSk7IGkrKykKICAgICAgZm9yIChqID0gaSsxOyBq
IDwgc3o7IGorKykKICAgICAgaWYgKGFwW2ldID09IGFwW2pdKQogICAgICAgIERlbGV0ZShqLS0p
OwogIH0KCn07CgojIDkgImNkZWZzLmgiIDIKCgoKY2xhc3MgU0FyYzsKY2xhc3MgU0JveDsKY2xh
c3MgU0NpcmNsZTsKY2xhc3MgU0N1cnZlOwpjbGFzcyBTRXJyb3I7CmNsYXNzIFNJbmZMaW5lOwpj
bGFzcyBTSW50ZXJzZWN0OwpjbGFzcyBTSXNlY3Q7CmNsYXNzIFNMaW5lOwpjbGFzcyBTTWF0cml4
OwpjbGFzcyBTUGxhbmU7CmNsYXNzIFNQb2ludDsKY2xhc3MgU1JheTsKY2xhc3MgU1NlZzsKY2xh
c3MgU1NlZ0NvbnQ7CmNsYXNzIFNWZWN0b3I7CgplbnVtIFNfT3JpZW50IHtTX0NXID0gLTEsIFNf
Q0NXID0gMX07CgplbnVtIFNTZWdfdCB7U0xJTkUsIFNDSVJDTEUsIFNBUkMsIFNDVVJWRX07Cgp0
eXBlZGVmIFNDb250YWluZXJQPFNQb2ludD4gU1BvaW50Q29udDsKCmNsYXNzIFNQb2ludCB7CnBy
aXZhdGU6CiAgY2hhciBtX2xheWVyWzMzXTsKICBpbnQgbV9jb2xvcjsKcHVibGljOgogIGludCBm
bGFnczsKICBpbnQgYXBmbGFnczsKICB1bmlvbiB7CiAgICBkb3VibGUgcFszXTsKICAgIHN0cnVj
dCB7CiAgICAgIGRvdWJsZSB4OwogICAgICBkb3VibGUgeTsKICAgICAgZG91YmxlIHo7CiAgICB9
OwogIH07CgogIFNQb2ludChjb25zdCBTUG9pbnQmIHApOwogIFNQb2ludChkb3VibGUgeD0wLjAs
IGRvdWJsZSB5PTAuMCwgZG91YmxlIHo9MC4wKSB7dGhpcy0+eD14O3RoaXMtPnk9eTt0aGlzLT56
PXo7bV9sYXllclswXT0nXDAnO2FwZmxhZ3M9ZmxhZ3M9MDt9CiAgU1BvaW50KGNvbnN0IFNWZWN0
b3ImIHYpOwoKICBTUG9pbnQmIG9wZXJhdG9yPShjb25zdCBTUG9pbnQgJnApOwogIFNQb2ludCYg
b3BlcmF0b3I9KGNvbnN0IFNWZWN0b3IgJnYpOwogIGJvb2wgb3BlcmF0b3I9PShpbnQgb3JpZ2lu
KSBjb25zdCB7IHJldHVybiAhb3JpZ2luICYmICgqdGhpcyk9PVNQb2ludCgwLjApOyB9CiAgYm9v
bCBvcGVyYXRvciE9KGludCBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuICFvcmlnaW4gJiYgKCp0aGlz
KSE9U1BvaW50KDAuMCk7IH0KICBib29sIG9wZXJhdG9yPT0oY29uc3QgU1BvaW50JiBwKSBjb25z
dCB7cmV0dXJuICEoU3RvbENvbXAoeCxwLngpIHx8IFN0b2xDb21wKHkscC55KSB8fCBTdG9sQ29t
cCh6LHAueikpO30KICBib29sIG9wZXJhdG9yIT0oY29uc3QgU1BvaW50JiBwKSBjb25zdCB7cmV0
dXJuIFN0b2xDb21wKHgscC54KSB8fCBTdG9sQ29tcCh5LHAueSkgfHwgU3RvbENvbXAoeixwLnop
O30KICBTUG9pbnQgb3BlcmF0b3IrKGNvbnN0IFNQb2ludCYgcCkgY29uc3Q7CiAgU1BvaW50JiBv
cGVyYXRvcis9KGNvbnN0IFNQb2ludCYgcCk7CiAgU1BvaW50IG9wZXJhdG9yKyhjb25zdCBTVmVj
dG9yJiBwKTsKICBTUG9pbnQmIG9wZXJhdG9yKz0oY29uc3QgU1ZlY3RvciYgcCk7CiAgU1BvaW50
IG9wZXJhdG9yLSgpIGNvbnN0OwogIFNQb2ludCBvcGVyYXRvci0oY29uc3QgU1BvaW50JiBwKSBj
b25zdDsKICBTUG9pbnQgb3BlcmF0b3ItKGNvbnN0IFNWZWN0b3ImIHApIGNvbnN0OwogIFNQb2lu
dCYgb3BlcmF0b3ItPShjb25zdCBTUG9pbnQmIHApOwogIFNQb2ludCBvcGVyYXRvciooZG91Ymxl
IGspIGNvbnN0OwogIFNQb2ludCYgb3BlcmF0b3IqPShkb3VibGUgayk7CiAgU1BvaW50IG9wZXJh
dG9yLyhkb3VibGUgaykgY29uc3Q7CiAgU1BvaW50JiBvcGVyYXRvci89KGRvdWJsZSBrKTsKICBk
b3VibGUmIG9wZXJhdG9yW10oaW50IGkpOwoKICBkb3VibGUgZGlzdChjb25zdCBTUG9pbnQgJnAp
IGNvbnN0OwogIFNQb2ludCBQcm9qKGNvbnN0IFNQbGFuZSAmcCkgY29uc3Q7CiAgYm9vbCBJbnNp
ZGUoY29uc3QgU1NlZyAqcHMpIGNvbnN0OwoKICBjb25zdCBjaGFyKiBMYXllcigpIGNvbnN0IHty
ZXR1cm4gKGNvbnN0IGNoYXIgKikgbV9sYXllcjt9CiAgdm9pZCBTZXRMYXllcihjb25zdCBjaGFy
ICpzKSB7aWYgKHMpIHtzdHJuY3B5KG1fbGF5ZXIsIHMsIDMzLTEpOyBtX2xheWVyWzMzLTFdID0g
J1wwJzt9fQogIGludCBDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICB2b2lkIFNl
dENvbG9yKGludCBjKSB7IG1fY29sb3IgPSBjOyB9Cn07CgoKY2xhc3MgU1ZlY3RvciB7CnByaXZh
dGU6CiAgU1ZlY3RvciYgc2V0dzEoKTsKcHVibGljOgogIHVuaW9uIHsKICAgIGRvdWJsZSB2WzRd
OwogICAgc3RydWN0IHsKICAgICAgZG91YmxlIHg7CiAgICAgIGRvdWJsZSB5OwogICAgICBkb3Vi
bGUgejsKICAgICAgZG91YmxlIHc7CiAgICB9OwogIH07CgogIFNWZWN0b3IoZG91YmxlIHg9MC4w
LCBkb3VibGUgeT0wLjAsIGRvdWJsZSB6PTAuMCwgZG91YmxlIHc9MS4wKSB7dGhpcy0+eD14O3Ro
aXMtPnk9eTt0aGlzLT56PXo7dGhpcy0+dz13O30KICBTVmVjdG9yKGNvbnN0IFNWZWN0b3IgJnYp
IHt4PXYueDsgeT12Lnk7IHo9di56OyB3PXYudzt9CiAgU1ZlY3Rvcihjb25zdCBTUG9pbnQgJnAp
IHt4PXAueDsgeT1wLnk7IHo9cC56OyB3PTEuMDt9CiAgU1ZlY3Rvcihjb25zdCBTUG9pbnQgJmEs
IGNvbnN0IFNQb2ludCAmYikge3g9Yi54LWEueDt5PWIueS1hLnk7ej1iLnotYS56O3c9MS4wO30K
CiAgU1ZlY3RvciB3MSgpIGNvbnN0OwoKICBTVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgU1ZlY3Rv
ciAmdikge3g9di54OyB5PXYueTsgej12Lno7IHc9di53OyByZXR1cm4gKnRoaXM7fQogIFNWZWN0
b3ImIG9wZXJhdG9yPShjb25zdCBTUG9pbnQgJnApIHt4PXAueDsgeT1wLnk7IHo9cC56OyB3PTEu
MDtyZXR1cm4gKnRoaXM7fQogIGJvb2wgb3BlcmF0b3I9PShpbnQgb3JpZ2luKSBjb25zdCB7cmV0
dXJuICFvcmlnaW4gJiYgKCp0aGlzKT09U1ZlY3RvcigwLjApO30KICBib29sIG9wZXJhdG9yIT0o
aW50IG9yaWdpbikgY29uc3Qge3JldHVybiAhb3JpZ2luICYmICgqdGhpcykhPVNWZWN0b3IoMC4w
KTt9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNWZWN0b3IgJnYpIGNvbnN0OwogIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBTVmVjdG9yICZ2KSBjb25zdCB7cmV0dXJuICEoKnRoaXM9PXYpO30KICBT
VmVjdG9yIG9wZXJhdG9yKyhjb25zdCBTVmVjdG9yICZ2KSBjb25zdDsKICBTVmVjdG9yJiBvcGVy
YXRvcis9KGNvbnN0IFNWZWN0b3IgJnYpOwogIFNQb2ludCBvcGVyYXRvcisoY29uc3QgU1BvaW50
ICZwKSBjb25zdDsKICBTVmVjdG9yIG9wZXJhdG9yLSgpIGNvbnN0OwogIFNWZWN0b3Igb3BlcmF0
b3ItKGNvbnN0IFNWZWN0b3IgJnApIGNvbnN0OwogIFNWZWN0b3ImIG9wZXJhdG9yLT0oY29uc3Qg
U1ZlY3RvciAmcCk7CiAgU1ZlY3RvciBvcGVyYXRvciooZG91YmxlIGspIGNvbnN0OwogIFNWZWN0
b3ImIG9wZXJhdG9yKj0oZG91YmxlIGspOwogIFNWZWN0b3Igb3BlcmF0b3IvKGRvdWJsZSBrKSBj
b25zdDsKICBTVmVjdG9yJiBvcGVyYXRvci89KGRvdWJsZSBrKTsKICBkb3VibGUmIG9wZXJhdG9y
W10oaW50IGkpOwoKICBTVmVjdG9yIG9wZXJhdG9yKihjb25zdCBTVmVjdG9yICZwKSBjb25zdDsK
ICBkb3VibGUgZHAoY29uc3QgU1ZlY3RvciAmcCkgY29uc3Q7CgogIGRvdWJsZSBNYWcoKSBjb25z
dDsKICBTVmVjdG9yIFVuaXQoKSBjb25zdDsKCiAgU1ZlY3RvciBSaWdodChjb25zdCBTVmVjdG9y
ICZub3JtYWwpIGNvbnN0OwogIFNWZWN0b3IgTGVmdChjb25zdCBTVmVjdG9yICZub3JtYWwpIGNv
bnN0OwoKICBTVmVjdG9yIFJpZ2h0WFkoKSBjb25zdCB7IHJldHVybiBSaWdodChTVmVjdG9yKDAu
MCwwLjAsMS4wKSk7IH0KICBTVmVjdG9yIExlZnRYWSgpIGNvbnN0IHsgcmV0dXJuIExlZnQoU1Zl
Y3RvcigwLjAsMC4wLDEuMCkpOyB9CgogIGRvdWJsZSBBbmdsZShjb25zdCBTVmVjdG9yICZ2LCBj
b25zdCBTVmVjdG9yICZub3JtYWwgPSBTVmVjdG9yKDAuMCwwLjAsMS4wKSkgY29uc3Q7CgogIGRv
dWJsZSBBbmdsZVgoKSBjb25zdDsKICBkb3VibGUgQW5nbGVZKCkgY29uc3Q7CiAgZG91YmxlIEFu
Z2xlWigpIGNvbnN0OwoKICBkb3VibGUgQW5nbGVYWSgpIGNvbnN0OwogIGRvdWJsZSBBbmdsZVpY
KCkgY29uc3Q7CiAgZG91YmxlIEFuZ2xlWVooKSBjb25zdDsKCiAgU1ZlY3RvciBBcmJYQXhpcygp
IGNvbnN0OwogIFNWZWN0b3IgQXJiWUF4aXMoKSBjb25zdDsKCiAgU1ZlY3RvciBQcm9qKGNvbnN0
IFNWZWN0b3IgJnYpIGNvbnN0OwogIFNWZWN0b3IgUHJvaihjb25zdCBTUGxhbmUgJnBsYW5lKSBj
b25zdDsKICBTVmVjdG9yIFByb2ooY29uc3QgU0luZkxpbmUgJmwpIGNvbnN0Owp9OwoKCmNvbnN0
IFNWZWN0b3IgU19JKDEuMCwwLjAsMC4wKTsKY29uc3QgU1ZlY3RvciBTX0ooMC4wLDEuMCwwLjAp
Owpjb25zdCBTVmVjdG9yIFNfSygwLjAsMC4wLDEuMCk7CgoKY2xhc3MgU1BsYW5lIHsKcHJpdmF0
ZToKICBTVmVjdG9yIG1fbm9ybWFsOwogIFNQb2ludCBtX3B0b25wbGFuZTsKcHVibGljOgogIFNQ
bGFuZSgpIHttX25vcm1hbD1TX0s7IG1fcHRvbnBsYW5lPVNQb2ludCgwLjApO30KICBTUGxhbmUo
Y29uc3QgU1BsYW5lICZhKSB7IG1fbm9ybWFsID0gYS5tX25vcm1hbC5Vbml0KCk7IG1fcHRvbnBs
YW5lID0gYS5tX3B0b25wbGFuZTsgfQogIFNQbGFuZShjb25zdCBTVmVjdG9yICZuLCBjb25zdCBT
UG9pbnQgJnApIHttX25vcm1hbD1uLlVuaXQoKTsgbV9wdG9ucGxhbmU9cDt9CiAgU1BsYW5lKGNv
bnN0IFNQb2ludCAmcCwgY29uc3QgU1ZlY3RvciAmbikge21fbm9ybWFsPW4uVW5pdCgpOyBtX3B0
b25wbGFuZT1wO30KCiAgU1BsYW5lJiBvcGVyYXRvcj0oY29uc3QgU1BsYW5lICZwKSB7bV9ub3Jt
YWw9cC5tX25vcm1hbC5Vbml0KCk7IG1fcHRvbnBsYW5lPXAubV9wdG9ucGxhbmU7IHJldHVybiAq
dGhpczt9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNQbGFuZSAmcCkgY29uc3Qge3JldHVybiBt
X25vcm1hbC5Vbml0KCk9PXAubV9ub3JtYWwuVW5pdCgpICYmIE9uUGxhbmUocC5tX3B0b25wbGFu
ZSk7fQoKICBTVmVjdG9yIEdldE5vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsOyB9CiAg
U1BvaW50IEdldFB0T25QbGFuZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRvbnBsYW5lOyB9CiAgdm9p
ZCBTZXROb3JtYWwoY29uc3QgU1ZlY3RvciAmdikgeyBtX25vcm1hbCA9IHYuVW5pdCgpOyB9CiAg
dm9pZCBTZXRQdE9uUGxhbmUoY29uc3QgU1BvaW50ICZwKSB7IG1fcHRvbnBsYW5lID0gcDsgfQoK
ICBpbnQgVHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pOwoKICBTUG9pbnQgR2V0UmFuZFAoKSBj
b25zdDsKICBTVmVjdG9yIEdldFJhbmRWKCkgY29uc3Q7CgogIGRvdWJsZSBkaXN0KGNvbnN0IFNQ
b2ludCAmcCkgY29uc3Q7CgogIGJvb2wgT25QbGFuZShjb25zdCBTUG9pbnQgJnApIGNvbnN0Owog
IGJvb2wgT25QbGFuZShjb25zdCBTSW5mTGluZSAmbCkgY29uc3Q7CiAgYm9vbCBPblBsYW5lKGNv
bnN0IFNQbGFuZSAmcCkgY29uc3Q7CiAgYm9vbCBQYXJhbGxlbChjb25zdCBTSW5mTGluZSAmbCkg
Y29uc3Q7CiAgYm9vbCBQYXJhbGxlbChjb25zdCBTUGxhbmUgJnApIGNvbnN0OwogIGJvb2wgSW50
ZXJzZWN0KGNvbnN0IFNJbmZMaW5lICZsLCBTUG9pbnQgJnAsIGRvdWJsZSAmdGwpIGNvbnN0Owog
IGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNQbGFuZSAmcGxhbmUsIFNJbmZMaW5lICZsKSBjb25zdDsK
Cn07CgoKY29uc3QgU1BsYW5lIFNYWVBMQU5FKFNQb2ludCgwLjApLCBTX0spOwpjb25zdCBTUGxh
bmUgU1pYUExBTkUoU1BvaW50KDAuMCksIFNfSik7CmNvbnN0IFNQbGFuZSBTWVpQTEFORShTUG9p
bnQoMC4wKSwgU19JKTsKCgpjbGFzcyBTQm94IHsKcHJpdmF0ZToKICBTUG9pbnQgbV9wOwogIFNW
ZWN0b3IgbV92OwogIGJvb2wgbV9jdXJyZW50OwpwdWJsaWM6CiAgU0JveCgpIHttX2N1cnJlbnQg
PSBmYWxzZTt9CiAgU0JveChjb25zdCBTU2VnICpwcyk7CiAgU0JveChjb25zdCBTQm94ICZyKSB7
bV9wID0gci5tX3A7IG1fdiA9IHIubV92OyBtX2N1cnJlbnQgPSByLm1fY3VycmVudDt9CgogIFNC
b3gmIG9wZXJhdG9yPShjb25zdCBTQm94JiByKSB7bV9wID0gci5tX3A7IG1fdiA9IHIubV92OyBt
X2N1cnJlbnQgPSByLm1fY3VycmVudDtyZXR1cm4gKnRoaXM7fQogIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBTQm94JiBiKSBjb25zdCB7cmV0dXJuIChtX3A9PWIubV9wICYmIG1fdj09Yi5tX3YpIHx8
IChtX3A9PWIubV9wK2IubV92ICYmIG1fdj09LWIubV92KTt9CgogIGRvdWJsZSBabGVuKCkgY29u
c3Qge3JldHVybiBmYWJzKG1fdi56KTt9CiAgZG91YmxlIFlsZW4oKSBjb25zdCB7cmV0dXJuIGZh
YnMobV92LnkpO30KICBkb3VibGUgWGxlbigpIGNvbnN0IHtyZXR1cm4gZmFicyhtX3YueCk7fQog
IFNWZWN0b3IgR2V0VigpIGNvbnN0IHtyZXR1cm4gbV92O30KICBTUG9pbnQgR2V0UCgpIGNvbnN0
IHtyZXR1cm4gbV9wO30KCiAgYm9vbCBPdmVybGFwWChjb25zdCBTQm94ICZyKSBjb25zdDsKICBi
b29sIE92ZXJsYXBZKGNvbnN0IFNCb3ggJnIpIGNvbnN0OwogIGJvb2wgT3ZlcmxhcFooY29uc3Qg
U0JveCAmcikgY29uc3Q7CgogIGJvb2wgSW5zaWRlWChjb25zdCBTQm94ICZyKSBjb25zdDsKICBi
b29sIEluc2lkZVkoY29uc3QgU0JveCAmcikgY29uc3Q7CiAgYm9vbCBJbnNpZGVaKGNvbnN0IFNC
b3ggJnIpIGNvbnN0OwoKICBib29sIE92ZXJsYXBYWShjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0
dXJuIE92ZXJsYXBYKHIpICYmIE92ZXJsYXBZKHIpO30KICBib29sIE92ZXJsYXBZWihjb25zdCBT
Qm94ICZyKSBjb25zdCB7cmV0dXJuIE92ZXJsYXBZKHIpICYmIE92ZXJsYXBaKHIpO30KICBib29s
IE92ZXJsYXBaWChjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJuIE92ZXJsYXBaKHIpICYmIE92
ZXJsYXBYKHIpO30KCiAgYm9vbCBJbnNpZGVYWShjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJu
IEluc2lkZVgocikgJiYgSW5zaWRlWShyKTt9CiAgYm9vbCBJbnNpZGVZWihjb25zdCBTQm94ICZy
KSBjb25zdCB7cmV0dXJuIEluc2lkZVkocikgJiYgSW5zaWRlWihyKTt9CiAgYm9vbCBJbnNpZGVa
WChjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJuIEluc2lkZVoocikgJiYgSW5zaWRlWChyKTt9
CgogIGJvb2wgT3ZlcmxhcChjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJuIE92ZXJsYXBYWShy
KSAmJiBPdmVybGFwWVoocikgJiYgT3ZlcmxhcFpYKHIpO30KICBib29sIEluc2lkZShjb25zdCBT
Qm94ICZyKSBjb25zdCB7cmV0dXJuIEluc2lkZVhZKHIpICYmIEluc2lkZVlaKHIpICYmIEluc2lk
ZVpYKHIpO30KCiAgU0JveCYgVW5pb24oY29uc3QgU0JveCAmYik7CgogIFNQb2ludCBDZW50ZXIo
KSBjb25zdCB7cmV0dXJuIG1fcCttX3YqMC41O30KICB2b2lkIEdldDhQb2ludHMoU1BvaW50ICpw
cCkgY29uc3Q7CiAgdm9pZCBHZXRCb3hDb250KFNTZWdDb250ICZjYykgY29uc3Q7Cgp9OwoKCmNs
YXNzIFNTZWcgewpwcm90ZWN0ZWQ6CiAgU1BsYW5lIG1fcGxhbmU7CiAgY2hhciBtX2xheWVyWzMz
XTsKICBpbnQgbV9jb2xvcjsKICBTQm94IG1fYm94OwogIGRvdWJsZSBtX2FyZWE7CiAgZG91Ymxl
IG1fbGVuZ3RoOwogIGludCBtX2ZsYWdzOwogIGZyaWVuZCBjbGFzcyBTQ3VydmU7CnB1YmxpYzoK
CiAgZG91YmxlIG1fdTsKICBTU2VnICpwcmV2LCAqbmV4dDsKCiAgaW50IGFwZmxhZ3M7CgogIHZp
cnR1YWwgflNTZWcoKSB7bV9mbGFncz0wLG1fYXJlYT1tX2xlbmd0aD0wLjAsKm1fbGF5ZXI9J1ww
Jzt9CgogIHZpcnR1YWwgU1NlZ190IFR5cGUoKSBjb25zdCA9IDA7CiAgdmlydHVhbCBjb25zdCBj
aGFyKiBMYXllcigpIGNvbnN0IHtyZXR1cm4gKGNvbnN0IGNoYXIgKikgbV9sYXllcjt9CiAgdmly
dHVhbCB2b2lkIFNldExheWVyKGNvbnN0IGNoYXIgKnMpIHtpZiAocykge3N0cm5jcHkobV9sYXll
ciwgcywgMzMtMSk7bV9sYXllclszMy0xXT0nXDAnO319CiAgdmlydHVhbCBpbnQgR2V0Q29sb3Io
KSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAgdmlydHVhbCB2b2lkIFNldENvbG9yKGludCBj
KSB7IG1fY29sb3IgPSBjOyB9CiAgdmlydHVhbCB2b2lkIFNldGFwZmxhZ3NCaXQoaW50IGJpdG1h
c2ssIGludCB2YWwpIHtpZiAodmFsKSBhcGZsYWdzIHw9IGJpdG1hc2s7IGVsc2UgYXBmbGFncyAm
PSB+Yml0bWFzazt9CiAgdmlydHVhbCBpbnQgVGVzdGFwZmxhZ3NCaXQoaW50IGJpdG1hc2spIGNv
bnN0IHtyZXR1cm4gYXBmbGFncyAmIGJpdG1hc2s7fQoKICB2aXJ0dWFsIHZvaWQgVXBkYXRlKCkg
PSAwOwoKICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTU2VnJiBzKSBjb25zdCB7cmV0
dXJuIGZhbHNlO30KCgogIHZpcnR1YWwgU1BvaW50IFBvaW50KGRvdWJsZSB1KSBjb25zdCA9IDA7
CiAgdmlydHVhbCBTUG9pbnQgU3RhcnRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIFBvaW50KDAuMCk7
IH0KICB2aXJ0dWFsIFNQb2ludCBNaWRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIFBvaW50KDAuNSk7
IH0KICB2aXJ0dWFsIFNQb2ludCBFbmRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIFBvaW50KDEuMCk7
IH0KICB2aXJ0dWFsIFNWZWN0b3IgR2V0Tm9ybWFsKCkgY29uc3QgeyByZXR1cm4gbV9wbGFuZS5H
ZXROb3JtYWwoKTt9CgogIHZpcnR1YWwgU0JveCBHZXRCb3goKSBjb25zdCB7IHJldHVybiBtX2Jv
eDsgfQoKICB2aXJ0dWFsIGRvdWJsZSBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsg
fQogIHZpcnR1YWwgZG91YmxlIEFyZWEoKSBjb25zdCB7IHJldHVybiBtX2FyZWE7IH0KICB2aXJ0
dWFsIHZvaWQgVHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pID0gMDsKICB2aXJ0dWFsIFNWZWN0
b3IgVGFuZ2VudChkb3VibGUgdSkgY29uc3QgPSAwOwogIHZpcnR1YWwgU1BsYW5lIEdldFBsYW5l
KCkgY29uc3QgeyByZXR1cm4gbV9wbGFuZTsgfQogIHZpcnR1YWwgdm9pZCBTZXRQbGFuZShjb25z
dCBTUGxhbmUgJnBsKSA9IDA7CgogIHZpcnR1YWwgU1NlZyogUHJvaihjb25zdCBTUGxhbmUgJnBs
KSBjb25zdCA9IDA7CiAgdmlydHVhbCBTU2VnKiBUcmltU3RhcnQoZG91YmxlIHUpIGNvbnN0ID0g
MDsKICB2aXJ0dWFsIFNTZWcqIFRyaW1FbmQoZG91YmxlIHUpIGNvbnN0ID0gMDsKICB2aXJ0dWFs
IFNTZWcqIEdldFBhcnQoZG91YmxlIHUwLCBkb3VibGUgdTEpIGNvbnN0ID0gMDsKICB2aXJ0dWFs
IGludCBPZmZzZXQoU1NlZ0NvbnQgJmNhLCBkb3VibGUgb2ZmcywgZG91YmxlIHRpbnkgPSBTU19U
SU5ZKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgdm9pZCBTZXRTcChjb25zdCBTUG9pbnQgJnApID0g
MDsKICB2aXJ0dWFsIHZvaWQgU2V0TXAoY29uc3QgU1BvaW50ICZwKSA9IDA7CiAgdmlydHVhbCB2
b2lkIFNldEVwKGNvbnN0IFNQb2ludCAmcCkgPSAwOwogIHZpcnR1YWwgaW50IFNldDNQdHMoY29u
c3QgU1BvaW50ICZhLCBjb25zdCBTUG9pbnQgJmIsIGNvbnN0IFNQb2ludCAmYykgPSAwOwogIHZp
cnR1YWwgaW50IFNldEJ5UHRzKGNvbnN0IFNDb250YWluZXJQPFNQb2ludD4gJnNldHApID0gMDsK
CiAgdmlydHVhbCBib29sIEluc2lkZShjb25zdCBTU2VnICpwcykgY29uc3QgPSAwOwogIHZpcnR1
YWwgaW50IEFidXRCKGNvbnN0IFNTZWcgKnBzLCBTU2VnQ29udCAmY2MpIGNvbnN0ID0gMDsKICB2
aXJ0dWFsIGludCBBb3JCKGNvbnN0IFNTZWcgKnBzLCBTU2VnQ29udCAmY2MpIGNvbnN0ID0gMDsK
CiAgdmlydHVhbCBpbnQgT3JpZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQogIHZpcnR1YWwgdm9p
ZCBSZXZlcnNlKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBTZXRPcmllbnQoaW50IG8pIHsgfQoKICB2
aXJ0dWFsIGJvb2wgUG9pbnRPblNlZyhjb25zdCBTUG9pbnQgJnAsIGRvdWJsZSAmdSwgU1BvaW50
ICZhKSBjb25zdCA9IDA7CiAgdmlydHVhbCBib29sIEludGVyc2VjdChjb25zdCBTU2VnICpzZWcs
IFNJbnRlcnNlY3QgJmlzZWN0cykgY29uc3QgPSAwOwoKICB2aXJ0dWFsIFNTZWcqIGNsb25lKCkg
Y29uc3QgPSAwOwoKfTsKCgpjbGFzcyBTRXJyb3IgewpwdWJsaWM6CiAgZW51bSBFcnJvckluZGV4
IHtCQURVX1BPSU5ULCBCQURVX1RBTkdFTlQsIEJBRE1BRywgQkFEU0VHX0JFTE9OR1N9OwogIGNv
bnN0IGNoYXIgKkVycm9yTWVzOwoKICBTRXJyb3IoRXJyb3JJbmRleCBpKSB7CiAgICBjb25zdCBz
dGF0aWMgY2hhciAqZW1bXSA9IHsKICAgICAgInNnZW9tIGxpYnJhcnk6IEJhZCB1IHZhbHVlIGZy
b20gUG9pbnQoKSAodSA+IDEuMCBvciB1IDwgMC4wKS5cbiIsCiAgICAgICJzZ2VvbSBsaWJyYXJ5
OiBCYWQgdSB2YWx1ZSBmcm9tIFRhbmdlbnQoKSAodSA+IDEuMCBvciB1IDwgMC4wKS5cbiIsCiAg
ICAgICJzZ2VvbSBsaWJyYXJ5OiBWZWN0b3Igd2l0aCBtYWduaXR1ZGUgMC5cbiIsCiAgICAgICJz
Z2VvbSBsaWJyYXJ5OiBTZWdtZW50IDB4MCBpbiBVQmVsb25ncygpLlxuIgogICAgfTsKICAgIEVy
cm9yTWVzID0gZW1baV07CiAgfQp9OwoKIyAyICJib3guY3BwIiAyCgojIDUgImNpcmNhcmMuaCIg
MQojIDExICJtYXRyaXguaCIgMQpjbGFzcyBTTWF0cml4IHsKcHVibGljOgogIGRvdWJsZSBtWzRd
WzRdOwoKICBTTWF0cml4KCk7CiAgU01hdHJpeChkb3VibGUgYSk7CiAgU01hdHJpeChjb25zdCBT
TWF0cml4ICZiKTsKCiAgU01hdHJpeCBvcGVyYXRvcisoY29uc3QgU01hdHJpeCAmYikgY29uc3Q7
CiAgU01hdHJpeCBvcGVyYXRvci0oY29uc3QgU01hdHJpeCAmYikgY29uc3Q7CiAgU01hdHJpeCBv
cGVyYXRvci0oKSBjb25zdDsKICBTTWF0cml4IG9wZXJhdG9yKihjb25zdCBTTWF0cml4ICZiKSBj
b25zdDsKICBTVmVjdG9yIG9wZXJhdG9yKihjb25zdCBTVmVjdG9yICZ2KSBjb25zdDsKICBTUG9p
bnQgb3BlcmF0b3IqKGNvbnN0IFNQb2ludCAmcCkgY29uc3Q7CiAgU01hdHJpeCYgb3BlcmF0b3I9
KGNvbnN0IFNNYXRyaXggJmIpOwogIGRvdWJsZSYgb3BlcmF0b3IoKShpbnQgaSwgaW50IGopOwoK
ICBTTWF0cml4IFNldFNjYWxlKGRvdWJsZSBhKSBjb25zdDsKICBTTWF0cml4IFNldFNjYWxlKGNv
bnN0IFNWZWN0b3IgJnYpIGNvbnN0OwoKICBTTWF0cml4IFNldFRyYW5zbChjb25zdCBTVmVjdG9y
ICZ2KSBjb25zdDsKCiAgU01hdHJpeCBTZXRSb3RYKGRvdWJsZSBhKSBjb25zdDsKICBTTWF0cml4
IFNldFJvdFkoZG91YmxlIGEpIGNvbnN0OwogIFNNYXRyaXggU2V0Um90Wihkb3VibGUgYSkgY29u
c3Q7CiAgU01hdHJpeCBTZXRSb3QoY29uc3QgU1ZlY3RvciAmdiwgZG91YmxlIGEpIGNvbnN0OwoK
ICB2b2lkIFNldFJvdyhpbnQgciwgY29uc3QgU1ZlY3RvciAmdik7CiAgdm9pZCBTZXRDb2woaW50
IGMsIGNvbnN0IFNWZWN0b3IgJnYpOwoKICBTTWF0cml4IFRyYW5zZlRvSyhjb25zdCBTVmVjdG9y
ICZ2KSBjb25zdDsKICBTTWF0cml4IFRyYW5zZihjb25zdCBTVmVjdG9yICZmcm9tLCBjb25zdCBT
VmVjdG9yICZ0bykgY29uc3Q7CiAgU01hdHJpeCBUcmFuc2ZUb0koY29uc3QgU1ZlY3RvciB2KSBj
b25zdCB7IHJldHVybiBUcmFuc2YodiwgU19JKTsgfQogIFNNYXRyaXggVHJhbnNmVG9KKGNvbnN0
IFNWZWN0b3IgdikgY29uc3QgeyByZXR1cm4gVHJhbnNmKHYsIFNfSik7IH0KCiAgU01hdHJpeCBU
cmFuc3Bvc2UoKSBjb25zdDsKICBpbnQgTFVQKFNNYXRyaXggJkwsIFNNYXRyaXggJlUsIFNNYXRy
aXggJlApIGNvbnN0OwogIGludCBTb2x2ZUxVUChjb25zdCBTVmVjdG9yICZiLCBTVmVjdG9yICZ4
LCBjb25zdCBTTWF0cml4ICZMLCBjb25zdCBTTWF0cml4ICZVLCBjb25zdCBTTWF0cml4ICZQKSBj
b25zdDsKICBpbnQgU29sdmUoY29uc3QgU1ZlY3RvciAmYiwgU1ZlY3RvciAmeCkgY29uc3Q7CiAg
aW50IEludmVyc2UoU01hdHJpeCAmbSkgY29uc3Q7Cn07CgojIDUgImNpcmNhcmMuaCIgMgoKY2xh
c3MgU0NpcmNsZSA6IHB1YmxpYyBTU2VnIHsKcHJpdmF0ZToKICBTTWF0cml4IG1fTTsKICBTUG9p
bnQgbV9jdHI7CiAgZG91YmxlIG1fcmFkOwogIGludCBtX3N3cDsKICBkb3VibGUgY2FsY0FyZWEo
KTsKICBkb3VibGUgY2FsY1BlcmltKCk7CiAgdm9pZCBjb3B5ZXNzKFNDaXJjbGUgJmMpOwogIHZv
aWQgU2V0Q3RyQW5kUGxhbmUoY29uc3QgU1BvaW50ICZjZW50ZXIsIGNvbnN0IFNQbGFuZSAmcGwp
OwoKcHVibGljOgogIGZyaWVuZCBjbGFzcyBTQXJjOwogIGZyaWVuZCBjbGFzcyBTQ3VydmU7Cgog
IFNDaXJjbGUoKTsKICBTQ2lyY2xlKGNvbnN0IFNQb2ludCAmYywgZG91YmxlIHIgPSAxLjAsIGNv
bnN0IFNQbGFuZSAmcGxhbmUgPSBTWFlQTEFORSk7CiAgU0NpcmNsZShjb25zdCBTQ2lyY2xlICZj
aXJjKTsKICBTQ2lyY2xlKGNvbnN0IFNBcmMgJmFyYyk7CiAgU0NpcmNsZShjb25zdCBTUG9pbnQg
JnNwLCBjb25zdCBTUG9pbnQgJm1wLCBjb25zdCBTUG9pbnQgJmVwKSB7IFNldExheWVyKCIiKTtt
X2ZsYWdzPWFwZmxhZ3M9MDtwcmV2PW5leHQ9MDsgU2V0M1B0cyhzcCwgbXAsIGVwKTsgfQoKICBk
b3VibGUgQW5nbGVBdFUoZG91YmxlIHUpIGNvbnN0IHsgZG91YmxlIGE9U21vZDJwaShTXzJQSStT
bW9kMnBpKHUqU18yUEkpKTsgcmV0dXJuIG1fc3dwPT1TX0NDVyA/IGEgOiBTXzJQSS1hO30KICBk
b3VibGUgVUF0QW5nbGUoZG91YmxlIGFuZ2xlKSBjb25zdCB7IGRvdWJsZSB1PVNtb2QycGkoYW5n
bGUpL1NfMlBJOyByZXR1cm4gbV9zd3A9PVNfQ0NXID8gdSA6IDEuMC11OyB9CgogIFNTZWdfdCBU
eXBlKCkgY29uc3QgeyByZXR1cm4gU0NJUkNMRTsgfQoKICBkb3VibGUgUGVyaW0oKSBjb25zdCB7
cmV0dXJuIG1fbGVuZ3RoO30KCiAgU1BvaW50IEdldEN0cigpIGNvbnN0IHtyZXR1cm4gbV9jdHI7
fQogIGRvdWJsZSBHZXRSYWQoKSBjb25zdCB7cmV0dXJuIG1fcmFkO30KICB2b2lkIFNldFBsYW5l
KGNvbnN0IFNQbGFuZSAmcGwsIGNvbnN0IFNQb2ludCAmY2VudGVyKSB7U2V0Q3RyQW5kUGxhbmUo
Y2VudGVyLCBwbCk7IFVwZGF0ZSgpO30KICB2b2lkIFNldFBsYW5lKGNvbnN0IFNQbGFuZSAmcGwp
IHsgU2V0UGxhbmUocGwsIG1fY3RyKTsgVXBkYXRlKCk7IH0KICB2b2lkIFNldFJhZChkb3VibGUg
cmFkKSB7IG1fcmFkID0gcmFkOyBVcGRhdGUoKTsgfQogIHZvaWQgU2V0Q3RyKGNvbnN0IFNQb2lu
dCAmcCkgeyBTZXRDdHJBbmRQbGFuZShwLCBtX3BsYW5lKTsgVXBkYXRlKCk7IH0KCiAgU0NpcmNs
ZSYgb3BlcmF0b3I9KGNvbnN0IFNDaXJjbGUgJmMpOwogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
Q2lyY2xlICZjKSBjb25zdCB7cmV0dXJuIG1fY3RyPT1jLm1fY3RyICYmIFN0b2xDb21wKG1fcmFk
LGMubV9yYWQpPT0wICYmIG1fcGxhbmU9PWMubV9wbGFuZTsgfQoKICB2b2lkIFVwZGF0ZSgpIHtj
YWxjQXJlYSgpOyBjYWxjUGVyaW0oKTttX2JveD1TQm94KHRoaXMpO30KCiAgU1BvaW50IFBvaW50
KGRvdWJsZSB1KSBjb25zdCB7cmV0dXJuIFBvaW50QXRBKEFuZ2xlQXRVKHUpKTt9CiAgU1BvaW50
IFBvaW50QXRBKGRvdWJsZSBhbmdsZSkgY29uc3Q7CiAgdm9pZCBUcmFuc2Zvcm0oY29uc3QgU01h
dHJpeCAmbSk7CiAgU1ZlY3RvciBUYW5nZW50KGRvdWJsZSB1KSBjb25zdDsKCiAgU1NlZyogUHJv
aihjb25zdCBTUGxhbmUgJnBsKSBjb25zdCB7cmV0dXJuIG5ldyBTQ2lyY2xlKG1fY3RyLlByb2oo
cGwpLCBtX3JhZCwgcGwpO30KICBTU2VnKiBUcmltU3RhcnQoZG91YmxlIHUpIGNvbnN0OwogIFNT
ZWcqIFRyaW1FbmQoZG91YmxlIHUpIGNvbnN0OwogIFNTZWcqIEdldFBhcnQoZG91YmxlIHUwLCBk
b3VibGUgdTEpIGNvbnN0OwogIGludCBPZmZzZXQoU1NlZ0NvbnQgJmNhLCBkb3VibGUgb2Zmcywg
ZG91YmxlIHRpbnkgPSBTU19USU5ZKSBjb25zdDsKCiAgdm9pZCBTZXRTcChjb25zdCBTUG9pbnQg
JnApOwogIHZvaWQgU2V0TXAoY29uc3QgU1BvaW50ICZwKTsKICB2b2lkIFNldEVwKGNvbnN0IFNQ
b2ludCAmcCkgeyBTZXRTcChwKTsgfQogIGludCBTZXQzUHRzKGNvbnN0IFNQb2ludCAmYSwgY29u
c3QgU1BvaW50ICZiLCBjb25zdCBTUG9pbnQgJmMpOwogIGludCBTZXRCeVB0cyhjb25zdCBTQ29u
dGFpbmVyUDxTUG9pbnQ+ICZzZXRwKTsKCiAgaW50IE9yaWVudCgpIGNvbnN0IHtyZXR1cm4gbV9z
d3A7IH0KICB2b2lkIFJldmVyc2UoKSB7IG1fc3dwID0gbV9zd3A9PVNfQ0NXID8gU19DVyA6IFNf
Q0NXOyB9CiAgdm9pZCBGbGlwKCkgeyBTUGxhbmUgcGwgPSBTUGxhbmUobV9jdHIsIC1HZXROb3Jt
YWwoKSk7IFNldFBsYW5lKHBsLCBtX2N0cik7IH0KICB2b2lkIFNldE9yaWVudChpbnQgbykgeyBp
ZiAoT3JpZW50KCkgIT0gbykgUmV2ZXJzZSgpOyB9CgogIGJvb2wgUG9pbnRPblNlZyhjb25zdCBT
UG9pbnQgJnAsIGRvdWJsZSAmdSwgU1BvaW50ICZhKSBjb25zdDsKCiAgYm9vbCBJbnNpZGUoY29u
c3QgU1NlZyAqcHMpIGNvbnN0OwogIGludCBBYnV0Qihjb25zdCBTU2VnICpwQiwgU1NlZ0NvbnQg
JmNjKSBjb25zdDsKICBpbnQgQW9yQihjb25zdCBTU2VnICpwQiwgU1NlZ0NvbnQgJmNjKSBjb25z
dDsKCiAgYm9vbCBJbnRlcnNlY3QoY29uc3QgU0luZkxpbmUgJmwsIFNJbnRlcnNlY3QgJmlzZWN0
cykgY29uc3Q7CiAgYm9vbCBJbnRlcnNlY3QoY29uc3QgU1JheSAmciwgU0ludGVyc2VjdCAmaXNl
Y3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChjb25zdCBTTGluZSAmbCwgU0ludGVyc2VjdCAm
aXNlY3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChjb25zdCBTQ2lyY2xlICZjLCBTSW50ZXJz
ZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNBcmMgJmFyYywgU0lu
dGVyc2VjdCAmaXNlY3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChjb25zdCBTU2VnICpwc2Vn
LCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwoKICBTU2VnKiBjbG9uZSgpIGNvbnN0IHsgcmV0
dXJuIG5ldyBTQ2lyY2xlKCp0aGlzKTsgfQoKfTsKCgpjbGFzcyBTQXJjIDogcHVibGljIFNTZWcg
ewpwcml2YXRlOgogIFNNYXRyaXggbV9NOwogIFNQb2ludCBtX2N0cjsKICBkb3VibGUgbV9yYWQ7
CiAgZG91YmxlIG1fc2E7CiAgZG91YmxlIG1fc3dwOwogIGRvdWJsZSBjYWxjQXJlYSgpOwogIGRv
dWJsZSBjYWxjUGVyaW0oKTsKICB2b2lkIGNvcHllc3MoU0FyYyAmYSk7CiAgdm9pZCBTZXRDdHJB
bmRQbGFuZShjb25zdCBTUG9pbnQgJmNlbnRlciwgY29uc3QgU1BsYW5lICZwbCk7CgpwdWJsaWM6
CiAgZnJpZW5kIGNsYXNzIFNDaXJjbGU7CiAgZnJpZW5kIGNsYXNzIFNDdXJ2ZTsKCiAgU0FyYygp
OwogIFNBcmMoY29uc3QgU1BvaW50ICZjLCBkb3VibGUgciwgZG91YmxlIHNhLCBkb3VibGUgc3dw
LCBjb25zdCBTUGxhbmUgJnBsYW5lID0gU1hZUExBTkUpOwogIFNBcmMoY29uc3QgU0FyYyAmYXJj
KTsKICBTQXJjKGNvbnN0IFNQb2ludCAmc3AsIGNvbnN0IFNQb2ludCAmbXAsIGNvbnN0IFNQb2lu
dCAmZXApIHtTZXRMYXllcigiIik7bV9mbGFncz1hcGZsYWdzPTA7cHJldj1uZXh0PTA7U2V0M1B0
cyhzcCwgbXAsIGVwKTt9CiAgU0FyYyhjb25zdCBTUG9pbnQgJmMsIGRvdWJsZSByLCBjb25zdCBT
VmVjdG9yICZzdiwgZG91YmxlIHN3cCwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKTsK
ICBTQXJjKGNvbnN0IFNQb2ludCAmYywgZG91YmxlIHIsIGNvbnN0IFNWZWN0b3IgJnN2LCBjb25z
dCBTVmVjdG9yICZldiwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKTsKCiAgZG91Ymxl
IEFuZ2xlQXRVKGRvdWJsZSB1KSBjb25zdCB7IHJldHVybiBTbW9kMnBpKFNfMlBJICsgbV9zYSAr
IFNtb2QycGkodSptX3N3cCkpOyB9CiAgZG91YmxlIFVBdEFuZ2xlKGRvdWJsZSBhbmdsZSkgY29u
c3Q7CgogIGJvb2wgQU9uU3dlZXAoZG91YmxlIGEpIGNvbnN0OwogIGJvb2wgQUluU3dlZXAoZG91
YmxlIGEpIGNvbnN0OwoKICBTU2VnX3QgVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFNBUkM7IH0KCiAg
ZG91YmxlIFBlcmltKCkgY29uc3Qge3JldHVybiBtX2xlbmd0aDt9CgogIFNQb2ludCBHZXRDdHIo
KSBjb25zdCB7cmV0dXJuIG1fY3RyO30KICBkb3VibGUgR2V0UmFkKCkgY29uc3Qge3JldHVybiBt
X3JhZDt9CiAgZG91YmxlIEdldFNhKCkgY29uc3Qge3JldHVybiBtX3NhO30KICBkb3VibGUgR2V0
U3dwKCkgY29uc3Qge3JldHVybiBtX3N3cDt9CiAgdm9pZCBTZXRQbGFuZShjb25zdCBTUGxhbmUg
JnBsLCBjb25zdCBTUG9pbnQgJmNlbnRlcikge1NldEN0ckFuZFBsYW5lKGNlbnRlciwgcGwpOyBV
cGRhdGUoKTt9CiAgdm9pZCBTZXRQbGFuZShjb25zdCBTUGxhbmUgJnBsKSB7IFNldFBsYW5lKHBs
LCBtX2N0cik7IFVwZGF0ZSgpOyB9CiAgdm9pZCBTZXRSYWQoZG91YmxlIHJhZCkgeyBtX3JhZCA9
IHJhZDsgVXBkYXRlKCk7IH0KICB2b2lkIFNldEN0cihjb25zdCBTUG9pbnQgJnApIHsgU2V0Q3Ry
QW5kUGxhbmUocCwgbV9wbGFuZSk7IFVwZGF0ZSgpOyB9CgogIFNBcmMmIG9wZXJhdG9yPShjb25z
dCBTQXJjICZhKTsKICBib29sIG9wZXJhdG9yPT0oY29uc3QgU0FyYyAmYSkgY29uc3Q7CiAgU0Fy
YyBvcGVyYXRvci0oKSBjb25zdCB7U0FyYyBhKCp0aGlzKTthLlJldmVyc2UoKTtyZXR1cm4gYTt9
CgogIHZvaWQgVXBkYXRlKCkge2NhbGNBcmVhKCk7Y2FsY1BlcmltKCk7bV9ib3g9U0JveCh0aGlz
KTt9CgogIFNQb2ludCBQb2ludChkb3VibGUgdSkgY29uc3Qge3JldHVybiBQb2ludEF0QShBbmds
ZUF0VSh1KSk7fQogIFNQb2ludCBQb2ludEF0QShkb3VibGUgYW5nbGUpIGNvbnN0OwogIHZvaWQg
VHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pOwogIFNWZWN0b3IgVGFuZ2VudChkb3VibGUgdSkg
Y29uc3Q7CiAgU1NlZyogUHJvaihjb25zdCBTUGxhbmUgJnBsKSBjb25zdDsKICBkb3VibGUgQXJj
SGVpZ2h0KCkgY29uc3Qge3JldHVybiBtX3JhZCooMS4wLWNvcyhmYWJzKG1fc3dwKS8yLjApKTt9
CiAgZG91YmxlIEFyY0Rpdihkb3VibGUgaGVpZ2h0dG9sKSBjb25zdCB7cmV0dXJuIGNlaWwoZmFi
cyhtX3N3cCkvKDIuMCphY29zKDEuMC1oZWlnaHR0b2wvbV9yYWQpKSk7IH0KCiAgU1NlZyogVHJp
bVN0YXJ0KGRvdWJsZSB1KSBjb25zdDsKICBTU2VnKiBUcmltRW5kKGRvdWJsZSB1KSBjb25zdDsK
ICBTU2VnKiBHZXRQYXJ0KGRvdWJsZSB1MCwgZG91YmxlIHUxKSBjb25zdDsKICBpbnQgT2Zmc2V0
KFNTZWdDb250ICZjYSwgZG91YmxlIG9mZnMsIGRvdWJsZSB0aW55ID0gU1NfVElOWSkgY29uc3Q7
CgogIHZvaWQgU2V0U3AoY29uc3QgU1BvaW50ICZwKTsKICB2b2lkIFNldE1wKGNvbnN0IFNQb2lu
dCAmcCk7CiAgdm9pZCBTZXRFcChjb25zdCBTUG9pbnQgJnApOwogIGludCBTZXQzUHRzKGNvbnN0
IFNQb2ludCAmYSwgY29uc3QgU1BvaW50ICZiLCBjb25zdCBTUG9pbnQgJmMpOwogIGludCBTZXRC
eVB0cyhjb25zdCBTQ29udGFpbmVyUDxTUG9pbnQ+ICZzZXRwKTsKICBpbnQgU2V0QnlUYW5nKFNM
aW5lICZsc3AsIFNMaW5lICZsZXAsIGRvdWJsZSByYWQpOwoKICBpbnQgT3JpZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zd3A+PTAuMD9TX0NDVzpTX0NXOyB9CiAgdm9pZCBGbGlwKCk7CiAgdm9pZCBS
ZXZlcnNlKCkge21fc2E9U21vZDJwaShTXzJQSSttX3NhK21fc3dwKTsgbV9zd3AgPSAtbV9zd3A7
fQogIHZvaWQgU2V0T3JpZW50KGludCBvKSB7IGlmIChPcmllbnQoKSAhPSBvKSBSZXZlcnNlKCk7
IH0KCiAgYm9vbCBQb2ludE9uU2VnKGNvbnN0IFNQb2ludCAmcCwgZG91YmxlICZ1LCBTUG9pbnQg
JmEpIGNvbnN0OwoKICBib29sIEluc2lkZShjb25zdCBTU2VnICpwcykgY29uc3Q7CiAgaW50IEFi
dXRCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0OwogIGludCBBb3JCKGNvbnN0
IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0OwoKICBib29sIEludGVyc2VjdChjb25zdCBT
SW5mTGluZSAmbCwgU0ludGVyc2VjdCAmaXNlY3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChj
b25zdCBTUmF5ICZyLCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0
KGNvbnN0IFNMaW5lICZsLCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJvb2wgSW50ZXJz
ZWN0KGNvbnN0IFNDaXJjbGUgJmMsIFNJbnRlcnNlY3QgJmlzZWN0cykgY29uc3Q7CiAgYm9vbCBJ
bnRlcnNlY3QoY29uc3QgU0FyYyAmYXJjLCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJv
b2wgSW50ZXJzZWN0KGNvbnN0IFNTZWcgKnNlZywgU0ludGVyc2VjdCAmaXNlY3RzKSBjb25zdDsK
CiAgU1NlZyogY2xvbmUoKSBjb25zdCB7IHJldHVybiBuZXcgU0FyYygqdGhpcyk7IH0KCn07Cgoj
IDMgImJveC5jcHAiIDIKCiMgNyAiY3VydmUuaCIgMQojIDcgImNvbnRhaW5lcjIuaCIgMQpleHRl
cm4gY29uc3QgZG91YmxlIG5vX2NpcmNyYWRbXTsKZXh0ZXJuIGNvbnN0IGludCBjbnVtOwoKaW50
IGNtcGJ5eChjb25zdCB2b2lkICplbDEsIGNvbnN0IHZvaWQgKmVsMik7CmludCBDbXBDUGVyaW0o
Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CmludCBDbXBDQXJlYShjb25zdCB2b2lkICph
LCBjb25zdCB2b2lkICpiKTsKCmNsYXNzIFNTZWdDb250IHsKcHJpdmF0ZToKICBmcmllbmQgY2xh
c3MgU0N1cnZlOwogIFNTZWcgKiphcDsKICBpbnQgc3o7CiAgaW50IG1lbXNpemU7CiAgaW50IGNo
dW5rOwogIGNoYXIgbGF5ZXJbMzNdOwogIGludCBjb2xvcjsKCiAgaW50IEdyb3coKQogIHsKICAg
IFNTZWcgKip0ID0gKFNTZWcgKiopIHJlYWxsb2MoYXAsIChtZW1zaXplICsgY2h1bmspICogc2l6
ZW9mKFNTZWcgKikpOwoKICAgIGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUg
Kz0gY2h1bms7CgogICAgaWYgKHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsK
ICB9CgoKCiAgaW50IFNocmluaygpCiAgewogICAgaWYgKChtZW1zaXplLWNodW5rKSA8IDEpCiAg
ICAgIHJldHVybiAtMTsKCiAgICBTU2VnICoqdCA9IChTU2VnICoqKSByZWFsbG9jKGFwLCAobWVt
c2l6ZSAtIGNodW5rKSAqIHNpemVvZihTU2VnICopKTsKCiAgICBpZiAoIXQpCiAgICAgIHJldHVy
biAtMTsKCiAgICBtZW1zaXplIC09IGNodW5rOwoKICAgIGlmICh0ICE9IGFwKQogICAgICBhcCA9
IHQ7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIGludCBtaW5teigpCiAgewogICAgcmVnaXN0ZXIg
aW50IHMgPSAoKHN6LTEpL2NodW5rICsgMSkqY2h1bms7CiAgICByZXR1cm4gKHMgPCBjaHVuaykg
PyBjaHVuayA6IHM7CiAgfQoKCgpwdWJsaWM6CiAgY29uc3QgY2hhciogTGF5ZXIoKSBjb25zdCB7
IHJldHVybiAoY29uc3QgY2hhciAqKSBsYXllcjsgfQogIHZvaWQgU2V0TGF5ZXIoY29uc3QgY2hh
ciAqcykKICB7CiAgICBpZiAoIXMpCiAgICAgIHJldHVybjsKICAgIGVsc2UgewogICAgICByZWdp
c3RlciBpbnQgaTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBzejsgaSsrKQogICAgICAgIGFwW2ld
LT5TZXRMYXllcihzKTsKCiAgICAgIHN0cm5jcHkobGF5ZXIsIHMsIDMzLTEpOwogICAgICBsYXll
clszMy0xXT0nXDAnOwogICAgfQogIH0KCgoKICBpbnQgQ29sb3IoKSBjb25zdCB7IHJldHVybiBj
b2xvcjsgfQoKICB2b2lkIFNldENvbG9yKGludCBjKSB7IGNvbG9yID0gYzsgfQoKCgogIFNTZWdD
b250KGludCBjaHVuID0gMzApCiAgewogICAgY2h1bmsgPSBjaHVuOwogICAgc3ogPSAwOwogICAg
bWVtc2l6ZSA9IG1pbm16KCk7CiAgICBhcCA9IChTU2VnICoqKSBtYWxsb2MobWVtc2l6ZSAqIHNp
emVvZihTU2VnKikpOwogICAgbGF5ZXJbMF0gPSAnXDAnOwogICAgY29sb3IgPSAyNTY7CiAgfQoK
CgogIFNTZWdDb250KGNvbnN0IFNTZWdDb250ICZzYykKICB7CiAgICByZWdpc3RlciBpbnQgaTsK
CiAgICBjaHVuayA9IHNjLmNodW5rOwogICAgc3ogPSBzYy5zejsKICAgIG1lbXNpemUgPSBtaW5t
eigpOwogICAgYXAgPSAoU1NlZyAqKikgbWFsbG9jKHNpemVvZihTU2VnKikgKiBtZW1zaXplKTsK
CiAgICBmb3IgKGkgPSAwOyBpIDwgc2Muc3o7IGkrKykKICAgICAgYXBbaV0gPSBzYy5hcFtpXS0+
Y2xvbmUoKTsKICAgIHN0cm5jcHkobGF5ZXIsIHNjLmxheWVyLCAzMy0xKTsKICAgIGxheWVyWzMz
LTFdID0gJ1wwJzsKICB9CgoKCiAgdmlydHVhbCB+U1NlZ0NvbnQoKQogIHsKICAgIHdoaWxlIChz
ei0tID4gMCkgewogICAgICBhcFtzel0tPn5TU2VnKCk7CiAgICAgIGRlbGV0ZSBhcFtzel07CiAg
ICAgIGFwW3N6XT0wOwogICAgfQogICAgZnJlZShhcCk7CiAgICBhcCA9IDA7CiAgICBzeiA9IDA7
CiAgICBtZW1zaXplID0gMDsKICAgIGxheWVyWzBdID0gJ1wwJzsKICB9CgoKCiAgdmlydHVhbCB2
b2lkIFJlc2V0KCkKICB7CiAgICB3aGlsZSAoc3otLSA+IDApIHsKICAgICAgYXBbc3pdLT5+U1Nl
ZygpOwogICAgICBkZWxldGUgYXBbc3pdOwogICAgICBhcFtzel09MDsKICAgIH0KICAgIGZyZWUo
YXApOwogICAgc3ogPSAwOwogICAgbWVtc2l6ZSA9IGNodW5rID4gMCA/IGNodW5rIDogMzA7CiAg
ICBhcCA9IChTU2VnICoqKSBtYWxsb2MobWVtc2l6ZSAqIHNpemVvZihTU2VnKikpOwogICAgbGF5
ZXJbMF0gPSAnXDAnOwogIH0KCgoKICB2aXJ0dWFsIFNTZWdDb250JiBvcGVyYXRvcj0oY29uc3Qg
U1NlZ0NvbnQgJnNjKQogIHsKICAgIHRoaXMtPn5TU2VnQ29udCgpOwoKICAgIHJlZ2lzdGVyIGlu
dCBpOwoKICAgIGNodW5rID0gc2MuY2h1bms7CiAgICBzeiA9IHNjLnN6OwogICAgbWVtc2l6ZSA9
IG1pbm16KCk7CiAgICBhcCA9IChTU2VnICoqKSBtYWxsb2Moc2l6ZW9mKFNTZWcqKSAqIG1lbXNp
emUpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBzYy5zejsgaSsrKQogICAgICBhcFtpXSA9IHNjLmFw
W2ldLT5jbG9uZSgpOwogICAgc3RybmNweShsYXllciwgc2MubGF5ZXIsIDMzKTsKICAgIGxheWVy
WzMzLTFdID0gJ1wwJzsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAgdmlydHVhbCBTU2VnQ29u
dCBvcGVyYXRvcisoY29uc3QgU1NlZ0NvbnQgJnNjKSBjb25zdAogIHsKICAgIHJlZ2lzdGVyIGlu
dCBpOwogICAgU1NlZ0NvbnQgY3NjID0gKnRoaXM7CgogICAgZm9yIChpID0gMDsgaSA8IHNjLnN6
OyBpKyspCiAgICAgIGNzYy5BZGQoc2MuYXBbaV0tPmNsb25lKCkpOwoKICAgIHJldHVybiBjc2M7
CiAgfQoKCgogIHZpcnR1YWwgU1NlZ0NvbnQmIG9wZXJhdG9yKz0oY29uc3QgU1NlZ0NvbnQgJnNj
KQogIHsKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBzYy5zejsgaSsr
KQogICAgICBBZGQoc2MuYXBbaV0tPmNsb25lKCkpOwoKICAgIHJldHVybiAqdGhpczsKICB9CgoK
CiAgdmlydHVhbCBTU2VnKiBvcGVyYXRvcltdKGludCBpKSBjb25zdAogIHsKICAgIGlmICgoaSA8
IDApIHx8IChpID4gKHN6LTEpKSkKICAgICAgcmV0dXJuIDA7CgogICAgcmV0dXJuIGFwW2ldOwog
IH0KCgoKICB2aXJ0dWFsIGludCBTaXplKCkgY29uc3QKICB7CiAgICByZXR1cm4gc3o7CiAgfQoK
CgogIHZpcnR1YWwgaW50IEFkZChTU2VnKiBhKQogIHsKICAgIGlmICghYSkKICAgICAgcmV0dXJu
IC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXplKQogICAgICBpZiAoR3JvdygpICE9IDApCiAgICAg
ICAgcmV0dXJuIC0xOwoKICAgIGFwW3N6XSA9IGE7CiAgICBzeisrOwoKICAgIHJldHVybiAwOwog
IH0KCgoKICB2aXJ0dWFsIGludCBJbnNBZnRlcihpbnQgc24sIFNTZWcqIGEpCiAgewogICAgaWYg
KHN6IDwgMSkKICAgICAgcmV0dXJuIEFkZChhKTsKCiAgICBpZiAoKHNuIDwgMCkgfHwgKHNuID4g
KHN6LTEpKSB8fCAhYSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXplKSB7
CiAgICAgIGlmIChHcm93KCkgIT0gMCkKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgcmVn
aXN0ZXIgaW50IGk7CgogICAgZm9yIChpID0gc3o7IGkgPiAoc24rMSk7IGktLSkKICAgICAgYXBb
aV0gPSBhcFtpLTFdOwoKICAgIGFwW3NuKzFdID0gYTsKICAgIHN6Kys7CgogICAgcmV0dXJuIDA7
CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0JlZm9yZShpbnQgc2IsIFNTZWcqIGEpCiAgewogICAg
aWYgKHN6IDwgMSkKICAgICAgcmV0dXJuIEFkZChhKTsKCiAgICBpZiAoKHNiIDwgMCkgfHwgKHNi
ID4gKHN6LTEpKSB8fCAhYSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXpl
KSB7CiAgICAgIGlmIChHcm93KCkgIT0gMCkKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAg
cmVnaXN0ZXIgaW50IGk7CgogICAgZm9yIChpID0gc3o7IGkgPiBzYjsgaS0tKQogICAgICBhcFtp
XSA9IGFwW2ktMV07CgogICAgYXBbc2JdID0gYTsKICAgIHN6Kys7CgogICAgcmV0dXJuIDA7CiAg
fQoKCgogIHZpcnR1YWwgaW50IERlbGV0ZShpbnQgaykKICB7CiAgICBpZiAoc3ogPCAxKQogICAg
ICByZXR1cm4gLTE7CgogICAgaWYgKChrIDwgMCkgfHwgKGsgPiAoc3otMSkpKQogICAgICByZXR1
cm4gLTE7CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgYXBba10tPn5TU2VnKCk7CiAgICBkZWxl
dGUgYXBba107CgogICAgZm9yIChpID0gazsgaSA8IChzei0xKTsgaSsrKQogICAgICBhcFtpXSA9
IGFwW2krMV07CgogICAgc3otLTsKCiAgICBpZiAobWlubXooKSA8IG1lbXNpemUpCiAgICAgIFNo
cmluaygpOwoKICAgIHJldHVybiAwOwogIH0KCgoKICB2aXJ0dWFsIGludCBSZXBsYWNlKGludCBr
LCBTU2VnICpwcykKICB7CiAgICBpZiAoc3ogPCAxKQogICAgICByZXR1cm4gLTE7CgogICAgaWYg
KChrIDwgMCkgfHwgKGsgPiAoc3otMSkpIHx8ICFwcykKICAgICAgcmV0dXJuIC0xOwoKICAgIGFw
W2tdLT5+U1NlZygpOwogICAgZGVsZXRlIGFwW2tdOwoKICAgIGFwW2tdID0gcHM7CgogICAgcmV0
dXJuIDA7CiAgfQoKCgogIHZpcnR1YWwgaW50IFN3YXAoaW50IGEsIGludCBiKQogIHsKICAgIFNT
ZWcqIHBhID0gYXBbYV07CgogICAgaWYgKCFwYSB8fCAhYXBbYl0pCiAgICAgIHJldHVybiAtMTsK
CiAgICBhcFthXSA9IGFwW2JdOwogICAgYXBbYl0gPSBwYTsKCiAgICByZXR1cm4gMDsKICB9CgoK
CiAgdmlydHVhbCB2b2lkIFNvcnQocENvbXBmX3QgY29tcGYpCiAgewogICAgcXNvcnQoYXAsIHN6
LCBzaXplb2YoU1NlZyopLCBjb21wZik7CiAgfQoKCgogIHZpcnR1YWwgdm9pZCBTb3J0QnlYKCkK
ICB7CiAgICBTb3J0KGNtcGJ5eCk7CiAgfQoKCgogIGludCBDbGVhblNhbWUoKQogIHsKICAgIHJl
Z2lzdGVyIGludCBpLCBrLCBkZWxzOwoKICAgIGlmIChzeiA8IDIpCiAgICAgIHJldHVybiAwOwoK
ICAgIGRlbHMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IChzei0xKTsgaSsrKSB7CgogICAgICBk
b3VibGUgaWFyZWEgPSBhcFtpXS0+QXJlYSgpOwogICAgICBkb3VibGUgaWxlbiA9IGFwW2ldLT5M
ZW5ndGgoKTsKCiAgICAgIGZvciAoayA9IGkrMTsgayA8IHN6OyBrKyspIHsKCiAgICAgICAgZG91
YmxlIGthcmVhID0gYXBba10tPkFyZWEoKTsKICAgICAgICBkb3VibGUga2xlbiA9IGFwW2tdLT5M
ZW5ndGgoKTsKCiAgICAgICAgaWYgKCBTdG9sQ29tcChpYXJlYSwga2FyZWEpID09IDAKICAgICAg
ICAgICYmIFN0b2xDb21wKGlsZW4sIGtsZW4pID09IDAKICAgICAgICAgICYmIChhcFtrXS0+R2V0
Qm94KCkgPT0gYXBbaV0tPkdldEJveCgpKSkgewoKCgogICAgICAgICAgRGVsZXRlKGstLSksIGRl
bHMrKzsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZGVsczsKICB9CgoKCiAg
aW50IFJlbW92ZVN0YXJ0Q2lyKCkKICB7CiAgICByZWdpc3RlciBpbnQgaSwgaiwgZGVsczsKCiAg
ICBkZWxzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCBzejsgaSsrKSB7CiAgICAgIGlmIChhcFtp
XS0+VHlwZSgpID09IFNDSVJDTEUpIHsKCiAgICAgICAgU0NpcmNsZSAqY2lyYyA9IChTQ2lyY2xl
ICopIGFwW2ldOwoKICAgICAgICBmb3IgKGogPSAwOyBqIDwgY251bTsgaisrKQogICAgICAgICAg
aWYgKFN0b2xDb21wKGNpcmMtPkdldFJhZCgpLCBub19jaXJjcmFkW2pdKSA9PSAwKSB7CiAgICAg
ICAgICAgIERlbGV0ZShpLS0pLCBkZWxzKys7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
fQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGRlbHM7CiAgfQoKCgogIGludCBTb3J0QnlQZXJp
bSgpCiAgewogICAgaWYgKHN6IDwgMSkKICAgICAgcmV0dXJuIC0xOwoKICAgIHFzb3J0KGFwLCBz
eiwgc2l6ZW9mKFNTZWcqKSwgQ21wQ1BlcmltKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgaW50
IFNvcnRCeUFyZWEoKQogIHsKICAgIGlmIChzeiA8IDEpCiAgICAgIHJldHVybiAtMTsKCiAgICBx
c29ydChhcCwgc3osIHNpemVvZihTU2VnKiksIENtcENBcmVhKTsKCiAgICByZXR1cm4gMDsKICB9
CgoKCiAgdm9pZCBUcmFuc2Zvcm0oY29uc3QgU01hdHJpeCYgbSkKICB7CiAgICByZWdpc3RlciBp
bnQgaTsKCiAgICBpZiAoc3ogPCAxKQogICAgICByZXR1cm47CgogICAgZm9yIChpID0gMDsgaSA8
IHN6OyBpKyspCiAgICAgIGFwW2ldLT5UcmFuc2Zvcm0obSk7CgogIH0KCgoKICBTQm94IEdldEJv
eCgpCiAgewogICAgU0JveCBiOwogICAgcmVnaXN0ZXIgaW50IGk7CiAgICBmb3IgKGkgPSAwOyBp
IDwgc3o7IGkrKykKICAgICAgYi5VbmlvbihhcFtpXS0+R2V0Qm94KCkpOwogICAgcmV0dXJuIGI7
CiAgfQoKCgogIHZvaWQgU2V0YXBmbGFnc0JpdChpbnQgYml0bWFzaywgaW50IHZhbCkKICB7CiAg
ICByZWdpc3RlciBpbnQgaTsKCiAgICBmb3IgKGk9MDsgaSA8IHN6OyBpKyspCiAgICAgIGlmICh2
YWwpCiAgICAgICAgYXBbaV0tPmFwZmxhZ3MgfD0gYml0bWFzazsKICAgICAgZWxzZQogICAgICAg
IGFwW2ldLT5hcGZsYWdzICY9IH5iaXRtYXNrOwogIH0KCgoKICBpbnQgQWRkQnlHZW9tKFNTZWcg
KnBzKQogIHsKICAgIGlmICghcHMpCiAgICAgIHJldHVybiAtMTsKCiAgICBpZiAoc3ogPCAxKQog
ICAgICByZXR1cm4gQWRkKHBzKTsKCiAgICBTUG9pbnQgc3NwID0gcHMtPlN0YXJ0UG9pbnQoKTsK
ICAgIFNQb2ludCBzZXAgPSBwcy0+RW5kUG9pbnQoKTsKICAgIHJlZ2lzdGVyIGludCBpOwoKCiAg
ICBpID0gc3otMTsKICAgIHsKICAgICAgU1BvaW50IHNwID0gYXBbaV0tPlN0YXJ0UG9pbnQoKTsK
ICAgICAgU1BvaW50IGVwID0gYXBbaV0tPkVuZFBvaW50KCk7CgogICAgICBpZiAoc2VwID09IHNw
KSB7CiAgICAgICAgcmV0dXJuIEluc0JlZm9yZShpLCBwcyk7CiAgICAgIH0gZWxzZSBpZiAoc3Nw
ID09IGVwKSB7CiAgICAgICAgcmV0dXJuIEluc0FmdGVyKGksIHBzKTsKICAgICAgfSBlbHNlIGlm
IChzZXAgPT0gZXApIHsKICAgICAgICBwcy0+UmV2ZXJzZSgpOwogICAgICAgIHJldHVybiBJbnNB
ZnRlcihpLCBwcyk7CiAgICAgIH0gZWxzZSBpZiAoc3NwID09IHNwKSB7CiAgICAgICAgcHMtPlJl
dmVyc2UoKTsKICAgICAgICByZXR1cm4gSW5zQmVmb3JlKGksIHBzKTsKICAgICAgfQogICAgfQog
ICAgaWYgKHN6IDwgMikKICAgICAgcmV0dXJuIC0xOwoKICAgIGkgPSAwOwogICAgewogICAgICBT
UG9pbnQgc3AgPSBhcFtpXS0+U3RhcnRQb2ludCgpOwogICAgICBTUG9pbnQgZXAgPSBhcFtpXS0+
RW5kUG9pbnQoKTsKCiAgICAgIGlmIChzZXAgPT0gc3ApIHsKICAgICAgICByZXR1cm4gSW5zQmVm
b3JlKGksIHBzKTsKICAgICAgfSBlbHNlIGlmIChzc3AgPT0gZXApIHsKICAgICAgICByZXR1cm4g
SW5zQWZ0ZXIoaSwgcHMpOwogICAgICB9IGVsc2UgaWYgKHNlcCA9PSBlcCkgewogICAgICAgIHBz
LT5SZXZlcnNlKCk7CiAgICAgICAgcmV0dXJuIEluc0FmdGVyKGksIHBzKTsKICAgICAgfSBlbHNl
IGlmIChzc3AgPT0gc3ApIHsKICAgICAgICBwcy0+UmV2ZXJzZSgpOwogICAgICAgIHJldHVybiBJ
bnNCZWZvcmUoaSwgcHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoc3ogPCAzKQogICAgICByZXR1
cm4gLTE7CgogICAgZm9yIChpID0gMTsgaSA8IChzei0xKTsgaSsrKSB7CiAgICAgIFNQb2ludCBz
cCA9IGFwW2ldLT5TdGFydFBvaW50KCk7CiAgICAgIFNQb2ludCBlcCA9IGFwW2ldLT5FbmRQb2lu
dCgpOwoKICAgICAgaWYgKHNlcCA9PSBzcCkgewogICAgICAgIHJldHVybiBJbnNCZWZvcmUoaSwg
cHMpOwogICAgICB9IGVsc2UgaWYgKHNzcCA9PSBlcCkgewogICAgICAgIHJldHVybiBJbnNBZnRl
cihpLCBwcyk7CiAgICAgIH0gZWxzZSBpZiAoc2VwID09IGVwKSB7CiAgICAgICAgcHMtPlJldmVy
c2UoKTsKICAgICAgICByZXR1cm4gSW5zQWZ0ZXIoaSwgcHMpOwogICAgICB9IGVsc2UgaWYgKHNz
cCA9PSBzcCkgewogICAgICAgIHBzLT5SZXZlcnNlKCk7CiAgICAgICAgcmV0dXJuIEluc0JlZm9y
ZShpLCBwcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKICB9CgoKCiAgdm9pZCByb3Io
aW50IGkpCiAgewogICAgaWYgKHN6IDwgMiB8fCBpIDwgMSkKICAgICAgcmV0dXJuOwogICAgaSAl
PSBzejsKICAgIGlmIChpIDwgMSkKICAgICAgcmV0dXJuOwoKICAgIHJlZ2lzdGVyIGludCBrOwog
ICAgU1NlZ0NvbnQgc2Moc3opOwoKICAgIGZvciAoayA9IDA7IGsgPCBzejsgaysrKQogICAgICBz
Yy5hcFsoaytpKSVzel0gPSBhcFtrXTsKICAgIGZvciAoayA9IDA7IGsgPCBzejsgaysrKQogICAg
ICBhcFtrXSA9IHNjLmFwW2tdOwogICAgZGVsZXRlIHNjLmFwOwogICAgc2MuYXAgPSAwOwogICAg
c2Muc3ogPSAwOwogICAgc2MubWVtc2l6ZSA9IDA7CiAgfQoKCgogIHZvaWQgcm9sKGludCBpKQog
IHsKICAgIHJvcihzei1pKTsKICB9CgoKCiAgdm9pZCBTZXRMYXJnZXN0QXJlYUZpcnN0KCkgewog
ICAgcmVnaXN0ZXIgaW50IGksIGsgPSAwOwogICAgcmVnaXN0ZXIgZG91YmxlIG1hID0gMC4wOwog
ICAgZm9yIChpPTA7IGkgPCBTaXplKCk7IGkrKykKICAgICAgaWYgKGFwW2ldLT5BcmVhKCkgPiBt
YSkgewogICAgICAgIG1hID0gYXBbaV0tPkFyZWEoKTsKICAgICAgICBrID0gaTsKICAgICAgfQog
ICAgaWYgKGsgPiAwKQogICAgICBTd2FwKDAsIGspOwogIH0KCgoKfTsKCiMgNyAiY3VydmUuaCIg
MgoKIyA1ICJpc2VjdC5oIiAxCiMgMTIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGlu
dXgvMi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
cmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCiMgMTMxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMg
MTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMv
cG9zaXgxX2xpbS5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEg
MwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3Iv
aW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJl
ZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbGltaXRzLmgi
IDIgMwojIDUgImlzZWN0LmgiIDIKCgoKCmNsYXNzIFNJc2VjdCB7CnB1YmxpYzoKICBTSXNlY3Qo
KSB7c3RoaXM9c290aGVyPTA7dXRoaXM9dW90aGVyPS0xLjA7fQogIFNJc2VjdChjb25zdCBTSXNl
Y3QgJmlzKSB7c3RoaXM9aXMuc3RoaXM7c290aGVyPWlzLnNvdGhlcjt1dGhpcz1pcy51dGhpczt1
b3RoZXI9aXMudW90aGVyO30KICBTSXNlY3QmIG9wZXJhdG9yPShjb25zdCBTSXNlY3QgJmlzKSB7
c3RoaXM9aXMuc3RoaXM7c290aGVyPWlzLnNvdGhlcjt1dGhpcz1pcy51dGhpczt1b3RoZXI9aXMu
dW90aGVyO3JldHVybiAqdGhpczt9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNJc2VjdCAmaXMp
IHtyZXR1cm4gc3RoaXM9PWlzLnN0aGlzICYmIHNvdGhlcj09aXMuc290aGVyICYmICFTdG9sQ29t
cCh1dGhpcywgaXMudXRoaXMpICYmICFTdG9sQ29tcCh1b3RoZXIsIGlzLnVvdGhlcik7IH0KICBj
b25zdCBTU2VnICpzdGhpczsKICBjb25zdCBTU2VnICpzb3RoZXI7CiAgZG91YmxlIHV0aGlzOwog
IGRvdWJsZSB1b3RoZXI7Cn07CgoKCmNsYXNzIFNVU2VnIHsKcHVibGljOgogIFNVU2VnKCkge3Uw
PXUxPS0xLjA7IHBzPTA7IHZhbHVlPWZsYWdzPTA7fQogIFNVU2VnKGRvdWJsZSB1MCwgZG91Ymxl
IHUxLCBjb25zdCBTU2VnICpwcywgY29uc3QgU0lzZWN0ICZpczAsIGNvbnN0IFNJc2VjdCAmaXMx
KQogIHsKICAgIHRoaXMtPnUwPXUwOwogICAgdGhpcy0+dTE9dTE7CiAgICB0aGlzLT5wcz0oU1Nl
ZyopcHM7CiAgICB2YWx1ZT1mbGFncz0wOwogICAgdGhpcy0+aXMwID0gKFNJc2VjdCkgaXMwOwog
ICAgdGhpcy0+aXMxID0gKFNJc2VjdCkgaXMxOwogIH0KICBTVVNlZyhjb25zdCBTVVNlZyAmdXMp
CiAgewogICAgdTAgPSB1cy51MDsKICAgIHUxID0gdXMudTE7CiAgICBwcyA9IHVzLnBzOwogICAg
aXMwID0gKFNJc2VjdCkgdXMuaXMwOwogICAgaXMxID0gKFNJc2VjdCkgdXMuaXMxOwogICAgdmFs
dWUgPSB1cy52YWx1ZTsKICAgIGZsYWdzID0gdXMuZmxhZ3M7CiAgfQogIGRvdWJsZSB1MDsKICBk
b3VibGUgdTE7CiAgU1NlZyAqcHM7CiAgU0lzZWN0IGlzMDsKICBTSXNlY3QgaXMxOwogIGludCB2
YWx1ZTsKICBpbnQgZmxhZ3M7CiAgYm9vbCBvcGVyYXRvcj09KFNVU2VnICZzdSkgeyByZXR1cm4g
IVN0b2xDb21wKHUwLCBzdS51MCkgJiYgIVN0b2xDb21wKHUxLCBzdS51MSkgJiYgaXMwPT1pczE7
IH0KfTsKCgoKY2xhc3MgU0ludGVyc2VjdCA6IHB1YmxpYyBTQ29udGFpbmVyUDxTSXNlY3Q+IHsK
cHVibGljOgogIHZvaWQgU3dhcElzZWN0cygpCiAgewogICAgcmVnaXN0ZXIgaW50IGs7CiAgICBm
b3IgKGs9MDsgayA8IFNpemUoKTsgaysrKSB7CiAgICAgIHN3YXA8ZG91YmxlPihhcFtrXS0+dXRo
aXMsIGFwW2tdLT51b3RoZXIpOwogICAgICBTU2VnICp0ID0gKFNTZWcgKikgYXBba10tPnN0aGlz
OwogICAgICBhcFtrXS0+c3RoaXMgPSAoU1NlZyAqKSBhcFtrXS0+c290aGVyOwogICAgICBhcFtr
XS0+c290aGVyID0gdDsKICAgIH0KICB9CgoKCgoKCgogIHZvaWQgRGJsSXNlY3RzKCkKICB7CiAg
ICByZWdpc3RlciBpbnQgaSwgazsKICAgIFNJbnRlcnNlY3QgaXMyOwoKICAgIGlzMiA9ICp0aGlz
OwogICAgaXMyLlN3YXBJc2VjdHMoKTsKICAgICp0aGlzICs9IGlzMjsKICAgIFNvcnQoQ21wQnlV
MSk7CiAgICBmb3IgKGsgPSAwOyBrIDwgKFNpemUoKS0xKTsgaysrKSB7CiAgICAgIGZvciAoaT1r
KzE7IGkgPCBTaXplKCk7IGkrKykKICAgICAgICBpZiAoU3RvbENvbXAoYXBba10tPnV0aGlzLCBh
cFtpXS0+dXRoaXMpID09IDApIHsKICAgICAgICAgIERlbGV0ZShpLS0pOwogICAgICAgIH0KICAg
IH0KICB9CgoKCiAgaW50IERlbFRyaXZpYWwoKQogIHsKICAgIHJlZ2lzdGVyIGludCBpLCBkZWxz
OwogICAgZm9yIChkZWxzPWk9MDsgaSA8IFNpemUoKTsgaSsrKSB7CiAgICAgIGlmIChTdG9sQ29t
cChmYWJzKGFwW2ldLT51dGhpcy1hcFtpXS0+dW90aGVyKSwgMS4wKSA9PSAwKQogICAgICAgIERl
bGV0ZShpLS0pLCBkZWxzKys7CiAgICB9CiAgICByZXR1cm4gZGVsczsKICB9CgogIGludCBEZWxQ
b2ludHNOZWFyKGNvbnN0IFNQb2ludCAmcCwgZG91YmxlIHRvbCA9IF9zc19nbG9iYWxfdG9sKQog
IHsKICAgIHJlZ2lzdGVyIGludCBpLCBkZWxzOwogICAgZm9yIChpPWRlbHM9MDsgaSA8IFNpemUo
KTsgaSsrKQogICAgICBpZiAoU3RvbENvbXAocC5kaXN0KGFwW2ldLT5zdGhpcy0+UG9pbnQoYXBb
aV0tPnV0aGlzKSksIDAuMCwgdG9sKSA8PSAwKQogICAgICAgIERlbGV0ZShpLS0pLCBkZWxzKys7
CiAgICByZXR1cm4gZGVsczsKICB9Cgp9OwoKCgpjbGFzcyBTVVNlZ0NvbnQgOiBwdWJsaWMgU0Nv
bnRhaW5lclA8U1VTZWc+IHsKcHVibGljOgoKCiAgaW50IE1ha2VDb3VudChjb25zdCBTVmVjdG9y
ICZOLCBpbnQgaW5jcmVtZW50b3IpCiAgewogICAgcmVnaXN0ZXIgaW50IG0gPSAyMTQ3NDgzNjQ3
OwogICAgcmVnaXN0ZXIgaW50IGksIGN2ID0gMDsKCiAgICBmb3IgKGkgPSAwOyBpIDwgU2l6ZSgp
OyBpKyspIHsKICAgICAgU1ZlY3RvciB2MSA9IGFwW2ldLT5wcy0+VGFuZ2VudChhcFtpXS0+dTAp
OwogICAgICBTVmVjdG9yIHYyID0gYXBbaV0tPmlzMC5zb3RoZXItPlRhbmdlbnQoYXBbaV0tPmlz
MC51b3RoZXIpOwogICAgICBkb3VibGUgYSA9IHYxLkFuZ2xlKHYyLCBOKTsKCiAgICAgIGlmIChT
dG9sQ29tcChhLCBTX1BJKSA+IDApCiAgICAgICAgbSA9IG1pbjxpbnQ+KGFwW2ldLT52YWx1ZSA9
IChjdiArPSBpbmNyZW1lbnRvciksIG0pOwogICAgICBlbHNlCiAgICAgICAgbSA9IG1pbjxpbnQ+
KGFwW2ldLT52YWx1ZSA9IChjdiAtPSBpbmNyZW1lbnRvciksIG0pOwogICAgfQogICAgcmV0dXJu
IG07CiAgfQoKCgogIHZvaWQgQWRkVmFsKGludCB2YWwpCiAgewogICAgcmVnaXN0ZXIgaW50IGk7
CiAgICBmb3IgKGkgPSAwOyBpIDwgU2l6ZSgpOyBpKyspCiAgICAgIGFwW2ldLT52YWx1ZSArPSB2
YWw7CiAgfQoKCgoKICBpbnQgTWFrZVVTZWdzVGhpcyhTSW50ZXJzZWN0ICZpc2VjdHMpCiAgewog
ICAgaWYgKGlzZWN0cy5TaXplKCkgPCAxKQogICAgICByZXR1cm4gLTE7CiAgICBTSW50ZXJzZWN0
IGlzMiA9IGlzZWN0czsKICAgIGlzMi5Tb3J0KENtcEJ5VTEpOwoKICAgIHJlZ2lzdGVyIGludCBp
OwogICAgZm9yIChpPTA7IGk8aXMyLlNpemUoKTsgaSsrKQogICAgICBBZGQobmV3IFNVU2VnKGlz
MltpXS0+dXRoaXMsIGlzMlsoaSsxKSVpczIuU2l6ZSgpXS0+dXRoaXMsIGlzMltpXS0+c3RoaXMs
ICooaXMyW2ldKSwgKihpczJbKGkrMSklaXMyLlNpemUoKV0pKSk7CgogICAgcmV0dXJuIDA7CiAg
fQoKCgoKCgogIGludCBNYWtlVVNlZ3NPdGhlcihTSW50ZXJzZWN0ICZpc2VjdHMpCiAgewogICAg
aWYgKGlzZWN0cy5TaXplKCkgPCAxKQogICAgICByZXR1cm4gLTE7CiAgICBTSW50ZXJzZWN0IGlz
MiA9IGlzZWN0czsKICAgIGlzMi5Tb3J0KENtcEJ5VTIpOwoKICAgIHJlZ2lzdGVyIGludCBpOwog
ICAgZm9yIChpPTA7IGk8aXMyLlNpemUoKTsgaSsrKSB7CiAgICAgIFNJc2VjdCBpeDEgPSAqKGlz
MltpXSk7CiAgICAgIFNJc2VjdCBpeDIgPSAqKGlzMlsoaSsxKSVpczIuU2l6ZSgpXSk7CiAgICAg
IFNTZWcgKnQ7CiAgICAgIHN3YXA8ZG91YmxlPihpeDEudXRoaXMsIGl4MS51b3RoZXIpOwogICAg
ICB0ID0gKFNTZWcgKikgaXgxLnN0aGlzOwogICAgICBpeDEuc3RoaXMgPSBpeDEuc290aGVyOwog
ICAgICBpeDEuc290aGVyID0gdDsKICAgICAgc3dhcDxkb3VibGU+KGl4Mi51dGhpcywgaXgyLnVv
dGhlcik7CiAgICAgIHQgPSAoU1NlZyAqKSBpeDIuc3RoaXM7CiAgICAgIGl4Mi5zdGhpcyA9IGl4
Mi5zb3RoZXI7CiAgICAgIGl4Mi5zb3RoZXIgPSB0OwogICAgICBBZGQobmV3IFNVU2VnKGlzMltp
XS0+dW90aGVyLCBpczJbKGkrMSklaXMyLlNpemUoKV0tPnVvdGhlciwgaXMyW2ldLT5zb3RoZXIs
IGl4MSwgaXgyKSk7CiAgICB9CgogICAgcmV0dXJuIDA7CiAgfQoKfTsKCiMgOCAiY3VydmUuaCIg
MgoKY2xhc3MgU0N1cnZlIDogcHVibGljIFNTZWcgewpwcml2YXRlOgogIFNTZWdDb250IG1fc2xp
c3Q7CiAgYm9vbCBtX2N1cnJlbnQ7CiAgY2xhc3MgX191cGQgewogIHB1YmxpYzoKICAgIF9fdXBk
KCkgeyB2YWxpZF9jbG9zZWQgPSB2YWxpZF9ib3ggPSB2YWxpZF9sZW4gPSB2YWxpZF9hcmVhID0g
ZmFsc2U7IH0KICAgIHZvaWQgRmFsc2VBbGwoKSB7IHZhbGlkX2Nsb3NlZCA9IHZhbGlkX2JveCA9
IHZhbGlkX2xlbiA9IHZhbGlkX2FyZWEgPSBmYWxzZTsgfQogICAgYm9vbCB2YWxpZF9jbG9zZWQ7
CiAgICBib29sIHZhbGlkX2JveDsKICAgIGJvb2wgdmFsaWRfbGVuOwogICAgYm9vbCB2YWxpZF9h
cmVhOwogIH0gbV91cGQ7CiAgYm9vbCBtX2Nsb3NlZDsKICBpbnQgbV9vcmllbnRhdGlvbjsKCiAg
ZG91YmxlIGxhcmVhKFNMaW5lICpwbCkgY29uc3Q7CiAgZG91YmxlIGFhcmVhKFNBcmMgKnBhKSBj
b25zdDsKICBib29sIGl4c2VnKGNvbnN0IFNTZWcgKnBzLCBTSW50ZXJzZWN0ICZpc2VjdHMsIGRv
dWJsZSB0b2wgPSBfc3NfZ2xvYmFsX3RvbCkgY29uc3Q7CiAgYm9vbCBpeHNlbGYoU0ludGVyc2Vj
dCAmaXNlY3RzKSBjb25zdDsKICBib29sIGl4b3RoZXIoY29uc3QgU0N1cnZlICpwYywgU0ludGVy
c2VjdCAmaXNlY3RzKSBjb25zdDsKICB2b2lkIHNldFAoKTsKICBpbnQgY2xlYW5Ucml2aWFsRnJv
bU9mZnNldCgpOwoKICB2b2lkIFNldFUoKTsKICBkb3VibGUgY2FsY0FyZWEoKTsKICBkb3VibGUg
Y2FsY0xlbmd0aCgpOwoKcHVibGljOgogIFNDdXJ2ZSgpIHsgbV9jdXJyZW50ID0gZmFsc2U7IG1f
ZmxhZ3MgPSBhcGZsYWdzID0gMDsgbV9jb2xvciA9IDI1NjsgfQogIFNDdXJ2ZShjb25zdCBTQ3Vy
dmUgJmMpOwogIFNDdXJ2ZShTU2VnICpwcyk7CiAgU0N1cnZlKGNvbnN0IFNTZWdDb250ICZzbCkg
eyBtX3NsaXN0ID0gc2w7IG1fY3VycmVudCA9IGZhbHNlOyBtX2NvbG9yID0gc2wuQ29sb3IoKTsg
VXBkYXRlKCk7IH0KICB2aXJ0dWFsIH5TQ3VydmUoKSB7IERlc3Ryb3koKTsgfQoKICBlbnVtIENv
bW1vbkZsYWdzIHsgT0ZGU0VUX0lOU0VSVEVEX0lOVkFSQz0oaW50KTEgfTsKCiAgU1NlZ190IFR5
cGUoKSBjb25zdCB7IHJldHVybiBTQ1VSVkU7IH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFND
dXJ2ZSAmYykgY29uc3Q7CgogIFNDdXJ2ZSYgb3BlcmF0b3I9KGNvbnN0IFNDdXJ2ZSAmYyk7CiAg
U0N1cnZlIG9wZXJhdG9yKyhjb25zdCBTQ3VydmUgJmMpIGNvbnN0OwogIFNDdXJ2ZSYgb3BlcmF0
b3IrPShjb25zdCBTQ3VydmUgJmMpOwogIFNTZWcqIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsg
cmV0dXJuIG1fc2xpc3RbaV07IH0KICBpbnQgU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2xpc3Qu
U2l6ZSgpOyB9CiAgaW50IEFkZChTU2VnKiBwcyk7CiAgaW50IEluc0FmdGVyKGludCBpLCBTU2Vn
ICpwcyk7CiAgaW50IEluc0JlZm9yZShpbnQgaSwgU1NlZyAqcHMpOwogIGludCBEZWxldGUoaW50
IGkpOwogIHZvaWQgU3dhcChpbnQgaSwgaW50IGopOwogIHZvaWQgUmVwbGFjZShpbnQgaSwgU1Nl
ZyAqcHMpOwogIHZvaWQgRGVzdHJveSgpIHttX2FyZWE9bV9sZW5ndGg9bV91PW1fb3JpZW50YXRp
b249bV9mbGFncz1hcGZsYWdzPTA7bV9zbGlzdC5+U1NlZ0NvbnQoKTttX2N1cnJlbnQ9ZmFsc2U7
fQogIHZvaWQgcm9sKGludCBpKSB7IG1fc2xpc3Qucm9sKGkpOyBzZXRQKCk7IG1fY3VycmVudCA9
IGZhbHNlOyB9CiAgdm9pZCByb3IoaW50IGkpIHsgbV9zbGlzdC5yb3IoaSk7IHNldFAoKTsgbV9j
dXJyZW50ID0gZmFsc2U7IH0KCiAgdm9pZCBTZXRQbGFuZShjb25zdCBTUGxhbmUgJnApIHttX3Bs
YW5lPXA7fQogIGludCBHZXRNZmxhZ3MoKSBjb25zdCB7cmV0dXJuIG1fZmxhZ3M7fQoKICBpbnQg
QWRkQnlHZW9tKFNTZWcgKnBzKTsKCiAgdm9pZCBVcGRhdGUoKSB7IGlmICghbV9jdXJyZW50KSB7
c2V0UCgpOyBTZXRVKCk7IG1fY3VycmVudD10cnVlOyBtX3VwZC5GYWxzZUFsbCgpO319CiAgYm9v
bCBDbG9zZWQoKSBjb25zdDsKICBTQm94IEdldEJveCgpIGNvbnN0OwogIGRvdWJsZSBMZW5ndGgo
KSBjb25zdDsKICBkb3VibGUgQXJlYSgpIGNvbnN0OwogIGRvdWJsZSBFbGV2YXRpb24oKSBjb25z
dDsKICB2b2lkIFNldEVsZXZhdGlvbihkb3VibGUgZWxlKSB7IFRyYW5zZm9ybShTTWF0cml4KCku
U2V0VHJhbnNsKEdldE5vcm1hbCgpKmVsZSkpOyBtX2N1cnJlbnQ9ZmFsc2U7IH0KCiAgaW50IE9y
aWVudCgpIGNvbnN0OwogIHZvaWQgUmV2ZXJzZSgpOwogIHZvaWQgU2V0T3JpZW50KGludCBvKSB7
IGlmIChPcmllbnQoKSAhPSBvKSBSZXZlcnNlKCk7IH0KCiAgaW50IEluZGV4KGNvbnN0IFNTZWcg
KnBzKSBjb25zdDsKICBkb3VibGUgVUxpbWl0KGRvdWJsZSB1KSBjb25zdCB7aW50IGM9Q2xvc2Vk
KCk7IGlmIChTdG9sQ29tcCh1LDEuMCk9PTApIHJldHVybiBjPzAuMDoxLjA7IHJldHVybiBmbW9k
KDEuMCtmbW9kKHUsMS4wKSwxLjApO30KICBkb3VibGUgVUxvY2FsKGRvdWJsZSB1Z2xvYmFsLCBT
U2VnKiYgcHMsIGludCAqcGkgPSAwKSBjb25zdDsKICBkb3VibGUgVUdsb2JhbChkb3VibGUgdWxv
Y2FsLCBjb25zdCBTU2VnKiBwcykgY29uc3Q7CiAgZG91YmxlIFVHbG9iYWwoZG91YmxlIHVsb2Nh
bCwgaW50IGkpIGNvbnN0OwogIGJvb2wgVUJlbG9uZ3MoZG91YmxlIHVnbG9iYWwsIGNvbnN0IFNT
ZWcgKiBjb25zdCBwcykgY29uc3Q7CgogIFNQb2ludCBQb2ludChkb3VibGUgdSkgY29uc3Q7CiAg
U1NlZyogU2VnQXRVKGRvdWJsZSB1LCBpbnQgKnBpID0gMCkgY29uc3Q7CgogIHZvaWQgVHJhbnNm
b3JtKGNvbnN0IFNNYXRyaXggJm0pOwogIFNWZWN0b3IgVGFuZ2VudChkb3VibGUgdSkgY29uc3Q7
CgogIFNTZWcqIFByb2ooY29uc3QgU1BsYW5lICZwbCkgY29uc3Q7CiAgU1NlZyogVHJpbVN0YXJ0
KGRvdWJsZSB1KSBjb25zdDsKICBTU2VnKiBUcmltRW5kKGRvdWJsZSB1KSBjb25zdDsKICBTU2Vn
KiBHZXRQYXJ0KGRvdWJsZSB1MCwgZG91YmxlIHUxKSBjb25zdDsKICBib29sIEluc05vZGUoZG91
YmxlIHUpOwoKICB2b2lkIFNldFNwKGNvbnN0IFNQb2ludCAmcCk7CiAgdm9pZCBTZXRNcChjb25z
dCBTUG9pbnQgJnApOwogIHZvaWQgU2V0RXAoY29uc3QgU1BvaW50ICZwKTsKICBpbnQgU2V0M1B0
cyhjb25zdCBTUG9pbnQgJmEsIGNvbnN0IFNQb2ludCAmYiwgY29uc3QgU1BvaW50ICZjKTsKICBp
bnQgU2V0QnlQdHMoY29uc3QgU0NvbnRhaW5lclA8U1BvaW50PiAmc2V0cCk7CgogIGJvb2wgUG9p
bnRPblNlZyhjb25zdCBTUG9pbnQgJnAsIGRvdWJsZSAmdSwgU1BvaW50ICZhKSBjb25zdDsKICBi
b29sIEludGVyc2VjdChjb25zdCBTU2VnICpwcywgU0ludGVyc2VjdCAmaXNlY3RzKSBjb25zdDsK
ICBpbnQgTWFrZUN1cnZlcyhTU2VnQ29udCAmY2MpIGNvbnN0OwogIGludCBEaXNzb2x2ZShTU2Vn
Q29udCAmY2MpIGNvbnN0OwoKICBTU2VnKiBjbG9uZSgpIGNvbnN0IHsgU0N1cnZlICpwYyA9IG5l
dyBTQ3VydmUoKnRoaXMpOyByZXR1cm4gcGM7fQoKICBib29sIEluc2lkZShjb25zdCBTU2VnICpw
cykgY29uc3Q7CiAgaW50IEFidXRCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0
OwogIGludCBBb3JCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0OwoKICBkb3Vi
bGUgV2FsbHRoKGNvbnN0IFNQb2ludCAmcCwgU1BvaW50ICpwQ2VudGVyID0gMCwgU1BvaW50ICpw
cDAgPSAwLCBTUG9pbnQgKnBwMSA9IDAsIGNvbnN0IFNTZWdDb250ICpwQWdhaW5zdCA9IDApIGNv
bnN0OwogIGRvdWJsZSBXYWxsdGgoZG91YmxlIHUsIFNQb2ludCAqcENlbnRlciA9IDAsIFNQb2lu
dCAqcHAwID0gMCwgU1BvaW50ICpwcDEgPSAwLCBjb25zdCBTU2VnQ29udCAqcEFnYWluc3QgPSAw
KSBjb25zdCB7IHJldHVybiBXYWxsdGgoUG9pbnQodSksIHBDZW50ZXIsIHBwMCwgcHAxLCBwQWdh
aW5zdCk7IH0KCiAgaW50IElubmVyKFNTZWdDb250ICZjYywgYm9vbCBzZXRfb3JpZW50YXRpb25f
Y2N3ID0gdHJ1ZSkgY29uc3Q7CiAgaW50IE91dGVyKFNTZWdDb250ICZjYywgYm9vbCBzZXRfb3Jp
ZW50YXRpb25fY2N3ID0gdHJ1ZSkgY29uc3Q7CiAgaW50IGNydWRlT2Zmc2V0KFNDdXJ2ZSAmd2Ms
IGRvdWJsZSBvZmZzLCBkb3VibGUgdGlueSA9IFNTX1RJTlkpIGNvbnN0OwogIGludCBPZmZzZXQo
U1NlZ0NvbnQgJmNjLCBkb3VibGUgb2ZmcywgZG91YmxlIHRpbnkgPSBTU19USU5ZKSBjb25zdDsK
ICBkb3VibGUgTGFyZ2VzdENpcmNsZShTUG9pbnQgJmN0ciwgZG91YmxlIHRpbnkgPSAwLjAwMSkg
Y29uc3Q7CiAgZG91YmxlIExvY2FsTGFyZ2VzdENpcmNsZShkb3VibGUgdSwgU1BvaW50ICpwQ2Vu
dGVyLCBTUG9pbnQgKnBwMCwgU1BvaW50ICpwcDEsIGNvbnN0IFNTZWdDb250ICpwQWdhaW5zdCA9
IDAsIGNvbnN0IGRvdWJsZSBpbml0X3N0ZXAgPSAwLjUsIGNvbnN0IGRvdWJsZSBwYXJhdG9sX3Jh
ZGlhbnMgPSAwLjAxNzQ1MzI5MiwgY29uc3QgZG91YmxlIGNpcl90b2wgPSBfc3NfZ2xvYmFsX3Rv
bCkgY29uc3Q7CgogIGludCBSbTBsZW5zZWdzKGRvdWJsZSB0b2wgPSBfc3NfY29ubmVjdF90b2wp
OwogIGludCBGbGF0dGVuQXJjcyhkb3VibGUgYXJjaGVpZ2h0dG9sKTsKICBpbnQgQ29ubmVjdE5v
ZGVzKGRvdWJsZSB0b2wgPSBfc3NfY29ubmVjdF90b2wpOwogIGludCBDb2xsYXBzZUFyY3MoZG91
YmxlIGNlbnRlcl9kaXN0X3RvbCA9IDAuMSk7CiAgaW50IENvbGxhcHNlTGluZXMoZG91YmxlIGRl
Z3RvbCA9IDEwLjApOwogIHZvaWQgQ2xvc2VJdCgpOwogIGludCBSZW1vdmVTdGFydENpcigpIHsg
cmV0dXJuIG1fc2xpc3QuUmVtb3ZlU3RhcnRDaXIoKTsgfQogIGludCBDbGVhblNhbWUoKSB7IHJl
dHVybiBtX3NsaXN0LkNsZWFuU2FtZSgpOyB9CiAgaW50IEZpeEhlYWRUYWlsKCk7Cgp9OwoKCgpj
bGFzcyBTQ3VydmVTb3J0IHsKcHJpdmF0ZToKICBpbnQgc3o7CiAgaW50ICppbmRleDsKICBpbnQg
SW5pdChjb25zdCBTQ3VydmUgJmMpOwoKcHVibGljOgogIFNDdXJ2ZVNvcnQoKTsKICB2aXJ0dWFs
IH5TQ3VydmVTb3J0KCk7CgogIGludCBTb3J0QnlYKGNvbnN0IFNDdXJ2ZSAmYyk7CiAgaW50IFNv
cnRCeVkoY29uc3QgU0N1cnZlICZjKTsKICBpbnQgU29ydEJ5Wihjb25zdCBTQ3VydmUgJmMpOwog
IGludCBTb3J0KGNvbnN0IFNDdXJ2ZSAmYyk7CgogIGludCBTaXplKCkgY29uc3QgeyByZXR1cm4g
c3o7IH0KICBpbnQgb3BlcmF0b3JbXShpbnQgaSkgY29uc3QgeyByZXR1cm4gaW5kZXhbaV07IH0K
Cn07CgoKCiMgNCAiYm94LmNwcCIgMgoKIyA4ICJsaW5lLmgiIDEKY2xhc3MgU0luZkxpbmUgewpw
cm90ZWN0ZWQ6CiAgU1BvaW50IHNwOwogIFNWZWN0b3IgZGlydjsKcHVibGljOgoKICBmcmllbmQg
Y2xhc3MgU1BsYW5lOwoKICBTSW5mTGluZSgpIHsgfTsKICBTSW5mTGluZShjb25zdCBTUG9pbnQg
JnNwLCBjb25zdCBTVmVjdG9yICZkaXJ2KTsKICBTSW5mTGluZShjb25zdCBTVmVjdG9yICZzcCwg
Y29uc3QgU1ZlY3RvciAmZGlydik7CiAgU0luZkxpbmUoY29uc3QgU1ZlY3RvciAmZGlydiwgY29u
c3QgU1BvaW50ICZzcCk7CiAgU0luZkxpbmUoY29uc3QgU1BvaW50ICZzcCwgY29uc3QgU1BvaW50
ICZlcCk7CiAgdmlydHVhbCB+U0luZkxpbmUoKSB7IH07CgogIHZpcnR1YWwgU1BvaW50IFBvaW50
KGRvdWJsZSB1KSBjb25zdCB7IHJldHVybiBTUG9pbnQoc3ArZGlydip1KTsgfQogIHZpcnR1YWwg
U1BvaW50IEdldFNwKCkgY29uc3Qge3JldHVybiBzcDt9CiAgdmlydHVhbCBTVmVjdG9yIEdldERp
cnYoKSBjb25zdCB7cmV0dXJuIGRpcnY7fQoKICB2aXJ0dWFsIGRvdWJsZSBkaXN0KGNvbnN0IFNQ
b2ludCAmcCkgY29uc3Q7CiAgdmlydHVhbCBkb3VibGUgZGlzdChjb25zdCBTSW5mTGluZSAmbCkg
Y29uc3Q7CiAgdmlydHVhbCBib29sIFBvaW50T24oY29uc3QgU1BvaW50ICZwKSBjb25zdCB7IHJl
dHVybiBTdG9sQ29tcChkaXN0KHApLCAwLjApID09IDAuMDt9CiAgdmlydHVhbCBib29sIFBhcmFs
bGVsKGNvbnN0IFNJbmZMaW5lICZsKSBjb25zdDsKICB2aXJ0dWFsIGJvb2wgQ29saW5lYXIoY29u
c3QgU0luZkxpbmUgJmwpIGNvbnN0OwogIHZpcnR1YWwgYm9vbCBQZXJwZW5kaWN1bGFyKGNvbnN0
IFNJbmZMaW5lICZsKSBjb25zdDsKICB2aXJ0dWFsIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNJbmZM
aW5lICZsLCBTUG9pbnQgJnAsIGRvdWJsZSAmdCwgZG91YmxlICZ0bCkgY29uc3Q7Cn07CgpjbGFz
cyBTUmF5IDogcHVibGljIFNJbmZMaW5lIHsKcHVibGljOgogIFNSYXkoKSB7IH07CiAgU1JheShj
b25zdCBTUG9pbnQgJmEsIGNvbnN0IFNQb2ludCAmYikgOiBTSW5mTGluZShhLCBiKSB7fQogIFNS
YXkoY29uc3QgU1ZlY3RvciAmYSwgY29uc3QgU1ZlY3RvciAmYikgOiBTSW5mTGluZShhLCBiKSB7
fQogIFNSYXkoY29uc3QgU1BvaW50ICZhLCBjb25zdCBTVmVjdG9yICZiKSA6IFNJbmZMaW5lKGEs
IGIpIHt9CiAgU1JheShjb25zdCBTVmVjdG9yICZhLCBjb25zdCBTUG9pbnQgJmIpIDogU0luZkxp
bmUoYSwgYikge30KCiAgdmlydHVhbCB+U1JheSgpIHsgfTsKCiAgdmlydHVhbCBTUG9pbnQgUG9p
bnQoZG91YmxlIHUpIGNvbnN0IHsgcmV0dXJuIFNQb2ludChzcCtkaXJ2KnUpOyB9CiAgdmlydHVh
bCBTUG9pbnQgR2V0U3AoKSBjb25zdCB7cmV0dXJuIHNwO30KICB2aXJ0dWFsIFNWZWN0b3IgR2V0
RGlydigpIGNvbnN0IHtyZXR1cm4gZGlydjt9CgogIHZpcnR1YWwgYm9vbCBQb2ludE9uKGNvbnN0
IFNQb2ludCAmcCkgY29uc3Q7CgogIHZpcnR1YWwgYm9vbCBJbnRlcnNlY3QoY29uc3QgU0luZkxp
bmUgJmwsIFNQb2ludCAmcCwgZG91YmxlICZ0LCBkb3VibGUgJnRsKSBjb25zdDsKICB2aXJ0dWFs
IGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNSYXkgJnIsIFNQb2ludCAmcCwgZG91YmxlICZ0LCBkb3Vi
bGUgJnRyKSBjb25zdDsKfTsKCmNsYXNzIFNMaW5lIDogcHJvdGVjdGVkIFNSYXksIHB1YmxpYyBT
U2VnIHsKcHJvdGVjdGVkOgogIFNQb2ludCBlcDsKICB2b2lkIHNldHNlZ3YoY29uc3QgU1BsYW5l
ICZwbCk7CnB1YmxpYzoKCiAgU0xpbmUoKSB7IH07CiAgU0xpbmUoY29uc3QgU1BvaW50ICZzcCwg
Y29uc3QgU1BvaW50ICZlcCwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKSB7U0xpbmU6
OnNwPXNwO1NMaW5lOjplcD1lcDtkaXJ2PWVwLXNwO3NldHNlZ3YocGxhbmUpO3ByZXY9bmV4dD0w
O21fY29sb3I9MjU2O30KICBTTGluZShjb25zdCBTUG9pbnQgJnAsIGNvbnN0IFNWZWN0b3IgJmRp
ciwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKSB7c3A9cDtlcD1wK2RpcjtkaXJ2PWRp
cjtzZXRzZWd2KHBsYW5lKTtwcmV2PW5leHQ9MDttX2NvbG9yPTI1Njt9CiAgU0xpbmUoY29uc3Qg
U0xpbmUgJmwpOwogIHZpcnR1YWwgflNMaW5lKCkgeyB9OwoKICB2aXJ0dWFsIFNTZWdfdCBUeXBl
KCkgY29uc3QgeyByZXR1cm4gU0xJTkU7fQoKICBTUG9pbnQgR2V0U3AoKSBjb25zdCB7cmV0dXJu
IHNwO30KICBTUG9pbnQgR2V0RXAoKSBjb25zdCB7cmV0dXJuIGVwO30KICBTVmVjdG9yIEdldERp
cnYoKSBjb25zdCB7cmV0dXJuIGRpcnY7fQoKICBTTGluZSYgb3BlcmF0b3I9KGNvbnN0IFNMaW5l
ICZsKTsKICBib29sIG9wZXJhdG9yPT0oY29uc3QgU0xpbmUgJmwpIGNvbnN0IHsgcmV0dXJuIHNw
PT1sLnNwICYmIGVwPT1sLmVwOyB9CiAgU0xpbmUgb3BlcmF0b3ItKCkgY29uc3QgeyBTTGluZSBs
KCp0aGlzKTsgbC5SZXZlcnNlKCk7IHJldHVybiBsOyB9CgogIHZvaWQgVXBkYXRlKCkgeyBtX2Fy
ZWEgPSAwLjA7IG1fbGVuZ3RoID0gc3AuZGlzdChlcCk7IG1fYm94ID0gU0JveCh0aGlzKTsgfQog
IHZvaWQgU2V0UGxhbmUoY29uc3QgU1BsYW5lICZwKSB7bV9wbGFuZT1wO30KCiAgdmlydHVhbCBT
UG9pbnQgUG9pbnQoZG91YmxlIHUpIGNvbnN0IHsgcmV0dXJuIFNQb2ludChzcCtkaXJ2KnUpOyB9
CgogIHZvaWQgVHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pOwogIFNWZWN0b3IgVGFuZ2VudChk
b3VibGUgdSkgY29uc3QgeyByZXR1cm4gZGlydi5Vbml0KCk7fQogIFNTZWcqIFByb2ooY29uc3Qg
U1BsYW5lICZwKSBjb25zdCB7cmV0dXJuIG5ldyBTTGluZShzcC5Qcm9qKHApLCBlcC5Qcm9qKHAp
LCBwKTt9CgogIFNTZWcqIFRyaW1TdGFydChkb3VibGUgdSkgY29uc3Qge1NMaW5lICpwbD1uZXcg
U0xpbmUoUG9pbnQodSksIGVwLCBtX3BsYW5lKTtwbC0+U2V0TGF5ZXIobV9sYXllcik7cGwtPlNl
dFBsYW5lKG1fcGxhbmUpO3JldHVybiBwbDt9CiAgU1NlZyogVHJpbUVuZChkb3VibGUgdSkgY29u
c3Qge1NMaW5lICpwbD1uZXcgU0xpbmUoc3AsIFBvaW50KHUpLCBtX3BsYW5lKTtwbC0+U2V0TGF5
ZXIobV9sYXllcik7cGwtPlNldFBsYW5lKG1fcGxhbmUpO3JldHVybiBwbDt9CiAgU1NlZyogR2V0
UGFydChkb3VibGUgdTAsIGRvdWJsZSB1MSkgY29uc3Qge1NMaW5lICpwbD1uZXcgU0xpbmUoUG9p
bnQodTApLCBQb2ludCh1MSksIG1fcGxhbmUpO3BsLT5TZXRMYXllcihtX2xheWVyKTtwbC0+U2V0
UGxhbmUobV9wbGFuZSk7cmV0dXJuIHBsO30KICBpbnQgT2Zmc2V0KFNTZWdDb250ICZjYSwgZG91
YmxlIG9mZnMsIGRvdWJsZSB0aW55ID0gU1NfVElOWSkgY29uc3Q7CgogIHZvaWQgU2V0U3AoY29u
c3QgU1BvaW50ICZwKTsKICB2b2lkIFNldE1wKGNvbnN0IFNQb2ludCAmcCk7CiAgdm9pZCBTZXRF
cChjb25zdCBTUG9pbnQgJnApOwogIGludCBTZXQzUHRzKGNvbnN0IFNQb2ludCAmYSwgY29uc3Qg
U1BvaW50ICZiLCBjb25zdCBTUG9pbnQgJmMpOwogIGludCBTZXRCeVB0cyhjb25zdCBTQ29udGFp
bmVyUDxTUG9pbnQ+ICZzZXRwKTsKCiAgdm9pZCBSZXZlcnNlKCk7CiAgYm9vbCBQb2ludE9uU2Vn
KGNvbnN0IFNQb2ludCAmcCwgZG91YmxlICZ1LCBTUG9pbnQgJmEpIGNvbnN0OwoKICBib29sIElu
c2lkZShjb25zdCBTU2VnICpwcykgY29uc3Q7CiAgaW50IEFidXRCKGNvbnN0IFNTZWcgKnBCLCBT
U2VnQ29udCAmY2MpIGNvbnN0OwogIGludCBBb3JCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAm
Y2MpIGNvbnN0OwoKICBib29sIEludGVyc2VjdChjb25zdCBTSW5mTGluZSAmbCwgU1BvaW50ICZw
LCBkb3VibGUgJnQsIGRvdWJsZSAmdGwpIGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNS
YXkgJnIsIFNQb2ludCAmcCwgZG91YmxlICZ0LCBkb3VibGUgJnRyKSBjb25zdDsKICBib29sIElu
dGVyc2VjdChjb25zdCBTTGluZSAmbCwgU1BvaW50ICZwLCBkb3VibGUgJnQsIGRvdWJsZSAmdHIp
IGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNTZWcgKnBzZWcsIFNJbnRlcnNlY3QgJmlz
ZWN0cykgY29uc3Q7CgogIFNTZWcqIGNsb25lKCkgY29uc3QgeyByZXR1cm4gbmV3IFNMaW5lKCp0
aGlzKTt9Cn07CgojIDUgImJveC5jcHAiIDIKCgoKU0JveDo6U0JveChjb25zdCBTU2VnICpwcykK
ewogIHN3aXRjaCAocHMtPlR5cGUoKSkgewogIGNhc2UgU0xJTkU6CiAgICB7CiAgICAgIG1fcCA9
IHBzLT5TdGFydFBvaW50KCk7CiAgICAgIG1fdiA9IFNWZWN0b3IobV9wLCBwcy0+RW5kUG9pbnQo
KSk7CiAgICAgIG1fY3VycmVudCA9IHRydWU7CiAgICB9CiAgICBicmVhazsKICBjYXNlIFNBUkM6
CiAgICB7CiAgICAgIFNBcmMgKnBhID0gKFNBcmMgKikgcHM7CiAgICAgIFNQb2ludCBjdHIgPSBw
YS0+R2V0Q3RyKCksIGE7CiAgICAgIGRvdWJsZSByYWQgPSBwYS0+R2V0UmFkKCksIHU7CiAgICAg
IFNWZWN0b3IgaSA9IFNfSS5Qcm9qKHBhLT5HZXRQbGFuZSgpKS5Vbml0KCkqcmFkOwogICAgICBT
VmVjdG9yIGogPSBTX0ouUHJvaihwYS0+R2V0UGxhbmUoKSkuVW5pdCgpKnJhZDsKICAgICAgU1Zl
Y3RvciBrID0gU19LLlByb2oocGEtPkdldFBsYW5lKCkpLlVuaXQoKSpyYWQ7CiAgICAgIFNQb2lu
dCBzcCA9IHBhLT5TdGFydFBvaW50KCk7CiAgICAgIFNQb2ludCBlcCA9IHBhLT5FbmRQb2ludCgp
OwoKICAgICAgaWYgKHBhLT5Qb2ludE9uU2VnKGN0citpLCB1LCBhKSkKICAgICAgICBtX3YueCA9
IChjdHIraSkueDsKICAgICAgZWxzZQogICAgICAgIG1fdi54ID0gbWF4PGRvdWJsZT4oc3AueCwg
ZXAueCk7CiAgICAgIGlmIChwYS0+UG9pbnRPblNlZyhjdHItaSwgdSwgYSkpCiAgICAgICAgbV9w
LnggPSAoY3RyLWkpLng7CiAgICAgIGVsc2UKICAgICAgICBtX3AueCA9IG1pbjxkb3VibGU+KHNw
LngsIGVwLngpOwoKICAgICAgaWYgKHBhLT5Qb2ludE9uU2VnKGN0citqLCB1LCBhKSkKICAgICAg
ICBtX3YueSA9IChjdHIraikueTsKICAgICAgZWxzZQogICAgICAgIG1fdi55ID0gbWF4PGRvdWJs
ZT4oc3AueSwgZXAueSk7CiAgICAgIGlmIChwYS0+UG9pbnRPblNlZyhjdHItaiwgdSwgYSkpCiAg
ICAgICAgbV9wLnkgPSAoY3RyLWopLnk7CiAgICAgIGVsc2UKICAgICAgICBtX3AueSA9IG1pbjxk
b3VibGU+KHNwLnksIGVwLnkpOwoKICAgICAgaWYgKHBhLT5Qb2ludE9uU2VnKGN0citrLCB1LCBh
KSkKICAgICAgICBtX3YueiA9IChjdHIraykuejsKICAgICAgZWxzZQogICAgICAgIG1fdi56ID0g
bWF4PGRvdWJsZT4oc3AueiwgZXAueik7CiAgICAgIGlmIChwYS0+UG9pbnRPblNlZyhjdHItaywg
dSwgYSkpCiAgICAgICAgbV9wLnogPSAoY3RyLWspLno7CiAgICAgIGVsc2UKICAgICAgICBtX3Au
eiA9IG1pbjxkb3VibGU+KHNwLnosIGVwLnopOwoKICAgICAgbV92IC09IG1fcDsKICAgICAgbV9j
dXJyZW50ID0gdHJ1ZTsKICAgIH0KICAgIGJyZWFrOwogIGNhc2UgU0NJUkNMRToKICAgIHsKICAg
ICAgU0NpcmNsZSAqcG8gPSAoU0NpcmNsZSAqKSBwczsKICAgICAgU1BvaW50IGN0ciA9IHBvLT5H
ZXRDdHIoKTsKICAgICAgZG91YmxlIHJhZCA9IHBvLT5HZXRSYWQoKTsKICAgICAgU1ZlY3RvciBp
ID0gU19JLlByb2oocG8tPkdldFBsYW5lKCkpLlVuaXQoKSpyYWQ7CiAgICAgIFNWZWN0b3IgaiA9
IFNfSi5Qcm9qKHBvLT5HZXRQbGFuZSgpKS5Vbml0KCkqcmFkOwogICAgICBTVmVjdG9yIGsgPSBT
X0suUHJvaihwby0+R2V0UGxhbmUoKSkuVW5pdCgpKnJhZDsKCiAgICAgIG1fdi56ID0gKGN0citr
KS56OwogICAgICBtX3AueiA9IChjdHItaykuejsKICAgICAgbV92LnggPSAoY3RyK2kpLng7CiAg
ICAgIG1fcC54ID0gKGN0ci1pKS54OwogICAgICBtX3YueSA9IChjdHIraikueTsKICAgICAgbV9w
LnkgPSAoY3RyLWopLnk7CiAgICAgIG1fdiAtPSBtX3A7CiAgICAgIG1fY3VycmVudCA9IHRydWU7
CiAgICB9CiAgICBicmVhazsKICBjYXNlIFNDVVJWRToKICAgIHsKICAgICAgU0N1cnZlICpwYyA9
IChTQ3VydmUgKikgcHM7CiAgICAgIHJlZ2lzdGVyIGludCBpOwoKICAgICAgbV9jdXJyZW50ID0g
ZmFsc2U7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBwYy0+U2l6ZSgpOyBpKyspCiAgICAgICAgdGhp
cy0+VW5pb24oU0JveCgoKnBjKVtpXSkpOwogICAgfQogICAgYnJlYWs7CiAgZGVmYXVsdDoKICAg
IGJyZWFrOwogIH0KfQoKCgpib29sIFNCb3g6Ok92ZXJsYXBYKGNvbnN0IFNCb3ggJnIpIGNvbnN0
CnsKICBkb3VibGUgbWlueDEgPSBtaW48ZG91YmxlPihtX3AueCwgbV9wLngrbV92LngpOwogIGRv
dWJsZSBtYXh4MSA9IG1heDxkb3VibGU+KG1fcC54LCBtX3AueCttX3YueCk7CiAgZG91YmxlIG1p
bngyID0gbWluPGRvdWJsZT4oci5tX3AueCwgci5tX3AueCtyLm1fdi54KTsKICBkb3VibGUgbWF4
eDIgPSBtYXg8ZG91YmxlPihyLm1fcC54LCByLm1fcC54K3IubV92LngpOwogIGRvdWJsZSBtaW5l
cCA9IG1pbjxkb3VibGU+KG1heHgxLCBtYXh4Mik7CiAgZG91YmxlIG1heHNwID0gbWF4PGRvdWJs
ZT4obWlueDEsIG1pbngyKTsKCiAgcmV0dXJuIFN0b2xDb21wKG1pbmVwLCBtYXhzcCkgPj0gMDsK
fQoKCgpib29sIFNCb3g6Ok92ZXJsYXBZKGNvbnN0IFNCb3ggJnIpIGNvbnN0CnsKICBkb3VibGUg
bWlueTEgPSBtaW48ZG91YmxlPihtX3AueSwgbV9wLnkrbV92LnkpOwogIGRvdWJsZSBtYXh5MSA9
IG1heDxkb3VibGU+KG1fcC55LCBtX3AueSttX3YueSk7CiAgZG91YmxlIG1pbnkyID0gbWluPGRv
dWJsZT4oci5tX3AueSwgci5tX3AueStyLm1fdi55KTsKICBkb3VibGUgbWF4eTIgPSBtYXg8ZG91
YmxlPihyLm1fcC55LCByLm1fcC55K3IubV92LnkpOwogIGRvdWJsZSBtaW5lcCA9IG1pbjxkb3Vi
bGU+KG1heHkxLCBtYXh5Mik7CiAgZG91YmxlIG1heHNwID0gbWF4PGRvdWJsZT4obWlueTEsIG1p
bnkyKTsKCiAgcmV0dXJuIFN0b2xDb21wKG1pbmVwLCBtYXhzcCkgPj0gMDsKfQoKCgpib29sIFNC
b3g6Ok92ZXJsYXBaKGNvbnN0IFNCb3ggJnIpIGNvbnN0CnsKICBkb3VibGUgbWluejEgPSBtaW48
ZG91YmxlPihtX3AueiwgbV9wLnorbV92LnopOwogIGRvdWJsZSBtYXh6MSA9IG1heDxkb3VibGU+
KG1fcC56LCBtX3AueittX3Yueik7CiAgZG91YmxlIG1pbnoyID0gbWluPGRvdWJsZT4oci5tX3Au
eiwgci5tX3AueityLm1fdi56KTsKICBkb3VibGUgbWF4ejIgPSBtYXg8ZG91YmxlPihyLm1fcC56
LCByLm1fcC56K3IubV92LnopOwogIGRvdWJsZSBtaW5lcCA9IG1pbjxkb3VibGU+KG1heHoxLCBt
YXh6Mik7CiAgZG91YmxlIG1heHNwID0gbWF4PGRvdWJsZT4obWluejEsIG1pbnoyKTsKCiAgcmV0
dXJuIFN0b2xDb21wKG1pbmVwLCBtYXhzcCkgPj0gMDsKfQoKCgpib29sIFNCb3g6Okluc2lkZVgo
Y29uc3QgU0JveCAmcikgY29uc3QKewogIGRvdWJsZSBtaW54MSA9IG1pbjxkb3VibGU+KG1fcC54
LCBtX3AueCttX3YueCk7CiAgZG91YmxlIG1heHgxID0gbWF4PGRvdWJsZT4obV9wLngsIG1fcC54
K21fdi54KTsKICBkb3VibGUgbWlueDIgPSBtaW48ZG91YmxlPihyLm1fcC54LCByLm1fcC54K3Iu
bV92LngpOwogIGRvdWJsZSBtYXh4MiA9IG1heDxkb3VibGU+KHIubV9wLngsIHIubV9wLngrci5t
X3YueCk7CgogIHJldHVybiBTdG9sQ29tcChtaW54MiwgbWlueDEpIDw9IDAgJiYgU3RvbENvbXAo
bWF4eDEsIG1heHgyKSA8PSAwOwp9CgoKCmJvb2wgU0JveDo6SW5zaWRlWShjb25zdCBTQm94ICZy
KSBjb25zdAp7CiAgZG91YmxlIG1pbnkxID0gbWluPGRvdWJsZT4obV9wLnksIG1fcC55K21fdi55
KTsKICBkb3VibGUgbWF4eTEgPSBtYXg8ZG91YmxlPihtX3AueSwgbV9wLnkrbV92LnkpOwogIGRv
dWJsZSBtaW55MiA9IG1pbjxkb3VibGU+KHIubV9wLnksIHIubV9wLnkrci5tX3YueSk7CiAgZG91
YmxlIG1heHkyID0gbWF4PGRvdWJsZT4oci5tX3AueSwgci5tX3AueStyLm1fdi55KTsKCiAgcmV0
dXJuIFN0b2xDb21wKG1pbnkyLCBtaW55MSkgPD0gMCAmJiBTdG9sQ29tcChtYXh5MSwgbWF4eTIp
IDw9IDA7Cn0KCgoKYm9vbCBTQm94OjpJbnNpZGVaKGNvbnN0IFNCb3ggJnIpIGNvbnN0CnsKICBk
b3VibGUgbWluejEgPSBtaW48ZG91YmxlPihtX3AueiwgbV9wLnorbV92LnopOwogIGRvdWJsZSBt
YXh6MSA9IG1heDxkb3VibGU+KG1fcC56LCBtX3AueittX3Yueik7CiAgZG91YmxlIG1pbnoyID0g
bWluPGRvdWJsZT4oci5tX3Aueiwgci5tX3AueityLm1fdi56KTsKICBkb3VibGUgbWF4ejIgPSBt
YXg8ZG91YmxlPihyLm1fcC56LCByLm1fcC56K3IubV92LnopOwoKICByZXR1cm4gU3RvbENvbXAo
bWluejIsIG1pbnoxKSA8PSAwICYmIFN0b2xDb21wKG1heHoxLCBtYXh6MikgPD0gMDsKfQoKCgpT
Qm94JiBTQm94OjpVbmlvbihjb25zdCBTQm94ICZyKQp7CiAgaWYgKCFtX2N1cnJlbnQpIHsKICAg
ICp0aGlzID0gcjsKICAgIG1fY3VycmVudCA9IHRydWU7CiAgfSBlbHNlIHsKICAgIGRvdWJsZSBt
aW54MSA9IG1pbjxkb3VibGU+KG1fcC54LCBtX3AueCttX3YueCk7CiAgICBkb3VibGUgbWF4eDEg
PSBtYXg8ZG91YmxlPihtX3AueCwgbV9wLngrbV92LngpOwogICAgZG91YmxlIG1pbngyID0gbWlu
PGRvdWJsZT4oci5tX3AueCwgci5tX3AueCtyLm1fdi54KTsKICAgIGRvdWJsZSBtYXh4MiA9IG1h
eDxkb3VibGU+KHIubV9wLngsIHIubV9wLngrci5tX3YueCk7CgogICAgZG91YmxlIG1pbnkxID0g
bWluPGRvdWJsZT4obV9wLnksIG1fcC55K21fdi55KTsKICAgIGRvdWJsZSBtYXh5MSA9IG1heDxk
b3VibGU+KG1fcC55LCBtX3AueSttX3YueSk7CiAgICBkb3VibGUgbWlueTIgPSBtaW48ZG91Ymxl
PihyLm1fcC55LCByLm1fcC55K3IubV92LnkpOwogICAgZG91YmxlIG1heHkyID0gbWF4PGRvdWJs
ZT4oci5tX3AueSwgci5tX3AueStyLm1fdi55KTsKCiAgICBkb3VibGUgbWluejEgPSBtaW48ZG91
YmxlPihtX3AueiwgbV9wLnorbV92LnopOwogICAgZG91YmxlIG1heHoxID0gbWF4PGRvdWJsZT4o
bV9wLnosIG1fcC56K21fdi56KTsKICAgIGRvdWJsZSBtaW56MiA9IG1pbjxkb3VibGU+KHIubV9w
LnosIHIubV9wLnorci5tX3Yueik7CiAgICBkb3VibGUgbWF4ejIgPSBtYXg8ZG91YmxlPihyLm1f
cC56LCByLm1fcC56K3IubV92LnopOwoKICAgIG1fcC54ID0gbWluPGRvdWJsZT4obWlueDEsIG1p
bngyKTsKICAgIG1fcC55ID0gbWluPGRvdWJsZT4obWlueTEsIG1pbnkyKTsKICAgIG1fcC56ID0g
bWluPGRvdWJsZT4obWluejEsIG1pbnoyKTsKCiAgICBtX3YueCA9IG1heDxkb3VibGU+KG1heHgx
LCBtYXh4Mik7CiAgICBtX3YueSA9IG1heDxkb3VibGU+KG1heHkxLCBtYXh5Mik7CiAgICBtX3Yu
eiA9IG1heDxkb3VibGU+KG1heHoxLCBtYXh6Mik7CgogICAgbV92IC09IG1fcDsKICB9CgogIHJl
dHVybiAqdGhpczsKfQoKCgp2b2lkIFNCb3g6OkdldDhQb2ludHMoU1BvaW50ICpwcCkgY29uc3QK
ewogIFNWZWN0b3IgeGEsIHlhLCB6YTsKICB4YSA9IFNfSSAqIG1fdi54OwogIHlhID0gU19KICog
bV92Lnk7CiAgemEgPSBTX0sgKiBtX3YuejsKICBwcFswXSA9IG1fcDsKICBwcFsxXSA9IG1fcCt4
YTsKICBwcFsyXSA9IHBwWzFdK3lhOwogIHBwWzNdID0gcHBbMl0teGE7CiAgcHBbNF0gPSBwcFsw
XSt6YTsKICBwcFs1XSA9IHBwWzFdK3phOwogIHBwWzZdID0gcHBbMl0remE7CiAgcHBbN10gPSBw
cFszXSt6YTsKfQoKCgp2b2lkIFNCb3g6OkdldEJveENvbnQoU1NlZ0NvbnQgJmNjKSBjb25zdAp7
CiAgU1BvaW50IHBzWzhdOwogIEdldDhQb2ludHMocHMpOwogIGNjLkFkZChuZXcgU0xpbmUocHNb
MF0sIHBzWzFdKSk7CiAgY2MuQWRkKG5ldyBTTGluZShwc1sxXSwgcHNbMl0pKTsKICBjYy5BZGQo
bmV3IFNMaW5lKHBzWzJdLCBwc1szXSkpOwogIGNjLkFkZChuZXcgU0xpbmUocHNbM10sIHBzWzBd
KSk7CiAgY2MuQWRkKG5ldyBTTGluZShwc1s0XSwgcHNbNV0pKTsKICBjYy5BZGQobmV3IFNMaW5l
KHBzWzVdLCBwc1s2XSkpOwogIGNjLkFkZChuZXcgU0xpbmUocHNbNl0sIHBzWzddKSk7CiAgY2Mu
QWRkKG5ldyBTTGluZShwc1s3XSwgcHNbNF0pKTsKICBjYy5BZGQobmV3IFNMaW5lKHBzWzBdLCBw
c1s0XSkpOwogIGNjLkFkZChuZXcgU0xpbmUocHNbMV0sIHBzWzVdKSk7CiAgY2MuQWRkKG5ldyBT
TGluZShwc1syXSwgcHNbNl0pKTsKICBjYy5BZGQobmV3IFNMaW5lKHBzWzNdLCBwc1s3XSkpOwp9
Cg==


             reply	other threads:[~2001-06-09 15:36 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-06-09 15:36 ltuikov [this message]
2001-06-09 22:16 Luben Tuikov
2001-06-14 19:21 rodrigc

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20010609223306.32419.qmail@sourceware.cygnus.com \
    --to=ltuikov@yahoo.com \
    --cc=gcc-gnats@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).