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


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

optimization/3279: internal error at compiling a c++ source file



>Number:         3279
>Category:       optimization
>Synopsis:       internal error at compiling a c++ source file
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 19 22:26:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Grigori Goronzy
>Release:        Reading specs from /usr/local/lib/gcc-lib/i586-pc-linux-gnu/3.0/specsConfigured with: ../gcc-3.0/configure --prefix=/usr/local --with-gxx-include-dir=/usr/local/include/g++ --enable-shared --enable-nls --enable-languages=c,c++Thread mode
>Organization:
>Environment:
linux 2.4.5, i386, slackware linux, glibc 2.2
>Description:
when i try to compile the attached file with -O3, gcc crashes with an internal compiler error:
c++ -o nsFormControlHelper.o -c -DOSTYPE=\"Linux2.4\" -DOSARCH=\"Linux\" -DOJI -D_IMPL_NS_HTML -DENDER_LITE   -I../../../../dist/include -I../../../../dist/include -I/windows/hda12/moz-cvs/mozilla/dist/include/nspr      -I./../../../base/src -I./../../base/src -I./../../style/src -I./../../../xul/base/src  -I/usr/X11R6/include   -fPIC  -I/usr/X11R6/include -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Wbad-function-cast -Wcast-align -Woverloaded-virtual -Wsynth -pedantic -Wno-long-long -pipe -fshort-wchar -pthread -O3  -DNDEBUG -DTRIMMED -I/usr/X11R6/include -DMOZILLA_CLIENT -include ../../../../config-defs.h -Wp,-MD,.deps/nsFormControlHelper.pp nsFormControlHelper.cpp
nsFormControlHelper.cpp: In static member function `static void 
   nsFormControlHelper::PaintFixedSizeCheckMark(nsIRenderingContext&, float)':
nsFormControlHelper.cpp:733: Internal error: Speicherzugriffsfehler
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
gmake[5]: *** [nsFormControlHelper.o] Error 1

a preproccessed .ii - file is attached.

>How-To-Repeat:
gcc -O3 nsFormControlHelper.ii
>Fix:
don't know...
>Release-Note:
>Audit-Trail:
>Unformatted:
 l: singlegcc version 3.0
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="nsFormControlHelper.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="nsFormControlHelper.ii"

IyAxICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIKIyAxICIuLi8uLi8uLi8uLi9jb25maWctZGVm
cy5oIiAxCiMgMiAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAyMiAibnNGb3JtQ29udHJv
bEhlbHBlci5jcHAiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEK
IyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRGVidWcuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNEZWJ1Zy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbS5oIiAxCiMg
MjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiIDIKIyAxICIvd2luZG93cy9o
ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMzkg
Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVz
LmgiCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3ByY3B1Y2ZnLmgiIDEKIyA0MCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
NTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAz
CnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAxOTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgc2l6ZV90OwojIDQzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJ0eXBlcy5oIiAyCiMgMjM0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgpleHRlcm4gIkMiIHsKIyAyNDQgIi93aW5k
b3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5
cGVkZWYgdW5zaWduZWQgY2hhciBQUlVpbnQ4OwojIDI1OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2
cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBzaWduZWQgY2hh
ciBQUkludDg7CiMgMjcxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFBSVWludDE2Owp0eXBl
ZGVmIHNob3J0IFBSSW50MTY7CiMgMjg0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGludCBQUlVpbnQz
MjsKdHlwZWRlZiBpbnQgUFJJbnQzMjsKIyAzMTggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgbG9uZyBsb25nIFBSSW50
NjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFBSVWludDY0OwojIDM0MiAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRl
ZiBpbnQgUFJJbnRuOwp0eXBlZGVmIHVuc2lnbmVkIGludCBQUlVpbnRuOwojIDM1MyAiL3dpbmRv
d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlw
ZWRlZiBkb3VibGUgUFJGbG9hdDY0OwoKCgoKCgp0eXBlZGVmIHNpemVfdCBQUlNpemU7CgoKCgoK
Cgp0eXBlZGVmIFBSSW50MzIgUFJPZmZzZXQzMjsKdHlwZWRlZiBQUkludDY0IFBST2Zmc2V0NjQ7
CgoKCgoKCgp0eXBlZGVmIHB0cmRpZmZfdCBQUlB0cmRpZmY7CgoKCgoKCgp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgUFJVcHRyZGlmZjsKIyAzOTUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgUFJJbnRuIFBSQm9vbDsKIyA0
MDUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5
cGVzLmgiCnR5cGVkZWYgUFJVaW50OCBQUlBhY2tlZEJvb2w7CgoKCgoKdHlwZWRlZiBlbnVtIHsg
UFJfRkFJTFVSRSA9IC0xLCBQUl9TVUNDRVNTID0gMCB9IFBSU3RhdHVzOwojIDQyNCAiL3dpbmRv
d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlw
ZWRlZiBsb25nIFBSV29yZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBSVXdvcmQ7CiMgNDY2ICIv
d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5o
IgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9v
YnNvbGV0ZS9wcm90eXBlcy5oIiAxCiMgMjkgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSVWludG4g
dWludG47Cgp0eXBlZGVmIFBSSW50biBpbnRuOwojIDUzICIvd2luZG93cy9oZGExMi9tb3otY3Zz
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzExICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEyICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpl
eHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQg
Y2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYg
dW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9f
ZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9f
ZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVk
ZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2lu
dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2ln
bmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4
dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVu
c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRl
ZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVk
ZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3Vf
bG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBf
X25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xv
ZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVm
IF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRl
ZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwog
IH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2Fk
ZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191
c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBp
bnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQg
X19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBf
X2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBl
ZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90
Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNi
bGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191
X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoK
dHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRf
dDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJl
YWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3By
aW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMK
CgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBf
X3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpf
cHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBp
bnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9w
YXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwog
IHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3Rh
Y2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRl
ZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVh
ZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK
ewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk
IGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2Vy
dmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBf
X21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9t
dXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRf
bXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBz
dHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3
X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsK
ICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3
X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0
aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBp
bnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGls
ZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0
aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2Jh
X3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmll
cl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmll
cmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQg
Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDIgMwoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1
X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0
eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBl
ZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRl
ZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlw
ZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRl
ZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlw
ZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlw
ZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5
cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlw
ZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlw
ZWRlZiBfX2tleV90IGtleV90OwojIDEyNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1NyAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoK
CnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgODAgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDIgMwoKCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgOTIgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTI3
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1
c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAx
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAxNDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVz
aG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxODQgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9p
bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0
eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18p
KSk7CiMgMjA2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZW5kaWFuLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMg
MzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlh
bi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyAyMDcgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAx
IDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9z
ZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
c2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVm
IGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQg
bG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSld
OwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK
CnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMSAzCiMgMTA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsK
ICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyA0NCAiL3Vz
ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu
aCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDIgMwoK
CgpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRz
X3QgdHZfdXNlYzsKICB9OwojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoK
dHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoK
ICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsK
CgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDg5ICIv
dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50
IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAg
ICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAg
ICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAg
c3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMs
CiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAg
ICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2sp
IHRocm93ICgpOwoKCn0KIyAyMTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTMgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoK
dHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Js
a2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1MSAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5
cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90
IGZzZmlsY250NjRfdDsKCgp9CiMgNTQgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIiAyCgoKCgoKdHlwZWRlZiBQUlVp
bnQ2NCB1aW50NjQ7Cgp0eXBlZGVmIFBSVWludDMyIHVpbnQzMjsKCgoKdHlwZWRlZiBQUlVpbnQx
NiB1aW50MTY7CnR5cGVkZWYgUFJVaW50OCB1aW50ODsKIyA3NyAiL3dpbmRvd3MvaGRhMTIvbW96
LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL29ic29sZXRlL3Byb3R5cGVzLmgiCnR5cGVk
ZWYgUFJJbnQ2NCBpbnQ2NDsKCgoKCgoKCnR5cGVkZWYgUFJJbnQzMiBpbnQzMjsKCgoKCnR5cGVk
ZWYgUFJJbnQxNiBpbnQxNjsKdHlwZWRlZiBQUkludDggaW50ODsKCgoKCgp0eXBlZGVmIFBSRmxv
YXQ2NCBmbG9hdDY0Owp0eXBlZGVmIFBSVXB0cmRpZmYgdXB0cmRpZmZfdDsKdHlwZWRlZiBQUlV3
b3JkIHVwcndvcmRfdDsKdHlwZWRlZiBQUldvcmQgcHJ3b3JkX3Q7CiMgNDY3ICIvd2luZG93cy9o
ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAyCgoKCgoK
fQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIiAyCiMgNDIgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiCmNsYXNzIG5zRGVidWcgewpwdWJsaWM6CgoK
CgoKCiAgc3RhdGljIHZvaWQgQWJvcnRJZkZhbHNlKGNvbnN0IGNoYXIqIGFTdHIsIGNvbnN0IGNo
YXIqIGFFeHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
YUZpbGUsIFBSSW50biBhTGluZSk7CiMgNjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Rl
YnVnLmgiCiAgc3RhdGljIFBSQm9vbCBXYXJuSWZGYWxzZShjb25zdCBjaGFyKiBhU3RyLCBjb25z
dCBjaGFyKiBhRXhwciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKIyA3OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zRGVidWcuaCIKICBzdGF0aWMgdm9pZCBTZXRXYXJuaW5nTWVzc2FnZUJveEVuYWJsZShQUkJv
b2wgYU9uT2ZmKTsKCgoKCiAgc3RhdGljIFBSQm9vbCBHZXRXYXJuaW5nTWVzc2FnZUJveEVuYWJs
ZSh2b2lkKTsKIyA5NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVidWcuaCIKICBzdGF0
aWMgdm9pZCBBYm9ydChjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3Rh
dGljIHZvaWQgQnJlYWsoY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0
YXRpYyB2b2lkIFByZUNvbmRpdGlvbihjb25zdCBjaGFyKiBhU3RyLCBjb25zdCBjaGFyKiBhRXhw
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQ
UkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBQb3N0Q29uZGl0aW9uKGNvbnN0IGNoYXIq
IGFTdHIsIGNvbnN0IGNoYXIqIGFFeHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBB
c3NlcnRpb24oY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoK
CiAgc3RhdGljIHZvaWQgTm90WWV0SW1wbGVtZW50ZWQoY29uc3QgY2hhciogYU1lc3NhZ2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQ
UkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBOb3RSZWFjaGVkKGNvbnN0IGNoYXIqIGFN
ZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxl
LCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBFcnJvcihjb25zdCBjaGFyKiBhTWVz
c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50
biBhTGluZSk7CgoKCgogIHN0YXRpYyB2b2lkIFdhcm5pbmcoY29uc3QgY2hhciogYU1lc3NhZ2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBh
TGluZSk7Cn07CiMgNDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAyCgoK
CgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMTAgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc3Jvb3RpZGwuaCIgMQojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNyb290aWRsLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMg
MzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIKIyAxICIvd2luZG93cy9oZGEx
Mi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMzggIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zRGVidWcuaCIgMQojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNj
b3JlLmgiIDIKIyAyMTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIKICAgIHR5
cGVkZWYgUFJVaW50MTYgUFJVbmljaGFyOwojIDEyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNyb290aWRsLmgiIDIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJ0aW1lLmgiIDEKIyAzMiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1j
dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDMwICIvd2luZG93cy9o
ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiCiMgMSAiL3dp
bmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIg
MQojIDMxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJsb25nLmgiIDIKCmV4dGVybiAiQyIgewojIDUwICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiCmV4dGVybiBQUkludDY0IExMX01heElu
dCh2b2lkKTsKZXh0ZXJuIFBSSW50NjQgTExfTWluSW50KHZvaWQpOwpleHRlcm4gUFJJbnQ2NCBM
TF9aZXJvKHZvaWQpOwojIDQwNyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BybG9uZy5oIgp9CiMgMzMgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNjEgIi93
aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIK
dHlwZWRlZiBQUkludDY0IFBSVGltZTsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJUaW1lUGFyYW1l
dGVycyB7CiAgICBQUkludDMyIHRwX2dtdF9vZmZzZXQ7CiAgICBQUkludDMyIHRwX2RzdF9vZmZz
ZXQ7Cn0gUFJUaW1lUGFyYW1ldGVyczsKIyA5NiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgp0eXBlZGVmIHN0cnVjdCBQUkV4cGxvZGVk
VGltZSB7CiAgICBQUkludDMyIHRtX3VzZWM7CiAgICBQUkludDMyIHRtX3NlYzsKCiAgICBQUklu
dDMyIHRtX21pbjsKICAgIFBSSW50MzIgdG1faG91cjsKICAgIFBSSW50MzIgdG1fbWRheTsKCiAg
ICBQUkludDMyIHRtX21vbnRoOwogICAgUFJJbnQxNiB0bV95ZWFyOwoKCiAgICBQUkludDggdG1f
d2RheTsKCiAgICBQUkludDE2IHRtX3lkYXk7CgoKICAgIFBSVGltZVBhcmFtZXRlcnMgdG1fcGFy
YW1zOwp9IFBSRXhwbG9kZWRUaW1lOwojIDEzOSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgp0eXBlZGVmIFBSVGltZVBhcmFtZXRlcnMg
KCAqUFJUaW1lUGFyYW1GbikoY29uc3QgUFJFeHBsb2RlZFRpbWUgKmdtdCk7CiMgMTYxICIvd2lu
ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4
dGVybiBQUlRpbWUKClBSX05vdyh2b2lkKTsKIyAxNzUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIHZvaWQgUFJfRXhwbG9k
ZVRpbWUoCiAgICBQUlRpbWUgdXNlY3MsIFBSVGltZVBhcmFtRm4gcGFyYW1zLCBQUkV4cGxvZGVk
VGltZSAqZXhwbG9kZWQpOwoKCgoKCmV4dGVybiBQUlRpbWUKClBSX0ltcGxvZGVUaW1lKGNvbnN0
IFBSRXhwbG9kZWRUaW1lICpleHBsb2RlZCk7CiMgMTk4ICIvd2luZG93cy9oZGExMi9tb3otY3Zz
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBSX05vcm1h
bGl6ZVRpbWUoCiAgICBQUkV4cGxvZGVkVGltZSAqZXhwbG9kZWQsIFBSVGltZVBhcmFtRm4gcGFy
YW1zKTsKCgoKCgoKZXh0ZXJuIFBSVGltZVBhcmFtZXRlcnMgUFJfTG9jYWxUaW1lUGFyYW1ldGVy
cyhjb25zdCBQUkV4cGxvZGVkVGltZSAqZ210KTsKCgpleHRlcm4gUFJUaW1lUGFyYW1ldGVycyBQ
Ul9HTVRQYXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9kZWRUaW1lICpnbXQpOwoKCgoKCmV4dGVybiBQ
UlRpbWVQYXJhbWV0ZXJzIFBSX1VTUGFjaWZpY1RpbWVQYXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9k
ZWRUaW1lICpnbXQpOwojIDI0OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydGltZS5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUGFyc2VUaW1lU3RyaW5n
ICgKICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcsCiAgICAgICAgUFJCb29sIGRlZmF1bHRfdG9f
Z210LAogICAgICAgIFBSVGltZSAqcmVzdWx0KTsKIyAyNjUgIi93aW5kb3dzL2hkYTEyL21vei1j
dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIFBSVWludDMyIFBS
X0Zvcm1hdFRpbWUoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBjb25zdCBjaGFyICpmbXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUkV4cGxvZGVkVGlt
ZSAqdG0pOwoKCgoKZXh0ZXJuIFBSVWludDMyClBSX0Zvcm1hdFRpbWVVU0VuZ2xpc2goIGNoYXIq
IGJ1ZiwgUFJVaW50MzIgYnVmU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZm9ybWF0LCBjb25zdCBQUkV4cGxvZGVkVGltZSogdG0gKTsKCgoKfQojIDEzICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNyb290aWRsLmgiIDIKIyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVN1cHBvcnRzLmgiIDIKIyAxMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTdXBwb3J0cy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0
aWxzLmgiIDEKIyAzMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMu
aCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAzMyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgoKCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRGVidWcuaCIgMQojIDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIgojIDEgIi91c3Iv
aW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBf
X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9f
ZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
dm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpf
X3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChf
X2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hy
IChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChf
X2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19j
LCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3Ry
bmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hh
ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3Ry
Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25z
dCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94
bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3Ry
dWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEz
XTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAq
X19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2Fs
ZV90OwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50IF9fc3Ry
Y29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVf
dCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g
c2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNp
emVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1
cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
CmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2Nv
bnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90
IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ry
c3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChf
X2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3Qg
Y2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9f
Y29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAo
Y2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQog
ICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmlj
dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2
ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3Rh
Y2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVf
dCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f
ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25z
dCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0
ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhs
ZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4g
Y2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpz
dHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQg
Kl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQg
Kl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZv
aWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3Qg
Y2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19p
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAo
bG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCl9fZXh0ZW5z
aW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9s
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3Mx
LCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3Ry
aW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVs
aW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9f
czEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93ICgpOwoK
CmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNw
eSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny
YykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBuY3B5IChj
aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIg
KnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1mcm9i
ICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYmFz
ZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzYzICIvdXNyL2lu
Y2x1ZGUvc3RyaW5nLmgiIDMKfQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5o
IiAyCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiCnN0cnVjdCBuc0lEIHsK
CgoKCgogIFBSVWludDMyIG0wOwogIFBSVWludDE2IG0xOwogIFBSVWludDE2IG0yOwogIFBSVWlu
dDggbTNbOF07CiMgNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiCiAgaW5saW5l
IFBSQm9vbCBFcXVhbHMoY29uc3QgbnNJRCYgb3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiAoUFJC
b29sKQogICAgICAoKCgoUFJVaW50MzIqKSAmbTApWzBdID09ICgoUFJVaW50MzIqKSAmb3RoZXIu
bTApWzBdKSAmJgogICAgICAgKCgoUFJVaW50MzIqKSAmbTApWzFdID09ICgoUFJVaW50MzIqKSAm
b3RoZXIubTApWzFdKSAmJgogICAgICAgKCgoUFJVaW50MzIqKSAmbTApWzJdID09ICgoUFJVaW50
MzIqKSAmb3RoZXIubTApWzJdKSAmJgogICAgICAgKCgoUFJVaW50MzIqKSAmbTApWzNdID09ICgo
UFJVaW50MzIqKSAmb3RoZXIubTApWzNdKSk7CiAgfQoKCgoKCiAgICAgICAgIFBSQm9vbCBQYXJz
ZShjb25zdCBjaGFyICphSURTdHIpOwoKCgoKCiAgICAgICAgIGNoYXIqIFRvU3RyaW5nKCkgY29u
c3Q7Cgp9OwojIDEwMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUQuaCIKdHlwZWRlZiBu
c0lEIG5zQ0lEOwojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGls
cy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlELmgiIDEKIyAzNSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlELmgiCnR5cGVkZWYgbnNJRCBuc0lJRDsKIyAzOCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Vycm9yLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zRXJyb3IuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb20uaCIg
MQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAyCiMgMSAiL3dpbmRv
d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj
IDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAyCgoKCgoKdHlwZWRlZiBQ
UlVpbnQzMiBuc3Jlc3VsdDsKIyAyNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Vycm9y
LmgiCmV4dGVybiBuc3Jlc3VsdApOU19FcnJvckFjY29yZGluZ1RvTlNQUigpOwojIDM5ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgMSAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIiAxCiMgMjcg
Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20u
aCIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJ0eXBlcy5oIiAxCiMgMjggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmF0b20uaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvY2suaCIgMQojIDMyICIvd2luZG93cy9oZGExMi9tb3ot
Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiCiMgMSAiL3dpbmRvd3MvaGRh
MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDMzICIv
d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgi
IDIKCmV4dGVybiAiQyIgewojIDQ3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiCnR5cGVkZWYgc3RydWN0IFBSTG9jayBQUkxvY2s7CiMg
NjQgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxv
Y2suaCIKZXh0ZXJuIFBSTG9jayogUFJfTmV3TG9jayh2b2lkKTsKIyA3NSAiL3dpbmRvd3MvaGRh
MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gdm9p
ZCBQUl9EZXN0cm95TG9jayhQUkxvY2sgKmxvY2spOwojIDg2ICIvd2luZG93cy9oZGExMi9tb3ot
Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiCmV4dGVybiB2b2lkIFBSX0xv
Y2soUFJMb2NrICpsb2NrKTsKIyA5OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gUFJTdGF0dXMgUFJfVW5sb2NrKFBSTG9j
ayAqbG9jayk7Cgp9CiMgMjkgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmF0b20uaCIgMgoKZXh0ZXJuICJDIiB7CiMgNDEgIi93aW5kb3dzL2hkYTEy
L21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50
MzIgUFJfQXRvbWljSW5jcmVtZW50KFBSSW50MzIgKnZhbCk7CiMgNTIgIi93aW5kb3dzL2hkYTEy
L21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50
MzIgUFJfQXRvbWljRGVjcmVtZW50KFBSSW50MzIgKnZhbCk7CiMgNjQgIi93aW5kb3dzL2hkYTEy
L21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50
MzIgUFJfQXRvbWljU2V0KFBSSW50MzIgKnZhbCwgUFJJbnQzMiBuZXd2YWwpOwojIDc2ICIvd2lu
ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4
dGVybiBQUkludDMyIFBSX0F0b21pY0FkZChQUkludDMyICpwdHIsIFBSSW50MzIgdmFsKTsKCgoK
CnR5cGVkZWYgc3RydWN0IFBSU3RhY2tFbGVtU3RyIFBSU3RhY2tFbGVtOwoKc3RydWN0IFBSU3Rh
Y2tFbGVtU3RyIHsKICAgIFBSU3RhY2tFbGVtICpwcnN0a19lbGVtX25leHQ7Cgp9OwoKdHlwZWRl
ZiBzdHJ1Y3QgUFJTdGFja1N0ciBQUlN0YWNrOwojIDk5ICIvd2luZG93cy9oZGExMi9tb3otY3Zz
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUlN0YWNrICogUFJf
Q3JlYXRlU3RhY2soY29uc3QgY2hhciAqc3RhY2tfbmFtZSk7CiMgMTExICIvd2luZG93cy9oZGEx
Mi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiB2b2lk
IFBSX1N0YWNrUHVzaChQUlN0YWNrICpzdGFjaywgUFJTdGFja0VsZW0gKnN0YWNrX2VsZW0pOwoj
IDEyNCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
YXRvbS5oIgpleHRlcm4gUFJTdGFja0VsZW0gKiBQUl9TdGFja1BvcChQUlN0YWNrICpzdGFjayk7
CiMgMTM4ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJhdG9tLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9EZXN0cm95U3RhY2soUFJTdGFjayAqc3RhY2sp
OwoKfQojIDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAy
CgoKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJjbW9uLmgiIDEKIyAzMiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByY21vbi5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIiAxCiMgMjIgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21v
ei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyMyAiL3dpbmRv
d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybW9uLmgiIDIKIyAx
ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2
YWwuaCIgMQojIDM0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJpbnJ2YWwuaCIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMzUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAyCgpleHRlcm4gIkMiIHsKCgoK
Cgp0eXBlZGVmIFBSVWludDMyIFBSSW50ZXJ2YWxUaW1lOwojIDg5ICIvd2luZG93cy9oZGExMi9t
b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIKZXh0ZXJuIFBSSW50
ZXJ2YWxUaW1lIFBSX0ludGVydmFsTm93KHZvaWQpOwojIDEwNyAiL3dpbmRvd3MvaGRhMTIvbW96
LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiCmV4dGVybiBQUlVpbnQz
MiBQUl9UaWNrc1BlclNlY29uZCh2b2lkKTsKIyAxMjYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJJbnRlcnZhbFRp
bWUgUFJfU2Vjb25kc1RvSW50ZXJ2YWwoUFJVaW50MzIgc2Vjb25kcyk7CmV4dGVybiBQUkludGVy
dmFsVGltZSBQUl9NaWxsaXNlY29uZHNUb0ludGVydmFsKFBSVWludDMyIG1pbGxpKTsKZXh0ZXJu
IFBSSW50ZXJ2YWxUaW1lIFBSX01pY3Jvc2Vjb25kc1RvSW50ZXJ2YWwoUFJVaW50MzIgbWljcm8p
OwojIDE0NyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3ByaW5ydmFsLmgiCmV4dGVybiBQUlVpbnQzMiBQUl9JbnRlcnZhbFRvU2Vjb25kcyhQUkludGVy
dmFsVGltZSB0aWNrcyk7CmV4dGVybiBQUlVpbnQzMiBQUl9JbnRlcnZhbFRvTWlsbGlzZWNvbmRz
KFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsKZXh0ZXJuIFBSVWludDMyIFBSX0ludGVydmFsVG9NaWNy
b3NlY29uZHMoUFJJbnRlcnZhbFRpbWUgdGlja3MpOwoKfQojIDI0ICIvd2luZG93cy9oZGExMi9t
b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIgMgoKZXh0ZXJuICJDIiB7
Cgp0eXBlZGVmIHN0cnVjdCBQUk1vbml0b3IgUFJNb25pdG9yOwojIDM2ICIvd2luZG93cy9oZGEx
Mi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIKZXh0ZXJuIFBSTW9u
aXRvciogUFJfTmV3TW9uaXRvcih2b2lkKTsKCgoKCgoKCmV4dGVybiB2b2lkIFBSX0Rlc3Ryb3lN
b25pdG9yKFBSTW9uaXRvciAqbW9uKTsKCgoKCgoKZXh0ZXJuIHZvaWQgUFJfRW50ZXJNb25pdG9y
KFBSTW9uaXRvciAqbW9uKTsKCgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX0V4aXRNb25pdG9yKFBS
TW9uaXRvciAqbW9uKTsKIyA3NiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BybW9uLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9XYWl0KFBSTW9uaXRvciAq
bW9uLCBQUkludGVydmFsVGltZSB0aWNrcyk7CgoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9Ob3Rp
ZnkoUFJNb25pdG9yICptb24pOwoKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfTm90aWZ5QWxsKFBS
TW9uaXRvciAqbW9uKTsKCn0KIyAzMyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByY21vbi5oIiAyCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiIDEKIyAzNCAiL3dpbmRvd3MvaGRh
MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY21vbi5oIiAyCgpleHRlcm4g
IkMiIHsKIyA0NSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByY21vbi5oIgpleHRlcm4gUFJNb25pdG9yKiBQUl9DRW50ZXJNb25pdG9yKHZvaWQgKmFk
ZHJlc3MpOwoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9DRXhpdE1vbml0b3Iodm9pZCAqYWRkcmVz
cyk7CgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX0NXYWl0KHZvaWQgKmFkZHJlc3MsIFBSSW50ZXJ2
YWxUaW1lIHRpbWVvdXQpOwoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9DTm90aWZ5KHZvaWQgKmFk
ZHJlc3MpOwoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9DTm90aWZ5QWxsKHZvaWQgKmFkZHJlc3Mp
OwoKCgoKCmV4dGVybiB2b2lkIFBSX0NTZXRPbk1vbml0b3JSZWN5Y2xlKHZvaWQgKCAqY2FsbGJh
Y2spKHZvaWQgKmFkZHJlc3MpKTsKCn0KIyA0MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVN1cHBvcnRzVXRpbHMuaCIgMgojIDcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3Vw
cG9ydHNVdGlscy5oIgp0eXBlZGVmIFBSVWludDMyIG5zcmVmY250OwojIDkwICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1RyYWNlUmVmY250LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zVHJhY2VSZWZjbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb20uaCIg
MQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIiAyCgojIDEg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk
aW8uaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK
IyAzNyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQzICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgi
IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA0NSAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMK
IyA1MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjMgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwp0
eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzMgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDEwICIvdXNyL2luY2x1ZGUv
X0dfY29uZmlnLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMTIgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg
MwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
NDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2No
YXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAg
ewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9f
bWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBz
dHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9z
X3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19z
dGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2dj
b252LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5j
bHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5j
bHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9f
R0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05W
X05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAg
X19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19H
Q09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgpl
bnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JT
ID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBf
ZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNf
ZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAg
Kiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwg
aW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9z
dGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9z
dGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2Nv
bnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2Nv
bnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2dj
b252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25l
ZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJh
bnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQg
KCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRl
ZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252
X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252
X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19l
bmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZf
dHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3Qg
X19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9f
bW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAq
X190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5p
dF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVk
X2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAg
aW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7
Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRi
dWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAg
aW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19t
YnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9f
Z2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9p
bmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsK
ICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9f
Z2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlv
bgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBf
X2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAg
fSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf
R191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p
KSk7CiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MSAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92
YV9saXN0IF9fZ251Y192YV9saXN0OwojIDUyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMg
MTU4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9J
T19GSUxFOwojIDE2OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19s
b2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4
dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MSAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2
dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0
X25vY29udgp9OwojIDI1OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxF
IHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3Jl
YWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAg
Y2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19i
dWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBj
aGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lP
X21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2Zp
bGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25l
ZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFy
IF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDMgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAg
dm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2Yg
KGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3Bs
dXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBz
dHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJ
TEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0
eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1
Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVf
Zm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vl
a19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVk
ZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19pb19y
ZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBjb29r
aWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVu
Y3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90OwoK
CnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAq
d3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9J
T19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNf
dCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVy
biB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmlsZSwg
aW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Nv
b2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgpleHRlcm4gIkMiIHsK
CgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChf
SU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lP
X0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxFICopIHRo
cm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpIHRo
cm93ICgpOwojIDQyNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0
YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19j
LCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxF
ICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkg
dGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA0NTQg
Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxF
ICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4g
aW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVz
dHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7
CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSB0
aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6
ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICos
IF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVr
cG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBf
SU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNTEwICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMwp9CiMgNzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9s
aXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX0dfZnBvc190IGZwb3Nf
dDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTM3ICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTM4ICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRl
cm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7
CgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93
ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hh
ciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93
ICgpOwojIDE2NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgp
OwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4g
Y2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTg2ICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu
IGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBp
bnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyMzAgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9w
ZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVy
biBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21v
ZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVz
dHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nv
b2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAq
Zm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0
cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVz
dHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJp
bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnBy
aW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgp
OwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50
ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4
bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu
dGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRl
cm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy
ZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg
MiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwK
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4u
LikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg
MiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAz
KSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAw
KSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo
X19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
dmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoK
CmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9f
Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h
dF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBp
bnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4g
aW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxv
Y2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBw
dXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBn
ZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAg
IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9f
cykgdGhyb3cgKCk7CiMgNDM0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChj
aGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0
ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2Rl
bGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jl
c3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19y
ZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90
IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lk
ICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6
ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXpl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9f
Y29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50
IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKIyA0OTcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19z
dHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19v
ZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0
cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3Mp
CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2Nv
bnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpOwojIDUzMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNl
ZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhy
b3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2
NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2
NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAq
X19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNo
YXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJu
IF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZp
bGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5s
b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVu
IChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4
dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy
ICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0
ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0
YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1
Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
ZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVu
bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2MzggIi91c3IvbG9jYWwvbGli
L2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRp
by5oIiAzCmlubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10
LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rk
b3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAo
KQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxv
Y2tlZCAoRklMRSAqX19mcCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9w
dHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQg
Y2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91
bmxvY2tlZCAodm9pZCkgdGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRy
ID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQg
Y2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hh
ciAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9
CgoKCgppbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3Ry
ZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNo
YXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIr
KyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRl
X3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFt
LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+
X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tl
ZCAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRy
ID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2ln
bmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVf
cHRyKysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoq
X19saW5lcHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1
cm4gX19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlu
bGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1
cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVy
cm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0
cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjM5ICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCn0KIyAyOSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVHJhY2VSZWZjbnQuaCIgMgoKY2xhc3MgbnNJU3Vw
cG9ydHM7CiMgMTMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIgpz
dHJ1Y3QgbnNUcmFjZVJlZmNudFN0YXRzIHsKICBuc3JlZmNudCBtQWRkUmVmczsKICBuc3JlZmNu
dCBtUmVsZWFzZXM7CiAgbnNyZWZjbnQgbUNyZWF0ZXM7CiAgbnNyZWZjbnQgbURlc3Ryb3lzOwog
IGRvdWJsZSBtUmVmc091dHN0YW5kaW5nVG90YWw7CiAgZG91YmxlIG1SZWZzT3V0c3RhbmRpbmdT
cXVhcmVkOwogIGRvdWJsZSBtT2Jqc091dHN0YW5kaW5nVG90YWw7CiAgZG91YmxlIG1PYmpzT3V0
c3RhbmRpbmdTcXVhcmVkOwp9OwojIDE1MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVHJh
Y2VSZWZjbnQuaCIKdHlwZWRlZiBQUkJvb2wgKCAqbnNUcmFjZVJlZmNudFN0YXRGdW5jKQogIChj
b25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgIFBSVWludDMyIGFJbnN0YW5jZVNpemUsCiAgIG5zVHJh
Y2VSZWZjbnRTdGF0cyogYUN1cnJlbnRTdGF0cywKICAgbnNUcmFjZVJlZmNudFN0YXRzKiBhUHJl
dlN0YXRzLAogICB2b2lkICphQ2xvc3VyZSk7CgoKCgoKY2xhc3MgbnNUcmFjZVJlZmNudCB7CnB1
YmxpYzoKICBzdGF0aWMgdm9pZCBTdGFydHVwKCk7CgogIHN0YXRpYyB2b2lkIFNodXRkb3duKCk7
CgogIHN0YXRpYyB2b2lkIExvZ0FkZFJlZih2b2lkKiBhUHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNyZWZjbnQgYU5ld1JlZkNudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSVWludDMyIGFJbnN0YW5jZVNpemUpOwoKICBzdGF0aWMgdm9pZCBMb2dSZWxlYXNlKHZv
aWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZWZjbnQgYU5ld1Jl
ZkNudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhVHlwZU5h
bWUpOwoKICBzdGF0aWMgdm9pZCBMb2dOZXdYUENPTSh2b2lkKiBhUHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFJbnN0YW5jZVNpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgYUxpbmUpOwoKICBzdGF0aWMgdm9pZCBMb2dEZWxldGVYUENPTSh2
b2lkKiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFMaW5lKTsK
CiAgc3RhdGljIG5zcmVmY250IExvZ0FkZFJlZkNhbGwodm9pZCogYVB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZWZjbnQgYU5ld1JlZmNudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhTGluZSk7CgogIHN0YXRpYyBuc3Jl
ZmNudCBMb2dSZWxlYXNlQ2FsbCh2b2lkKiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNyZWZjbnQgYU5ld1JlZmNudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGFMaW5lKTsKCiAgc3RhdGljIHZvaWQgTG9nQ3Rvcih2
b2lkKiBhUHRyLCBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0YXRpYyB2b2lkIExvZ0R0b3Iodm9p
ZCogYVB0ciwgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSVWludDMyIGFJbnN0YW5jZVNpemUpOwoKICBzdGF0aWMgdm9pZCBMb2dBZGRDT01QdHIo
dm9pZCAqYUNPTVB0ciwgbnNJU3VwcG9ydHMgKmFPYmplY3QpOwoKICBzdGF0aWMgdm9pZCBMb2dS
ZWxlYXNlQ09NUHRyKHZvaWQgKmFDT01QdHIsIG5zSVN1cHBvcnRzICphT2JqZWN0KTsKCiAgZW51
bSBTdGF0aXN0aWNzVHlwZSB7CiAgICBBTExfU1RBVFMsCiAgICBORVdfU1RBVFMKICB9OwoKICBz
dGF0aWMgbnNyZXN1bHQgRHVtcFN0YXRpc3RpY3MoU3RhdGlzdGljc1R5cGUgdHlwZSA9IEFMTF9T
VEFUUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUqIG91dCA9
IDApOwoKICBzdGF0aWMgdm9pZCBSZXNldFN0YXRpc3RpY3Modm9pZCk7CgogIHN0YXRpYyB2b2lk
IEdhdGhlclN0YXRpc3RpY3MobnNUcmFjZVJlZmNudFN0YXRGdW5jIGFGdW5jLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFDbG9zdXJlKTsKCiAgc3RhdGljIHZv
aWQgTG9hZExpYnJhcnlTeW1ib2xzKGNvbnN0IGNoYXIqIGFMaWJyYXJ5TmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFMaWJyYXlIYW5kbGUpOwoKICBz
dGF0aWMgdm9pZCBEZW1hbmdsZVN5bWJvbChjb25zdCBjaGFyICogYVN5bWJvbCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGFCdWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBhQnVmTGVuKTsKCiAgc3RhdGljIHZvaWQgV2Fsa1Ro
ZVN0YWNrKEZJTEUqIGFTdHJlYW0pOwoKICBzdGF0aWMgdm9pZCBTZXRQcmVmU2VydmljZUF2YWls
YWJpbGl0eShQUkJvb2wgYXZhaWwpOwoKCgoKCgogIHN0YXRpYyB2b2lkIFNldEFjdGl2aXR5SXNM
ZWdhbChQUkJvb2wgYUxlZ2FsKTsKfTsKCgoKCmV4dGVybiAiQyIgdm9pZApOU19NZWFuQW5kU3Rk
RGV2KGRvdWJsZSBuLCBkb3VibGUgc3VtT2ZWYWx1ZXMsIGRvdWJsZSBzdW1PZlNxdWFyZWRWYWx1
ZXMsCiAgICAgICAgICAgICAgICAgZG91YmxlICptZWFuUmVzdWx0LCBkb3VibGUgKnN0ZERldlJl
c3VsdCk7CiMgOTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgi
IDIKCgoKCgoKCmNsYXNzIG5zSVN1cHBvcnRzIHsKcHVibGljOgojIDExNSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5
SW50ZXJmYWNlKGNvbnN0IG5zSUlEJiBhSUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCoqIGFJbnN0YW5jZVB0cikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVmY250IEFkZFJl
Zih2b2lkKSA9IDA7CiMgMTMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNV
dGlscy5oIgogIHZpcnR1YWwgbnNyZWZjbnQgUmVsZWFzZSh2b2lkKSA9IDA7CgoKfTsKIyAxMTE3
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMr
KyIgewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zcmVmY250Cm5zX2lmX2FkZHJlZigg
VCBleHByICkKCgoKICB7CiAgICByZXR1cm4gZXhwciA/IGV4cHItPkFkZFJlZigpIDogMDsKICB9
CgogfQojIDEyMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgi
CmV4dGVybiAiQysrIiB7CgoKCmNsYXNzIG5zSVN1cHBvcnRzOwoKdGVtcGxhdGUgPGNsYXNzIFQ+
CnN0cnVjdCBuc0NPTVR5cGVJbmZvCiAgewogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo
KSB7IHJldHVybiBUOjpHZXRJSUQoKTsgfQogIH07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNDT01U
eXBlSW5mbzxuc0lTdXBwb3J0cz4KICB7CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp
IHsKICAgICAgICBzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDAwMDAwMDAwLCAweDAwMDAs
IDB4MDAwMCwgezB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9
IH07IHJldHVybiBpaWQ7CiAgICB9CiAgfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5hdGlv
blR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsUXVlcnlJbnRlcmZhY2UoIG5zSVN1cHBvcnRzKiBh
U291cmNlLCBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdGluYXRpb24gKQogIHsKICAgIHt9OwogICAg
e307CgogICAgcmV0dXJuIGFTb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKG5zQ09NVHlwZUluZm88RGVz
dGluYXRpb25UeXBlPjo6R2V0SUlEKCksICh2b2lkKiopYURlc3RpbmF0aW9uKTsKICB9Cgp9CgoK
CgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNsYXNzSW5mby5oIiAxCiMgMTQg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDbGFzc0luZm8uaCIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJUHJvZ3JhbW1pbmdMYW5ndWFnZS5oIiAxCiMgMjggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lQcm9ncmFtbWluZ0xhbmd1YWdlLmgiCmNsYXNzIG5zSVByb2dy
YW1taW5nTGFuZ3VhZ2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMg
Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZWE2MDRl
OTAsIDB4NDBiYSwgMHgxMWQ1LCB7IDB4OTAsIDB4YmIsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcs
IDB4M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7fQoKCgoKICBlbnVtIHsgVU5LTk9XTiA9IDBVIH07
CgogIGVudW0geyBDUExVU1BMVVMgPSAxVSB9OwoKICBlbnVtIHsgSkFWQVNDUklQVCA9IDJVIH07
CgogIGVudW0geyBQWVRIT04gPSAzVSB9OwoKICBlbnVtIHsgUEVSTCA9IDRVIH07CgogIGVudW0g
eyBKQVZBID0gNVUgfTsKCiAgZW51bSB7IFpYODFfQkFTSUMgPSA2VSB9OwoKICBlbnVtIHsgSkFW
QVNDUklQVDIgPSA3VSB9OwoKfTsKIyAxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNs
YXNzSW5mby5oIiAyCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDbGFzc0luZm8u
aCIKY2xhc3MgbnNJQ2xhc3NJbmZvIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw
eDk4NmMxMWQwLCAweGYzNDAsIDB4MTFkNCwgeyAweDkwLCAweDc1LCAweDAwLCAweDEwLCAweGE0
LCAweGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KIyA0MyAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUNsYXNzSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNl
cyhQUlVpbnQzMiAqY291bnQsIG5zSUlEICogKiphcnJheSkgPSAwOwojIDU4ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJQ2xhc3NJbmZvLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWxw
ZXJGb3JMYW5ndWFnZShQUlVpbnQzMiBsYW5ndWFnZSwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9
IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250cmFjdElEKGNoYXIgKiAqYUNvbnRy
YWN0SUQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NEZXNjcmlwdGlvbihj
aGFyICogKmFDbGFzc0Rlc2NyaXB0aW9uKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRDbGFzc0lEKG5zQ0lEICogKmFDbGFzc0lEKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEltcGxlbWVudGF0aW9uTGFuZ3VhZ2UoUFJVaW50MzIgKmFJbXBsZW1lbnRhdGlvbkxhbmd1
YWdlKSA9IDA7CgoKCgogIGVudW0geyBTSU5HTEVUT04gPSAxVSB9OwoKICBlbnVtIHsgVEhSRUFE
U0FGRSA9IDJVIH07CgogIGVudW0geyBNQUlOX1RIUkVBRF9PTkxZID0gNFUgfTsKCiAgZW51bSB7
IERPTV9PQkpFQ1QgPSA4VSB9OwoKICBlbnVtIHsgUExVR0lOX09CSkVDVCA9IDE2VSB9OwoKICBl
bnVtIHsgUkVTRVJWRUQgPSAyMTQ3NDgzNjQ4VSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG
bGFncyhQUlVpbnQzMiAqYUZsYWdzKSA9IDA7Cgp9OwojIDEyNzQgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiIDIKIyAxMTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTdXBwb3J0cy5oIiAyCiMgNTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NP
TVB0ci5oIiAyCgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQoj
IDU1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIgMgojIDEwNyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgdHlwZWRlZiBQUkJvb2wgTlNDQVBfQk9P
TDsKIyAxNTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KY2xhc3MgbnNEZXJpdmVkU2FmZSA6IHB1YmxpYyBUCiMgMTcwICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICB7CiAgICBwcml2YXRlOgoKICAgICAgdXNpbmcg
VDo6QWRkUmVmOwogICAgICB1c2luZyBUOjpSZWxlYXNlOwoKCgoKCgogICAgICB2b2lkIG9wZXJh
dG9yIGRlbGV0ZSggdm9pZCosIHNpemVfdCApOwoKCgogICAgICBuc0Rlcml2ZWRTYWZlPFQ+JiBv
cGVyYXRvcj0oIGNvbnN0IFQmICk7CiMgMTk0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND
T01QdHIuaCIKICB9OwojIDIxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgi
CnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgYWxyZWFkeV9BZGRSZWZlZAojIDIzMiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewogICAgYWxyZWFkeV9BZGRSZWZlZCgg
VCogYVJhd1B0ciApCiAgICAgICAgOiBtUmF3UHRyKGFSYXdQdHIpCiAgICAgIHsKCiAgICAgIH0K
CiAgICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBtUmF3UHRyOyB9CgogICAgVCogbVJhd1B0cjsK
ICB9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBhbHJlYWR5X0FkZFJlZmVkPFQ+
CmdldHRlcl9BZGRSZWZzKCBUKiBhUmF3UHRyICkKCgoKCiAgewogICAgcmV0dXJuIGFscmVhZHlf
QWRkUmVmZWQ8VD4oYVJhd1B0cik7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25z
dCBhbHJlYWR5X0FkZFJlZmVkPFQ+CmdldHRlcl9BZGRSZWZzKCBjb25zdCBhbHJlYWR5X0FkZFJl
ZmVkPFQ+JiBhQWxyZWFkeUFkZFJlZmVkUHRyICkKICB7CiAgICByZXR1cm4gYUFscmVhZHlBZGRS
ZWZlZFB0cjsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IGFscmVhZHlfQWRk
UmVmZWQ8VD4KZG9udF9BZGRSZWYoIFQqIGFSYXdQdHIgKQogIHsKICAgIHJldHVybiBhbHJlYWR5
X0FkZFJlZmVkPFQ+KGFSYXdQdHIpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29u
c3QgYWxyZWFkeV9BZGRSZWZlZDxUPgpkb250X0FkZFJlZiggY29uc3QgYWxyZWFkeV9BZGRSZWZl
ZDxUPiBhQWxyZWFkeUFkZFJlZmVkUHRyICkKICB7CiAgICByZXR1cm4gYUFscmVhZHlBZGRSZWZl
ZFB0cjsKICB9CiMgMjkxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKdGVt
cGxhdGUgPGNsYXNzIFQ+CmlubGluZQpUKgpkb250X1F1ZXJ5SW50ZXJmYWNlKCBUKiBleHByICkK
ICB7CiAgICByZXR1cm4gZXhwcjsKICB9CgoKCmNsYXNzIG5zQ09NUHRyX2hlbHBlcgojIDMxNyAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewogICAgcHVibGljOgogICAg
ICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29u
c3QgPSAwOwogIH07CgpjbGFzcyBuc1F1ZXJ5SW50ZXJmYWNlIDogcHVibGljIG5zQ09NUHRyX2hl
bHBlcgogIHsKICAgIHB1YmxpYzoKICAgICAgbnNRdWVyeUludGVyZmFjZSggbnNJU3VwcG9ydHMq
IGFSYXdQdHIsIG5zcmVzdWx0KiBlcnJvciApCiAgICAgICAgICA6IG1SYXdQdHIoYVJhd1B0ciks
CiAgICAgICAgICAgIG1FcnJvclB0cihlcnJvcikKICAgICAgICB7CgogICAgICAgIH0KCiAgICAg
IHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiAp
IGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIG5zSVN1cHBvcnRzKiBtUmF3UHRyOwogICAgICBu
c3Jlc3VsdCogbUVycm9yUHRyOwogIH07CgppbmxpbmUKY29uc3QgbnNRdWVyeUludGVyZmFjZQpk
b19RdWVyeUludGVyZmFjZSggbnNJU3VwcG9ydHMqIGFSYXdQdHIsIG5zcmVzdWx0KiBlcnJvciA9
IDAgKQogIHsKICAgIHJldHVybiBuc1F1ZXJ5SW50ZXJmYWNlKGFSYXdQdHIsIGVycm9yKTsKICB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCnZvaWQKZG9fUXVlcnlJbnRlcmZhY2UoIGFscmVh
ZHlfQWRkUmVmZWQ8VD4mICkKICB7CgoKCiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQp2
b2lkCmRvX1F1ZXJ5SW50ZXJmYWNlKCBhbHJlYWR5X0FkZFJlZmVkPFQ+JiwgbnNyZXN1bHQqICkK
ICB7CgoKCiAgfQojIDM4MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCmNs
YXNzIG5zQ09NUHRyX2Jhc2UKIyAzOTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0
ci5oIgogIHsKICAgIHB1YmxpYzoKCiAgICAgIG5zQ09NUHRyX2Jhc2UoIG5zSVN1cHBvcnRzKiBy
YXdQdHIgPSAwICkKICAgICAgICAgIDogbVJhd1B0cihyYXdQdHIpCiAgICAgICAgewoKICAgICAg
ICB9CgoKICAgICAgICAgICAgICAgIH5uc0NPTVB0cl9iYXNlKCk7CgoKCgoKCiAgICAgICAgICAg
ICAgICB2b2lkIGFzc2lnbl93aXRoX0FkZFJlZiggbnNJU3VwcG9ydHMqICk7CiAgICAgICAgICAg
ICAgICB2b2lkIGFzc2lnbl9mcm9tX2hlbHBlciggY29uc3QgbnNDT01QdHJfaGVscGVyJiwgY29u
c3QgbnNJSUQmICk7CiAgICAgICAgICAgICAgICB2b2lkKiogYmVnaW5fYXNzaWdubWVudCgpOwoK
ICAgIHByb3RlY3RlZDoKICAgICAgbnNJU3VwcG9ydHMqIG1SYXdQdHI7CgogICAgICB2b2lkCiAg
ICAgIGFzc2lnbl9hc3N1bWluZ19BZGRSZWYoIG5zSVN1cHBvcnRzKiBuZXdQdHIgKQogICAgICAg
IHsKIyA0MzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICAgICAg
bnNJU3VwcG9ydHMqIG9sZFB0ciA9IG1SYXdQdHI7CiAgICAgICAgICBtUmF3UHRyID0gbmV3UHRy
OwogICAgICAgICAgOzsKICAgICAgICAgIGlmICggb2xkUHRyICkKICAgICAgICAgICAgKG9sZFB0
ciktPlJlbGVhc2UoKTsKICAgICAgICB9CiAgfTsKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNz
IG5zQ09NUHRyCgogICAgOiBwcml2YXRlIG5zQ09NUHRyX2Jhc2UKCiAgewogICAgZW51bSB7IF9m
b3JjZV9ldmVuX2NvbXBsaWFudF9jb21waWxlcnNfdG9fZmFpbF8gPSBzaXplb2YoVCkgfTsKIyA0
ODIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgcHVibGljOgogICAg
ICB0eXBlZGVmIFQgZWxlbWVudF90eXBlOwojIDUxMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ09NUHRyLmgiCiAgICAgIG5zQ09NUHRyKCkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNl
KDApCgogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIGNv
bnN0IG5zQ09NUHRyPFQ+JiBhU21hcnRQdHIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2Uo
YVNtYXJ0UHRyLm1SYXdQdHIpCgogICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAg
ICAgICAgICAgIChtUmF3UHRyKS0+QWRkUmVmKCk7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAg
ICAgIG5zQ09NUHRyKCBUKiBhUmF3UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFS
YXdQdHIpCgogICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAgICAgICht
UmF3UHRyKS0+QWRkUmVmKCk7CiAgICAgICAgICA7OwogICAgICAgICAgOzsKICAgICAgICB9Cgog
ICAgICBuc0NPTVB0ciggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgYVNtYXJ0UHRyICkKICAg
ICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAg
ICAgICAgICA7OwogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggY29uc3Qg
bnNDT01QdHJfaGVscGVyJiBoZWxwZXIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoMCkK
CgogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIoaGVs
cGVyLCBuc0NPTVR5cGVJbmZvPFQ+OjpHZXRJSUQoKSk7CiAgICAgICAgICA7OwogICAgICAgIH0K
IyA1NzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0
cjxUPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NPTVB0cjxUPiYgcmhzICkKCiAgICAgICAg
ewogICAgICAgICAgYXNzaWduX3dpdGhfQWRkUmVmKHJocy5tUmF3UHRyKTsKICAgICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxUPiYKICAgICAgb3BlcmF0b3I9
KCBUKiByaHMgKQoKICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fd2l0aF9BZGRSZWYocmhzKTsK
ICAgICAgICAgIDs7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnND
T01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgcmhz
ICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyaHMubVJhd1B0
cik7CiAgICAgICAgICA7OwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAg
IG5zQ09NUHRyPFQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgcmhz
ICkKCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl9mcm9tX2hlbHBlcihyaHMsIG5zQ09NVHlw
ZUluZm88VD46OkdldElJRCgpKTsKICAgICAgICAgIDs7CiAgICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgICAgfQojIDYyMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAg
ICAgIG5zRGVyaXZlZFNhZmU8VD4qCiAgICAgIGdldCgpIGNvbnN0CgoKCgoKCiAgICAgICAgewog
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8VD4qID4obVJh
d1B0cik7CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNEZXJpdmVkU2FmZTxUPiooKSBjb25z
dAoKCgoKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAg
ICAgbnNEZXJpdmVkU2FmZTxUPioKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAge307CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQojIDY2NiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICAgIG5zQ09NUHRyPFQ+KgogICAg
ICBnZXRfYWRkcmVzcygpCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAg
ICB9CgogICAgICBjb25zdCBuc0NPTVB0cjxUPioKICAgICAgZ2V0X2FkZHJlc3MoKSBjb25zdAoK
CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKCgoKCgogICAgcHJp
dmF0ZToKICAgICAgY29uc3QgbnNDT01QdHI8VD4qCiAgICAgIG9wZXJhdG9yJigpIGNvbnN0CgoK
CgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgbnND
T01QdHI8VD4qCiAgICAgIG9wZXJhdG9yJigpCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgbnNEZXJpdmVkU2FmZTxUPiYKICAg
ICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICB7fTsKICAgICAgICAgIHJl
dHVybiAqZ2V0KCk7CiAgICAgICAgfQoKCgoKCgogICAgICBUKioKICAgICAgU3RhcnRBc3NpZ25t
ZW50KCkKICAgICAgICB7CgogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IFQqKiA+
KGJlZ2luX2Fzc2lnbm1lbnQoKSk7CgoKCgogICAgICAgIH0KICB9OwojIDc0NSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCnRlbXBsYXRlIDw+CmNsYXNzIG5zQ09NUHRyPG5z
SVN1cHBvcnRzPgogICAgOiBwcml2YXRlIG5zQ09NUHRyX2Jhc2UKICB7CiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgbnNJU3VwcG9ydHMgZWxlbWVudF90eXBlOwojIDc2MyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICAgIG5zQ09NUHRyKCkKICAgICAgICAgICAgOiBu
c0NPTVB0cl9iYXNlKDApCgogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAg
bnNDT01QdHIoIGNvbnN0IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYgYVNtYXJ0UHRyICkKICAgICAg
ICAgICAgOiBuc0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAg
ICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAg
ICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggbnNJU3VwcG9ydHMqIGFSYXdQdHIg
KQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoYVJhd1B0cikKCiAgICAgICAgewogICAgICAg
ICAgaWYgKCBtUmF3UHRyICkKICAgICAgICAgICAgKG1SYXdQdHIpLT5BZGRSZWYoKTsKICAgICAg
ICAgIDs7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIGNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8
bnNJU3VwcG9ydHM+JiBhU21hcnRQdHIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoYVNt
YXJ0UHRyLm1SYXdQdHIpCgogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAg
bnNDT01QdHIoIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgaGVscGVyICkKICAgICAgICAgICAgOiBu
c0NPTVB0cl9iYXNlKDApCgoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgICAgYXNzaWdu
X2Zyb21faGVscGVyKGhlbHBlciwgbnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz46OkdldElJRCgp
KTsKICAgICAgICB9CgoKCgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mCiAgICAgIG9wZXJh
dG9yPSggY29uc3QgbnNDT01QdHI8bnNJU3VwcG9ydHM+JiByaHMgKQoKICAgICAgICB7CiAgICAg
ICAgICBhc3NpZ25fd2l0aF9BZGRSZWYocmhzLm1SYXdQdHIpOwogICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0
b3I9KCBuc0lTdXBwb3J0cyogcmhzICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dpdGhf
QWRkUmVmKHJocyk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnND
T01QdHI8bnNJU3VwcG9ydHM+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IGFscmVhZHlfQWRkUmVm
ZWQ8bnNJU3VwcG9ydHM+JiByaHMgKQoKICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fYXNzdW1p
bmdfQWRkUmVmKHJocy5tUmF3UHRyKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9
CgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnND
T01QdHJfaGVscGVyJiByaHMgKQoKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX2Zyb21faGVs
cGVyKHJocywgbnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz46OkdldElJRCgpKTsKICAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgICB9CgoKCgogICAgICBuc0Rlcml2ZWRTYWZlPG5zSVN1cHBv
cnRzPioKICAgICAgZ2V0KCkgY29uc3QKCgoKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDwgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qID4obVJhd1B0cik7
CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qKCkg
Y29uc3QKCgoKCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0K
CiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+KgogICAgICBvcGVyYXRvci0+KCkgY29u
c3QKICAgICAgICB7CiAgICAgICAgICB7fTsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAgICAg
ICB9CiMgODg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICAgICAgbnND
T01QdHI8bnNJU3VwcG9ydHM+KgogICAgICBnZXRfYWRkcmVzcygpCgoKICAgICAgICB7CiAgICAg
ICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICBjb25zdCBuc0NPTVB0cjxuc0lTdXBw
b3J0cz4qCiAgICAgIGdldF9hZGRyZXNzKCkgY29uc3QKCgogICAgICAgIHsKICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgIH0KCgoKCgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IG5zQ09N
UHRyPG5zSVN1cHBvcnRzPioKICAgICAgb3BlcmF0b3ImKCkgY29uc3QKCgoKCgoKICAgICAgICB7
CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxuc0lTdXBw
b3J0cz4qCiAgICAgIG9wZXJhdG9yJigpCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9y
dHM+JgogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHt9OwogICAg
ICAgICAgcmV0dXJuICpnZXQoKTsKICAgICAgICB9CgoKCgoKCiAgICAgIG5zSVN1cHBvcnRzKioK
ICAgICAgU3RhcnRBc3NpZ25tZW50KCkKICAgICAgICB7CgogICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihiZWdpbl9hc3NpZ25tZW50KCkpOwoKCgoKICAg
ICAgICB9CiAgfTsKIyA5OTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zQ09NUHRyPFQ+KgphZGRyZXNzX29mKCBuc0NPTVB0
cjxUPiYgYVB0ciApCiAgewogICAgcmV0dXJuIGFQdHIuZ2V0X2FkZHJlc3MoKTsKICB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IG5zQ09NUHRyPFQ+KgphZGRyZXNzX29mKCBjb25z
dCBuc0NPTVB0cjxUPiYgYVB0ciApCiAgewogICAgcmV0dXJuIGFQdHIuZ2V0X2FkZHJlc3MoKTsK
ICB9CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBuc0dldHRlckFkZFJlZnMKIyAxMDM2ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICB7CiAgICBwdWJsaWM6CiAgICAg
IGV4cGxpY2l0CiAgICAgIG5zR2V0dGVyQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciAp
CiAgICAgICAgICA6IG1UYXJnZXRTbWFydFB0cihhU21hcnRQdHIpCiAgICAgICAgewoKICAgICAg
ICB9CiMgMTA1OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICAgIG9w
ZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKSk7CiAgICAgICAg
fQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAgICAgewogICAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihtVGFyZ2V0U21hcnRQdHIuU3Rh
cnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIFQqKigpCiAgICAgICAg
ewogICAgICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKTsKICAg
ICAgICB9CgogICAgICBUKiYKICAgICAgb3BlcmF0b3IqKCkKICAgICAgICB7CiAgICAgICAgICBy
ZXR1cm4gKihtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAg
ICBwcml2YXRlOgogICAgICBuc0NPTVB0cjxUPiYgbVRhcmdldFNtYXJ0UHRyOwogIH07CgoKdGVt
cGxhdGUgPD4KY2xhc3MgbnNHZXR0ZXJBZGRSZWZzPG5zSVN1cHBvcnRzPgogIHsKICAgIHB1Ymxp
YzoKICAgICAgZXhwbGljaXQKICAgICAgbnNHZXR0ZXJBZGRSZWZzKCBuc0NPTVB0cjxuc0lTdXBw
b3J0cz4mIGFTbWFydFB0ciApCiAgICAgICAgICA6IG1UYXJnZXRTbWFydFB0cihhU21hcnRQdHIp
CiAgICAgICAgewoKICAgICAgICB9CiMgMTEwMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Q09NUHRyLmgiCiAgICAgIG9wZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2ln
bm1lbnQoKSk7CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAg
ICAgewogICAgICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKTsK
ICAgICAgICB9CgogICAgICBuc0lTdXBwb3J0cyomCiAgICAgIG9wZXJhdG9yKigpCiAgICAgICAg
ewogICAgICAgICAgcmV0dXJuICoobVRhcmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdubWVudCgpKTsK
ICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JiBtVGFy
Z2V0U21hcnRQdHI7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zR2V0dGVyQWRk
UmVmczxUPgpnZXR0ZXJfQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciApCgoKCgogIHsK
ICAgIHJldHVybiBuc0dldHRlckFkZFJlZnM8VD4oYVNtYXJ0UHRyKTsKICB9CgoKCgoKdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0
IG5zQ09NUHRyPFQ+JiBsaHMsIGNvbnN0IG5zQ09NUHRyPFU+JiByaHMgKQogIHsKICAgIHJldHVy
biBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRpY19jYXN0PCBj
b25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBV
PgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBj
b25zdCBuc0NPTVB0cjxVPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0
IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0
KCkpOwogIH0KCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9P
TApvcGVyYXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBVKiByaHMgKQogIHsK
ICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRp
Y19jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IFUqIGxocywgY29uc3QgbnND
T01QdHI8VD4mIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+
KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsKICB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29u
c3QgbnNDT01QdHI8VD4mIGxocywgY29uc3QgVSogcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9p
ZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBf
Qk9PTApvcGVyYXRvciE9KCBjb25zdCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQog
IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9IHN0YXRpY19j
YXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEyMDYgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5l
Ck5TQ0FQX0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgVSogcmhzICkK
ICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSBz
dGF0aWNfY2FzdDwgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBV
PgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+
JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgdm9pZCogPihsaHMpID09IHN0YXRp
Y19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0oIGNvbnN0IG5zQ09NUHRyPFQ+
JiBsaHMsIFUqIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+
KGxocy5nZXQoKSkgIT0gc3RhdGljX2Nhc3Q8IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggVSogbGhzLCBj
b25zdCBuc0NPTVB0cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IHZvaWQq
ID4obGhzKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KCgoK
CgoKY2xhc3MgTlNDQVBfWmVybzsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBfQk9P
TApvcGVyYXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBOU0NBUF9aZXJvKiByaHMgKQoK
ICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSBy
ZWludGVycHJldF9jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNz
IFQ+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIE5TQ0FQX1plcm8qIGxocywgY29uc3Qg
bnNDT01QdHI8VD4mIHJocyApCgogIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25z
dCB2b2lkKiA+KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsK
ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29u
c3QgbnNDT01QdHI8VD4mIGxocywgTlNDQVBfWmVybyogcmhzICkKCiAgewogICAgcmV0dXJuIHN0
YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gcmVpbnRlcnByZXRfY2FzdDwg
Y29uc3Qgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBf
Qk9PTApvcGVyYXRvciE9KCBOU0NBUF9aZXJvKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMg
KQoKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9
IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEzMDkgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgppbmxpbmUKTlNDQVBfQk9PTApTYW1lQ09N
SWRlbnRpdHkoIG5zSVN1cHBvcnRzKiBsaHMsIG5zSVN1cHBvcnRzKiByaHMgKQogIHsKICAgIHJl
dHVybiBuc0NPTVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKGxocykgKSA9PSBu
c0NPTVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKHJocykgKTsKICB9CgoKCnRl
bXBsYXRlIDxjbGFzcyBTb3VyY2VUeXBlLCBjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpu
c3Jlc3VsdApDYWxsUXVlcnlJbnRlcmZhY2UoIG5zQ09NUHRyPFNvdXJjZVR5cGU+JiBhU291cmNl
UHRyLCBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdFB0ciApCiAgewogICAgcmV0dXJuIENhbGxRdWVy
eUludGVyZmFjZShhU291cmNlUHRyLmdldCgpLCBhRGVzdFB0cik7CiAgfQojIDIzICJuc0Zvcm1D
b250cm9sSGVscGVyLmNwcCIgMgojIDEgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIgMQojIDI2ICJu
c0Zvcm1Db250cm9sSGVscGVyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZv
cm1Db250cm9sRnJhbWUuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9y
bUNvbnRyb2xGcmFtZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0
cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJvbEZyYW1l
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGb250LmgiIDEKIyAyNiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRm9udC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGb250Lmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zY29yZS5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgi
IDIKIyA0MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIKdHlwZWRlZiBQUklu
dDMyIG5zY29vcmQ7CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZvbnQuaCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgNDYgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1N0cmluZzIuaCIgMQojIDQ3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcy
LmgiCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3BydHlwZXMuaCIgMQojIDQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyA0OSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyA1MCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
U3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIgMQoj
IDE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIgpjbGFzcyBuc0lTaXplT2ZI
YW5kbGVyOwoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcu
aCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIgMQojIDMw
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zQVN0cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZ0Z3ZC5oIiAxCiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0Z3ZC5o
IgpjbGFzcyBuc0FTdHJpbmc7CmNsYXNzIG5zQUNTdHJpbmc7CgoKCgoKCmNsYXNzIG5zQVByb21p
c2VTdHJpbmc7CmNsYXNzIG5zQVByb21pc2VDU3RyaW5nOwoKCgoKCgpjbGFzcyBuc0FGbGF0U3Ry
aW5nOwpjbGFzcyBuc0FGbGF0Q1N0cmluZzsKCgoKCgoKY2xhc3MgbnNEZXBlbmRlbnRTdHJpbmc7
CmNsYXNzIG5zRGVwZW5kZW50Q1N0cmluZzsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQVN0cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJpdmF0
ZVNoYXJhYmxlU3RyaW5nLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJp
dmF0ZVNoYXJhYmxlU3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVm
ZmVySGFuZGxlLmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFu
ZGxlLmgiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1
ZmZlckhhbmRsZS5oIiAyCgoKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0J1ZmZlckhhbmRsZS5oIiAyCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNE
ZWJ1Zy5oIiAxCiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZS5o
IiAyCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyA0MCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiIDIKIyA4MCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4K
Y2xhc3MgbnNCdWZmZXJIYW5kbGUKICB7CiAgICBwdWJsaWM6CiAgICAgIG5zQnVmZmVySGFuZGxl
KCkgeyB9CiAgICAgIG5zQnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFydCwgQ2hhclQqIGFE
YXRhRW5kICkgOiBtRGF0YVN0YXJ0KGFEYXRhU3RhcnQpLCBtRGF0YUVuZChhRGF0YUVuZCkgeyB9
CgogICAgICB2b2lkIERhdGFTdGFydCggQ2hhclQqIGFOZXdEYXRhU3RhcnQgKSB7IG1EYXRhU3Rh
cnQgPSBhTmV3RGF0YVN0YXJ0OyB9CiAgICAgIENoYXJUKiBEYXRhU3RhcnQoKSB7IHJldHVybiBt
RGF0YVN0YXJ0OyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhU3RhcnQoKSBjb25zdCB7IHJldHVy
biBtRGF0YVN0YXJ0OyB9CgogICAgICB2b2lkIERhdGFFbmQoIENoYXJUKiBhTmV3RGF0YUVuZCAp
IHsgbURhdGFFbmQgPSBhTmV3RGF0YUVuZDsgfQogICAgICBDaGFyVCogRGF0YUVuZCgpIHsgcmV0
dXJuIG1EYXRhRW5kOyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhRW5kKCkgY29uc3QgeyByZXR1
cm4gbURhdGFFbmQ7IH0KCiAgICAgIHB0cmRpZmZfdCBEYXRhTGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbURhdGFFbmQgLSBtRGF0YVN0YXJ0OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBDaGFyVCog
bURhdGFTdGFydDsKICAgICAgQ2hhclQqIG1EYXRhRW5kOwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Q2hhclQ+CmNsYXNzIG5zQ29uc3RCdWZmZXJIYW5kbGUKICB7CiAgICBwdWJsaWM6CiAgICAgIG5z
Q29uc3RCdWZmZXJIYW5kbGUoKSB7IH0KICAgICAgbnNDb25zdEJ1ZmZlckhhbmRsZSggY29uc3Qg
Q2hhclQqIGFEYXRhU3RhcnQsIGNvbnN0IENoYXJUKiBhRGF0YUVuZCApIDogbURhdGFTdGFydChh
RGF0YVN0YXJ0KSwgbURhdGFFbmQoYURhdGFFbmQpIHsgfQoKICAgICAgdm9pZCBEYXRhU3RhcnQo
IGNvbnN0IENoYXJUKiBhTmV3RGF0YVN0YXJ0ICkgeyBtRGF0YVN0YXJ0ID0gYU5ld0RhdGFTdGFy
dDsgfQogICAgICBjb25zdCBDaGFyVCogRGF0YVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbURhdGFT
dGFydDsgfQoKICAgICAgdm9pZCBEYXRhRW5kKCBjb25zdCBDaGFyVCogYU5ld0RhdGFFbmQgKSB7
IG1EYXRhRW5kID0gYU5ld0RhdGFFbmQ7IH0KICAgICAgY29uc3QgQ2hhclQqIERhdGFFbmQoKSBj
b25zdCB7IHJldHVybiBtRGF0YUVuZDsgfQoKICAgICAgcHRyZGlmZl90IERhdGFMZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtRGF0YUVuZCAtIG1EYXRhU3RhcnQ7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIGNvbnN0IENoYXJUKiBtRGF0YVN0YXJ0OwogICAgICBjb25zdCBDaGFyVCogbURhdGFFbmQ7
CiAgfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNTdHJpbmdBbGxvY2F0
b3IKICB7CiAgICBwdWJsaWM6CgogICAgICB2aXJ0dWFsIHZvaWQgRGVhbGxvY2F0ZSggQ2hhclQq
ICkgY29uc3QgPSAwOwogIH07CgoKCgogICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Y2hhcj4mIFN0
cmluZ0FsbG9jYXRvcl9jaGFyKCk7CiAgICAgICBuc1N0cmluZ0FsbG9jYXRvcjxQUlVuaWNoYXI+
JiBTdHJpbmdBbGxvY2F0b3Jfd2NoYXJfdCgpOwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1
Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHMKICB7CiAgfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBu
c1N0cmluZ0FsbG9jYXRvclRyYWl0czxjaGFyPgogIHsKICAgIHN0YXRpYyBuc1N0cmluZ0FsbG9j
YXRvcjxjaGFyPiYgZ2xvYmFsX3N0cmluZ19hbGxvY2F0b3IoKSB7IHJldHVybiBTdHJpbmdBbGxv
Y2F0b3JfY2hhcigpOyB9CiAgfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBuc1N0cmluZ0FsbG9jYXRv
clRyYWl0czxQUlVuaWNoYXI+CiAgewogICAgc3RhdGljIG5zU3RyaW5nQWxsb2NhdG9yPFBSVW5p
Y2hhcj4mIGdsb2JhbF9zdHJpbmdfYWxsb2NhdG9yKCkgeyByZXR1cm4gU3RyaW5nQWxsb2NhdG9y
X3djaGFyX3QoKTsgfQogIH07CiMgMTcwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZm
ZXJIYW5kbGUuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc1NoYXJlZEJ1ZmZlckhh
bmRsZQogICAgOiBwdWJsaWMgbnNCdWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHJvdGVjdGVk
OgogICAgICBlbnVtCiAgICAgICAgewogICAgICAgICAga0lzU2hhcmVkID0gMHgwODAwMDAwMCwK
ICAgICAgICAgIGtJc1NpbmdsZUFsbG9jYXRpb25XaXRoQnVmZmVyID0gMHgwNDAwMDAwMCwKICAg
ICAgICAgIGtJc1N0b3JhZ2VEZWZpbmVkU2VwYXJhdGVseSA9IDB4MDIwMDAwMDAsCiAgICAgICAg
ICBrSXNVc2VyQWxsb2NhdG9yID0gMHgwMTAwMDAwMCwKCgogICAgICAgICAga0lzTlVMTCA9IDB4
ODAwMDAwMDAsCiAgICAgICAgICBrSW1wbGVtZW50YXRpb25GbGFnc01hc2sgPSAweEYwMDAwMDAw
LAoKICAgICAgICAgIGtGbGFnc01hc2sgPSAweEZGMDAwMDAwLAogICAgICAgICAga1JlZkNvdW50
TWFzayA9IDB4MDBGRkZGRkYKICAgICAgICB9OwoKICAgIHB1YmxpYzoKICAgICAgbnNTaGFyZWRC
dWZmZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQgKQogICAgICAg
ICAgOiBuc0J1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFydCwgYURhdGFFbmQpCiAgICAgICAg
ewogICAgICAgICAgbUZsYWdzID0ga0lzU2hhcmVkOwogICAgICAgIH0KCiAgICAgIG5zU2hhcmVk
QnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kLCBDaGFyVCos
IENoYXJUKiwgUFJCb29sIGlzU2luZ2xlQWxsb2NhdGlvbiApCiAgICAgICAgICA6IG5zQnVmZmVy
SGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCkKICAgICAgICB7CiAgICAgICAgICBt
RmxhZ3MgPSBrSXNTaGFyZWQ7CiAgICAgICAgICBpZiAoIGlzU2luZ2xlQWxsb2NhdGlvbiApCiAg
ICAgICAgICAgIG1GbGFncyB8PSBrSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1ZmZlcjsKICAgICAg
ICB9CgogICAgICB+bnNTaGFyZWRCdWZmZXJIYW5kbGUoKTsKCiAgICAgIHZvaWQKICAgICAgQWNx
dWlyZVJlZmVyZW5jZSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgbnNTaGFyZWRCdWZmZXJI
YW5kbGU8Q2hhclQ+KiBtdXRhYmxlX3RoaXMgPSBjb25zdF9jYXN0PCBuc1NoYXJlZEJ1ZmZlckhh
bmRsZTxDaGFyVD4qID4odGhpcyk7CiAgICAgICAgICBtdXRhYmxlX3RoaXMtPnNldF9yZWZjb3Vu
dCggZ2V0X3JlZmNvdW50KCkrMSApOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgUmVsZWFz
ZVJlZmVyZW5jZSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgbnNTaGFyZWRCdWZmZXJIYW5k
bGU8Q2hhclQ+KiBtdXRhYmxlX3RoaXMgPSBjb25zdF9jYXN0PCBuc1NoYXJlZEJ1ZmZlckhhbmRs
ZTxDaGFyVD4qID4odGhpcyk7CiAgICAgICAgICBpZiAoICFtdXRhYmxlX3RoaXMtPnNldF9yZWZj
b3VudCggZ2V0X3JlZmNvdW50KCktMSApICkKICAgICAgICAgICAgZGVsZXRlIG11dGFibGVfdGhp
czsKCiAgICAgICAgfQoKICAgICAgUFJCb29sCiAgICAgIElzUmVmZXJlbmNlZCgpIGNvbnN0CiAg
ICAgICAgewogICAgICAgICAgcmV0dXJuIGdldF9yZWZjb3VudCgpICE9IDA7CiAgICAgICAgfQoK
ICAgICAgUFJVaW50MzIKICAgICAgR2V0SW1wbGVtZW50YXRpb25GbGFncygpIGNvbnN0CiAgICAg
ICAgewogICAgICAgICAgcmV0dXJuIG1GbGFncyAmIGtJbXBsZW1lbnRhdGlvbkZsYWdzTWFzazsK
ICAgICAgICB9CgogICAgICB2b2lkCiAgICAgIFNldEltcGxlbWVudGF0aW9uRmxhZ3MoIFBSVWlu
dDMyIGFOZXdGbGFncyApCiAgICAgICAgewogICAgICAgICAgbUZsYWdzID0gKG1GbGFncyAmIH5r
SW1wbGVtZW50YXRpb25GbGFnc01hc2spIHwgKGFOZXdGbGFncyAmIGtJbXBsZW1lbnRhdGlvbkZs
YWdzTWFzayk7CiAgICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgUFJVaW50MzIgbUZsYWdz
OwoKICAgICAgUFJVaW50MzIKICAgICAgZ2V0X3JlZmNvdW50KCkgY29uc3QKICAgICAgICB7CiAg
ICAgICAgICByZXR1cm4gbUZsYWdzICYga1JlZkNvdW50TWFzazsKICAgICAgICB9CgogICAgICBQ
UlVpbnQzMgogICAgICBzZXRfcmVmY291bnQoIFBSVWludDMyIGFOZXdSZWZDb3VudCApCiAgICAg
ICAgewogICAgICAgICAge307CgogICAgICAgICAgbUZsYWdzID0gKG1GbGFncyAmIGtGbGFnc01h
c2spIHwgYU5ld1JlZkNvdW50OwogICAgICAgICAgcmV0dXJuIGFOZXdSZWZDb3VudDsKICAgICAg
ICB9CgogICAgICBuc1N0cmluZ0FsbG9jYXRvcjxDaGFyVD4mIGdldF9hbGxvY2F0b3IoKSBjb25z
dDsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNGbGV4QnVmZmVySGFuZGxl
CiAgICA6IHB1YmxpYyBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4KICB7CiAgICBwdWJsaWM6
CiAgICAgIG5zRmxleEJ1ZmZlckhhbmRsZSggQ2hhclQqIGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0
YUVuZCwgQ2hhclQqIGFTdG9yYWdlU3RhcnQsIENoYXJUKiBhU3RvcmFnZUVuZCApCiAgICAgICAg
ICA6IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCksCiAg
ICAgICAgICAgIG1TdG9yYWdlU3RhcnQoYVN0b3JhZ2VTdGFydCksCiAgICAgICAgICAgIG1TdG9y
YWdlRW5kKGFTdG9yYWdlRW5kKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPm1GbGFncyB8PSB0
aGlzLT5rSXNTdG9yYWdlRGVmaW5lZFNlcGFyYXRlbHk7CiAgICAgICAgfQoKICAgICAgdm9pZCBT
dG9yYWdlU3RhcnQoIENoYXJUKiBhTmV3U3RvcmFnZVN0YXJ0ICkgeyBtU3RvcmFnZVN0YXJ0ID0g
YU5ld1N0b3JhZ2VTdGFydDsgfQogICAgICBDaGFyVCogU3RvcmFnZVN0YXJ0KCkgeyByZXR1cm4g
bVN0b3JhZ2VTdGFydDsgfQogICAgICBjb25zdCBDaGFyVCogU3RvcmFnZVN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbVN0b3JhZ2VTdGFydDsgfQoKICAgICAgdm9pZCBTdG9yYWdlRW5kKCBDaGFyVCog
YU5ld1N0b3JhZ2VFbmQgKSB7IG1TdG9yYWdlRW5kID0gYU5ld1N0b3JhZ2VFbmQ7IH0KICAgICAg
Q2hhclQqIFN0b3JhZ2VFbmQoKSB7IHJldHVybiBtU3RvcmFnZUVuZDsgfQogICAgICBjb25zdCBD
aGFyVCogU3RvcmFnZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1TdG9yYWdlRW5kOyB9CgogICAgICBw
dHJkaWZmX3QgU3RvcmFnZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1TdG9yYWdlRW5kIC0gbVN0
b3JhZ2VTdGFydDsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgQ2hhclQqIG1TdG9yYWdlU3RhcnQ7
CiAgICAgIENoYXJUKiBtU3RvcmFnZUVuZDsKICB9OwoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpj
bGFzcyBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhBbGxvY2F0b3IKICAgIDogcHVibGljIG5zU2hh
cmVkQnVmZmVySGFuZGxlPENoYXJUPgogIHsKICAgIHB1YmxpYzoKICAgICAgbnNTaGFyZWRCdWZm
ZXJIYW5kbGVXaXRoQWxsb2NhdG9yKCBDaGFyVCogYURhdGFTdGFydCwgQ2hhclQqIGFEYXRhRW5k
LCBuc1N0cmluZ0FsbG9jYXRvcjxDaGFyVD4mIGFBbGxvY2F0b3IgKQogICAgICAgICAgOiBuc1No
YXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFydCwgYURhdGFFbmQpLAogICAgICAgICAg
ICBtQWxsb2NhdG9yKGFBbGxvY2F0b3IpCiAgICAgICAgewogICAgICAgICAgdGhpcy0+bUZsYWdz
IHw9IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3I7CiAgICAgICAgfQoKICAgICAgbnNTdHJpbmdBbGxv
Y2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbUFsbG9jYXRvcjsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBtQWxsb2Nh
dG9yOwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zRmxleEJ1ZmZlckhhbmRs
ZVdpdGhBbGxvY2F0b3IKICAgIDogcHVibGljIG5zRmxleEJ1ZmZlckhhbmRsZTxDaGFyVD4KICB7
CiAgICBwdWJsaWM6CiAgICAgIG5zRmxleEJ1ZmZlckhhbmRsZVdpdGhBbGxvY2F0b3IoIENoYXJU
KiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENoYXJUKiBhU3RvcmFnZVN0YXJ0LCBDaGFyVCogYVN0b3JhZ2VFbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPENo
YXJUPiYgYUFsbG9jYXRvciApCiAgICAgICAgICA6IG5zRmxleEJ1ZmZlckhhbmRsZTxDaGFyVD4o
YURhdGFTdGFydCwgYURhdGFFbmQsIGFTdG9yYWdlU3RhcnQsIGFTdG9yYWdlRW5kKSwKICAgICAg
ICAgICAgbUFsbG9jYXRvcihhQWxsb2NhdG9yKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPm1G
bGFncyB8PSB0aGlzLT5rSXNVc2VyQWxsb2NhdG9yOwogICAgICAgIH0KCiAgICAgIG5zU3RyaW5n
QWxsb2NhdG9yPENoYXJUPiYgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1BbGxvY2F0
b3I7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgbUFs
bG9jYXRvcjsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KbnNTdHJpbmdBbGxvY2F0b3I8
Q2hhclQ+Jgpuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD46OmdldF9hbGxvY2F0b3IoKSBjb25z
dAoKICB7CiAgICBpZiAoIG1GbGFncyAmIGtJc1VzZXJBbGxvY2F0b3IgKQogICAgICB7CiAgICAg
ICAgaWYgKCBtRmxhZ3MgJiBrSXNTdG9yYWdlRGVmaW5lZFNlcGFyYXRlbHkgKQogICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zRmxleEJ1ZmZlckhhbmRsZVdpdGhBbGxv
Y2F0b3I8Q2hhclQ+KiA+KHRoaXMpLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgZWxzZQogICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxl
V2l0aEFsbG9jYXRvcjxDaGFyVD4qID4odGhpcyktPmdldF9hbGxvY2F0b3IoKTsKICAgICAgfQoK
ICAgIHJldHVybiBuc1N0cmluZ0FsbG9jYXRvclRyYWl0czxDaGFyVD46Omdsb2JhbF9zdHJpbmdf
YWxsb2NhdG9yKCk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KbnNTaGFyZWRCdWZmZXJI
YW5kbGU8Q2hhclQ+Ojp+bnNTaGFyZWRCdWZmZXJIYW5kbGUoKQoKICB7CiAgICB7fTsKCiAgICBp
ZiAoICEobUZsYWdzICYga0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXIpICkKICAgICAgewog
ICAgICAgIENoYXJUKiBzdHJpbmdfc3RvcmFnZSA9IHRoaXMtPm1EYXRhU3RhcnQ7CiAgICAgICAg
aWYgKCBtRmxhZ3MgJiBrSXNTdG9yYWdlRGVmaW5lZFNlcGFyYXRlbHkgKQogICAgICAgICAgc3Ry
aW5nX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PCBuc0ZsZXhCdWZmZXJIYW5kbGU8Q2hhclQ+
KiA+KHRoaXMpLT5TdG9yYWdlU3RhcnQoKTsKCiAgICAgICAgZ2V0X2FsbG9jYXRvcigpLkRlYWxs
b2NhdGUoc3RyaW5nX3N0b3JhZ2UpOwogICAgICB9CiAgfQojIDMwICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNQcml2YXRlU2hhcmFibGVTdHJpbmcuaCIgMgojIDQwICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNQcml2YXRlU2hhcmFibGVTdHJpbmcuaCIKY2xhc3MgbnNQcml2YXRlU2hh
cmFibGVTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGNoYXJf
dHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgfm5zUHJpdmF0ZVNoYXJhYmxlU3RyaW5n
KCkge30KCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgR2V0SW1wbGVtZW50YXRpb25GbGFncygpIGNv
bnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldEZs
YXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRs
ZTxjaGFyX3R5cGU+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z
dCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUo
KSBjb25zdDsKCgoKCgoKCiAgfTsKCmNsYXNzIG5zUHJpdmF0ZVNoYXJhYmxlQ1N0cmluZwogIHsK
ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwdWJsaWM6CiAg
ICAgIHZpcnR1YWwgfm5zUHJpdmF0ZVNoYXJhYmxlQ1N0cmluZygpIHt9CgogICAgICB2aXJ0dWFs
IFBSVWludDMyIEdldEltcGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdDsKICAgICAgdmlydHVhbCBj
b25zdCBuc0J1ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29u
c3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiogR2V0QnVm
ZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNTaGFyZWRCdWZmZXJIYW5k
bGU8Y2hhcl90eXBlPiogR2V0U2hhcmVkQnVmZmVySGFuZGxlKCkgY29uc3Q7CgoKCgoKCgogIH07
CiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgoKCgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIgMQojIDI3ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi
IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgpl
eHRlcm4gIkMiIHsKIyA0MCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZW5kaWFuLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgoKCgoKCmVu
dW0KewogIF9JU3VwcGVyID0gKCgwKSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAo
MCkpID4+IDgpKSwKICBfSVNsb3dlciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAo
KDEgPDwgKDEpKSA+PiA4KSksCiAgX0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8
IDgpIDogKCgxIDw8ICgyKSkgPj4gOCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwg
KDMpKSA8PCA4KSA6ICgoMSA8PCAoMykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/
ICgoMSA8PCAoNCkpIDw8IDgpIDogKCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1
KSA8IDggPyAoKDEgPDwgKDUpKSA8PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmlu
dCA9ICgoNikgPCA4ID8gKCgxIDw8ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAg
X0lTZ3JhcGggPSAoKDcpIDwgOCA/ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4g
OCkpLAogIF9JU2JsYW5rID0gKCg4KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAo
OCkpID4+IDgpKSwKICBfSVNjbnRybCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAo
KDEgPDwgKDkpKSA+PiA4KSksCiAgX0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkg
PDwgOCkgOiAoKDEgPDwgKDEwKSkgPj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgx
IDw8ICgxMSkpIDw8IDgpIDogKCgxIDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMwpleHRlcm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVf
YjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2Nv
bnN0IF9faW50MzJfdCAqX19jdHlwZV90b3VwcGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUu
aCIgMwpleHRlcm4gaW50IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBo
YSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRocm93ICgpOwpleHRl
cm4gaW50IGlzZGlnaXQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dlciAoaW50KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz
cHJpbnQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXIgKGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBpc2JsYW5rIChpbnQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQg
X19jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHRvYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQp
IHRocm93ICgpOwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDE2OCAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludAp0b2xvd2VyIChpbnQgX19j
KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fYyA+PSAtMTI4ICYmIF9fYyA8IDI1NiA/IF9fY3R5cGVf
dG9sb3dlcltfX2NdIDogX19jOwp9CgpleHRlcm4gX19pbmxpbmUgaW50CnRvdXBwZXIgKGludCBf
X2MpIHRocm93ICgpCnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlw
ZV90b3VwcGVyW19fY10gOiBfX2M7Cn0KIyAyMTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjEyICIvdXNyL2luY2x1ZGUvY3R5cGUu
aCIgMiAzCiMgMjI0ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51
bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChp
bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9f
bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxl
X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRo
cm93ICgpOwpleHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp
OwpleHRlcm4gaW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl
cm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50
IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1
cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRf
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBf
X2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChp
bnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc3ICIvdXNyL2luY2x1ZGUvY3R5
cGUuaCIgMwp9CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIg
MgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAzMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIiAyCiMgMzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0NoYXJUcmFpdHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJ
dGVyYXRvclV0aWxzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5n
SXRlcmF0b3JVdGlscy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CmlubGluZQpQUkJvb2wK
U2FtZUZyYWdtZW50KCBjb25zdCBJdGVyYXRvciYgbGhzLCBjb25zdCBJdGVyYXRvciYgcmhzICkK
ICB7CiAgICByZXR1cm4gbGhzLmZyYWdtZW50KCkubVN0YXJ0ID09IHJocy5mcmFnbWVudCgpLm1T
dGFydDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+IGNsYXNzIG5zUmVhZGluZ0l0ZXJhdG9y
OwoKCgoKICAgICAgIHNpemVfdCBEaXN0YW5jZSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8UFJV
bmljaGFyPiYsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPFBSVW5pY2hhcj4mICk7CiAgICAgICBz
aXplX3QgRGlzdGFuY2UoIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiwgY29uc3QgbnNS
ZWFkaW5nSXRlcmF0b3I8Y2hhcj4mICk7CiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0NoYXJUcmFpdHMuaCIgMgoKCgoKCiAgdHlwZWRlZiBQUkJvb2wgbnNDaGFyVHJhaXRzX2Jvb2w7
CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNDaGFyVHJhaXRzCiAgewogICAgdHlw
ZWRlZiBDaGFyVCBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIGNoYXIgaW5jb21wYXRpYmxlX2NoYXJf
dHlwZTsKCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFzc2lnbiggY2hhcl90eXBlJiBsaHMsIGNv
bnN0IGNoYXJfdHlwZSYgcmhzICkKICAgICAgewogICAgICAgIGxocyA9IHJoczsKICAgICAgfQoK
CgoKICAgIHR5cGVkZWYgaW50IGludF90eXBlOwoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlCiAg
ICB0b19jaGFyX3R5cGUoIGNvbnN0IGludF90eXBlJiBjICkKICAgICAgewogICAgICAgIHJldHVy
biBjaGFyX3R5cGUoYyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludF90eXBlCiAgICB0b19p
bnRfdHlwZSggY29uc3QgY2hhcl90eXBlJiBjICkKICAgICAgewogICAgICAgIHJldHVybiBpbnRf
dHlwZShjKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGVx
X2ludF90eXBlKCBjb25zdCBpbnRfdHlwZSYgbGhzLCBjb25zdCBpbnRfdHlwZSYgcmhzICkKICAg
ICAgewogICAgICAgIHJldHVybiBsaHMgPT0gcmhzOwogICAgICB9CgoKCgogICAgc3RhdGljCiAg
ICBuc0NoYXJUcmFpdHNfYm9vbAogICAgZXEoIGNvbnN0IGNoYXJfdHlwZSYgbGhzLCBjb25zdCBj
aGFyX3R5cGUmIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAg
fQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjb25zdCBjaGFyX3R5
cGUmIGxocywgY29uc3QgY2hhcl90eXBlJiByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxo
cyA8IHJoczsKICAgICAgfQoKCgoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgogICAgY29weSgg
Y2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAg
ICAgICAgY2hhcl90eXBlKiByZXN1bHQgPSBzMTsKICAgICAgICB3aGlsZSAoIG4tLSApCiAgICAg
ICAgICBhc3NpZ24oKnMxKyssICpzMisrKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9
CgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUqCiAgICBtb3ZlKCBjaGFyX3R5cGUqIHMxLCBjb25z
dCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICBjaGFyX3R5cGUqIHJl
c3VsdCA9IHMxOwoKICAgICAgICBpZiAoIG4gKQogICAgICAgICAgewogICAgICAgICAgICBpZiAo
IHMyID4gczEgKQogICAgICAgICAgICAgIGNvcHkoczEsIHMyLCBuKTsKICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHMxICs9IG47CiAgICAgICAgICAgICAg
ICBzMiArPSBuOwogICAgICAgICAgICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAgICAgICAgICAg
ICBhc3NpZ24oKi0tczEsICotLXMyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAg
IGFzc2lnbiggY2hhcl90eXBlKiBzLCBzaXplX3QgbiwgY29uc3QgY2hhcl90eXBlJiBjICkKICAg
ICAgewogICAgICAgIGNoYXJfdHlwZSogcmVzdWx0ID0gczsKICAgICAgICB3aGlsZSAoIG4tLSAp
CiAgICAgICAgICBhc3NpZ24oKnMrKywgYyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
fQoKICAgIHN0YXRpYwogICAgaW50CiAgICBjb21wYXJlKCBjb25zdCBjaGFyX3R5cGUqIHMxLCBj
b25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICBmb3IgKCA7IG4t
LTsgKytzMSwgKytzMiApCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICggbHQoKnMxLCAqczIp
ICkKICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmICggbHQoKnMyLCAqczEp
ICkKICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDA7
CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHNpemVfdAogICAgbGVuZ3RoKCBjb25zdCBjaGFyX3R5
cGUqIHMgKQogICAgICB7CiAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CiAgICAgICAgd2hpbGUg
KCAhZXEoKnMrKywgQ2hhclQoMCkpICkKICAgICAgICAgICsrcmVzdWx0OwogICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgIGZp
bmQoIGNvbnN0IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNvbnN0IGNoYXJfdHlwZSYgYyApCiAg
ICAgIHsKICAgICAgICB3aGlsZSAoIG4tLSApCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICgg
ZXEoKnMsIGMpICkKICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgICAgKytzOwogICAg
ICAgICAgfQoKICAgICAgICByZXR1cm4gMDsKICAgICAgfQojIDIxMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIgogIH07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNDaGFy
VHJhaXRzPGNoYXI+CiAgewogICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgIHR5cGVkZWYg
UFJVbmljaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5cGU7CgogICAgc3RhdGljCiAgICB2b2lkCiAg
ICBhc3NpZ24oIGNoYXImIGxocywgY2hhciByaHMgKQogICAgICB7CiAgICAgICAgbGhzID0gcmhz
OwogICAgICB9CgoKCgogICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CgogICAgc3RhdGljCiAgICBj
aGFyCiAgICB0b19jaGFyX3R5cGUoIGludCBjICkKICAgICAgewogICAgICAgIHJldHVybiBjaGFy
KGMpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnQKICAgIHRvX2ludF90eXBlKCBjaGFyIGMg
KQogICAgICB7CiAgICAgICAgcmV0dXJuIGludCggc3RhdGljX2Nhc3Q8IHVuc2lnbmVkIGNoYXIg
PihjKSApOwogICAgICB9CgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgZXFf
aW50X3R5cGUoIGludCBsaHMsIGludCByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA9
PSByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBl
cSggY2hhciBsaHMsIGNoYXIgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPT0gcmhz
OwogICAgICB9CgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgbHQoIGNoYXIg
bGhzLCBjaGFyIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzIDwgcmhzOwogICAgICB9
CgoKCgogICAgc3RhdGljCiAgICBjaGFyKgogICAgbW92ZSggY2hhciogczEsIGNvbnN0IGNoYXIq
IHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNoYXIq
ID4obWVtbW92ZShzMSwgczIsIG4pKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY2hhcioKICAg
IGNvcHkoIGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyKiA+KG1lbWNweShzMSwgczIsIG4pKTsKICAgICAg
fQoKICAgIHN0YXRpYwogICAgY2hhcioKICAgIGFzc2lnbiggY2hhciogcywgc2l6ZV90IG4sIGNo
YXIgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNoYXIqID4obWVtc2V0
KHMsIHRvX2ludF90eXBlKGMpLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludAogICAg
Y29tcGFyZSggY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBzaXplX3QgbiApCiAgICAg
IHsKICAgICAgICByZXR1cm4gbWVtY21wKHMxLCBzMiwgbik7CiAgICAgIH0KCiAgICBzdGF0aWMK
ICAgIHNpemVfdAogICAgbGVuZ3RoKCBjb25zdCBjaGFyKiBzICkKICAgICAgewogICAgICAgIHJl
dHVybiBzdHJsZW4ocyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXIqCiAgICBm
aW5kKCBjb25zdCBjaGFyKiBzLCBzaXplX3QgbiwgY2hhciBjICkKICAgICAgewogICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBjaGFyKiA+KG1lbWNocihzLCB0b19pbnRfdHlw
ZShjKSwgbikpOwogICAgICB9CiMgMzM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDaGFy
VHJhaXRzLmgiCiAgfTsKIyA0NjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFp
dHMuaCIKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CnN0cnVjdCBuc0NoYXJTb3VyY2VU
cmFpdHMKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIElucHV0SXRlcmF0b3I6OmRpZmZlcmVuY2Vf
dHlwZSBkaWZmZXJlbmNlX3R5cGU7CiMgNDgwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND
aGFyVHJhaXRzLmgiCiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0YW5j
ZSggY29uc3QgSW5wdXRJdGVyYXRvciYgaXRlciApCiAgICAgIHsKICAgICAgICByZXR1cm4gaXRl
ci5zaXplX2ZvcndhcmQoKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJl
YWRhYmxlX2Rpc3RhbmNlKCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBmaXJzdCwgY29uc3QgSW5wdXRJ
dGVyYXRvciYgbGFzdCApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIoU2FtZUZyYWdt
ZW50KGZpcnN0LCBsYXN0KSA/IGxhc3QuZ2V0KCktZmlyc3QuZ2V0KCkgOiBmaXJzdC5zaXplX2Zv
cndhcmQoKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IHR5cGVuYW1lIElucHV0SXRl
cmF0b3I6OnZhbHVlX3R5cGUqCiAgICByZWFkKCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBpdGVyICkK
ICAgICAgewogICAgICAgIHJldHVybiBpdGVyLmdldCgpOwogICAgICB9CgogICAgc3RhdGljCiAg
ICB2b2lkCiAgICBhZHZhbmNlKCBJbnB1dEl0ZXJhdG9yJiBzLCBkaWZmZXJlbmNlX3R5cGUgbiAp
CiAgICAgIHsKICAgICAgICBzLmFkdmFuY2Uobik7CiAgICAgIH0KICB9OwoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgQ2hhclQ+CnN0cnVjdCBuc0NoYXJTb3VyY2VUcmFpdHM8Q2hhclQqPgogIHsKICAgIHR5
cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKIyA1MjUgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJlYWRh
YmxlX2Rpc3RhbmNlKCBDaGFyVCogcyApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIo
bnNDaGFyVHJhaXRzPENoYXJUPjo6bGVuZ3RoKHMpKTsKCiAgICAgIH0KCiAgICBzdGF0aWMKICAg
IFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0YW5jZSggQ2hhclQqIGZpcnN0LCBDaGFyVCogbGFz
dCApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIobGFzdC1maXJzdCk7CiAgICAgIH0K
CiAgICBzdGF0aWMKICAgIGNvbnN0IENoYXJUKgogICAgcmVhZCggQ2hhclQqIHMgKQogICAgICB7
CiAgICAgICAgcmV0dXJuIHM7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFkdmFu
Y2UoIENoYXJUKiYgcywgZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICB7CiAgICAgICAgcyArPSBu
OwogICAgICB9CiAgfTsKIyA2NDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFp
dHMuaCIKdGVtcGxhdGUgPGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpzdHJ1Y3QgbnNDaGFyU2lua1Ry
YWl0cwogIHsKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHdyaXRlKCBPdXRwdXRJdGVyYXRv
ciYgaXRlciwgY29uc3QgdHlwZW5hbWUgT3V0cHV0SXRlcmF0b3I6OnZhbHVlX3R5cGUqIHMsIFBS
VWludDMyIG4gKQogICAgICB7CiAgICAgICAgcmV0dXJuIGl0ZXIud3JpdGUocywgbik7CiAgICAg
IH0KICB9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVjdCBuc0NoYXJTaW5rVHJhaXRz
PENoYXJUKj4KICB7CiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICB3cml0ZSggQ2hhclQqJiBp
dGVyLCBjb25zdCBDaGFyVCogcywgUFJVaW50MzIgbiApCiAgICAgIHsKICAgICAgICBuc0NoYXJU
cmFpdHM8Q2hhclQ+Ojptb3ZlKGl0ZXIsIHMsIG4pOwogICAgICAgIGl0ZXIgKz0gbjsKICAgICAg
ICByZXR1cm4gbjsKICAgICAgfQogIH07CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0FTdHJpbmcuaCIgMgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0
ZXJhdG9yLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0
b3IuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVudC5oIiAx
CiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0ZyYWdtZW50LmgiCmVudW0g
bnNGcmFnbWVudFJlcXVlc3QgeyBrUHJldkZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCwga0xhc3RG
cmFnbWVudCwga05leHRGcmFnbWVudCwga0ZyYWdtZW50QXQgfTsKIyA1MyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nRnJhZ21lbnQuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpz
dHJ1Y3QgbnNSZWFkYWJsZUZyYWdtZW50CiAgewogICAgY29uc3QgQ2hhclQqIG1TdGFydDsKICAg
IGNvbnN0IENoYXJUKiBtRW5kOwogICAgY29uc3Qgdm9pZCogbUZyYWdtZW50SWRlbnRpZmllcjsK
CiAgICBuc1JlYWRhYmxlRnJhZ21lbnQoKQogICAgICAgIDogbVN0YXJ0KDApLCBtRW5kKDApLCBt
RnJhZ21lbnRJZGVudGlmaWVyKDApCiAgICAgIHsKCiAgICAgIH0KICB9OwojIDgwICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVudC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hh
clQ+CnN0cnVjdCBuc1dyaXRhYmxlRnJhZ21lbnQKICB7CiAgICBDaGFyVCogbVN0YXJ0OwogICAg
Q2hhclQqIG1FbmQ7CiAgICB2b2lkKiBtRnJhZ21lbnRJZGVudGlmaWVyOwoKICAgIG5zV3JpdGFi
bGVGcmFnbWVudCgpCiAgICAgICAgOiBtU3RhcnQoMCksIG1FbmQoMCksIG1GcmFnbWVudElkZW50
aWZpZXIoMCkKICAgICAgewoKICAgICAgfQogIH07CiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiIDIKCgoKCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyaW5nVHJhaXRzLmgiIDEKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zU3RyaW5nVHJhaXRzLmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zU3RyaW5n
VHJhaXRzCiAgewogICAgdHlwZWRlZiBuc0FTdHJpbmcgYWJzdHJhY3Rfc3RyaW5nX3R5cGU7CiAg
ICB0eXBlZGVmIG5zQVByb21pc2VTdHJpbmcgYWJzdHJhY3RfcHJvbWlzZV90eXBlOwogICAgdHlw
ZWRlZiBuc0FGbGF0U3RyaW5nIGFic3RyYWN0X2ZsYXRfdHlwZTsKICAgIHR5cGVkZWYgY29uc3Qg
bnNEZXBlbmRlbnRTdHJpbmcgbGl0ZXJhbF9zdHJpbmdfdHlwZTsKICB9OwojIDY2ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdUcmFpdHMuaCIKdGVtcGxhdGUgPD4Kc3RydWN0IG5z
U3RyaW5nVHJhaXRzPGNoYXI+CiAgewogICAgdHlwZWRlZiBuc0FDU3RyaW5nIGFic3RyYWN0X3N0
cmluZ190eXBlOwogICAgdHlwZWRlZiBuc0FQcm9taXNlQ1N0cmluZyBhYnN0cmFjdF9wcm9taXNl
X3R5cGU7CiAgICB0eXBlZGVmIG5zQUZsYXRDU3RyaW5nIGFic3RyYWN0X2ZsYXRfdHlwZTsKICAg
IHR5cGVkZWYgY29uc3QgbnNEZXBlbmRlbnRDU3RyaW5nIGxpdGVyYWxfc3RyaW5nX3R5cGU7CiAg
fTsKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIgMgoK
CgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FsZ29yaXRobS5oIiAxCiMgMzggIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FsZ29yaXRobS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K
aW5saW5lCmNvbnN0IFQmCk5TX01JTiggY29uc3QgVCYgYSwgY29uc3QgVCYgYiApCiAgewogICAg
cmV0dXJuIGIgPCBhID8gYiA6IGE7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25z
dCBUJgpOU19NQVgoIGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIgKQogIHsKICAgIHJldHVybiBhID4g
YiA/IGEgOiBiOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBUPgpp
bmxpbmUKUFJVaW50MzIKTlNfQ09VTlQoIElucHV0SXRlcmF0b3ImIGZpcnN0LCBjb25zdCBJbnB1
dEl0ZXJhdG9yJiBsYXN0LCBjb25zdCBUJiB2YWx1ZSApCiAgewogICAgUFJVaW50MzIgcmVzdWx0
ID0gMDsKICAgIGZvciAoIDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCApCiAgICAgIGlmICggKmZp
cnN0ID09IHZhbHVlICkKICAgICAgICArK3Jlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoK
dGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIE91dHB1dEl0ZXJhdG9yPgppbmxp
bmUKT3V0cHV0SXRlcmF0b3ImCmNvcHlfc3RyaW5nKCBJbnB1dEl0ZXJhdG9yJiBmaXJzdCwgY29u
c3QgSW5wdXRJdGVyYXRvciYgbGFzdCwgT3V0cHV0SXRlcmF0b3ImIHJlc3VsdCApCiAgewogICAg
dHlwZWRlZiBuc0NoYXJTb3VyY2VUcmFpdHM8SW5wdXRJdGVyYXRvcj4gc291cmNlX3RyYWl0czsK
ICAgIHR5cGVkZWYgbnNDaGFyU2lua1RyYWl0czxPdXRwdXRJdGVyYXRvcj4gc2lua190cmFpdHM7
CgogICAgd2hpbGUgKCBmaXJzdCAhPSBsYXN0ICkKICAgICAgewogICAgICAgIFBSSW50MzIgY291
bnRfY29waWVkID0gUFJJbnQzMihzaW5rX3RyYWl0czo6d3JpdGUocmVzdWx0LCBzb3VyY2VfdHJh
aXRzOjpyZWFkKGZpcnN0KSwgc291cmNlX3RyYWl0czo6cmVhZGFibGVfZGlzdGFuY2UoZmlyc3Qs
IGxhc3QpKSk7CiAgICAgICAge307CiAgICAgICAgc291cmNlX3RyYWl0czo6YWR2YW5jZShmaXJz
dCwgY291bnRfY29waWVkKTsKICAgICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKdGVtcGxh
dGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpPdXRwdXRJdGVy
YXRvciYKY29weV9zdHJpbmdfYmFja3dhcmQoIGNvbnN0IElucHV0SXRlcmF0b3ImIGZpcnN0LCBJ
bnB1dEl0ZXJhdG9yJiBsYXN0LCBPdXRwdXRJdGVyYXRvciYgcmVzdWx0ICkKICB7CiAgICB3aGls
ZSAoIGZpcnN0ICE9IGxhc3QgKQogICAgICB7CiAgICAgICAgbGFzdC5ub3JtYWxpemVfYmFja3dh
cmQoKTsKICAgICAgICByZXN1bHQubm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgUFJVaW50
MzIgbGVuZ3RoVG9Db3B5ID0gUFJVaW50MzIoIE5TX01JTihsYXN0LnNpemVfYmFja3dhcmQoKSwg
cmVzdWx0LnNpemVfYmFja3dhcmQoKSkgKTsKICAgICAgICBpZiAoIGZpcnN0LmZyYWdtZW50KCku
bVN0YXJ0ID09IGxhc3QuZnJhZ21lbnQoKS5tU3RhcnQgKQogICAgICAgICAgbGVuZ3RoVG9Db3B5
ID0gTlNfTUlOKGxlbmd0aFRvQ29weSwgUFJVaW50MzIobGFzdC5nZXQoKSAtIGZpcnN0LmdldCgp
KSk7CgogICAgICAgIHt9OwoKCgoKCiAgICAgICAgbnNDaGFyVHJhaXRzPHR5cGVuYW1lIE91dHB1
dEl0ZXJhdG9yOjp2YWx1ZV90eXBlPjo6bW92ZShyZXN1bHQuZ2V0KCktbGVuZ3RoVG9Db3B5LCBs
YXN0LmdldCgpLWxlbmd0aFRvQ29weSwgbGVuZ3RoVG9Db3B5KTsKCgogICAgICAgIGxhc3QuYWR2
YW5jZSggLVBSSW50MzIobGVuZ3RoVG9Db3B5KSApOwogICAgICAgIHJlc3VsdC5hZHZhbmNlKCAt
UFJJbnQzMihsZW5ndGhUb0NvcHkpICk7CiAgICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0K
IyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIgMgojIDU1
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIgp0ZW1wbGF0ZSA8
Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zUmVhZGluZ0l0ZXJhdG9yCgogIHsKICAgIHB1YmxpYzoKICAg
ICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIENoYXJU
IHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29uc3QgQ2hhclQqIHBvaW50ZXI7CiAgICAgIHR5
cGVkZWYgY29uc3QgQ2hhclQmIHJlZmVyZW5jZTsKCgogICAgcHJpdmF0ZToKICAgICAgZnJpZW5k
IGNsYXNzIG5zQVN0cmluZzsKICAgICAgZnJpZW5kIGNsYXNzIG5zQUNTdHJpbmc7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgbnNTdHJpbmdUcmFpdHM8Q2hhclQ+OjphYnN0cmFjdF9zdHJpbmdfdHlw
ZSBzdHJpbmdfdHlwZTsKCiAgICAgIG5zUmVhZGFibGVGcmFnbWVudDxDaGFyVD4gbUZyYWdtZW50
OwogICAgICBjb25zdCBDaGFyVCogbVBvc2l0aW9uOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSog
bU93bmluZ1N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yKCkgeyB9
CgoKCiAgICAgIGlubGluZSB2b2lkIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgIGlubGluZSB2
b2lkIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwoKICAgICAgcG9pbnRlcgogICAgICBnZXQoKSBjb25z
dAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAg
Q2hhclQKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g
KmdldCgpOwogICAgICAgIH0KIyAxMDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
Z0l0ZXJhdG9yLmgiCiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYKICAgICAgb3BlcmF0
b3IrKygpCiAgICAgICAgewogICAgICAgICAgKyttUG9zaXRpb247CiAgICAgICAgICBub3JtYWxp
emVfZm9yd2FyZCgpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5z
UmVhZGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVyYXRvcisrKCBpbnQgKQogICAgICAgIHsK
ICAgICAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiByZXN1bHQoKnRoaXMpOwogICAgICAg
ICAgKyttUG9zaXRpb247CiAgICAgICAgICBub3JtYWxpemVfZm9yd2FyZCgpOwogICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4m
CiAgICAgIG9wZXJhdG9yLS0oKQogICAgICAgIHsKICAgICAgICAgIG5vcm1hbGl6ZV9iYWNrd2Fy
ZCgpOwogICAgICAgICAgLS1tUG9zaXRpb247CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
ICAgfQoKICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+CiAgICAgIG9wZXJhdG9yLS0oIGlu
dCApCiAgICAgICAgewogICAgICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+IHJlc3VsdCgq
dGhpcyk7CiAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0
aW9uOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAgICBjb25zdCBuc1Jl
YWRhYmxlRnJhZ21lbnQ8Q2hhclQ+JgogICAgICBmcmFnbWVudCgpIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAgcmV0dXJuIG1GcmFnbWVudDsKICAgICAgICB9CgogICAgICBjb25zdCBzdHJpbmdf
dHlwZSYKICAgICAgc3RyaW5nKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICB7fTsKICAgICAg
ICAgIHJldHVybiAqbU93bmluZ1N0cmluZzsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNlX3R5
cGUKICAgICAgc2l6ZV9mb3J3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g
bUZyYWdtZW50Lm1FbmQgLSBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90
eXBlCiAgICAgIHNpemVfYmFja3dhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVy
biBtUG9zaXRpb24gLSBtRnJhZ21lbnQubVN0YXJ0OwogICAgICAgIH0KCiAgICAgIG5zUmVhZGlu
Z0l0ZXJhdG9yPENoYXJUPiYKICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlIG4gKQogICAg
ICAgIHsKICAgICAgICAgIHdoaWxlICggbiA+IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3AgPSBOU19NSU4obiwgc2l6ZV9mb3J3YXJkKCkpOwoK
ICAgICAgICAgICAgICB7fTsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9wOwog
ICAgICAgICAgICAgIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICAgICAgbiAtPSBvbmVf
aG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgd2hpbGUgKCBuIDwgMCApCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgICAgICBkaWZm
ZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01BWChuLCAtc2l6ZV9iYWNrd2FyZCgpKTsKCiAgICAg
ICAgICAgICAge307CgoKICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAg
ICAgICAgICBuIC09IG9uZV9ob3A7CiAgICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgICAgfQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zV3JpdGlu
Z0l0ZXJhdG9yCgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOwogICAgICB0eXBlZGVmIENoYXJUIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYg
Q2hhclQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgQ2hhclQmIHJlZmVyZW5jZTsKCgogICAgcHJp
dmF0ZToKICAgICAgZnJpZW5kIGNsYXNzIG5zQVN0cmluZzsKICAgICAgZnJpZW5kIGNsYXNzIG5z
QUNTdHJpbmc7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbnNTdHJpbmdUcmFpdHM8Q2hhclQ+Ojph
YnN0cmFjdF9zdHJpbmdfdHlwZSBzdHJpbmdfdHlwZTsKCiAgICAgIG5zV3JpdGFibGVGcmFnbWVu
dDxDaGFyVD4gbUZyYWdtZW50OwogICAgICBDaGFyVCogbVBvc2l0aW9uOwogICAgICBzdHJpbmdf
dHlwZSogbU93bmluZ1N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9y
KCkgeyB9CgoKCiAgICAgIGlubGluZSB2b2lkIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgIGlu
bGluZSB2b2lkIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwoKICAgICAgcG9pbnRlcgogICAgICBnZXQo
KSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb247CiAgICAgICAgfQoK
ICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewogICAgICAg
ICAgcmV0dXJuICpnZXQoKTsKICAgICAgICB9CiMgMjQ1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHJpbmdJdGVyYXRvci5oIgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4mCiAg
ICAgIG9wZXJhdG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAg
ICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9
CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3IrKyggaW50ICkK
ICAgICAgICB7CiAgICAgICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4gcmVzdWx0KCp0aGlz
KTsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsK
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNXcml0aW5nSXRlcmF0
b3I8Q2hhclQ+JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAgICBub3JtYWxp
emVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVy
YXRvci0tKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJU
PiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAg
ICAtLW1Qb3NpdGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAg
Y29uc3QgbnNXcml0YWJsZUZyYWdtZW50PENoYXJUPiYKICAgICAgZnJhZ21lbnQoKSBjb25zdAog
ICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgbnNX
cml0YWJsZUZyYWdtZW50PENoYXJUPiYKICAgICAgZnJhZ21lbnQoKQogICAgICAgIHsKICAgICAg
ICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUm
CiAgICAgIHN0cmluZygpIGNvbnN0CiAgICAgICAgewogICAgICAgICAge307CiAgICAgICAgICBy
ZXR1cm4gKm1Pd25pbmdTdHJpbmc7CiAgICAgICAgfQoKICAgICAgc3RyaW5nX3R5cGUmCiAgICAg
IHN0cmluZygpCiAgICAgICAgewogICAgICAgICAge307CiAgICAgICAgICByZXR1cm4gKm1Pd25p
bmdTdHJpbmc7CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIHNpemVfZm9y
d2FyZCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudC5tRW5kIC0g
bVBvc2l0aW9uOwogICAgICAgIH0KCiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAgICBzaXplX2Jh
Y2t3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbVBvc2l0aW9uIC0gbUZy
YWdtZW50Lm1TdGFydDsKICAgICAgICB9CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4m
CiAgICAgIGFkdmFuY2UoIGRpZmZlcmVuY2VfdHlwZSBuICkKICAgICAgICB7CiAgICAgICAgICB3
aGlsZSAoIG4gPiAwICkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlw
ZSBvbmVfaG9wID0gTlNfTUlOKG4sIHNpemVfZm9yd2FyZCgpKTsKCiAgICAgICAgICAgICAge307
CgoKICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBub3Jt
YWxpemVfZm9yd2FyZCgpOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAg
fQoKICAgICAgICAgIHdoaWxlICggbiA8IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
bm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9uZV9o
b3AgPSBOU19NQVgobiwgLXNpemVfYmFja3dhcmQoKSk7CgogICAgICAgICAgICAgIHt9OwoKCiAg
ICAgICAgICAgICAgbVBvc2l0aW9uICs9IG9uZV9ob3A7CiAgICAgICAgICAgICAgbiAtPSBvbmVf
aG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAg
ICAgIFBSVWludDMyCiAgICAgIHdyaXRlKCBjb25zdCB2YWx1ZV90eXBlKiBzLCBQUlVpbnQzMiBu
ICkKICAgICAgICB7CiAgICAgICAgICB7fTsKCiAgICAgICAgICBuID0gTlNfTUlOKG4sIFBSVWlu
dDMyKHNpemVfZm9yd2FyZCgpKSk7CiAgICAgICAgICBuc0NoYXJUcmFpdHM8dmFsdWVfdHlwZT46
Om1vdmUobVBvc2l0aW9uLCBzLCBuKTsKICAgICAgICAgIGFkdmFuY2UoIGRpZmZlcmVuY2VfdHlw
ZShuKSApOwogICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgfQogIH07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXpl
X2ZvcndhcmQoKQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVudC5tRW5kCiAg
ICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJlYWRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBr
TmV4dEZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0aW9uID0gbUZyYWdtZW50Lm1TdGFydDsKICB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0ZXJhdG9yPENo
YXJUPjo6bm9ybWFsaXplX2JhY2t3YXJkKCkKICB7CiAgICB3aGlsZSAoIG1Qb3NpdGlvbiA9PSBt
RnJhZ21lbnQubVN0YXJ0CiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJlYWRhYmxlRnJh
Z21lbnQobUZyYWdtZW50LCBrUHJldkZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0aW9uID0gbUZy
YWdtZW50Lm1FbmQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKUFJCb29sCm9w
ZXJhdG9yPT0oIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBjb25zdCBuc1Jl
YWRpbmdJdGVyYXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5nZXQoKSA9PSBy
aHMuZ2V0KCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKUFJCb29sCm9wZXJh
dG9yIT0oIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBjb25zdCBuc1JlYWRp
bmdJdGVyYXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5nZXQoKSAhPSByaHMu
Z2V0KCk7CiAgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zV3Jp
dGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2ZvcndhcmQoKQogIHsKICAgIHdoaWxlICgg
bVBvc2l0aW9uID09IG1GcmFnbWVudC5tRW5kCiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdl
dFdyaXRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrTmV4dEZyYWdtZW50KSApCiAgICAgIG1Qb3Np
dGlvbiA9IG1GcmFnbWVudC5tU3RhcnQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxp
bmUKdm9pZApuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD46Om5vcm1hbGl6ZV9iYWNrd2FyZCgpCiAg
ewogICAgd2hpbGUgKCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1TdGFydAogICAgICAgICAmJiBt
T3duaW5nU3RyaW5nLT5HZXRXcml0YWJsZUZyYWdtZW50KG1GcmFnbWVudCwga1ByZXZGcmFnbWVu
dCkgKQogICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQubUVuZDsKICB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNXcml0aW5nSXRlcmF0
b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7
CiAgICByZXR1cm4gbGhzLmdldCgpID09IHJocy5nZXQoKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Q2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8
Q2hhclQ+JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7CiAg
ICByZXR1cm4gbGhzLmdldCgpICE9IHJocy5nZXQoKTsKICB9CiMgNDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgoKCgoKCgoKY2xhc3MgbnNBU3RyaW5nCiAgICA6IHB1
YmxpYyBuc1ByaXZhdGVTaGFyYWJsZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBuc0FTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQVByb21pc2VTdHJpbmcgcHJv
bWlzZV90eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgY2hhciBpbmNvbXBhdGlibGVfY2hhcl90eXBlOwoKCiAgICAgIHR5cGVkZWYgbnNSZWFkaW5n
SXRlcmF0b3I8Y2hhcl90eXBlPiBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBuc1dyaXRp
bmdJdGVyYXRvcjxjaGFyX3R5cGU+IGl0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBz
aXplX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVaW50MzIgaW5kZXhfdHlwZTsKCgoKCgoKICAgICAg
dmlydHVhbCB+bnNBU3RyaW5nKCkgeyB9CgogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3ImIEJl
Z2luUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlubGluZSBjb25zdF9p
dGVyYXRvciYgRW5kUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CgogICAgICBpbmxp
bmUgaXRlcmF0b3ImIEJlZ2luV3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAgIGlubGluZSBpdGVy
YXRvciYgRW5kV3JpdGluZyggaXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFsIHNpemVfdHlwZSBM
ZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
TGVuZ3RoKCkgPT0gMDsgfQoKICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMoIGNvbnN0IHNlbGZf
dHlwZSYgKSBjb25zdDsKICAgICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hhcl90eXBlKiApIGNv
bnN0OwoKCgoKCgoKICAgICAgY2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAgICAgIGNoYXJfdHlw
ZSBMYXN0KCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBjaGFyX3R5cGUgKSBj
b25zdDsKIyAxMTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAg
c2l6ZV90eXBlIExlZnQoIHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAgICBzaXpl
X3R5cGUgTWlkKCBzZWxmX3R5cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICAgICAg
c2l6ZV90eXBlIFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgogICAgICBQ
UkludDMyIEZpbmRDaGFyKCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgYU9mZnNldCA9IDAgKSBjb25z
dDsKIyAxMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdmly
dHVhbCB2b2lkIFNldENhcGFjaXR5KCBzaXplX3R5cGUgKSB7IH0KIyAxNDMgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lkIFNldExlbmd0aCgg
c2l6ZV90eXBlICkgeyB9CgoKICAgICAgdm9pZAogICAgICBUcnVuY2F0ZSggc2l6ZV90eXBlIGFO
ZXdMZW5ndGg9MCApCiAgICAgICAgewogICAgICAgICAge307CgogICAgICAgICAgaWYgKCBhTmV3
TGVuZ3RoIDwgdGhpcy0+TGVuZ3RoKCkgKQogICAgICAgICAgICBTZXRMZW5ndGgoYU5ld0xlbmd0
aCk7CiAgICAgICAgfQojIDE3OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5o
IgogICAgICB2b2lkIEFzc2lnbiggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2ln
bkZyb21SZWFkYWJsZShhUmVhZGFibGUpOyB9CiAgICAgIGlubGluZSB2b2lkIEFzc2lnbiggY29u
c3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKTsKICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0IGNo
YXJfdHlwZSogYVB0ciApIHsgYVB0ciA/IGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKGFQdHIpIDog
U2V0TGVuZ3RoKDApOyB9CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIs
IHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aChhUHRy
LCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFzc2lnbiggY2hhcl90eXBlIGFDaGFyICkgeyBkb19B
c3NpZ25Gcm9tRWxlbWVudChhQ2hhcik7IH0KCgogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSgg
Y29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4g
KnRoaXM7IH0KCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjb25zdCBwcm9taXNlX3R5cGUm
IGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBz
ZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBc3NpZ24oYVB0
cik7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY2hhcl90eXBl
IGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgoKCiAgICAgIHZv
aWQgQXBwZW5kKCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kRnJvbVJlYWRh
YmxlKGFSZWFkYWJsZSk7IH0KICAgICAgaW5saW5lIHZvaWQgQXBwZW5kKCBjb25zdCBwcm9taXNl
X3R5cGUmIGFSZWFkYWJsZSApOwogICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBlKiBh
UHRyICkgeyBpZiAoYVB0cikgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIoYVB0cik7IH0KICAgICAg
dm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7
IGRvX0FwcGVuZEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIHZv
aWQgQXBwZW5kKCBjaGFyX3R5cGUgYUNoYXIgKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50KGFDaGFy
KTsgfQoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFk
YWJsZSApIHsgQXBwZW5kKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5
cGUmIG9wZXJhdG9yKz0oIGNvbnN0IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlICkgeyBBcHBlbmQo
YVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSgg
Y29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBcHBlbmQoYVB0cik7IHJldHVybiAqdGhpczsgfQog
ICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXBwZW5kKGFD
aGFyKTsgcmV0dXJuICp0aGlzOyB9CiMgMjE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNB
U3RyaW5nLmgiCiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSwg
aW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBJbnNlcnRGcm9tUmVhZGFibGUoYVJlYWRhYmxlLCBh
dFBvc2l0aW9uKTsgfQogICAgICBpbmxpbmUgdm9pZCBJbnNlcnQoIGNvbnN0IHByb21pc2VfdHlw
ZSYgYVJlYWRhYmxlLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKTsKICAgICAgdm9pZCBJbnNlcnQo
IGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBpZiAoYVB0
cikgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIoYVB0ciwgYXRQb3NpdGlvbik7IH0KICAgICAgdm9p
ZCBJbnNlcnQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uLCBz
aXplX3R5cGUgYUxlbmd0aCApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwg
YXRQb3NpdGlvbiwgYUxlbmd0aCk7IH0KICAgICAgdm9pZCBJbnNlcnQoIGNoYXJfdHlwZSBhQ2hh
ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBkb19JbnNlcnRGcm9tRWxlbWVudChhQ2hhciwg
YXRQb3NpdGlvbik7IH0KCgoKICAgICAgdmlydHVhbCB2b2lkIEN1dCggaW5kZXhfdHlwZSBjdXRT
dGFydCwgc2l6ZV90eXBlIGN1dExlbmd0aCApOwoKCgogICAgICB2b2lkIFJlcGxhY2UoIGluZGV4
X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBjdXRMZW5ndGgsIGNvbnN0IHNlbGZfdHlwZSYgYVJl
YWRhYmxlICkgeyBSZXBsYWNlRnJvbVJlYWRhYmxlKGN1dFN0YXJ0LCBjdXRMZW5ndGgsIGFSZWFk
YWJsZSk7IH0KCgogICAgcHJpdmF0ZToKCiAgICAgIGluZGV4X3R5cGUgQ291bnRDaGFyKCBpbmNv
bXBhdGlibGVfY2hhcl90eXBlICkgY29uc3Q7CiAgICAgIHZvaWQgb3BlcmF0b3I9ICggaW5jb21w
YXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lkIEFzc2lnbiAoIGluY29tcGF0aWJsZV9jaGFy
X3R5cGUgKTsKICAgICAgdm9pZCBvcGVyYXRvcis9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSAp
OwogICAgICB2b2lkIEFwcGVuZCAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9p
ZCBJbnNlcnQgKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlLCBpbmRleF90eXBlICk7CgoKICAgIHBy
b3RlY3RlZDoKICAgICAgICAgICAgICB2b2lkIEFzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2Vs
Zl90eXBlJiApOwogICAgICAgICAgICAgIHZvaWQgQXNzaWduRnJvbVByb21pc2UoIGNvbnN0IHNl
bGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21SZWFkYWJsZSggY29u
c3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnRQ
dHIoIGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21F
bGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAgdmly
dHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAgICAg
ICAgdm9pZCBBcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAg
ICAgICB2b2lkIEFwcGVuZEZyb21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZp
cnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAg
ICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUq
ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudFB0ckxlbmd0aCggY29u
c3QgY2hhcl90eXBlKiwgc2l6ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRG
cm9tRWxlbWVudCggY2hhcl90eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVJl
YWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBpbmRleF90eXBlICk7CiAgICAgICAgICAgICAgdm9p
ZCBJbnNlcnRGcm9tUHJvbWlzZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAg
ICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBp
bmRleF90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0cigg
Y29uc3QgY2hhcl90eXBlKiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5z
ZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUsIHNp
emVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoIGNoYXJf
dHlwZSwgaW5kZXhfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIFJlcGxhY2VGcm9tUmVhZGFi
bGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwogICAgICAgICAg
ICAgIHZvaWQgUmVwbGFjZUZyb21Qcm9taXNlKCBpbmRleF90eXBlLCBzaXplX3R5cGUsIGNvbnN0
IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX1JlcGxhY2VGcm9tUmVhZGFibGUo
IGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHVibGlj
OgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCggbnNS
ZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIg
PSAwICkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFn
bWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwg
UFJVaW50MzIgPSAwICkgPSAwOwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBj
b25zdCBzZWxmX3R5cGUmIGFTdHJpbmcgKSBjb25zdCB7IHJldHVybiAmYVN0cmluZyA9PSB0aGlz
OyB9CiAgfTsKCmNsYXNzIG5zQUNTdHJpbmcKICAgIDogcHVibGljIG5zUHJpdmF0ZVNoYXJhYmxl
Q1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0FDU3RyaW5nIHNlbGZfdHlw
ZTsKICAgICAgdHlwZWRlZiBuc0FQcm9taXNlQ1N0cmluZyBwcm9taXNlX3R5cGU7CiAgICAgIHR5
cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGluY29tcGF0aWJs
ZV9jaGFyX3R5cGU7CgoKICAgICAgdHlwZWRlZiBuc1JlYWRpbmdJdGVyYXRvcjxjaGFyX3R5cGU+
IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIG5zV3JpdGluZ0l0ZXJhdG9yPGNoYXJfdHlw
ZT4gaXRlcmF0b3I7CgogICAgICB0eXBlZGVmIFBSVWludDMyIHNpemVfdHlwZTsKICAgICAgdHlw
ZWRlZiBQUlVpbnQzMiBpbmRleF90eXBlOwoKCgoKCgogICAgICB2aXJ0dWFsIH5uc0FDU3RyaW5n
KCkgeyB9CgogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3ImIEJlZ2luUmVhZGluZyggY29uc3Rf
aXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciYgRW5kUmVhZGlu
ZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CgogICAgICBpbmxpbmUgaXRlcmF0b3ImIEJlZ2lu
V3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAgIGlubGluZSBpdGVyYXRvciYgRW5kV3JpdGluZygg
aXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFsIHNpemVfdHlwZSBMZW5ndGgoKSBjb25zdCA9IDA7
CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gTGVuZ3RoKCkgPT0gMDsgfQoK
ICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMoIGNvbnN0IHNlbGZfdHlwZSYgKSBjb25zdDsKICAg
ICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hhcl90eXBlKiApIGNvbnN0OwoKCgoKCgoKICAgICAg
Y2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAgICAgIGNoYXJfdHlwZSBMYXN0KCkgY29uc3Q7Cgog
ICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBjaGFyX3R5cGUgKSBjb25zdDsKIyAzNDIgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgc2l6ZV90eXBlIExlZnQoIHNl
bGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAgICBzaXplX3R5cGUgTWlkKCBzZWxmX3R5
cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgc2l6ZV90eXBlIFJpZ2h0KCBz
ZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgogICAgICBQUkludDMyIEZpbmRDaGFyKCBj
aGFyX3R5cGUsIFBSVWludDMyIGFPZmZzZXQgPSAwICkgY29uc3Q7CiMgMzU4ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRDYXBhY2l0
eSggc2l6ZV90eXBlICkgeyB9CiMgMzczICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3Ry
aW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRMZW5ndGgoIHNpemVfdHlwZSApIHsgfQoKCiAg
ICAgIHZvaWQKICAgICAgVHJ1bmNhdGUoIHNpemVfdHlwZSBhTmV3TGVuZ3RoPTAgKQogICAgICAg
IHsKICAgICAgICAgIHt9OwoKICAgICAgICAgIGlmICggYU5ld0xlbmd0aCA8IHRoaXMtPkxlbmd0
aCgpICkKICAgICAgICAgICAgU2V0TGVuZ3RoKGFOZXdMZW5ndGgpOwogICAgICAgIH0KIyA0MDgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdm9pZCBBc3NpZ24o
IGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBBc3NpZ25Gcm9tUmVhZGFibGUoYVJlYWRh
YmxlKTsgfQogICAgICBpbmxpbmUgdm9pZCBBc3NpZ24oIGNvbnN0IHByb21pc2VfdHlwZSYgYVJl
YWRhYmxlICk7CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IGFQ
dHIgPyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cihhUHRyKSA6IFNldExlbmd0aCgwKTsgfQogICAg
ICB2b2lkIEFzc2lnbiggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBzaXplX3R5cGUgYUxlbmd0aCAp
IHsgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYUxlbmd0aCk7IH0KICAgICAg
dm9pZCBBc3NpZ24oIGNoYXJfdHlwZSBhQ2hhciApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnQoYUNo
YXIpOyB9CgoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYgYVJl
YWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogICAgICBzZWxm
X3R5cGUmIG9wZXJhdG9yPSggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2ln
bihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0o
IGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0K
ICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXNzaWduKGFD
aGFyKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKCgogICAgICB2b2lkIEFwcGVuZCggY29uc3Qgc2Vs
Zl90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVuZEZyb21SZWFkYWJsZShhUmVhZGFibGUpOyB9CiAg
ICAgIGlubGluZSB2b2lkIEFwcGVuZCggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKTsK
ICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgaWYgKGFQdHIpIGRv
X0FwcGVuZEZyb21FbGVtZW50UHRyKGFQdHIpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBjb25zdCBj
aGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19BcHBlbmRGcm9tRWxlbWVu
dFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFwcGVuZCggY2hhcl90eXBl
IGFDaGFyICkgeyBkb19BcHBlbmRGcm9tRWxlbWVudChhQ2hhcik7IH0KCiAgICAgIHNlbGZfdHlw
ZSYgb3BlcmF0b3IrPSggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVuZChhUmVh
ZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBjb25z
dCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kKGFSZWFkYWJsZSk7IHJldHVybiAq
dGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNvbnN0IGNoYXJfdHlwZSogYVB0
ciApIHsgQXBwZW5kKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVy
YXRvcis9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFwcGVuZChhQ2hhcik7IHJldHVybiAqdGhpczsg
fQojIDQ0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2b2lk
IEluc2VydCggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUsIGluZGV4X3R5cGUgYXRQb3NpdGlv
biApIHsgSW5zZXJ0RnJvbVJlYWRhYmxlKGFSZWFkYWJsZSwgYXRQb3NpdGlvbik7IH0KICAgICAg
aW5saW5lIHZvaWQgSW5zZXJ0KCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSwgaW5kZXhf
dHlwZSBhdFBvc2l0aW9uICk7CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFyX3R5cGUqIGFQ
dHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApIHsgaWYgKGFQdHIpIGRvX0luc2VydEZyb21FbGVt
ZW50UHRyKGFQdHIsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFy
X3R5cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiwgc2l6ZV90eXBlIGFMZW5ndGggKSB7
IGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGF0UG9zaXRpb24sIGFMZW5ndGgp
OyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjaGFyX3R5cGUgYUNoYXIsIGluZGV4X3R5cGUgYXRQb3Np
dGlvbiApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoYUNoYXIsIGF0UG9zaXRpb24pOyB9CgoKCiAg
ICAgIHZpcnR1YWwgdm9pZCBDdXQoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBjdXRM
ZW5ndGggKTsKCgoKICAgICAgdm9pZCBSZXBsYWNlKCBpbmRleF90eXBlIGN1dFN0YXJ0LCBzaXpl
X3R5cGUgY3V0TGVuZ3RoLCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgUmVwbGFjZUZy
b21SZWFkYWJsZShjdXRTdGFydCwgY3V0TGVuZ3RoLCBhUmVhZGFibGUpOyB9CgoKICAgIHByaXZh
dGU6CgogICAgICBpbmRleF90eXBlIENvdW50Q2hhciggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSAp
IGNvbnN0OwogICAgICB2b2lkIG9wZXJhdG9yPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsK
ICAgICAgdm9pZCBBc3NpZ24gKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQg
b3BlcmF0b3IrPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBBcHBlbmQg
KCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQgSW5zZXJ0ICggaW5jb21wYXRp
YmxlX2NoYXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICAg
ICAgdm9pZCBBc3NpZ25Gcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAg
ICAgICB2b2lkIEFzc2lnbkZyb21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZp
cnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAg
ICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUq
ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aCggY29u
c3QgY2hhcl90eXBlKiwgc2l6ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25G
cm9tRWxlbWVudCggY2hhcl90eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgQXBwZW5kRnJvbVJl
YWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgICAgICAgICAgdm9pZCBBcHBlbmRGcm9t
UHJvbWlzZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5k
RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19B
cHBlbmRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90eXBlKiApOwogICAgICB2aXJ0dWFsIHZv
aWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIHNpemVf
dHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnQoIGNoYXJfdHlw
ZSApOwoKICAgICAgICAgICAgICB2b2lkIEluc2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90
eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVByb21pc2Uo
IGNvbnN0IHNlbGZfdHlwZSYsIGluZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0lu
c2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2
aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSosIGlu
ZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVu
Z3RoKCBjb25zdCBjaGFyX3R5cGUqLCBpbmRleF90eXBlLCBzaXplX3R5cGUgKTsKICAgICAgdmly
dHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50KCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgKTsK
CiAgICAgICAgICAgICAgdm9pZCBSZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXpl
X3R5cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAgICAgICB2b2lkIFJlcGxhY2VGcm9t
UHJvbWlzZSggaW5kZXhfdHlwZSwgc2l6ZV90eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAg
IHZpcnR1YWwgdm9pZCBkb19SZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXplX3R5
cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKCgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFy
X3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApIGNvbnN0ID0gMDsKICAg
ICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFibGVGcmFn
bWVudDxjaGFyX3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApID0gMDsK
ICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3Qgc2VsZl90eXBlJiBhU3Ry
aW5nICkgY29uc3QgeyByZXR1cm4gJmFTdHJpbmcgPT0gdGhpczsgfQogIH07CgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FQcm9taXNlU3RyaW5nLmgiIDEKIyAzNSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zQVByb21pc2VTdHJpbmcuaCIKY2xhc3MgbnNBUHJvbWlzZVN0cmlu
ZyA6IHB1YmxpYyBuc0FTdHJpbmcgeyB9OwpjbGFzcyBuc0FQcm9taXNlQ1N0cmluZyA6IHB1Ymxp
YyBuc0FDU3RyaW5nIHsgfTsKIyA1MDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJp
bmcuaCIgMgoKaW5saW5lCnZvaWQKbnNBU3RyaW5nOjpBc3NpZ24oIGNvbnN0IG5zQVByb21pc2VT
dHJpbmcmIGFSZWFkYWJsZSApCiAgewogICAgQXNzaWduRnJvbVByb21pc2UoYVJlYWRhYmxlKTsK
ICB9CgppbmxpbmUKdm9pZApuc0FTdHJpbmc6OkFwcGVuZCggY29uc3QgbnNBUHJvbWlzZVN0cmlu
ZyYgYVJlYWRhYmxlICkKICB7CiAgICBBcHBlbmRGcm9tUHJvbWlzZShhUmVhZGFibGUpOwogIH0K
CmlubGluZQp2b2lkCm5zQVN0cmluZzo6SW5zZXJ0KCBjb25zdCBuc0FQcm9taXNlU3RyaW5nJiBh
UmVhZGFibGUsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApCiAgewogICAgSW5zZXJ0RnJvbVByb21p
c2UoYVJlYWRhYmxlLCBhdFBvc2l0aW9uKTsKICB9CgppbmxpbmUKdm9pZApuc0FDU3RyaW5nOjpB
c3NpZ24oIGNvbnN0IG5zQVByb21pc2VDU3RyaW5nJiBhUmVhZGFibGUgKQogIHsKICAgIEFzc2ln
bkZyb21Qcm9taXNlKGFSZWFkYWJsZSk7CiAgfQoKaW5saW5lCnZvaWQKbnNBQ1N0cmluZzo6QXBw
ZW5kKCBjb25zdCBuc0FQcm9taXNlQ1N0cmluZyYgYVJlYWRhYmxlICkKICB7CiAgICBBcHBlbmRG
cm9tUHJvbWlzZShhUmVhZGFibGUpOwogIH0KCmlubGluZQp2b2lkCm5zQUNTdHJpbmc6Okluc2Vy
dCggY29uc3QgbnNBUHJvbWlzZUNTdHJpbmcmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0
aW9uICkKICB7CiAgICBJbnNlcnRGcm9tUHJvbWlzZShhUmVhZGFibGUsIGF0UG9zaXRpb24pOwog
IH0KCgoKCgppbmxpbmUKbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNBU3RyaW5nOjpCZWdp
blJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0
Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1G
cmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0
Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICBy
ZXR1cm4gYVJlc3VsdDsKICB9CgppbmxpbmUKbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNB
U3RyaW5nOjpFbmRSZWFkaW5nKCBjb25zdF9pdGVyYXRvciYgYVJlc3VsdCApIGNvbnN0CiAgewog
ICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFJlYWRhYmxlRnJhZ21lbnQo
YVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24g
PSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCmlubGlu
ZQpuc0FTdHJpbmc6Oml0ZXJhdG9yJgpuc0FTdHJpbmc6OkJlZ2luV3JpdGluZyggaXRlcmF0b3Im
IGFSZXN1bHQgKQogIHsKICAgIGFSZXN1bHQubU93bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRX
cml0YWJsZUZyYWdtZW50KGFSZXN1bHQubUZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCk7CiAgICBh
UmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1TdGFydDsKICAgIGFSZXN1bHQu
bm9ybWFsaXplX2ZvcndhcmQoKTsKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgppbmxpbmUKbnNB
U3RyaW5nOjppdGVyYXRvciYKbnNBU3RyaW5nOjpFbmRXcml0aW5nKCBpdGVyYXRvciYgYVJlc3Vs
dCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRhYmxl
RnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5t
UG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0Owog
IH0KCmNsYXNzIG5zU3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdmlydHVh
bCBpbnQgb3BlcmF0b3IoKSggY29uc3QgUFJVbmljaGFyKiwgY29uc3QgUFJVbmljaGFyKiwgUFJV
aW50MzIgYUxlbmd0aCApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNEZWZhdWx0U3RyaW5nQ29t
cGFyYXRvcgogICAgOiBwdWJsaWMgbnNTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgog
ICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBQUlVuaWNoYXIqLCBjb25zdCBQUlVu
aWNoYXIqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsKCmNsYXNzIG5zQ2FzZUluc2Vu
c2l0aXZlU3RyaW5nQ29tcGFyYXRvcgogICAgOiBwdWJsaWMgbnNTdHJpbmdDb21wYXJhdG9yCiAg
ewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBQUlVuaWNo
YXIqLCBjb25zdCBQUlVuaWNoYXIqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsKCiAg
ICAgICBpbnQgQ29tcGFyZSggY29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYg
cmhzLCBjb25zdCBuc1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRv
cigpICk7CgppbmxpbmUKUFJCb29sCm5zQVN0cmluZzo6RXF1YWxzKCBjb25zdCBzZWxmX3R5cGUm
IHJocyApIGNvbnN0CiAgewogICAgcmV0dXJuIExlbmd0aCgpPT1yaHMuTGVuZ3RoKCkgJiYgQ29t
cGFyZSgqdGhpcywgcmhzKT09MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yIT0oIGNvbnN0
IG5zQVN0cmluZyYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuICFs
aHMuRXF1YWxzKHJocyk7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcjwgKCBjb25zdCBuc0FT
dHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJl
KGxocywgcmhzKTwgMDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPD0oIGNvbnN0IG5zQVN0
cmluZyYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUo
bGhzLCByaHMpPD0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNBU3Ry
aW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLkVxdWFs
cyhyaHMpOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I+PSggY29uc3QgbnNBU3RyaW5nJiBs
aHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJo
cyk+PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj4gKCBjb25zdCBuc0FTdHJpbmcmIGxo
cywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhz
KT4gMDsKICB9CgppbmxpbmUKbnNBU3RyaW5nOjpzaXplX3R5cGUKbnNBU3RyaW5nOjpMZWZ0KCBu
c0FTdHJpbmcmIGFSZXN1bHQsIHNpemVfdHlwZSBhTGVuZ3RoVG9Db3B5ICkgY29uc3QKICB7CiAg
ICByZXR1cm4gTWlkKGFSZXN1bHQsIDAsIGFMZW5ndGhUb0NvcHkpOwogIH0KCgoKCgoKaW5saW5l
Cm5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpblJlYWRpbmcoIGNv
bnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJp
bmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0Zp
cnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5t
U3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3Vs
dDsKICB9CgppbmxpbmUKbnNBQ1N0cmluZzo6Y29uc3RfaXRlcmF0b3ImCm5zQUNTdHJpbmc6OkVu
ZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0
Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1G
cmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQu
bUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKaW5saW5lCm5zQUNTdHJp
bmc6Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpbldyaXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0
ICkKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFibGVG
cmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5t
UG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6
ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsKICB9CgoKaW5saW5lCm5zQUNTdHJpbmc6
Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpFbmRXcml0aW5nKCBpdGVyYXRvciYgYVJlc3VsdCApCiAg
ewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRhYmxlRnJhZ21l
bnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRp
b24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgpj
bGFzcyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGlu
dCBvcGVyYXRvcigpKCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFMZW5ndGgg
KSBjb25zdCA9IDA7CiAgfTsKCmNsYXNzIG5zRGVmYXVsdENTdHJpbmdDb21wYXJhdG9yCiAgICA6
IHB1YmxpYyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFs
IGludCBvcGVyYXRvcigpKCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFMZW5n
dGggKSBjb25zdDsKICB9OwoKY2xhc3MgbnNDYXNlSW5zZW5zaXRpdmVDU3RyaW5nQ29tcGFyYXRv
cgogICAgOiBwdWJsaWMgbnNDU3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAg
dmlydHVhbCBpbnQgb3BlcmF0b3IoKSggY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBQUlVpbnQz
MiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsKCiAgICAgICBpbnQgQ29tcGFyZSggY29uc3QgbnNBQ1N0
cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMsIGNvbnN0IG5zQ1N0cmluZ0NvbXBhcmF0
b3ImID0gbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IoKSApOwoKaW5saW5lClBSQm9vbApuc0FD
U3RyaW5nOjpFcXVhbHMoIGNvbnN0IHNlbGZfdHlwZSYgcmhzICkgY29uc3QKICB7CiAgICByZXR1
cm4gTGVuZ3RoKCk9PXJocy5MZW5ndGgoKSAmJiBDb21wYXJlKCp0aGlzLCByaHMpPT0wOwogIH0K
CmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBu
c0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiAhbGhzLkVxdWFscyhyaHMpOwogIH0KCmlu
bGluZQpQUkJvb2wKb3BlcmF0b3I8ICggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FD
U3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKTwgMDsKICB9Cgpp
bmxpbmUKUFJCb29sCm9wZXJhdG9yPD0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNB
Q1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk8PTA7CiAgfQoK
aW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5z
QUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIGxocy5FcXVhbHMocmhzKTsKICB9Cgppbmxp
bmUKUFJCb29sCm9wZXJhdG9yPj0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0
cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk+PTA7CiAgfQoKaW5s
aW5lClBSQm9vbApvcGVyYXRvcj4gKCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5zQUNT
dHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCByaHMpPiAwOwogIH0KCmlu
bGluZQpuc0FDU3RyaW5nOjpzaXplX3R5cGUKbnNBQ1N0cmluZzo6TGVmdCggbnNBQ1N0cmluZyYg
YVJlc3VsdCwgc2l6ZV90eXBlIGFMZW5ndGhUb0NvcHkgKSBjb25zdAogIHsKICAgIHJldHVybiBN
aWQoYVJlc3VsdCwgMCwgYUxlbmd0aFRvQ29weSk7CiAgfQoKCgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24uaCIgMQojIDUwICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uLmgiCmNsYXNzIG5zRGVwZW5k
ZW50Q29uY2F0ZW5hdGlvbgogICAgOiBwdWJsaWMgbnNBUHJvbWlzZVN0cmluZwogIHsKICAgIHB1
YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24gc2VsZl90eXBlOwog
ICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU3RyaW5n
IHN0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHN0cmluZ190eXBlOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYs
IG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0OwogICAgICB2aXJ0dWFsIGNoYXJf
dHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4m
LCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAgICBlbnVt
IHsga0xlZnRTdHJpbmcsIGtSaWdodFN0cmluZyB9OwoKICAgICAgaW50CiAgICAgIEdldEN1cnJl
bnRTdHJpbmdGcm9tRnJhZ21lbnQoIGNvbnN0IG5zUmVhZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+
JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAocmVpbnRlcnBy
ZXRfY2FzdDwgUFJVaW50MzIgPihhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikgJiBtRnJh
Z21lbnRJZGVudGlmaWVyTWFzaykgPyBrUmlnaHRTdHJpbmcgOiBrTGVmdFN0cmluZzsKICAgICAg
ICB9CgogICAgICBpbnQKICAgICAgU2V0TGVmdFN0cmluZ0luRnJhZ21lbnQoIG5zUmVhZGFibGVG
cmFnbWVudDxjaGFyX3R5cGU+JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAg
IGFGcmFnbWVudC5tRnJhZ21lbnRJZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDwgdm9pZCog
PihyZWludGVycHJldF9jYXN0PCBQUlVpbnQzMiA+KGFGcmFnbWVudC5tRnJhZ21lbnRJZGVudGlm
aWVyKSAmIH5tRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga0xlZnRT
dHJpbmc7CiAgICAgICAgfQoKICAgICAgaW50CiAgICAgIFNldFJpZ2h0U3RyaW5nSW5GcmFnbWVu
dCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNvbnN0CiAgICAg
ICAgewogICAgICAgICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIgPSByZWludGVycHJl
dF9jYXN0PCB2b2lkKiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVWludDMyID4oYUZyYWdtZW50Lm1G
cmFnbWVudElkZW50aWZpZXIpIHwgbUZyYWdtZW50SWRlbnRpZmllck1hc2spOwogICAgICAgICAg
cmV0dXJuIGtSaWdodFN0cmluZzsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICBuc0RlcGVu
ZGVudENvbmNhdGVuYXRpb24oIGNvbnN0IHN0cmluZ190eXBlJiBhTGVmdFN0cmluZywgY29uc3Qg
c3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZywgUFJVaW50MzIgYU1hc2sgPSAxICkKICAgICAgICAg
IDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYU1hc2spCiAgICAgICAgewogICAgICAgICAgbVN0
cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba1Jp
Z2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRD
b25jYXRlbmF0aW9uKCBjb25zdCBzZWxmX3R5cGUmIGFMZWZ0U3RyaW5nLCBjb25zdCBzdHJpbmdf
dHlwZSYgYVJpZ2h0U3RyaW5nICkKICAgICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1hc2so
YUxlZnRTdHJpbmcubUZyYWdtZW50SWRlbnRpZmllck1hc2s8PDEpCiAgICAgICAgewogICAgICAg
ICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmlu
Z3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAgICAgfQoKCgoKICAgIHByaXZh
dGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAgIHB1Ymxp
YzoKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwg
UFJCb29sIElzRGVwZW5kZW50T24oIGNvbnN0IHN0cmluZ190eXBlJiApIGNvbnN0OwoKCgoKICAg
ICAgUFJVaW50MzIgR2V0RnJhZ21lbnRJZGVudGlmaWVyTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1G
cmFnbWVudElkZW50aWZpZXJNYXNrOyB9CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBvcGVyYXRv
cisoIGNvbnN0IHNlbGZfdHlwZSYgKTsKCgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IHN0cmlu
Z190eXBlKiBtU3RyaW5nc1syXTsKICAgICAgUFJVaW50MzIgbUZyYWdtZW50SWRlbnRpZmllck1h
c2s7CiAgfTsKCmNsYXNzIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24KICAgIDogcHVibGljIG5z
QVByb21pc2VDU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50
Q0NvbmNhdGVuYXRpb24gc2VsZl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIG5zQUNTdHJpbmcgc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyaW5n
X3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHByb3RlY3RlZDoKICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFi
bGVGcmFnbWVudDxjaGFyX3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29u
c3Q7CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRh
YmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsg
cmV0dXJuIDA7IH0KCiAgICAgIGVudW0geyBrTGVmdFN0cmluZywga1JpZ2h0U3RyaW5nIH07Cgog
ICAgICBpbnQKICAgICAgR2V0Q3VycmVudFN0cmluZ0Zyb21GcmFnbWVudCggY29uc3QgbnNSZWFk
YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAg
ICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PCBQUlVpbnQzMiA+KGFGcmFnbWVudC5tRnJh
Z21lbnRJZGVudGlmaWVyKSAmIG1GcmFnbWVudElkZW50aWZpZXJNYXNrKSA/IGtSaWdodFN0cmlu
ZyA6IGtMZWZ0U3RyaW5nOwogICAgICAgIH0KCiAgICAgIGludAogICAgICBTZXRMZWZ0U3RyaW5n
SW5GcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNv
bnN0CiAgICAgICAgewogICAgICAgICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIgPSBy
ZWludGVycHJldF9jYXN0PCB2b2lkKiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVWludDMyID4oYUZy
YWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIpICYgfm1GcmFnbWVudElkZW50aWZpZXJNYXNrKTsK
ICAgICAgICAgIHJldHVybiBrTGVmdFN0cmluZzsKICAgICAgICB9CgogICAgICBpbnQKICAgICAg
U2V0UmlnaHRTdHJpbmdJbkZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYg
YUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBhRnJhZ21lbnQubUZyYWdtZW50
SWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqID4ocmVpbnRlcnByZXRfY2FzdDwg
UFJVaW50MzIgPihhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikgfCBtRnJhZ21lbnRJZGVu
dGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga1JpZ2h0U3RyaW5nOwogICAgICAgIH0KCiAg
ICBwdWJsaWM6CiAgICAgIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24oIGNvbnN0IHN0cmluZ190
eXBlJiBhTGVmdFN0cmluZywgY29uc3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZywgUFJVaW50
MzIgYU1hc2sgPSAxICkKICAgICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYU1hc2sp
CiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5n
OwogICAgICAgICAgbVN0cmluZ3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAg
ICAgfQoKICAgICAgbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbiggY29uc3Qgc2VsZl90eXBlJiBh
TGVmdFN0cmluZywgY29uc3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZyApCiAgICAgICAgICA6
IG1GcmFnbWVudElkZW50aWZpZXJNYXNrKGFMZWZ0U3RyaW5nLm1GcmFnbWVudElkZW50aWZpZXJN
YXNrPDwxKQogICAgICAgIHsKICAgICAgICAgIG1TdHJpbmdzW2tMZWZ0U3RyaW5nXSA9ICZhTGVm
dFN0cmluZzsKICAgICAgICAgIG1TdHJpbmdzW2tSaWdodFN0cmluZ10gPSAmYVJpZ2h0U3RyaW5n
OwogICAgICAgIH0KCgoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0
IHNlbGZfdHlwZSYgKTsKCiAgICBwdWJsaWM6CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0
aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzdHJp
bmdfdHlwZSYgKSBjb25zdDsKCgoKCiAgICAgIFBSVWludDMyIEdldEZyYWdtZW50SWRlbnRpZmll
ck1hc2soKSBjb25zdCB7IHJldHVybiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsgfQoKICAgIHBy
aXZhdGU6CiAgICAgIHZvaWQgb3BlcmF0b3IrKCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBw
cml2YXRlOgogICAgICBjb25zdCBzdHJpbmdfdHlwZSogbVN0cmluZ3NbMl07CiAgICAgIFBSVWlu
dDMyIG1GcmFnbWVudElkZW50aWZpZXJNYXNrOwogIH07CiMgMjI0ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uLmgiCmlubGluZQpjb25zdCBuc0RlcGVu
ZGVudENvbmNhdGVuYXRpb24Kb3BlcmF0b3IrKCBjb25zdCBuc0RlcGVuZGVudENvbmNhdGVuYXRp
b24mIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVu
dENvbmNhdGVuYXRpb24obGhzLCByaHMsIGxocy5HZXRGcmFnbWVudElkZW50aWZpZXJNYXNrKCk8
PDEpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uCm9wZXJhdG9y
KyggY29uc3QgbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbiYgbGhzLCBjb25zdCBuc0FDU3RyaW5n
JiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uKGxocywgcmhz
LCBsaHMuR2V0RnJhZ21lbnRJZGVudGlmaWVyTWFzaygpPDwxKTsKICB9CgppbmxpbmUKY29uc3Qg
bnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uCm9wZXJhdG9yKyggY29uc3QgbnNBU3RyaW5nJiBsaHMs
IGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDb25jYXRl
bmF0aW9uKGxocywgcmhzKTsKICB9CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRDQ29uY2F0ZW5h
dGlvbgpvcGVyYXRvcisoIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYg
cmhzICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbihsaHMsIHJocyk7
CiAgfQojIDgxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIiAyCiMgMzEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJsZVN0cmluZy5oIiAyCgoKdHlwZWRl
ZiBjb25zdCBuc0FTdHJpbmcgbnNBUmVhZGFibGVTdHJpbmc7CnR5cGVkZWYgY29uc3QgbnNBQ1N0
cmluZyBuc0FSZWFkYWJsZUNTdHJpbmc7CgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNMaXRlcmFsU3RyaW5nLmgiIDEKIyAzMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTGl0
ZXJhbFN0cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudFN0
cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudFN0cmlu
Zy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FGbGF0U3RyaW5nLmgiIDEKIyAz
MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNBRmxh
dFN0cmluZwogICAgOiBwdWJsaWMgbnNBU3RyaW5nCiAgewogICAgcHVibGljOgoKICAgICAgdmly
dHVhbCBjb25zdCBQUlVuaWNoYXIqIGdldCgpIGNvbnN0OwogICAgICBQUlVuaWNoYXIgb3BlcmF0
b3JbXSggUFJVaW50MzIgaSApIGNvbnN0IHsgcmV0dXJuIGdldCgpWyBpIF07IH0KICAgICAgUFJV
bmljaGFyIENoYXJBdCggUFJVaW50MzIgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIg
TGVuZ3RoKCkgY29uc3Q7CgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBQUlVuaWNo
YXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+Jiwg
bnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVbmlj
aGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYs
IG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApOwogIH07CgpjbGFzcyBuc0FGbGF0Q1N0cmlu
ZwogICAgOiBwdWJsaWMgbnNBQ1N0cmluZwogIHsKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogZ2V0KCkgY29uc3Q7CiAgICAgIGNoYXIgb3BlcmF0b3JbXSggUFJVaW50MzIg
aSApIGNvbnN0IHsgcmV0dXJuIGdldCgpWyBpIF07IH0KICAgICAgY2hhciBDaGFyQXQoIFBSVWlu
dDMyICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKCiAg
ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCgg
bnNSZWFkYWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkg
Y29uc3Q7CiAgICAgIHZpcnR1YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJs
ZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CiAgfTsKCmlu
bGluZQpQUlVuaWNoYXIKbnNBRmxhdFN0cmluZzo6Q2hhckF0KCBQUlVpbnQzMiBpICkgY29uc3QK
ICB7CiAgICB7fTsKICAgIHJldHVybiBvcGVyYXRvcltdKGkpOwogIH0KCmlubGluZQpjaGFyCm5z
QUZsYXRDU3RyaW5nOjpDaGFyQXQoIFBSVWludDMyIGkgKSBjb25zdAogIHsKICAgIHt9OwogICAg
cmV0dXJuIG9wZXJhdG9yW10oaSk7CiAgfQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNEZXBlbmRlbnRTdHJpbmcuaCIgMgojIDQ1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNE
ZXBlbmRlbnRTdHJpbmcuaCIKY2xhc3MgbnNEZXBlbmRlbnRTdHJpbmcKICAgICAgOiBwdWJsaWMg
bnNBRmxhdFN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNv
bnN0IFBSVW5pY2hhciogYVB0ciApCiAgICAgICAgewogICAgICAgICAgbUhhbmRsZS5EYXRhU3Rh
cnQoYVB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYVB0ciA/IChhUHRyK25zQ2hhclRy
YWl0czxQUlVuaWNoYXI+OjpsZW5ndGgoYVB0cikpIDogMCk7CiAgICAgICAgfQoKICAgICAgdm9p
ZAogICAgICBSZWJpbmQoIGNvbnN0IFBSVW5pY2hhciogYVN0YXJ0UHRyLCBjb25zdCBQUlVuaWNo
YXIqIGFFbmRQdHIgKQogICAgICAgIHsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFy
dFB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAg
ICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IFBSVW5pY2hhciogYVB0ciwgUFJVaW50MzIgYUxl
bmd0aCApCiAgICAgICAgewogICAgICAgICAgaWYgKCBhTGVuZ3RoID09IFBSVWludDMyKC0xKSAp
CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgUmViaW5kKGFQdHIpOwogICAgICAgICAgICB9
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIFJlYmluZChhUHRyLCBhUHRyK2FMZW5ndGgpOwog
ICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50U3RyaW5nKCBjb25zdCBQUlVuaWNoYXIqIGFTdGFy
dFB0ciwgY29uc3QgUFJVbmljaGFyKiBhRW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBhRW5k
UHRyKTsgfQogICAgICBuc0RlcGVuZGVudFN0cmluZyggY29uc3QgUFJVbmljaGFyKiBhUHRyLCBQ
UlVpbnQzMiBhTGVuZ3RoICkgeyBSZWJpbmQoYVB0ciwgYUxlbmd0aCk7IH0KICAgICAgZXhwbGlj
aXQgbnNEZXBlbmRlbnRTdHJpbmcoIGNvbnN0IFBSVW5pY2hhciogYVB0ciApIHsgUmViaW5kKGFQ
dHIpOyB9CgoKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc0Rl
cGVuZGVudFN0cmluZyYgKTsKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZm
ZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0IHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hhcj4qID4oJm1I
YW5kbGUpOyB9CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiog
R2V0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qg
bnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiogPigmbUhhbmRsZSk7IH0KCiAgICBwcml2YXRlOgog
ICAgICBuc0NvbnN0QnVmZmVySGFuZGxlPFBSVW5pY2hhcj4gbUhhbmRsZTsKICB9OwoKCgpjbGFz
cyBuc0RlcGVuZGVudENTdHJpbmcKICAgICAgOiBwdWJsaWMgbnNBRmxhdENTdHJpbmcKICB7CiAg
ICBwdWJsaWM6CiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBjaGFyKiBhUHRyICkKICAg
ICAgICB7CiAgICAgICAgICBtSGFuZGxlLkRhdGFTdGFydChhUHRyKTsKICAgICAgICAgIG1IYW5k
bGUuRGF0YUVuZChhUHRyID8gKGFQdHIrbnNDaGFyVHJhaXRzPGNoYXI+OjpsZW5ndGgoYVB0cikp
IDogMCk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXIqIGFT
dGFydFB0ciwgY29uc3QgY2hhciogYUVuZFB0ciApCiAgICAgICAgewogICAgICAgICAgbUhhbmRs
ZS5EYXRhU3RhcnQoYVN0YXJ0UHRyKTsKICAgICAgICAgIG1IYW5kbGUuRGF0YUVuZChhRW5kUHRy
KTsKICAgICAgICB9CgogICAgICB2b2lkCiAgICAgIFJlYmluZCggY29uc3QgY2hhciogYVB0ciwg
UFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgaWYgKCBhTGVuZ3RoID09IFBS
VWludDMyKC0xKSApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgUmViaW5kKGFQdHIpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIFJlYmluZChhUHRyLCBhUHRy
K2FMZW5ndGgpOwogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50Q1N0cmluZyggY29uc3QgY2hh
ciogYVN0YXJ0UHRyLCBjb25zdCBjaGFyKiBhRW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBh
RW5kUHRyKTsgfQogICAgICBuc0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXIqIGFQdHIsIFBS
VWludDMyIGFMZW5ndGggKSB7IFJlYmluZChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICBleHBsaWNp
dCBuc0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXIqIGFQdHIgKSB7IFJlYmluZChhUHRyKTsg
fQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNEZXBlbmRl
bnRDU3RyaW5nJiApOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhh
bmRsZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8IGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiA+KCZtSGFuZGxlKTsgfQogICAg
ICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRCdWZmZXJIYW5kbGUoKSBj
b25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBuc0J1ZmZlckhhbmRsZTxjaGFy
PiogPigmbUhhbmRsZSk7IH0KCiAgICBwcml2YXRlOgogICAgICBuc0NvbnN0QnVmZmVySGFuZGxl
PGNoYXI+IG1IYW5kbGU7CiAgfTsKIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTGl0
ZXJhbFN0cmluZy5oIiAyCiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJs
ZVN0cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50
U3Vic3RyaW5nLmgiIDEKIyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50
U3Vic3RyaW5nLmgiCmNsYXNzIG5zRGVwZW5kZW50U3Vic3RyaW5nCiAgICAgIDogcHVibGljIG5z
QVByb21pc2VTdHJpbmcKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50
U3Vic3RyaW5nLmgiCiAgewogICAgdHlwZWRlZiBuc0FTdHJpbmcgc3RyaW5nX3R5cGU7CiAgICB0
eXBlZGVmIHN0cmluZ190eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBHZXRSZWFkYWJsZUZyYWdt
ZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQ
UlVpbnQzMiApIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVW5pY2hhciogR2V0V3JpdGFibGVGcmFn
bWVudCggbnNXcml0YWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwg
UFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAgcHVibGljOgogICAgICBuc0RlcGVuZGVudFN1
YnN0cmluZyggY29uc3Qgc3RyaW5nX3R5cGUmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywg
UFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgICA6IG1TdHJpbmcoYVN0cmluZyksCiAgICAgICAg
ICAgIG1TdGFydFBvcyggTlNfTUlOKGFTdGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkgKSwKICAg
ICAgICAgICAgbUxlbmd0aCggTlNfTUlOKGFMZW5ndGgsIGFTdHJpbmcuTGVuZ3RoKCktbVN0YXJ0
UG9zKSApCiAgICAgICAgewoKICAgICAgICB9CgogICAgICBuc0RlcGVuZGVudFN1YnN0cmluZygg
Y29uc3QgY29uc3RfaXRlcmF0b3ImIGFTdGFydCwgY29uc3QgY29uc3RfaXRlcmF0b3ImIGFFbmQg
KQogICAgICAgICAgOiBtU3RyaW5nKGFTdGFydC5zdHJpbmcoKSkKICAgICAgICB7CiAgICAgICAg
ICBjb25zdF9pdGVyYXRvciB6ZXJvUG9pbnQ7CiAgICAgICAgICBtU3RyaW5nLkJlZ2luUmVhZGlu
Zyh6ZXJvUG9pbnQpOwogICAgICAgICAgbVN0YXJ0UG9zID0gRGlzdGFuY2UoemVyb1BvaW50LCBh
U3RhcnQpOwogICAgICAgICAgbUxlbmd0aCA9IERpc3RhbmNlKGFTdGFydCwgYUVuZCk7CiAgICAg
ICAgfQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNEZXBl
bmRlbnRTdWJzdHJpbmcmICk7CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIFBSVWludDMyIExl
bmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBz
dHJpbmdfdHlwZSYgYVN0cmluZyApIGNvbnN0IHsgcmV0dXJuIG1TdHJpbmcuSXNEZXBlbmRlbnRP
bihhU3RyaW5nKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBtU3Ry
aW5nOwogICAgICBQUlVpbnQzMiBtU3RhcnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAg
fTsKCmNsYXNzIG5zRGVwZW5kZW50Q1N1YnN0cmluZwogICAgICA6IHB1YmxpYyBuc0FQcm9taXNl
Q1N0cmluZwojIDEwNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50U3Vic3Ry
aW5nLmgiCiAgewogICAgdHlwZWRlZiBuc0FDU3RyaW5nIHN0cmluZ190eXBlOwogICAgdHlwZWRl
ZiBzdHJpbmdfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVh
ZGFibGVGcmFnbWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0
OwogICAgICB2aXJ0dWFsIGNoYXIqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFibGVGcmFn
bWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsgcmV0dXJuIDA7IH0K
CiAgICBwdWJsaWM6CiAgICAgIG5zRGVwZW5kZW50Q1N1YnN0cmluZyggY29uc3Qgc3RyaW5nX3R5
cGUmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYUxlbmd0aCApCiAgICAg
ICAgICA6IG1TdHJpbmcoYVN0cmluZyksCiAgICAgICAgICAgIG1TdGFydFBvcyggTlNfTUlOKGFT
dGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkgKSwKICAgICAgICAgICAgbUxlbmd0aCggTlNfTUlO
KGFMZW5ndGgsIGFTdHJpbmcuTGVuZ3RoKCktbVN0YXJ0UG9zKSApCiAgICAgICAgewoKICAgICAg
ICB9CgogICAgICBuc0RlcGVuZGVudENTdWJzdHJpbmcoIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBh
U3RhcnQsIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBhRW5kICkKICAgICAgICAgIDogbVN0cmluZyhh
U3RhcnQuc3RyaW5nKCkpCiAgICAgICAgewogICAgICAgICAgY29uc3RfaXRlcmF0b3IgemVyb1Bv
aW50OwogICAgICAgICAgbVN0cmluZy5CZWdpblJlYWRpbmcoemVyb1BvaW50KTsKICAgICAgICAg
IG1TdGFydFBvcyA9IERpc3RhbmNlKHplcm9Qb2ludCwgYVN0YXJ0KTsKICAgICAgICAgIG1MZW5n
dGggPSBEaXN0YW5jZShhU3RhcnQsIGFFbmQpOwogICAgICAgIH0KCgoKCiAgICBwcml2YXRlOgoK
ICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5zRGVwZW5kZW50Q1N1YnN0cmluZyYgKTsKCiAg
ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICAgIHZp
cnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24oIGNvbnN0IHN0cmluZ190eXBlJiBhU3RyaW5nICkg
Y29uc3QgeyByZXR1cm4gbVN0cmluZy5Jc0RlcGVuZGVudE9uKGFTdHJpbmcpOyB9CgogICAgcHJp
dmF0ZToKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIG1TdHJpbmc7CiAgICAgIFBSVWludDMyIG1T
dGFydFBvczsKICAgICAgUFJVaW50MzIgbUxlbmd0aDsKICB9OwoKCgoKCgoKaW5saW5lCmNvbnN0
IG5zRGVwZW5kZW50Q1N1YnN0cmluZwpTdWJzdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJp
bmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYVN1YnN0cmluZ0xlbmd0aCApCiAgewog
ICAgcmV0dXJuIG5zRGVwZW5kZW50Q1N1YnN0cmluZyhhU3RyaW5nLCBhU3RhcnRQb3MsIGFTdWJz
dHJpbmdMZW5ndGgpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudFN1YnN0cmluZwpTdWJz
dHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZywgUFJVaW50MzIgYVN0YXJ0UG9zLCBQUlVp
bnQzMiBhU3Vic3RyaW5nTGVuZ3RoICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTdWJzdHJp
bmcoYVN0cmluZywgYVN0YXJ0UG9zLCBhU3Vic3RyaW5nTGVuZ3RoKTsKICB9CgppbmxpbmUKY29u
c3QgbnNEZXBlbmRlbnRDU3Vic3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNSZWFkaW5nSXRlcmF0
b3I8Y2hhcj4mIGFTdGFydCwgY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Y2hhcj4mIGFFbmQgKQog
IHsKICAgIHJldHVybiBuc0RlcGVuZGVudENTdWJzdHJpbmcoYVN0YXJ0LCBhRW5kKTsKICB9Cgpp
bmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc1JlYWRp
bmdJdGVyYXRvcjxQUlVuaWNoYXI+JiBhU3RhcnQsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPFBS
VW5pY2hhcj4mIGFFbmQgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudFN1YnN0cmluZyhhU3Rh
cnQsIGFFbmQpOwogIH0KIyA0MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVJlYWRhYmxl
U3RyaW5nLmgiIDIKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNlRmxh
dFN0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb21pc2VGbGF0
U3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU2hhcmFibGVTdHJpbmcu
aCIgMQojIDM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTaGFyYWJsZVN0cmluZy5oIgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZVV0aWxzLmgiIDEKIyAz
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlVXRpbHMuaCIKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrL2JhY2t3YXJkL25ldy5oIiAxIDMKIyAzMyAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy9iYWNrd2FyZC9uZXcuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KysvYmFja3dhcmQvYmFja3dhcmRfd2FybmluZy5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy9iYWNrd2FyZC9uZXcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9u
ZXciIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrL25ldyIgMwojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKysvY3N0ZGRlZiIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKysv
Y3N0ZGRlZiIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGRlZi5o
IiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMK
IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3Rk
ZGVmLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcg
OjpzaXplX3Q7Cn0KIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9jc3RkZGVmIiAyIDMKIyAz
NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9uZXciIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKysvZXhjZXB0aW9uIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9leGNlcHRp
b24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIGV4Y2VwdGlvbgog
IHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhj
ZXB0aW9uKCkgdGhyb3coKTsKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRo
cm93KCk7CiAgfTsKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7
CiAgcHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5i
YWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVf
aGFuZGxlcikgKCk7CiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCiAg
dGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3co
KTsKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAg
dW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhy
b3coKTsKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKfQojIDM2ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7
CiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBi
YWRfYWxsb2MoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsK
ICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5v
dGhyb3c7CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0
X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKTsKfQoKCnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNp
emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpz
aXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQg
KikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICopIHRocm93KCk7CnZvaWQg
Km9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp
Owp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3Qm
KSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJv
d190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICosIGNvbnN0IHN0ZDo6
bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6
ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAq
b3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJu
IHBsYWNlOyB9Cn0KIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9iYWNrd2FyZC9uZXcuaCIg
MiAzCgp1c2luZyBzdGQ6OmJhZF9hbGxvYzsKdXNpbmcgc3RkOjpub3Rocm93X3Q7CnVzaW5nIHN0
ZDo6bm90aHJvdzsKdXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsKdXNpbmcgc3RkOjpzZXRfbmV3X2hh
bmRsZXI7CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZVV0aWxz
LmgiIDIKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc0F1dG9CdWZmZXJIYW5kbGUK
ICB7CiAgICBwdWJsaWM6CiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZSgpIDogbUhhbmRsZSgwKSB7
IH0KCiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZSggY29uc3QgbnNBdXRvQnVmZmVySGFuZGxlPENo
YXJUPiYgYU90aGVyICkKICAgICAgICAgIDogbUhhbmRsZShhT3RoZXIuZ2V0KCkpCiAgICAgICAg
ewogICAgICAgICAgaWYgKCBtSGFuZGxlICkKICAgICAgICAgICAgbUhhbmRsZS0+QWNxdWlyZVJl
ZmVyZW5jZSgpOwogICAgICAgIH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG5zQXV0b0J1ZmZlckhh
bmRsZSggY29uc3QgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiBhSGFuZGxlICkKICAgICAg
ICAgIDogbUhhbmRsZSggY29uc3RfY2FzdDwgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiA+
KGFIYW5kbGUpICkKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1IYW5kbGUgKQogICAgICAgICAg
ICBtSGFuZGxlLT5BY3F1aXJlUmVmZXJlbmNlKCk7CiAgICAgICAgfQoKICAgICB+bnNBdXRvQnVm
ZmVySGFuZGxlKCkKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1IYW5kbGUgKQogICAgICAgICAg
ICBtSGFuZGxlLT5SZWxlYXNlUmVmZXJlbmNlKCk7CiAgICAgICAgfQoKICAgICAgbnNBdXRvQnVm
ZmVySGFuZGxlPENoYXJUPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhh
bmRsZTxDaGFyVD4qIHJocyApCiAgICAgICAgewogICAgICAgICAgbnNTaGFyZWRCdWZmZXJIYW5k
bGU8Q2hhclQ+KiBvbGRfaGFuZGxlID0gbUhhbmRsZTsKICAgICAgICAgIGlmICggKG1IYW5kbGUg
PSBjb25zdF9jYXN0PCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qID4ocmhzKSkgKQogICAg
ICAgICAgICBtSGFuZGxlLT5BY3F1aXJlUmVmZXJlbmNlKCk7CiAgICAgICAgICBpZiAoIG9sZF9o
YW5kbGUgKQogICAgICAgICAgICBvbGRfaGFuZGxlLT5SZWxlYXNlUmVmZXJlbmNlKCk7CiAgICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNBdXRvQnVmZmVySGFuZGxlPENo
YXJUPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+JiBy
aHMgKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBvcGVyYXRvcj0ocmhzLmdldCgpKTsKICAg
ICAgICB9CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qCiAgICAgIGdldCgpIGNv
bnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1IYW5kbGU7CiAgICAgICAgfQoKICAgICAg
b3BlcmF0b3IgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KigpIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0KCiAgICAgIG5zU2hhcmVkQnVmZmVySGFu
ZGxlPENoYXJUPioKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CiAgICAgICAgewogICAgICAgICAg
cmV0dXJuIGdldCgpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICBuc1NoYXJlZEJ1ZmZl
ckhhbmRsZTxDaGFyVD4qIG1IYW5kbGU7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwg
Y2xhc3MgQ2hhclQ+CmlubGluZQpzaXplX3QKTlNfQWxpZ25lZEhhbmRsZVNpemUoIGNvbnN0IEhh
bmRsZVQqLCBjb25zdCBDaGFyVCogKQogIHsKCiAgICByZXR1cm4gKChzaXplb2YoSGFuZGxlVCkg
KyBzaXplb2YoQ2hhclQpIC0gMSkgLyBzaXplb2YoQ2hhclQpKSAqIHNpemVvZihDaGFyVCk7CiAg
fQoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIENoYXJUPgppbmxpbmUKY29uc3QgQ2hh
clQqCk5TX0RhdGFBZnRlckhhbmRsZSggY29uc3QgSGFuZGxlVCogYUhhbmRsZVB0ciwgY29uc3Qg
Q2hhclQqIGFEdW1teUNoYXJUUHRyICkKICB7CiAgICB0eXBlZGVmIGNvbnN0IENoYXJUKiBDaGFy
VF9wdHI7CiAgICByZXR1cm4gQ2hhclRfcHRyKHN0YXRpY19jYXN0PCBjb25zdCB1bnNpZ25lZCBj
aGFyKiA+KGFIYW5kbGVQdHIpICsgTlNfQWxpZ25lZEhhbmRsZVNpemUoYUhhbmRsZVB0ciwgYUR1
bW15Q2hhclRQdHIpKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgQ2hhclQ+
CmlubGluZQpDaGFyVCoKTlNfRGF0YUFmdGVySGFuZGxlKCBIYW5kbGVUKiBhSGFuZGxlUHRyLCBj
b25zdCBDaGFyVCogYUR1bW15Q2hhclRQdHIgKQogIHsKICAgIHR5cGVkZWYgQ2hhclQqIENoYXJU
X3B0cjsKICAgIHJldHVybiBDaGFyVF9wdHIoc3RhdGljX2Nhc3Q8IHVuc2lnbmVkIGNoYXIqID4o
YUhhbmRsZVB0cikgKyBOU19BbGlnbmVkSGFuZGxlU2l6ZShhSGFuZGxlUHRyLCBhRHVtbXlDaGFy
VFB0cikpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBIYW5kbGVULCBjbGFzcyBTdHJpbmdUPgpIYW5k
bGVUKgpOU19BbGxvY2F0ZUNvbnRpZ3VvdXNIYW5kbGVXaXRoRGF0YSggY29uc3QgSGFuZGxlVCog
YUR1bW15SGFuZGxlUHRyLCBQUlVpbnQzMiBhQWRkaXRpb25hbENhcGFjaXR5LCBjb25zdCBTdHJp
bmdUKiBhRGF0YVNvdXJjZSApCiAgewogICAgdHlwZWRlZiB0eXBlbmFtZSBTdHJpbmdUOjpjaGFy
X3R5cGUgY2hhcl90eXBlOwogICAgdHlwZWRlZiBjaGFyX3R5cGUqIGNoYXJfcHRyOwoKCiAgICBz
aXplX3QgaGFuZGxlX3NpemUgPSBOU19BbGlnbmVkSGFuZGxlU2l6ZShhRHVtbXlIYW5kbGVQdHIs
IGNoYXJfcHRyKDApKTsKCgogICAgc2l6ZV90IGRhdGFfbGVuZ3RoID0gYURhdGFTb3VyY2U/IGFE
YXRhU291cmNlLT5MZW5ndGgoKSA6IDA7CiAgICBzaXplX3QgYnVmZmVyX2xlbmd0aCA9IGRhdGFf
bGVuZ3RoICsgYUFkZGl0aW9uYWxDYXBhY2l0eTsKCgogICAgc2l6ZV90IGJ1ZmZlcl9zaXplID0g
YnVmZmVyX2xlbmd0aCAqIHNpemVvZihjaGFyX3R5cGUpOwoKCiAgICBIYW5kbGVUKiByZXN1bHQg
PSAwOwogICAgdm9pZCogaGFuZGxlX3B0ciA9IDo6b3BlcmF0b3IgbmV3KGhhbmRsZV9zaXplICsg
YnVmZmVyX3NpemUpOwoKICAgIGlmICggaGFuZGxlX3B0ciApCiAgICAgIHsKICAgICAgICBjaGFy
X3B0ciBkYXRhX3N0YXJ0X3B0ciA9IGNoYXJfcHRyKHN0YXRpY19jYXN0PCB1bnNpZ25lZCBjaGFy
KiA+KGhhbmRsZV9wdHIpICsgaGFuZGxlX3NpemUpOwogICAgICAgIGNoYXJfcHRyIGRhdGFfZW5k
X3B0ciA9IGRhdGFfc3RhcnRfcHRyICsgZGF0YV9sZW5ndGg7CiAgICAgICAgY2hhcl9wdHIgYnVm
ZmVyX2VuZF9wdHIgPSBkYXRhX3N0YXJ0X3B0ciArIGJ1ZmZlcl9sZW5ndGg7CgogICAgICAgIGNo
YXJfcHRyIHRvQmVnaW4gPSBkYXRhX3N0YXJ0X3B0cjsKCiAgICAgICAgaWYgKCBkYXRhX2xlbmd0
aCApCiAgICAgICAgICB7CiAgICAgICAgICAgIHR5cGVuYW1lIFN0cmluZ1Q6OmNvbnN0X2l0ZXJh
dG9yIGZyb21CZWdpbiwgZnJvbUVuZDsKICAgICAgICAgICAgY29weV9zdHJpbmcoYURhdGFTb3Vy
Y2UtPkJlZ2luUmVhZGluZyhmcm9tQmVnaW4pLCBhRGF0YVNvdXJjZS0+RW5kUmVhZGluZyhmcm9t
RW5kKSwgdG9CZWdpbik7CiAgICAgICAgICB9CgoKICAgICAgICBpZiAoIGFBZGRpdGlvbmFsQ2Fw
YWNpdHkgPiAwICkKICAgICAgICAgICp0b0JlZ2luID0gY2hhcl90eXBlKDApOwoKICAgICAgICBy
ZXN1bHQgPSBuZXcgKGhhbmRsZV9wdHIpIEhhbmRsZVQoZGF0YV9zdGFydF9wdHIsIGRhdGFfZW5k
X3B0ciwgZGF0YV9zdGFydF9wdHIsIGJ1ZmZlcl9lbmRfcHRyLCAxKTsKICAgICAgfQoKICAgIHJl
dHVybiByZXN1bHQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIFN0cmluZ1Q+
CmlubGluZQpIYW5kbGVUKgpOU19BbGxvY2F0ZUNvbnRpZ3VvdXNIYW5kbGVXaXRoRGF0YSggY29u
c3QgSGFuZGxlVCogYUR1bW15SGFuZGxlUHRyLCBjb25zdCBTdHJpbmdUJiBhRGF0YVNvdXJjZSwg
UFJVaW50MzIgYUFkZGl0aW9uYWxDYXBhY2l0eSApCiAgewogICAgcmV0dXJuIE5TX0FsbG9jYXRl
Q29udGlndW91c0hhbmRsZVdpdGhEYXRhKGFEdW1teUhhbmRsZVB0ciwgYUFkZGl0aW9uYWxDYXBh
Y2l0eSwgJmFEYXRhU291cmNlKTsKICB9CiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1NoYXJhYmxlU3RyaW5nLmgiIDIKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU2hh
cmFibGVTdHJpbmcuaCIKY2xhc3MgbnNTaGFyYWJsZVN0cmluZwogICAgOiBwdWJsaWMgbnNBRmxh
dFN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc1NoYXJhYmxlU3RyaW5nIHNl
bGZfdHlwZTsKICAgICAgdHlwZWRlZiBQUlVuaWNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVm
IG5zQVN0cmluZyBzdHJpbmdfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIG5zU2hhcmFibGVTdHJp
bmcoKSB7IH0KICAgICAgbnNTaGFyYWJsZVN0cmluZyggY29uc3Qgc2VsZl90eXBlJiBhT3RoZXIg
KSA6IG1CdWZmZXIoYU90aGVyLm1CdWZmZXIpIHsgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxl
U3RyaW5nKCBjb25zdCBzdHJpbmdfdHlwZSYgYVJlYWRhYmxlICkgeyBhc3NpZ24oYVJlYWRhYmxl
KTsgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxlU3RyaW5nKCBjb25zdCBuc1NoYXJlZEJ1ZmZl
ckhhbmRsZTxjaGFyX3R5cGU+KiBhSGFuZGxlICkgOiBtQnVmZmVyKGFIYW5kbGUpIHsgfQoKICAg
ICAgc2VsZl90eXBlJgogICAgICBvcGVyYXRvcj0oIGNvbnN0IHN0cmluZ190eXBlJiBhUmVhZGFi
bGUgKQogICAgICAgIHsKICAgICAgICAgIGFzc2lnbihhUmVhZGFibGUpOwogICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQgYXNzaWduKCBj
b25zdCBzdHJpbmdfdHlwZSYgKTsKICAgICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhh
bmRsZTxjaGFyX3R5cGU+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKCiAgICBwcml2
YXRlOgogICAgICBuc0F1dG9CdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiBtQnVmZmVyOwogIH07CgoK
Y2xhc3MgbnNTaGFyYWJsZUNTdHJpbmcKICAgIDogcHVibGljIG5zQUZsYXRDU3RyaW5nCiAgewog
ICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zU2hhcmFibGVDU3RyaW5nIHNlbGZfdHlwZTsKICAg
ICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBuc0FDU3RyaW5nIHN0cmlu
Z190eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNTaGFyYWJsZUNTdHJpbmcoKSB7IH0KICAgICAg
bnNTaGFyYWJsZUNTdHJpbmcoIGNvbnN0IHNlbGZfdHlwZSYgYU90aGVyICkgOiBtQnVmZmVyKGFP
dGhlci5tQnVmZmVyKSB7IH0KICAgICAgZXhwbGljaXQgbnNTaGFyYWJsZUNTdHJpbmcoIGNvbnN0
IHN0cmluZ190eXBlJiBhUmVhZGFibGUgKSB7IGFzc2lnbihhUmVhZGFibGUpOyB9CiAgICAgIGV4
cGxpY2l0IG5zU2hhcmFibGVDU3RyaW5nKCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFy
X3R5cGU+KiBhSGFuZGxlICkgOiBtQnVmZmVyKGFIYW5kbGUpIHsgfQoKICAgICAgc2VsZl90eXBl
JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IHN0cmluZ190eXBlJiBhUmVhZGFibGUgKQogICAgICAg
IHsKICAgICAgICAgIGFzc2lnbihhUmVhZGFibGUpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQgYXNzaWduKCBjb25zdCBzdHJpbmdf
dHlwZSYgKTsKICAgICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFyX3R5
cGU+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBu
c0F1dG9CdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiBtQnVmZmVyOwogIH07CiMgMjkgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1Byb21pc2VGbGF0U3RyaW5nLmgiIDIKIyA4MyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zUHJvbWlzZUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNQcm9taXNlRmxh
dFN0cmluZwogICAgOiBwdWJsaWMgbnNBRmxhdFN0cmluZwogIHsKICAgIGZyaWVuZCBjb25zdCBu
c1Byb21pc2VGbGF0U3RyaW5nIFByb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc0FTdHJpbmcmICk7
CgogICAgcHVibGljOgogICAgICBuc1Byb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc1Byb21pc2VG
bGF0U3RyaW5nJiApOwoKICAgIHByb3RlY3RlZDoKICAgICAgbnNQcm9taXNlRmxhdFN0cmluZygp
IDogbVByb21pc2VkU3RyaW5nKCZtRmxhdHRlbmVkU3RyaW5nKSB7IH0KICAgICAgZXhwbGljaXQg
bnNQcm9taXNlRmxhdFN0cmluZyggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CgoKICAgICAg
dmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRGbGF0QnVmZmVySGFu
ZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFy
PiogR2V0QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNTaGFyZWRC
dWZmZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0U2hhcmVkQnVmZmVySGFuZGxlKCkgY29uc3Q7CiAg
ICAgIHZpcnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24oIGNvbnN0IG5zQVN0cmluZyYgKSBjb25z
dDsKCgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIGdldCgpIGNv
bnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsIGNvbnN0IFBSVW5pY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNS
ZWFkYWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIg
KSBjb25zdDsKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc1By
b21pc2VGbGF0U3RyaW5nJiApOwoKICAgIHByaXZhdGU6CiAgICAgIG5zU2hhcmFibGVTdHJpbmcg
bUZsYXR0ZW5lZFN0cmluZzsKICAgICAgY29uc3QgbnNBRmxhdFN0cmluZyogbVByb21pc2VkU3Ry
aW5nOwogIH07CgpjbGFzcyBuc1Byb21pc2VGbGF0Q1N0cmluZwogICAgOiBwdWJsaWMgbnNBRmxh
dENTdHJpbmcKICB7CiAgICBmcmllbmQgY29uc3QgbnNQcm9taXNlRmxhdENTdHJpbmcgUHJvbWlz
ZUZsYXRDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiApOwoKICAgIHB1YmxpYzoKICAgICAgbnNQ
cm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zUHJvbWlzZUZsYXRDU3RyaW5nJiApOwoKICAgIHBy
b3RlY3RlZDoKICAgICAgbnNQcm9taXNlRmxhdENTdHJpbmcoKSA6IG1Qcm9taXNlZFN0cmluZygm
bUZsYXR0ZW5lZFN0cmluZykgeyB9CiAgICAgIGV4cGxpY2l0IG5zUHJvbWlzZUZsYXRDU3RyaW5n
KCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nICk7CgoKICAgICAgdmlydHVhbCBjb25zdCBuc0J1
ZmZlckhhbmRsZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0
dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsK
ICAgICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFyPiogR2V0U2hhcmVk
QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24o
IGNvbnN0IG5zQUNTdHJpbmcmICkgY29uc3Q7CgoKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogZ2V0KCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkg
Y29uc3Q7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFi
bGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3Qs
IFBSVWludDMyICkgY29uc3Q7CgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSgg
Y29uc3QgbnNQcm9taXNlRmxhdENTdHJpbmcmICk7CgogICAgcHJpdmF0ZToKICAgICAgbnNTaGFy
YWJsZUNTdHJpbmcgbUZsYXR0ZW5lZFN0cmluZzsKICAgICAgY29uc3QgbnNBRmxhdENTdHJpbmcq
IG1Qcm9taXNlZFN0cmluZzsKICB9OwoKCmlubGluZQpjb25zdCBuc1Byb21pc2VGbGF0U3RyaW5n
ClByb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc0FTdHJpbmcmIGFTdHJpbmcgKQogIHsKICAgIHJl
dHVybiBuc1Byb21pc2VGbGF0U3RyaW5nKGFTdHJpbmcpOwogIH0KCmlubGluZQpjb25zdCBuc1By
b21pc2VGbGF0Q1N0cmluZwpQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFT
dHJpbmcgKQogIHsKICAgIHJldHVybiBuc1Byb21pc2VGbGF0Q1N0cmluZyhhU3RyaW5nKTsKICB9
CiMgNDYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJsZVN0cmluZy5oIiAyCiMg
MzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FXcml0YWJsZVN0cmluZy5oIiAyCgoKdHlw
ZWRlZiBuc0FTdHJpbmcgbnNBV3JpdGFibGVTdHJpbmc7CnR5cGVkZWYgbnNBQ1N0cmluZyBuc0FX
cml0YWJsZUNTdHJpbmc7CiMgMjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lBdG9tLmgi
IDIKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIKY2xhc3MgbnNJQXRv
bSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg
R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzZDFiMTViMCwgMHg5M2I0LCAw
eDExZDEsIHsgMHg4OSwgMHg1YiwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5MSwgMHgxYiwgMHg4MSB9
fTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKG5zQVdyaXRh
YmxlU3RyaW5nICYgYVN0cmluZykgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVbmlj
b2RlKGNvbnN0IFBSVW5pY2hhciAqKmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIgKmFIYW5kbGVyLCBQUlVpbnQzMiAqX3JldHZhbCkg
PSAwOwoKfTsKIyAxMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lBdG9tLmgiCmV4dGVy
biBuc0lBdG9tKiBOU19OZXdBdG9tKGNvbnN0IGNoYXIqIGlzb2xhdGluMSk7CgoKCgpleHRlcm4g
bnNJQXRvbSogTlNfTmV3QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNvZGUpOwoKCgpleHRlcm4g
bnNJQXRvbSogTlNfTmV3QXRvbShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZyk7CgoK
CgpleHRlcm4gbnNyZWZjbnQgTlNfR2V0TnVtYmVyT2ZBdG9tcyh2b2lkKTsKZXh0ZXJuIHZvaWQg
TlNfUHVyZ2VBdG9tVGFibGUodm9pZCk7CiMgNTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1N0cmluZzIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAxCiMg
MTkxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAxOTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1N0ci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWVtb3J5LmgiIDEKIyAy
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWVtb3J5LmgiCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIiAxCiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lNZW1vcnkuaCIKY2xhc3MgbnNJTWVtb3J5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1
YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE
IGlpZCA9IHsweDU5ZTdlNzdhLCAweDM4ZTQsIDB4MTFkNCwgeyAweDhjLCAweGY1LCAweDAwLCAw
eDYwLCAweGIwLCAweGZjLCAweDE0LCAweGEzIH19OyByZXR1cm4gaWlkO30KIyA1MCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIgogIHZpcnR1YWwgdm9pZCAqIEFsbG9jKHNp
emVfdCBzaXplKSA9IDA7CiMgNjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnku
aCIKICB2aXJ0dWFsIHZvaWQgKiBSZWFsbG9jKHZvaWQgKiBwdHIsIHNpemVfdCBuZXdTaXplKSA9
IDA7CiMgNzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnkuaCIKICB2aXJ0dWFs
IHZvaWQgRnJlZSh2b2lkICogcHRyKSA9IDA7CiMgODggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lNZW1vcnkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhlYXBNaW5pbWl6ZShQUkJvb2wgaW1t
ZWRpYXRlKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNMb3dNZW1vcnkoUFJCb29s
ICpfcmV0dmFsKSA9IDA7Cgp9OwojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNZW1v
cnkuaCIgMgoKCgoKCgoKY2xhc3MgbnNNZW1vcnkKewpwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCog
QWxsb2Moc2l6ZV90IHNpemUpOwogICAgc3RhdGljIHZvaWQqIFJlYWxsb2Modm9pZCogcHRyLCBz
aXplX3Qgc2l6ZSk7CiAgICBzdGF0aWMgdm9pZCBGcmVlKHZvaWQqIHB0cik7CiAgICBzdGF0aWMg
bnNyZXN1bHQgSGVhcE1pbmltaXplKFBSQm9vbCBhSW1tZWRpYXRlKTsKICAgIHN0YXRpYyB2b2lk
KiBDbG9uZShjb25zdCB2b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKICAgIHN0YXRpYyBuc0lNZW1v
cnkqIEdldEdsb2JhbE1lbW9yeVNlcnZpY2UoKTsKfTsKIyAxOTMgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0ci5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAxOTQg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAyCiMgMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAxOTUg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAyCiMgMSAiL3dpbmRvd3MvaGRhMTIv
bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BsaGFzaC5oIiAxCiMgMjQgIi93aW5k
b3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIKIyAx
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0
ZGlvLmgiIDEgMwojIDI1ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcGxoYXNoLmgiIDIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjYgIi93aW5kb3dzL2hkYTEyL21vei1j
dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIgMgoKZXh0ZXJuICJDIiB7Cgp0
eXBlZGVmIHN0cnVjdCBQTEhhc2hFbnRyeSBQTEhhc2hFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgUExI
YXNoVGFibGUgUExIYXNoVGFibGU7CnR5cGVkZWYgUFJVaW50MzIgUExIYXNoTnVtYmVyOwoKdHlw
ZWRlZiBQTEhhc2hOdW1iZXIgKCAqUExIYXNoRnVuY3Rpb24pKGNvbnN0IHZvaWQgKmtleSk7CnR5
cGVkZWYgUFJJbnRuICggKlBMSGFzaENvbXBhcmF0b3IpKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2
b2lkICp2Mik7CgoKCgp0eXBlZGVmIFBSSW50biAoICpQTEhhc2hFbnVtZXJhdG9yKShQTEhhc2hF
bnRyeSAqaGUsIFBSSW50biBpLCB2b2lkICphcmcpOwojIDUxICIvd2luZG93cy9oZGExMi9tb3ot
Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxoYXNoLmgiCnR5cGVkZWYgc3RydWN0IFBM
SGFzaEFsbG9jT3BzIHsKICAgIHZvaWQgKiAoICphbGxvY1RhYmxlKSh2b2lkICpwb29sLCBQUlNp
emUgc2l6ZSk7CiAgICB2b2lkICggKmZyZWVUYWJsZSkodm9pZCAqcG9vbCwgdm9pZCAqaXRlbSk7
CiAgICBQTEhhc2hFbnRyeSAqICggKmFsbG9jRW50cnkpKHZvaWQgKnBvb2wsIGNvbnN0IHZvaWQg
KmtleSk7CiAgICB2b2lkICggKmZyZWVFbnRyeSkodm9pZCAqcG9vbCwgUExIYXNoRW50cnkgKmhl
LCBQUlVpbnRuIGZsYWcpOwp9IFBMSGFzaEFsbG9jT3BzOwoKCgoKc3RydWN0IFBMSGFzaEVudHJ5
IHsKICAgIFBMSGFzaEVudHJ5ICpuZXh0OwogICAgUExIYXNoTnVtYmVyIGtleUhhc2g7CiAgICBj
b25zdCB2b2lkICprZXk7CiAgICB2b2lkICp2YWx1ZTsKfTsKCnN0cnVjdCBQTEhhc2hUYWJsZSB7
CiAgICBQTEhhc2hFbnRyeSAqKmJ1Y2tldHM7CiAgICBQUlVpbnQzMiBuZW50cmllczsKICAgIFBS
VWludDMyIHNoaWZ0OwogICAgUExIYXNoRnVuY3Rpb24ga2V5SGFzaDsKICAgIFBMSGFzaENvbXBh
cmF0b3Iga2V5Q29tcGFyZTsKICAgIFBMSGFzaENvbXBhcmF0b3IgdmFsdWVDb21wYXJlOwogICAg
Y29uc3QgUExIYXNoQWxsb2NPcHMgKmFsbG9jT3BzOwogICAgdm9pZCAqYWxsb2NQcml2OwoKCgoK
Cgp9OwoKCgoKCmV4dGVybiBQTEhhc2hUYWJsZSAqClBMX05ld0hhc2hUYWJsZShQUlVpbnQzMiBu
dW1CdWNrZXRzLCBQTEhhc2hGdW5jdGlvbiBrZXlIYXNoLAogICAgICAgICAgICAgICAgUExIYXNo
Q29tcGFyYXRvciBrZXlDb21wYXJlLCBQTEhhc2hDb21wYXJhdG9yIHZhbHVlQ29tcGFyZSwKICAg
ICAgICAgICAgICAgIGNvbnN0IFBMSGFzaEFsbG9jT3BzICphbGxvY09wcywgdm9pZCAqYWxsb2NQ
cml2KTsKCmV4dGVybiB2b2lkClBMX0hhc2hUYWJsZURlc3Ryb3koUExIYXNoVGFibGUgKmh0KTsK
CgpleHRlcm4gUExIYXNoRW50cnkgKgpQTF9IYXNoVGFibGVBZGQoUExIYXNoVGFibGUgKmh0LCBj
b25zdCB2b2lkICprZXksIHZvaWQgKnZhbHVlKTsKCmV4dGVybiBQUkJvb2wKUExfSGFzaFRhYmxl
UmVtb3ZlKFBMSGFzaFRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiB2b2lkICoK
UExfSGFzaFRhYmxlTG9va3VwKFBMSGFzaFRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4
dGVybiB2b2lkICoKUExfSGFzaFRhYmxlTG9va3VwQ29uc3QoUExIYXNoVGFibGUgKmh0LCBjb25z
dCB2b2lkICprZXkpOwoKZXh0ZXJuIFBSSW50bgpQTF9IYXNoVGFibGVFbnVtZXJhdGVFbnRyaWVz
KFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW51bWVyYXRvciBmLCB2b2lkICphcmcpOwoKCmV4dGVy
biBQTEhhc2hOdW1iZXIKUExfSGFzaFN0cmluZyhjb25zdCB2b2lkICprZXkpOwoKCmV4dGVybiBQ
UkludG4KUExfQ29tcGFyZVN0cmluZ3MoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKTsK
CgpleHRlcm4gUFJJbnRuClBMX0NvbXBhcmVWYWx1ZXMoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZv
aWQgKnYyKTsKCgpleHRlcm4gUExIYXNoRW50cnkgKioKUExfSGFzaFRhYmxlUmF3TG9va3VwKFBM
SGFzaFRhYmxlICpodCwgUExIYXNoTnVtYmVyIGtleUhhc2gsIGNvbnN0IHZvaWQgKmtleSk7Cgpl
eHRlcm4gUExIYXNoRW50cnkgKioKUExfSGFzaFRhYmxlUmF3TG9va3VwQ29uc3QoUExIYXNoVGFi
bGUgKmh0LCBQTEhhc2hOdW1iZXIga2V5SGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiBQTEhhc2hFbnRyeSAqClBMX0hhc2hUYWJsZVJhd0Fk
ZChQTEhhc2hUYWJsZSAqaHQsIFBMSGFzaEVudHJ5ICoqaGVwLCBQTEhhc2hOdW1iZXIga2V5SGFz
aCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpOwoKZXh0
ZXJuIHZvaWQKUExfSGFzaFRhYmxlUmF3UmVtb3ZlKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW50
cnkgKipoZXAsIFBMSGFzaEVudHJ5ICpoZSk7CgoKZXh0ZXJuIFBSSW50bgpQTF9IYXNoVGFibGVE
dW1wKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW51bWVyYXRvciBkdW1wLCBGSUxFICpmcCk7Cgp9
CiMgMTk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIgMgoKCgplbnVtIGVDaGFy
U2l6ZSB7ZU9uZUJ5dGU9MCxlVHdvQnl0ZT0xfTsKCgoKCgoKCmNvbnN0IFBSSW50MzIga0RlZmF1
bHRTdHJpbmdTaXplID0gNjQ7CmNvbnN0IFBSSW50MzIga05vdEZvdW5kID0gLTE7CgoKCgpjbGFz
cyBDQnVmRGVzY3JpcHRvciB7CnB1YmxpYzoKICBDQnVmRGVzY3JpcHRvcihjaGFyKiBhU3RyaW5n
LCBQUkJvb2wgYVN0YWNrQmFzZWQsUFJVaW50MzIgYUNhcGFjaXR5LFBSSW50MzIgYUxlbmd0aD0t
MSk7CiAgQ0J1ZkRlc2NyaXB0b3IoY29uc3QgY2hhciogYVN0cmluZywgUFJCb29sIGFTdGFja0Jh
c2VkLFBSVWludDMyIGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENCdWZEZXNjcmlw
dG9yKFBSVW5pY2hhciogYVN0cmluZywgUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBh
Y2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENCdWZEZXNjcmlwdG9yKGNvbnN0IFBSVW5pY2hh
ciogYVN0cmluZyxQUkJvb2wgYVN0YWNrQmFzZWQsUFJVaW50MzIgYUNhcGFjaXR5LFBSSW50MzIg
YUxlbmd0aD0tMSk7CgogIGNoYXIqIG1CdWZmZXI7CiAgZUNoYXJTaXplIG1DaGFyU2l6ZTsKICBQ
UlVpbnQzMiBtQ2FwYWNpdHk7CiAgUFJJbnQzMiBtTGVuZ3RoOwogIFBSQm9vbCBtU3RhY2tCYXNl
ZDsKICBQUkJvb2wgbUlzQ29uc3Q7Cn07CgoKCgpzdHJ1Y3QgbnNTdHIgewoKICBuc1N0cigpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB9CgogIH5uc1N0cigpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICB9CiMgMjQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIu
aCIKICBzdGF0aWMgdm9pZCBJbml0aWFsaXplKG5zU3RyJiBhRGVzdCxlQ2hhclNpemUgYUNoYXJT
aXplKTsKIyAyNTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2
b2lkIEluaXRpYWxpemUobnNTdHImIGFEZXN0LGNoYXIqIGFDU3RyaW5nLFBSVWludDMyIGFDYXBh
Y2l0eSxQUlVpbnQzMiBhTGVuZ3RoLGVDaGFyU2l6ZSBhQ2hhclNpemUsUFJCb29sIGFPd25zQnVm
ZmVyKTsKIyAyNjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2
b2lkIERlc3Ryb3kobnNTdHImIGFEZXN0KTsKIyAyNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1N0ci5oIgogIHN0YXRpYyBQUkJvb2wgRW5zdXJlQ2FwYWNpdHkobnNTdHImIGFTdHJpbmcs
UFJVaW50MzIgYU5ld0xlbmd0aCk7CiAgc3RhdGljIFBSQm9vbCBHcm93Q2FwYWNpdHkobnNTdHIm
IGFTdHJpbmcsUFJVaW50MzIgYU5ld0xlbmd0aCk7CiMgMjkxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBTdHJBcHBlbmQobnNTdHImIGFEZXN0LGNvbnN0
IG5zU3RyJiBhU291cmNlLFBSVWludDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKIyAzMDMg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIFN0ckFzc2ln
bihuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsUFJVaW50MzIgYW5PZmZzZXQsUFJJ
bnQzMiBhQ291bnQpOwojIDMxNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAg
c3RhdGljIHZvaWQgU3RySW5zZXJ0KCBuc1N0ciYgYURlc3QsUFJVaW50MzIgYURlc3RPZmZzZXQs
Y29uc3QgbnNTdHImIGFTb3VyY2UsUFJVaW50MzIgYVNyY09mZnNldCxQUkludDMyIGFDb3VudCk7
CiMgMzI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBE
ZWxldGUobnNTdHImIGFEZXN0LFBSVWludDMyIGFEZXN0T2Zmc2V0LFBSVWludDMyIGFDb3VudCk7
CiMgMzQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBT
dHJUcnVuY2F0ZShuc1N0ciYgYURlc3QsUFJVaW50MzIgYURlc3RPZmZzZXQpOwojIDM1MCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgQ2hhbmdlQ2FzZShu
c1N0ciYgYURlc3QsUFJCb29sIGFUb1VwcGVyKTsKIyAzNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIFRyaW0obnNTdHImIGFEZXN0LGNvbnN0IGNoYXIq
IGFTZXQsUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmcp
OwojIDM3NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQg
Q29tcHJlc3NTZXQobnNTdHImIGFEZXN0LGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5h
dGVMZWFkaW5nLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmcpOwojIDM4NiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgU3RyaXBDaGFycyhuc1N0ciYgYURl
c3QsY29uc3QgY2hhciogYVNldCk7CiMgMzk4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHIuaCIKICBzdGF0aWMgUFJJbnQzMiBTdHJDb21wYXJlKGNvbnN0IG5zU3RyJiBhRGVzdCxjb25z
dCBuc1N0ciYgYVNvdXJjZSxQUkludDMyIGFDb3VudCxQUkJvb2wgYUlnbm9yZUNhc2UpOwojIDQx
MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIFBSSW50MzIgRmlu
ZFN1YnN0cihjb25zdCBuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsIFBSQm9vbCBh
SWdub3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKICBzdGF0aWMgUFJJ
bnQzMiBGaW5kQ2hhcihjb25zdCBuc1N0ciYgYURlc3QsUFJVbmljaGFyIGFDaGFyLCBQUkJvb2wg
YUlnbm9yZUNhc2UsUFJJbnQzMiBhbk9mZnNldCxQUkludDMyIGFDb3VudCk7CiAgc3RhdGljIFBS
SW50MzIgRmluZENoYXJJblNldChjb25zdCBuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTZXQs
UFJCb29sIGFJZ25vcmVDYXNlLFBSSW50MzIgYW5PZmZzZXQpOwoKICBzdGF0aWMgUFJJbnQzMiBS
RmluZFN1YnN0cihjb25zdCBuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsIFBSQm9v
bCBhSWdub3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKICBzdGF0aWMg
UFJJbnQzMiBSRmluZENoYXIoY29uc3QgbnNTdHImIGFEZXN0LFBSVW5pY2hhciBhQ2hhciwgUFJC
b29sIGFJZ25vcmVDYXNlLFBSSW50MzIgYW5PZmZzZXQsUFJJbnQzMiBhQ291bnQpOwogIHN0YXRp
YyBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IG5zU3RyJiBhRGVzdCxjb25zdCBuc1N0ciYg
YVNldCxQUkJvb2wgYUlnbm9yZUNhc2UsUFJJbnQzMiBhbk9mZnNldCk7CgogIHN0YXRpYyB2b2lk
IE92ZXJ3cml0ZShuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsUFJJbnQzMiBhbk9m
ZnNldCk7CgogIHN0YXRpYyBQUkJvb2wgRGlkQWNxdWlyZU1lbW9yeSh2b2lkKTsKCgoKCiAgc3Rh
dGljIFBSVWludDMyIEhhc2hDb2RlKGNvbnN0IG5zU3RyJiBhRGVzdCk7CiMgNDM2ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBQUlVpbnQzMiBtTGVuZ3RoOwogIFBSVWludDMy
IG1DYXBhY2l0eTsKICBlQ2hhclNpemUgbUNoYXJTaXplOwogIFBSQm9vbCBtT3duc0J1ZmZlcjsK
CiAgdW5pb24gewogICAgY2hhciogbVN0cjsKICAgIFBSVW5pY2hhciogbVVTdHI7CiAgfTsKCnBy
aXZhdGU6CiAgc3RhdGljIFBSQm9vbCBBbGxvYyhuc1N0ciYgYVN0cmluZyxQUlVpbnQzMiBhQ291
bnQpOwogIHN0YXRpYyBQUkJvb2wgUmVhbGxvYyhuc1N0ciYgYVN0cmluZyxQUlVpbnQzMiBhQ291
bnQpOwogIHN0YXRpYyBQUkJvb2wgRnJlZShuc1N0ciYgYVN0cmluZyk7Cgp9OwojIDQ2MCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCmlubGluZSBQUkludDMyIE1pbkludChQUklu
dDMyIGFuSW50MSxQUkludDMyIGFuSW50Mil7CiAgcmV0dXJuIChhbkludDE8YW5JbnQyKSA/IGFu
SW50MSA6IGFuSW50MjsKfQoKaW5saW5lIFBSSW50MzIgTWF4SW50KFBSSW50MzIgYW5JbnQxLFBS
SW50MzIgYW5JbnQyKXsKICByZXR1cm4gKGFuSW50MTxhbkludDIpID8gYW5JbnQyIDogYW5JbnQx
Owp9CgppbmxpbmUgdm9pZCBBZGROdWxsVGVybWluYXRvcihuc1N0ciYgYURlc3QpIHsKICBpZihl
VHdvQnl0ZT09YURlc3QubUNoYXJTaXplKQogICAgYURlc3QubVVTdHJbYURlc3QubUxlbmd0aF09
MDsKICBlbHNlIGFEZXN0Lm1TdHJbYURlc3QubUxlbmd0aF09MDsKfQoKCgoKCgoKaW5saW5lIHZv
aWQgUmVjeWNsZSggY2hhciogYUJ1ZmZlcikgeyBuc01lbW9yeTo6RnJlZShhQnVmZmVyKTsgfQpp
bmxpbmUgdm9pZCBSZWN5Y2xlKCBQUlVuaWNoYXIqIGFCdWZmZXIpIHsgbnNNZW1vcnk6OkZyZWUo
YUJ1ZmZlcik7IH0KIyA0OTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgppbmxp
bmUgUFJVbmljaGFyIEdldENoYXJBdChjb25zdCBuc1N0ciYgYURlc3QsUFJVaW50MzIgYW5JbmRl
eCkgewogIGlmKGFuSW5kZXg8YURlc3QubUxlbmd0aCkgewogICAgcmV0dXJuIChlVHdvQnl0ZT09
YURlc3QubUNoYXJTaXplKSA/IGFEZXN0Lm1VU3RyW2FuSW5kZXhdIDogKFBSVW5pY2hhcilhRGVz
dC5tU3RyW2FuSW5kZXhdOwogIH0KICByZXR1cm4gMDsKfQojIDUzICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND
UlQuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIKIyAxICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdz
LmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0
dXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVk
ZS9iaXRzL3dhaXRzdGF0dXMuaCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVz
OwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7
CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGlu
dCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0g
X193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBp
bnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAg
ICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsK
IyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0g
ZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcg
aW50IHJlbTsKICB9IGxkaXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAg
ewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRp
dl90OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlw
ZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAo
X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy
ICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVu
c2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJs
ZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBm
bG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBs
b25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93
ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAg
IHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7Cgpf
X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRo
cm93ICgpOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsK
Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAg
ICB0aHJvdyAoKTsKIyAyMTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS94bG9jYWxlLmgiIDEgMwojIDIxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoK
ZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp
OwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVu
c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9j
KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJu
IGZsb2F0IF9fc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19z
dHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJv
dyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0
cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n
cm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9f
c3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJv
dyAoKTsKIyAyOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91
YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9f
bnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJu
YWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2ln
bmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7
CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAw
KTsKfQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0
dXJuIF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19p
bmxpbmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0
b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4
dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFz
ZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw
dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg
bG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkK
ewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us
IDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3Ry
dG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0
b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9u
X18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29u
c3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRl
cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBk
b3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3Ry
dG9kIChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRv
aSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9s
IChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBp
bnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9s
IChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu
IF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv
dyAoKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9
CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcg
aW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAq
X19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoK
CgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p
ZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hh
ciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVy
biBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1
Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsK
ICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsK
ICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQg
cmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRh
ICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQg
X19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFu
ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0
ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVk
IGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50
ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0
aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi
aVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgp
OwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10p
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0
ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJv
dyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgp
OwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBf
X3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9y
dCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsK
ICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19v
bGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBp
bnQgX19pbml0OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4g
aW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwK
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQg
c2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp
bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9y
IChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4g
aW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAo
dW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwojIDUyOCAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChz
aXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwg
c2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4
dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2Zy
ZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi
IDEgMwojIDIyICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAxICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoK
CmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KIyA1
NDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChz
aXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoK
ZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGln
bm1lbnQsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs
bG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMp
ICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMp
IChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVz
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hh
ciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBp
bnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9p
ZCkgdGhyb3cgKCk7CiMgNjI0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg
Km1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1r
c3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY0MSAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAo
KTsKIyA2NTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAo
Y2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25z
dCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2Fs
aXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDY3MyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry
aWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2Zu
X3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJf
Zm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qg
dm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoK
CgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90
IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpl
eHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50
IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19k
ZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBs
ZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBs
bGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK
ZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y
ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln
bikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBf
X25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAg
ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9f
c2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChs
b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQg
Kl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf
X3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBf
X25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBk
b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19y
ZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAg
ICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVy
biBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19z
aWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf
X2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19z
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpf
X3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3Mg
KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBz
aXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVz
cG9uc2UpIHRocm93ICgpOwojIDgwOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBp
bnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVy
biB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQg
KGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19i
dWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1td
LCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNDUlQuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjcgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAyCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96
LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiIDEKIyA0MiAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCiMgMSAiL3dp
bmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIg
MQojIDQzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cGxzdHIuaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBQUlVpbnQzMgpQTF9zdHJsZW4o
Y29uc3QgY2hhciAqc3RyKTsKIyA2MiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBQUlVpbnQzMgpQTF9zdHJubGVuKGNvbnN0
IGNoYXIgKnN0ciwgUFJVaW50MzIgbWF4KTsKIyA3MyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY3B5
KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CiMgODYgIi93aW5kb3dzL2hkYTEyL21vei1j
dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0
cm5jcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBQUlVpbnQzMiBtYXgpOwojIDEwOSAi
L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgi
CmV4dGVybiBjaGFyICoKUExfc3RybmNweXooY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBQ
UlVpbnQzMiBtYXgpOwojIDEyMyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyZHVwKGNvbnN0IGNoYXIg
KnMpOwoKCgoKCgoKZXh0ZXJuIHZvaWQKUExfc3RyZnJlZShjaGFyICpzKTsKIyAxNDcgIi93aW5k
b3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRl
cm4gY2hhciAqClBMX3N0cm5kdXAoY29uc3QgY2hhciAqcywgUFJVaW50MzIgbWF4KTsKIyAxNTkg
Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5o
IgpleHRlcm4gY2hhciAqClBMX3N0cmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyk7CiMg
MTc0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxz
dHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY2F0KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3Jj
LCBQUlVpbnQzMiBtYXgpOwojIDE4OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY2F0bihjaGFyICpk
c3QsIFBSVWludDMyIG1heCwgY29uc3QgY2hhciAqc3JjKTsKIyAyMDAgIi93aW5kb3dzL2hkYTEy
L21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gUFJJbnRu
ClBMX3N0cmNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKIyAyMTQgIi93aW5kb3dz
L2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4g
UFJJbnRuClBMX3N0cm5jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgUFJVaW50MzIg
bWF4KTsKIyAyMjYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wbHN0ci5oIgpleHRlcm4gUFJJbnRuClBMX3N0cmNhc2VjbXAoY29uc3QgY2hhciAqYSwg
Y29uc3QgY2hhciAqYik7CiMgMjM4ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJuY2FzZWNtcChjb25z
dCBjaGFyICphLCBjb25zdCBjaGFyICpiLCBQUlVpbnQzMiBtYXgpOwojIDI0OSAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBj
aGFyICoKUExfc3RyY2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYyk7CiMgMjYwICIvd2luZG93cy9o
ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNo
YXIgKgpQTF9zdHJyY2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYyk7CiMgMjcyICIvd2luZG93cy9o
ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNo
YXIgKgpQTF9zdHJuY2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYywgUFJVaW50MzIgbik7CiMgMjg0
ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIu
aCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJucmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMsIFBSVWlu
dDMyIG4pOwojIDMwMCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RycGJyayhjb25zdCBjaGFyICpzLCBj
b25zdCBjaGFyICpsaXN0KTsKIyAzMTEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnByYnJrKGNvbnN0
IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QpOwojIDMyMiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2
cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3Ry
bnBicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqbGlzdCwgUFJVaW50MzIgbik7CiMgMzMz
ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIu
aCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJucHJicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAq
bGlzdCwgUFJVaW50MzIgbik7CiMgMzQzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJzdHIoY29uc3Qg
Y2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDM1MyAiL3dpbmRvd3MvaGRhMTIvbW96
LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExf
c3RycnN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSk7CiMgMzY0ICIvd2lu
ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0
ZXJuIGNoYXIgKgpQTF9zdHJuc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxl
LCBQUlVpbnQzMiBuKTsKIyAzNzUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5yc3RyKGNvbnN0IGNo
YXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlLCBQUlVpbnQzMiBtYXgpOwojIDM4NSAiL3dpbmRv
d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVy
biBjaGFyICoKUExfc3RyY2FzZXN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRs
ZSk7CiMgMzk1ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJjYXNlcnN0cihjb25zdCBjaGFyICpiaWcs
IGNvbnN0IGNoYXIgKmxpdHRsZSk7CiMgNDA2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY2FzZXN0
cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbWF4KTsKIyA0
MTcgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0
ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5jYXNlcnN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0
IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbWF4KTsKCgoKCgoKCn0KIyAyOCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ1JULmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNj
b3JlLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiIDIKIyAxICIv
d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5o
IiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zQ3BwU2hhcmVkQWxsb2NhdG9yLmgiIDEKCgoKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNZW1vcnkuaCIgMQojIDUgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zY29yZS5oIiAxCiMgNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ3BwU2hh
cmVkQWxsb2NhdG9yLmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrL2JhY2t3YXJkL25l
dy5oIiAxIDMKIyA3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxvY2F0
b3IuaCIgMgojIDIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxvY2F0
b3IuaCIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoK
CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvbGltaXRzLmgiIDEgMwojIDEzMCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMu
aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxNDQgIi91
c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0u
aCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xv
Y2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAzNyAi
L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2Jp
dHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAxNDkgIi91c3IvaW5j
bHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgi
IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5f
bGltLmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcgIi91c3IvaW5jbHVkZS9iaXRz
L3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMx
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xp
bWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMjQgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAyCgoKCnRlbXBsYXRl
IDxjbGFzcyBUPgpjbGFzcyBuc0NwcFNoYXJlZEFsbG9jYXRvcgoKCgoKICB7CiAgICBwdWJsaWM6
CiAgICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVk
ZWYgVCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9wb2ludGVyOwoKICAg
ICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgVCYgY29uc3RfcmVm
ZXJlbmNlOwoKCgogICAgICBuc0NwcFNoYXJlZEFsbG9jYXRvcigpIHsgfQoKCgoKCgogICAgIH5u
c0NwcFNoYXJlZEFsbG9jYXRvcigpIHsgfQoKCiAgICAgIHBvaW50ZXIKICAgICAgYWRkcmVzcygg
cmVmZXJlbmNlIHIgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAmcjsKICAgICAg
ICB9CgogICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3MoIGNvbnN0X3JlZmVyZW5jZSBy
ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gJnI7CiAgICAgICAgfQoKICAgICAg
cG9pbnRlcgogICAgICBhbGxvY2F0ZSggc2l6ZV90eXBlIG4sIGNvbnN0IHZvaWQqID0wICkKICAg
ICAgICB7CiAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgcG9pbnRlciA+KG5zTWVt
b3J5OjpBbGxvYyhzdGF0aWNfY2FzdDwgUFJVaW50MzIgPihuKnNpemVvZihUKSkpKTsKICAgICAg
ICB9CgogICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUoIHBvaW50ZXIgcCwgc2l6ZV90eXBlICkK
ICAgICAgICB7CiAgICAgICAgICBuc01lbW9yeTo6RnJlZShwKTsKICAgICAgICB9CgogICAgICB2
b2lkCiAgICAgIGNvbnN0cnVjdCggcG9pbnRlciBwLCBjb25zdCBUJiB2YWwgKQogICAgICAgIHsK
ICAgICAgICAgIG5ldyAocCkgVCh2YWwpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVz
dHJveSggcG9pbnRlciBwICkKICAgICAgICB7CiAgICAgICAgICBwLT5+VCgpOwogICAgICAgIH0K
CiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0CiAgICAgICAgewoKCgogICAg
ICAgICAgcmV0dXJuICgyMTQ3NDgzNjQ3TCAqIDJVTCArIDEpIC8gc2l6ZW9mKFQpOwoKICAgICAg
ICB9CiMgMTEwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxvY2F0b3Iu
aCIKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBUPgpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnND
cHBTaGFyZWRBbGxvY2F0b3I8VD4mLCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYgKQog
IHsKICAgIHJldHVybiAxOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgpQUkJvb2wKb3BlcmF0b3Ih
PSggY29uc3QgbnNDcHBTaGFyZWRBbGxvY2F0b3I8VD4mLCBjb25zdCBuc0NwcFNoYXJlZEFsbG9j
YXRvcjxUPiYgKQogIHsKICAgIHJldHVybiAwOwogIH0KIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ1JULmgiIDIKIyA0NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgi
CmV4dGVybiBjb25zdCBQUlVuaWNoYXIga0lzb0xhdGluMVRvVUNTMlsyNTZdOwojIDg2ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIKY2xhc3MgbnNDUlQgewpwdWJsaWM6CiAgZW51
bSB7CiAgICBUQUI9J1x0JyAsCiAgICBMRj0nXG4nICwKICAgIFZUQUI9J1x2JyAsCiAgICBGRj0n
XGYnICwKICAgIENSPSdccicKICB9OwoKCgoKCgogIHN0YXRpYyB2b2lkIG1lbWNweSh2b2lkKiBh
RGVzdCwgY29uc3Qgdm9pZCogYVNyYywgUFJVaW50MzIgYUNvdW50KSB7CiAgICB7fTsKICAgIDo6
bWVtY3B5KGFEZXN0LCBhU3JjLCAoc2l6ZV90KWFDb3VudCk7CiAgfQoKICBzdGF0aWMgUFJJbnQz
MiBtZW1jbXAodm9pZCogYURlc3QsIGNvbnN0IHZvaWQqIGFTcmMsIFBSVWludDMyIGFDb3VudCkg
ewogICAge307CiAgICByZXR1cm4gOjptZW1jbXAoYURlc3QsIGFTcmMsIChzaXplX3QpYUNvdW50
KTsKICB9CgogIHN0YXRpYyB2b2lkIG1lbW1vdmUodm9pZCogYURlc3QsIGNvbnN0IHZvaWQqIGFT
cmMsIFBSVWludDMyIGFDb3VudCkgewogICAge307CiAgICA6Om1lbW1vdmUoYURlc3QsIGFTcmMs
IChzaXplX3QpYUNvdW50KTsKICB9CgogIHN0YXRpYyB2b2lkIG1lbXNldCh2b2lkKiBhRGVzdCwg
UFJVaW50OCBhQnl0ZSwgUFJVaW50MzIgYUNvdW50KSB7CiAgICB7fTsKICAgIDo6bWVtc2V0KGFE
ZXN0LCBhQnl0ZSwgYUNvdW50KTsKICB9CgogIHN0YXRpYyB2b2lkIHplcm8odm9pZCogYURlc3Qs
IFBSVWludDMyIGFDb3VudCkgewogICAge307CiAgICA6Om1lbXNldChhRGVzdCwgMCwgKHNpemVf
dClhQ291bnQpOwogIH0KCgoKCgogIHN0YXRpYyBQUlVpbnQzMiBzdHJsZW4oY29uc3QgY2hhciog
cykgewogICAgcmV0dXJuIFBSVWludDMyKDo6c3RybGVuKHMpKTsKICB9CgoKICBzdGF0aWMgUFJJ
bnQzMiBzdHJjbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKSB7CiAgICByZXR1cm4g
UFJJbnQzMihQTF9zdHJjbXAoczEsIHMyKSk7CiAgfQoKICBzdGF0aWMgUFJJbnQzMiBzdHJuY21w
KGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwKICAgICAgICAgICAgICAgICAgICAgICAg
IFBSVWludDMyIGFNYXhMZW4pIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cm5jbXAoczEsIHMy
LCBhTWF4TGVuKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RyY2FzZWNtcChjb25zdCBjaGFy
KiBzMSwgY29uc3QgY2hhciogczIpIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cmNhc2VjbXAo
czEsIHMyKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2VjbXAoY29uc3QgY2hhciog
czEsIGNvbnN0IGNoYXIqIHMyLCBQUlVpbnQzMiBhTWF4TGVuKSB7CiAgICBQUkludDMyIHJlc3Vs
dD1QUkludDMyKFBMX3N0cm5jYXNlY21wKHMxLCBzMiwgYU1heExlbikpOwoKCiAgICBpZihyZXN1
bHQ8MCkKICAgICAgcmVzdWx0PS0xOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBQ
UkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBQUkludDMyIGFN
YXhMZW4pIHsKCiAgICBQUkludDMyIGRpZmYgPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXMxKVsw
XSAtICgoY29uc3QgdW5zaWduZWQgY2hhciopczIpWzBdOwogICAgaWYgKGRpZmYgIT0gMCkgcmV0
dXJuIGRpZmY7CiAgICByZXR1cm4gUFJJbnQzMihQTF9zdHJuY21wKHMxLHMyLHVuc2lnbmVkKGFN
YXhMZW4pKSk7CiAgfQoKICBzdGF0aWMgY2hhciogc3RyZHVwKGNvbnN0IGNoYXIqIHN0cikgewog
ICAgcmV0dXJuIFBMX3N0cmR1cChzdHIpOwogIH0KCiAgc3RhdGljIGNoYXIqIHN0cm5kdXAoY29u
c3QgY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pIHsKICAgIHJldHVybiBQTF9zdHJuZHVwKHN0ciwg
bGVuKTsKICB9CgogIHN0YXRpYyB2b2lkIGZyZWUoY2hhciogc3RyKSB7CiAgICBQTF9zdHJmcmVl
KHN0cik7CiAgfQojIDE5NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiCiAgc3Rh
dGljIGNoYXIqIHN0cnRvayhjaGFyKiBzdHIsIGNvbnN0IGNoYXIqIGRlbGltcywgY2hhciogKm5l
d1N0cik7CgoKICBzdGF0aWMgUFJVaW50MzIgc3RybGVuKGNvbnN0IFBSVW5pY2hhciogcyk7CgoK
ICBzdGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmlj
aGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgUFJVbmljaGFyKiBzMSwg
Y29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFN
YXhMZW4pOwoKCiAgc3RhdGljIFBSSW50MzIgc3RyY2FzZWNtcChjb25zdCBQUlVuaWNoYXIqIHMx
LCBjb25zdCBQUlVuaWNoYXIqIHMyKTsKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2VjbXAoY29u
c3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0cmNtcChj
b25zdCBQUlVuaWNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMyIHN0
cm5jbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciogczIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0cmNhc2Vj
bXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciogczIpOwoKICBzdGF0aWMgUFJJbnQz
MiBzdHJuY2FzZWNtcChjb25zdCBQUlVuaWNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgoKICBzdGF0aWMgUFJV
bmljaGFyKiBzdHJkdXAoY29uc3QgUFJVbmljaGFyKiBzdHIpOwoKICBzdGF0aWMgUFJVbmljaGFy
KiBzdHJuZHVwKGNvbnN0IFBSVW5pY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pOwoKICBzdGF0aWMg
dm9pZCBmcmVlKFBSVW5pY2hhciogc3RyKSB7CiAgICAgICAgbnNDcHBTaGFyZWRBbGxvY2F0b3I8
UFJVbmljaGFyPiBzaGFyZWRfYWxsb2NhdG9yOwogICAgICAgIHNoYXJlZF9hbGxvY2F0b3IuZGVh
bGxvY2F0ZShzdHIsIDAgKTsKICB9CgoKICBzdGF0aWMgUFJVaW50MzIgSGFzaENvZGUoY29uc3Qg
Y2hhciogc3RyLCBQUlVpbnQzMiogcmVzdWx0aW5nU3RyTGVuID0gMCk7CgoKICBzdGF0aWMgUFJV
aW50MzIgSGFzaENvZGUoY29uc3QgUFJVbmljaGFyKiBzdHIsIFBSVWludDMyKiByZXN1bHRpbmdT
dHJMZW4gPSAwKTsKCgogIHN0YXRpYyBQUlVpbnQzMiBCdWZmZXJIYXNoQ29kZShjb25zdCBjaGFy
KiBzdHIsIFBSVWludDMyIHN0ckxlbik7CgoKICBzdGF0aWMgUFJJbnQzMiBhdG9pKCBjb25zdCBQ
UlVuaWNoYXIgKnN0cmluZyApOwoKICBzdGF0aWMgUFJVbmljaGFyIFRvVXBwZXIoUFJVbmljaGFy
IGFDaGFyKTsKCiAgc3RhdGljIFBSVW5pY2hhciBUb0xvd2VyKFBSVW5pY2hhciBhQ2hhcik7Cgog
IHN0YXRpYyBQUkJvb2wgSXNVcHBlcihQUlVuaWNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29s
IElzTG93ZXIoUFJVbmljaGFyIGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9VcHBlcihjaGFyIGFD
aGFyKTsKCiAgc3RhdGljIGNoYXIgVG9Mb3dlcihjaGFyIGFDaGFyKTsKCiAgc3RhdGljIFBSQm9v
bCBJc1VwcGVyKGNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29sIElzTG93ZXIoY2hhciBhQ2hh
cik7CgogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIgYUNoYXIpOwogIHN0YXRpYyBQ
UkJvb2wgSXNBc2NpaShQUlVuaWNoYXIqIGFTdHJpbmcpOwogIHN0YXRpYyBQUkJvb2wgSXNBc2Np
aUFscGhhKFBSVW5pY2hhciBhQ2hhcik7CiAgc3RhdGljIFBSQm9vbCBJc0FzY2lpRGlnaXQoUFJV
bmljaGFyIGFDaGFyKTsKICBzdGF0aWMgUFJCb29sIElzQXNjaWlTcGFjZShQUlVuaWNoYXIgYUNo
YXIpOwp9OwojIDU0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIKIyA2
MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgpjbGFzcyBuc0lTaXplT2ZI
YW5kbGVyOwoKCgoKCmNsYXNzIG5zU3Vic3VtZVN0cjsKCmNsYXNzIG5zU3RyaW5nIDoKICBwdWJs
aWMgbnNBRmxhdFN0cmluZywKICBwdWJsaWMgbnNTdHIgewoKcHJvdGVjdGVkOgogIHZpcnR1YWwg
Y29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNv
bnN0OwogIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1Jl
YWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp
IGNvbnN0OwogIHZpcnR1YWwgUFJVbmljaGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRh
YmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApOwoK
cHVibGljOgogIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBnZXQoKSBjb25zdCB7IHJldHVybiBH
ZXRVbmljb2RlKCk7IH0KCnB1YmxpYzoKCgoKICBuc1N0cmluZygpOwoKCgoKCiAgbnNTdHJpbmco
Y29uc3QgbnNTdHJpbmcmIGFTdHJpbmcpOwoKICBleHBsaWNpdCBuc1N0cmluZyhjb25zdCBuc0FT
dHJpbmcmKTsKCiAgZXhwbGljaXQgbnNTdHJpbmcoY29uc3QgUFJVbmljaGFyKik7CiAgbnNTdHJp
bmcoY29uc3QgUFJVbmljaGFyKiwgUFJJbnQzMik7CiMgMTA4ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHJpbmcyLmgiCiAgZXhwbGljaXQgbnNTdHJpbmcobnNTdWJzdW1lU3RyJiBhU3Vi
c3VtZVN0cik7CgoKCgoKCiAgdmlydHVhbCB+bnNTdHJpbmcoKTsKCgoKCgogIHZpcnR1YWwgUFJV
aW50MzIgTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbUxlbmd0aDsgfQoKCgoKCiAgdmlydHVhbCB2
b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQp
IGNvbnN0OwoKCgoKCgoKICB2b2lkIFNldExlbmd0aChQUlVpbnQzMiBhTGVuZ3RoKTsKCgoKCgoK
ICB2b2lkIFNldENhcGFjaXR5KFBSVWludDMyIGFMZW5ndGgpOwojIDE1MSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSQm9vbCBJc1VuaWNvZGUodm9pZCkgY29uc3Qg
ewogICAgUFJCb29sIHJlc3VsdD1QUkJvb2wobUNoYXJTaXplPT1lVHdvQnl0ZSk7CiAgICByZXR1
cm4gcmVzdWx0OwogIH0KIyAxNjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIu
aCIKICBjb25zdCBjaGFyKiBHZXRCdWZmZXIodm9pZCkgY29uc3Q7CiAgY29uc3QgUFJVbmljaGFy
KiBHZXRVbmljb2RlKHZvaWQpIGNvbnN0OwoKCgoKICBQUkJvb2wgU2V0Q2hhckF0KFBSVW5pY2hh
ciBhQ2hhcixQUlVpbnQzMiBhbkluZGV4KTsKIyAxODIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1N0cmluZzIuaCIKICB2b2lkIFRvTG93ZXJDYXNlKCk7CiMgMTkxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgdm9pZCBUb0xvd2VyQ2FzZShuc1N0cmluZyYgYVN0
cmluZykgY29uc3Q7CgoKCgoKICB2b2lkIFRvVXBwZXJDYXNlKCk7CgoKCgoKCgogIHZvaWQgVG9V
cHBlckNhc2UobnNTdHJpbmcmIGFTdHJpbmcpIGNvbnN0OwojIDIxNSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgU3RyaXBDaGFycyggY29uc3QgY2hhciogYVNl
dCApOwogIHZvaWQgU3RyaXBDaGFyKCBQUlVuaWNoYXIgYUNoYXIsIFBSSW50MzIgYW5PZmZzZXQ9
MCApOwogIHZvaWQgU3RyaXBDaGFyKCBjaGFyIGFDaGFyLCBQUkludDMyIGFuT2Zmc2V0PTAgKSB7
IFN0cmlwQ2hhcigoUFJVbmljaGFyKSAodW5zaWduZWQgY2hhcilhQ2hhcixhbk9mZnNldCk7IH0K
ICB2b2lkIFN0cmlwQ2hhciggUFJJbnQzMiBhbkludCwgUFJJbnQzMiBhbk9mZnNldD0wICkgeyBT
dHJpcENoYXIoKFBSVW5pY2hhcilhbkludCxhbk9mZnNldCk7IH0KCgoKCgoKICB2b2lkIFN0cmlw
V2hpdGVzcGFjZSgpOwoKCgoKCgogIHZvaWQgUmVwbGFjZUNoYXIoIFBSVW5pY2hhciBhbk9sZENo
YXIsIFBSVW5pY2hhciBhTmV3Q2hhciApOwogIHZvaWQgUmVwbGFjZUNoYXIoIGNvbnN0IGNoYXIq
IGFTZXQsIFBSVW5pY2hhciBhTmV3Q2hhciApOwoKICB2b2lkIFJlcGxhY2VTdWJzdHJpbmcoIGNv
bnN0IG5zU3RyaW5nJiBhVGFyZ2V0LCBjb25zdCBuc1N0cmluZyYgYU5ld1ZhbHVlICk7CiAgdm9p
ZCBSZXBsYWNlU3Vic3RyaW5nKCBjb25zdCBQUlVuaWNoYXIqIGFUYXJnZXQsIGNvbnN0IFBSVW5p
Y2hhciogYU5ld1ZhbHVlICk7CiMgMjQ5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJp
bmcyLmgiCiAgdm9pZCBUcmltKGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5hdGVMZWFk
aW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xLFBSQm9vbCBhSWdub3JlUXVvdGVzPTAp
OwojIDI2MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgQ29t
cHJlc3NTZXQoY29uc3QgY2hhciogYVNldCwgUFJVbmljaGFyIGFDaGFyLFBSQm9vbCBhRWxpbWlu
YXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9MSk7CiMgMjcxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgdm9pZCBDb21wcmVzc1doaXRlc3BhY2Uo
IFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9MSk7
CiMgMjgxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgbnNTdHJpbmcq
IFRvTmV3U3RyaW5nKCkgY29uc3Q7CgoKCgoKCgogIGNoYXIqIFRvTmV3Q1N0cmluZygpIGNvbnN0
OwoKCgoKCgoKICBjaGFyKiBUb05ld1VURjhTdHJpbmcoKSBjb25zdDsKCgoKCgoKCiAgUFJVbmlj
aGFyKiBUb05ld1VuaWNvZGUoKSBjb25zdDsKIyAzMTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1N0cmluZzIuaCIKICBjaGFyKiBUb0NTdHJpbmcoY2hhciogYUJ1ZixQUlVpbnQzMiBhQnVm
TGVuZ3RoLFBSVWludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwoKCgoKCgogIGZsb2F0IFRvRmxvYXQo
UFJJbnQzMiogYUVycm9yQ29kZSkgY29uc3Q7CgoKCgoKCgogIFBSSW50MzIgVG9JbnRlZ2VyKFBS
SW50MzIqIGFFcnJvckNvZGUsUFJVaW50MzIgYVJhZGl4PSgxMCkpIGNvbnN0OwojIDM0NSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIG5zU3RyaW5nJiBvcGVyYXRvcj0o
IGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhp
czsgfQogIG5zU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQVN0cmluZyYgYVJlYWRhYmxlICkg
eyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogIG5zU3RyaW5nJiBvcGVyYXRv
cj0oIGNvbnN0IFBSVW5pY2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7
IH0KICBuc1N0cmluZyYgb3BlcmF0b3I9KCBQUlVuaWNoYXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hh
cik7IHJldHVybiAqdGhpczsgfQoKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKGNoYXIpOwog
IHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciopOwogIHZvaWQgQXNzaWduV2l0
aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBSSW50MzIpOwojIDM2NCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgQXBwZW5kSW50KFBSSW50MzIsIFBSSW50MzI9
MTApOwogIHZvaWQgQXBwZW5kRmxvYXQoZG91YmxlKTsKICB2b2lkIEFwcGVuZFdpdGhDb252ZXJz
aW9uKGNvbnN0IGNoYXIqLCBQUkludDMyPS0xKTsKICB2b2lkIEFwcGVuZFdpdGhDb252ZXJzaW9u
KGNoYXIpOwoKICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnQoIFBSVW5pY2hhciAp
OwoKCgogIHZvaWQgSW5zZXJ0V2l0aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBSVWludDMyLCBQ
UkludDMyPS0xKTsKIyAzODkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIK
ICBQUkludDMyIEZpbmQoY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl
PTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMy
IEZpbmQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBh
bk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMyIEZpbmQoY29uc3Qg
Y2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJ
bnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgRmluZChjb25zdCBQUlVuaWNoYXIqIGFT
dHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNv
dW50PS0xKSBjb25zdDsKIyA0MDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIu
aCIKICBQUkludDMyIEZpbmRDaGFyKFBSVW5pY2hhciBhQ2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9
MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDQxNCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgRmluZENoYXJJblNl
dChjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiAgUFJJbnQz
MiBGaW5kQ2hhckluU2V0KGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0
PTApIGNvbnN0OwogIFBSSW50MzIgRmluZENoYXJJblNldChjb25zdCBuc1N0ciYgYVN0cmluZyxQ
UkludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwojIDQyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zU3RyaW5nMi5oIgogIFBSSW50MzIgUkZpbmQoY29uc3QgY2hhciogYUNTdHJpbmcsUFJCb29s
IGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29u
c3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBuc1N0cmluZyYgYVN0cmluZyxQUkJvb2wgYUlnbm9y
ZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQ
UkludDMyIFJGaW5kKGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBS
SW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZp
bmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIg
YW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDQ0MyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgUkZpbmRDaGFyKFBSVW5pY2hhciBh
Q2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNv
dW50PS0xKSBjb25zdDsKIyA0NTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIu
aCIKICBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBh
bk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQUlVuaWNo
YXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZENo
YXJJblNldChjb25zdCBuc1N0ciYgYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBjb25zdDsK
IyA0NzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBQUkludDMyIENv
bXBhcmVXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2Fz
ZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMyIENvbXBhcmVXaXRoQ29udmVy
c2lvbihjb25zdCBuc1N0cmluZyYgYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMy
IGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBDb21wYXJlV2l0aENvbnZlcnNpb24oY29uc3Qg
UFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0x
KSBjb25zdDsKCiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IG5zU3RyaW5nICZh
U3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQ
UkJvb2wgRXF1YWxzV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUln
bm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29sIEVxdWFsc1dpdGhD
b252ZXJzaW9uKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQ
UkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29sIEVxdWFsc0F0b20oIG5zSUF0b20qIGFu
QXRvbSxQUkJvb2wgYUlnbm9yZUNhc2UpIGNvbnN0OwoKICBQUkJvb2wgRXF1YWxzSWdub3JlQ2Fz
ZShjb25zdCBuc1N0cmluZyYgYVN0cmluZykgY29uc3Q7CiAgUFJCb29sIEVxdWFsc0lnbm9yZUNh
c2UoY29uc3QgY2hhciogYVN0cmluZyxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29s
IEVxdWFsc0lnbm9yZUNhc2UoIG5zSUF0b20gKmFBdG9tKSBjb25zdDsKIyA0OTAgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBQUkJvb2wgSXNBU0NJSShjb25zdCBQUlVu
aWNoYXIqIGFCdWZmZXI9MCk7CgogIHZvaWQgRGVidWdEdW1wKHZvaWQpIGNvbnN0OwoKCgoKCgoK
ICBzdGF0aWMgUFJCb29sIElzU3BhY2UoUFJVbmljaGFyIGNoKTsKCgoKCgoKCiAgc3RhdGljIFBS
Qm9vbCBJc0FscGhhKFBSVW5pY2hhciBjaCk7CgoKCgoKCgogIHN0YXRpYyBQUkJvb2wgSXNEaWdp
dChQUlVuaWNoYXIgY2gpOwoKcHJpdmF0ZToKCgogIHZvaWQgb3BlcmF0b3I9KCBjaGFyICk7CiAg
dm9pZCBBc3NpZ25XaXRoQ29udmVyc2lvbiggUFJVbmljaGFyICk7CiAgdm9pZCBBc3NpZ25XaXRo
Q29udmVyc2lvbiggY29uc3QgUFJVbmljaGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQgQXBwZW5k
V2l0aENvbnZlcnNpb24oIFBSVW5pY2hhciApOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24o
IGNvbnN0IFBSVW5pY2hhciosIFBSSW50MzI9LTEgKTsKICB2b2lkIEluc2VydFdpdGhDb252ZXJz
aW9uKCBjb25zdCBQUlVuaWNoYXIqLCBQUlVpbnQzMiwgUFJJbnQzMj0tMSApOwp9OwoKCgoKZXh0
ZXJuIGludCBmcHV0cyhjb25zdCBuc1N0cmluZyYgYVN0cmluZywgRklMRSogb3V0KTsKIyA1NDIg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKY2xhc3MgbnNBdXRvU3RyaW5n
IDogcHVibGljIG5zU3RyaW5nIHsKcHVibGljOgoKICAgIHZpcnR1YWwgfm5zQXV0b1N0cmluZygp
OwogICAgbnNBdXRvU3RyaW5nKCk7CiAgICBuc0F1dG9TdHJpbmcoY29uc3QgbnNBdXRvU3RyaW5n
JiBhU3RyaW5nKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25zdCBuc0FTdHJpbmcmIGFT
dHJpbmcpOwogICAgZXhwbGljaXQgbnNBdXRvU3RyaW5nKGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5n
KTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcpOwog
ICAgbnNBdXRvU3RyaW5nKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkludDMyIGFMZW5ndGgp
OwogICAgZXhwbGljaXQgbnNBdXRvU3RyaW5nKFBSVW5pY2hhciBhQ2hhcik7CiAgICBleHBsaWNp
dCBuc0F1dG9TdHJpbmcoY29uc3QgQ0J1ZkRlc2NyaXB0b3ImIGFCdWZmZXIpOwoKCgoKICAgIGV4
cGxpY2l0IG5zQXV0b1N0cmluZyhuc1N1YnN1bWVTdHImIGFTdWJzdW1lU3RyKTsKCgoKICAgIG5z
QXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0F1dG9TdHJpbmcmIGFTdHJpbmcgKSB7IEFz
c2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgcHJpdmF0ZToKICAgIHZvaWQgb3BlcmF0
b3I9KCBjaGFyICk7CiAgcHVibGljOgogICAgbnNBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0
IG5zQVN0cmluZyYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlz
OyB9CgogICAgbnNBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IFBSVW5pY2hhciogYVB0ciAp
IHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAgIG5zQXV0b1N0cmluZyYgb3BlcmF0
b3I9KCBQUlVuaWNoYXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQoK
CgoKCiAgICB2aXJ0dWFsIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5kbGVyLCBQ
UlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogICAgY2hhciBtQnVmZmVyW2tEZWZhdWx0U3RyaW5n
U2l6ZTw8ZVR3b0J5dGVdOwp9OwoKCgpjbGFzcyBOU19Db252ZXJ0QVNDSUl0b1VDUzIKICAgICAg
OiBwdWJsaWMgbnNBdXRvU3RyaW5nCgoKCiAgewogICAgcHVibGljOgogICAgICBleHBsaWNpdCBO
U19Db252ZXJ0QVNDSUl0b1VDUzIoIGNvbnN0IGNoYXIqICk7CiAgICAgIE5TX0NvbnZlcnRBU0NJ
SXRvVUNTMiggY29uc3QgY2hhciosIFBSVWludDMyICk7CiAgICAgIGV4cGxpY2l0IE5TX0NvbnZl
cnRBU0NJSXRvVUNTMiggY2hhciApOwojIDYwMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
U3RyaW5nMi5oIgogICAgcHJpdmF0ZToKCiAgICAgIE5TX0NvbnZlcnRBU0NJSXRvVUNTMiggUFJV
bmljaGFyICk7CiAgfTsKCmNsYXNzIE5TX0NvbnZlcnRVVEY4dG9VQ1MyCiAgICAgIDogcHVibGlj
IG5zQXV0b1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29u
dmVydFVURjh0b1VDUzIoIGNvbnN0IGNoYXIqIGFDU3RyaW5nICkKICAgICAgICB7CiAgICAgICAg
ICBJbml0KCBhQ1N0cmluZywgflBSVWludDMyKDApICk7CiAgICAgICAgfQoKICAgICAgTlNfQ29u
dmVydFVURjh0b1VDUzIoIGNvbnN0IGNoYXIqIGFDU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoICkK
ICAgICAgICB7CiAgICAgICAgICBJbml0KCBhQ1N0cmluZywgYUxlbmd0aCApOwogICAgICAgIH0K
CiAgICAgIGV4cGxpY2l0CiAgICAgIE5TX0NvbnZlcnRVVEY4dG9VQ1MyKCBjaGFyIGFDaGFyICkK
ICAgICAgICB7CiAgICAgICAgICBJbml0KCAmYUNoYXIsIDEgKTsKICAgICAgICB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2b2lkIEluaXQoIGNvbnN0IGNoYXIqIGFDU3RyaW5nLCBQUlVpbnQzMiBh
TGVuZ3RoICk7CgogICAgcHJpdmF0ZToKICAgICAgTlNfQ29udmVydFVURjh0b1VDUzIoIFBSVW5p
Y2hhciApOwogIH07CiMgNjQ2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgi
CmNsYXNzIG5zU3Vic3VtZVN0ciA6IHB1YmxpYyBuc1N0cmluZyB7CnB1YmxpYzoKICBuc1N1YnN1
bWVTdHIoKTsKICBleHBsaWNpdCBuc1N1YnN1bWVTdHIobnNTdHImIGFTdHJpbmcpOwogIG5zU3Vi
c3VtZVN0cihQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFzc3VtZU93bmVyc2hpcCxQUkludDMy
IGFMZW5ndGg9LTEpOwogIG5zU3Vic3VtZVN0cihjaGFyKiBhU3RyaW5nLFBSQm9vbCBhc3N1bWVP
d25lcnNoaXAsUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBpbnQgU3Vic3VtZShQUlVuaWNoYXIqIGFT
dHJpbmcsUFJCb29sIGFzc3VtZU93bmVyc2hpcCxQUkludDMyIGFMZW5ndGg9LTEpOwoKICBuc1N1
YnN1bWVTdHImIG9wZXJhdG9yPSggY29uc3QgbnNTdWJzdW1lU3RyJiBhUmVhZGFibGUgKSB7IEFz
c2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICBuc1N1YnN1bWVTdHImIG9wZXJhdG9y
PSggY29uc3QgbnNBU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1
cm4gKnRoaXM7IH0KCiAgbnNTdWJzdW1lU3RyJiBvcGVyYXRvcj0oIGNvbnN0IFBSVW5pY2hhciog
YVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICBuc1N1YnN1bWVTdHImIG9w
ZXJhdG9yPSggUFJVbmljaGFyIGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7
IH0KcHJpdmF0ZToKICB2b2lkIG9wZXJhdG9yPSggY2hhciApOwp9OwojIDQ3ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyA0OCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNjb3JlLmgiIDEKIyA0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIK
IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L3N0ZGlvLmgiIDEgMwojIDUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAxCiMgNTEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUF0b20uaCIgMQojIDUyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcu
aCIgMgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDEKIyA1NCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKIyA2MiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
QVdyaXRhYmxlU3RyaW5nLmgiIDEKIyA2MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
aW5nLmgiIDIKCgoKY2xhc3MgbnNTdWJzdW1lQ1N0cjsKCmNsYXNzIG5zQ1N0cmluZyA6CiAgcHVi
bGljIG5zQUZsYXRDU3RyaW5nLAogIHB1YmxpYyBuc1N0ciB7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVh
bCBjb25zdCBuc0J1ZmZlckhhbmRsZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0
OwogIHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZy
YWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgdmly
dHVhbCBjaGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8Y2hhcj4m
LCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKTsKCnB1YmxpYzoKICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0KCnB1YmxpYzoKCgoKICBuc0NTdHJp
bmcoKTsKCgoKCgogIG5zQ1N0cmluZyhjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcpOwoKICBleHBs
aWNpdCBuc0NTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmICk7CgogIGV4cGxpY2l0IG5zQ1N0cmlu
Zyhjb25zdCBjaGFyKik7CiAgbnNDU3RyaW5nKGNvbnN0IGNoYXIqLCBQUkludDMyKTsKCgoKCgog
IGV4cGxpY2l0IG5zQ1N0cmluZyhuc1N1YnN1bWVDU3RyJiBhU3Vic3VtZVN0cik7CgoKCgoKICB2
aXJ0dWFsIH5uc0NTdHJpbmcoKTsKCgoKCgogIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbUxlbmd0aDsgfQoKCgoKCiAgdmlydHVhbCB2b2lkIFNpemVPZihuc0lTaXpl
T2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwojIDEyOCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBTZXRMZW5ndGgoUFJVaW50
MzIgYUxlbmd0aCk7CgoKCgoKCiAgdm9pZCBTZXRDYXBhY2l0eShQUlVpbnQzMiBhTGVuZ3RoKTsK
CgoKCgogIFBSQm9vbCBTZXRDaGFyQXQoUFJVbmljaGFyIGFDaGFyLFBSVWludDMyIGFuSW5kZXgp
OwojIDE1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBUb0xv
d2VyQ2FzZSgpOwojIDE2MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAg
dm9pZCBUb0xvd2VyQ2FzZShuc0NTdHJpbmcmIGFTdHJpbmcpIGNvbnN0OwoKCgoKCiAgdm9pZCBU
b1VwcGVyQ2FzZSgpOwoKCgoKCgoKICB2b2lkIFRvVXBwZXJDYXNlKG5zQ1N0cmluZyYgYVN0cmlu
ZykgY29uc3Q7CiMgMTg0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2
b2lkIFN0cmlwQ2hhcnMoY29uc3QgY2hhciogYVNldCk7CiAgdm9pZCBTdHJpcENoYXIoUFJVbmlj
aGFyIGFDaGFyLFBSSW50MzIgYW5PZmZzZXQ9MCk7CiAgdm9pZCBTdHJpcENoYXIoY2hhciBhQ2hh
cixQUkludDMyIGFuT2Zmc2V0PTApIHsgU3RyaXBDaGFyKChQUlVuaWNoYXIpICh1bnNpZ25lZCBj
aGFyKWFDaGFyLGFuT2Zmc2V0KTsgfQoKCgoKCgogIHZvaWQgU3RyaXBXaGl0ZXNwYWNlKCk7CgoK
CgoKCiAgdm9pZCBSZXBsYWNlQ2hhcihQUlVuaWNoYXIgYU9sZENoYXIsUFJVbmljaGFyIGFOZXdD
aGFyKTsKICB2b2lkIFJlcGxhY2VDaGFyKGNvbnN0IGNoYXIqIGFTZXQsUFJVbmljaGFyIGFOZXdD
aGFyKTsKCiAgdm9pZCBSZXBsYWNlU3Vic3RyaW5nKGNvbnN0IG5zQ1N0cmluZyYgYVRhcmdldCxj
b25zdCBuc0NTdHJpbmcmIGFOZXdWYWx1ZSk7CiAgdm9pZCBSZXBsYWNlU3Vic3RyaW5nKGNvbnN0
IGNoYXIqIGFUYXJnZXQsY29uc3QgY2hhciogYU5ld1ZhbHVlKTsKIyAyMTcgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIHZvaWQgVHJpbShjb25zdCBjaGFyKiBhU2V0LFBS
Qm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9MSxQUkJv
b2wgYUlnbm9yZVF1b3Rlcz0wKTsKIyAyMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZy5oIgogIHZvaWQgQ29tcHJlc3NTZXQoY29uc3QgY2hhciogYVNldCwgUFJVbmljaGFyIGFD
aGFyLFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9
MSk7CiMgMjM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2b2lkIENv
bXByZXNzV2hpdGVzcGFjZSggUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29sIGFFbGlt
aW5hdGVUcmFpbGluZz0xKTsKCgoKCgogIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Qge3Jl
dHVybiAoY29uc3QgY2hhciopbVN0cjt9CgoKCgoKCgogIG5zQ1N0cmluZyogVG9OZXdTdHJpbmco
KSBjb25zdDsKCgoKCgoKCiAgY2hhciogVG9OZXdDU3RyaW5nKCkgY29uc3Q7CgoKCgoKCgogIFBS
VW5pY2hhciogVG9OZXdVbmljb2RlKCkgY29uc3Q7CiMgMjc4ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHJpbmcuaCIKICBjaGFyKiBUb0NTdHJpbmcoY2hhciogYUJ1ZixQUlVpbnQzMiBh
QnVmTGVuZ3RoLFBSVWludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwoKCgoKCgogIGZsb2F0IFRvRmxv
YXQoUFJJbnQzMiogYUVycm9yQ29kZSkgY29uc3Q7CiMgMjk0ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIFRvSW50ZWdlcihQUkludDMyKiBhRXJyb3JDb2Rl
LFBSVWludDMyIGFSYWRpeD0oMTApKSBjb25zdDsKIyAzMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0cmluZy5oIgogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0NTdHJpbmcm
IGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgbnNDU3RyaW5n
JiBvcGVyYXRvcj0oIGNvbnN0IG5zQUNTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFk
YWJsZSk7IHJldHVybiAqdGhpczsgfQoKICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgY2hh
ciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICBuc0NTdHJpbmcmIG9w
ZXJhdG9yPSggY2hhciBhQ2hhciApIHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9Cgog
IHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oY29uc3QgUFJVbmljaGFyKixQUkludDMyPS0xKTsK
ICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25zdCBuc1N0cmluZyYgYVN0cmluZyApOwog
IHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwog
IHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oUFJVbmljaGFyKTsKIyAzMzEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY29u
c3QgbnNTdHJpbmcmLCBQUkludDMyPS0xKTsKICB2b2lkIEFwcGVuZFdpdGhDb252ZXJzaW9uKFBS
VW5pY2hhciBhQ2hhcik7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbiggY29uc3QgbnNBU3Ry
aW5nJiBhU3RyaW5nICk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNo
YXIqLCBQUkludDMyPS0xKTsKCiAgdm9pZCBBcHBlbmRJbnQoUFJJbnQzMiBhSW50ZWdlcixQUklu
dDMyIGFSYWRpeD0xMCk7CiAgdm9pZCBBcHBlbmRGbG9hdCggZG91YmxlIGFGbG9hdCApOwoKCiAg
dm9pZCBJbnNlcnRXaXRoQ29udmVyc2lvbihQUlVuaWNoYXIgYUNoYXIsUFJVaW50MzIgYW5PZmZz
ZXQpOwojIDM2MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQz
MiBGaW5kKGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIg
YW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kKGNvbnN0
IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBS
SW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMyIEZpbmQoY29uc3QgUFJVbmljaGFyKiBh
U3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFD
b3VudD0tMSkgY29uc3Q7CiMgMzc2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcu
aCIKICBQUkludDMyIEZpbmRDaGFyKFBSVW5pY2hhciBhQ2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9
MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDM4NSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0
KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKICBQUkludDMy
IEZpbmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9
MCkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBS
SW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiMgMzk3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHJpbmcuaCIKICBQUkludDMyIFJGaW5kKGNvbnN0IGNoYXIqIGFDU3RyaW5nLFBSQm9vbCBh
SWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0
OwogIFBSSW50MzIgUkZpbmQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl
PTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQz
MiBSRmluZChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJ
bnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgNDEwICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIFJGaW5kQ2hhcihQUlVuaWNo
YXIgYUNoYXIsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMy
IGFDb3VudD0tMSkgY29uc3Q7CiMgNDE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJp
bmcuaCIKICBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQz
MiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQUlVu
aWNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmlu
ZENoYXJJblNldChjb25zdCBuc1N0ciYgYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBjb25z
dDsKIyA0MzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIFBSSW50MzIg
Q29tcGFyZVdpdGhDb252ZXJzaW9uKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUln
bm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBDb21wYXJlV2l0
aENvbnZlcnNpb24oY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUklu
dDMyIGFDb3VudD0tMSkgY29uc3Q7CgogIFBSQm9vbCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25z
dCBuc1N0cmluZyAmYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0t
MSkgY29uc3Q7CiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFTdHJp
bmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSQm9v
bCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJ
Z25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwoKICBQUkJvb2wgRXF1YWxzSWdu
b3JlQ2FzZShjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQ
UkJvb2wgRXF1YWxzSWdub3JlQ2FzZShjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQzMiBh
Q291bnQ9LTEpIGNvbnN0OwoKCiAgdm9pZCBEZWJ1Z0R1bXAodm9pZCkgY29uc3Q7Cgpwcml2YXRl
OgoKCiAgdm9pZCBvcGVyYXRvcj0oIFBSVW5pY2hhciApOwogIHZvaWQgQXNzaWduV2l0aENvbnZl
cnNpb24oIGNoYXIgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25zdCBjaGFyKiwg
UFJJbnQzMj0tMSApOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oIGNoYXIgKTsKICB2b2lk
IEluc2VydFdpdGhDb252ZXJzaW9uKCBjaGFyLCBQUlVpbnQzMiApOwp9OwoKCgoKZXh0ZXJuIGlu
dCBmcHV0cyhjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcsIEZJTEUqIG91dCk7CiMgNDc0ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKY2xhc3MgbnNDQXV0b1N0cmluZyA6IHB1
YmxpYyBuc0NTdHJpbmcgewpwdWJsaWM6CgogICAgdmlydHVhbCB+bnNDQXV0b1N0cmluZygpOwoK
ICAgIG5zQ0F1dG9TdHJpbmcoKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgbnND
U3RyaW5nJiApOwogICAgZXhwbGljaXQgbnNDQXV0b1N0cmluZyhjb25zdCBuc0FDU3RyaW5nJiBh
U3RyaW5nKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgY2hhciogYVN0cmluZyk7
CiAgICBuc0NBdXRvU3RyaW5nKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhTGVuZ3RoKTsK
ICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgQ0J1ZkRlc2NyaXB0b3ImIGFCdWZmZXIp
OwoKCgoKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcobnNTdWJzdW1lQ1N0ciYgYVN1YnN1bWVT
dHIpOwoKCgogICAgbnNDQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0NBdXRvU3RyaW5n
JiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhpczsgfQogIHByaXZhdGU6
CiAgICB2b2lkIG9wZXJhdG9yPSggUFJVbmljaGFyICk7CiAgcHVibGljOgogICAgbnNDQXV0b1N0
cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0FDU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihh
UmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0o
IGNvbnN0IGNoYXIqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgICBu
c0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNoYXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJl
dHVybiAqdGhpczsgfQoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRs
ZXIqIGFIYW5kbGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogICAgY2hhciBtQnVmZmVy
W2tEZWZhdWx0U3RyaW5nU2l6ZV07Cn07CgoKCgoKCmNsYXNzIE5TX0NvbnZlcnRVQ1MydG9VVEY4
CiAgICAgIDogcHVibGljIG5zQ0F1dG9TdHJpbmcKCgoKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4
cGxpY2l0CiAgICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJp
bmcgKQogICAgICAgIHsKICAgICAgICAgIEFwcGVuZCggYVN0cmluZywgflBSVWludDMyKDApICk7
CiAgICAgICAgfQoKICAgICAgTlNfQ29udmVydFVDUzJ0b1VURjgoIGNvbnN0IFBSVW5pY2hhciog
YVN0cmluZywgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgQXBwZW5kKCBh
U3RyaW5nLCBhTGVuZ3RoICk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29u
dmVydFVDUzJ0b1VURjgoIFBSVW5pY2hhciBhQ2hhciApCiAgICAgICAgewogICAgICAgICAgQXBw
ZW5kKCAmYUNoYXIsIDEgKTsKICAgICAgICB9CgogICAgICBleHBsaWNpdCBOU19Db252ZXJ0VUNT
MnRvVVRGOCggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CgogICAgcHJvdGVjdGVkOgogICAg
ICB2b2lkIEFwcGVuZCggY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3Ro
ICk7CgogICAgcHJpdmF0ZToKCiAgICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjaGFyICk7CiAg
ICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Q7CiAgfTsKIyA1NjUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgpjbGFzcyBuc1N1YnN1bWVDU3RyIDogcHVibGljIG5z
Q1N0cmluZyB7CnB1YmxpYzoKICBleHBsaWNpdCBuc1N1YnN1bWVDU3RyKG5zU3RyJiBhU3RyaW5n
KTsKICBuc1N1YnN1bWVDU3RyKFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYXNzdW1lT3duZXJz
aGlwLFBSSW50MzIgYUxlbmd0aD0tMSk7CiAgbnNTdWJzdW1lQ1N0cihjaGFyKiBhU3RyaW5nLFBS
Qm9vbCBhc3N1bWVPd25lcnNoaXAsUFJJbnQzMiBhTGVuZ3RoPS0xKTsKCiAgbnNTdWJzdW1lQ1N0
ciYgb3BlcmF0b3I9KCBjb25zdCBuc1N1YnN1bWVDU3RyJiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0
cmluZyk7IHJldHVybiAqdGhpczsgfQogIG5zU3Vic3VtZUNTdHImIG9wZXJhdG9yPSggY29uc3Qg
bnNBQ1N0cmluZyYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlz
OyB9CgogIG5zU3Vic3VtZUNTdHImIG9wZXJhdG9yPSggY29uc3QgY2hhciogYVB0ciApIHsgQXNz
aWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICBuc1N1YnN1bWVDU3RyJiBvcGVyYXRvcj0oIGNo
YXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQpwcml2YXRlOgogIHZv
aWQgb3BlcmF0b3I9KCBQUlVuaWNoYXIgKTsKfTsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zRm9udC5oIiAyCgoKCgoKdHlwZWRlZiBQUkJvb2wgKCpuc0ZvbnRGYW1pbHlFbnVtRnVu
YykoY29uc3QgbnNTdHJpbmcmIGFGYW1pbHksIFBSQm9vbCBhR2VuZXJpYywgdm9pZCAqYURhdGEp
OwoKCnN0cnVjdCBuc0ZvbnQgewoKICBuc1N0cmluZyBuYW1lOwoKCiAgUFJVaW50OCBzdHlsZTsK
CgogIFBSVWludDggdmFyaWFudDsKCgogIFBSVWludDE2IHdlaWdodDsKCgoKICBQUlVpbnQ4IGRl
Y29yYXRpb25zOwoKCiAgbnNjb29yZCBzaXplOwoKCiAgbnNGb250KGNvbnN0IGNoYXIqIGFOYW1l
LCBQUlVpbnQ4IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdl
aWdodCwgUFJVaW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6ZSk7CgoKICBuc0ZvbnQoY29u
c3QgbnNTdHJpbmcmIGFOYW1lLCBQUlVpbnQ4IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAg
ICAgICAgUFJVaW50MTYgYVdlaWdodCwgUFJVaW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6
ZSk7CgoKICBuc0ZvbnQoY29uc3QgbnNGb250JiBhRm9udCk7CgogIH5uc0ZvbnQoKTsKCiAgUFJC
b29sIG9wZXJhdG9yPT0oY29uc3QgbnNGb250JiBhT3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiBF
cXVhbHMoYU90aGVyKTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNGb250JiBhT3RoZXIp
IGNvbnN0IDsKCiAgbnNGb250JiBvcGVyYXRvcj0oY29uc3QgbnNGb250JiBhT3RoZXIpOwoKCgoK
CiAgUFJCb29sIEVudW1lcmF0ZUZhbWlsaWVzKG5zRm9udEZhbWlseUVudW1GdW5jIGFGdW5jLCB2
b2lkKiBhRGF0YSkgY29uc3Q7CiAgdm9pZCBHZXRGaXJzdEZhbWlseShuc1N0cmluZyYgYUZhbWls
eSkgY29uc3Q7Cn07CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJv
bEZyYW1lLmgiIDIKY2xhc3MgbnNGb3JtRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFz
cyBuc1N0cmluZzsKY2xhc3MgbnNJQ29udGVudDsKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZvcm1Db250cm9sRnJhbWUuaCIKY2xhc3MgbnNJRm9ybUNvbnRyb2xGcmFtZSA6IHB1
YmxpYyBuc0lTdXBwb3J0cyB7CgpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo
KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgzOGViMzk4MCwgMHg0ZDk5LCAweDExZDIs
IHsgMHg4MCwgMHgzZiwgMHgwLCAweDYwLCAweDgsIDB4MTUsIDB4YTcsIDB4OTEgfSB9OyByZXR1
cm4gaWlkO30KCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUeXBlKFBSSW50MzIqIGFUeXBlKSBjb25z
dCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShuc1N0cmluZyogYU5hbWUpID0gMDsK
CiAgdmlydHVhbCB2b2lkIFNldEZvY3VzKFBSQm9vbCBhT24gPSAxLCBQUkJvb2wgYVJlcGFpbnQg
PSAwKSA9IDA7CgogIHZpcnR1YWwgdm9pZCBTY3JvbGxJbnRvVmlldyhuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0KSA9IDA7CgogIHZpcnR1YWwgdm9pZCBNb3VzZUNsaWNrZWQobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCkgPSAwOwoKICB2aXJ0dWFsIHZvaWQgUmVzZXQobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCkgPSAwOwoKICB2aXJ0dWFsIFBSQm9vbCBJc1N1Y2Nlc3NmdWwo
bnNJRm9ybUNvbnRyb2xGcmFtZSogYVN1Ym1pdHRlcikgPSAwOwoKICB2aXJ0dWFsIFBSSW50MzIg
R2V0TWF4TnVtVmFsdWVzKCkgPSAwOwoKICB2aXJ0dWFsIFBSQm9vbCBHZXROYW1lc1ZhbHVlcyhQ
UkludDMyIGFNYXhOdW1WYWx1ZXMsIFBSSW50MzImIGFOdW1WYWx1ZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zU3RyaW5nKiBhVmFsdWVzLCBuc1N0cmluZyogYU5hbWVzKSA9
IDA7CgogIHZpcnR1YWwgdm9pZCBTZXRGb3JtRnJhbWUobnNGb3JtRnJhbWUqIGFGcmFtZSkgPSAw
OwojIDc5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2xGcmFtZS5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0U3VnZ2VzdGVkU2l6ZShuc2Nvb3JkIGFXaWR0aCwgbnNjb29y
ZCBhSGVpZ2h0KSA9IDA7CiMgOTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29u
dHJvbEZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXF1aXJlc1dpZGdldChQUkJvb2wgJmFS
ZXF1aXJlc1dpZGdldCkgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udChuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0ZvbnQq
JiBhRm9udCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybUNvbnRlbnQobnNJ
Q29udGVudComIGFDb250ZW50KSBjb25zdCA9IDA7CiMgMTE2ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRm9ybUNvbnRyb2xGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJvcGVy
dHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJQXRvbSogYU5hbWUsIGNvbnN0IG5z
QVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUpID0gMDsKIyAxMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lGb3JtQ29udHJvbEZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0
eShuc0lBdG9tKiBhTmFtZSwgbnNBV3JpdGFibGVTdHJpbmcmIGFWYWx1ZSkgPSAwOwoKCgp9Owoj
IDI3ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRm9ybU1hbmFnZXIuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Rm9ybU1hbmFnZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMu
aCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybU1hbmFnZXIuaCIgMgpj
bGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJRnJhbWU7CiMgMzggIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lGb3JtTWFuYWdlci5oIgpjbGFzcyBuc0lGb3JtTWFuYWdlciA6IHB1Ymxp
YyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtz
dGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDU5MmRhYTAxLCAweGNiMjMsIDB4MTFkMSwgeyAw
eDgwLCAweDJkLCAweDAsIDB4NjAsIDB4OCwgMHgxNSwgMHhhNywgMHg5MSB9IH07IHJldHVybiBp
aWQ7fQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9uUmVzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCkgPSAwOwojIDU0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybU1hbmFn
ZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE9uU3VibWl0KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsIG5zSUZyYW1lKiBhRnJhbWUpID0gMDsKCn07CiMgMjggIm5zRm9ybUNvbnRyb2xIZWxw
ZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMg
MjkgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lXaWRnZXQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0
LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDb2xvci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb2xvci5oIiAyCgpjbGFzcyBuc1N0cmluZzsK
CgoKdHlwZWRlZiBQUlVpbnQzMiBuc2NvbG9yOwojIDcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNDb2xvci5oIgpleHRlcm4gIkMiIFBSQm9vbCBOU19IZXhUb1JHQihjb25zdCBuc1N0cmlu
ZyYgYUJ1ZiwgbnNjb2xvciogYVJlc3VsdCk7CgoKCgpleHRlcm4gIkMiIFBSQm9vbCBOU19Mb29z
ZUhleFRvUkdCKGNvbnN0IG5zU3RyaW5nJiBhQnVmLCBuc2NvbG9yKiBhUmVzdWx0KTsKCgoKZXh0
ZXJuICJDIiBQUkJvb2wgTlNfQ29sb3JOYW1lVG9SR0IoY29uc3QgbnNTdHJpbmcmIGFCdWYsIG5z
Y29sb3IqIGFSZXN1bHQpOwoKCgpleHRlcm4gIkMiIHZvaWQgTlNfR2V0M0RDb2xvcnMobnNjb2xv
ciBhUmVzdWx0WzJdLCBuc2NvbG9yIGFDb2xvcik7CgoKZXh0ZXJuICJDIiB2b2lkIE5TX0dldFNw
ZWNpYWwzRENvbG9ycyhuc2NvbG9yIGFSZXN1bHRbMl0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc2NvbG9yIGFCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc2NvbG9yIGFCb3JkZXJDb2xvcik7CgoKCmV4dGVybiAiQyIgbnNjb2xv
ciBOU19CcmlnaHRlbkNvbG9yKG5zY29sb3IgaW5Db2xvcik7CgoKCmV4dGVybiAiQyIgbnNjb2xv
ciBOU19EYXJrZW5Db2xvcihuc2NvbG9yIGluQ29sb3IpOwoKCmV4dGVybiAiQyIgaW50IE5TX0dl
dEJyaWdodG5lc3MoUFJVaW50OCBhUmVkLCBQUlVpbnQ4IGFHcmVlbiwgUFJVaW50OCBhQmx1ZSk7
CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNb3VzZUxpc3RlbmVyLmgiIDEKIyAyNyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSU1vdXNlTGlzdGVuZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0dVSUV2ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUG9pbnQuaCIgMQoj
IDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQb2ludC5oIgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zUG9pbnQuaCIgMgoKc3RydWN0IG5zUG9pbnQgewogIG5zY29vcmQgeCwgeTsKCgogIG5zUG9p
bnQoKSB7fQogIG5zUG9pbnQoY29uc3QgbnNQb2ludCYgYVBvaW50KSB7eCA9IGFQb2ludC54OyB5
ID0gYVBvaW50Lnk7fQogIG5zUG9pbnQobnNjb29yZCBhWCwgbnNjb29yZCBhWSkge3ggPSBhWDsg
eSA9IGFZO30KCiAgdm9pZCBNb3ZlVG8obnNjb29yZCBhWCwgbnNjb29yZCBhWSkge3ggPSBhWDsg
eSA9IGFZO30KICB2b2lkIE1vdmVCeShuc2Nvb3JkIGFEeCwgbnNjb29yZCBhRHkpIHt4ICs9IGFE
eDsgeSArPSBhRHk7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5zUG9pbnQmIGFQb2lu
dCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgoeCA9PSBhUG9pbnQueCkgJiYgKHkgPT0g
YVBvaW50LnkpKTsKICB9CiAgUFJCb29sIG9wZXJhdG9yIT0oY29uc3QgbnNQb2ludCYgYVBvaW50
KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ICE9IGFQb2ludC54KSB8fCAoeSAhPSBh
UG9pbnQueSkpOwogIH0KICBuc1BvaW50IG9wZXJhdG9yKyhjb25zdCBuc1BvaW50JiBhUG9pbnQp
IGNvbnN0IHsKICAgIHJldHVybiBuc1BvaW50KHggKyBhUG9pbnQueCwgeSArIGFQb2ludC55KTsK
ICB9CiAgbnNQb2ludCBvcGVyYXRvci0oY29uc3QgbnNQb2ludCYgYVBvaW50KSBjb25zdCB7CiAg
ICByZXR1cm4gbnNQb2ludCh4IC0gYVBvaW50LngsIHkgLSBhUG9pbnQueSk7CiAgfQogIG5zUG9p
bnQmIG9wZXJhdG9yKz0oY29uc3QgbnNQb2ludCYgYVBvaW50KSB7CiAgICB4ICs9IGFQb2ludC54
OwogICAgeSArPSBhUG9pbnQueTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgbnNQb2ludCYgb3Bl
cmF0b3ItPShjb25zdCBuc1BvaW50JiBhUG9pbnQpIHsKICAgIHggLT0gYVBvaW50Lng7CiAgICB5
IC09IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsKCgoKCgpzdHJ1Y3QgbnNGbG9h
dFBvaW50IHsKICBmbG9hdCB4LCB5OwoKCiAgbnNGbG9hdFBvaW50KCkge30KICBuc0Zsb2F0UG9p
bnQoY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIHt4ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQu
eTt9CiAgbnNGbG9hdFBvaW50KGZsb2F0IGFYLCBmbG9hdCBhWSkge3ggPSBhWDsgeSA9IGFZO30K
CiAgdm9pZCBNb3ZlVG8oZmxvYXQgYVgsIGZsb2F0IGFZKSB7eCA9IGFYOyB5ID0gYVk7fQogIHZv
aWQgTW92ZVRvKG5zY29vcmQgYVgsIG5zY29vcmQgYVkpIHt4ID0gKGZsb2F0KWFYOyB5ID0gKGZs
b2F0KWFZO30KICB2b2lkIE1vdmVCeShmbG9hdCBhRHgsIGZsb2F0IGFEeSkge3ggKz0gYUR4OyB5
ICs9IGFEeTt9CgoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9p
bnQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHggPT0gYVBvaW50LngpICYmICh5ID09
IGFQb2ludC55KSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zRmxvYXRQb2ludCYg
YVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ICE9IGFQb2ludC54KSB8fCAo
eSAhPSBhUG9pbnQueSkpOwogIH0KICBuc0Zsb2F0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IG5zRmxv
YXRQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gbnNGbG9hdFBvaW50KHggKyBhUG9p
bnQueCwgeSArIGFQb2ludC55KTsKICB9CiAgbnNGbG9hdFBvaW50IG9wZXJhdG9yLShjb25zdCBu
c0Zsb2F0UG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIG5zRmxvYXRQb2ludCh4IC0g
YVBvaW50LngsIHkgLSBhUG9pbnQueSk7CiAgfQogIG5zRmxvYXRQb2ludCYgb3BlcmF0b3IrPShj
b25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgewogICAgeCArPSBhUG9pbnQueDsKICAgIHkgKz0g
YVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIG5zRmxvYXRQb2ludCYgb3BlcmF0b3It
PShjb25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgewogICAgeCAtPSBhUG9pbnQueDsKICAgIHkg
LT0gYVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKCgoKCgpzdHJ1Y3QgbnNQYXRo
UG9pbnQ6IHB1YmxpYyBuc0Zsb2F0UG9pbnR7CgogIFBSQm9vbCBtSXNPbkN1cnZlOwoKCiAgbnNQ
YXRoUG9pbnQoKSB7fQogIG5zUGF0aFBvaW50KGNvbnN0IG5zUGF0aFBvaW50JiBhUG9pbnQpIHt4
ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQueTttSXNPbkN1cnZlPWFQb2ludC5tSXNPbkN1cnZlO30K
ICBuc1BhdGhQb2ludChmbG9hdCBhWCwgZmxvYXQgYVkpIHt4ID0gYVg7IHkgPSBhWTttSXNPbkN1
cnZlPTE7fQogIG5zUGF0aFBvaW50KGZsb2F0IGFYLCBmbG9hdCBhWSxQUkJvb2wgYUlzT25DdXJ2
ZSkge3ggPSBhWDsgeSA9IGFZO21Jc09uQ3VydmU9YUlzT25DdXJ2ZTt9Cgp9OwojIDI3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zUmVjdC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Jl
Y3QuaCIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNSZWN0
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjkgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1BvaW50LmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVj
dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU2l6ZS5oIiAxCiMgMjYgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1NpemUuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNDb29yZC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1NpemUu
aCIgMgoKCgoKc3RydWN0IG5zU2l6ZSB7CiAgbnNjb29yZCB3aWR0aCwgaGVpZ2h0OwoKCiAgbnNT
aXplKCkge30KICBuc1NpemUoY29uc3QgbnNTaXplJiBhU2l6ZSkge3dpZHRoID0gYVNpemUud2lk
dGg7IGhlaWdodCA9IGFTaXplLmhlaWdodDt9CiAgbnNTaXplKG5zY29vcmQgYVdpZHRoLCBuc2Nv
b3JkIGFIZWlnaHQpIHt3aWR0aCA9IGFXaWR0aDsgaGVpZ2h0ID0gYUhlaWdodDt9CgogIHZvaWQg
U2l6ZVRvKG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHt3aWR0aCA9IGFXaWR0aDsg
aGVpZ2h0ID0gYUhlaWdodDt9CiAgdm9pZCBTaXplQnkobnNjb29yZCBhRGVsdGFXaWR0aCwgbnNj
b29yZCBhRGVsdGFIZWlnaHQpIHt3aWR0aCArPSBhRGVsdGFXaWR0aDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCArPSBhRGVs
dGFIZWlnaHQ7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5zU2l6ZSYgYVNpemUpIGNv
bnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHdpZHRoID09IGFTaXplLndpZHRoKSAmJiAoaGVp
Z2h0ID09IGFTaXplLmhlaWdodCkpOwogIH0KICBQUkJvb2wgb3BlcmF0b3IhPShjb25zdCBuc1Np
emUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh3aWR0aCAhPSBhU2l6ZS53
aWR0aCkgfHwgKGhlaWdodCAhPSBhU2l6ZS5oZWlnaHQpKTsKICB9CiAgbnNTaXplIG9wZXJhdG9y
Kyhjb25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4gbnNTaXplKHdpZHRoICsg
YVNpemUud2lkdGgsIGhlaWdodCArIGFTaXplLmhlaWdodCk7CiAgfQogIG5zU2l6ZSBvcGVyYXRv
ci0oY29uc3QgbnNTaXplJiBhU2l6ZSkgY29uc3QgewogICAgcmV0dXJuIG5zU2l6ZSh3aWR0aCAt
IGFTaXplLndpZHRoLCBoZWlnaHQgLSBhU2l6ZS5oZWlnaHQpOwogIH0KICBuc1NpemUmIG9wZXJh
dG9yKz0oY29uc3QgbnNTaXplJiBhU2l6ZSkge3dpZHRoICs9IGFTaXplLndpZHRoOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ICs9IGFTaXplLmhlaWdo
dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAqdGhp
czt9CiAgbnNTaXplJiBvcGVyYXRvci09KGNvbnN0IG5zU2l6ZSYgYVNpemUpIHt3aWR0aCAtPSBh
U2l6ZS53aWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
aWdodCAtPSBhU2l6ZS5oZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7fQp9OwojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNSZWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNYXJnaW4uaCIgMQoj
IDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNYXJnaW4uaCIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc01hcmdpbi5oIiAyCgpzdHJ1Y3QgbnNNYXJnaW4gewogIG5zY29vcmQgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tOwoKCiAgbnNNYXJnaW4oKSB7fQogIG5zTWFyZ2luKGNvbnN0IG5zTWFyZ2lu
JiBhTWFyZ2luKSB7KnRoaXMgPSBhTWFyZ2luO30KICBuc01hcmdpbihuc2Nvb3JkIGFMZWZ0LCBu
c2Nvb3JkIGFUb3AsCiAgICAgICAgICAgbnNjb29yZCBhUmlnaHQsIG5zY29vcmQgYUJvdHRvbSkg
e2xlZnQgPSBhTGVmdDsgdG9wID0gYVRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmlnaHQgPSBhUmlnaHQ7IGJvdHRvbSA9IGFCb3R0b207fQoKICB2b2lk
IFNpemVUbyhuc2Nvb3JkIGFMZWZ0LCBuc2Nvb3JkIGFUb3AsCiAgICAgICAgICAgICAgbnNjb29y
ZCBhUmlnaHQsIG5zY29vcmQgYUJvdHRvbSkge2xlZnQgPSBhTGVmdDsgdG9wID0gYVRvcDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBhUmln
aHQ7IGJvdHRvbSA9IGFCb3R0b207fQogIHZvaWQgU2l6ZUJ5KG5zY29vcmQgYUxlZnQsIG5zY29v
cmQgYVRvcCwKICAgICAgICAgICAgICBuc2Nvb3JkIGFSaWdodCwgbnNjb29yZCBhQm90dG9tKSB7
bGVmdCArPSBhTGVmdDsgdG9wICs9IGFUb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJpZ2h0ICs9IGFSaWdodDsgYm90dG9tICs9IGFCb3R0b207fQoK
CgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAg
ICByZXR1cm4gKFBSQm9vbCkgKChsZWZ0ID09IGFNYXJnaW4ubGVmdCkgJiYgKHRvcCA9PSBhTWFy
Z2luLnRvcCkgJiYKICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0ID09IGFNYXJnaW4ucmlnaHQp
ICYmIChib3R0b20gPT0gYU1hcmdpbi5ib3R0b20pKTsKICB9CiAgUFJCb29sIG9wZXJhdG9yIT0o
Y29uc3QgbnNNYXJnaW4mIGFNYXJnaW4pIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKGxl
ZnQgIT0gYU1hcmdpbi5sZWZ0KSB8fCAodG9wICE9IGFNYXJnaW4udG9wKSB8fAogICAgICAgICAg
ICAgICAgICAgICAocmlnaHQgIT0gYU1hcmdpbi5yaWdodCkgfHwgKGJvdHRvbSAhPSBhTWFyZ2lu
LmJvdHRvbSkpOwogIH0KICBuc01hcmdpbiBvcGVyYXRvcisoY29uc3QgbnNNYXJnaW4mIGFNYXJn
aW4pIGNvbnN0IHsKICAgIHJldHVybiBuc01hcmdpbihsZWZ0ICsgYU1hcmdpbi5sZWZ0LCB0b3Ag
KyBhTWFyZ2luLnRvcCwKICAgICAgICAgICAgICAgICAgICByaWdodCArIGFNYXJnaW4ucmlnaHQs
IGJvdHRvbSArIGFNYXJnaW4uYm90dG9tKTsKICB9CiAgbnNNYXJnaW4gb3BlcmF0b3ItKGNvbnN0
IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAgICByZXR1cm4gbnNNYXJnaW4obGVmdCAtIGFN
YXJnaW4ubGVmdCwgdG9wIC0gYU1hcmdpbi50b3AsCiAgICAgICAgICAgICAgICAgICAgcmlnaHQg
LSBhTWFyZ2luLnJpZ2h0LCBib3R0b20gLSBhTWFyZ2luLmJvdHRvbSk7CiAgfQogIG5zTWFyZ2lu
JiBvcGVyYXRvcis9KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSB7bGVmdCArPSBhTWFyZ2luLmxl
ZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Ag
Kz0gYU1hcmdpbi50b3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByaWdodCArPSBhTWFyZ2luLnJpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tICs9IGFNYXJnaW4uYm90dG9tOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzO30K
ICBuc01hcmdpbiYgb3BlcmF0b3ItPShjb25zdCBuc01hcmdpbiYgYU1hcmdpbikge2xlZnQgLT0g
YU1hcmdpbi5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9wIC09IGFNYXJnaW4udG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmlnaHQgLT0gYU1hcmdpbi5yaWdodDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSAtPSBhTWFyZ2luLmJvdHRv
bTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAqdGhpczt9Cn07CiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaXRDb252ZXJzaW9uLmgiIDEKIyAyNSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVW5pdENvbnZlcnNpb24uaCIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zVW5pdENvbnZlcnNpb24uaCIgMgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwoj
IDI3ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0
cy9odWdlX3ZhbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIv
dXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAyIDMKIyAzNCAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMwojIDM4ICIvdXNyL2lu
Y2x1ZGUvbWF0aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAz
CiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBlZGVmIGxvbmcgZG91Ymxl
IGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90OwojIDQxICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNh
bGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2lu
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBh
dGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19h
dGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBj
b3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRh
biAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19z
aW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3Vi
bGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
Y29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0
YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g
ZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDEw
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgcG93MTAgKGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgpleHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25l
bnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4
cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwg
ZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9f
eCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGV4cG0xIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChkb3VibGUgX194KSB0aHJv
dyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxv
Z2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv
dWJsZSBsb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
Y2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jZWlsIChkb3VibGUgX194KSB0aHJv
dyAoKTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29y
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91
YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4
dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGluZm5h
biAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGRvdWJsZSBfX2luZm5hbiAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBf
X3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY29weXNp
Z24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChf
X2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgoKZXh0ZXJuIGludCBfX2lzbmFuIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUg
ajAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMCAoZG91YmxlKSB0aHJvdyAo
KTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ox
IChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19qbiAoaW50LCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91
YmxlIHkwIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJsZSkgdGhy
b3cgKCk7CmV4dGVybiBkb3VibGUgeTEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X195MSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9feW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gZG91YmxlIGVyZiAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAo
ZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBsZ2Ft
bWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fdGdhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1t
YSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3VibGUpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2Ft
cCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2ln
bmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHRhZnRlciAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKZXh0ZXJuIGRvdWJsZSBuZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25l
eHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3Vi
bGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3Vi
bGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChk
b3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91
YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGRvdWJsZSByb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19y
b3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJs
ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJs
ZSBfX3RydW5jIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgpleHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50
ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJp
bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUgX194KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGludCBfX2xyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25n
IGxvbmcgaW50IGxscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25n
IGludCBfX2xscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZk
aW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZmRp
bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXgg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWluIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3Np
ZnkgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIGZtYSAoZG91
YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19mbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDY0
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRl
L2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBm
bG9hdCBhc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZs
b2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQg
Y29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19zaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwg
ZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194
LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZs
b2F0IGNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NoZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxv
YXQgdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RhbmhmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
ZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luaGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4
cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBmbG9hdCBwb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X3BvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxv
YXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mcmV4cGYg
KGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbGRl
eHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
bGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv
YXQgbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZs
b2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGZsb2F0IGV4cG0xZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xv
Z2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CgpleHRlcm4gZmxvYXQgbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2xvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgcG93ZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19oeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY2Jy
dGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgX19pc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2lu
ZmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgpleHRlcm4gaW50IGZpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBpbmZuYW5mIChpbnQgX19lcnJv
cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19p
bmZuYW5mIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpl
eHRlcm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQg
Y29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQg
X195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxv
YXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25h
bmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChmbG9h
dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4g
ZmxvYXQgam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQs
IGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX195MGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZs
b2F0IHluZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBm
bG9hdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgZXJmY2Yg
KGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsK
ZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdh
bW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAo
ZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50
ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwg
aW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVy
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9f
bmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0
IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQg
X194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9f
eCwgZmxvYXQgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBf
X3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gs
IGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoK
CgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJv
dW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9h
dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBm
bG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVv
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRl
cm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25n
IGludCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91
bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAg
ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRmIChm
bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQg
X196KSB0aHJvdyAoKTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgOTkgIi91c3Iv
aW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAz
CiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJs
ZSBhY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
YWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNp
bmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5s
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcg
ZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
bG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRv
dWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X190YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3Ns
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nv
c3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
bG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX190YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
YXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0
YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRh
bmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBl
eHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMTBs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAxMGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxv
bmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBv
bmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUg
X194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cg
KCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19sb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
aHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3Zh
bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBf
X2Zpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVs
IChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgaW5mbmFubCAoaW50IF9fZXJyb3IpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faW5m
bmFubCAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgpleHRlcm4gbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25p
ZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
c2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29w
eXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29u
c3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5sIChsb25n
IGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMGwgKGxvbmcgZG91YmxlKSB0aHJv
dyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19qMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
ZG91YmxlIGpubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2pubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5
MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTBsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKGxvbmcgZG91YmxlKSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7
CmV4dGVybiBsb25nIGRvdWJsZSB5bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91Ymxl
IGVyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNs
IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBkb3VibGUpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19z
aWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9uZyBk
b3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJs
ZSByaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
cmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5l
eHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRlcmwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv
dWJsZSBzY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBkb3Vi
bGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJubCAo
bG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsbmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
c2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RydW5jbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9s
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGltbCAobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWF4bCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWlubCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lm
eWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9uZyBkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25n
IGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3Vi
bGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgMTAwICIv
dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0
ZXJuIGludCBzaWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewog
ICAgRlBfTkFOLAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9S
TUFMLAoKICAgIEZQX05PUk1BTAoKICB9OwojIDI0MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0
eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJ
WF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9O
X1RZUEUgX0xJQl9WRVJTSU9OOwojIDI2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3Qg
X19leGNlcHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3Vi
bGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVy
biBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMzUw
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGlu
ZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGlu
ZSBpbnQKX19zaWduYml0ZiAoZmxvYXQgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1
bmlvbiB7IGZsb2F0IF9fZjsgaW50IF9faTsgfSBfX3UgPSB7IF9fZjogX194IH07CiAgcmV0dXJu
IF9fdS5fX2kgPCAwOwp9Cl9faW5saW5lIGludApfX3NpZ25iaXQgKGRvdWJsZSBfX3gpIHRocm93
ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsgfSBf
X3UgPSB7IF9fZDogX194IH07CiAgcmV0dXJuIF9fdS5fX2lbMV0gPCAwOwp9Cl9faW5saW5lIGlu
dApfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBfX2V4dGVuc2lvbl9f
IHVuaW9uIHsgbG9uZyBkb3VibGUgX19sOyBpbnQgX19pWzNdOyB9IF9fdSA9IHsgX19sOiBfX3gg
fTsKICByZXR1cm4gKF9fdS5fX2lbMl0gJiAweDgwMDApICE9IDA7Cn0KIyAyOTEgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSkg
dGhyb3cgKCk7IF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy
ZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBfX2lu
bGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0KSB0aHJvdyAoKTsgX19pbmxpbmUgZmxvYXQgX19zZ25m
IChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4g
MC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25nIGRv
dWJsZSkgdGhyb3cgKCk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEu
MCA6IC0xLjApOyB9CiMgNDc1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19p
bmxpbmUgZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl
Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIg
OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVy
biBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gp
IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGls
ZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAi
c3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbjJsIChs
b25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsg
fQpfX2lubGluZSBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20g
X192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIg
KF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KCgpfX2lubGluZSBkb3VibGUgZm1v
ZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVh
eFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAi
dSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQg
Zm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3Rzdwkl
JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks
ICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25n
IGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJ
ZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChf
X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3Zh
bHVlOyB9CiMgNDkwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUg
ZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVz
dWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIg
KF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9f
ICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0
OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz
cXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQpf
X2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0
IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoKCl9f
aW5saW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0
aW5fZmFicyAoX194KTsgfQpfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAo
KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9feCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUg
ZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNs
IChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpOyB9CiMgNTE2ICIvdXNyL2lu
Y2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGF0YW4gKGRvdWJsZSBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEp
Iik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0
aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm
bGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJl
dHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDog
InN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQoKX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24x
bCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbjFsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcgZG91
YmxlIF9feGxkOyB1bnNpZ25lZCBpbnQgX194aVszXTsgfSBfX24gPSB7IF9feGxkOiBfX3ggfTsg
X19uLl9feGlbMl0gPSAoX19uLl9feGlbMl0gJiAweDgwMDApIHwgMHgzZmZmOyBfX24uX194aVsx
XSA9IDB4ODAwMDAwMDA7IF9fbi5fX3hpWzBdID0gMDsgcmV0dXJuIF9fbi5fX3hsZDsgfQojIDU0
MiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBmbG9v
ciAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf
X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo
b3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9f
Y3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGls
ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5k
aW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZs
ZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0
IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs
dWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1t
IiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAo
ImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl
ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUg
bG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsg
X192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAo
ImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAw
eDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBf
X2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7
IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192
YWx1ZTsgfQojIDU1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l
IGRvdWJsZSBjZWlsIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi
IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh
dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p
bmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0
aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3
ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsg
X19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9f
dm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20g
X192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9
IF9faW5saW5lIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp
bnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192
b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4
ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
d3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw
IiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyBy
ZXR1cm4gX192YWx1ZTsgfQojIDU3MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAz
Cl9faW5saW5lIGRvdWJsZQpsZGV4cCAoZG91YmxlIF9feCwgaW50IF9feSkgdGhyb3cgKCkKewog
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2Fs
ZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkp
OyByZXR1cm4gX192YWx1ZTsKfQojIDU4OSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5o
IiAzCl9faW5saW5lIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAx
LjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2Ug
X19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAi
PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBf
X2lubGluZSBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIx
MzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20g
X192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChf
X3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGlu
ZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAx
LjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2Ug
X19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAi
PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfQoj
IDYwMyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBh
c2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf
X2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAq
IF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGZs
b2F0IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
eSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAo
X195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0gX19pbmxp
bmUgbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAq
IF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFs
IChfX3gpKTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAo
KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194
ICsgMS4wKSk7IH0gX19pbmxpbmUgZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpIHsg
cmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAx
LjApKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwg
KF9feCArIDEuMCkpOyB9CgoKX19pbmxpbmUgZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0aHJv
dyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAt
MC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gp
OyB9IF9faW5saW5lIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgt
KF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9IF9faW5saW5lIGxv
bmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9f
eSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCgpfX2lubGluZSBk
b3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9f
c3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gX19pbmxpbmUgZmxvYXQgaHlwb3RmIChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194
ICsgX195ICogX195KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBf
X3ggKyBfX3kgKiBfX3kpOyB9CgpfX2lubGluZSBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkgdGhy
b3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVu
ayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp
bmUgZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChf
X3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0
IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9f
dmFsdWU7IH0KIyA2MzMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGlu
ZSBmbG9hdApsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9feSkgdGhyb3cgKCkKewogIHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQi
IChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkpOyByZXR1cm4g
X192YWx1ZTsKfQoKX19pbmxpbmUgbG9uZyBkb3VibGUKbGRleHBsIChsb25nIGRvdWJsZSBfX3gs
IGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2Fz
bSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1
IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KIyA2NTcgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25nIGludApscmludGYgKGZsb2F0
IF9feCkgdGhyb3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGls
ZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7
IHJldHVybiBfX2xyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50IChkb3VibGUgX194
KSB0aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18g
KCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0
dXJuIF9fbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVf
XyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyBy
ZXR1cm4gX19scmludHJlczsKfQojIDY4MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5o
IiAzCl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKQp7
CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0
cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4g
X19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnQgKGRvdWJsZSBfX3gp
IHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0
Iik7IHJldHVybiBfX2xscmludHJlczsKfQpfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7
IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykg
OiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9CgoKCgoKCgpfX2lubGlu
ZSBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdpc3Rl
ciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0
aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFi
IiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIg
KF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgZHJlbWYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyBy
ZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxu
XHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSks
ICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1
cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJl
Z2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5c
dCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwg
Ij0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVy
biBfX3ZhbHVlOyB9CiMgNzE1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19p
bmxpbmUgaW50Cl9fZmluaXRlIChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgcmV0dXJuIChfX2V4
dGVuc2lvbl9fCiAgICAgICAgICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsg
fSkge19fZDogX194fSkuX19pWzFdCiAgICAgICAgICAgICB8IDB4ODAwZmZmZmZ1KSArIDEpID4+
IDMxKSk7Cn0KIyAzNTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDQxMSAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMwp9CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaXRDb252
ZXJzaW9uLmgiIDIKIyAzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVW5pdENvbnZlcnNp
b24uaCIKaW5saW5lIG5zY29vcmQgTlNUb0Nvb3JkRmxvb3IoZmxvYXQgYVZhbHVlKQp7CiAgcmV0
dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gbnNjb29yZChhVmFsdWUpIDogbnNjb29yZChhVmFsdWUg
LSAwLjk5OTk5OTk5OTk5OTk5OTlmKSk7Cn0KCmlubGluZSBuc2Nvb3JkIE5TVG9Db29yZENlaWwo
ZmxvYXQgYVZhbHVlKQp7CiAgcmV0dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gbnNjb29yZChhVmFs
dWUgKyAwLjk5OTk5OTk5OTk5OTk5OTlmKSA6IG5zY29vcmQoYVZhbHVlKSk7Cn0KCmlubGluZSBu
c2Nvb3JkIE5TVG9Db29yZFJvdW5kKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0g
YVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlICsgMC41ZikgOiBuc2Nvb3JkKGFWYWx1ZSAtIDAuNWYp
KTsKfQoKaW5saW5lIG5zY29vcmQgTlNUb0Nvb3JkUm91bmRFeGNsdXNpdmUoZmxvYXQgYVZhbHVl
KQp7CiAgcmV0dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gbnNjb29yZChhVmFsdWUgKyAwLjQ5OTk5
OTk5OTk5OTk5OTlmKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZChhVmFs
dWUgLSAwLjQ5OTk5OTk5OTk5OTk5OTlmKSk7Cn0KCgoKCgppbmxpbmUgUFJJbnQzMiBOU1RvSW50
Rmxvb3IoZmxvYXQgYVZhbHVlKQp7CiAgcmV0dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gUFJJbnQz
MihhVmFsdWUpIDogUFJJbnQzMihhVmFsdWUgLSAwLjk5OTk5OTk5OTk5OTk5OTlmKSk7Cn0KCmlu
bGluZSBQUkludDMyIE5TVG9JbnRDZWlsKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYg
PD0gYVZhbHVlKSA/IFBSSW50MzIoYVZhbHVlICsgMC45OTk5OTk5OTk5OTk5OTk5ZikgOiBQUklu
dDMyKGFWYWx1ZSkpOwp9CgppbmxpbmUgUFJJbnQzMiBOU1RvSW50Um91bmQoZmxvYXQgYVZhbHVl
KQp7CiAgcmV0dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gUFJJbnQzMihhVmFsdWUgKyAwLjVmKSA6
IFBSSW50MzIoYVZhbHVlIC0gMC41ZikpOwp9CgppbmxpbmUgUFJJbnQzMiBOU1RvSW50Um91bmRF
eGNsdXNpdmUoZmxvYXQgYVZhbHVlKQp7CiAgcmV0dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gUFJJ
bnQzMihhVmFsdWUgKyAwLjQ5OTk5OTk5OTk5OTk5OTlmKSA6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJJbnQzMihhVmFsdWUgLSAwLjQ5OTk5OTk5OTk5OTk5OTlmKSk7Cn0KCgoKCgpp
bmxpbmUgbnNjb29yZCBOU0Zsb2F0UG9pbnRzVG9Ud2lwcyhmbG9hdCBhUG9pbnRzKQp7CiAgcmV0
dXJuIE5TVG9Db29yZFJvdW5kKGFQb2ludHMgKiAyMC4wZik7Cn0KCmlubGluZSBuc2Nvb3JkIE5T
SW50UG9pbnRzVG9Ud2lwcyhQUkludDMyIGFQb2ludHMpCnsKICByZXR1cm4gbnNjb29yZChhUG9p
bnRzICogMjApOwp9CgppbmxpbmUgUFJJbnQzMiBOU1R3aXBzVG9JbnRQb2ludHMobnNjb29yZCBh
VHdpcHMpCnsKICByZXR1cm4gTlNUb0ludFJvdW5kKGFUd2lwcyAvIDIwLjBmKTsKfQoKaW5saW5l
IFBSSW50MzIgTlNUd2lwc1RvRmxvb3JJbnRQb2ludHMobnNjb29yZCBhVHdpcHMpCnsKICByZXR1
cm4gTlNUb0ludEZsb29yKGFUd2lwcyAvIDIwLjBmKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUd2lw
c1RvQ2VpbEludFBvaW50cyhuc2Nvb3JkIGFUd2lwcykKewogIHJldHVybiBOU1RvSW50Q2VpbChh
VHdpcHMgLyAyMC4wZik7Cn0KCmlubGluZSBmbG9hdCBOU1R3aXBzVG9GbG9hdFBvaW50cyhuc2Nv
b3JkIGFUd2lwcykKewogIHJldHVybiAoZmxvYXQoYVR3aXBzKSAvIDIwLjBmKTsKfQoKCgoKaW5s
aW5lIG5zY29vcmQgTlNGbG9hdFBpeGVsc1RvVHdpcHMoZmxvYXQgYVBpeGVscywgZmxvYXQgYVR3
aXBzUGVyUGl4ZWwpCnsKICByZXR1cm4gTlNUb0Nvb3JkUm91bmQoYVBpeGVscyAqIGFUd2lwc1Bl
clBpeGVsKTsKfQoKaW5saW5lIG5zY29vcmQgTlNJbnRQaXhlbHNUb1R3aXBzKFBSSW50MzIgYVBp
eGVscywgZmxvYXQgYVR3aXBzUGVyUGl4ZWwpCnsKICByZXR1cm4gTlNUb0Nvb3JkUm91bmQoZmxv
YXQoYVBpeGVscykgKiBhVHdpcHNQZXJQaXhlbCk7Cn0KCmlubGluZSBmbG9hdCBOU1R3aXBzVG9G
bG9hdFBpeGVscyhuc2Nvb3JkIGFUd2lwcywgZmxvYXQgYVBpeGVsc1BlclR3aXApCnsKICByZXR1
cm4gKGZsb2F0KGFUd2lwcykgKiBhUGl4ZWxzUGVyVHdpcCk7Cn0KCmlubGluZSBQUkludDMyIE5T
VHdpcHNUb0ludFBpeGVscyhuc2Nvb3JkIGFUd2lwcywgZmxvYXQgYVBpeGVsc1BlclR3aXApCnsK
ICByZXR1cm4gTlNUb0ludFJvdW5kKGZsb2F0KGFUd2lwcykgKiBhUGl4ZWxzUGVyVHdpcCk7Cn0K
CgoKCmlubGluZSBuc2Nvb3JkIE5TVW5pdHNUb1R3aXBzKGZsb2F0IGFWYWx1ZSwgZmxvYXQgYVBv
aW50c1BlclVuaXQpCnsKICByZXR1cm4gTlNUb0Nvb3JkUm91bmQoYVZhbHVlICogYVBvaW50c1Bl
clVuaXQgKiAyMC4wZik7Cn0KCmlubGluZSBmbG9hdCBOU1R3aXBzVG9Vbml0cyhuc2Nvb3JkIGFU
d2lwcywgZmxvYXQgYVVuaXRzUGVyUG9pbnQpCnsKICByZXR1cm4gKGFUd2lwcyAqIChhVW5pdHNQ
ZXJQb2ludCAvIDIwLjBmKSk7Cn0KIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVj
dC5oIiAyCgpzdHJ1Y3QgbnNSZWN0IHsKICBuc2Nvb3JkIHgsIHk7CiAgbnNjb29yZCB3aWR0aCwg
aGVpZ2h0OwoKCiAgbnNSZWN0KCkgOiB4KDApLCB5KDApLCB3aWR0aCgwKSwgaGVpZ2h0KDApIHt9
CiAgbnNSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QpIHsqdGhpcyA9IGFSZWN0O30KICBuc1JlY3Qo
Y29uc3QgbnNQb2ludCYgYU9yaWdpbiwgY29uc3QgbnNTaXplICZhU2l6ZSkge3ggPSBhT3JpZ2lu
Lng7IHkgPSBhT3JpZ2luLnk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCA9IGFTaXplLndpZHRoOyBoZWlnaHQgPSBhU2l6ZS5oZWln
aHQ7fQogIG5zUmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwgbnNj
b29yZCBhSGVpZ2h0KSB7eCA9IGFYOyB5ID0gYVk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGFXaWR0aDsg
aGVpZ2h0ID0gYUhlaWdodDt9CgoKCiAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7CiAgICByZXR1
cm4gKFBSQm9vbCkgKCh3aWR0aCA8PSAwKSB8fCAoaGVpZ2h0IDw9IDApKTsKICB9CiAgdm9pZCBF
bXB0eSgpIHt3aWR0aCA9IGhlaWdodCA9IDA7fQoKCiAgUFJCb29sIENvbnRhaW5zKGNvbnN0IG5z
UmVjdCYgYVJlY3QpIGNvbnN0OwogIFBSQm9vbCBDb250YWlucyhuc2Nvb3JkIGFYLCBuc2Nvb3Jk
IGFZKSBjb25zdDsKICBQUkJvb2wgQ29udGFpbnMoY29uc3QgbnNQb2ludCYgYVBvaW50KSBjb25z
dCB7cmV0dXJuIENvbnRhaW5zKGFQb2ludC54LCBhUG9pbnQueSk7fQoKCgogIFBSQm9vbCBJbnRl
cnNlY3RzKGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0OwoKCgoKCgogIFBSQm9vbCBJbnRlcnNl
Y3RSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QxLCBjb25zdCBuc1JlY3QmIGFSZWN0Mik7CgoKCgoK
CiAgUFJCb29sIFVuaW9uUmVjdChjb25zdCBuc1JlY3QmIGFSZWN0MSwgY29uc3QgbnNSZWN0JiBh
UmVjdDIpOwoKCiAgdm9pZCBTZXRSZWN0KG5zY29vcmQgYVgsIG5zY29vcmQgYVksIG5zY29vcmQg
YVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHsKICAgIHggPSBhWDsgeSA9IGFZOyB3aWR0aCA9IGFX
aWR0aDsgaGVpZ2h0ID0gYUhlaWdodDsKICB9CiAgdm9pZCBNb3ZlVG8obnNjb29yZCBhWCwgbnNj
b29yZCBhWSkge3ggPSBhWDsgeSA9IGFZO30KICB2b2lkIE1vdmVUbyhjb25zdCBuc1BvaW50JiBh
UG9pbnQpIHt4ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQueTt9CiAgdm9pZCBNb3ZlQnkobnNjb29y
ZCBhRHgsIG5zY29vcmQgYUR5KSB7eCArPSBhRHg7IHkgKz0gYUR5O30KICB2b2lkIFNpemVUbyhu
c2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSB7d2lkdGggPSBhV2lkdGg7IGhlaWdodCA9
IGFIZWlnaHQ7fQogIHZvaWQgU2l6ZVRvKGNvbnN0IG5zU2l6ZSYgYVNpemUpIHtTaXplVG8oYVNp
emUud2lkdGgsIGFTaXplLmhlaWdodCk7fQogIHZvaWQgU2l6ZUJ5KG5zY29vcmQgYURlbHRhV2lk
dGgsIG5zY29vcmQgYURlbHRhSGVpZ2h0KSB7d2lkdGggKz0gYURlbHRhV2lkdGg7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQg
Kz0gYURlbHRhSGVpZ2h0O30KCgogIHZvaWQgSW5mbGF0ZShuc2Nvb3JkIGFEeCwgbnNjb29yZCBh
RHkpOwogIHZvaWQgSW5mbGF0ZShjb25zdCBuc1NpemUmIGFTaXplKSB7SW5mbGF0ZShhU2l6ZS53
aWR0aCwgYVNpemUuaGVpZ2h0KTt9CiAgdm9pZCBJbmZsYXRlKGNvbnN0IG5zTWFyZ2luJiBhTWFy
Z2luKTsKCgogIHZvaWQgRGVmbGF0ZShuc2Nvb3JkIGFEeCwgbnNjb29yZCBhRHkpOwogIHZvaWQg
RGVmbGF0ZShjb25zdCBuc1NpemUmIGFTaXplKSB7RGVmbGF0ZShhU2l6ZS53aWR0aCwgYVNpemUu
aGVpZ2h0KTt9CiAgdm9pZCBEZWZsYXRlKGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKTsKCgoKICBQ
UkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdCB7CiAgICByZXR1cm4g
KFBSQm9vbCkgKChJc0VtcHR5KCkgJiYgYVJlY3QuSXNFbXB0eSgpKSB8fAogICAgICAgICAgICAg
ICAgICAgICAoKHggPT0gYVJlY3QueCkgJiYgKHkgPT0gYVJlY3QueSkgJiYKICAgICAgICAgICAg
ICAgICAgICAgICh3aWR0aCA9PSBhUmVjdC53aWR0aCkgJiYgKGhlaWdodCA9PSBhUmVjdC5oZWln
aHQpKSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0
IHsKICAgIHJldHVybiAoUFJCb29sKSAhb3BlcmF0b3I9PShhUmVjdCk7CiAgfQogIG5zUmVjdCBv
cGVyYXRvcisoY29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIG5zUmVjdCh4
ICsgYVJlY3QueCwgeSArIGFSZWN0LnksCiAgICAgICAgICAgICAgICAgIHdpZHRoICsgYVJlY3Qu
d2lkdGgsIGhlaWdodCArIGFSZWN0LmhlaWdodCk7CiAgfQogIG5zUmVjdCBvcGVyYXRvci0oY29u
c3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIG5zUmVjdCh4IC0gYVJlY3QueCwg
eSAtIGFSZWN0LnksCiAgICAgICAgICAgICAgICAgIHdpZHRoIC0gYVJlY3Qud2lkdGgsIGhlaWdo
dCAtIGFSZWN0LmhlaWdodCk7CiAgfQogIG5zUmVjdCYgb3BlcmF0b3IrPShjb25zdCBuc1BvaW50
JiBhUG9pbnQpIHt4ICs9IGFQb2ludC54OyB5ICs9IGFQb2ludC55OyByZXR1cm4gKnRoaXM7fQog
IG5zUmVjdCYgb3BlcmF0b3ItPShjb25zdCBuc1BvaW50JiBhUG9pbnQpIHt4IC09IGFQb2ludC54
OyB5IC09IGFQb2ludC55OyByZXR1cm4gKnRoaXM7fQoKICBuc1JlY3QmIG9wZXJhdG9yKj0oY29u
c3QgZmxvYXQgYVNjYWxlKSB7eCA9IE5TVG9Db29yZFJvdW5kKHggKiBhU2NhbGUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gTlNUb0Nvb3JkUm91bmQoeSAq
IGFTY2FsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
ID0gTlNUb0Nvb3JkUm91bmQod2lkdGggKiBhU2NhbGUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBOU1RvQ29vcmRSb3VuZChoZWlnaHQgKiBhU2Nh
bGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnRo
aXM7fQoKICBuc1JlY3QmIFNjYWxlUm91bmRPdXQoY29uc3QgZmxvYXQgYVNjYWxlKTsKICBuc1Jl
Y3QmIFNjYWxlUm91bmRJbihjb25zdCBmbG9hdCBhU2NhbGUpOwoKCiAgbnNjb29yZCBYTW9zdCgp
IGNvbnN0IHtyZXR1cm4geCArIHdpZHRoO30KICBuc2Nvb3JkIFlNb3N0KCkgY29uc3Qge3JldHVy
biB5ICsgaGVpZ2h0O30KfTsKCgpleHRlcm4gRklMRSogb3BlcmF0b3I8PChGSUxFKiBvdXQsIGNv
bnN0IG5zUmVjdCYgcmVjdCk7CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2
ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMQoj
IDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIKIyAxICIvd2luZG93
cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxoYXNoLmgiIDEKIyAz
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIvd2luZG93
cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAz
OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNDb20uaCIgMQojIDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNIYXNodGFibGUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUu
aCIgMQojIDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgNDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgpjbGFzcyBuc0hhc2h0YWJsZTsKY2xhc3Mg
bnNTdHJpbmdLZXk7CgpjbGFzcyBuc0hhc2hLZXkgewpwcm90ZWN0ZWQ6CiAgbnNIYXNoS2V5KHZv
aWQpOwoKcHVibGljOgogIHZpcnR1YWwgfm5zSGFzaEtleSh2b2lkKTsKICB2aXJ0dWFsIFBSVWlu
dDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIFBSQm9vbCBFcXVhbHMoY29u
c3QgbnNIYXNoS2V5ICphS2V5KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc0hhc2hLZXkgKkNsb25l
KCkgY29uc3QgPSAwOwojIDcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUu
aCIKfTsKCgoKdHlwZWRlZiBQUkJvb2wgKCogbnNIYXNodGFibGVFbnVtRnVuYykobnNIYXNoS2V5
ICphS2V5LCB2b2lkICphRGF0YSwgdm9pZCogY2xvc3VyZSk7CgpjbGFzcyBuc0hhc2h0YWJsZSB7
CnByb3RlY3RlZDoKCiAgUFJMb2NrKiBtTG9jazsKICBQTEhhc2hUYWJsZSBtSGFzaHRhYmxlOwog
IFBSQm9vbCBtRW51bWVyYXRpbmc7CgpwdWJsaWM6CiAgbnNIYXNodGFibGUoUFJVaW50MzIgYVNp
emUgPSAxNiwgUFJCb29sIHRocmVhZFNhZmUgPSAwKTsKICB2aXJ0dWFsIH5uc0hhc2h0YWJsZSgp
OwoKICBQUkludDMyIENvdW50KHZvaWQpIHsgcmV0dXJuIG1IYXNodGFibGUubmVudHJpZXM7IH0K
ICBQUkJvb2wgRXhpc3RzKG5zSGFzaEtleSAqYUtleSk7CiAgdm9pZCAqUHV0KG5zSGFzaEtleSAq
YUtleSwgdm9pZCAqYURhdGEpOwogIHZvaWQgKkdldChuc0hhc2hLZXkgKmFLZXkpOwogIHZvaWQg
KlJlbW92ZShuc0hhc2hLZXkgKmFLZXkpOwogIG5zSGFzaHRhYmxlICpDbG9uZSgpOwogIHZvaWQg
RW51bWVyYXRlKG5zSGFzaHRhYmxlRW51bUZ1bmMgYUVudW1GdW5jLCB2b2lkKiBjbG9zdXJlID0g
X19udWxsKTsKICB2b2lkIFJlc2V0KCk7CiAgdm9pZCBSZXNldChuc0hhc2h0YWJsZUVudW1GdW5j
IGRlc3Ryb3lGdW5jLCB2b2lkKiBjbG9zdXJlID0gX19udWxsKTsKfTsKCgoKCgp0eXBlZGVmIHZv
aWQqICgqIG5zSGFzaHRhYmxlQ2xvbmVFbGVtZW50RnVuYykobnNIYXNoS2V5ICphS2V5LCB2b2lk
ICphRGF0YSwgdm9pZCogY2xvc3VyZSk7CgpjbGFzcyBuc09iamVjdEhhc2h0YWJsZSA6IHB1Ymxp
YyBuc0hhc2h0YWJsZSB7CnB1YmxpYzoKICBuc09iamVjdEhhc2h0YWJsZShuc0hhc2h0YWJsZUNs
b25lRWxlbWVudEZ1bmMgY2xvbmVFbGVtZW50RnVuLAogICAgICAgICAgICAgICAgICAgIHZvaWQq
IGNsb25lRWxlbWVudENsb3N1cmUsCiAgICAgICAgICAgICAgICAgICAgbnNIYXNodGFibGVFbnVt
RnVuYyBkZXN0cm95RWxlbWVudEZ1biwKICAgICAgICAgICAgICAgICAgICB2b2lkKiBkZXN0cm95
RWxlbWVudENsb3N1cmUsCiAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVNpemUgPSAxNiwg
UFJCb29sIHRocmVhZFNhZmUgPSAwKTsKICB+bnNPYmplY3RIYXNodGFibGUoKTsKCiAgbnNIYXNo
dGFibGUgKkNsb25lKCk7CiAgdm9pZCBSZXNldCgpOwogIFBSQm9vbCBSZW1vdmVBbmREZWxldGUo
bnNIYXNoS2V5ICphS2V5KTsKCnByb3RlY3RlZDoKICBzdGF0aWMgUFJJbnRuIENvcHlFbGVtZW50
KFBMSGFzaEVudHJ5ICpoZSwgUFJJbnRuIGksIHZvaWQgKmFyZyk7CgogIG5zSGFzaHRhYmxlQ2xv
bmVFbGVtZW50RnVuYyBtQ2xvbmVFbGVtZW50RnVuOwogIHZvaWQqIG1DbG9uZUVsZW1lbnRDbG9z
dXJlOwogIG5zSGFzaHRhYmxlRW51bUZ1bmMgbURlc3Ryb3lFbGVtZW50RnVuOwogIHZvaWQqIG1E
ZXN0cm95RWxlbWVudENsb3N1cmU7Cn07CgoKCgpjbGFzcyBuc0lTdXBwb3J0czsKCmNsYXNzIG5z
U3VwcG9ydHNIYXNodGFibGUKIDogcHJpdmF0ZSBuc0hhc2h0YWJsZQp7CnB1YmxpYzoKICB0eXBl
ZGVmIFBSQm9vbCAoKiBFbnVtRnVuYykgKG5zSGFzaEtleSAqYUtleSwgdm9pZCAqYURhdGEsIHZv
aWQqIGNsb3N1cmUpOwoKICBuc1N1cHBvcnRzSGFzaHRhYmxlKFBSVWludDMyIGFTaXplID0gMTYs
IFBSQm9vbCB0aHJlYWRTYWZlID0gMCkKICAgIDogbnNIYXNodGFibGUoYVNpemUsIHRocmVhZFNh
ZmUpIHt9CiAgfm5zU3VwcG9ydHNIYXNodGFibGUoKTsKCiAgUFJJbnQzMiBDb3VudCAodm9pZCkK
ICB7CiAgICByZXR1cm4gbnNIYXNodGFibGU6OkNvdW50KCk7CiAgfQogIFBSQm9vbCBFeGlzdHMg
KG5zSGFzaEtleSAqYUtleSkKICB7CiAgICByZXR1cm4gbnNIYXNodGFibGU6OkV4aXN0cyAoYUtl
eSk7CiAgfQogIFBSQm9vbCBQdXQgKG5zSGFzaEtleSAqYUtleSwKICAgICAgICAgICAgICBuc0lT
dXBwb3J0cyAqYURhdGEsCiAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKip2YWx1ZSA9IDApOwog
IG5zSVN1cHBvcnRzKiBHZXQgKG5zSGFzaEtleSAqYUtleSk7CiAgUFJCb29sIFJlbW92ZSAobnNI
YXNoS2V5ICphS2V5LCBuc0lTdXBwb3J0cyAqKnZhbHVlID0gMCk7CiAgbnNIYXNodGFibGUgKkNs
b25lKCk7CiAgdm9pZCBFbnVtZXJhdGUgKEVudW1GdW5jIGFFbnVtRnVuYywgdm9pZCogY2xvc3Vy
ZSA9IF9fbnVsbCkKICB7CiAgICBuc0hhc2h0YWJsZTo6RW51bWVyYXRlIChhRW51bUZ1bmMsIGNs
b3N1cmUpOwogIH0KICB2b2lkIFJlc2V0KCk7CgogcHJpdmF0ZToKICBzdGF0aWMgUFJCb29sIFJl
bGVhc2VFbGVtZW50IChuc0hhc2hLZXkgKiwgdm9pZCAqLCB2b2lkICopOwogIHN0YXRpYyBQUklu
dG4gRW51bWVyYXRlQ29weSAoUExIYXNoRW50cnkgKiwgUFJJbnRuLCB2b2lkICopOwp9OwoKCgoK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDE3MSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKCmNsYXNzIG5zSVN1cHBvcnRz
S2V5IDogcHVibGljIG5zSGFzaEtleSB7CnByb3RlY3RlZDoKICBuc0lTdXBwb3J0cyogbUtleTsK
CnB1YmxpYzoKICBuc0lTdXBwb3J0c0tleShuc0lTdXBwb3J0cyoga2V5KSB7CgoKCiAgICBtS2V5
ID0ga2V5OwogICAgbnNfaWZfYWRkcmVmKG1LZXkpOwogIH0KCiAgfm5zSVN1cHBvcnRzS2V5KHZv
aWQpIHsKICAgIGRvIHsgaWYgKG1LZXkpIHsgKG1LZXkpLT5SZWxlYXNlKCk7IChtS2V5KSA9IDA7
IH0gfSB3aGlsZSAoMCk7CiAgfQoKICBQUlVpbnQzMiBIYXNoQ29kZSh2b2lkKSBjb25zdCB7CiAg
ICByZXR1cm4gKFBSVWludDMyKW1LZXk7CiAgfQoKICBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSGFz
aEtleSAqYUtleSkgY29uc3QgewogICAge307CiAgICByZXR1cm4gKG1LZXkgPT0gKChuc0lTdXBw
b3J0c0tleSAqKSBhS2V5KS0+bUtleSk7CiAgfQoKICBuc0hhc2hLZXkgKkNsb25lKCkgY29uc3Qg
ewogICAgcmV0dXJuIG5ldyBuc0lTdXBwb3J0c0tleShtS2V5KTsKICB9Cn07CgoKCgpjbGFzcyBu
c1ZvaWRLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsKcHJvdGVjdGVkOgogIHZvaWQqIG1LZXk7Cgpw
dWJsaWM6CiAgbnNWb2lkS2V5KHZvaWQqIGtleSkgewoKCgogICAgbUtleSA9IGtleTsKICB9Cgog
IFBSVWludDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJVaW50MzIpbUtl
eTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5ICphS2V5KSBjb25zdCB7CiAg
ICB7fTsKICAgIHJldHVybiAobUtleSA9PSAoKGNvbnN0IG5zVm9pZEtleSAqKSBhS2V5KS0+bUtl
eSk7CiAgfQoKICBuc0hhc2hLZXkgKkNsb25lKCkgY29uc3QgewogICAgcmV0dXJuIG5ldyBuc1Zv
aWRLZXkobUtleSk7CiAgfQoKICB2b2lkKiBHZXRWYWx1ZSgpIHsgcmV0dXJuIG1LZXk7IH0KfTsK
CgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUQuaCIgMQojIDIzOCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKCmNsYXNzIG5zSURLZXkgOiBwdWJs
aWMgbnNIYXNoS2V5IHsKcHJvdGVjdGVkOgogIG5zSUQgbUlEOwoKcHVibGljOgogIG5zSURLZXko
Y29uc3QgbnNJRCAmYUlEKSB7CgoKCiAgICBtSUQgPSBhSUQ7CiAgfQoKICBQUlVpbnQzMiBIYXNo
Q29kZSh2b2lkKSBjb25zdCB7CiAgICByZXR1cm4gbUlELm0wOwogIH0KCiAgUFJCb29sIEVxdWFs
cyhjb25zdCBuc0hhc2hLZXkgKmFLZXkpIGNvbnN0IHsKICAgIHt9OwogICAgcmV0dXJuIChtSUQu
RXF1YWxzKCgoY29uc3QgbnNJREtleSAqKSBhS2V5KS0+bUlEKSk7CiAgfQoKICBuc0hhc2hLZXkg
KkNsb25lKCkgY29uc3QgewogICAgcmV0dXJuIG5ldyBuc0lES2V5KG1JRCk7CiAgfQp9OwoKCgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjY4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMgoKCmNsYXNzIG5zQ1N0cmluZ0tleSA6
IHB1YmxpYyBuc0hhc2hLZXkgewpwdWJsaWM6CgogIGVudW0gT3duZXJzaGlwIHsKICAgIE5FVkVS
X09XTiwKICAgIE9XTl9DTE9ORSwKICAgIE9XTgogIH07CgogIG5zQ1N0cmluZ0tleShjb25zdCBj
aGFyKiBzdHIsIFBSSW50MzIgc3RyTGVuID0gLTEsIE93bmVyc2hpcCBvd24gPSBPV05fQ0xPTkUp
OwogIG5zQ1N0cmluZ0tleShjb25zdCBuc0NTdHJpbmcmIHN0cik7CiAgfm5zQ1N0cmluZ0tleSh2
b2lkKTsKCiAgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3Q7CiAgUFJCb29sIEVxdWFscyhj
b25zdCBuc0hhc2hLZXkqIGFLZXkpIGNvbnN0OwogIG5zSGFzaEtleSogQ2xvbmUoKSBjb25zdDsK
CgoKICBjb25zdCBjaGFyKiBHZXRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtU3RyOyB9CiAgUFJV
aW50MzIgR2V0U3RyaW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbVN0ckxlbjsgfQoKcHJvdGVj
dGVkOgogIGNoYXIqIG1TdHI7CiAgUFJVaW50MzIgbVN0ckxlbjsKICBPd25lcnNoaXAgbU93bmVy
c2hpcDsKfTsKCgpjbGFzcyBuc1N0cmluZ0tleSA6IHB1YmxpYyBuc0hhc2hLZXkgewpwdWJsaWM6
CgogIGVudW0gT3duZXJzaGlwIHsKICAgIE5FVkVSX09XTiwKICAgIE9XTl9DTE9ORSwKICAgIE9X
TgogIH07CgogIG5zU3RyaW5nS2V5KGNvbnN0IFBSVW5pY2hhciogc3RyLCBQUkludDMyIHN0ckxl
biA9IC0xLCBPd25lcnNoaXAgb3duID0gT1dOX0NMT05FKTsKICBuc1N0cmluZ0tleShjb25zdCBu
c0FSZWFkYWJsZVN0cmluZyYgc3RyKTsKICB+bnNTdHJpbmdLZXkodm9pZCk7CgogIFBSVWludDMy
IEhhc2hDb2RlKHZvaWQpIGNvbnN0OwogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5KiBh
S2V5KSBjb25zdDsKICBuc0hhc2hLZXkqIENsb25lKCkgY29uc3Q7CgoKCiAgY29uc3QgUFJVbmlj
aGFyKiBHZXRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtU3RyOyB9CiAgUFJVaW50MzIgR2V0U3Ry
aW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbVN0ckxlbjsgfQoKcHJvdGVjdGVkOgogIFBSVW5p
Y2hhciogbVN0cjsKICBQUlVpbnQzMiBtU3RyTGVuOwogIE93bmVyc2hpcCBtT3duZXJzaGlwOwp9
OwoKCmNsYXNzIG5zT3BhcXVlS2V5IDogcHVibGljIG5zSGFzaEtleSB7CnB1YmxpYzoKCiAgZW51
bSBPd25lcnNoaXAgewogICAgTkVWRVJfT1dOLAogICAgT1dOX0NMT05FLAogICAgT1dOCiAgfTsK
CiAgbnNPcGFxdWVLZXkoY29uc3QgY2hhciogYnVmLCBQUlVpbnQzMiBidWZMZW4sIE93bmVyc2hp
cCBvd24gPSBPV05fQ0xPTkUpOwogIH5uc09wYXF1ZUtleSh2b2lkKTsKCiAgUFJVaW50MzIgSGFz
aENvZGUodm9pZCkgY29uc3Q7CiAgUFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hLZXkqIGFLZXkp
IGNvbnN0OwogIG5zSGFzaEtleSogQ2xvbmUoKSBjb25zdDsKCgoKICBjb25zdCBjaGFyKiBHZXRC
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtQnVmOyB9CiAgUFJVaW50MzIgR2V0QnVmZmVyTGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbUJ1ZkxlbjsgfQoKcHJvdGVjdGVkOgogIGNoYXIqIG1CdWY7CiAg
UFJVaW50MzIgbUJ1ZkxlbjsKICBPd25lcnNoaXAgbU93bmVyc2hpcDsKfTsKIyAyOSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIgMgoKCgoKCgoKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIgMQojIDEwICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRE9NVUlFdmVudC5oIiAxCiMgMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01V
SUV2ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUV2ZW50LmgiIDEK
IyAxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUV2ZW50LmgiCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0dWJzLmgiIDEKIyAxNyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL2RvbXN0dWJzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVdyaXRh
YmxlU3RyaW5nLmgiIDEKIyAxOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0dWJzLmgi
IDIKaW5saW5lIFBSQm9vbCBET01TdHJpbmdJc051bGwoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcm
IGFTdHJpbmcpCnsKCiAgcmV0dXJuIDA7Cn0KaW5saW5lIHZvaWQgU2V0RE9NU3RyaW5nVG9OdWxs
KG5zQVdyaXRhYmxlU3RyaW5nJiBhU3RyaW5nKQp7CiAgYVN0cmluZy5UcnVuY2F0ZSgpOwoKfQp0
eXBlZGVmIFBSVWludDY0IERPTVRpbWVTdGFtcDsKCmNsYXNzIG5zSURPTUF0dHI7CgpjbGFzcyBu
c0lET01DREFUQVNlY3Rpb247CgpjbGFzcyBuc0lET01DaGFyYWN0ZXJEYXRhOwoKY2xhc3MgbnNJ
RE9NQ29tbWVudDsKCmNsYXNzIG5zSURPTURPTUltcGxlbWVudGF0aW9uOwoKY2xhc3MgbnNJRE9N
RG9jdW1lbnQ7CgpjbGFzcyBuc0lET01Eb2N1bWVudEZyYWdtZW50OwoKY2xhc3MgbnNJRE9NRG9j
dW1lbnRUeXBlOwoKY2xhc3MgbnNJRE9NRWxlbWVudDsKCmNsYXNzIG5zSURPTUVudGl0eTsKCmNs
YXNzIG5zSURPTUVudGl0eVJlZmVyZW5jZTsKCmNsYXNzIG5zSURPTU5TRG9jdW1lbnQ7CgpjbGFz
cyBuc0lET01OYW1lZE5vZGVNYXA7CgpjbGFzcyBuc0lET01Ob2RlOwoKY2xhc3MgbnNJRE9NTm9k
ZUxpc3Q7CgpjbGFzcyBuc0lET01Ob3RhdGlvbjsKCmNsYXNzIG5zSURPTVByb2Nlc3NpbmdJbnN0
cnVjdGlvbjsKCmNsYXNzIG5zSURPTVRleHQ7CgpjbGFzcyBET01FeGNlcHRpb247CgpjbGFzcyBu
c0lET01TdHlsZVNoZWV0TGlzdDsKCmNsYXNzIG5zSURPTUxpbmtTdHlsZTsKCmNsYXNzIG5zSURP
TVN0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01NZWRpYUxpc3Q7CgpjbGFzcyBuc0lET01BYnN0cmFj
dFZpZXc7CgpjbGFzcyBuc0lET01Eb2N1bWVudFZpZXc7CgpjbGFzcyBuc0lET01XaW5kb3c7Cgpj
bGFzcyBuc0lET01XaW5kb3dJbnRlcm5hbDsKCmNsYXNzIG5zSURPTVdpbmRvd0NvbGxlY3Rpb247
CgpjbGFzcyBuc0lET01QbHVnaW47CgpjbGFzcyBuc0lET01QbHVnaW5BcnJheTsKCmNsYXNzIG5z
SURPTU1pbWVUeXBlOwoKY2xhc3MgbnNJRE9NTWltZVR5cGVBcnJheTsKCmNsYXNzIG5zSURPTUJh
clByb3A7CgpjbGFzcyBuc0lET01OYXZpZ2F0b3I7CgpjbGFzcyBuc0lET01TY3JlZW47CgpjbGFz
cyBuc0lET01IaXN0b3J5OwoKY2xhc3MgbnNJRE9NRXZlbnQ7CgpjbGFzcyBuc0lET01FdmVudFRh
cmdldDsKCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CgpjbGFzcyBuc0lET01IVE1MRWxlbWVu
dDsKCmNsYXNzIG5zSURPTUhUTUxGb3JtRWxlbWVudDsKCmNsYXNzIG5zSURPTUhUTUxDb2xsZWN0
aW9uOwoKY2xhc3MgbnNJRE9NQ1NTVmFsdWU7CgpjbGFzcyBuc0lET01DU1NQcmltaXRpdmVWYWx1
ZTsKCmNsYXNzIG5zSURPTUNTU1J1bGU7CgpjbGFzcyBuc0lET01DU1NSdWxlTGlzdDsKCmNsYXNz
IG5zSURPTUNTU1N0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01DU1NTdHlsZURlY2xhcmF0aW9uOwoK
Y2xhc3MgbnNJRE9NQ291bnRlcjsKCmNsYXNzIG5zSURPTVJlY3Q7CgpjbGFzcyBuc0lET01SR0JD
b2xvcjsKCmNsYXNzIG5zSURPTUNTU1N0eWxlUnVsZTsKCmNsYXNzIG5zSURPTUNTU1N0eWxlUnVs
ZUNvbGxlY3Rpb247CgpjbGFzcyBuc0lET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudDsKCmNsYXNz
IG5zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OwoKY2xhc3MgbnNJRE9NUmFuZ2U7CgpjbGFz
cyBuc0lET01DUk1GT2JqZWN0OwoKY2xhc3MgbnNJRE9NQ3J5cHRvOwoKY2xhc3MgbnNJRE9NUGtj
czExOwojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NRXZlbnQuaCIgMgoKCgoK
CgpjbGFzcyBuc0lET01FdmVudFRhcmdldDsKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSURPTUV2ZW50LmgiCmNsYXNzIG5zSURPTUV2ZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsK
IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsweGE2NmI3YjgwLCAweGZmNDYsIDB4YmQ5NywgeyAweDAwLCAweDgwLCAweDVm
LCAweDhhLCAweGUzLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7
IENBUFRVUklOR19QSEFTRSA9IDFVIH07CgogIGVudW0geyBBVF9UQVJHRVQgPSAyVSB9OwoKICBl
bnVtIHsgQlVCQkxJTkdfUEhBU0UgPSAzVSB9OwoKICBlbnVtIHsgTU9VU0VET1dOID0gMSB9OwoK
ICBlbnVtIHsgTU9VU0VVUCA9IDIgfTsKCiAgZW51bSB7IE1PVVNFT1ZFUiA9IDQgfTsKCiAgZW51
bSB7IE1PVVNFT1VUID0gOCB9OwoKICBlbnVtIHsgTU9VU0VNT1ZFID0gMTYgfTsKCiAgZW51bSB7
IE1PVVNFRFJBRyA9IDMyIH07CgogIGVudW0geyBDTElDSyA9IDY0IH07CgogIGVudW0geyBEQkxD
TElDSyA9IDEyOCB9OwoKICBlbnVtIHsgS0VZRE9XTiA9IDI1NiB9OwoKICBlbnVtIHsgS0VZVVAg
PSA1MTIgfTsKCiAgZW51bSB7IEtFWVBSRVNTID0gMTAyNCB9OwoKICBlbnVtIHsgRFJBR0RST1Ag
PSAyMDQ4IH07CgogIGVudW0geyBGT0NVUyA9IDQwOTYgfTsKCiAgZW51bSB7IEJMVVIgPSA4MTky
IH07CgogIGVudW0geyBTRUxFQ1QgPSAxNjM4NCB9OwoKICBlbnVtIHsgQ0hBTkdFID0gMzI3Njgg
fTsKCiAgZW51bSB7IFJFU0VUID0gNjU1MzYgfTsKCiAgZW51bSB7IFNVQk1JVCA9IDEzMTA3MiB9
OwoKICBlbnVtIHsgU0NST0xMID0gMjYyMTQ0IH07CgogIGVudW0geyBMT0FEID0gNTI0Mjg4IH07
CgogIGVudW0geyBVTkxPQUQgPSAxMDQ4NTc2IH07CgogIGVudW0geyBYRkVSX0RPTkUgPSAyMDk3
MTUyIH07CgogIGVudW0geyBBQk9SVCA9IDQxOTQzMDQgfTsKCiAgZW51bSB7IEVSUk9SID0gODM4
ODYwOCB9OwoKICBlbnVtIHsgTE9DQVRFID0gMTY3NzcyMTYgfTsKCiAgZW51bSB7IE1PVkUgPSAz
MzU1NDQzMiB9OwoKICBlbnVtIHsgUkVTSVpFID0gNjcxMDg4NjQgfTsKCiAgZW51bSB7IEZPUldB
UkQgPSAxMzQyMTc3MjggfTsKCiAgZW51bSB7IEhFTFAgPSAyNjg0MzU0NTYgfTsKCiAgZW51bSB7
IEJBQ0sgPSA1MzY4NzA5MTIgfTsKCiAgZW51bSB7IFRFWFQgPSAxMDczNzQxODI0IH07CgogIGVu
dW0geyBBTFRfTUFTSyA9IDEgfTsKCiAgZW51bSB7IENPTlRST0xfTUFTSyA9IDIgfTsKCiAgZW51
bSB7IFNISUZUX01BU0sgPSA0IH07CgogIGVudW0geyBNRVRBX01BU0sgPSA4IH07CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFR5cGUobnNBV3JpdGFibGVTdHJpbmcgJiBhVHlwZSkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRUYXJnZXQobnNJRE9NRXZlbnRUYXJnZXQgKiAqYVRhcmdldCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50VGFyZ2V0KG5zSURPTUV2ZW50VGFy
Z2V0ICogKmFDdXJyZW50VGFyZ2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9yaWdp
bmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFPcmlnaW5hbFRhcmdldCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudFBoYXNlKFBSVWludDE2ICphRXZlbnRQaGFzZSkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCdWJibGVzKFBSQm9vbCAqYUJ1YmJsZXMpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FuY2VsYWJsZShQUkJvb2wgKmFDYW5jZWxhYmxlKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRpbWVTdGFtcChET01UaW1lU3RhbXAgKmFUaW1l
U3RhbXApID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcFByb3BhZ2F0aW9uKHZvaWQpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJldmVudEJ1YmJsZSh2b2lkKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFByZXZlbnRDYXB0dXJlKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgUHJldmVudERlZmF1bHQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0RXZl
bnQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBldmVudFR5cGVBcmcsIFBSQm9vbCBjYW5CdWJi
bGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnKSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRE9NVUlFdmVudC5oIiAyCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lET01VSUV2ZW50LmgiCmNsYXNzIG5zSURPTVVJRXZlbnQgOiBwdWJsaWMgbnNJRE9N
RXZlbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg
Y29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYzMsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4
MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3KG5zSURPTUFic3RyYWN0VmlldyAqICphVmlldykg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZXRhaWwoUFJJbnQzMiAqYURldGFpbCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0VUlFdmVudChjb25zdCBuc0FSZWFkYWJsZVN0cmlu
ZyAmIHR5cGVBcmcsIFBSQm9vbCBjYW5CdWJibGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnLCBu
c0lET01BYnN0cmFjdFZpZXcgKnZpZXdBcmcsIFBSSW50MzIgZGV0YWlsQXJnKSA9IDA7Cgp9Owoj
IDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIgMgojIDI1ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIKY2xhc3MgbnNJRE9NS2V5
RXZlbnQgOiBwdWJsaWMgbnNJRE9NVUlFdmVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu
c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwMjhlMGU2ZSwgMHg4
YjAxLCAweDExZDMsIHsgMHhhYSwgMHhlNywgMHgwMCwgMHgxMCwgMHg4MywgMHg4YSwgMHgzMSwg
MHgyMyB9fTsgcmV0dXJuIGlpZDt9CgogIGVudW0geyBET01fVktfQ0FOQ0VMID0gM1UgfTsKCiAg
ZW51bSB7IERPTV9WS19CQUNLX1NQQUNFID0gOFUgfTsKCiAgZW51bSB7IERPTV9WS19UQUIgPSA5
VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0NMRUFSID0gMTJVIH07CgogIGVudW0geyBET01fVktfUkVU
VVJOID0gMTNVIH07CgogIGVudW0geyBET01fVktfRU5URVIgPSAxNFUgfTsKCiAgZW51bSB7IERP
TV9WS19TSElGVCA9IDE2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0NPTlRST0wgPSAxN1UgfTsKCiAg
ZW51bSB7IERPTV9WS19BTFQgPSAxOFUgfTsKCiAgZW51bSB7IERPTV9WS19QQVVTRSA9IDE5VSB9
OwoKICBlbnVtIHsgRE9NX1ZLX0NBUFNfTE9DSyA9IDIwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0VT
Q0FQRSA9IDI3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NQQUNFID0gMzJVIH07CgogIGVudW0geyBE
T01fVktfUEFHRV9VUCA9IDMzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BBR0VfRE9XTiA9IDM0VSB9
OwoKICBlbnVtIHsgRE9NX1ZLX0VORCA9IDM1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0hPTUUgPSAz
NlUgfTsKCiAgZW51bSB7IERPTV9WS19MRUZUID0gMzdVIH07CgogIGVudW0geyBET01fVktfVVAg
PSAzOFUgfTsKCiAgZW51bSB7IERPTV9WS19SSUdIVCA9IDM5VSB9OwoKICBlbnVtIHsgRE9NX1ZL
X0RPV04gPSA0MFUgfTsKCiAgZW51bSB7IERPTV9WS19QUklOVFNDUkVFTiA9IDQ0VSB9OwoKICBl
bnVtIHsgRE9NX1ZLX0lOU0VSVCA9IDQ1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0RFTEVURSA9IDQ2
VSB9OwoKICBlbnVtIHsgRE9NX1ZLXzAgPSA0OFUgfTsKCiAgZW51bSB7IERPTV9WS18xID0gNDlV
IH07CgogIGVudW0geyBET01fVktfMiA9IDUwVSB9OwoKICBlbnVtIHsgRE9NX1ZLXzMgPSA1MVUg
fTsKCiAgZW51bSB7IERPTV9WS180ID0gNTJVIH07CgogIGVudW0geyBET01fVktfNSA9IDUzVSB9
OwoKICBlbnVtIHsgRE9NX1ZLXzYgPSA1NFUgfTsKCiAgZW51bSB7IERPTV9WS183ID0gNTVVIH07
CgogIGVudW0geyBET01fVktfOCA9IDU2VSB9OwoKICBlbnVtIHsgRE9NX1ZLXzkgPSA1N1UgfTsK
CiAgZW51bSB7IERPTV9WS19TRU1JQ09MT04gPSA1OVUgfTsKCiAgZW51bSB7IERPTV9WS19FUVVB
TFMgPSA2MVUgfTsKCiAgZW51bSB7IERPTV9WS19BID0gNjVVIH07CgogIGVudW0geyBET01fVktf
QiA9IDY2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0MgPSA2N1UgfTsKCiAgZW51bSB7IERPTV9WS19E
ID0gNjhVIH07CgogIGVudW0geyBET01fVktfRSA9IDY5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Yg
PSA3MFUgfTsKCiAgZW51bSB7IERPTV9WS19HID0gNzFVIH07CgogIGVudW0geyBET01fVktfSCA9
IDcyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0kgPSA3M1UgfTsKCiAgZW51bSB7IERPTV9WS19KID0g
NzRVIH07CgogIGVudW0geyBET01fVktfSyA9IDc1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0wgPSA3
NlUgfTsKCiAgZW51bSB7IERPTV9WS19NID0gNzdVIH07CgogIGVudW0geyBET01fVktfTiA9IDc4
VSB9OwoKICBlbnVtIHsgRE9NX1ZLX08gPSA3OVUgfTsKCiAgZW51bSB7IERPTV9WS19QID0gODBV
IH07CgogIGVudW0geyBET01fVktfUSA9IDgxVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1IgPSA4MlUg
fTsKCiAgZW51bSB7IERPTV9WS19TID0gODNVIH07CgogIGVudW0geyBET01fVktfVCA9IDg0VSB9
OwoKICBlbnVtIHsgRE9NX1ZLX1UgPSA4NVUgfTsKCiAgZW51bSB7IERPTV9WS19WID0gODZVIH07
CgogIGVudW0geyBET01fVktfVyA9IDg3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1ggPSA4OFUgfTsK
CiAgZW51bSB7IERPTV9WS19ZID0gODlVIH07CgogIGVudW0geyBET01fVktfWiA9IDkwVSB9OwoK
ICBlbnVtIHsgRE9NX1ZLX05VTVBBRDAgPSA5NlUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQx
ID0gOTdVIH07CgogIGVudW0geyBET01fVktfTlVNUEFEMiA9IDk4VSB9OwoKICBlbnVtIHsgRE9N
X1ZLX05VTVBBRDMgPSA5OVUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQ0ID0gMTAwVSB9OwoK
ICBlbnVtIHsgRE9NX1ZLX05VTVBBRDUgPSAxMDFVIH07CgogIGVudW0geyBET01fVktfTlVNUEFE
NiA9IDEwMlUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQ3ID0gMTAzVSB9OwoKICBlbnVtIHsg
RE9NX1ZLX05VTVBBRDggPSAxMDRVIH07CgogIGVudW0geyBET01fVktfTlVNUEFEOSA9IDEwNVUg
fTsKCiAgZW51bSB7IERPTV9WS19NVUxUSVBMWSA9IDEwNlUgfTsKCiAgZW51bSB7IERPTV9WS19B
REQgPSAxMDdVIH07CgogIGVudW0geyBET01fVktfU0VQQVJBVE9SID0gMTA4VSB9OwoKICBlbnVt
IHsgRE9NX1ZLX1NVQlRSQUNUID0gMTA5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0RFQ0lNQUwgPSAx
MTBVIH07CgogIGVudW0geyBET01fVktfRElWSURFID0gMTExVSB9OwoKICBlbnVtIHsgRE9NX1ZL
X0YxID0gMTEyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YyID0gMTEzVSB9OwoKICBlbnVtIHsgRE9N
X1ZLX0YzID0gMTE0VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y0ID0gMTE1VSB9OwoKICBlbnVtIHsg
RE9NX1ZLX0Y1ID0gMTE2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y2ID0gMTE3VSB9OwoKICBlbnVt
IHsgRE9NX1ZLX0Y3ID0gMTE4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y4ID0gMTE5VSB9OwoKICBl
bnVtIHsgRE9NX1ZLX0Y5ID0gMTIwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxMCA9IDEyMVUgfTsK
CiAgZW51bSB7IERPTV9WS19GMTEgPSAxMjJVIH07CgogIGVudW0geyBET01fVktfRjEyID0gMTIz
VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxMyA9IDEyNFUgfTsKCiAgZW51bSB7IERPTV9WS19GMTQg
PSAxMjVVIH07CgogIGVudW0geyBET01fVktfRjE1ID0gMTI2VSB9OwoKICBlbnVtIHsgRE9NX1ZL
X0YxNiA9IDEyN1UgfTsKCiAgZW51bSB7IERPTV9WS19GMTcgPSAxMjhVIH07CgogIGVudW0geyBE
T01fVktfRjE4ID0gMTI5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxOSA9IDEzMFUgfTsKCiAgZW51
bSB7IERPTV9WS19GMjAgPSAxMzFVIH07CgogIGVudW0geyBET01fVktfRjIxID0gMTMyVSB9OwoK
ICBlbnVtIHsgRE9NX1ZLX0YyMiA9IDEzM1UgfTsKCiAgZW51bSB7IERPTV9WS19GMjMgPSAxMzRV
IH07CgogIGVudW0geyBET01fVktfRjI0ID0gMTM1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTV9M
T0NLID0gMTQ0VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NDUk9MTF9MT0NLID0gMTQ1VSB9OwoKICBl
bnVtIHsgRE9NX1ZLX0NPTU1BID0gMTg4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BFUklPRCA9IDE5
MFUgfTsKCiAgZW51bSB7IERPTV9WS19TTEFTSCA9IDE5MVUgfTsKCiAgZW51bSB7IERPTV9WS19C
QUNLX1FVT1RFID0gMTkyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX09QRU5fQlJBQ0tFVCA9IDIxOVUg
fTsKCiAgZW51bSB7IERPTV9WS19CQUNLX1NMQVNIID0gMjIwVSB9OwoKICBlbnVtIHsgRE9NX1ZL
X0NMT1NFX0JSQUNLRVQgPSAyMjFVIH07CgogIGVudW0geyBET01fVktfUVVPVEUgPSAyMjJVIH07
CgogIGVudW0geyBET01fVktfTUVUQSA9IDIyNFUgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
Q2hhckNvZGUoUFJVaW50MzIgKmFDaGFyQ29kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRLZXlDb2RlKFBSVWludDMyICphS2V5Q29kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRBbHRLZXkoUFJCb29sICphQWx0S2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN0
cmxLZXkoUFJCb29sICphQ3RybEtleSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaGlm
dEtleShQUkJvb2wgKmFTaGlmdEtleSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRh
S2V5KFBSQm9vbCAqYU1ldGFLZXkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdEtleUV2
ZW50KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgdHlwZUFyZywgUFJCb29sIGNhbkJ1YmJsZUFy
ZywgUFJCb29sIGNhbmNlbGFibGVBcmcsIG5zSURPTUFic3RyYWN0VmlldyAqdmlld0FyZywgUFJC
b29sIGN0cmxLZXlBcmcsIFBSQm9vbCBhbHRLZXlBcmcsIFBSQm9vbCBzaGlmdEtleUFyZywgUFJC
b29sIG1ldGFLZXlBcmcsIFBSVWludDMyIGtleUNvZGVBcmcsIFBSVWludDMyIGNoYXJDb2RlQXJn
KSA9IDA7Cgp9OwojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAy
CgpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBuc0lSZWdpb247CmNsYXNzIG5zSVdp
ZGdldDsKY2xhc3MgbnNJTWVudUl0ZW07CmNsYXNzIG5zSUFjY2Vzc2libGU7CmNsYXNzIG5zSUNv
bnRlbnQ7CgoKCgoKZW51bSBuc0V2ZW50U3RhdHVzIHsKCiAgbnNFdmVudFN0YXR1c19lSWdub3Jl
LAoKICBuc0V2ZW50U3RhdHVzX2VDb25zdW1lTm9EZWZhdWx0LAoKICBuc0V2ZW50U3RhdHVzX2VD
b25zdW1lRG9EZWZhdWx0Cn07CgoKCgplbnVtIG5zU2l6ZU1vZGUgewogIG5zU2l6ZU1vZGVfTm9y
bWFsID0gMCwKICBuc1NpemVNb2RlX01pbmltaXplZCwKICBuc1NpemVNb2RlX01heGltaXplZAp9
OwoKCgoKZW51bSBuc1dpbmRvd1ogewogIG5zV2luZG93WlRvcCA9IDAsCiAgbnNXaW5kb3daQm90
dG9tLAogIG5zV2luZG93WlJlbGF0aXZlCn07CgoKCgoKc3RydWN0IG5zRXZlbnQgewoKICBQUlVp
bnQ4IGV2ZW50U3RydWN0VHlwZTsKCiAgUFJVaW50MzIgbWVzc2FnZTsKCiAgbnNQb2ludCBwb2lu
dDsKCiAgbnNQb2ludCByZWZQb2ludDsKCiAgUFJVaW50MzIgdGltZTsKCiAgUFJVaW50MzIgZmxh
Z3M7CgogIFBSVWludDMyIGludGVybmFsQXBwRmxhZ3M7CgogIG5zSGFzaEtleSogdXNlclR5cGU7
Cn07CgoKCgoKc3RydWN0IG5zR1VJRXZlbnQgOiBwdWJsaWMgbnNFdmVudCB7CgogIG5zSVdpZGdl
dCogd2lkZ2V0OwoKICB2b2lkKiBuYXRpdmVNc2c7Cn07CgoKCgoKc3RydWN0IG5zU2l6ZUV2ZW50
IDogcHVibGljIG5zR1VJRXZlbnQgewoKICAgIG5zUmVjdCAqd2luZG93U2l6ZTsKCiAgICBQUklu
dDMyIG1XaW5XaWR0aDsKCiAgICBQUkludDMyIG1XaW5IZWlnaHQ7Cn07CgoKCgoKc3RydWN0IG5z
U2l6ZU1vZGVFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKCiAgICBuc1NpemVNb2RlIG1TaXpl
TW9kZTsKfTsKCgoKCgpzdHJ1Y3QgbnNaTGV2ZWxFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsK
CiAgbnNXaW5kb3daIG1QbGFjZW1lbnQ7CiAgbnNJV2lkZ2V0ICptUmVxQmVsb3csCiAgICAgICAg
ICAgICptQWN0dWFsQmVsb3c7CiAgUFJCb29sIG1JbW1lZGlhdGUsCiAgICAgICAgICAgICBtQWRq
dXN0ZWQ7Cn07CgoKCgoKc3RydWN0IG5zUGFpbnRFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsK
CiAgICBuc0lSZW5kZXJpbmdDb250ZXh0ICpyZW5kZXJpbmdDb250ZXh0OwoKICAgIG5zSVJlZ2lv
biAqcmVnaW9uOwoKICAgIG5zUmVjdCAqcmVjdDsKfTsKCgoKCgpzdHJ1Y3QgbnNTY3JvbGxiYXJF
dmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKCiAgICBQUlVpbnQzMiBwb3NpdGlvbjsKfTsKCnN0
cnVjdCBuc1Njcm9sbFBvcnRFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKICBlbnVtIG9yaWVu
dFR5cGUgewogICAgdmVydGljYWwgPSAwLAogICAgaG9yaXpvbnRhbCA9IDEsCiAgICBib3RoID0g
MgogIH07CgogIG9yaWVudFR5cGUgb3JpZW50Owp9OwoKc3RydWN0IG5zSW5wdXRFdmVudCA6IHB1
YmxpYyBuc0dVSUV2ZW50IHsKCiAgICBQUkJvb2wgaXNTaGlmdDsKCiAgICBQUkJvb2wgaXNDb250
cm9sOwoKICAgIFBSQm9vbCBpc0FsdDsKCgogICAgUFJCb29sIGlzTWV0YTsKfTsKCgoKCgpzdHJ1
Y3QgbnNNb3VzZUV2ZW50IDogcHVibGljIG5zSW5wdXRFdmVudCB7CgogICAgUFJVaW50MzIgY2xp
Y2tDb3VudDsKCgogICAgUFJCb29sIGFjY2VwdEFjdGl2YXRpb247Cn07CgoKCgoKc3RydWN0IG5z
QWNjZXNzaWJsZUV2ZW50IDogcHVibGljIG5zSW5wdXRFdmVudCB7CiAgICBuc0lBY2Nlc3NpYmxl
KiBhY2Nlc3NpYmxlOwp9OwoKCgoKCnN0cnVjdCBuc0tleUV2ZW50IDogcHVibGljIG5zSW5wdXRF
dmVudCB7CgogICAgUFJVaW50MzIga2V5Q29kZTsKCiAgICBQUlVpbnQzMiBjaGFyQ29kZTsKCiAg
ICBQUkJvb2wgaXNDaGFyOwp9OwoKCgoKc3RydWN0IG5zVGV4dFJhbmdlIHsKICAgICAgICBQUlVp
bnQzMiBtU3RhcnRPZmZzZXQ7CiAgICAgICAgUFJVaW50MzIgbUVuZE9mZnNldDsKICAgICAgICBQ
UlVpbnQzMiBtUmFuZ2VUeXBlOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgbnNUZXh0UmFuZ2UgbnNUZXh0
UmFuZ2U7CnR5cGVkZWYgbnNUZXh0UmFuZ2UqIG5zVGV4dFJhbmdlQXJyYXk7CgpzdHJ1Y3QgbnNU
ZXh0RXZlbnRSZXBseSB7CiAgICAgICAgbnNSZWN0IG1DdXJzb3JQb3NpdGlvbjsKICAgICAgICBQ
UkJvb2wgbUN1cnNvcklzQ29sbGFwc2VkOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgbnNUZXh0RXZlbnRS
ZXBseSBuc1RleHRFdmVudFJlcGx5OwoKc3RydWN0IG5zVGV4dEV2ZW50IDogcHVibGljIG5zSW5w
dXRFdmVudCB7CiAgICAgICAgUFJVbmljaGFyKiB0aGVUZXh0OwogICAgICAgIG5zVGV4dEV2ZW50
UmVwbHkgdGhlUmVwbHk7CiAgICAgICAgUFJVaW50MzIgcmFuZ2VDb3VudDsKICAgICAgICBuc1Rl
eHRSYW5nZUFycmF5IHJhbmdlQXJyYXk7CiAgUFJCb29sIGlzQ2hhcjsKfTsKCnN0cnVjdCBuc0Nv
bXBvc2l0aW9uRXZlbnQgOiBwdWJsaWMgbnNJbnB1dEV2ZW50IHsKICAgICAgICBQUlVpbnQzMiBj
b21wb3NpdGlvbk1lc3NhZ2U7CiAgICAgICAgbnNUZXh0RXZlbnRSZXBseSB0aGVSZXBseTsKfTsK
CnN0cnVjdCBuc01vdXNlU2Nyb2xsRXZlbnQgOiBwdWJsaWMgbnNJbnB1dEV2ZW50IHsKCiAgZW51
bSBuc01vdXNlU2Nyb2xsRmxhZ3MgewogICAga0lzRnVsbFBhZ2UgPSAxIDw8IDAsCiAgICBrSXNW
ZXJ0aWNhbCA9IDEgPDwgMSwKICAgIGtJc0hvcml6b250YWwgPSAxIDw8IDIKICB9OwoKICBQUklu
dDMyIHNjcm9sbEZsYWdzOwogIFBSSW50MzIgZGVsdGE7Cn07CgpzdHJ1Y3QgbnNSZWNvbnZlcnNp
b25FdmVudFJlcGx5IHsKICBQUlVuaWNoYXIgKm1SZWNvbnZlcnNpb25TdHJpbmc7Cn07CgpzdHJ1
Y3QgbnNSZWNvbnZlcnNpb25FdmVudCA6IHB1YmxpYyBuc0lucHV0RXZlbnQgewogIG5zUmVjb252
ZXJzaW9uRXZlbnRSZXBseSB0aGVSZXBseTsKfTsKIyAyODMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0dVSUV2ZW50LmgiCnN0cnVjdCBuc01lbnVFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50
IHsKICBuc0lNZW51SXRlbSAqIG1NZW51SXRlbTsKICBQUlVpbnQzMiBtQ29tbWFuZDsKfTsKIyAy
OTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiCnN0cnVjdCBuc0Zvcm1F
dmVudCA6IHB1YmxpYyBuc0V2ZW50IHsKICBuc0lDb250ZW50ICpvcmlnaW5hdG9yOwp9OwoKCgoK
c3RydWN0IG5zRm9jdXNFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKICBQUkJvb2wgaXNNb3pX
aW5kb3dUYWtpbmdGb2N1czsKfTsKCgoKCgplbnVtIG5zRHJhZ0Ryb3BFdmVudFN0YXR1cyB7Cgog
IG5zRHJhZ0Ryb3BFdmVudFN0YXR1c19lRHJhZ0VudGVyZWQsCgogIG5zRHJhZ0Ryb3BFdmVudFN0
YXR1c19lRHJhZ0V4aXRlZCwKCiAgbnNEcmFnRHJvcEV2ZW50U3RhdHVzX2VEcm9wCn07CiMgMjgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNb3VzZUxpc3RlbmVyLmgiIDIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJTW91c2VMaXN0ZW5lci5oIiAyCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lNb3VzZUxpc3RlbmVyLmgiCmNsYXNzIG5zSU1vdXNlTGlzdGVuZXIgOiBwdWJs
aWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp
IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGM4M2Y2YjgxLCAweGQ3Y2UsIDB4MTFkMiwg
eyAweDgzLCAweDYwLCAweGM0LCAweGM4LCAweDk0LCAweGM0LCAweDkxLCAweDdjIH0gfTsgcmV0
dXJuIGlpZDt9CgoKCgoKCiAgICB2aXJ0dWFsIG5zRXZlbnRTdGF0dXMgTW91c2VQcmVzc2VkKGNv
bnN0IG5zR1VJRXZlbnQgJiBhTW91c2VFdmVudCkgPSAwOwoKCgoKCgogICAgdmlydHVhbCBuc0V2
ZW50U3RhdHVzIE1vdXNlUmVsZWFzZWQoY29uc3QgbnNHVUlFdmVudCAmIGFNb3VzZUV2ZW50KSA9
IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc0V2ZW50U3RhdHVzIE1vdXNlQ2xpY2tlZChjb25zdCBu
c0dVSUV2ZW50ICYgYU1vdXNlRXZlbnQpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwgbnNFdmVudFN0
YXR1cyBNb3VzZU1vdmVkKGNvbnN0IG5zR1VJRXZlbnQgJiBhTW91c2VFdmVudCkgPSAwOwoKfTsK
IyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbnVMaXN0ZW5lci5oIiAxCiMgMjYgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lNZW51TGlzdGVuZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNHVUlFdmVudC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lN
ZW51TGlzdGVuZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0
cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW51TGlzdGVuZXIuaCIg
MgojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTWVudUxpc3RlbmVyLmgiCmNsYXNz
IG5zSU1lbnVMaXN0ZW5lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CgogIHB1YmxpYzoKICAgIHN0
YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4
ZjJlNzk2MDIsIDB4MTcwMCwgMHgxMWQ1LCB7IDB4YmIsIDB4NmYsIDB4OTAsIDB4ZjIsIDB4NDAs
IDB4ZmUsIDB4NDksIDB4M2MgfSB9OzsgcmV0dXJuIGlpZDt9CgoKCgoKCiAgICB2aXJ0dWFsIG5z
RXZlbnRTdGF0dXMgTWVudUl0ZW1TZWxlY3RlZChjb25zdCBuc01lbnVFdmVudCAmIGFNZW51RXZl
bnQpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwgbnNFdmVudFN0YXR1cyBNZW51U2VsZWN0ZWQoY29u
c3QgbnNNZW51RXZlbnQgJiBhTWVudUV2ZW50KSA9IDA7CgoKCgoKCiAgICB2aXJ0dWFsIG5zRXZl
bnRTdGF0dXMgTWVudURlc2VsZWN0ZWQoY29uc3QgbnNNZW51RXZlbnQgJiBhTWVudUV2ZW50KSA9
IDA7CgogICAgdmlydHVhbCBuc0V2ZW50U3RhdHVzIE1lbnVDb25zdHJ1Y3QoIGNvbnN0IG5zTWVu
dUV2ZW50ICYgYU1lbnVFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJV2lkZ2V0KiBhUGFyZW50V2luZG93LCB2b2lkKiBhTm9kZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYVdlYlNoZWxsKSA9IDA7CgogICAg
dmlydHVhbCBuc0V2ZW50U3RhdHVzIE1lbnVEZXN0cnVjdChjb25zdCBuc01lbnVFdmVudCAmIGFN
ZW51RXZlbnQpID0gMDsKCiAgICB2aXJ0dWFsIG5zRXZlbnRTdGF0dXMgQ2hlY2tSZWJ1aWxkKFBS
Qm9vbCAmIGFNZW51RXZlbnQpID0gMDsKICAgIHZpcnR1YWwgbnNFdmVudFN0YXR1cyBTZXRSZWJ1
aWxkKFBSQm9vbCBhTWVudUV2ZW50KSA9IDA7Cn07CiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lXaWRnZXQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFn
ZS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zUmVjdC5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMQoj
IDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0NvbG9yLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0Nv
bnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAz
MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIiAxCiMgMjYgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRHJhd2luZ1N1cmZhY2UuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTdXBwb3J0cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5n
U3VyZmFjZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAxCiMg
MjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIiAyCgoKCnR5
cGVkZWYgc3RydWN0CnsKICBQUlVpbnQzMiBtUmVkWmVyb01hc2s7CiAgUFJVaW50MzIgbUdyZWVu
WmVyb01hc2s7CiAgUFJVaW50MzIgbUJsdWVaZXJvTWFzazsKICBQUlVpbnQzMiBtQWxwaGFaZXJv
TWFzazsKICBQUlVpbnQzMiBtUmVkTWFzazsKICBQUlVpbnQzMiBtR3JlZW5NYXNrOwogIFBSVWlu
dDMyIG1CbHVlTWFzazsKICBQUlVpbnQzMiBtQWxwaGFNYXNrOwogIFBSVWludDggbVJlZENvdW50
OwogIFBSVWludDggbUdyZWVuQ291bnQ7CiAgUFJVaW50OCBtQmx1ZUNvdW50OwogIFBSVWludDgg
bUFscGhhQ291bnQ7CiAgUFJVaW50OCBtUmVkU2hpZnQ7CiAgUFJVaW50OCBtR3JlZW5TaGlmdDsK
ICBQUlVpbnQ4IG1CbHVlU2hpZnQ7CiAgUFJVaW50OCBtQWxwaGFTaGlmdDsKfSBuc1BpeGVsRm9y
bWF0OwoKCgoKCgoKY2xhc3MgbnNJRHJhd2luZ1N1cmZhY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMK
ewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsgMHg2MWNjNzdlMCwgMHhjYWFjLCAweDExZDIsIHsgMHhhOCwgMHg0OSwgMHgw
MCwgMHg0MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9IH07IHJldHVybiBpaWQ7fQojIDc5ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRHJhd2luZ1N1cmZhY2UuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IExvY2soUFJJbnQzMiBhWCwgUFJJbnQzMiBhWSwgUFJVaW50MzIgYVdpZHRoLCBQUlVp
bnQzMiBhSGVpZ2h0LAogICAgICAgICAgICAgICAgICB2b2lkICoqYUJpdHMsIFBSSW50MzIgKmFT
dHJpZGUsIFBSSW50MzIgKmFXaWR0aEJ5dGVzLAogICAgICAgICAgICAgICAgICBQUlVpbnQzMiBh
RmxhZ3MpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmxvY2sodm9pZCkgPSAwOwoj
IDk4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRHJhd2luZ1N1cmZhY2UuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldERpbWVuc2lvbnMoUFJVaW50MzIgKmFXaWR0aCwgUFJVaW50MzIgKmFI
ZWlnaHQpID0gMDsKIyAxMDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3Vy
ZmFjZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNPZmZzY3JlZW4oUFJCb29sICphT2ZmU2NyZWVu
KSA9IDA7CiMgMTIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRHJhd2luZ1N1cmZhY2Uu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGl4ZWxBZGRyZXNzYWJsZShQUkJvb2wgKmFBZGRyZXNz
YWJsZSkgPSAwOwojIDEzMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURyYXdpbmdTdXJm
YWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQaXhlbEZvcm1hdChuc1BpeGVsRm9ybWF0ICph
Rm9ybWF0KSA9IDA7Cn07CiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJp
bmdDb250ZXh0LmgiIDIKCmNsYXNzIG5zSVdpZGdldDsKY2xhc3MgbnNJRm9udE1ldHJpY3M7CmNs
YXNzIG5zSUltYWdlOwpjbGFzcyBuc1RyYW5zZm9ybTJEOwpjbGFzcyBuc1N0cmluZzsKY2xhc3Mg
bnNJRGV2aWNlQ29udGV4dDsKY2xhc3MgbnNJUmVnaW9uOwoKc3RydWN0IG5zRm9udDsKc3RydWN0
IG5zUG9pbnQ7CnN0cnVjdCBuc1JlY3Q7CgoKCgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9nZnh0eXBlcy5oIiAxCiMgMTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZnh0eXBl
cy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngydHlwZXMuaCIgMQojIDE3ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4MnR5cGVzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2dmeGNvbXBhdC5oIiAxCiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9n
Znhjb21wYXQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMg
MzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZnhjb21wYXQuaCIgMgojIDE4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvZ2Z4MnR5cGVzLmgiIDIKCgoKCnR5cGVkZWYgZmxvYXQgZ2Z4X2Rp
bWVuc2lvbjsKCgoKCgp0eXBlZGVmIGZsb2F0IGdmeF9jb29yZDsKCgoKCgp0eXBlZGVmIGZsb2F0
IGdmeF9hbmdsZTsKCgoKCgoKCnR5cGVkZWYgUFJVaW50MzIgZ2Z4X2NvbG9yOwoKCgoKCnR5cGVk
ZWYgUFJVaW50MTYgZ2Z4X2RlcHRoOwoKCgoKCgp0eXBlZGVmIFBSSW50MzIgZ2Z4X2Zvcm1hdDsK
CgoKCgp0eXBlZGVmIGZsb2F0IGdmeF9nYW1tYTsKIyAxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2dmeHR5cGVzLmgiIDIKCgoKCgoKdHlwZWRlZiBQUkludDMyIG5zY29vcmQ7CiMgNTEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiIDIKY2xhc3MgaW1n
SUNvbnRhaW5lcjsKCgoKCnR5cGVkZWYgZW51bQp7CiAgbnNDbGlwQ29tYmluZV9rSW50ZXJzZWN0
ID0gMCwKICBuc0NsaXBDb21iaW5lX2tVbmlvbiA9IDEsCiAgbnNDbGlwQ29tYmluZV9rU3VidHJh
Y3QgPSAyLAogIG5zQ2xpcENvbWJpbmVfa1JlcGxhY2UgPSAzCn0gbnNDbGlwQ29tYmluZTsKCgp0
eXBlZGVmIGVudW0KewogIG5zTGluZVN0eWxlX2tOb25lID0gMCwKICBuc0xpbmVTdHlsZV9rU29s
aWQgPSAxLAogIG5zTGluZVN0eWxlX2tEYXNoZWQgPSAyLAogIG5zTGluZVN0eWxlX2tEb3R0ZWQg
PSAzCn0gbnNMaW5lU3R5bGU7CiMgODAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5k
ZXJpbmdDb250ZXh0LmgiCnR5cGVkZWYgdm9pZCAqIG5zRHJhd2luZ1N1cmZhY2U7CgoKY2xhc3Mg
bnNJUmVuZGVyaW5nQ29udGV4dCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0
aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGE2
Y2Y5MDY4LCAweDE1YjMsIDB4MTFkMix7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4
YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO30KIyA5NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRGV2
aWNlQ29udGV4dCogYUNvbnRleHQsIG5zSVdpZGdldCAqYVdpZGdldCkgPSAwOwoKCgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRGV2aWNlQ29udGV4dCogYUNvbnRleHQsIG5zRHJhd2lu
Z1N1cmZhY2UgYVN1cmZhY2UpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldCh2b2lk
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERldmljZUNvbnRleHQobnNJRGV2aWNl
Q29udGV4dCAqJiBhRGV2aWNlQ29udGV4dCkgPSAwOwojIDEyOCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IExvY2tEcmF3
aW5nU3VyZmFjZShQUkludDMyIGFYLCBQUkludDMyIGFZLCBQUlVpbnQzMiBhV2lkdGgsIFBSVWlu
dDMyIGFIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFCaXRz
LCBQUkludDMyICphU3RyaWRlLCBQUkludDMyICphV2lkdGhCeXRlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFVubG9ja0RyYXdpbmdTdXJmYWNlKHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZWxlY3RPZmZTY3JlZW5EcmF3aW5nU3VyZmFjZShuc0RyYXdpbmdTdXJmYWNlIGFT
dXJmYWNlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERyYXdpbmdTdXJmYWNlKG5z
RHJhd2luZ1N1cmZhY2UgKmFTdXJmYWNlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dEhpbnRzKFBSVWludDMyJiBhUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHVz
aFN0YXRlKHZvaWQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBvcFN0YXRlKFBSQm9v
bCAmYUNsaXBFbXB0eSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlUmVj
dChjb25zdCBuc1JlY3QmIGFSZWN0LCBQUkJvb2wgJmFJc1Zpc2libGUpID0gMDsKIyAxODUgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRDbGlwUmVjdChjb25zdCBuc1JlY3QmIGFSZWN0LCBuc0NsaXBDb21iaW5lIGFD
b21iaW5lLCBQUkJvb2wgJmFDbGlwRW1wdHkpID0gMDsKIyAxOTQgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGlw
UmVjdChuc1JlY3QgJmFSZWN0LCBQUkJvb2wgJmFIYXNMb2NhbENsaXApID0gMDsKCgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldExpbmVTdHlsZShuc0xpbmVTdHlsZSBhTGluZVN0eWxlKSA9IDA7
CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaW5lU3R5bGUobnNMaW5lU3R5bGUgJmFMaW5l
U3R5bGUpID0gMDsKIyAyMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdD
b250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDbGlwUmVnaW9uKGNvbnN0IG5zSVJlZ2lv
biYgYVJlZ2lvbiwgbnNDbGlwQ29tYmluZSBhQ29tYmluZSwgUFJCb29sICZhQ2xpcEVtcHR5KSA9
IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29weUNsaXBSZWdpb24obnNJUmVnaW9uICZh
UmVnaW9uKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpcFJlZ2lvbihuc0lS
ZWdpb24gKiphUmVnaW9uKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbG9yKG5z
Y29sb3IgYUNvbG9yKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbG9yKG5zY29s
b3IgJmFDb2xvcikgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb250KGNv
bnN0IG5zRm9udCYgYUZvbnQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnQo
bnNJRm9udE1ldHJpY3MgKmFGb250TWV0cmljcykgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRGb250TWV0cmljcyhuc0lGb250TWV0cmljcyAqJmFGb250TWV0cmljcykgPSAwOwoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgVHJhbnNsYXRlKG5zY29vcmQgYVgsIG5zY29vcmQgYVkpID0g
MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNjYWxlKGZsb2F0IGFTeCwgZmxvYXQgYVN5KSA9
IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRUcmFuc2Zvcm0obnNUcmFuc2Zv
cm0yRCAqJmFUcmFuc2Zvcm0pID0gMDsKIyAyOTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVEcmF3aW5nU3Vy
ZmFjZShuc1JlY3QgKmFCb3VuZHMsIFBSVWludDMyIGFTdXJmRmxhZ3MsIG5zRHJhd2luZ1N1cmZh
Y2UgJmFTdXJmYWNlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3lEcmF3aW5n
U3VyZmFjZShuc0RyYXdpbmdTdXJmYWNlIGFEUykgPSAwOwojIDMxMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdM
aW5lKG5zY29vcmQgYVgwLCBuc2Nvb3JkIGFZMCwgbnNjb29yZCBhWDEsIG5zY29vcmQgYVkxKSA9
IDA7CiMgMzIxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1N0ZExpbmUobnNjb29yZCBhWDAsIG5zY29vcmQgYVkw
LCBuc2Nvb3JkIGFYMSwgbnNjb29yZCBhWTEpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IERyYXdQb2x5bGluZShjb25zdCBuc1BvaW50IGFQb2ludHNbXSwgUFJJbnQzMiBhTnVtUG9pbnRz
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdSZWN0KGNvbnN0IG5zUmVjdCYgYVJl
Y3QpID0gMDsKIyAzNDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250
ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3UmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZ
LCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEZpbGxSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QpID0gMDsKIyAzNTggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBGaWxsUmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29y
ZCBhSGVpZ2h0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEludmVydFJlY3QoY29uc3Qg
bnNSZWN0JiBhUmVjdCkgPSAwOwojIDM3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJl
bmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEludmVydFJlY3QobnNjb29yZCBh
WCwgbnNjb29yZCBhWSwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCkgPSAwOwoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1BvbHlnb24oY29uc3QgbnNQb2ludCBhUG9pbnRzW10s
IFBSSW50MzIgYU51bVBvaW50cykgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRmlsbFBv
bHlnb24oY29uc3QgbnNQb2ludCBhUG9pbnRzW10sIFBSSW50MzIgYU51bVBvaW50cykgPSAwOwoK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmFzdGVyUG9seWdvbihjb25zdCBuc1BvaW50IGFQb2lu
dHNbXSwgUFJJbnQzMiBhTnVtUG9pbnRzKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRmls
bFN0ZFBvbHlnb24oY29uc3QgbnNQb2ludCBhUG9pbnRzW10sIFBSSW50MzIgYU51bVBvaW50cykg
PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3RWxsaXBzZShjb25zdCBuc1JlY3QmIGFS
ZWN0KSA9IDA7CiMgNDE2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29u
dGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd0VsbGlwc2UobnNjb29yZCBhWCwgbnNjb29y
ZCBhWSwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCkgPSAwOwoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBGaWxsRWxsaXBzZShjb25zdCBuc1JlY3QmIGFSZWN0KSA9IDA7CiMgNDMxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgRmlsbEVsbGlwc2UobnNjb29yZCBhWCwgbnNjb29yZCBhWSwgbnNjb29yZCBhV2lk
dGgsIG5zY29vcmQgYUhlaWdodCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdB
cmMoY29uc3QgbnNSZWN0JiBhUmVjdCwKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVN0YXJ0
QW5nbGUsIGZsb2F0IGFFbmRBbmdsZSkgPSAwOwojIDQ1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdBcmMobnNj
b29yZCBhWCwgbnNjb29yZCBhWSwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgYVN0YXJ0QW5nbGUsIGZsb2F0IGFFbmRBbmdsZSkgPSAw
OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbGxBcmMoY29uc3QgbnNSZWN0JiBhUmVjdCwK
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVN0YXJ0QW5nbGUsIGZsb2F0IGFFbmRBbmdsZSkg
PSAwOwojIDQ3MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbGxBcmMobnNjb29yZCBhWCwgbnNjb29yZCBhWSwgbnNj
b29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
YVN0YXJ0QW5nbGUsIGZsb2F0IGFFbmRBbmdsZSkgPSAwOwojIDQ4MiAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdp
ZHRoKGNoYXIgYUMsIG5zY29vcmQgJmFXaWR0aCkgPSAwOwojIDQ5NCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdp
ZHRoKFBSVW5pY2hhciBhQywgbnNjb29yZCAmYVdpZHRoLAogICAgICAgICAgICAgICAgICAgICAg
UFJJbnQzMiAqYUZvbnRJRCA9IDApID0gMDsKIyA1MDcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWR0aChjb25z
dCBuc1N0cmluZyYgYVN0cmluZywgbnNjb29yZCAmYVdpZHRoLAogICAgICAgICAgICAgICAgICAg
ICAgUFJJbnQzMiAqYUZvbnRJRCA9IDApID0gMDsKIyA1MTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWR0aChj
b25zdCBjaGFyKiBhU3RyaW5nLCBuc2Nvb3JkJiBhV2lkdGgpID0gMDsKIyA1MjcgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRXaWR0aChjb25zdCBjaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoLAogICAgICAg
ICAgICAgICAgICAgICAgbnNjb29yZCYgYVdpZHRoKSA9IDA7CiMgNTQxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
V2lkdGgoY29uc3QgUFJVbmljaGFyICphU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoLAogICAgICAg
ICAgICAgICAgICAgICAgbnNjb29yZCAmYVdpZHRoLCBQUkludDMyICphRm9udElEID0gMCkgPSAw
OwojIDYxMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdTdHJpbmcoY29uc3QgY2hhciAqYVN0cmluZywgUFJVaW50
MzIgYUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhWCwgbnNjb29yZCBh
WSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb29yZCogYVNwYWNpbmcgPSAwKSA9
IDA7CiMgNjI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1N0cmluZyhjb25zdCBQUlVuaWNoYXIgKmFTdHJpbmcs
IFBSVWludDMyIGFMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgsIG5z
Y29vcmQgYVksCiAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUZvbnRJRCA9IC0xLAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc2Nvb3JkKiBhU3BhY2luZyA9IDApID0gMDsK
IyA2NDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBEcmF3U3RyaW5nKGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLCBuc2Nv
b3JkIGFYLCBuc2Nvb3JkIGFZLAogICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFGb250
SUQgPSAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb29yZCogYVNwYWNpbmcg
PSAwKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3SW1hZ2UobnNJSW1hZ2UgKmFJ
bWFnZSwgbnNjb29yZCBhWCwgbnNjb29yZCBhWSkgPSAwOwojIDY2MCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdJ
bWFnZShuc0lJbWFnZSAqYUltYWdlLCBuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLAogICAgICAgICAg
ICAgICAgICAgICAgIG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpID0gMDsKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgRHJhd0ltYWdlKG5zSUltYWdlICphSW1hZ2UsIGNvbnN0IG5zUmVj
dCYgYVJlY3QpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdJbWFnZShuc0lJbWFn
ZSAqYUltYWdlLCBjb25zdCBuc1JlY3QmIGFTUmVjdCwgY29uc3QgbnNSZWN0JiBhRFJlY3QpPTA7
CiMgNjg4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgRHJhd1RpbGUobnNJSW1hZ2UgKmFJbWFnZSxuc2Nvb3JkIGFYMCxu
c2Nvb3JkIGFZMCxuc2Nvb3JkIGFYMSxuc2Nvb3JkIGFZMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgbnNjb29yZCBhV2lkdGgsbnNjb29yZCBhSGVpZ2h0KSA9IDA7CiMgNzAyICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
RHJhd1BhdGgobnNQYXRoUG9pbnQgYVBvaW50QXJyYXlbXSxQUkludDMyIGFOdW1QdHMpID0gMDsK
IyA3MTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBGaWxsUGF0aChuc1BhdGhQb2ludCBhUG9pbnRBcnJheVtdLFBSSW50
MzIgYU51bVB0cykgPSAwOwojIDcyMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRl
cmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvcHlPZmZTY3JlZW5CaXRzKG5zRHJh
d2luZ1N1cmZhY2UgYVNyY1N1cmYsIFBSSW50MzIgYVNyY1gsIFBSSW50MzIgYVNyY1ksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QgJmFEZXN0Qm91bmRzLCBQUlVp
bnQzMiBhQ29weUZsYWdzKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmV0cmlldmVDdXJyZW50
TmF0aXZlR3JhcGhpY0RhdGEoUFJVaW50MzIgKiBuZ2QpID0gMDsKIyA3MzQgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBE
cmF3VGlsZShuc0lJbWFnZSAqYUltYWdlLCBuc2Nvb3JkIGFTcmNYT2Zmc2V0LAogICAgICAgICAg
ICAgICAgICAgICAgbnNjb29yZCBhU3JjWU9mZnNldCwgY29uc3QgbnNSZWN0ICZhVGlsZVJlY3Qp
ID0gMDsKIyA3NzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSaWdodFRvTGVmdFRleHQoUFJCb29sIGFJc1JUTCkg
PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3SW1hZ2UoaW1nSUNvbnRhaW5lciAqYUlt
YWdlLCBjb25zdCBuc1JlY3QgKiBhU3JjUmVjdCwgY29uc3QgbnNQb2ludCAqIGFEZXN0UG9pbnQp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1NjYWxlZEltYWdlKGltZ0lDb250YWluZXIg
KmFJbWFnZSwgY29uc3QgbnNSZWN0ICogYVNyY1JlY3QsIGNvbnN0IG5zUmVjdCAqIGFEZXN0UmVj
dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3VGlsZShpbWdJQ29udGFpbmVyICphSW1h
Z2UsIG5zY29vcmQgYVhPZmZzZXQsIG5zY29vcmQgYVlPZmZzZXQsIGNvbnN0IG5zUmVjdCAqIGFU
YXJnZXRSZWN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdTY2FsZWRUaWxlKGltZ0lD
b250YWluZXIgKmFJbWFnZSwgbnNjb29yZCBhWE9mZnNldCwgbnNjb29yZCBhWU9mZnNldCwgbnNj
b29yZCBhVGlsZVdpZHRoLCBuc2Nvb3JkIGFUaWxlSGVpZ2h0LCBjb25zdCBuc1JlY3QgKiBhVGFy
Z2V0UmVjdCkgPSAwOwoKfTsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdl
LmgiIDIKCnR5cGVkZWYgc3RydWN0CnsKCgoKICBQUkludDMyIE51bUNvbG9yczsKCgoKICBQUlVp
bnQ4ICpJbmRleDsKCn0gbnNDb2xvck1hcDsKCnR5cGVkZWYgZW51bSB7CiAgICBuc01hc2tSZXF1
aXJlbWVudHNfa05vTWFzaywKICAgIG5zTWFza1JlcXVpcmVtZW50c19rTmVlZHMxQml0LAogICAg
bnNNYXNrUmVxdWlyZW1lbnRzX2tOZWVkczhCaXQKfSBuc01hc2tSZXF1aXJlbWVudHM7CiMgNTkg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgpjbGFzcyBuc0lJbWFnZSA6IHB1
YmxpYyBuc0lTdXBwb3J0cwp7CgpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo
KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgwYjRmYWFhMCwgMHhhYTNhLCAweDExZDEs
IHsgMHhhOCwgMHgyNCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9IH07IHJl
dHVybiBpaWQ7fQojIDcyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW1hZ2UuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEluaXQoUFJJbnQzMiBhV2lkdGgsIFBSSW50MzIgYUhlaWdodCwgUFJJ
bnQzMiBhRGVwdGgsIG5zTWFza1JlcXVpcmVtZW50cyBhTWFza1JlcXVpcmVtZW50cykgPSAwOwoK
CgoKCgogIHZpcnR1YWwgUFJJbnQzMiBHZXRCeXRlc1BpeCgpID0gMDsKCgoKCgoKICB2aXJ0dWFs
IFBSQm9vbCBHZXRJc1Jvd09yZGVyVG9wVG9Cb3R0b20oKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQ
UkludDMyIEdldFdpZHRoKCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgUFJJbnQzMiBHZXRIZWlnaHQo
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlY29kZWRSZWN0KFBSSW50MzIsIFBS
SW50MzIsIFBSSW50MzIsIFBSSW50MzIpID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0RGVjb2Rl
ZFgxKCkgPSAwOwogIHZpcnR1YWwgUFJJbnQzMiBHZXREZWNvZGVkWTEoKSA9IDA7CiAgdmlydHVh
bCBQUkludDMyIEdldERlY29kZWRYMigpID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0RGVjb2Rl
ZFkyKCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hdHVyYWxXaWR0aChQUkludDMyKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROYXR1cmFsSGVpZ2h0KFBSSW50MzIpID0gMDsKICB2
aXJ0dWFsIFBSSW50MzIgR2V0TmF0dXJhbFdpZHRoKCkgPSAwOwogIHZpcnR1YWwgUFJJbnQzMiBH
ZXROYXR1cmFsSGVpZ2h0KCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgUFJVaW50OCAqIEdldEJpdHMo
KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkludDMyIEdldExpbmVTdHJpZGUoKSA9IDA7CgoKCgoK
CgogIHZpcnR1YWwgUFJCb29sIEdldEhhc0FscGhhTWFzaygpID0gMDsKCgoKCgoKICB2aXJ0dWFs
IFBSVWludDggKiBHZXRBbHBoYUJpdHMoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkludDMyIEdl
dEFscGhhV2lkdGgoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkludDMyIEdldEFscGhhSGVpZ2h0
KCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgUFJJbnQzMiBHZXRBbHBoYUxpbmVTdHJpZGUoKSA9IDA7
CgoKCgoKCgogIHZpcnR1YWwgdm9pZCBJbWFnZVVwZGF0ZWQobnNJRGV2aWNlQ29udGV4dCAqYUNv
bnRleHQsIFBSVWludDggYUZsYWdzLCBuc1JlY3QgKmFVcGRhdGVSZWN0KSA9IDA7CgoKCgoKCiAg
dmlydHVhbCBQUkJvb2wgSXNPcHRpbWl6ZWQoKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgT3B0aW1pemUobnNJRGV2aWNlQ29udGV4dCogYUNvbnRleHQpID0gMDsKCgoKCgoKICB2aXJ0
dWFsIG5zQ29sb3JNYXAgKiBHZXRDb2xvck1hcCgpID0gMDsKIyAyMDcgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lJbWFnZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhdyhuc0lSZW5kZXJp
bmdDb250ZXh0ICZhQ29udGV4dCwgbnNEcmF3aW5nU3VyZmFjZSBhU3VyZmFjZSwgUFJJbnQzMiBh
WCwgUFJJbnQzMiBhWSwgUFJJbnQzMiBhV2lkdGgsIFBSSW50MzIgYUhlaWdodCkgPSAwOwojIDIy
MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBEcmF3KG5zSVJlbmRlcmluZ0NvbnRleHQgJmFDb250ZXh0LCBuc0RyYXdpbmdTdXJmYWNlIGFT
dXJmYWNlLCBQUkludDMyIGFTWCwgUFJJbnQzMiBhU1ksIFBSSW50MzIgYVNXaWR0aCwgUFJJbnQz
MiBhU0hlaWdodCwKICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhRFgsIFBSSW50MzIgYURZLCBQ
UkludDMyIGFEV2lkdGgsIFBSSW50MzIgYURIZWlnaHQpID0gMDsKIyAyMzcgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1RvSW1hZ2Uo
bnNJSW1hZ2UqIGFEc3RJbWFnZSwgUFJJbnQzMiBhRFgsIFBSSW50MzIgYURZLCBQUkludDMyIGFE
V2lkdGgsIFBSSW50MzIgYURIZWlnaHQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCB2b2lkIFNldEFs
cGhhTGV2ZWwoUFJJbnQzMiBhQWxwaGFMZXZlbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgUFJJbnQz
MiBHZXRBbHBoYUxldmVsKCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgdm9pZCogR2V0Qml0SW5mbygp
ID0gMDsKIyAyNzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgTG9ja0ltYWdlUGl4ZWxzKFBSQm9vbCBhTWFza1BpeGVscykgPSAwOwojIDI4
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBVbmxvY2tJbWFnZVBpeGVscyhQUkJvb2wgYU1hc2tQaXhlbHMpID0gMDsKIyAyOTcgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgp9OwojIDMxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJV2lkZ2V0LmgiIDIKCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiIDEKIyA1OSAiL3dpbmRvd3MvaGRhMTIv
bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCiMgMSAiL3dpbmRv
d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj
IDYwICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0
aHJlYWQuaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgNjEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIiAyCgpleHRlcm4gIkMiIHsKCnR5cGVkZWYg
c3RydWN0IFBSVGhyZWFkIFBSVGhyZWFkOwp0eXBlZGVmIHN0cnVjdCBQUlRocmVhZFN0YWNrIFBS
VGhyZWFkU3RhY2s7Cgp0eXBlZGVmIGVudW0gUFJUaHJlYWRUeXBlIHsKICAgIFBSX1VTRVJfVEhS
RUFELAogICAgUFJfU1lTVEVNX1RIUkVBRAp9IFBSVGhyZWFkVHlwZTsKCnR5cGVkZWYgZW51bSBQ
UlRocmVhZFNjb3BlIHsKICAgIFBSX0xPQ0FMX1RIUkVBRCwKICAgIFBSX0dMT0JBTF9USFJFQUQs
CiAgICBQUl9HTE9CQUxfQk9VTkRfVEhSRUFECn0gUFJUaHJlYWRTY29wZTsKCnR5cGVkZWYgZW51
bSBQUlRocmVhZFN0YXRlIHsKICAgIFBSX0pPSU5BQkxFX1RIUkVBRCwKICAgIFBSX1VOSk9JTkFC
TEVfVEhSRUFECn0gUFJUaHJlYWRTdGF0ZTsKCnR5cGVkZWYgZW51bSBQUlRocmVhZFByaW9yaXR5
CnsKICAgIFBSX1BSSU9SSVRZX0ZJUlNUID0gMCwKICAgIFBSX1BSSU9SSVRZX0xPVyA9IDAsCiAg
ICBQUl9QUklPUklUWV9OT1JNQUwgPSAxLAogICAgUFJfUFJJT1JJVFlfSElHSCA9IDIsCiAgICBQ
Ul9QUklPUklUWV9VUkdFTlQgPSAzLAogICAgUFJfUFJJT1JJVFlfTEFTVCA9IDMKfSBQUlRocmVh
ZFByaW9yaXR5OwojIDExOCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVybiBQUlRocmVhZCogUFJfQ3JlYXRlVGhyZWFkKFBS
VGhyZWFkVHlwZSB0eXBlLAogICAgICAgICAgICAgICAgICAgICB2b2lkICggKnN0YXJ0KSh2b2lk
ICphcmcpLAogICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcsCiAgICAgICAgICAgICAgICAg
ICAgIFBSVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgIFBSVGhy
ZWFkU2NvcGUgc2NvcGUsCiAgICAgICAgICAgICAgICAgICAgIFBSVGhyZWFkU3RhdGUgc3RhdGUs
CiAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIHN0YWNrU2l6ZSk7CiMgMTM5ICIvd2luZG93
cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIKZXh0
ZXJuIFBSU3RhdHVzIFBSX0pvaW5UaHJlYWQoUFJUaHJlYWQgKnRocmVhZCk7CgoKCgoKZXh0ZXJu
IFBSVGhyZWFkKiBQUl9HZXRDdXJyZW50VGhyZWFkKHZvaWQpOwoKCgoKCmV4dGVybiBQUlRocmVh
ZFByaW9yaXR5IFBSX0dldFRocmVhZFByaW9yaXR5KGNvbnN0IFBSVGhyZWFkICp0aHJlYWQpOwoK
CgoKZXh0ZXJuIHZvaWQgUFJfU2V0VGhyZWFkUHJpb3JpdHkoUFJUaHJlYWQgKnRocmVhZCwgUFJU
aHJlYWRQcmlvcml0eSBwcmlvcml0eSk7CiMgMTgyICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIKdHlwZWRlZiB2b2lkICggKlBSVGhy
ZWFkUHJpdmF0ZURUT1IpKHZvaWQgKnByaXYpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX05ld1RocmVh
ZFByaXZhdGVJbmRleCgKICAgIFBSVWludG4gKm5ld0luZGV4LCBQUlRocmVhZFByaXZhdGVEVE9S
IGRlc3RydWN0b3IpOwojIDE5OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9TZXRUaHJlYWRQcml2
YXRlKFBSVWludG4gdHBkSW5kZXgsIHZvaWQgKnByaXYpOwojIDIwOSAiL3dpbmRvd3MvaGRhMTIv
bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVybiB2b2lk
KiBQUl9HZXRUaHJlYWRQcml2YXRlKFBSVWludG4gdHBkSW5kZXgpOwojIDIyMSAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVy
biBQUlN0YXR1cyBQUl9JbnRlcnJ1cHQoUFJUaHJlYWQgKnRocmVhZCk7CgoKCgoKZXh0ZXJuIHZv
aWQgUFJfQ2xlYXJJbnRlcnJ1cHQodm9pZCk7CgoKCgpleHRlcm4gdm9pZCBQUl9CbG9ja0ludGVy
cnVwdCh2b2lkKTsKCgoKCmV4dGVybiB2b2lkIFBSX1VuYmxvY2tJbnRlcnJ1cHQodm9pZCk7CiMg
MjQ2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0
aHJlYWQuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1NsZWVwKFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsK
CgoKCmV4dGVybiBQUlRocmVhZFNjb3BlIFBSX0dldFRocmVhZFNjb3BlKGNvbnN0IFBSVGhyZWFk
ICp0aHJlYWQpOwoKCgoKZXh0ZXJuIFBSVGhyZWFkVHlwZSBQUl9HZXRUaHJlYWRUeXBlKGNvbnN0
IFBSVGhyZWFkICp0aHJlYWQpOwoKCgoKZXh0ZXJuIFBSVGhyZWFkU3RhdGUgUFJfR2V0VGhyZWFk
U3RhdGUoY29uc3QgUFJUaHJlYWQgKnRocmVhZCk7Cgp9CiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lXaWRnZXQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dV
SUV2ZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAy
CgoKY2xhc3MgbnNJQXBwU2hlbGw7CmNsYXNzIG5zSVRvb2xraXQ7CmNsYXNzIG5zSUZvbnRNZXRy
aWNzOwpjbGFzcyBuc0lUb29sa2l0OwpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBu
c0lFbnVtZXJhdG9yOwpjbGFzcyBuc0lEZXZpY2VDb250ZXh0OwpzdHJ1Y3QgbnNSZWN0OwpzdHJ1
Y3QgbnNGb250OwpjbGFzcyBuc0lNZW51QmFyOwpjbGFzcyBuc0lFdmVudExpc3RlbmVyOwpjbGFz
cyBuc0lSb2xsdXBMaXN0ZW5lcjsKIyA1NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdp
ZGdldC5oIgp0eXBlZGVmIG5zRXZlbnRTdGF0dXMgKCogRVZFTlRfQ0FMTEJBQ0spKG5zR1VJRXZl
bnQgKmV2ZW50KTsKIyA4MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgp0
eXBlZGVmIHZvaWQqIG5zTmF0aXZlV2lkZ2V0OwoKCgoKCmVudW0gbnNXaW5kb3dUeXBlIHsKCiAg
ZVdpbmRvd1R5cGVfdG9wbGV2ZWwsCgogIGVXaW5kb3dUeXBlX2RpYWxvZywKCiAgZVdpbmRvd1R5
cGVfcG9wdXAsCgogIGVXaW5kb3dUeXBlX2NoaWxkLAoKICBlV2luZG93VHlwZV9pbnZpc2libGUK
fTsKCgplbnVtIG5zQm9yZGVyU3R5bGUKewoKICBlQm9yZGVyU3R5bGVfbm9uZSA9IDAsCgoKICBl
Qm9yZGVyU3R5bGVfYWxsID0gMSA8PCAwLAoKCiAgZUJvcmRlclN0eWxlX2JvcmRlciA9IDEgPDwg
MSwKCgogIGVCb3JkZXJTdHlsZV9yZXNpemVoID0gMSA8PCAyLAoKCiAgZUJvcmRlclN0eWxlX3Rp
dGxlID0gMSA8PCAzLAoKCiAgZUJvcmRlclN0eWxlX21lbnUgPSAxIDw8IDQsCgoKCiAgZUJvcmRl
clN0eWxlX21pbmltaXplID0gMSA8PCA1LAoKCiAgZUJvcmRlclN0eWxlX21heGltaXplID0gMSA8
PCA2LAoKCiAgZUJvcmRlclN0eWxlX2Nsb3NlID0gMSA8PCA3LAoKCiAgZUJvcmRlclN0eWxlX2Rl
ZmF1bHQgPSAtMQp9OwoKCgoKCmVudW0gbnNDdXJzb3IgewogICAgICAgICAgICAgICAgZUN1cnNv
cl9zdGFuZGFyZCwKCiAgICAgICAgICAgICAgICBlQ3Vyc29yX3dhaXQsCgogICAgICAgICAgICAg
ICAgZUN1cnNvcl9zZWxlY3QsCgogICAgICAgICAgICAgICAgZUN1cnNvcl9oeXBlcmxpbmssCgog
ICAgICAgICAgICAgICAgZUN1cnNvcl9zaXplV0UsCgogICAgICAgICAgICAgICAgZUN1cnNvcl9z
aXplTlMsCgogICAgICAgICAgICAgICAgZUN1cnNvcl9zaXplTlcsCiAgICAgICAgICAgICAgICBl
Q3Vyc29yX3NpemVTRSwKICAgICAgICAgICAgICAgIGVDdXJzb3Jfc2l6ZU5FLAogICAgICAgICAg
ICAgICAgZUN1cnNvcl9zaXplU1csCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2Fycm93X25vcnRo
LAogICAgICAgICAgICAgICAgZUN1cnNvcl9hcnJvd19ub3J0aF9wbHVzLAogICAgICAgICAgICAg
ICAgZUN1cnNvcl9hcnJvd19zb3V0aCwKICAgICAgICAgICAgICAgIGVDdXJzb3JfYXJyb3dfc291
dGhfcGx1cywKICAgICAgICAgICAgICAgIGVDdXJzb3JfYXJyb3dfd2VzdCwKICAgICAgICAgICAg
ICAgIGVDdXJzb3JfYXJyb3dfd2VzdF9wbHVzLAogICAgICAgICAgICAgICAgZUN1cnNvcl9hcnJv
d19lYXN0LAogICAgICAgICAgICAgICAgZUN1cnNvcl9hcnJvd19lYXN0X3BsdXMsCiAgICAgICAg
ICAgICAgICBlQ3Vyc29yX2Nyb3NzaGFpciwKCiAgICAgICAgICAgICAgICBlQ3Vyc29yX21vdmUs
CiAgICAgICAgICAgICAgICBlQ3Vyc29yX2hlbHAsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2Nv
cHksCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2FsaWFzLAogICAgICAgICAgICAgICAgZUN1cnNv
cl9jb250ZXh0X21lbnUsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2NlbGwsCiAgICAgICAgICAg
ICAgICBlQ3Vyc29yX2dyYWIsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2dyYWJiaW5nLAogICAg
ICAgICAgICAgICAgZUN1cnNvcl9zcGlubmluZywKICAgICAgICAgICAgICAgIGVDdXJzb3JfY291
bnRfdXAsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2NvdW50X2Rvd24sCiAgICAgICAgICAgICAg
ICBlQ3Vyc29yX2NvdW50X3VwX2Rvd24KICAgICAgICAgICAgICAgIH07CgoKCgoKCgpzdHJ1Y3Qg
bnNXaWRnZXRJbml0RGF0YSB7CiAgbnNXaWRnZXRJbml0RGF0YSgpCiAgICA6IGNsaXBDaGlsZHJl
bigwKSwgY2xpcFNpYmxpbmdzKDApLAogICAgICBtV2luZG93VHlwZShlV2luZG93VHlwZV9jaGls
ZCksCiAgICAgIG1Cb3JkZXJTdHlsZShlQm9yZGVyU3R5bGVfZGVmYXVsdCkKICB7CiAgfQoKCiAg
UFJQYWNrZWRCb29sIGNsaXBDaGlsZHJlbiwgY2xpcFNpYmxpbmdzOwogIG5zV2luZG93VHlwZSBt
V2luZG93VHlwZTsKICBuc0JvcmRlclN0eWxlIG1Cb3JkZXJTdHlsZTsKfTsKCgoKCgpjbGFzcyBu
c0lXaWRnZXQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewoKICBwdWJsaWM6CgogICAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgxODAzMmFk
NSwgMHhiMjY1LCAweDExZDEsIHsgMHhhYSwgMHgyYSwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAs
IDB4MCB9IH07IHJldHVybiBpaWQ7fQojIDI0MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGUobnNJV2lkZ2V0ICphUGFyZW50
LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QgJmFSZWN0LAogICAgICAgICAg
ICAgICAgICAgICAgICBFVkVOVF9DQUxMQkFDSyBhSGFuZGxlRXZlbnRGdW5jdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJRGV2aWNlQ29udGV4dCAqYUNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUFwcFNoZWxsICphQXBwU2hlbGwgPSAwLAogICAgICAgICAgICAgICAg
ICAgICAgICBuc0lUb29sa2l0ICphVG9vbGtpdCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAg
IG5zV2lkZ2V0SW5pdERhdGEgKmFJbml0RGF0YSA9IDApID0gMDsKIyAyNjcgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlKG5z
TmF0aXZlV2lkZ2V0IGFQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVj
dCAmYVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UX0NBTExCQUNLIGFIYW5kbGVF
dmVudEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBuc0lEZXZpY2VDb250ZXh0ICph
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXBwU2hlbGwgKmFBcHBTaGVsbCA9
IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSVRvb2xraXQgKmFUb29sa2l0ID0gMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNXaWRnZXRJbml0RGF0YSAqYUluaXREYXRhID0gMCkgPSAw
OwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50RGF0YSh2b2lkKiYgYUNsaWVu
dERhdGEpID0gMDsKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2xpZW50RGF0YSh2b2lkKiBhQ2xp
ZW50RGF0YSkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgRGVzdHJveSh2b2lkKSA9
IDA7CiMgMjk5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0
dWFsIG5zSVdpZGdldCogR2V0UGFyZW50KHZvaWQpID0gMDsKIyAzMDggIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNJRW51bWVyYXRvciogR2V0Q2hp
bGRyZW4odm9pZCkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2hvdyhQUkJvb2wg
YVN0YXRlKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW9kYWwoUFJCb29sIGFN
b2RhbCkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IElzVmlzaWJsZShQUkJvb2wgJiBh
U3RhdGUpID0gMDsKIyAzNDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIK
ICAgIHZpcnR1YWwgbnNyZXN1bHQgQ29uc3RyYWluUG9zaXRpb24oUFJJbnQzMiAqYVgsIFBSSW50
MzIgKmFZKSA9IDA7CiMgMzUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0Lmgi
CiAgICB2aXJ0dWFsIG5zcmVzdWx0IE1vdmUoUFJJbnQzMiBhWCwgUFJJbnQzMiBhWSkgPSAwOwoj
IDM2MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBu
c3Jlc3VsdCBSZXNpemUoUFJJbnQzMiBhV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICBQUklu
dDMyIGFIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGFpbnQpID0gMDsK
IyAzNzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwg
bnNyZXN1bHQgUmVzaXplKFBSSW50MzIgYVgsCiAgICAgICAgICAgICAgICAgICAgICBQUkludDMy
IGFZLAogICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhV2lkdGgsCiAgICAgICAgICAgICAg
ICAgICAgICBQUkludDMyIGFIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJl
cGFpbnQpID0gMDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldFpJbmRleChQUkludDMyIGFa
SW5kZXgpID0gMDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldFpJbmRleChQUkludDMyKiBh
WkluZGV4KSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBQbGFjZUJlaGluZChuc0lX
aWRnZXQgKmFXaWRnZXQsIFBSQm9vbCBhQWN0aXZhdGUpID0gMDsKCgoKCgogICAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRTaXplTW9kZShQUkludDMyIGFNb2RlKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwg
bnNyZXN1bHQgR2V0U2l6ZU1vZGUoUFJJbnQzMiogYU1vZGUpID0gMDsKCgoKCgoKCiAgICB2aXJ0
dWFsIG5zcmVzdWx0IEVuYWJsZShQUkJvb2wgYVN0YXRlKSA9IDA7CgoKCgogICAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRGb2N1cyhQUkJvb2wgYVJhaXNlID0gMCkgPSAwOwoKCgoKCgoKICAgIHZpcnR1
YWwgbnNyZXN1bHQgR2V0Qm91bmRzKG5zUmVjdCAmYVJlY3QpID0gMDsKIyA0NDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2Ny
ZWVuQm91bmRzKG5zUmVjdCAmYVJlY3QpID0gMDsKIyA0NTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50Qm91bmRzKG5z
UmVjdCAmYVJlY3QpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJvcmRlclNp
emUoUFJJbnQzMiAmYVdpZHRoLCBQUkludDMyICZhSGVpZ2h0KSA9IDA7CgoKCgoKCgogICAgdmly
dHVhbCBuc2NvbG9yIEdldEZvcmVncm91bmRDb2xvcih2b2lkKSA9IDA7CiMgNDc2ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZv
cmVncm91bmRDb2xvcihjb25zdCBuc2NvbG9yICZhQ29sb3IpID0gMDsKIyA0ODUgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNjb2xvciBHZXRCYWNr
Z3JvdW5kQ29sb3Iodm9pZCkgPSAwOwojIDQ5NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
bnNjb2xvciAmYUNvbG9yKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc0lGb250TWV0cmljcyog
R2V0Rm9udCh2b2lkKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb250KGNv
bnN0IG5zRm9udCAmYUZvbnQpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zQ3Vyc29yIEdldEN1
cnNvcih2b2lkKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDdXJzb3IobnND
dXJzb3IgYUN1cnNvcikgPSAwOwoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3dU
eXBlKG5zV2luZG93VHlwZSYgYVdpbmRvd1R5cGUpID0gMDsKCgoKCgogICAgdmlydHVhbCBuc3Jl
c3VsdCBWYWxpZGF0ZSgpID0gMDsKIyA1NDggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lX
aWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgSW52YWxpZGF0ZShQUkJvb2wgYUlzU3luY2hy
b25vdXMpID0gMDsKIyA1NTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIK
ICAgIHZpcnR1YWwgbnNyZXN1bHQgSW52YWxpZGF0ZShjb25zdCBuc1JlY3QgJiBhUmVjdCwgUFJC
b29sIGFJc1N5bmNocm9ub3VzKSA9IDA7CiMgNTY2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEludmFsaWRhdGVSZWdpb24oY29uc3Qg
bnNJUmVnaW9uKiBhUmVnaW9uLCBQUkJvb2wgYUlzU3luY2hyb25vdXMpID0gMDsKCgoKCgoKCiAg
ICAgdmlydHVhbCBuc3Jlc3VsdCBVcGRhdGUoKSA9IDA7CiMgNTgzICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEFkZE1vdXNlTGlzdGVu
ZXIobnNJTW91c2VMaXN0ZW5lciAqIGFMaXN0ZW5lcikgPSAwOwojIDU5MiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBBZGRFdmVudExp
c3RlbmVyKG5zSUV2ZW50TGlzdGVuZXIgKiBhTGlzdGVuZXIpID0gMDsKIyA2MDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgQWRkTWVu
dUxpc3RlbmVyKG5zSU1lbnVMaXN0ZW5lciAqIGFMaXN0ZW5lcikgPSAwOwoKCgoKCgoKICAgIHZp
cnR1YWwgbnNJVG9vbGtpdCogR2V0VG9vbGtpdCgpID0gMDsKIyA2MTggIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29sb3JNYXAo
bnNDb2xvck1hcCAqYUNvbG9yTWFwKSA9IDA7CiMgNjMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbChQUkludDMyIGFEeCwg
UFJJbnQzMiBhRHksIG5zUmVjdCAqYUNsaXBSZWN0KSA9IDA7CiMgNjQyICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbFdpZGdl
dHMoUFJJbnQzMiBhRHgsIFBSSW50MzIgYUR5KSA9IDA7CiMgNjU0ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbFJlY3QobnNS
ZWN0ICZhU3JjUmVjdCwgUFJJbnQzMiBhRHgsIFBSSW50MzIgYUR5KSA9IDA7CgoKCgoKCiAgICB2
aXJ0dWFsIHZvaWQgQWRkQ2hpbGQobnNJV2lkZ2V0KiBhQ2hpbGQpID0gMDsKICAgIHZpcnR1YWwg
dm9pZCBSZW1vdmVDaGlsZChuc0lXaWRnZXQqIGFDaGlsZCkgPSAwOwogICAgdmlydHVhbCB2b2lk
KiBHZXROYXRpdmVEYXRhKFBSVWludDMyIGFEYXRhVHlwZSkgPSAwOwogICAgdmlydHVhbCB2b2lk
IEZyZWVOYXRpdmVEYXRhKHZvaWQgKiBkYXRhLCBQUlVpbnQzMiBhRGF0YVR5cGUpID0gMDsKICAg
IHZpcnR1YWwgbnNJUmVuZGVyaW5nQ29udGV4dCogR2V0UmVuZGVyaW5nQ29udGV4dCgpID0gMDsK
ICAgIHZpcnR1YWwgbnNJRGV2aWNlQ29udGV4dCogR2V0RGV2aWNlQ29udGV4dCgpID0gMDsKICAg
IHZpcnR1YWwgbnNJQXBwU2hlbGwgKkdldEFwcFNoZWxsKCkgPSAwOwojIDY3NiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3Jk
ZXJTdHlsZShuc0JvcmRlclN0eWxlIGFCb3JkZXJTdHlsZSkgPSAwOwojIDY4NSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUaXRs
ZShjb25zdCBuc1N0cmluZyYgYVRpdGxlKSA9IDA7CiMgNjk2ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEljb24oY29uc3QgbnNB
UmVhZGFibGVTdHJpbmcmIGFuSWNvblNwZWMpID0gMDsKIyA3MDUgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWVudUJhcihuc0lN
ZW51QmFyICogYU1lbnVCYXIpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNob3dN
ZW51QmFyKFBSQm9vbCBhU2hvdykgPSAwOwojIDcyMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBXaWRnZXRUb1NjcmVlbihjb25zdCBu
c1JlY3QmIGFPbGRSZWN0LCBuc1JlY3QmIGFOZXdSZWN0KSA9IDA7CiMgNzMxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNjcmVlblRv
V2lkZ2V0KGNvbnN0IG5zUmVjdCYgYU9sZFJlY3QsIG5zUmVjdCYgYU5ld1JlY3QpID0gMDsKIyA3
NDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNy
ZXN1bHQgQmVnaW5SZXNpemluZ0NoaWxkcmVuKHZvaWQpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFs
IG5zcmVzdWx0IEVuZFJlc2l6aW5nQ2hpbGRyZW4odm9pZCkgPSAwOwoKCgoKCiAgICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFByZWZlcnJlZFNpemUoUFJJbnQzMiYgYVdpZHRoLCBQUkludDMyJiBhSGVp
Z2h0KSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJlZmVycmVkU2l6ZShQUklu
dDMyIGFXaWR0aCwgUFJJbnQzMiBhSGVpZ2h0KSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1
bHQgRGlzcGF0Y2hFdmVudChuc0dVSUV2ZW50KiBldmVudCwgbnNFdmVudFN0YXR1cyAmIGFTdGF0
dXMpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgUGFpbnQobnNJUmVuZGVyaW5nQ29u
dGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVj
dCYgYURpcnR5UmVjdCkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEVuYWJsZURyYWdE
cm9wKFBSQm9vbCBhRW5hYmxlKSA9IDA7CgogICAgdmlydHVhbCB2b2lkIENvbnZlcnRUb0Rldmlj
ZUNvb3JkaW5hdGVzKG5zY29vcmQgJmFYLG5zY29vcmQgJmFZKSA9IDA7CgoKCgoKCiAgICB2aXJ0
dWFsIG5zcmVzdWx0IENhcHR1cmVNb3VzZShQUkJvb2wgYUNhcHR1cmUpID0gMDsKIyA4MDAgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQg
Q2FwdHVyZVJvbGx1cEV2ZW50cyhuc0lSb2xsdXBMaXN0ZW5lciAqIGFMaXN0ZW5lciwgUFJCb29s
IGFEb0NhcHR1cmUsIFBSQm9vbCBhQ29uc3VtZVJvbGx1cEV2ZW50KSA9IDA7CiMgODEzICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBNb2Rh
bEV2ZW50RmlsdGVyKFBSQm9vbCBhUmVhbEV2ZW50LCB2b2lkICphRXZlbnQsIFBSQm9vbCAqYUZv
cldpbmRvdykgPSAwOwojIDgyMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0ZW50aW9uKCkgPSAwOwoKfTsKIyAzMCAibnNGb3Jt
Q29udHJvbEhlbHBlci5oIiAyCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNMZWFmRnJhbWUuaCIgMQoj
IDI1ICIuLi8uLi9iYXNlL3NyYy9uc0xlYWZGcmFtZS5oIgojIDEgIi4uLy4uL2Jhc2Uvc3JjL25z
RnJhbWUuaCIgMQojIDI2ICIuLi8uLi9iYXNlL3NyYy9uc0ZyYW1lLmgiCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZyYW1lLmgiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQu
aCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zbGF5b3V0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3Vw
cG9ydHMuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1RyYWNlUmVmY250LmgiIDEKIyAyOCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDIKIyAyNyAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
U3VwcG9ydHMuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1NpemUuaCIgMQojIDI5ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0dVSUV2ZW50LmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZy
YW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvbnN0cy5oIiAx
CiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlQ29uc3RzLmgiCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRm9udC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0eWxlQ29uc3RzLmgiIDIKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVj
dC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMQojIDI2ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHls
ZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWFyZ2luLmgiIDEK
IyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zRm9udC5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDI2
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zVm9pZEFycmF5LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFi
bGVTdHJpbmcuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXku
aCIgMgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKCnR5cGVkZWYgUFJCb29sICgqIG5zVm9pZEFy
cmF5RW51bUZ1bmMpKHZvaWQqIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CgoKY2xhc3MgbnNWb2lk
QXJyYXkgewpwdWJsaWM6CiAgbnNWb2lkQXJyYXkoKTsKICBuc1ZvaWRBcnJheShQUkludDMyIGFD
b3VudCk7CiAgdmlydHVhbCB+bnNWb2lkQXJyYXkoKTsKCiAgbnNWb2lkQXJyYXkmIG9wZXJhdG9y
PShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwoKICB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5k
bGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwoKICBQUkludDMyIENvdW50
KCkgY29uc3QgewogICAgcmV0dXJuIG1JbXBsID8gbUltcGwtPm1Db3VudCA6IDA7CiAgfQoKICB2
b2lkKiBFbGVtZW50QXQoUFJJbnQzMiBhSW5kZXgpIGNvbnN0OwogIHZvaWQqIG9wZXJhdG9yW10o
UFJJbnQzMiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJuIEVsZW1lbnRBdChhSW5kZXgpOyB9CgogIFBS
SW50MzIgSW5kZXhPZih2b2lkKiBhUG9zc2libGVFbGVtZW50KSBjb25zdDsKCiAgUFJCb29sIElu
c2VydEVsZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wg
UmVwbGFjZUVsZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJv
b2wgQXBwZW5kRWxlbWVudCh2b2lkKiBhRWxlbWVudCkgewogICAgcmV0dXJuIEluc2VydEVsZW1l
bnRBdChhRWxlbWVudCwgQ291bnQoKSk7CiAgfQoKICBQUkJvb2wgUmVtb3ZlRWxlbWVudCh2b2lk
KiBhRWxlbWVudCk7CiAgUFJCb29sIFJlbW92ZUVsZW1lbnRBdChQUkludDMyIGFJbmRleCk7CiAg
dm9pZCBDbGVhcigpOwoKICB2b2lkIENvbXBhY3QoKTsKCiAgUFJCb29sIEVudW1lcmF0ZUZvcndh
cmRzKG5zVm9pZEFycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wgRW51
bWVyYXRlQmFja3dhcmRzKG5zVm9pZEFycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsK
CnByb3RlY3RlZDoKICBzdHJ1Y3QgSW1wbCB7CgoKCgoKCiAgICBQUlVpbnQzMiBtQml0czsKCgoK
CiAgICBQUkludDMyIG1Db3VudDsKCgoKCiAgICB2b2lkKiBtQXJyYXlbMV07CiAgfTsKCiAgSW1w
bCogbUltcGw7CgogIGVudW0gewogICAga0FycmF5T3duZXJNYXNrID0gMSA8PCAzMSwKICAgIGtB
cnJheVNpemVNYXNrID0gfmtBcnJheU93bmVyTWFzawogIH07CgoKCiAgUFJJbnQzMiBHZXRBcnJh
eVNpemUoKSBjb25zdDsKICB2b2lkIFNldEFycmF5U2l6ZShQUkludDMyIGFTaXplKTsKICBQUkJv
b2wgSXNBcnJheU93bmVyKCkgY29uc3Q7CiAgdm9pZCBTZXRBcnJheU93bmVyKFBSQm9vbCBhT3du
ZXIpOwoKcHJpdmF0ZToKCiAgbnNWb2lkQXJyYXkoY29uc3QgbnNWb2lkQXJyYXkmIG90aGVyKTsK
fTsKCgoKY2xhc3MgbnNBdXRvVm9pZEFycmF5IDogcHVibGljIG5zVm9pZEFycmF5IHsKcHVibGlj
OgogIG5zQXV0b1ZvaWRBcnJheSgpOwoKcHJvdGVjdGVkOgoKCiAgZW51bSB7IGtBdXRvQnVmU2l6
ZSA9IDggfTsKICBjaGFyIG1BdXRvQnVmW3NpemVvZihJbXBsKSArIChrQXV0b0J1ZlNpemUgLSAx
KSAqIHNpemVvZih2b2lkKildOwp9OwoKCmNsYXNzIG5zU3RyaW5nOwoKdHlwZWRlZiBQUkJvb2wg
KCpuc1N0cmluZ0FycmF5RW51bUZ1bmMpKG5zU3RyaW5nJiBhRWxlbWVudCwgdm9pZCAqYURhdGEp
OwoKY2xhc3MgbnNTdHJpbmdBcnJheTogcHJvdGVjdGVkIG5zVm9pZEFycmF5CnsKcHVibGljOgog
IG5zU3RyaW5nQXJyYXkodm9pZCk7CiAgdmlydHVhbCB+bnNTdHJpbmdBcnJheSh2b2lkKTsKCiAg
bnNTdHJpbmdBcnJheSYgb3BlcmF0b3I9KGNvbnN0IG5zU3RyaW5nQXJyYXkmIG90aGVyKTsKCiAg
dm9pZCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBhUmVzdWx0
KSBjb25zdDsKCiAgUFJJbnQzMiBDb3VudCh2b2lkKSBjb25zdCB7CiAgICByZXR1cm4gbnNWb2lk
QXJyYXk6OkNvdW50KCk7CiAgfQoKICB2b2lkIFN0cmluZ0F0KFBSSW50MzIgYUluZGV4LCBuc0FX
cml0YWJsZVN0cmluZyYgYVN0cmluZykgY29uc3Q7CiAgbnNTdHJpbmcqIFN0cmluZ0F0KFBSSW50
MzIgYUluZGV4KSBjb25zdDsKICBuc1N0cmluZyogb3BlcmF0b3JbXShQUkludDMyIGFJbmRleCkg
Y29uc3QgeyByZXR1cm4gU3RyaW5nQXQoYUluZGV4KTsgfQoKICBQUkludDMyIEluZGV4T2YoY29u
c3QgbnNBUmVhZGFibGVTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CiAgUFJJbnQzMiBJ
bmRleE9mSWdub3JlQ2FzZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVBvc3NpYmxlU3RyaW5n
KSBjb25zdDsKCiAgUFJCb29sIEluc2VydFN0cmluZ0F0KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5n
JiBhU3RyaW5nLCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBSZXBsYWNlU3RyaW5nQXQoY29u
c3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHJpbmcsIFBSSW50MzIgYUluZGV4KTsKCiAgUFJCb29s
IEFwcGVuZFN0cmluZyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZykgewogICAgcmV0
dXJuIEluc2VydFN0cmluZ0F0KGFTdHJpbmcsIENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92
ZVN0cmluZyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZyk7CiAgUFJCb29sIFJlbW92
ZVN0cmluZ0lnbm9yZUNhc2UoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHJpbmcpOwogIFBS
Qm9vbCBSZW1vdmVTdHJpbmdBdChQUkludDMyIGFJbmRleCk7CiAgdm9pZCBDbGVhcih2b2lkKTsK
CiAgdm9pZCBDb21wYWN0KHZvaWQpIHsKICAgIG5zVm9pZEFycmF5OjpDb21wYWN0KCk7CiAgfQoK
ICBQUkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2
b2lkKiBhRGF0YSk7CiAgUFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc1N0cmluZ0FycmF5RW51
bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6CgogIG5zU3RyaW5nQXJyYXkoY29u
c3QgbnNTdHJpbmdBcnJheSYgb3RoZXIpOwp9OwoKCmNsYXNzIG5zQ1N0cmluZzsKCnR5cGVkZWYg
UFJCb29sICgqbnNDU3RyaW5nQXJyYXlFbnVtRnVuYykobnNDU3RyaW5nJiBhRWxlbWVudCwgdm9p
ZCAqYURhdGEpOwoKY2xhc3MgbnNDU3RyaW5nQXJyYXk6IHByb3RlY3RlZCBuc1ZvaWRBcnJheQp7
CnB1YmxpYzoKICBuc0NTdHJpbmdBcnJheSh2b2lkKTsKICB2aXJ0dWFsIH5uc0NTdHJpbmdBcnJh
eSh2b2lkKTsKCiAgbnNDU3RyaW5nQXJyYXkmIG9wZXJhdG9yPShjb25zdCBuc0NTdHJpbmdBcnJh
eSYgb3RoZXIpOwoKICB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJV
aW50MzIqIGFSZXN1bHQpIGNvbnN0OwoKICBQUkludDMyIENvdW50KHZvaWQpIGNvbnN0IHsKICAg
IHJldHVybiBuc1ZvaWRBcnJheTo6Q291bnQoKTsKICB9CgogIHZvaWQgQ1N0cmluZ0F0KFBSSW50
MzIgYUluZGV4LCBuc0NTdHJpbmcmIGFDU3RyaW5nKSBjb25zdDsKICBuc0NTdHJpbmcqIENTdHJp
bmdBdChQUkludDMyIGFJbmRleCkgY29uc3Q7CiAgbnNDU3RyaW5nKiBvcGVyYXRvcltdKFBSSW50
MzIgYUluZGV4KSBjb25zdCB7IHJldHVybiBDU3RyaW5nQXQoYUluZGV4KTsgfQoKICBQUkludDMy
IEluZGV4T2YoY29uc3QgbnNDU3RyaW5nJiBhUG9zc2libGVTdHJpbmcpIGNvbnN0OwogIFBSSW50
MzIgSW5kZXhPZklnbm9yZUNhc2UoY29uc3QgbnNDU3RyaW5nJiBhUG9zc2libGVTdHJpbmcpIGNv
bnN0OwoKICBQUkJvb2wgSW5zZXJ0Q1N0cmluZ0F0KGNvbnN0IG5zQ1N0cmluZyYgYUNTdHJpbmcs
IFBSSW50MzIgYUluZGV4KTsKCiAgUFJCb29sIFJlcGxhY2VDU3RyaW5nQXQoY29uc3QgbnNDU3Ry
aW5nJiBhQ1N0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgQXBwZW5kQ1N0cmluZyhj
b25zdCBuc0NTdHJpbmcmIGFDU3RyaW5nKSB7CiAgICByZXR1cm4gSW5zZXJ0Q1N0cmluZ0F0KGFD
U3RyaW5nLCBDb3VudCgpKTsKICB9CgogIFBSQm9vbCBSZW1vdmVDU3RyaW5nKGNvbnN0IG5zQ1N0
cmluZyYgYUNTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVDU3RyaW5nSWdub3JlQ2FzZShjb25zdCBu
c0NTdHJpbmcmIGFDU3RyaW5nKTsKICBQUkJvb2wgUmVtb3ZlQ1N0cmluZ0F0KFBSSW50MzIgYUlu
ZGV4KTsKICB2b2lkIENsZWFyKHZvaWQpOwoKICB2b2lkIENvbXBhY3Qodm9pZCkgewogICAgbnNW
b2lkQXJyYXk6OkNvbXBhY3QoKTsKICB9CgogIFBSQm9vbCBFbnVtZXJhdGVGb3J3YXJkcyhuc0NT
dHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7CiAgUFJCb29sIEVudW1lcmF0
ZUJhY2t3YXJkcyhuc0NTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7Cgpw
cml2YXRlOgoKICBuc0NTdHJpbmdBcnJheShjb25zdCBuc0NTdHJpbmdBcnJheSYgb3RoZXIpOwp9
OwojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb29yZC5oIiAxCiMgMjUgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlQ29vcmQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVD
b29yZC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvb3JkLmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHlsZUNvb3JkLmgiIDIKY2xhc3MgbnNTdHJpbmc7CgplbnVtIG5zU3R5bGVVbml0IHsK
ICBlU3R5bGVVbml0X051bGwgPSAwLAogIGVTdHlsZVVuaXRfTm9ybWFsID0gMSwKICBlU3R5bGVV
bml0X0F1dG8gPSAyLAogIGVTdHlsZVVuaXRfSW5oZXJpdCA9IDMsCiAgZVN0eWxlVW5pdF9QZXJj
ZW50ID0gMTAsCiAgZVN0eWxlVW5pdF9GYWN0b3IgPSAxMSwKICBlU3R5bGVVbml0X0Nvb3JkID0g
MjAsCiAgZVN0eWxlVW5pdF9JbnRlZ2VyID0gMzAsCiAgZVN0eWxlVW5pdF9Qcm9wb3J0aW9uYWwg
PSAzMSwKICBlU3R5bGVVbml0X0VudW1lcmF0ZWQgPSAzMiwKICBlU3R5bGVVbml0X0NoYXJzID0g
MzMKfTsKCnR5cGVkZWYgdW5pb24gewogIFBSSW50MzIgbUludDsKICBmbG9hdCBtRmxvYXQ7Cn0g
bnNTdHlsZVVuaW9uOwoKY2xhc3MgbnNTdHlsZUNvb3JkIHsKcHVibGljOgogIG5zU3R5bGVDb29y
ZChuc1N0eWxlVW5pdCBhVW5pdCA9IGVTdHlsZVVuaXRfTnVsbCk7CiAgbnNTdHlsZUNvb3JkKG5z
Y29vcmQgYVZhbHVlKTsKICBuc1N0eWxlQ29vcmQoUFJJbnQzMiBhVmFsdWUsIG5zU3R5bGVVbml0
IGFVbml0KTsKICBuc1N0eWxlQ29vcmQoZmxvYXQgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7
CiAgbnNTdHlsZUNvb3JkKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvcHkpOwoKICBuc1N0eWxlQ29v
cmQmIG9wZXJhdG9yPShjb25zdCBuc1N0eWxlQ29vcmQmIGFDb3B5KTsKICBQUkJvb2wgb3BlcmF0
b3I9PShjb25zdCBuc1N0eWxlQ29vcmQmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9y
IT0oY29uc3QgbnNTdHlsZUNvb3JkJiBhT3RoZXIpIGNvbnN0OwoKICBuc1N0eWxlVW5pdCBHZXRV
bml0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Vbml0OyB9CiAgbnNjb29yZCBHZXRDb29yZFZhbHVl
KHZvaWQpIGNvbnN0OwogIFBSSW50MzIgR2V0SW50VmFsdWUodm9pZCkgY29uc3Q7CiAgZmxvYXQg
R2V0UGVyY2VudFZhbHVlKHZvaWQpIGNvbnN0OwogIGZsb2F0IEdldEZhY3RvclZhbHVlKHZvaWQp
IGNvbnN0OwogIHZvaWQgR2V0VW5pb25WYWx1ZShuc1N0eWxlVW5pb24mIGFWYWx1ZSkgY29uc3Q7
CgogIHZvaWQgUmVzZXQodm9pZCk7CiAgdm9pZCBTZXRDb29yZFZhbHVlKG5zY29vcmQgYVZhbHVl
KTsKICB2b2lkIFNldEludFZhbHVlKFBSSW50MzIgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7
CiAgdm9pZCBTZXRQZXJjZW50VmFsdWUoZmxvYXQgYVZhbHVlKTsKICB2b2lkIFNldEZhY3RvclZh
bHVlKGZsb2F0IGFWYWx1ZSk7CiAgdm9pZCBTZXROb3JtYWxWYWx1ZSh2b2lkKTsKICB2b2lkIFNl
dEF1dG9WYWx1ZSh2b2lkKTsKICB2b2lkIFNldEluaGVyaXRWYWx1ZSh2b2lkKTsKICB2b2lkIFNl
dFVuaW9uVmFsdWUoY29uc3QgbnNTdHlsZVVuaW9uJiBhVmFsdWUsIG5zU3R5bGVVbml0IGFVbml0
KTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9p
ZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CgpwdWJsaWM6CiAgbnNTdHlsZVVu
aXQgbVVuaXQ7CiAgbnNTdHlsZVVuaW9uIG1WYWx1ZTsKfTsKCgpjbGFzcyBuc1N0eWxlU2lkZXMg
ewpwdWJsaWM6CiAgbnNTdHlsZVNpZGVzKHZvaWQpOwoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29u
c3QgbnNTdHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0OwogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0
IG5zU3R5bGVTaWRlcyYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVVuaXQgR2V0TGVmdFVuaXQo
dm9pZCkgY29uc3Q7CiAgbnNTdHlsZVVuaXQgR2V0VG9wVW5pdCh2b2lkKSBjb25zdDsKICBuc1N0
eWxlVW5pdCBHZXRSaWdodFVuaXQodm9pZCkgY29uc3Q7CiAgbnNTdHlsZVVuaXQgR2V0Qm90dG9t
VW5pdCh2b2lkKSBjb25zdDsKCiAgbnNTdHlsZUNvb3JkJiBHZXRMZWZ0KG5zU3R5bGVDb29yZCYg
YUNvb3JkKSBjb25zdDsKICBuc1N0eWxlQ29vcmQmIEdldFRvcChuc1N0eWxlQ29vcmQmIGFDb29y
ZCkgY29uc3Q7CiAgbnNTdHlsZUNvb3JkJiBHZXRSaWdodChuc1N0eWxlQ29vcmQmIGFDb29yZCkg
Y29uc3Q7CiAgbnNTdHlsZUNvb3JkJiBHZXRCb3R0b20obnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNv
bnN0OwoKICB2b2lkIFJlc2V0KHZvaWQpOwogIHZvaWQgU2V0TGVmdChjb25zdCBuc1N0eWxlQ29v
cmQmIGFDb29yZCk7CiAgdm9pZCBTZXRUb3AoY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpOwog
IHZvaWQgU2V0UmlnaHQoY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpOwogIHZvaWQgU2V0Qm90
dG9tKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3JkKTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhu
c1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9pZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZl
cikgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgUFJVaW50OCBtTGVmdFVuaXQ7CiAgUFJVaW50OCBtVG9w
VW5pdDsKICBQUlVpbnQ4IG1SaWdodFVuaXQ7CiAgUFJVaW50OCBtQm90dG9tVW5pdDsKICBuc1N0
eWxlVW5pb24gbUxlZnRWYWx1ZTsKICBuc1N0eWxlVW5pb24gbVRvcFZhbHVlOwogIG5zU3R5bGVV
bmlvbiBtUmlnaHRWYWx1ZTsKICBuc1N0eWxlVW5pb24gbUJvdHRvbVZhbHVlOwp9OwoKCgoKaW5s
aW5lIFBSQm9vbCBuc1N0eWxlQ29vcmQ6Om9wZXJhdG9yIT0oY29uc3QgbnNTdHlsZUNvb3JkJiBh
T3RoZXIpIGNvbnN0CnsKICByZXR1cm4gUFJCb29sKCEgKCgqdGhpcykgPT0gYU90aGVyKSk7Cn0K
CmlubGluZSBQUkludDMyIG5zU3R5bGVDb29yZDo6R2V0Q29vcmRWYWx1ZSh2b2lkKSBjb25zdAp7
CiAge307CiAgaWYgKG1Vbml0ID09IGVTdHlsZVVuaXRfQ29vcmQpIHsKICAgIHJldHVybiBtVmFs
dWUubUludDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBQUkludDMyIG5zU3R5bGVDb29yZDo6
R2V0SW50VmFsdWUodm9pZCkgY29uc3QKewogIHt9OwoKCgogIGlmICgobVVuaXQgPT0gZVN0eWxl
VW5pdF9Qcm9wb3J0aW9uYWwpIHx8CiAgICAgIChtVW5pdCA9PSBlU3R5bGVVbml0X0VudW1lcmF0
ZWQpIHx8CiAgICAgIChtVW5pdCA9PSBlU3R5bGVVbml0X0NoYXJzKSB8fAogICAgICAobVVuaXQg
PT0gZVN0eWxlVW5pdF9JbnRlZ2VyKSkgewogICAgcmV0dXJuIG1WYWx1ZS5tSW50OwogIH0KICBy
ZXR1cm4gMDsKfQoKaW5saW5lIGZsb2F0IG5zU3R5bGVDb29yZDo6R2V0UGVyY2VudFZhbHVlKHZv
aWQpIGNvbnN0CnsKICB7fTsKICBpZiAobVVuaXQgPT0gZVN0eWxlVW5pdF9QZXJjZW50KSB7CiAg
ICByZXR1cm4gbVZhbHVlLm1GbG9hdDsKICB9CiAgcmV0dXJuIDAuMGY7Cn0KCmlubGluZSBmbG9h
dCBuc1N0eWxlQ29vcmQ6OkdldEZhY3RvclZhbHVlKHZvaWQpIGNvbnN0CnsKICB7fTsKICBpZiAo
bVVuaXQgPT0gZVN0eWxlVW5pdF9GYWN0b3IpIHsKICAgIHJldHVybiBtVmFsdWUubUZsb2F0Owog
IH0KICByZXR1cm4gMC4wZjsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZUNvb3JkOjpHZXRVbmlvblZh
bHVlKG5zU3R5bGVVbmlvbiYgYVZhbHVlKSBjb25zdAp7CiAgbnNDUlQ6Om1lbWNweSgmYVZhbHVl
LCAmbVZhbHVlLCBzaXplb2YobnNTdHlsZVVuaW9uKSk7Cn0KCgoKCmlubGluZSBQUkJvb2wgbnNT
dHlsZVNpZGVzOjpvcGVyYXRvciE9KGNvbnN0IG5zU3R5bGVTaWRlcyYgYU90aGVyKSBjb25zdAp7
CiAgcmV0dXJuIFBSQm9vbCghICgoKnRoaXMpID09IGFPdGhlcikpOwp9CgppbmxpbmUgbnNTdHls
ZVVuaXQgbnNTdHlsZVNpZGVzOjpHZXRMZWZ0VW5pdCh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIChu
c1N0eWxlVW5pdCltTGVmdFVuaXQ7Cn0KCmlubGluZSBuc1N0eWxlVW5pdCBuc1N0eWxlU2lkZXM6
OkdldFRvcFVuaXQodm9pZCkgY29uc3QKewogIHJldHVybiAobnNTdHlsZVVuaXQpbVRvcFVuaXQ7
Cn0KCmlubGluZSBuc1N0eWxlVW5pdCBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0VW5pdCh2b2lkKSBj
b25zdAp7CiAgcmV0dXJuIChuc1N0eWxlVW5pdCltUmlnaHRVbml0Owp9CgppbmxpbmUgbnNTdHls
ZVVuaXQgbnNTdHlsZVNpZGVzOjpHZXRCb3R0b21Vbml0KHZvaWQpIGNvbnN0CnsKICByZXR1cm4g
KG5zU3R5bGVVbml0KW1Cb3R0b21Vbml0Owp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxl
U2lkZXM6OkdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0CnsKICBhQ29vcmQuU2V0
VW5pb25WYWx1ZShtTGVmdFZhbHVlLCAobnNTdHlsZVVuaXQpbUxlZnRVbml0KTsKICByZXR1cm4g
YUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFRvcChuc1N0
eWxlQ29vcmQmIGFDb29yZCkgY29uc3QKewogIGFDb29yZC5TZXRVbmlvblZhbHVlKG1Ub3BWYWx1
ZSwgKG5zU3R5bGVVbml0KW1Ub3BVbml0KTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNT
dHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0KG5zU3R5bGVDb29yZCYgYUNvb3JkKSBj
b25zdAp7CiAgYUNvb3JkLlNldFVuaW9uVmFsdWUobVJpZ2h0VmFsdWUsIChuc1N0eWxlVW5pdClt
UmlnaHRVbml0KTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0
eWxlU2lkZXM6OkdldEJvdHRvbShuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29uc3QKewogIGFDb29y
ZC5TZXRVbmlvblZhbHVlKG1Cb3R0b21WYWx1ZSwgKG5zU3R5bGVVbml0KW1Cb3R0b21Vbml0KTsK
ICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldExlZnQoY29u
c3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpCnsKICBtTGVmdFVuaXQgPSBhQ29vcmQuR2V0VW5pdCgp
OwogIGFDb29yZC5HZXRVbmlvblZhbHVlKG1MZWZ0VmFsdWUpOwp9CgppbmxpbmUgdm9pZCBuc1N0
eWxlU2lkZXM6OlNldFRvcChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIG1Ub3BVbml0
ID0gYUNvb3JkLkdldFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtVG9wVmFsdWUpOwp9
CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldFJpZ2h0KGNvbnN0IG5zU3R5bGVDb29yZCYg
YUNvb3JkKQp7CiAgbVJpZ2h0VW5pdCA9IGFDb29yZC5HZXRVbml0KCk7CiAgYUNvb3JkLkdldFVu
aW9uVmFsdWUobVJpZ2h0VmFsdWUpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldEJv
dHRvbShjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIG1Cb3R0b21Vbml0ID0gYUNvb3Jk
LkdldFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtQm90dG9tVmFsdWUpOwp9CiMgMzIg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAxCiMgMzMgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHlsZUNvbnN0cy5oIiAxCiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQu
aCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIKIyAxICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlv
LmgiIDEgMwojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVN0eWxlU2V0LmgiIDIKCmNsYXNzIG5zSUF0b207CmNsYXNzIG5zSVN0eWxlUnVsZTsKY2xhc3Mg
bnNJU3R5bGVTaGVldDsKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwpjbGFzcyBuc0lTdHlsZVJ1bGVT
dXBwbGllcjsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5z
SUZyYW1lOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3MgbnNJRnJhbWVNYW5hZ2VyOwpjbGFzcyBu
c0lTdXBwb3J0c0FycmF5OwpjbGFzcyBuc0lSdWxlTm9kZTsKc3RydWN0IG5zRmluZEZyYW1lSGlu
dDsKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVm9pZEFycmF5LmgiIDEKIyA0NCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlU2V0LmgiIDIKY2xhc3MgbnNJU2l6ZU9m
SGFuZGxlcjsKCmNsYXNzIG5zSUNTU1BzZXVkb0NvbXBhcmF0b3I7CgoKCgoKY2xhc3MgbnNJU3R5
bGVTZXQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlE
JiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7MHhlNTkzOTZiMCwgMHhiMjQ0LCAweDEx
ZDEsIHsweDgwLCAweDMxLCAweDAwLCAweDYwLCAweDA4LCAweDE1LCAweDliLCAweDVhfX07IHJl
dHVybiBpaWQ7IH0KCgoKICB2aXJ0dWFsIHZvaWQgQXBwZW5kT3ZlcnJpZGVTdHlsZVNoZWV0KG5z
SVN0eWxlU2hlZXQqIGFTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBJbnNlcnRPdmVycmlkZVN0
eWxlU2hlZXRBZnRlcihuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2hlZXQqIGFBZnRlclNoZWV0KSA9IDA7
CiAgdmlydHVhbCB2b2lkIEluc2VydE92ZXJyaWRlU3R5bGVTaGVldEJlZm9yZShuc0lTdHlsZVNo
ZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lTdHlsZVNoZWV0KiBhQmVmb3JlU2hlZXQpID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVtb3Zl
T3ZlcnJpZGVTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFTaGVldCkgPSAwOwogIHZpcnR1YWwg
UFJJbnQzMiBHZXROdW1iZXJPZk92ZXJyaWRlU3R5bGVTaGVldHMoKSA9IDA7CiAgdmlydHVhbCBu
c0lTdHlsZVNoZWV0KiBHZXRPdmVycmlkZVN0eWxlU2hlZXRBdChQUkludDMyIGFJbmRleCkgPSAw
OwoKCiAgdmlydHVhbCB2b2lkIEFkZERvY1N0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0
LCBuc0lEb2N1bWVudCogYURvY3VtZW50KSA9IDA7CiAgdmlydHVhbCB2b2lkIFJlbW92ZURvY1N0
eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmlydHVhbCBQUkludDMyIEdl
dE51bWJlck9mRG9jU3R5bGVTaGVldHMoKSA9IDA7CiAgdmlydHVhbCBuc0lTdHlsZVNoZWV0KiBH
ZXREb2NTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0gMDsKCiAgdmlydHVhbCB2b2lkIEFw
cGVuZEJhY2tzdG9wU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0
dWFsIHZvaWQgSW5zZXJ0QmFja3N0b3BTdHlsZVNoZWV0QWZ0ZXIobnNJU3R5bGVTaGVldCogYVNo
ZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHls
ZVNoZWV0KiBhQWZ0ZXJTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBJbnNlcnRCYWNrc3RvcFN0
eWxlU2hlZXRCZWZvcmUobnNJU3R5bGVTaGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYUJlZm9yZVNoZWV0KSA9
IDA7CiAgdmlydHVhbCB2b2lkIFJlbW92ZUJhY2tzdG9wU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0
KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0TnVtYmVyT2ZCYWNrc3RvcFN0eWxl
U2hlZXRzKCkgPSAwOwogIHZpcnR1YWwgbnNJU3R5bGVTaGVldCogR2V0QmFja3N0b3BTdHlsZVNo
ZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVwbGFjZUJhY2tzdG9w
U3R5bGVTaGVldHMobnNJU3VwcG9ydHNBcnJheSogYU5ld1NoZWV0cykgPSAwOwoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFJ1bGVUcmVlKG5zSVJ1bGVOb2RlKiogYVJlc3VsdCkgPSAwOwoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgRW5hYmxlUXVpcmtTdHlsZVNoZWV0KFBSQm9vbCBhRW5hYmxlKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeVN0eWxlU2hlZXRTdGF0ZUNoYW5nZWQoUFJCb29s
IGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVhbCBuc0lTdHlsZUNvbnRleHQqIFJlc29sdmVTdHls
ZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFQYXJlbnRDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFG
b3JjZVVuaXF1ZSA9IDApID0gMDsKCgogIHZpcnR1YWwgbnNJU3R5bGVDb250ZXh0KiBSZXNvbHZl
UHNldWRvU3R5bGVGb3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFQYXJlbnRD
b250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUZvcmNlVW5pcXVl
ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNTU1BzZXVkb0NvbXBhcmF0b3IqIGFDb21wYXJhdG9yID0gMCkgPSAwOwoKCgoKICB2aXJ0dWFs
IG5zSVN0eWxlQ29udGV4dCogUHJvYmVQc2V1ZG9TdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv
b2wgYUZvcmNlVW5pcXVlID0gMCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXRkb3duKCk9
MDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlUGFyZW50U3R5bGVDb250ZXh0KG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
U3R5bGVDb250ZXh0KiBhU3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSVN0eWxlQ29udGV4dCogYU5ld1BhcmVudENvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYU5ld1N0eWxlQ29udGV4dCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNTdGF0ZURlcGVuZGVudFN0eWxlKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDb250ZW50KiBhQ29udGVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb25zdHJ1
Y3RSb290RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYURvY0VsZW1lbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiYgYUZyYW1lU3ViVHJlZSkgPSAwOwoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFJlY29uc3RydWN0RG9jRWxlbWVudEhpZXJhcmNoeShuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRBcHBl
bmRlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUNvbnRlbnQqIGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJJbnQzMiBhTmV3SW5kZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
Q29udGVudEluc2VydGVkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJJbnQzMiBhSW5kZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
Q29udGVudFJlcGxhY2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lDb250ZW50KiBhT2xkQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQ29udGVudCogYU5ld0NoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSSW50MzIgYUluZGV4SW5Db250YWluZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IENv
bnRlbnRSZW1vdmVkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJJbnQzMiBhSW5kZXhJbkNvbnRhaW5lcikgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRl
bnRDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN1cHBvcnRzKiBhU3ViQ29udGVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29u
dGVudFN0YXRlc0NoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50MikgPSAwOwogIHZp
cnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU5hbWVTcGFjZUlELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IFN0eWxlUnVsZUNoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYVN0eWxlU2hlZXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1
bHQgU3R5bGVSdWxlQWRkZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2hlZXQqIGFTdHlsZVNoZWV0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5bGVSdWxlKSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTdHlsZVJ1bGVSZW1vdmVkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2hlZXQqIGFTdHlsZVNoZWV0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVJ1bGUqIGFTdHlsZVJ1bGUp
ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbnRSZW5kZXJSZXBsYWNlZEVsZW1lbnQo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBD
cmVhdGVDb250aW51aW5nRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUGFyZW50RnJhbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhQ29udGludWluZ0ZyYW1lKSA9
IDA7CiMgMjA1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEZpbmRQcmltYXJ5RnJhbWVGb3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWVNYW5hZ2VyKiBh
RnJhbWVNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50
KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBh
RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmluZEZyYW1lSGludCog
YUhpbnQ9MCkgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3R5bGVSdWxlU3VwcGxpZXIo
bnNJU3R5bGVSdWxlU3VwcGxpZXIqIGFTdXBwbGllcik9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFN0eWxlUnVsZVN1cHBsaWVyKG5zSVN0eWxlUnVsZVN1cHBsaWVyKiogYVN1cHBsaWVyKT0wOwoK
ICB2aXJ0dWFsIHZvaWQgTGlzdChGSUxFKiBvdXQgPSBzdGRvdXQsIFBSSW50MzIgYUluZGVudCA9
IDApID0gMDsKICB2aXJ0dWFsIHZvaWQgTGlzdENvbnRleHRzKG5zSVN0eWxlQ29udGV4dCogYVJv
b3RDb250ZXh0LCBGSUxFKiBvdXQgPSBzdGRvdXQsIFBSSW50MzIgYUluZGVudCA9IDApID0gMDsK
CiAgdmlydHVhbCB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyICphU2l6ZW9mSGFuZGxlciwg
UFJVaW50MzIgJmFTaXplKSA9IDA7CiAgdmlydHVhbCB2b2lkIFJlc2V0VW5pcXVlU3R5bGVJdGVt
cyh2b2lkKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVBZmZlY3RzU3R5bGUo
bnNJQXRvbSAqYUF0dHJpYnV0ZSwgbnNJQ29udGVudCAqYUNvbnRlbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sICZhQWZmZWN0cykgPSAwOwp9OwoKZXh0ZXJuIG5z
cmVzdWx0CiAgTlNfTmV3U3R5bGVTZXQobnNJU3R5bGVTZXQqKiBhSW5zdGFuY2VQdHJSZXN1bHQp
OwoKCmNsYXNzIG5zVW5pcXVlU3R5bGVJdGVtcyA6IHByaXZhdGUgbnNWb2lkQXJyYXkKewpwdWJs
aWMgOgoKICBzdGF0aWMgbnNVbmlxdWVTdHlsZUl0ZW1zICpHZXRVbmlxdWVTdHlsZUl0ZW1zKCB2
b2lkICl7CiAgICBpZihtSW5zdGFuY2UgPT0gMCl7CgoKCiAgICAgIG5ldyBuc1VuaXF1ZVN0eWxl
SXRlbXM7CgogICAgICB7fTsKCgoKICAgIH0KICAgIHJldHVybiBtSW5zdGFuY2U7CiAgfQoKICB2
b2lkICpHZXRJdGVtKHZvaWQgKmFQdHIpewogICAgUFJJbnQzMiBpbmRleCA9IG5zVm9pZEFycmF5
OjpJbmRleE9mKGFQdHIpOwogICAgaWYoIGluZGV4ICE9IC0xKXsKICAgICAgcmV0dXJuIG5zVm9p
ZEFycmF5OjpFbGVtZW50QXQoaW5kZXgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIDA7CiAg
ICB9CiAgfQoKICBQUkJvb2wgQWRkSXRlbSh2b2lkICphUHRyKXsKICAgIGlmKG5zVm9pZEFycmF5
OjpJbmRleE9mKGFQdHIpID09IC0xKXsKICAgICAgcmV0dXJuIG5zVm9pZEFycmF5OjpBcHBlbmRF
bGVtZW50KGFQdHIpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKICBQ
UkJvb2wgUmVtb3ZlSXRlbSh2b2lkICphUHRyKXsKICAgIHJldHVybiBuc1ZvaWRBcnJheTo6UmVt
b3ZlRWxlbWVudChhUHRyKTsKICB9CgogIFBSSW50MzIgQ291bnQodm9pZCl7CiAgICByZXR1cm4g
bnNWb2lkQXJyYXk6OkNvdW50KCk7CiAgfQoKICB2b2lkIENsZWFyKHZvaWQpewogICAgbnNWb2lk
QXJyYXk6OkNsZWFyKCk7CiAgfQpwcm90ZWN0ZWQ6CgogIG5zVW5pcXVlU3R5bGVJdGVtcyggY29u
c3QgbnNVbmlxdWVTdHlsZUl0ZW1zJiBzcmMpOwogIG5zVW5pcXVlU3R5bGVJdGVtcyYgb3BlcmF0
b3IgPShjb25zdCBuc1VuaXF1ZVN0eWxlSXRlbXMmIHNyYyk7CgoKICBuc1VuaXF1ZVN0eWxlSXRl
bXModm9pZCkgOiBuc1ZvaWRBcnJheSgpewogICAge307CiAgICBtSW5zdGFuY2U9dGhpczsKICB9
CgogIHN0YXRpYyBuc1VuaXF1ZVN0eWxlSXRlbXMgKm1JbnN0YW5jZTsKfTsKIyAzMDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5oIgpzdHJ1Y3QgbnNGaW5kRnJhbWVIaW50
CnsKICBuc0lGcmFtZSAqbVByaW1hcnlGcmFtZUZvclByZXZTaWJsaW5nOwogIG5zRmluZEZyYW1l
SGludCgpIHsKICAgIG1QcmltYXJ5RnJhbWVGb3JQcmV2U2libGluZyA9IDA7CiAgfTsKfTsKIyAz
NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc2xheW91dC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVz
Q29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgi
IDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNSZWN0LmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNDb2xvci5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVz
Q29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lSW1hZ2VM
b2FkZXIuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVJbWFnZUxv
YWRlci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAxCiMgMjYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZUltYWdlTG9hZGVyLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI3ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRnJhbWVJbWFnZUxvYWRlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRnJhbWVJbWFnZUxvYWRlci5oIiAyCgpjbGFzcyBuc0lGcmFtZTsKY2xhc3MgbnNJSW1hZ2U7
CmNsYXNzIG5zSUltYWdlR3JvdXA7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc1N0cmlu
ZzsKc3RydWN0IG5zU2l6ZTsKCgoKCgplbnVtIG5zSW1hZ2VBbmltYXRpb24gewogICAgZUltYWdl
QW5pbWF0aW9uX05vcm1hbCA9IDAsCiAgICBlSW1hZ2VBbmltYXRpb25fTm9uZSA9IDEsCiAgICBl
SW1hZ2VBbmltYXRpb25fTG9vcE9uY2UgPSAyCn07CgoKCgpjbGFzcyBuc0lGcmFtZUltYWdlTG9h
ZGVyOwp0eXBlZGVmIG5zcmVzdWx0ICgqbnNJRnJhbWVJbWFnZUxvYWRlckNCKShuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lGcmFtZUltYWdlTG9hZGVyKiBhTG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhQ2xvc3VyZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVN0YXR1cyk7CgoKCgoKCgpjbGFzcyBu
c0lGcmFtZUltYWdlTG9hZGVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRp
YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBuc0lJRCBpaWQgPSB7IDB4YTZjZjkwZWMs
IDB4MTViMywgMHgxMWQyLHsweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRk
LCAweDMyfX07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgbnNJSW1hZ2VHcm91cCogYUdy
b3VwLAogICAgICAgICAgICAgICAgICBjb25zdCBuc1N0cmluZyYgYVVSTCwKICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNjb2xvciogYUJhY2tncm91bmRDb2xvciwKICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNTaXplKiBhRGVzaXJlZFNpemUsCiAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBh
RnJhbWUsCiAgICAgICAgICAgICAgICAgIG5zSW1hZ2VBbmltYXRpb24gYUFuaW1hdGlvbk1vZGUs
CiAgICAgICAgICAgICAgICAgIG5zSUZyYW1lSW1hZ2VMb2FkZXJDQiBhQ2FsbEJhY2ssCiAgICAg
ICAgICAgICAgICAgIHZvaWQqIGFDbG9zdXJlLCB2b2lkKiBhS2V5KSA9IDA7CgogIHZpcnR1YWwg
bnNyZXN1bHQgU3RvcEltYWdlTG9hZChQUkJvb2wgYVN0b3BDaHJvbWUgPSAxKSA9IDA7CgogIHZp
cnR1YWwgbnNyZXN1bHQgQWJvcnRJbWFnZUxvYWQoKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQg
SXNTYW1lSW1hZ2VSZXF1ZXN0KGNvbnN0IG5zU3RyaW5nJiBhVVJMLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zY29sb3IqIGFCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTaXplKiBhRGVzaXJlZFNpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhUmVzdWx0KSA9IDA7CgogIHZpcnR1
YWwgbnNyZXN1bHQgQWRkRnJhbWUobnNJRnJhbWUqIGFGcmFtZSwgbnNJRnJhbWVJbWFnZUxvYWRl
ckNCIGFDYWxsQmFjaywKICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFDbG9zdXJlLCB2b2lk
KiBhS2V5KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlRnJhbWUodm9pZCogYUtleSkg
PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNhZmVUb0Rlc3Ryb3koUFJCb29sKiBhUmVzdWx0KSA9
IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VVJMKG5zU3RyaW5nJiBhUmVzdWx0KSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVzQ29udGV4dChuc0lQcmVzQ29udGV4dCoqIGFQcmVzQ29u
dGV4dCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlKG5zSUltYWdlKiogYVJlc3Vs
dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaXplKG5zU2l6ZSYgYVJlc3VsdCkgPSAw
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlTG9hZFN0YXR1cyhQUlVpbnQzMiogYUxvYWRT
dGF0dXMpID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludHJpbnNpY1NpemUobnNTaXpl
JiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYXR1cmFsSW1hZ2VTaXplKFBS
VWludDMyKiBuYXR1cmFsV2lkdGgsIFBSVWludDMyICpuYXR1cmFsSGVpZ2h0KSA9IDA7Cn07CiMg
MzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIiAyCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxhbmd1YWdlQXRvbS5oIiAxCiMgMjkgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lMYW5ndWFnZUF0b20uaCIKY2xhc3MgbnNJTGFuZ3VhZ2VBdG9t
IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH
ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MTFlLCAweDE1YjMsIDB4
MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19
OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2UoUFJVbmljaGFy
ICogKmFMYW5ndWFnZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5ndWFnZUdyb3Vw
KG5zSUF0b20gKiAqYUxhbmd1YWdlR3JvdXApID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGFu
Z3VhZ2VJcyhjb25zdCBQUlVuaWNoYXIgKmFMYW5ndWFnZSwgUFJCb29sICpfcmV0dmFsKSA9IDA7
Cgp9OwojIDMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMgoK
Y2xhc3MgbnNBdXRvU3RyaW5nOwpjbGFzcyBuc0JpZGlQcmVzVXRpbHM7CgoKc3RydWN0IG5zRm9u
dDsKCmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lEZXZpY2VD
b250ZXh0OwpjbGFzcyBuc0lGb250TWV0cmljczsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSUlt
YWdlOwpjbGFzcyBuc0lJbWFnZUdyb3VwOwpjbGFzcyBuc0lMaW5rSGFuZGxlcjsKY2xhc3MgbnNJ
UHJlc1NoZWxsOwpjbGFzcyBuc0lQcmVmOwpjbGFzcyBuc0lTdHlsZUNvbnRleHQ7CmNsYXNzIG5z
SUF0b207CmNsYXNzIG5zU3RyaW5nOwpjbGFzcyBuc0lFdmVudFN0YXRlTWFuYWdlcjsKY2xhc3Mg
bnNJVVJJOwpjbGFzcyBuc0lMb29rQW5kRmVlbDsKY2xhc3MgbnNJQ1NTUHNldWRvQ29tcGFyYXRv
cjsKIyA2NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiCmVudW0g
bnNDb21wYXRpYmlsaXR5IHsKICBlQ29tcGF0aWJpbGl0eV9TdGFuZGFyZCA9IDEsCiAgZUNvbXBh
dGliaWxpdHlfTmF2UXVpcmtzID0gMgp9OwoKZW51bSBuc1dpZGdldFJlbmRlcmluZyB7CiAgZVdp
ZGdldFJlbmRlcmluZ19OYXRpdmUgPSAxLAogIGVXaWRnZXRSZW5kZXJpbmdfR2Z4ID0gMiwKICBl
V2lkZ2V0UmVuZGVyaW5nX1BhcnRpYWxHZnggPSAzCn07CgplbnVtIG5zV2lkZ2V0VHlwZSB7CiAg
ZVdpZGdldFR5cGVfQnV0dG9uID0gMSwKICBlV2lkZ2V0VHlwZV9DaGVja2JveCA9IDIsCiAgZVdp
ZGdldFR5cGVfUmFkaW8gPSAzLAogIGVXaWRnZXRUeXBlX1RleHQgPSA0Cn07CgplbnVtIG5zTGFu
Z3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGUgewogIGVMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3Jt
VHlwZV9Vbmtub3duID0gLTEsCiAgZUxhbmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1UeXBlX05vbmUg
PSAwLAogIGVMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZV9KYXBhbmVzZSwKICBlTGFuZ3Vh
Z2VTcGVjaWZpY1RyYW5zZm9ybVR5cGVfS29yZWFuCn07CgoKY29uc3QgUFJVaW50MzIga1ByZXND
b250ZXh0X1VzZURvY3VtZW50Q29sb3JzID0gMHgwMTsKY29uc3QgUFJVaW50MzIga1ByZXNDb250
ZXh0X1VzZURvY3VtZW50Rm9udHMgPSAweDAyOwpjb25zdCBQUlVpbnQzMiBrUHJlc0NvbnRleHRf
VW5kZXJsaW5lTGlua3MgPSAweDAzOwoKCgpjbGFzcyBuc0lQcmVzQ29udGV4dCA6IHB1YmxpYyBu
c0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3Rh
dGljIG5zSUlEIGlpZCA9IHsgMHgwYTVkMTJlMCwgMHg5NDRlLCAweDExZDEsIHsweDkzLCAweDIz
LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkOyB9CgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lEZXZpY2VDb250ZXh0KiBhRGV2aWNlQ29udGV4
dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdG9wKFBSQm9vbCBhU3RvcENocm9tZSA9
IDEpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2hlbGwobnNJUHJlc1NoZWxsKiBh
U2hlbGwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaGVsbChuc0lQcmVzU2hlbGwq
KiBhUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tcGF0aWJpbGl0eU1v
ZGUobnNDb21wYXRpYmlsaXR5KiBhTW9kZVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0Q29tcGF0aWJpbGl0eU1vZGUobnNDb21wYXRpYmlsaXR5IGFNb2RlKSA9IDA7CgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0V2lkZ2V0UmVuZGVyaW5nTW9kZShuc1dpZGdldFJlbmRlcmluZyog
YU1vZGVSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpZGdldFJlbmRlcmluZ01v
ZGUobnNXaWRnZXRSZW5kZXJpbmcgYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRJbWFnZUFuaW1hdGlvbk1vZGUobnNJbWFnZUFuaW1hdGlvbiogYU1vZGVSZXN1bHQpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEltYWdlQW5pbWF0aW9uTW9kZShuc0ltYWdlQW5pbWF0aW9u
IGFNb2RlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9va0FuZEZlZWwobnNJTG9v
a0FuZEZlZWwqKiBhTG9va0FuZEZlZWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRC
YXNlVVJMKG5zSVVSSSoqIGFVUkxSZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRNZWRpdW0obnNJQXRvbSoqIGFNZWRpdW1SZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBSZW1hcFN0eWxlQW5kUmVmbG93KHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgUmVzb2x2ZVN0eWxlQ29udGV4dEZvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFGb3JjZVVuaXF1
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0Kiog
YVJlc3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZVBzZXVkb1N0eWxl
Q29udGV4dEZvcihuc0lDb250ZW50KiBhUGFyZW50Q29udGVudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFG
b3JjZVVuaXF1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
U3R5bGVDb250ZXh0KiogYVJlc3VsdCkgPSAwOwojIDE4OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNvbHZlUHNldWRvU3R5
bGVXaXRoQ29tcGFyYXRvcihuc0lDb250ZW50KiBhUGFyZW50Q29udGVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRl
eHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJCb29sIGFGb3JjZVVuaXF1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUNTU1BzZXVkb0NvbXBhcmF0b3IqIGFDb21wYXJhdG9yLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250
ZXh0KiogYVJlc3VsdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByb2JlUHNldWRv
U3R5bGVDb250ZXh0Rm9yKG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUZv
cmNlVW5pcXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5
bGVDb250ZXh0KiogYVJlc3VsdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZVBhcmVu
dFN0eWxlQ29udGV4dChuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhTmV3UGFyZW50Q29udGV4dCkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZyb21TaGVsbChzaXplX3QgYVNpemUsIHZvaWQqKiBhUmVz
dWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBGcmVlVG9TaGVsbChzaXplX3QgYVNpemUsIHZv
aWQqIGFGcmVlQ2h1bmspID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRyaWNzRm9y
KGNvbnN0IG5zRm9udCYgYUZvbnQsIG5zSUZvbnRNZXRyaWNzKiogYVJlc3VsdCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0Rm9udChuc0ZvbnQmIGFSZXN1bHQpID0gMDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0Rm9udChjb25zdCBuc0ZvbnQmIGFGb250KSA9IDA7
CiAgdmlydHVhbCBjb25zdCBuc0ZvbnQmIEdldERlZmF1bHRGb250RGVwcmVjYXRlZCgpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEZpeGVkRm9udChuc0ZvbnQmIGFSZXN1bHQp
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0Rml4ZWRGb250KGNvbnN0IG5zRm9u
dCYgYUZvbnQpID0gMDsKICB2aXJ0dWFsIGNvbnN0IG5zRm9udCYgR2V0RGVmYXVsdEZpeGVkRm9u
dERlcHJlY2F0ZWQoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDYWNoZWRCb29s
UHJlZihQUlVpbnQzMiBwcmVmVHlwZSwgUFJCb29sICZhVmFsdWUpID0gMDsKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRGb250U2NhbGVyKFBSSW50MzIqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldEZvbnRTY2FsZXIoUFJJbnQzMiBhU2NhbGVyKSA9IDA7CgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RGVmYXVsdENvbG9yKG5zY29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91bmRDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0g
MDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRCYWNrZ3JvdW5kSW1hZ2UobnNTdHJpbmcm
IGFJbWFnZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91bmRJbWFn
ZVJlcGVhdChQUlVpbnQ4KiBhUmVwZWF0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZh
dWx0QmFja2dyb3VuZEltYWdlT2Zmc2V0KG5zY29vcmQqIGFYLCBuc2Nvb3JkKiBhWSkgPSAwOwog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91bmRJbWFnZUF0dGFjaG1lbnQoUFJV
aW50OCogYVJlcGVhdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdExpbmtDb2xv
cihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRWaXNp
dGVkTGlua0NvbG9yKG5zY29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
Rm9jdXNCYWNrZ3JvdW5kQ29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRGb2N1c1RleHRDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFVzZUZvY3VzQ29sb3JzKFBSQm9vbCYgdXNlRm9jdXNDb2xvcnMpID0gMDsKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEZvY3VzUmluZ1dpZHRoKFBSVWludDggKmZvY3VzUmluZ1dpZHRo
KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2N1c1JpbmdPbkFueXRoaW5nKFBSQm9vbCYg
Zm9jdXNSaW5nT25Bbnl0aGluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0
Q29sb3IobnNjb2xvciBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRC
YWNrZ3JvdW5kQ29sb3IobnNjb2xvciBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dERlZmF1bHRCYWNrZ3JvdW5kSW1hZ2UoY29uc3QgbnNTdHJpbmcmIGFJbWFnZSkgPSAwOwogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdEJhY2tncm91bmRJbWFnZVJlcGVhdChQUlVpbnQ4IGFS
ZXBlYXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRCYWNrZ3JvdW5kSW1hZ2VP
ZmZzZXQobnNjb29yZCBhWCwgbnNjb29yZCBhWSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
RGVmYXVsdEJhY2tncm91bmRJbWFnZUF0dGFjaG1lbnQoUFJVaW50OCBhUmVwZWF0KSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0TGlua0NvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0VmlzaXRlZExpbmtDb2xvcihuc2NvbG9yIGFD
b2xvcikgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlR3JvdXAobnNJSW1hZ2VHcm91
cCoqIGFHcm91cFJlc3VsdCkgPSAwOwojIDI5MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdGFydExvYWRJbWFnZShjb25zdCBu
c1N0cmluZyYgYVVSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29sb3Iq
IGFCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1Np
emUqIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBh
VGFyZ2V0RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZUltYWdlTG9h
ZGVyQ0IgYUNhbGxCYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUNsb3N1
cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhS2V5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJRnJhbWVJbWFnZUxvYWRlcioqIGFSZXN1bHQpID0gMDsKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBTdG9wTG9hZEltYWdlKHZvaWQqIGFLZXksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZyYW1lSW1hZ2VMb2FkZXIqIGFMb2FkZXIpID0gMDsKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBTdG9wQWxsTG9hZEltYWdlc0Zvcihuc0lGcmFtZSogYVRhcmdldEZyYW1l
LCB2b2lkKiBhS2V5KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29udGFpbmVyKG5zSVN1
cHBvcnRzKiBhQ29udGFpbmVyKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGFpbmVy
KG5zSVN1cHBvcnRzKiogYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaW5r
SGFuZGxlcihuc0lMaW5rSGFuZGxlciogYUhhbmRsZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldExpbmtIYW5kbGVyKG5zSUxpbmtIYW5kbGVyKiogYVJlc3VsdCkgPSAwOwoKCgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFZpc2libGVBcmVhKG5zUmVjdCYgYVJlc3VsdCkgPSAwOwoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaXNpYmxlQXJlYShjb25zdCBuc1JlY3QmIHIpID0gMDsK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNQYWdpbmF0ZWQoUFJCb29sKiBhUmVzdWx0KSA9IDA7
CiMgMzUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFBhZ2VEaW0obnNSZWN0KiBhQWN0dWFsUmVjdCwgbnNSZWN0KiBhQWRq
UmVjdCkgPSAwOwojIDM1OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYWdlRGltKG5zUmVjdCogYVJlY3QpID0gMDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRQaXhlbHNUb1R3aXBzKGZsb2F0KiBhUmVzdWx0KSBjb25zdCA9
IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHdpcHNUb1BpeGVscyhmbG9hdCogYVJlc3VsdCkg
Y29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NhbGVkUGl4ZWxzVG9Ud2lw
cyhmbG9hdCogYVNjYWxlKSBjb25zdCA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERldmlj
ZUNvbnRleHQobnNJRGV2aWNlQ29udGV4dCoqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRFdmVudFN0YXRlTWFuYWdlcihuc0lFdmVudFN0YXRlTWFuYWdlcioqIGFN
YW5hZ2VyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5ndWFnZShuc0lMYW5ndWFnZUF0
b20qKiBhTGFuZ3VhZ2UpID0gMDsKIyAzODYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQ
cmVzQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2VTcGVjaWZpY1RyYW5z
Zm9ybVR5cGUoCiAgICAgICAgICAgICAgbnNMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZSog
YVR5cGUpID0gMDsKIyAzOTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4
dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaUVuYWJsZWQoUFJCb29sKiBhQmlkaUVuYWJs
ZWQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJpZGlFbmFibGVkKFBS
Qm9vbCBhQmlkaUVuYWJsZWQpIGNvbnN0ID0gMDsKIyA0MjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lQcmVzQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmlzdWFsTW9kZShQ
UkJvb2wgYUlzVmlzdWFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc3VhbE1v
ZGUoUFJCb29sJiBhSXNWaXN1YWwpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEJpZGlVdGlscyhuc0JpZGlQcmVzVXRpbHMqKiBhQmlkaVV0aWxzKSA9IDA7CgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0QmlkaShQUlVpbnQzMiBhQmlkaU9wdGlvbnMsIFBSQm9vbCBhRm9y
Y2VSZWZsb3cgPSAwKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaShQUlVpbnQz
MiogYUJpZGlPcHRpb25zKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc1JUTChQ
UkJvb2wgJmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNBcmFiaWNFbmNv
ZGluZyhQUkJvb2wgJmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SXNC
aWRpU3lzdGVtKFBSQm9vbCBhSXNCaWRpKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dElzQmlkaVN5c3RlbShQUkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRCaWRpQ2hhcnNldChuc0F1dG9TdHJpbmcgJmFDaGFyU2V0KSA9IDA7CgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldElzUmVuZGVyaW5nT25seVNlbGVjdGlvbihQUkJvb2wgYVJl
c3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgSXNSZW5kZXJpbmdPbmx5U2VsZWN0aW9uKFBS
Qm9vbCogYVJlc3VsdCkgPSAwOwoKCgoKCn07CiMgNDk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJUHJlc0NvbnRleHQuaCIKZXh0ZXJuIG5zcmVzdWx0CiAgTlNfTmV3R2FsbGV5Q29udGV4
dChuc0lQcmVzQ29udGV4dCoqIGFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCmV4dGVybiBuc3Jlc3Vs
dAogIE5TX05ld1ByaW50UHJldmlld0NvbnRleHQobnNJUHJlc0NvbnRleHQqKiBhSW5zdGFuY2VQ
dHJSZXN1bHQpOwojIDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5o
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAxCiMgNDAg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJUHJlc1NoZWxsLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3Vw
cG9ydHMuaCIgMQojIDQyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgNDMgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTZWxlY3Rpb24uaCIgMQojIDE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU2VsZWN0aW9uLmgiCmNsYXNzIG5zSURPTU5vZGU7CgpjbGFzcyBuc0lET01SYW5nZTsK
IyAzNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbi5oIgpjbGFzcyBuc0lT
ZWxlY3Rpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YjJjN2VkNTksIDB4
ODYzNCwgMHg0MzUyLCB7IDB4OWUsIDB4MzcsIDB4NTQsIDB4ODQsIDB4YzgsIDB4YjYsIDB4ZTQs
IDB4ZTEgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbmNob3JO
b2RlKG5zSURPTU5vZGUgKiAqYUFuY2hvck5vZGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0QW5jaG9yT2Zmc2V0KFBSSW50MzIgKmFBbmNob3JPZmZzZXQpID0gMDsKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNOb2RlKG5zSURPTU5vZGUgKiAqYUZvY3VzTm9kZSkgPSAw
OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2N1c09mZnNldChQUkludDMyICphRm9jdXNP
ZmZzZXQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXNDb2xsYXBzZWQoUFJCb29s
ICphSXNDb2xsYXBzZWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmFuZ2VDb3Vu
dChQUkludDMyICphUmFuZ2VDb3VudCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRS
YW5nZUF0KFBSSW50MzIgaW5kZXgsIG5zSURPTVJhbmdlICoqX3JldHZhbCkgPSAwOwojIDkxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBDb2xsYXBzZShuc0lET01Ob2RlICpwYXJlbnROb2RlLCBQUkludDMyIG9mZnNldCkgPSAwOwoj
IDEwMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbi5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgRXh0ZW5kKG5zSURPTU5vZGUgKnBhcmVudE5vZGUsIFBSSW50MzIgb2Zmc2V0KSA9
IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29sbGFwc2VUb1N0YXJ0KHZvaWQpID0gMDsK
CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb2xsYXBzZVRvRW5kKHZvaWQpID0gMDsKIyAxMjcg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IENvbnRhaW5zTm9kZShuc0lET01Ob2RlICpub2RlLCBQUkJvb2wgZW50aXJlbHlDb250YWlu
ZWQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0
QWxsQ2hpbGRyZW4obnNJRE9NTm9kZSAqcGFyZW50Tm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBBZGRSYW5nZShuc0lET01SYW5nZSAqcmFuZ2UpID0gMDsKCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgUmVtb3ZlUmFuZ2UobnNJRE9NUmFuZ2UgKnJhbmdlKSA9IDA7CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFJlbW92ZUFsbFJhbmdlcyh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IERlbGV0ZUZyb21Eb2N1bWVudCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2VsZWN0aW9uTGFuZ3VhZ2VDaGFuZ2UoUFJCb29sIGxhbmdSVEwpID0gMDsKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcoUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKfTsK
IyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAyCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlZmxvd0NvbW1hbmQuaCIgMQojIDI1ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lSZWZsb3dDb21tYW5kLmgiIDIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIiAyCgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBu
c0lGcmFtZTsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7
CnN0cnVjdCBuc0hUTUxSZWZsb3dNZXRyaWNzOwpzdHJ1Y3QgbnNTaXplOwojIDY1ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIgpjbGFzcyBuc0lSZWZsb3dDb21t
YW5kIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYg
R2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0geyAweGMzNjU4ZTQwLCAweGZmMjAsIDB4MTFk
MSwgezB4ODUsIDB4YmMsIDB4MCwgMHhhMCwgMHgyNCwgMHg2OCwgMHhmYSwgMHhiNn19OyByZXR1
cm4gaWlkOyB9CgogIGVudW0gUmVmbG93VHlwZSB7CgoKCgoKICAgIENvbnRlbnRDaGFuZ2VkLAoK
CgoKCiAgICBTdHlsZUNoYW5nZWQsCgoKCgogICAgUHVsbHVwUmVmbG93LAogICAgUHVzaFJlZmxv
dywKCgoKCiAgICBDaGVja1B1bGx1cFJlZmxvdywKCgogICAgUmVmbG93RGlydHksCgoKICAgIFRp
bWVvdXQsCgoKICAgIFVzZXJEZWZpbmVkCiAgfTsKIyAxMTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lSZWZsb3dDb21tYW5kLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEaXNwYXRjaChuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgbnNIVE1MUmVm
bG93TWV0cmljcyYgYURlc2lyZWRTaXplLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNT
aXplJiBhTWF4U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQm
IGFSZW5kQ29udGV4dCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dChuc0lG
cmFtZSomIGFOZXh0RnJhbWUsIFBSQm9vbCBhUmVtb3ZlID0gMSkgPSAwOwoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFRhcmdldChuc0lGcmFtZSomIGFUYXJnZXRGcmFtZSkgY29uc3QgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRhcmdldChuc0lGcmFtZSogYVRhcmdldEZyYW1lKSA9
IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShSZWZsb3dUeXBlJiBhUmVmbG93VHlw
ZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkRnJhbWUobnNJRnJh
bWUqJiBhQ2hpbGRGcmFtZSkgY29uc3QgPSAwOwojIDE1MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVJlZmxvd0NvbW1hbmQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkTGlzdE5h
bWUobnNJQXRvbSomIGFMaXN0TmFtZSkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0Q2hpbGRMaXN0TmFtZShuc0lBdG9tKiBhTGlzdE5hbWUpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0UHJldlNpYmxpbmdGcmFtZShuc0lGcmFtZSomIGFTaWJsaW5nRnJhbWUp
IGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMaXN0KEZJTEUqIG91dCkgY29uc3Qg
PSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZsYWdzKFBSSW50MzIqIGFGbGFncykgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmxhZ3MoUFJJbnQzMiBhRmxhZ3MpID0gMDsKfTsKIyA0
NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIgMQojIDQ2ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiIDIKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIgMQojIDIxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgpjbGFzcyBuc0lTZWxlY3Rpb247CnR5cGVkZWYg
c2hvcnQgU2VsZWN0aW9uVHlwZTsKdHlwZWRlZiBzaG9ydCBTZWxlY3Rpb25SZWdpb247CmNsYXNz
IG5zSURPTU5vZGU7CiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25D
b250cm9sbGVyLmgiCmNsYXNzIG5zSVNlbGVjdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgbnNJU3Vw
cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg
Y29uc3QgbnNJSUQgaWlkID0gezB4ZDJkMWQxNzksIDB4ODVhNywgMHgxMWQzLCB7IDB4OTksIDB4
MzIsIDB4MDAsIDB4MTAsIDB4ODMsIDB4MDEsIDB4MjMsIDB4M2MgfX07IHJldHVybiBpaWQ7fQoK
ICBlbnVtIHsgU0VMRUNUSU9OX05PTkUgPSAwIH07CgogIGVudW0geyBTRUxFQ1RJT05fTk9STUFM
ID0gMSB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX1NQRUxMQ0hFQ0sgPSAyIH07CgogIGVudW0geyBT
RUxFQ1RJT05fSU1FX1JBV0lOUFVUID0gNCB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX0lNRV9TRUxF
Q1RFRFJBV1RFWFQgPSA4IH07CgogIGVudW0geyBTRUxFQ1RJT05fSU1FX0NPTlZFUlRFRFRFWFQg
PSAxNiB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX0lNRV9TRUxFQ1RFRENPTlZFUlRFRFRFWFQgPSAz
MiB9OwoKICBlbnVtIHsgTlVNX1NFTEVDVElPTlRZUEVTID0gNiB9OwoKICBlbnVtIHsgU0VMRUNU
SU9OX0FOQ0hPUl9SRUdJT04gPSAwIH07CgogIGVudW0geyBTRUxFQ1RJT05fRk9DVVNfUkVHSU9O
ID0gMSB9OwoKICBlbnVtIHsgTlVNX1NFTEVDVElPTl9SRUdJT05TID0gMiB9OwoKICBlbnVtIHsg
U0VMRUNUSU9OX09GRiA9IDAgfTsKCiAgZW51bSB7IFNFTEVDVElPTl9ISURERU4gPSAxIH07Cgog
IGVudW0geyBTRUxFQ1RJT05fT04gPSAyIH07CgogIGVudW0geyBTRUxFQ1RJT05fRElTQUJMRUQg
PSAzIH07CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERpc3BsYXlTZWxlY3Rpb24oUFJJbnQx
NiB0b2dnbGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlzcGxheVNlbGVjdGlv
bihQUkludDE2ICpfcmV0dmFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXNw
bGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJvb2wgdG9nZ2xlKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXREaXNwbGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJvb2wgKl9yZXR2YWwpID0gMDsK
IyAxMDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9sbGVyLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb24oUFJJbnQxNiB0eXBlLCBuc0lTZWxlY3Rp
b24gKipfcmV0dmFsKSA9IDA7CiMgMTEzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2Vs
ZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsU2VsZWN0aW9uSW50
b1ZpZXcoUFJJbnQxNiB0eXBlLCBQUkludDE2IHJlZ2lvbikgPSAwOwoKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFJlcGFpbnRTZWxlY3Rpb24oUFJJbnQxNiB0eXBlKSA9IDA7CiMgMTMxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0Q2FyZXRFbmFibGVkKFBSQm9vbCBlbmFibGVkKSA9IDA7CiMgMTQwICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0Q2FyZXRXaWR0aChQUkludDE2IHBpeGVscykgPSAwOwojIDE0OSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldENhcmV0UmVhZE9ubHkoUFJCb29sIHJlYWRPbmx5KSA9IDA7CiMgMTU4ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0Q2FyZXRFbmFibGVkKFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDE2OCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IENoYXJhY3Rlck1vdmUoUFJCb29sIGZvcndhcmQsIFBSQm9vbCBleHRlbmQpID0g
MDsKIyAxNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9sbGVy
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBXb3JkTW92ZShQUkJvb2wgZm9yd2FyZCwgUFJCb29sIGV4
dGVuZCkgPSAwOwojIDE4OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNv
bnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IExpbmVNb3ZlKFBSQm9vbCBmb3J3YXJkLCBQ
UkJvb2wgZXh0ZW5kKSA9IDA7CiMgMTk5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2Vs
ZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW50cmFMaW5lTW92ZShQUkJv
b2wgZm9yd2FyZCwgUFJCb29sIGV4dGVuZCkgPSAwOwojIDIwOSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFBhZ2VN
b3ZlKFBSQm9vbCBmb3J3YXJkLCBQUkJvb2wgZXh0ZW5kKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IENvbXBsZXRlU2Nyb2xsKFBSQm9vbCBmb3J3YXJkKSA9IDA7CiMgMjI1ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgQ29tcGxldGVNb3ZlKFBSQm9vbCBmb3J3YXJkLCBQUkJvb2wgZXh0ZW5kKSA9IDA7CgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbFBhZ2UoUFJCb29sIGZvcndhcmQpID0gMDsKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsTGluZShQUkJvb2wgZm9yd2FyZCkgPSAwOwoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxIb3Jpem9udGFsKFBSQm9vbCBsZWZ0KSA9IDA7CgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0QWxsKHZvaWQpID0gMDsKIyAyNTggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBDaGVja1Zpc2liaWxpdHkobnNJRE9NTm9kZSAqbm9kZSwgUFJJbnQxNiBzdGFydE9mZnNl
dCwgUFJJbnQxNiBlbmRPZmZzZXQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyA0OCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAyCgoKY2xhc3MgbnNJQ29udGVu
dDsKY2xhc3MgbnNJQ29udGVudEl0ZXJhdG9yOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3MgbnNJ
RG9jdW1lbnRPYnNlcnZlcjsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0Owpj
bGFzcyBuc0lTdHlsZVNldDsKY2xhc3MgbnNJVmlld01hbmFnZXI7CmNsYXNzIG5zSURldmljZUNv
bnRleHQ7CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zSVBhZ2VTZXF1ZW5jZUZy
YW1lOwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNTdHJpbmdBcnJheTsKY2xhc3MgbnNJQ2FyZXQ7
CmNsYXNzIG5zSVN0eWxlQ29udGV4dDsKY2xhc3MgbnNJRnJhbWVTZWxlY3Rpb247CmNsYXNzIG5z
SUZyYW1lTWFuYWdlcjsKY2xhc3MgbnNJTGF5b3V0SGlzdG9yeVN0YXRlOwpjbGFzcyBuc0lBcmVu
YTsKY2xhc3MgbnNJUmVmbG93Q2FsbGJhY2s7CmNsYXNzIG5zSVN1cHBvcnRzQXJyYXk7CiMgMTA2
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCmVudW0gbnNBdHRyaWJ1
dGVDaGFuZ2VUeXBlIHsKICBlQ2hhbmdlVHlwZV9TZXQgPSAwLAogIGVDaGFuZ2VUeXBlX1JlbW92
ZSA9IDEKfTsKIyAxMjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIK
Y2xhc3MgbnNJUHJlc1NoZWxsIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRp
YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0geyAweDc2ZTc5YzYw
LCAweDk0NGUsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4
ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7IH0KCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSURv
Y3VtZW50KiBhRG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgIG5zSVZpZXdNYW5hZ2VyKiBhVmlld01hbmFnZXIs
CiAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2V0KiBhU3R5bGVTZXQpID0gMDsKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZyYW1lKHNpemVfdCBhU2l6ZSwgdm9pZCoqIGFSZXN1bHQp
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEZyZWVGcmFtZShzaXplX3QgYVNpemUsIHZvaWQqIGFG
cmVlQ2h1bmspID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHVzaFN0YWNrTWVtb3J5KCkgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgUG9wU3RhY2tNZW1vcnkoKSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBBbGxvY2F0ZVN0YWNrTWVtb3J5KHNpemVfdCBhU2l6ZSwgdm9pZCoqIGFSZXN1bHQpID0g
MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudChuc0lEb2N1bWVudCoqIGFSZXN1bHQp
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVzQ29udGV4dChuc0lQcmVzQ29udGV4dCoq
IGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3TWFuYWdlcihuc0lWaWV3
TWFuYWdlcioqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZVNldChu
c0lTdHlsZVNldCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY3RpdmVB
bHRlcm5hdGVTdHlsZVNoZWV0KG5zU3RyaW5nJiBhU2hlZXRUaXRsZSkgPSAwOwoKICB2aXJ0dWFs
IG5zcmVzdWx0IFNlbGVjdEFsdGVybmF0ZVN0eWxlU2hlZXQoY29uc3QgbnNTdHJpbmcmIGFTaGVl
dFRpdGxlKSA9IDA7CiMgMTYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxs
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmVmZXJlbmNlU3R5bGVSdWxlcyhQUkJvb2wgYUZv
cmNlUmVmbG93KSA9IDA7CiMgMTcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1No
ZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVQcmVmU3R5bGVSdWxlcyhQUkJvb2wgYUVu
YWJsZSwgUFJVaW50OCBhUHJlZlR5cGU9MHhGRikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXJl
UHJlZlN0eWxlUnVsZXNFbmFibGVkKFBSQm9vbCYgYUVuYWJsZWQpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgTGlzdEFsdGVybmF0ZVN0eWxlU2hlZXRzKG5zU3RyaW5nQXJyYXkmIGFUaXRs
ZUxpc3QpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVTZWxlY3Rpb24obnNJ
RnJhbWVTZWxlY3Rpb24qKiBhU2VsZWN0aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJl
Z2luT2JzZXJ2aW5nRG9jdW1lbnQoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZE9ic2Vy
dmluZ0RvY3VtZW50KCkgPSAwOwojIDE5OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBy
ZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlhbFJlZmxvdyhuc2Nvb3JkIGFXaWR0
aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc2l6ZVJl
Zmxvdyhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgU3R5bGVDaGFuZ2VSZWZsb3coKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
Um9vdEZyYW1lKG5zSUZyYW1lKiogYUZyYW1lKSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFBhZ2VTZXF1ZW5jZUZyYW1lKG5zSVBhZ2VTZXF1ZW5jZUZyYW1lKiogYVJlc3Vs
dCkgY29uc3QgPSAwOwojIDIzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVs
bC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJpbWFyeUZyYW1lRm9yKG5zSUNvbnRlbnQqIGFD
b250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYVByaW1h
cnlGcmFtZSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZUNvbnRl
eHRGb3IobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdHlsZUNvbnRleHQqKiBhU3R5bGVDb250ZXh0KSBjb25zdCA9IDA7CgoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0TGF5b3V0T2JqZWN0Rm9yKG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiogYVJlc3VsdCkgY29uc3Qg
PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdWJTaGVsbEZvcihuc0lDb250ZW50KiBh
Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiogYVJlc3Vs
dCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdWJTaGVsbEZvcihuc0lD
b250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRz
KiBhU3ViU2hlbGwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGxhY2Vob2xkZXJG
cmFtZUZvcihuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lGcmFtZSoqIGFQbGFjZWhvbGRlckZyYW1lKSBjb25zdCA9IDA7CgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgQXBwZW5kUmVmbG93Q29tbWFuZChuc0lSZWZsb3dDb21tYW5kKiBhUmVmbG93
Q29tbWFuZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2VsUmVmbG93Q29tbWFuZChuc0lG
cmFtZSogYVRhcmdldEZyYW1lLCBuc0lSZWZsb3dDb21tYW5kOjpSZWZsb3dUeXBlKiBhQ21kVHlw
ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2VsQWxsUmVmbG93Q29tbWFuZHMoKSA9IDA7
CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTYWZlVG9GbHVzaChQUkJvb2wmIGFJc1NhZmVU
b0ZsdXNoKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoUGVuZGluZ05vdGlmaWNh
dGlvbnMoKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdERPTUV2ZW50KG5zSUNvbnRl
bnQqIGFDb250ZW50LCBuc0V2ZW50KiBhRXZlbnQpPTA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UG9zdEF0dHJpYnV0ZUNoYW5nZShuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNwYWNlSUQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUF0b20qIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc1N0cmluZyYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkJvb2wgYU5vdGlmeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNBdHRyaWJ1dGVDaGFuZ2VUeXBlIGFUeXBlKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUG9z
dFJlZmxvd0NhbGxiYWNrKG5zSVJlZmxvd0NhbGxiYWNrKiBhQ2FsbGJhY2spID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IENhbmNlbFJlZmxvd0NhbGxiYWNrKG5zSVJlZmxvd0NhbGxiYWNrKiBhQ2Fs
bGJhY2spID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJlZ2luUmVmbG93QmF0Y2hpbmcoKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBFbmRSZWZsb3dCYXRjaGluZyhQUkJvb2wgYUZsdXNoUGVu
ZGluZ1JlZmxvd3MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlZmxvd0JhdGNoaW5nU3Rh
dHVzKFBSQm9vbCogYUlzQmF0Y2hpbmcpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhckZy
YW1lUmVmcyhuc0lGcmFtZSogYUZyYW1lKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENy
ZWF0ZVJlbmRlcmluZ0NvbnRleHQobnNJRnJhbWUgKmFGcmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCoqIGFDb250ZXh0KSA9IDA7CiMg
MzM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBDYW50UmVuZGVyUmVwbGFjZWRFbGVtZW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBh
RnJhbWUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdvVG9BbmNob3IoY29uc3QgbnNT
dHJpbmcmIGFBbmNob3JOYW1lKSA9IDA7CiMgMzczICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxGcmFtZUludG9WaWV3KG5z
SUZyYW1lICphRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBh
VlBlcmNlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBhSFBlcmNl
bnQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeURlc3Ryb3lpbmdG
cmFtZShuc0lGcmFtZSogYUZyYW1lKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJh
bWVNYW5hZ2VyKG5zSUZyYW1lTWFuYWdlcioqIGFGcmFtZU1hbmFnZXIpIGNvbnN0ID0gMDsKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBEb0NvcHkoKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
RG9Db3B5TGlua0xvY2F0aW9uKG5zSURPTU5vZGUqIGFOb2RlKSA9IDA7CgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgRG9Db3B5SW1hZ2VMb2NhdGlvbihuc0lET01Ob2RlKiBhTm9kZSkgPSAwOwogIHZp
cnR1YWwgbnNyZXN1bHQgRG9Db3B5SW1hZ2VDb250ZW50cyhuc0lET01Ob2RlKiBhTm9kZSkgPSAw
OwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhcmV0KG5zSUNhcmV0ICoqYU91dENhcmV0KSA9
IDA7CiMgNDE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXREaXNwbGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJvb2wgYUluRW5hYmxl
KSA9IDA7CiMgNDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXREaXNwbGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJvb2wgKmFPdXRF
bmFibGVkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnRXaXRoVGFyZ2V0
KG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRl
bnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy
IGFGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVz
KiBhU3RhdHVzKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRE9NRXZlbnRXaXRo
VGFyZ2V0KG5zSUNvbnRlbnQqIGFUYXJnZXRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNFdmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVu
dFN0YXR1cyogYVN0YXR1cykgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEV2ZW50VGFy
Z2V0RnJhbWUobnNJRnJhbWUqKiBhRnJhbWUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
Q2FwdHVyZUhpc3RvcnlTdGF0ZShuc0lMYXlvdXRIaXN0b3J5U3RhdGUqKiBhTGF5b3V0SGlzdG9y
eVN0YXRlLCBQUkJvb2wgYUxlYXZpbmdQYWdlID0gMCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0SGlzdG9yeVN0YXRlKG5zSUxheW91dEhpc3RvcnlTdGF0ZSoqIGFMYXlvdXRIaXN0b3J5U3Rh
dGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhpc3RvcnlTdGF0ZShuc0lMYXlvdXRIaXN0
b3J5U3RhdGUqIGFMYXlvdXRIaXN0b3J5U3RhdGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgSXNSZWZsb3dMb2NrZWQoUFJCb29sKiBhSXNMb2NrZWQpID0gMDsKIyA0NzIgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIKICBlbnVtIEdlbmVyYXRlZENvbnRlbnRU
eXBlIHtCZWZvcmUsIEFmdGVyfTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEdlbmVyYXRlZENvbnRl
bnRJdGVyYXRvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHZW5lcmF0ZWRDb250ZW50VHlwZSBhVHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50SXRlcmF0b3IqKiBhSXRlcmF0
b3IpIGNvbnN0ID0gMDsKIyA0ODcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hl
bGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFub255bW91c0NvbnRlbnRGb3IobnNJQ29udGVu
dCogYUNvbnRlbnQsIG5zSVN1cHBvcnRzQXJyYXkqIGFBbm9ueW1vdXNFbGVtZW50cykgPSAwOwoj
IDQ5OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0QW5vbnltb3VzQ29udGVudEZvcihuc0lDb250ZW50KiBhQ29udGVudCwgbnNJ
U3VwcG9ydHNBcnJheSoqIGFBbm9ueW1vdXNFbGVtZW50cykgPSAwOwoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBSZWxlYXNlQW5vbnltb3VzQ29udGVudCgpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IElzUGFpbnRpbmdTdXBwcmVzc2VkKFBSQm9vbCogYVJlc3VsdCk9MDsKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBVbnN1cHByZXNzUGFpbnRpbmcoKSA9IDA7CgogIGVudW0gSW50ZXJydXB0
VHlwZSB7VGltZW91dH07CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZW5kSW50ZXJydXB0Tm90aWZp
Y2F0aW9uVG8obnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRlcnJ1cHRUeXBlIGFJbnRlcnJ1cHRUeXBlKSA9IDA7CgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBDYW5jZWxJbnRlcnJ1cHROb3RpZmljYXRpb25Ubyhuc0lGcmFtZSogYUZyYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0VHlw
ZSBhSW50ZXJydXB0VHlwZSkgPSAwOwojIDUzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVByZXNTaGVsbC5oIgogIHN0YXRpYyBQUkJvb2wgR2V0VmVyaWZ5UmVmbG93RW5hYmxlKCk7CgoK
CgogIHN0YXRpYyB2b2lkIFNldFZlcmlmeVJlZmxvd0VuYWJsZShQUkJvb2wgYUVuYWJsZWQpOwoK
CgoKICBzdGF0aWMgUFJJbnQzMiBHZXRWZXJpZnlSZWZsb3dGbGFncygpOwojIDU2NSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
Q3Vyc29yQmlkaUxldmVsKFBSVWludDggYUxldmVsKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0Q3Vyc29yQmlkaUxldmVsKFBSVWludDggKmFPdXRMZXZlbCkgPSAwOwoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFVuZGVmaW5lQ3Vyc29yQmlkaUxldmVsKHZvaWQpID0gMDsKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBCaWRpU3R5bGVDaGFuZ2VSZWZsb3codm9pZCkgPSAwOwoKCn07CgoKCgoK
ZXh0ZXJuIG5zcmVzdWx0CiAgTlNfTmV3UHJlc1NoZWxsKG5zSVByZXNTaGVsbCoqIGFJbnN0YW5j
ZVB0clJlc3VsdCk7CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIgMQojIDM4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUxhbmd1YWdlQXRvbS5oIiAxCiMgMzkgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiIDIKCmNsYXNzIG5zSUZyYW1lOwojIDczICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIgplbnVtIG5zU3R5bGVTdHJ1Y3RJ
RCB7CiAgZVN0eWxlU3RydWN0X0ZvbnQgPSAxLAogIGVTdHlsZVN0cnVjdF9Db2xvciA9IDIsCiAg
ZVN0eWxlU3RydWN0X0JhY2tncm91bmQgPSAzLAogIGVTdHlsZVN0cnVjdF9MaXN0ID0gNCwKICBl
U3R5bGVTdHJ1Y3RfUG9zaXRpb24gPSA1LAogIGVTdHlsZVN0cnVjdF9UZXh0ID0gNiwKICBlU3R5
bGVTdHJ1Y3RfVGV4dFJlc2V0ID0gNywKICBlU3R5bGVTdHJ1Y3RfRGlzcGxheSA9IDgsCiAgZVN0
eWxlU3RydWN0X1Zpc2liaWxpdHkgPSA5LAogIGVTdHlsZVN0cnVjdF9Db250ZW50ID0gMTAsCiAg
ZVN0eWxlU3RydWN0X1F1b3RlcyA9IDExLAogIGVTdHlsZVN0cnVjdF9Vc2VySW50ZXJmYWNlID0g
MTIsCiAgZVN0eWxlU3RydWN0X1VJUmVzZXQgPSAxMywKICBlU3R5bGVTdHJ1Y3RfVGFibGUgPSAx
NCwKICBlU3R5bGVTdHJ1Y3RfVGFibGVCb3JkZXIgPSAxNSwKICBlU3R5bGVTdHJ1Y3RfTWFyZ2lu
ID0gMTYsCiAgZVN0eWxlU3RydWN0X1BhZGRpbmcgPSAxNywKICBlU3R5bGVTdHJ1Y3RfQm9yZGVy
ID0gMTgsCiAgZVN0eWxlU3RydWN0X091dGxpbmUgPSAxOSwKICBlU3R5bGVTdHJ1Y3RfWFVMID0g
MjAsCiAgZVN0eWxlU3RydWN0X01heCA9IGVTdHlsZVN0cnVjdF9YVUwsCiAgZVN0eWxlU3RydWN0
X0JvcmRlclBhZGRpbmdTaG9ydGN1dCA9IDIxCn07CgoKc3RydWN0IG5zU3R5bGVTdHJ1Y3Qgewp9
OwoKCgpzdHJ1Y3QgbnNTdHlsZUZvbnQgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls
ZUZvbnQodm9pZCk7CiAgfm5zU3R5bGVGb250KHZvaWQpIHt9OwoKICBQUkludDMyIENhbGNEaWZm
ZXJlbmNlKGNvbnN0IG5zU3R5bGVGb250JiBhT3RoZXIpIGNvbnN0OwogIHN0YXRpYyBQUkludDMy
IENhbGNGb250RGlmZmVyZW5jZShjb25zdCBuc0ZvbnQmIGFGb250MSwgY29uc3QgbnNGb250JiBh
Rm9udDIpOwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCog
YUNvbnRleHQpOwogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpOwoKICBu
c0ZvbnQgbUZvbnQ7CiAgbnNGb250IG1GaXhlZEZvbnQ7CiAgUFJVaW50OCBtRmxhZ3M7CgogIG5z
U3R5bGVGb250KGNvbnN0IG5zRm9udCYgYVZhcmlhYmxlRm9udCwgY29uc3QgbnNGb250JiBhRml4
ZWRGb250KTsKICBuc1N0eWxlRm9udChjb25zdCBuc1N0eWxlRm9udCYgYVN0eWxlRm9udCk7CiAg
bnNTdHlsZUZvbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7Cn07CgpzdHJ1Y3QgbnNT
dHlsZUNvbG9yIDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVDb2xvcihuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0KTsKICBuc1N0eWxlQ29sb3IoY29uc3QgbnNTdHlsZUNvbG9y
JiBhT3RoZXIpOwogIH5uc1N0eWxlQ29sb3Iodm9pZCkge307CgogIFBSSW50MzIgQ2FsY0RpZmZl
cmVuY2UoY29uc3QgbnNTdHlsZUNvbG9yJiBhT3RoZXIpIGNvbnN0OwoKICB2b2lkKiBvcGVyYXRv
ciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJl
c3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwog
ICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29u
dGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVDb2xvcigpOwogICAgYUNvbnRleHQtPkZyZWVUb1No
ZWxsKHNpemVvZihuc1N0eWxlQ29sb3IpLCB0aGlzKTsKICB9OwoKCgogIG5zY29sb3IgbUNvbG9y
Owp9OwoKc3RydWN0IG5zU3R5bGVCYWNrZ3JvdW5kIDogcHVibGljIG5zU3R5bGVTdHJ1Y3Qgewog
IG5zU3R5bGVCYWNrZ3JvdW5kKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwogIG5zU3R5
bGVCYWNrZ3JvdW5kKGNvbnN0IG5zU3R5bGVCYWNrZ3JvdW5kJiBhT3RoZXIpOwogIH5uc1N0eWxl
QmFja2dyb3VuZCgpIHt9OwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVz
Q29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+
QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAg
dm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5
bGVCYWNrZ3JvdW5kKCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVC
YWNrZ3JvdW5kKSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxjRGlmZmVyZW5jZShjb25zdCBu
c1N0eWxlQmFja2dyb3VuZCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtQmFja2dyb3VuZEF0
dGFjaG1lbnQ7CiAgUFJVaW50OCBtQmFja2dyb3VuZEZsYWdzOwogIFBSVWludDggbUJhY2tncm91
bmRSZXBlYXQ7CgogIG5zY29sb3IgbUJhY2tncm91bmRDb2xvcjsKICBuc2Nvb3JkIG1CYWNrZ3Jv
dW5kWFBvc2l0aW9uOwogIG5zY29vcmQgbUJhY2tncm91bmRZUG9zaXRpb247CiAgbnNTdHJpbmcg
bUJhY2tncm91bmRJbWFnZTsKCiAgUFJCb29sIEJhY2tncm91bmRJc1RyYW5zcGFyZW50KCkgY29u
c3Qge3JldHVybiAobUJhY2tncm91bmRGbGFncyAmCiAgICAoMHgwMSB8IDB4MDIpKSA9PQogICAg
KDB4MDEgfCAweDAyKTt9Cn07CiMgMTg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHls
ZVN0cnVjdC5oIgpzdHJ1Y3QgbnNTdHlsZU1hcmdpbjogcHVibGljIG5zU3R5bGVTdHJ1Y3Qgewog
IG5zU3R5bGVNYXJnaW4odm9pZCk7CiAgbnNTdHlsZU1hcmdpbihjb25zdCBuc1N0eWxlTWFyZ2lu
JiBhTWFyZ2luKTsKICB+bnNTdHlsZU1hcmdpbih2b2lkKSB7fTsKCiAgdm9pZCogb3BlcmF0b3Ig
bmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KTsKICB2b2lkIERlc3Ryb3ko
bnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KTsKCiAgdm9pZCBSZWNhbGNEYXRhKCk7CiAgUFJJbnQz
MiBDYWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlTWFyZ2luJiBhT3RoZXIpIGNvbnN0OwoKICBu
c1N0eWxlU2lkZXMgbU1hcmdpbjsKCiAgUFJCb29sIEdldE1hcmdpbihuc01hcmdpbiYgYU1hcmdp
bikgY29uc3QKICB7CiAgICBpZiAobUhhc0NhY2hlZE1hcmdpbikgewogICAgICBhTWFyZ2luID0g
bUNhY2hlZE1hcmdpbjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgoK
ICB2b2lkIENhbGNNYXJnaW5Gb3IoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFN
YXJnaW4pIGNvbnN0OwoKcHJvdGVjdGVkOgogIFBSUGFja2VkQm9vbCBtSGFzQ2FjaGVkTWFyZ2lu
OwogIG5zTWFyZ2luIG1DYWNoZWRNYXJnaW47Cn07CgoKc3RydWN0IG5zU3R5bGVQYWRkaW5nOiBw
dWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVBhZGRpbmcodm9pZCk7CiAgbnNTdHlsZVBh
ZGRpbmcoY29uc3QgbnNTdHlsZVBhZGRpbmcmIGFQYWRkaW5nKTsKICB+bnNTdHlsZVBhZGRpbmco
dm9pZCkge307CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0
KiBhQ29udGV4dCk7CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7Cgog
IHZvaWQgUmVjYWxjRGF0YSgpOwogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHls
ZVBhZGRpbmcmIGFPdGhlcikgY29uc3Q7CgogIG5zU3R5bGVTaWRlcyBtUGFkZGluZzsKCiAgUFJC
b29sIEdldFBhZGRpbmcobnNNYXJnaW4mIGFQYWRkaW5nKSBjb25zdAogIHsKICAgIGlmIChtSGFz
Q2FjaGVkUGFkZGluZykgewogICAgICBhUGFkZGluZyA9IG1DYWNoZWRQYWRkaW5nOwogICAgICBy
ZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCgogIHZvaWQgQ2FsY1BhZGRpbmdGb3Io
Y29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFQYWRkaW5nKSBjb25zdDsKCnByb3Rl
Y3RlZDoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZFBhZGRpbmc7CiAgbnNNYXJnaW4gbUNhY2hl
ZFBhZGRpbmc7Cn07CgoKc3RydWN0IG5zU3R5bGVCb3JkZXI6IHB1YmxpYyBuc1N0eWxlU3RydWN0
IHsKICBuc1N0eWxlQm9yZGVyKCkge307CiAgbnNTdHlsZUJvcmRlcihuc0lQcmVzQ29udGV4dCog
YUNvbnRleHQpOwogIG5zU3R5bGVCb3JkZXIoY29uc3QgbnNTdHlsZUJvcmRlciYgYUJvcmRlcik7
CiAgfm5zU3R5bGVCb3JkZXIodm9pZCkge307CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qg
c3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250
ZXh0KiBhQ29udGV4dCk7CgogIFBSQm9vbCBJc0JvcmRlclNpZGVWaXNpYmxlKFBSVWludDggYVNp
ZGUpIGNvbnN0OwogIHZvaWQgUmVjYWxjRGF0YSgpOwogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2Uo
Y29uc3QgbnNTdHlsZUJvcmRlciYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVNpZGVzIG1Cb3Jk
ZXI7CiAgbnNTdHlsZVNpZGVzIG1Cb3JkZXJSYWRpdXM7CiAgUFJVaW50OCBtRmxvYXRFZGdlOwoK
ICBQUkJvb2wgR2V0Qm9yZGVyKG5zTWFyZ2luJiBhQm9yZGVyKSBjb25zdAogIHsKICAgIGlmICht
SGFzQ2FjaGVkQm9yZGVyKSB7CiAgICAgIGFCb3JkZXIgPSBtQ2FjaGVkQm9yZGVyOwogICAgICBy
ZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgUFJVaW50OCBHZXRCb3JkZXJTdHls
ZShQUlVpbnQ4IGFTaWRlKSBjb25zdAogIHsKICAgIHt9OwogICAgcmV0dXJuIChtQm9yZGVyU3R5
bGVbYVNpZGVdICYgMHgxRik7CiAgfQoKICB2b2lkIFNldEJvcmRlclN0eWxlKFBSVWludDggYVNp
ZGUsIFBSVWludDggYVN0eWxlKQogIHsKICAgIHt9OwogICAgbUJvcmRlclN0eWxlW2FTaWRlXSAm
PSB+MHgxRjsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gfD0gKGFTdHlsZSAmIDB4MUYpOwoKICB9
CgogIHZvaWQgR2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSwgbnNjb2xvciYgYUNvbG9yLAog
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhVHJhbnNwYXJlbnQsIFBSQm9vbCYgYUZvcmVn
cm91bmQpIGNvbnN0CiAgewogICAgYVRyYW5zcGFyZW50ID0gYUZvcmVncm91bmQgPSAwOwogICAg
e307CiAgICBpZiAoKG1Cb3JkZXJTdHlsZVthU2lkZV0gJiAweDYwKSA9PSAwKQogICAgICBhQ29s
b3IgPSBtQm9yZGVyQ29sb3JbYVNpZGVdOwogICAgZWxzZSBpZiAobUJvcmRlclN0eWxlW2FTaWRl
XSAmIDB4MjApCiAgICAgIGFGb3JlZ3JvdW5kID0gMTsKICAgIGVsc2UKICAgICAgYVRyYW5zcGFy
ZW50ID0gMTsKICB9CgogIHZvaWQgU2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSwgbnNjb2xv
ciBhQ29sb3IpCiAgewogICAge307CiAgICBtQm9yZGVyQ29sb3JbYVNpZGVdID0gYUNvbG9yOwog
ICAgbUJvcmRlclN0eWxlW2FTaWRlXSAmPSB+MHg2MDsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0g
fD0gMHg4MDsKICB9CgogIHZvaWQgU2V0Qm9yZGVyVHJhbnNwYXJlbnQoUFJVaW50OCBhU2lkZSkK
ICB7CiAgICB7fTsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gJj0gfjB4NjA7CiAgICBtQm9yZGVy
U3R5bGVbYVNpZGVdIHw9ICgweDgwIHwgMHg0MCk7CiAgfQoKICB2b2lkIFNldEJvcmRlclRvRm9y
ZWdyb3VuZChQUlVpbnQ4IGFTaWRlKQogIHsKICAgIHt9OwogICAgbUJvcmRlclN0eWxlW2FTaWRl
XSAmPSB+MHg2MDsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gfD0gKDB4ODAgfCAweDIwKTsKICB9
CgogIHZvaWQgVW5zZXRCb3JkZXJDb2xvcihQUlVpbnQ4IGFTaWRlKQogIHsKICAgIHt9OwogICAg
bUJvcmRlclN0eWxlW2FTaWRlXSAmPSAweDFGOwogIH0KCgogIHZvaWQgQ2FsY0JvcmRlckZvcihj
b25zdCBuc0lGcmFtZSogYUZyYW1lLCBuc01hcmdpbiYgYUJvcmRlcikgY29uc3Q7Cgpwcm90ZWN0
ZWQ6CiAgUFJQYWNrZWRCb29sIG1IYXNDYWNoZWRCb3JkZXI7CiAgbnNNYXJnaW4gbUNhY2hlZEJv
cmRlcjsKCiAgUFJVaW50OCBtQm9yZGVyU3R5bGVbNF07CiAgbnNjb2xvciBtQm9yZGVyQ29sb3Jb
NF07CgoKICBuc2Nvb3JkIG1Cb3JkZXJXaWR0aHNbM107Cn07CgoKc3RydWN0IG5zU3R5bGVCb3Jk
ZXJQYWRkaW5nOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZUJvcmRlclBhZGRpbmco
dm9pZCkgeyBtSGFzQ2FjaGVkQm9yZGVyUGFkZGluZyA9IDA7IH07CiAgfm5zU3R5bGVCb3JkZXJQ
YWRkaW5nKHZvaWQpIHt9OwoKICBQUkJvb2wgR2V0Qm9yZGVyUGFkZGluZyhuc01hcmdpbiYgYUJv
cmRlclBhZGRpbmcpIGNvbnN0IHsKICAgIGlmIChtSGFzQ2FjaGVkQm9yZGVyUGFkZGluZykgewog
ICAgICBhQm9yZGVyUGFkZGluZyA9IG1DYWNoZWRCb3JkZXJQYWRkaW5nOwogICAgICByZXR1cm4g
MTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJQYWRkaW5nKG5zTWFy
Z2luIGFCb3JkZXJQYWRkaW5nKSB7CiAgICBtQ2FjaGVkQm9yZGVyUGFkZGluZyA9IGFCb3JkZXJQ
YWRkaW5nOwogICAgbUhhc0NhY2hlZEJvcmRlclBhZGRpbmcgPSAxOwogIH0KCnByb3RlY3RlZDoK
ICBuc01hcmdpbiBtQ2FjaGVkQm9yZGVyUGFkZGluZzsKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hl
ZEJvcmRlclBhZGRpbmc7Cn07CgoKc3RydWN0IG5zU3R5bGVPdXRsaW5lOiBwdWJsaWMgbnNTdHls
ZVN0cnVjdCB7CiAgbnNTdHlsZU91dGxpbmUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7
CiAgbnNTdHlsZU91dGxpbmUoY29uc3QgbnNTdHlsZU91dGxpbmUmIGFPdXRsaW5lKTsKICB+bnNT
dHlsZU91dGxpbmUodm9pZCkge307CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5z
SVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250
ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0Owog
IH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+
bnNTdHlsZU91dGxpbmUoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHls
ZU91dGxpbmUpLCB0aGlzKTsKICB9OwoKICB2b2lkIFJlY2FsY0RhdGEoKTsKICBQUkludDMyIENh
bGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVPdXRsaW5lJiBhT3RoZXIpIGNvbnN0OwoKICBuc1N0
eWxlU2lkZXMgbU91dGxpbmVSYWRpdXM7CgoKICBuc1N0eWxlQ29vcmQgbU91dGxpbmVXaWR0aDsK
CiAgUFJCb29sIEdldE91dGxpbmVXaWR0aChuc2Nvb3JkJiBhV2lkdGgpIGNvbnN0CiAgewogICAg
aWYgKG1IYXNDYWNoZWRPdXRsaW5lKSB7CiAgICAgIGFXaWR0aCA9IG1DYWNoZWRPdXRsaW5lV2lk
dGg7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBQUlVpbnQ4IEdl
dE91dGxpbmVTdHlsZSh2b2lkKSBjb25zdAogIHsKICAgIHJldHVybiAobU91dGxpbmVTdHlsZSAm
IDB4MUYpOwogIH0KCiAgdm9pZCBTZXRPdXRsaW5lU3R5bGUoUFJVaW50OCBhU3R5bGUpCiAgewog
ICAgbU91dGxpbmVTdHlsZSAmPSB+MHgxRjsKICAgIG1PdXRsaW5lU3R5bGUgfD0gKGFTdHlsZSAm
IDB4MUYpOwogIH0KCgogIFBSQm9vbCBHZXRPdXRsaW5lQ29sb3IobnNjb2xvciYgYUNvbG9yKSBj
b25zdAogIHsKICAgIGlmICgobU91dGxpbmVTdHlsZSAmIDB4NjApID09IDApIHsKICAgICAgYUNv
bG9yID0gbU91dGxpbmVDb2xvcjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsK
ICB9CgogIHZvaWQgU2V0T3V0bGluZUNvbG9yKG5zY29sb3IgYUNvbG9yKQogIHsKICAgIG1PdXRs
aW5lQ29sb3IgPSBhQ29sb3I7CiAgICBtT3V0bGluZVN0eWxlICY9IH4weDYwOwogICAgbU91dGxp
bmVTdHlsZSB8PSAweDgwOwogIH0KCiAgdm9pZCBTZXRPdXRsaW5lSW52ZXJ0KHZvaWQpCiAgewog
ICAgbU91dGxpbmVTdHlsZSB8PSAoMHg4MCB8IDB4NjApOwogIH0KCnByb3RlY3RlZDoKICBQUlBh
Y2tlZEJvb2wgbUhhc0NhY2hlZE91dGxpbmU7CiAgbnNjb29yZCBtQ2FjaGVkT3V0bGluZVdpZHRo
OwoKICBQUlVpbnQ4IG1PdXRsaW5lU3R5bGU7CiAgbnNjb2xvciBtT3V0bGluZUNvbG9yOwoKCiAg
bnNjb29yZCBtQm9yZGVyV2lkdGhzWzNdOwp9OwoKCnN0cnVjdCBuc1N0eWxlTGlzdCA6IHB1Ymxp
YyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlTGlzdCh2b2lkKTsKICBuc1N0eWxlTGlzdChjb25z
dCBuc1N0eWxlTGlzdCYgYVN0eWxlTGlzdCk7CiAgfm5zU3R5bGVMaXN0KHZvaWQpOwoKICB2b2lk
KiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAg
IHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZy
ZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250
ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVMaXN0KCk7CiAgICBhQ29udGV4dC0+
RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVMaXN0KSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBD
YWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlTGlzdCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50
OCBtTGlzdFN0eWxlVHlwZTsKICBQUlVpbnQ4IG1MaXN0U3R5bGVQb3NpdGlvbjsKICBuc1N0cmlu
ZyBtTGlzdFN0eWxlSW1hZ2U7Cn07CgpzdHJ1Y3QgbnNTdHlsZVBvc2l0aW9uIDogcHVibGljIG5z
U3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVQb3NpdGlvbih2b2lkKTsKICBuc1N0eWxlUG9zaXRpb24o
Y29uc3QgbnNTdHlsZVBvc2l0aW9uJiBhT3RoZXIpOwogIH5uc1N0eWxlUG9zaXRpb24odm9pZCk7
CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4
dCkgewogICAgdm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVs
bChzeiwgJnJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJ
UHJlc0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVBvc2l0aW9uKCk7CiAg
ICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVQb3NpdGlvbiksIHRoaXMpOwog
IH07CgogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVBvc2l0aW9uJiBhT3Ro
ZXIpIGNvbnN0OwoKICBuc1N0eWxlU2lkZXMgbU9mZnNldDsKICBuc1N0eWxlQ29vcmQgbVdpZHRo
OwogIG5zU3R5bGVDb29yZCBtTWluV2lkdGg7CiAgbnNTdHlsZUNvb3JkIG1NYXhXaWR0aDsKICBu
c1N0eWxlQ29vcmQgbUhlaWdodDsKICBuc1N0eWxlQ29vcmQgbU1pbkhlaWdodDsKICBuc1N0eWxl
Q29vcmQgbU1heEhlaWdodDsKICBQUlVpbnQ4IG1Cb3hTaXppbmc7CgogIG5zU3R5bGVDb29yZCBt
WkluZGV4Owp9OwoKc3RydWN0IG5zU3R5bGVUZXh0UmVzZXQgOiBwdWJsaWMgbnNTdHlsZVN0cnVj
dCB7CiAgbnNTdHlsZVRleHRSZXNldCh2b2lkKTsKICBuc1N0eWxlVGV4dFJlc2V0KGNvbnN0IG5z
U3R5bGVUZXh0UmVzZXQmIGFPdGhlcik7CiAgfm5zU3R5bGVUZXh0UmVzZXQodm9pZCk7CgogIHZv
aWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewog
ICAgdm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwg
JnJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0Nv
bnRleHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVRleHRSZXNldCgpOwogICAgYUNv
bnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVGV4dFJlc2V0KSwgdGhpcyk7CiAgfTsK
CiAgUFJJbnQzMiBDYWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlVGV4dFJlc2V0JiBhT3RoZXIp
IGNvbnN0OwoKICBQUlVpbnQ4IG1UZXh0RGVjb3JhdGlvbjsKICBuc1N0eWxlQ29vcmQgbVZlcnRp
Y2FsQWxpZ247Cn07CgpzdHJ1Y3QgbnNTdHlsZVRleHQgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7
CiAgbnNTdHlsZVRleHQodm9pZCk7CiAgbnNTdHlsZVRleHQoY29uc3QgbnNTdHlsZVRleHQmIGFP
dGhlcik7CiAgfm5zU3R5bGVUZXh0KHZvaWQpOwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90
IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAg
ICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJl
c3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAg
dGhpcy0+fm5zU3R5bGVUZXh0KCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5z
U3R5bGVUZXh0KSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxjRGlmZmVyZW5jZShjb25zdCBu
c1N0eWxlVGV4dCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtVGV4dEFsaWduOwogIFBSVWlu
dDggbVRleHRUcmFuc2Zvcm07CiAgUFJVaW50OCBtV2hpdGVTcGFjZTsKCiAgUFJVaW50OCBtVW5p
Y29kZUJpZGk7CgoKICBuc1N0eWxlQ29vcmQgbUxldHRlclNwYWNpbmc7CiAgbnNTdHlsZUNvb3Jk
IG1MaW5lSGVpZ2h0OwogIG5zU3R5bGVDb29yZCBtVGV4dEluZGVudDsKICBuc1N0eWxlQ29vcmQg
bVdvcmRTcGFjaW5nOwoKICBQUkJvb2wgV2hpdGVTcGFjZUlzU2lnbmlmaWNhbnQoKSBjb25zdCB7
CiAgICByZXR1cm4gbVdoaXRlU3BhY2UgPT0gMTsKICB9Cn07CgpzdHJ1Y3QgbnNTdHlsZVZpc2li
aWxpdHkgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVZpc2liaWxpdHkobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CiAgbnNTdHlsZVZpc2liaWxpdHkoY29uc3QgbnNTdHls
ZVZpc2liaWxpdHkmIGFWaXNpYmlsaXR5KTsKICB+bnNTdHlsZVZpc2liaWxpdHkoKSB7fTsKCiAg
dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7
CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6
LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVz
Q29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVmlzaWJpbGl0eSgpOwogICAg
YUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVmlzaWJpbGl0eSksIHRoaXMpOwog
IH07CgogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVZpc2liaWxpdHkmIGFP
dGhlcikgY29uc3Q7CgogIFBSVWludDggbURpcmVjdGlvbjsKICBQUlVpbnQ4IG1WaXNpYmxlOwog
IG5zQ09NUHRyPG5zSUxhbmd1YWdlQXRvbT4gbUxhbmd1YWdlOwogIGZsb2F0IG1PcGFjaXR5OwoK
ICBQUkJvb2wgSXNWaXNpYmxlKCkgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuIChtVmlz
aWJsZSA9PSAxKTsKICAgICAgICB9CgogICAgICAgIFBSQm9vbCBJc1Zpc2libGVPckNvbGxhcHNl
ZCgpIGNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVybiAoKG1WaXNpYmxlID09IDEpIHx8CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtVmlzaWJsZSA9
PSAyKSk7CiAgICAgICAgfQp9OwoKc3RydWN0IG5zU3R5bGVEaXNwbGF5IDogcHVibGljIG5zU3R5
bGVTdHJ1Y3QgewogIG5zU3R5bGVEaXNwbGF5KCk7CiAgbnNTdHlsZURpc3BsYXkoY29uc3QgbnNT
dHlsZURpc3BsYXkmIGFPdGhlcik7CiAgfm5zU3R5bGVEaXNwbGF5KCkge307CgogIHZvaWQqIG9w
ZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdm9p
ZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3Vs
dCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQq
IGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZURpc3BsYXkoKTsKICAgIGFDb250ZXh0LT5G
cmVlVG9TaGVsbChzaXplb2YobnNTdHlsZURpc3BsYXkpLCB0aGlzKTsKICB9OwoKICBQUkludDMy
IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVEaXNwbGF5JiBhT3RoZXIpIGNvbnN0OwoKICBQ
UlVpbnQ4IG1EaXNwbGF5OwogIG5zU3RyaW5nIG1CaW5kaW5nOwogIFBSVWludDggbVBvc2l0aW9u
OwogIFBSVWludDggbUZsb2F0czsKICBQUlVpbnQ4IG1CcmVha1R5cGU7CiAgUFJQYWNrZWRCb29s
IG1CcmVha0JlZm9yZTsKICBQUlBhY2tlZEJvb2wgbUJyZWFrQWZ0ZXI7CiAgUFJVaW50OCBtT3Zl
cmZsb3c7CgogIFBSVWludDggbUNsaXBGbGFnczsKCgoKCgoKICBuc1JlY3QgbUNsaXA7CgoKICBQ
UkJvb2wgSXNCbG9ja0xldmVsKCkgY29uc3Qge3JldHVybiAoMSA9PSBtRGlzcGxheSkgfHwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCA9PSBtRGlzcGxheSkgfHwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOCA9PSBtRGlzcGxheSk7fQoKICBQ
UkJvb2wgSXNGbG9hdGluZygpIGNvbnN0IHsKICAgIHJldHVybiAwICE9IG1GbG9hdHM7CiAgfQoK
ICBQUkJvb2wgSXNBYnNvbHV0ZWx5UG9zaXRpb25lZCgpIGNvbnN0IHtyZXR1cm4gKDIgPT0gbVBv
c2l0aW9uKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoMyA9PSBtUG9zaXRpb24pO30KCiAgUFJCb29sIElzUG9zaXRpb25lZCgpIGNvbnN0IHtyZXR1
cm4gSXNBYnNvbHV0ZWx5UG9zaXRpb25lZCgpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKDEgPT0gbVBvc2l0aW9uKTt9Cn07CgpzdHJ1Y3QgbnNTdHlsZVRhYmxlOiBw
dWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVRhYmxlKHZvaWQpOwogIG5zU3R5bGVUYWJs
ZShjb25zdCBuc1N0eWxlVGFibGUmIGFPdGhlcik7CiAgfm5zU3R5bGVUYWJsZSh2b2lkKTsKCiAg
dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7
CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6
LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVz
Q29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVGFibGUoKTsKICAgIGFDb250
ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVRhYmxlKSwgdGhpcyk7CiAgfTsKCiAgUFJJ
bnQzMiBDYWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlVGFibGUmIGFPdGhlcikgY29uc3Q7Cgog
IFBSVWludDggbUxheW91dFN0cmF0ZWd5OwogIFBSVWludDggbUZyYW1lOwogIFBSVWludDggbVJ1
bGVzOwogIFBSSW50MzIgbUNvbHM7CiAgUFJJbnQzMiBtU3BhbjsKfTsKCnN0cnVjdCBuc1N0eWxl
VGFibGVCb3JkZXI6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlVGFibGVCb3JkZXIo
bnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KTsKICBuc1N0eWxlVGFibGVCb3JkZXIoY29uc3QgbnNT
dHlsZVRhYmxlQm9yZGVyJiBhT3RoZXIpOwogIH5uc1N0eWxlVGFibGVCb3JkZXIodm9pZCk7Cgog
IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkg
ewogICAgdm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChz
eiwgJnJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJl
c0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVRhYmxlQm9yZGVyKCk7CiAg
ICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVUYWJsZUJvcmRlciksIHRoaXMp
OwogIH07CgogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVRhYmxlQm9yZGVy
JiBhT3RoZXIpIGNvbnN0OwoKICBQUlVpbnQ4IG1Cb3JkZXJDb2xsYXBzZTsKICBuc1N0eWxlQ29v
cmQgbUJvcmRlclNwYWNpbmdYOwogIG5zU3R5bGVDb29yZCBtQm9yZGVyU3BhY2luZ1k7CiAgUFJV
aW50OCBtQ2FwdGlvblNpZGU7CiAgUFJVaW50OCBtRW1wdHlDZWxsczsKfTsKCmVudW0gbnNTdHls
ZUNvbnRlbnRUeXBlIHsKICBlU3R5bGVDb250ZW50VHlwZV9TdHJpbmcgPSAxLAogIGVTdHlsZUNv
bnRlbnRUeXBlX1VSTCA9IDEwLAogIGVTdHlsZUNvbnRlbnRUeXBlX0F0dHIgPSAyMCwKICBlU3R5
bGVDb250ZW50VHlwZV9Db3VudGVyID0gMzAsCiAgZVN0eWxlQ29udGVudFR5cGVfQ291bnRlcnMg
PSAzMSwKICBlU3R5bGVDb250ZW50VHlwZV9PcGVuUXVvdGUgPSA0MCwKICBlU3R5bGVDb250ZW50
VHlwZV9DbG9zZVF1b3RlID0gNDEsCiAgZVN0eWxlQ29udGVudFR5cGVfTm9PcGVuUXVvdGUgPSA0
MiwKICBlU3R5bGVDb250ZW50VHlwZV9Ob0Nsb3NlUXVvdGUgPSA0Mwp9OwoKc3RydWN0IG5zU3R5
bGVDb250ZW50RGF0YSB7CiAgbnNTdHlsZUNvbnRlbnRUeXBlIG1UeXBlOwogIG5zU3RyaW5nIG1D
b250ZW50Owp9OwoKc3RydWN0IG5zU3R5bGVDb3VudGVyRGF0YSB7CiAgbnNTdHJpbmcgbUNvdW50
ZXI7CiAgUFJJbnQzMiBtVmFsdWU7Cn07CgoKCgpzdHJ1Y3QgbnNTdHlsZVF1b3RlcyA6IHB1Ymxp
YyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlUXVvdGVzKCk7CiAgbnNTdHlsZVF1b3Rlcyhjb25z
dCBuc1N0eWxlUXVvdGVzJiBhUXVvdGVzKTsKICB+bnNTdHlsZVF1b3RlcygpOwoKICB2b2lkKiBv
cGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHZv
aWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1
bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0
KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVRdW90ZXMoKTsKICAgIGFDb250ZXh0LT5G
cmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVF1b3RlcyksIHRoaXMpOwogIH07CgogIFBSSW50MzIg
Q2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVF1b3RlcyYgYU90aGVyKSBjb25zdDsKCgogIFBS
VWludDMyIFF1b3Rlc0NvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1RdW90ZXNDb3VudDsgfQog
IG5zcmVzdWx0IEdldFF1b3Rlc0F0KFBSVWludDMyIGFJbmRleCwgbnNTdHJpbmcmIGFPcGVuLCBu
c1N0cmluZyYgYUNsb3NlKSBjb25zdCB7CiAgICBpZiAoYUluZGV4IDwgbVF1b3Rlc0NvdW50KSB7
CiAgICAgIGFJbmRleCAqPSAyOwogICAgICBhT3BlbiA9IG1RdW90ZXNbYUluZGV4XTsKICAgICAg
YUNsb3NlID0gbVF1b3Rlc1srK2FJbmRleF07CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0
dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsKICB9CgogIG5zcmVzdWx0IEFsbG9jYXRlUXVv
dGVzKFBSVWludDMyIGFDb3VudCkgewogICAgaWYgKGFDb3VudCAhPSBtUXVvdGVzQ291bnQpIHsK
ICAgICAgaWYgKG1RdW90ZXMpIHsgZGVsZXRlW10gbVF1b3RlczsgbVF1b3RlcyA9IDA7IH07CiAg
ICAgIGlmIChhQ291bnQpIHsKICAgICAgICBtUXVvdGVzID0gbmV3IG5zU3RyaW5nW2FDb3VudCAq
IDJdOwogICAgICAgIGlmICghIG1RdW90ZXMpIHsKICAgICAgICAgIG1RdW90ZXNDb3VudCA9IDA7
CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOwogICAgICAgIH0KICAg
ICAgfQogICAgICBtUXVvdGVzQ291bnQgPSBhQ291bnQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9
CgogIG5zcmVzdWx0IFNldFF1b3Rlc0F0KFBSVWludDMyIGFJbmRleCwgY29uc3QgbnNTdHJpbmcm
IGFPcGVuLCBjb25zdCBuc1N0cmluZyYgYUNsb3NlKSB7CiAgICBpZiAoYUluZGV4IDwgbVF1b3Rl
c0NvdW50KSB7CiAgICAgIGFJbmRleCAqPSAyOwogICAgICBtUXVvdGVzW2FJbmRleF0gPSBhT3Bl
bjsKICAgICAgbVF1b3Rlc1srK2FJbmRleF0gPSBhQ2xvc2U7CiAgICAgIHJldHVybiAwOwogICAg
fQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsKICB9Cgpwcm90ZWN0ZWQ6CiAg
UFJVaW50MzIgbVF1b3Rlc0NvdW50OwogIG5zU3RyaW5nKiBtUXVvdGVzOwp9OwoKc3RydWN0IG5z
U3R5bGVDb250ZW50OiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZUNvbnRlbnQodm9p
ZCk7CiAgbnNTdHlsZUNvbnRlbnQoY29uc3QgbnNTdHlsZUNvbnRlbnQmIGFDb250ZW50KTsKICB+
bnNTdHlsZUNvbnRlbnQodm9pZCk7CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5z
SVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250
ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0Owog
IH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+
bnNTdHlsZUNvbnRlbnQoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHls
ZUNvbnRlbnQpLCB0aGlzKTsKICB9OwoKICBQUkludDMyIENhbGNEaWZmZXJlbmNlKGNvbnN0IG5z
U3R5bGVDb250ZW50JiBhT3RoZXIpIGNvbnN0OwoKICBQUlVpbnQzMiBDb250ZW50Q291bnQodm9p
ZCkgY29uc3QgeyByZXR1cm4gbUNvbnRlbnRDb3VudDsgfQogIG5zcmVzdWx0IEdldENvbnRlbnRB
dChQUlVpbnQzMiBhSW5kZXgsIG5zU3R5bGVDb250ZW50VHlwZSYgYVR5cGUsIG5zU3RyaW5nJiBh
Q29udGVudCkgY29uc3QgewogICAgaWYgKGFJbmRleCA8IG1Db250ZW50Q291bnQpIHsKICAgICAg
YVR5cGUgPSBtQ29udGVudHNbYUluZGV4XS5tVHlwZTsKICAgICAgYUNvbnRlbnQgPSBtQ29udGVu
dHNbYUluZGV4XS5tQ29udGVudDsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChu
c3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwogIH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVDb250ZW50cyhQ
UlVpbnQzMiBhQ291bnQpIHsKICAgIGlmIChhQ291bnQgIT0gbUNvbnRlbnRDb3VudCkgewogICAg
ICBpZiAobUNvbnRlbnRzKSB7IGRlbGV0ZVtdIG1Db250ZW50czsgbUNvbnRlbnRzID0gMDsgfTsK
ICAgICAgaWYgKGFDb3VudCkgewogICAgICAgIG1Db250ZW50cyA9IG5ldyBuc1N0eWxlQ29udGVu
dERhdGFbYUNvdW50XTsKICAgICAgICBpZiAoISBtQ29udGVudHMpIHsKICAgICAgICAgIG1Db250
ZW50Q291bnQgPSAwOwogICAgICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsK
ICAgICAgICB9CiAgICAgIH0KICAgICAgbUNvbnRlbnRDb3VudCA9IGFDb3VudDsKICAgIH0KICAg
IHJldHVybiAwOwogIH0KCiAgbnNyZXN1bHQgU2V0Q29udGVudEF0KFBSVWludDMyIGFJbmRleCwg
bnNTdHlsZUNvbnRlbnRUeXBlIGFUeXBlLCBjb25zdCBuc1N0cmluZyYgYUNvbnRlbnQpIHsKICAg
IGlmIChhSW5kZXggPCBtQ29udGVudENvdW50KSB7CiAgICAgIG1Db250ZW50c1thSW5kZXhdLm1U
eXBlID0gYVR5cGU7CiAgICAgIGlmIChhVHlwZSA8IGVTdHlsZUNvbnRlbnRUeXBlX09wZW5RdW90
ZSkgewogICAgICAgIG1Db250ZW50c1thSW5kZXhdLm1Db250ZW50ID0gYUNvbnRlbnQ7CiAgICAg
IH0KICAgICAgZWxzZSB7CiAgICAgICAgbUNvbnRlbnRzW2FJbmRleF0ubUNvbnRlbnQuVHJ1bmNh
dGUoKTsKICAgICAgfQogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVzdWx0
KSAweDgwMDcwMDU3TCk7CiAgfQoKICBQUlVpbnQzMiBDb3VudGVySW5jcmVtZW50Q291bnQodm9p
ZCkgY29uc3QgeyByZXR1cm4gbUluY3JlbWVudENvdW50OyB9CiAgbnNyZXN1bHQgR2V0Q291bnRl
ckluY3JlbWVudEF0KFBSVWludDMyIGFJbmRleCwgbnNTdHJpbmcmIGFDb3VudGVyLCBQUkludDMy
JiBhSW5jcmVtZW50KSBjb25zdCB7CiAgICBpZiAoYUluZGV4IDwgbUluY3JlbWVudENvdW50KSB7
CiAgICAgIGFDb3VudGVyID0gbUluY3JlbWVudHNbYUluZGV4XS5tQ291bnRlcjsKICAgICAgYUlu
Y3JlbWVudCA9IG1JbmNyZW1lbnRzW2FJbmRleF0ubVZhbHVlOwogICAgICByZXR1cm4gMDsKICAg
IH0KICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBuc3Jlc3VsdCBB
bGxvY2F0ZUNvdW50ZXJJbmNyZW1lbnRzKFBSVWludDMyIGFDb3VudCkgewogICAgaWYgKGFDb3Vu
dCAhPSBtSW5jcmVtZW50Q291bnQpIHsKICAgICAgaWYgKG1JbmNyZW1lbnRzKSB7IGRlbGV0ZVtd
IG1JbmNyZW1lbnRzOyBtSW5jcmVtZW50cyA9IDA7IH07CiAgICAgIGlmIChhQ291bnQpIHsKICAg
ICAgICBtSW5jcmVtZW50cyA9IG5ldyBuc1N0eWxlQ291bnRlckRhdGFbYUNvdW50XTsKICAgICAg
ICBpZiAoISBtSW5jcmVtZW50cykgewogICAgICAgICAgbUluY3JlbWVudENvdW50ID0gMDsKICAg
ICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICAgICAgfQogICAgICB9
CiAgICAgIG1JbmNyZW1lbnRDb3VudCA9IGFDb3VudDsKICAgIH0KICAgIHJldHVybiAwOwogIH0K
CiAgbnNyZXN1bHQgU2V0Q291bnRlckluY3JlbWVudEF0KFBSVWludDMyIGFJbmRleCwgY29uc3Qg
bnNTdHJpbmcmIGFDb3VudGVyLCBQUkludDMyIGFJbmNyZW1lbnQpIHsKICAgIGlmIChhSW5kZXgg
PCBtSW5jcmVtZW50Q291bnQpIHsKICAgICAgbUluY3JlbWVudHNbYUluZGV4XS5tQ291bnRlciA9
IGFDb3VudGVyOwogICAgICBtSW5jcmVtZW50c1thSW5kZXhdLm1WYWx1ZSA9IGFJbmNyZW1lbnQ7
CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdM
KTsKICB9CgogIFBSVWludDMyIENvdW50ZXJSZXNldENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJu
IG1SZXNldENvdW50OyB9CiAgbnNyZXN1bHQgR2V0Q291bnRlclJlc2V0QXQoUFJVaW50MzIgYUlu
ZGV4LCBuc1N0cmluZyYgYUNvdW50ZXIsIFBSSW50MzImIGFWYWx1ZSkgY29uc3QgewogICAgaWYg
KGFJbmRleCA8IG1SZXNldENvdW50KSB7CiAgICAgIGFDb3VudGVyID0gbVJlc2V0c1thSW5kZXhd
Lm1Db3VudGVyOwogICAgICBhVmFsdWUgPSBtUmVzZXRzW2FJbmRleF0ubVZhbHVlOwogICAgICBy
ZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoK
ICBuc3Jlc3VsdCBBbGxvY2F0ZUNvdW50ZXJSZXNldHMoUFJVaW50MzIgYUNvdW50KSB7CiAgICBp
ZiAoYUNvdW50ICE9IG1SZXNldENvdW50KSB7CiAgICAgIGlmIChtUmVzZXRzKSB7IGRlbGV0ZVtd
IG1SZXNldHM7IG1SZXNldHMgPSAwOyB9OwogICAgICBpZiAoYUNvdW50KSB7CiAgICAgICAgbVJl
c2V0cyA9IG5ldyBuc1N0eWxlQ291bnRlckRhdGFbYUNvdW50XTsKICAgICAgICBpZiAoISBtUmVz
ZXRzKSB7CiAgICAgICAgICBtUmVzZXRDb3VudCA9IDA7CiAgICAgICAgICByZXR1cm4gKChuc3Jl
c3VsdCkgMHg4MDA3MDAwZUwpOwogICAgICAgIH0KICAgICAgfQogICAgICBtUmVzZXRDb3VudCA9
IGFDb3VudDsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgbnNyZXN1bHQgU2V0Q291bnRlclJl
c2V0QXQoUFJVaW50MzIgYUluZGV4LCBjb25zdCBuc1N0cmluZyYgYUNvdW50ZXIsIFBSSW50MzIg
YVZhbHVlKSB7CiAgICBpZiAoYUluZGV4IDwgbVJlc2V0Q291bnQpIHsKICAgICAgbVJlc2V0c1th
SW5kZXhdLm1Db3VudGVyID0gYUNvdW50ZXI7CiAgICAgIG1SZXNldHNbYUluZGV4XS5tVmFsdWUg
PSBhVmFsdWU7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4
ODAwNzAwNTdMKTsKICB9CgogIG5zU3R5bGVDb29yZCBtTWFya2VyT2Zmc2V0OwoKcHJvdGVjdGVk
OgogIFBSVWludDMyIG1Db250ZW50Q291bnQ7CiAgbnNTdHlsZUNvbnRlbnREYXRhKiBtQ29udGVu
dHM7CgogIFBSVWludDMyIG1JbmNyZW1lbnRDb3VudDsKICBuc1N0eWxlQ291bnRlckRhdGEqIG1J
bmNyZW1lbnRzOwoKICBQUlVpbnQzMiBtUmVzZXRDb3VudDsKICBuc1N0eWxlQ291bnRlckRhdGEq
IG1SZXNldHM7Cn07CgpzdHJ1Y3QgbnNTdHlsZVVJUmVzZXQ6IHB1YmxpYyBuc1N0eWxlU3RydWN0
IHsKICBuc1N0eWxlVUlSZXNldCh2b2lkKTsKICBuc1N0eWxlVUlSZXNldChjb25zdCBuc1N0eWxl
VUlSZXNldCYgYU90aGVyKTsKICB+bnNTdHlsZVVJUmVzZXQodm9pZCk7CgogIHZvaWQqIG9wZXJh
dG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdm9pZCog
cmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7
CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFD
b250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVVJUmVzZXQoKTsKICAgIGFDb250ZXh0LT5GcmVl
VG9TaGVsbChzaXplb2YobnNTdHlsZVVJUmVzZXQpLCB0aGlzKTsKICB9OwoKICBQUkludDMyIENh
bGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVVSVJlc2V0JiBhT3RoZXIpIGNvbnN0OwoKICBQUlVp
bnQ4IG1Vc2VyU2VsZWN0OwogIFBSVW5pY2hhciBtS2V5RXF1aXZhbGVudDsKICBQUlVpbnQ4IG1S
ZXNpemVyOwp9OwoKc3RydWN0IG5zU3R5bGVVc2VySW50ZXJmYWNlOiBwdWJsaWMgbnNTdHlsZVN0
cnVjdCB7CiAgbnNTdHlsZVVzZXJJbnRlcmZhY2Uodm9pZCk7CiAgbnNTdHlsZVVzZXJJbnRlcmZh
Y2UoY29uc3QgbnNTdHlsZVVzZXJJbnRlcmZhY2UmIGFPdGhlcik7CiAgfm5zU3R5bGVVc2VySW50
ZXJmYWNlKHZvaWQpOwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29u
dGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxs
b2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9p
ZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVV
c2VySW50ZXJmYWNlKCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVV
c2VySW50ZXJmYWNlKSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxjRGlmZmVyZW5jZShjb25z
dCBuc1N0eWxlVXNlckludGVyZmFjZSYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtVXNlcklu
cHV0OwogIFBSVWludDggbVVzZXJNb2RpZnk7CiAgUFJVaW50OCBtVXNlckZvY3VzOwoKICBQUlVp
bnQ4IG1DdXJzb3I7CiAgbnNTdHJpbmcgbUN1cnNvckltYWdlOwp9OwoKCnN0cnVjdCBuc1N0eWxl
WFVMIDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVYVUwoKTsKICBuc1N0eWxlWFVM
KGNvbnN0IG5zU3R5bGVYVUwmIGFTb3VyY2UpOwogIH5uc1N0eWxlWFVMKCk7CgogIHZvaWQqIG9w
ZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdm9p
ZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3Vs
dCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQq
IGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVhVTCgpOwogICAgYUNvbnRleHQtPkZyZWVU
b1NoZWxsKHNpemVvZihuc1N0eWxlWFVMKSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxjRGlm
ZmVyZW5jZShjb25zdCBuc1N0eWxlWFVMJiBhT3RoZXIpIGNvbnN0OwoKCgoKCiAgUFJVaW50OCBt
Qm94T3JpZW50Owp9OwoKCgoKCgpzdHJ1Y3QgbnNCb3JkZXJFZGdlczsKCgpzdHJ1Y3QgbnNCb3Jk
ZXJFZGdlCnsKCiAgbnNjb29yZCBtV2lkdGg7CgogIG5zY29vcmQgbUxlbmd0aDsKICBQUlVpbnQ4
IG1TdHlsZTsKICBuc2NvbG9yIG1Db2xvcjsKCiAgUFJVaW50OCBtU2lkZTsKCiAgbnNCb3JkZXJF
ZGdlcyAqIG1JbnNpZGVOZWlnaGJvcjsKCiAgbnNCb3JkZXJFZGdlKCk7Cn07CgppbmxpbmUgbnNC
b3JkZXJFZGdlOjpuc0JvcmRlckVkZ2UoKQp7CiAgbVdpZHRoPTA7CiAgbUxlbmd0aD0wOwogIG1T
dHlsZT0wOwogIG1Db2xvcj0wOwogIG1TaWRlPTM7CiAgbUluc2lkZU5laWdoYm9yID0gMDsKfTsK
CgoKCnN0cnVjdCBuc0JvcmRlckVkZ2VzCnsKICBuc1ZvaWRBcnJheSBtRWRnZXNbNF07CiAgbnNN
YXJnaW4gbU1heEJvcmRlcldpZHRoOwogIFBSUGFja2VkQm9vbCBtT3V0c2lkZUVkZ2U7CgogIG5z
Qm9yZGVyRWRnZXMoKTsKfTsKCmlubGluZSBuc0JvcmRlckVkZ2VzOjpuc0JvcmRlckVkZ2VzKCkK
ewogIG1NYXhCb3JkZXJXaWR0aC5TaXplVG8oMCwwLDAsMCk7CiAgbU91dHNpZGVFZGdlID0gMTsK
fTsKIyAzMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvb3JkLmgiIDEKIyAzMyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNIVE1MUmVmbG93U3RhdGUuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNI
VE1MUmVmbG93U3RhdGUuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQu
aCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUmVmbG93U3RhdGUuaCIg
MgoKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lSZWZsb3dD
b21tYW5kOwpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBuc0lTcGFjZU1hbmFnZXI7
CmNsYXNzIG5zTGluZUxheW91dDsKCnN0cnVjdCBuc1N0eWxlRGlzcGxheTsKc3RydWN0IG5zU3R5
bGVWaXNpYmlsaXR5OwpzdHJ1Y3QgbnNTdHlsZVBvc2l0aW9uOwpzdHJ1Y3QgbnNTdHlsZUJvcmRl
cjsKc3RydWN0IG5zU3R5bGVNYXJnaW47CnN0cnVjdCBuc1N0eWxlUGFkZGluZzsKc3RydWN0IG5z
U3R5bGVUZXh0OwpzdHJ1Y3QgbnNIeXBvdGhldGljYWxCb3g7CiMgNTggIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgplbnVtIG5zUmVmbG93UmVhc29uIHsKICBl
UmVmbG93UmVhc29uX0luaXRpYWwgPSAwLAogIGVSZWZsb3dSZWFzb25fSW5jcmVtZW50YWwgPSAx
LAogIGVSZWZsb3dSZWFzb25fUmVzaXplID0gMiwKICBlUmVmbG93UmVhc29uX1N0eWxlQ2hhbmdl
ID0gMywKCiAgZVJlZmxvd1JlYXNvbl9EaXJ0eSA9IDQKfTsKCgoKCnR5cGVkZWYgUFJVaW50MzIg
bnNDU1NGcmFtZVR5cGU7CiMgMTE0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUmVm
bG93U3RhdGUuaCIKc3RydWN0IG5zSFRNTFJlZmxvd1N0YXRlIHsKCgogIGNvbnN0IG5zSFRNTFJl
Zmxvd1N0YXRlKiBwYXJlbnRSZWZsb3dTdGF0ZTsKCgogIG5zSUZyYW1lKiBmcmFtZTsKCgogIG5z
UmVmbG93UmVhc29uIHJlYXNvbjsKCgogIG5zSVJlZmxvd0NvbW1hbmQqIHJlZmxvd0NvbW1hbmQ7
CiMgMTM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUmVmbG93U3RhdGUuaCIKICBu
c2Nvb3JkIGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQ7CgoKICBuc0lSZW5kZXJpbmdD
b250ZXh0KiByZW5kQ29udGV4dDsKCgogIFBSUGFja2VkQm9vbCBpc1RvcE9mUGFnZTsKCgoKICBu
c0NTU0ZyYW1lVHlwZSBtRnJhbWVUeXBlOwoKCiAgbnNJU3BhY2VNYW5hZ2VyKiBtU3BhY2VNYW5h
Z2VyOwoKCiAgbnNMaW5lTGF5b3V0KiBtTGluZUxheW91dDsKIyAxNjQgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgogIG5zY29vcmQgbUNvbXB1dGVkV2lkdGg7
CiMgMTc5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUmVmbG93U3RhdGUuaCIKICBu
c2Nvb3JkIG1Db21wdXRlZEhlaWdodDsKCgogIG5zTWFyZ2luIG1Db21wdXRlZE1hcmdpbjsKCgog
IG5zTWFyZ2luIG1Db21wdXRlZEJvcmRlclBhZGRpbmc7CgoKICBuc01hcmdpbiBtQ29tcHV0ZWRQ
YWRkaW5nOwoKCgogIG5zTWFyZ2luIG1Db21wdXRlZE9mZnNldHM7CgoKICBuc2Nvb3JkIG1Db21w
dXRlZE1pbldpZHRoLCBtQ29tcHV0ZWRNYXhXaWR0aDsKICBuc2Nvb3JkIG1Db21wdXRlZE1pbkhl
aWdodCwgbUNvbXB1dGVkTWF4SGVpZ2h0OwoKCiAgbnNjb29yZCBtQ29tcGFjdE1hcmdpbldpZHRo
OwoKCgoKCgogIG5zY29vcmQgbUFsaWduQ2hhck9mZnNldDsKCgoKICBQUlBhY2tlZEJvb2wgbVVz
ZUFsaWduQ2hhck9mZnNldDsKCgogIGNvbnN0IG5zU3R5bGVEaXNwbGF5KiBtU3R5bGVEaXNwbGF5
OwogIGNvbnN0IG5zU3R5bGVWaXNpYmlsaXR5KiBtU3R5bGVWaXNpYmlsaXR5OwogIGNvbnN0IG5z
U3R5bGVQb3NpdGlvbiogbVN0eWxlUG9zaXRpb247CiAgY29uc3QgbnNTdHlsZUJvcmRlciogbVN0
eWxlQm9yZGVyOwogIGNvbnN0IG5zU3R5bGVNYXJnaW4qIG1TdHlsZU1hcmdpbjsKICBjb25zdCBu
c1N0eWxlUGFkZGluZyogbVN0eWxlUGFkZGluZzsKICBjb25zdCBuc1N0eWxlVGV4dCogbVN0eWxl
VGV4dDsKCgoKICBQUkludDMyIG1SZWZsb3dEZXB0aDsKCgogIG5zY29vcmQgbVJpZ2h0RWRnZTsK
IyAyNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgogIG5z
SFRNTFJlZmxvd1N0YXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1Jl
YXNvbiBhUmVhc29uLAogICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQqIGFS
ZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU2l6ZSYgYUF2YWls
YWJsZVNwYWNlKTsKCgoKICBuc0hUTUxSZWZsb3dTdGF0ZShuc0lQcmVzQ29udGV4dCogYVByZXND
b250ZXh0LAogICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAg
ICAgICAgICAgbnNJUmVmbG93Q29tbWFuZCYgYVJlZmxvd0NvbW1hbmQsCiAgICAgICAgICAgICAg
ICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCogYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNTaXplJiBhQXZhaWxhYmxlU3BhY2UpOwoKCgoKICBuc0hUTUxSZWZs
b3dTdGF0ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
IGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUGFyZW50UmVmbG93U3RhdGUsCiAgICAgICAgICAg
ICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1Np
emUmIGFBdmFpbGFibGVTcGFjZSwKICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1JlYXNvbiBh
UmVhc29uKTsKCgoKICBuc0hUTUxSZWZsb3dTdGF0ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUGFyZW50
UmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAg
ICAgICAgICAgICAgICBjb25zdCBuc1NpemUmIGFBdmFpbGFibGVTcGFjZSk7CgoKCiAgbnNIVE1M
UmVmbG93U3RhdGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVBhcmVudFJlZmxvd1N0YXRlLAogICAgICAg
ICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNTaXplJiBhQXZhaWxhYmxlU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29u
dGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmlu
Z0Jsb2NrSGVpZ2h0KTsKCgoKCgoKICBzdGF0aWMgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqCiAg
ICBHZXRDb250YWluaW5nQmxvY2tSZWZsb3dTdGF0ZShjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSog
YVBhcmVudFJTKTsKCgoKCgoKICBzdGF0aWMgbnNjb29yZAogICAgR2V0Q29udGFpbmluZ0Jsb2Nr
Q29udGVudFdpZHRoKGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBhUGFyZW50UlMpOwoKCgoKCgog
IHN0YXRpYyBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSoKICAgIEdldFBhZ2VCb3hSZWZsb3dTdGF0
ZShjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSogYVBhcmVudFJTKTsKIyAzMTEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgogIHN0YXRpYyB2b2lkIENvbXB1dGVC
b3JkZXJQYWRkaW5nRm9yKG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFQYXJlbnRSUywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc01hcmdpbiYgYVJlc3VsdCk7CgoKCgoK
CiAgc3RhdGljIG5zY29vcmQgQ2FsY0xpbmVIZWlnaHQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0
KiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSogYUZyYW1lKTsKCiAgc3RhdGljIFBSQm9vbCBVc2VDb21wdXRlZEhlaWdodCgpOwoKICBz
dGF0aWMgbnNDU1NGcmFtZVR5cGUgRGV0ZXJtaW5lRnJhbWVUeXBlKG5zSUZyYW1lKiBhRnJhbWUp
OwoKICB2b2lkIENvbXB1dGVDb250YWluaW5nQmxvY2tSZWN0YW5nbGUobnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNIVE1MUmVmbG93U3RhdGUqIGFDb250YWluaW5nQmxvY2tSUywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCYgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkJiBhQ29udGFpbmlu
Z0Jsb2NrSGVpZ2h0KTsKCiAgdm9pZCBDYWxjdWxhdGVCbG9ja1NpZGVNYXJnaW5zKG5zY29vcmQg
YUF2YWlsV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNv
bXB1dGVkV2lkdGgpOwoKCnByb3RlY3RlZDoKCgogIHZvaWQgSW5pdChuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LAogICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCA9
IC0xLAogICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQgPSAtMSk7Cgog
IHZvaWQgSW5pdENvbnN0cmFpbnRzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKCiAgdm9pZCBD
YWxjdWxhdGVIeXBvdGhldGljYWxCb3gobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVBsYWNlaG9sZGVyRnJhbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFCbG9ja0ZyYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTWFyZ2luJiBhQmxvY2tDb250ZW50QXJl
YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUFic29sdXRlQ29u
dGFpbmluZ0Jsb2NrRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNIeXBv
dGhldGljYWxCb3gmIGFIeXBvdGhldGljYWxCb3gpOwoKICB2b2lkIEluaXRBYnNvbHV0ZUNvbnN0
cmFpbnRzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSogY2JycywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKCiAg
dm9pZCBDb21wdXRlUmVsYXRpdmVPZmZzZXRzKGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBjYnJz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tX
aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Js
b2NrSGVpZ2h0KTsKCiAgdm9pZCBDb21wdXRlQmxvY2tCb3hEYXRhKG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxv
d1N0YXRlKiBjYnJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc1N0eWxlVW5pdCBhV2lk
dGhVbml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc1N0eWxlVW5pdCBhSGVpZ2h0VW5p
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lk
dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hl
aWdodCk7CgogIHZvaWQgQ29tcHV0ZUhvcml6b250YWxWYWx1ZShuc2Nvb3JkIGFDb250YWluaW5n
QmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3R5bGVV
bml0IGFVbml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNT
dHlsZUNvb3JkJiBhQ29vcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c2Nvb3JkJiBhUmVzdWx0KTsKCiAgdm9pZCBDb21wdXRlVmVydGljYWxWYWx1ZShuc2Nvb3JkIGFD
b250YWluaW5nQmxvY2tIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNTdHlsZVVuaXQgYVVuaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNjb29yZCYgYVJlc3VsdCk7CgogIHN0YXRpYyBuc0NTU0ZyYW1lVHlwZSBEZXRlcm1pbmVG
cmFtZVR5cGUobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVEaXNwbGF5KiBhRGlzcGxheSk7CgoKCiAgdm9pZCBD
b21wdXRlTWFyZ2luKG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAogICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSogYUNvbnRhaW5pbmdCbG9ja1JTKTsKCgoK
ICB2b2lkIENvbXB1dGVQYWRkaW5nKG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFDb250YWluaW5nQmxv
Y2tSUyk7CgoKCgogIHZvaWQgQ29tcHV0ZU1pbk1heFZhbHVlcyhuc2Nvb3JkIGFDb250YWluaW5n
QmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmlu
Z0Jsb2NrSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZs
b3dTdGF0ZSogYUNvbnRhaW5pbmdCbG9ja1JTKTsKCiAgbnNjb29yZCBDYWxjdWxhdGVIb3JpekJv
cmRlclBhZGRpbmdNYXJnaW4obnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgpOwoKCgoKCiAg
dm9pZCBBZGp1c3RDb21wdXRlZEhlaWdodCh2b2lkKTsKICB2b2lkIEFkanVzdENvbXB1dGVkV2lk
dGgodm9pZCk7Cn07CiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAy
CiMgNTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgpjbGFzcyBuc0lBdG9t
OwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJUHJlc1No
ZWxsOwpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwpj
bGFzcyBuc0lTdHlsZUNvbnRleHQ7CmNsYXNzIG5zSVZpZXc7CmNsYXNzIG5zSVdpZGdldDsKY2xh
c3MgbnNBdXRvU3RyaW5nOwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNJRm9jdXNUcmFja2VyOwpj
bGFzcyBuc1N0eWxlQ2hhbmdlTGlzdDsKY2xhc3MgbnNCbG9ja0ZyYW1lOwpjbGFzcyBuc0xpbmVM
YXlvdXQ7CgpzdHJ1Y3QgbnNQZWVrT2Zmc2V0U3RydWN0OwpzdHJ1Y3QgbnNQb2ludDsKc3RydWN0
IG5zUmVjdDsKc3RydWN0IG5zU3R5bGVTdHJ1Y3Q7CmNsYXNzIG5zSURPTVJhbmdlOwpjbGFzcyBu
c0lDYXJldDsKY2xhc3MgbnNJU2VsZWN0aW9uQ29udHJvbGxlcjsKc3RydWN0IFBSTG9nTW9kdWxl
SW5mbzsKCmNsYXNzIG5zSUFjY2Vzc2libGU7CiMgMTAwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWUuaCIKdHlwZWRlZiBQUlVpbnQzMiBuc1NwbGl0dGFibGVUeXBlOwojIDExOCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCnR5cGVkZWYgUFJVaW50MzIgbnNG
cmFtZVN0YXRlOwojIDIxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCmVu
dW0gbnNGcmFtZVBhaW50TGF5ZXIgewogIGVGcmFtZVBhaW50TGF5ZXJfVW5kZXJsYXkgPSAwLAog
IGVGcmFtZVBhaW50TGF5ZXJfQ29udGVudCA9IDEsCiAgZUZyYW1lUGFpbnRMYXllcl9PdmVybGF5
ID0gMgp9OwoKZW51bSBuc1NlbGVjdGlvbkFtb3VudCB7CiAgZVNlbGVjdENoYXJhY3RlciA9IDAs
CiAgZVNlbGVjdFdvcmQgPSAxLAogIGVTZWxlY3RMaW5lID0gMiwKICBlU2VsZWN0QmVnaW5MaW5l
ID0gMywKICBlU2VsZWN0RW5kTGluZSA9IDQsCiAgZVNlbGVjdE5vQW1vdW50ID0gNSwKICBlU2Vs
ZWN0RGlyID0gNiwKICBlU2VsZWN0UGFyYWdyYXBoID0gNwp9OwoKZW51bSBuc0RpcmVjdGlvbiB7
CiAgZURpck5leHQgPSAwLAogIGVEaXJQcmV2aW91cz0gMQp9OwoKZW51bSBuc1NwcmVhZCB7CiAg
ZVNwcmVhZE5vbmUgPSAwLAogIGVTcHJlYWRBY3Jvc3MgPSAxLAogIGVTcHJlYWREb3duID0gMgp9
OwoKZW51bSBuc0NvbnRleHRQcm92aWRlclJlbGF0aW9uc2hpcCB7CiAgZUNvbnRleHRQcm92aWRl
cl9BbmNlc3RvciA9IDAsCiAgZUNvbnRleHRQcm92aWRlcl9EZXNjZW5kYW50ID0gMQp9OwojIDI1
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCnN0cnVjdCBuc0hUTUxSZWZs
b3dNZXRyaWNzIHsKICBuc2Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAgbnNjb29yZCBhc2NlbnQsIGRl
c2NlbnQ7CgoKICBuc1NpemUqIG1heEVsZW1lbnRTaXplOwoKCgogIG5zY29vcmQgbU1heGltdW1X
aWR0aDsKIyAyODAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIG5zY29v
cmQgbUNhcnJpZWRPdXRCb3R0b21NYXJnaW47CiMgMjkwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWUuaCIKICBuc1JlY3QgbU92ZXJmbG93QXJlYTsKCiAgUFJVaW50MzIgbUZsYWdz
OwoKCiAgUFJCb29sIG1Ob3RoaW5nQ2hhbmdlZDsKCiAgbnNIVE1MUmVmbG93TWV0cmljcyhuc1Np
emUqIGFNYXhFbGVtZW50U2l6ZSwgUFJVaW50MzIgYUZsYWdzID0gMCkgewogICAgbWF4RWxlbWVu
dFNpemUgPSBhTWF4RWxlbWVudFNpemU7CiAgICBtTWF4aW11bVdpZHRoID0gMDsKICAgIG1GbGFn
cyA9IGFGbGFnczsKICAgIG1DYXJyaWVkT3V0Qm90dG9tTWFyZ2luID0gMDsKICAgIG1PdmVyZmxv
d0FyZWEueCA9IDA7CiAgICBtT3ZlcmZsb3dBcmVhLnkgPSAwOwogICAgbU92ZXJmbG93QXJlYS53
aWR0aCA9IDA7CiAgICBtT3ZlcmZsb3dBcmVhLmhlaWdodCA9IDA7CiAgICBtTm90aGluZ0NoYW5n
ZWQgPSAwOwoKCgoKCgoKICAgIHdpZHRoID0gaGVpZ2h0ID0gMDsKICAgIGFzY2VudCA9IGRlc2Nl
bnQgPSAwOwogIH0KCiAgdm9pZCBBZGRCb3JkZXJQYWRkaW5nVG9NYXhFbGVtZW50U2l6ZShjb25z
dCBuc01hcmdpbiYgYUJvcmRlclBhZGRpbmcpIHsKICAgIG1heEVsZW1lbnRTaXplLT53aWR0aCAr
PSBhQm9yZGVyUGFkZGluZy5sZWZ0ICsgYUJvcmRlclBhZGRpbmcucmlnaHQ7CiAgICBtYXhFbGVt
ZW50U2l6ZS0+aGVpZ2h0ICs9IGFCb3JkZXJQYWRkaW5nLnRvcCArIGFCb3JkZXJQYWRkaW5nLmJv
dHRvbTsKICB9CgogIG5zSFRNTFJlZmxvd01ldHJpY3MmIG9wZXJhdG9yPShjb25zdCBuc0hUTUxS
ZWZsb3dNZXRyaWNzJiBhT3RoZXIpCiAgewogICAgaWYgKG1heEVsZW1lbnRTaXplICYmIGFPdGhl
ci5tYXhFbGVtZW50U2l6ZSkgewogICAgICBtYXhFbGVtZW50U2l6ZS0+d2lkdGggPSBhT3RoZXIu
bWF4RWxlbWVudFNpemUtPndpZHRoOwogICAgICBtYXhFbGVtZW50U2l6ZS0+aGVpZ2h0ID0gYU90
aGVyLm1heEVsZW1lbnRTaXplLT5oZWlnaHQ7CiAgICB9CiAgICBtTWF4aW11bVdpZHRoID0gYU90
aGVyLm1NYXhpbXVtV2lkdGg7CiAgICBtRmxhZ3MgPSBhT3RoZXIubUZsYWdzOwogICAgbUNhcnJp
ZWRPdXRCb3R0b21NYXJnaW4gPSBhT3RoZXIubUNhcnJpZWRPdXRCb3R0b21NYXJnaW47CiAgICBt
T3ZlcmZsb3dBcmVhLnggPSBhT3RoZXIubU92ZXJmbG93QXJlYS54OwogICAgbU92ZXJmbG93QXJl
YS55ID0gYU90aGVyLm1PdmVyZmxvd0FyZWEueTsKICAgIG1PdmVyZmxvd0FyZWEud2lkdGggPSBh
T3RoZXIubU92ZXJmbG93QXJlYS53aWR0aDsKICAgIG1PdmVyZmxvd0FyZWEuaGVpZ2h0ID0gYU90
aGVyLm1PdmVyZmxvd0FyZWEuaGVpZ2h0OwogICAgbU5vdGhpbmdDaGFuZ2VkID0gYU90aGVyLm1O
b3RoaW5nQ2hhbmdlZDsKCgoKCiAgICB3aWR0aCA9IGFPdGhlci53aWR0aDsKICAgIGhlaWdodCA9
IGFPdGhlci5oZWlnaHQ7CiAgICBhc2NlbnQgPSBhT3RoZXIuYXNjZW50OwogICAgZGVzY2VudCA9
IGFPdGhlci5kZXNjZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KCn07CiMgMzgyICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKdHlwZWRlZiBQUlVpbnQzMiBuc1JlZmxvd1N0
YXR1czsKIyA0NTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgp0eXBlZGVm
IFBSQm9vbCBuc0RpZFJlZmxvd1N0YXR1czsKIyA0NzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZS5oIgpjbGFzcyBuc0lGcmFtZSA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1Ymxp
YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk
ID0geyAweGE2Y2Y5MDUwLCAweDE1YjMsIDB4MTFkMix7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwg
MHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO30KIyA0OTUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNv
bnRlbnQsCiAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVBhcmVudCwKICAgICAgICAgICAg
ICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSogYVByZXZJbkZsb3cpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRGVzdHJveShu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CiMgNTI1ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEluaXRpYWxDaGlsZExp
c3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUZyYW1lKiBhQ2hpbGRMaXN0KSA9IDA7CiMgNTQzICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZEZyYW1lcyhuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVBy
ZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBh
TGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZUxpc3Qp
ID0gMDsKIyA1NjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgSW5zZXJ0RnJhbWVzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYVByZXZGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lGcmFtZSogYUZyYW1lTGlzdCkgPSAwOwojIDU4NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBh
UHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPbGRGcmFtZSkgPSAwOwojIDYwNyAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZXBsYWNlRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lKiBhT2xkRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFOZXdG
cmFtZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnQobnNJQ29udGVu
dCoqIGFDb250ZW50KSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNl
dHMoUFJJbnQzMiAmc3RhcnQsIFBSSW50MzIgJmVuZCkgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFN0eWxlQ29udGV4dChuc0lTdHlsZUNvbnRleHQqKiBhU3R5bGVDb250
ZXh0KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdHlsZUNvbnRleHQobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
U3R5bGVDb250ZXh0KiBhQ29udGV4dCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0
eWxlRGF0YShuc1N0eWxlU3RydWN0SUQgYVNJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNTdHlsZVN0cnVjdComIGFTdHlsZVN0cnVjdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBjb25zdCBuc1N0eWxlU3Ry
dWN0KiogYVN0cnVjdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbGNCb3JkZXJQ
YWRkaW5nKG5zTWFyZ2luJiBhQm9yZGVyUGFkZGluZykgY29uc3QgPSAwOwojIDY1NyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBZGRp
dGlvbmFsU3R5bGVDb250ZXh0KFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVN0eWxlQ29udGV4dCkgY29uc3Qg
PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWRkaXRpb25hbFN0eWxlQ29udGV4dChQUkludDMy
IGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxl
Q29udGV4dCogYVN0eWxlQ29udGV4dCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBh
cmVudChuc0lGcmFtZSoqIGFQYXJlbnQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dFBhcmVudChjb25zdCBuc0lGcmFtZSogYVBhcmVudCkgPSAwOwojIDY3NiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWN0KG5zUmVj
dCYgYVJlY3QpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9yaWdpbihuc1BvaW50
JiBhUG9pbnQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUobnNTaXplJiBh
U2l6ZSkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVjdChuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhUmVj
dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVRvKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgsCiAgICAgICAgICAgICAgICAg
ICAgIG5zY29vcmQgYVkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNpemVUbyhuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFXaWR0aCwK
ICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CiMgNjk4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFkZGl0
aW9uYWxDaGlsZExpc3ROYW1lKFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qKiBhTGlzdE5hbWUpIGNvbnN0ID0gMDsKIyA3MDkg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
Rmlyc3RDaGlsZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
RnJhbWUqKiBhRmlyc3RDaGlsZCkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dE5leHRTaWJsaW5nKG5zSUZyYW1lKiogYU5leHRTaWJsaW5nKSBjb25zdCA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXROZXh0U2libGluZyhuc0lGcmFtZSogYU5leHRTaWJsaW5nKSA9IDA7CgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAg
ICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcikgPSAwOwojIDc0NCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBI
YW5kbGVFdmVudChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zR1VJRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0V2ZW50U3RhdHVzKiBhRXZlbnRTdGF0dXMpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD
b250ZW50Rm9yRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNFdmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lDb250ZW50KiogYUNvbnRlbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRDb250ZW50QW5kT2Zmc2V0c0Zyb21Qb2ludChuc0lQcmVzQ29udGV4dCogYUNYLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCYg
YVBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29u
dGVudCAqKiBhTmV3Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSSW50MzImIGFDb250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYUNvbnRlbnRPZmZzZXRFbmQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wmIGFCZWdpbkZyYW1lQ29udGVu
dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJzb3IobnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNQb2ludCYgYVBvaW50LAog
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyJiBhQ3Vyc29yKSA9IDA7CiMgNzc0ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZy
YW1lRm9yUG9pbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zUG9pbnQmIGFQb2ludCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhRnJhbWUpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRQb2ludEZyb21PZmZzZXQobnNJUHJlc0NvbnRleHQqIGluUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQq
IGluUmVuZENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIg
aW5PZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUG9pbnQqIG91dFBv
aW50KSA9IDA7CiMgNzk4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkRnJhbWVDb250YWluaW5nT2Zmc2V0KFBSSW50MzIgaW5D
b250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgaW5I
aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBvdXRGcmFtZUNv
bnRlbnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiAq
b3V0Q2hpbGRGcmFtZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVTdGF0
ZShuc0ZyYW1lU3RhdGUqIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
RnJhbWVTdGF0ZShuc0ZyYW1lU3RhdGUgYU5ld1N0YXRlKSA9IDA7CiMgODI1ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRDaGFu
Z2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVN1cHBvcnRzKiBhU3ViQ29udGVudCkgPSAwOwojIDgzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy
IGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFB
dHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50KSA9
IDA7CiMgODU0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IENvbnRlbnRTdGF0ZUNoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUhpbnQpID0gMDsKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBJc1NwbGl0dGFibGUobnNTcGxpdHRhYmxlVHlwZSYgYUlzU3Bs
aXR0YWJsZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXZJbkZsb3co
bnNJRnJhbWUqKiBhUHJldkluRmxvdykgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
UHJldkluRmxvdyhuc0lGcmFtZSopID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5leHRJbkZs
b3cobnNJRnJhbWUqKiBhTmV4dEluRmxvdykgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0TmV4dEluRmxvdyhuc0lGcmFtZSopID0gMDsKIyA4ODAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgV2lsbFJlZmxvdyhuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0KSA9IDA7CiMgOTIyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJpY3MmIGFSZWZs
b3dNZXRyaWNzLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBh
UmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgbnNSZWZsb3dTdGF0dXMmIGFTdGF0dXMp
ID0gMDsKIyA5NDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgRGlkUmVmbG93KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIG5zRGlkUmVmbG93U3RhdHVzIGFTdGF0dXMpID0gMDsKIyA5NTgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
Q2FuQ29udGludWVUZXh0UnVuKFBSQm9vbCYgYUNvbnRpbnVlVGV4dFJ1bikgY29uc3QgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkanVzdEZyYW1lU2l6ZShuc2Nvb3JkIGFFeHRyYVNwYWNl
LCBuc2Nvb3JkJiBhVXNlZFNwYWNlKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUcmltVHJh
aWxpbmdXaGl0ZVNwYWNlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSQywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCYgYURlbHRhV2lkdGgpID0gMDsK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3KiogYVZpZXcpIGNvbnN0ID0gMDsKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgIG5zSVZpZXcqIGFWaWV3KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0UGFyZW50V2l0aFZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQYXJlbnQpIGNvbnN0ID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T2Zmc2V0RnJvbVZpZXcobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50
JiBhT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVZpZXcqKiBhVmll
dykgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpbmRvdyhuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0lXaWRnZXQq
KiBhV2lkZ2V0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZVR5
cGUobnNJQXRvbSoqIGFUeXBlKSBjb25zdCA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNQ
ZXJjZW50YWdlQmFzZShQUkJvb2wmIGFCYXNlKSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFNjcm9sbGVkKG5zSVZpZXcgKmFWaWV3KSA9IDA7CiMgMTAzMCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTZWxlY3RlZChu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SURPTVJhbmdlKiBhUmFuZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFTZWxl
Y3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NwcmVhZCBhU3ByZWFkKSA9IDA7Cgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0ZWQoUFJCb29sICphU2VsZWN0ZWQpIGNvbnN0ID0g
MDsKIyAxMDQ2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IElzU2VsZWN0YWJsZShQUkJvb2wqIGFJc1NlbGVjdGFibGUsIFBSVWludDgqIGFT
ZWxlY3RTdHlsZSkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0
aW9uQ29udHJvbGxlcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lTZWxlY3Rpb25D
b250cm9sbGVyICoqYVNlbENvbikgPSAwOwojIDEwNjQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FwdHVyZU1vdXNlKG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsIFBSQm9vbCBhR3JhYk1vdXNlRXZlbnRzKSA9IDA7CiMgMTA3MyAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQ
ZWVrT2Zmc2V0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zUGVla09mZnNldFN0cnVj
dCAqYVBvcykgPSAwOwojIDEwODYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tWaXNpYmlsaXR5KG5zSVByZXNDb250ZXh0KiBhQ29u
dGV4dCwgUFJJbnQzMiBhU3RhcnRJbmRleCwgUFJJbnQzMiBhRW5kSW5kZXgsIFBSQm9vbCBhUmVj
dXJzZSwgUFJCb29sICphRmluaXNoZWQsIFBSQm9vbCAqX3JldHZhbCk9MDsKCgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBSZWZsb3dEaXJ0eUNoaWxkKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwg
bnNJRnJhbWUqIGFDaGlsZCkgPSAwOwojIDExMDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNjZXNzaWJsZShuc0lBY2Nlc3NpYmxl
KiogYUFjY2Vzc2libGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVmbG93Q29tbWFu
ZE5vdGlmeShuc0lQcmVzU2hlbGwqIGFTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJUmVmbG93Q29tbWFuZCogYVJDLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkJvb2wgYUNvbW1hbmRBZGRlZCkgPSAwOwojIDExMzEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50U3R5bGVDb250
ZXh0UHJvdmlkZXIobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYVByb3ZpZGVyRnJhbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NvbnRleHRQcm92aWRl
clJlbGF0aW9uc2hpcCYgYVJlbGF0aW9uc2hpcCkgPSAwOwojIDExNDQgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlRm9yUGFp
bnRpbmcobnNJUHJlc0NvbnRleHQgKiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhQ2hlY2tWaXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFJc1Zpc2libGUpID0gMDsKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVByb3BlcnR5TmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogYVByb3BlcnR5VmFsdWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhU2l6ZSA9IHNpemVvZih2b2lkKikgKSBj
b25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCaWRpUHJvcGVydHkobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBh
UHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFQcm9wZXJ0
eVZhbHVlKSBjb25zdCA9IDA7CgoKcHJpdmF0ZToKICB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2
b2lkKSA9IDA7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpID0gMDsKfTsKIyAyNyAi
Li4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zUmVjdC5oIiAxCiMgMjggIi4uLy4uL2Jhc2Uvc3JjL25zRnJhbWUuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjkgIi4uLy4uL2Jhc2Uvc3JjL25z
RnJhbWUuaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmxvZy5oIiAxCiMgMjIgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmxvZy5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyMyAiL3dpbmRvd3MvaGRhMTIv
bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9nLmgiIDIKCmV4dGVybiAiQyIg
ewojIDExOSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3BybG9nLmgiCnR5cGVkZWYgZW51bSBQUkxvZ01vZHVsZUxldmVsIHsKICAgIFBSX0xPR19OT05F
ID0gMCwKICAgIFBSX0xPR19BTFdBWVMgPSAxLAogICAgUFJfTE9HX0VSUk9SID0gMiwKICAgIFBS
X0xPR19XQVJOSU5HID0gMywKICAgIFBSX0xPR19ERUJVRyA9IDQsCgogICAgUFJfTE9HX05PVElD
RSA9IFBSX0xPR19ERUJVRywKICAgIFBSX0xPR19XQVJOID0gUFJfTE9HX1dBUk5JTkcsCiAgICBQ
Ul9MT0dfTUlOID0gUFJfTE9HX0RFQlVHLAogICAgUFJfTE9HX01BWCA9IFBSX0xPR19ERUJVRwp9
IFBSTG9nTW9kdWxlTGV2ZWw7CgoKCgoKCnR5cGVkZWYgc3RydWN0IFBSTG9nTW9kdWxlSW5mbyB7
CiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgUFJMb2dNb2R1bGVMZXZlbCBsZXZlbDsKICAgIHN0
cnVjdCBQUkxvZ01vZHVsZUluZm8gKm5leHQ7Cn0gUFJMb2dNb2R1bGVJbmZvOwoKCgoKZXh0ZXJu
IFBSTG9nTW9kdWxlSW5mbyogUFJfTmV3TG9nTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpOwoKCgoK
CmV4dGVybiBQUkJvb2wgUFJfU2V0TG9nRmlsZShjb25zdCBjaGFyICpuYW1lKTsKCgoKCgpleHRl
cm4gdm9pZCBQUl9TZXRMb2dCdWZmZXJpbmcoUFJJbnRuIGJ1ZmZlcl9zaXplKTsKCgoKCgoKCmV4
dGVybiB2b2lkIFBSX0xvZ1ByaW50KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKCgoKCmV4dGVybiB2
b2lkIFBSX0xvZ0ZsdXNoKHZvaWQpOwojIDIzNSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9nLmgiCn0KIyAzMCAiLi4vLi4vYmFzZS9zcmMvbnNG
cmFtZS5oIiAyCgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwu
aCIgMQojIDM1ICIuLi8uLi9iYXNlL3NyYy9uc0ZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIiAxCiMgMzYgIi4uLy4uL2Jhc2Uvc3JjL25z
RnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlv
bi5oIiAxCiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5o
IgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMzQgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDEKIyAzNSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRm9jdXNUcmFja2VyLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZvY3VzVHJhY2tlci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0
cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb2N1c1RyYWNrZXIuaCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAxCiMgMjkgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb2N1c1RyYWNrZXIuaCIgMgoKCmNsYXNzIG5zSVByZXND
b250ZXh0OwoKCgoKCgoKY2xhc3MgbnNJRm9jdXNUcmFja2VyIDogcHVibGljIG5zSVN1cHBvcnRz
CnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQg
aWlkID0geyAweDgxYWM1MWQxLCAweDkyM2IsIDB4MTFkMiwgeyAweDkxLCAweDhmLCAweDAsIDB4
ODAsIDB4YzgsIDB4ZTQsIDB4NGQsIDB4YjUgfSB9OyByZXR1cm4gaWlkOyB9CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFNjcm9sbEZyYW1lSW50b1ZpZXcobnNJRnJhbWUgKmFGcmFtZSkgPSAwOwoj
IDYzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9jdXNUcmFja2VyLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRQcmltYXJ5RnJhbWVGb3IobnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhUHJpbWFyeUZyYW1lKSBjb25z
dCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVzQ29udGV4dChuc0lQcmVzQ29u
dGV4dCAqKmFDb250ZXh0KSA9IDA7Cn07CiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGcmFtZVNlbGVjdGlvbi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNl
bGVjdGlvbi5oIiAxCiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVj
dGlvbi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAx
CiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMQojIDI1ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Q29udGVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgi
IDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0FXcml0YWJsZVN0cmluZy5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lDb250ZW50LmgiIDIKCgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3Mg
bnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zVm9pZEFycmF5OwpjbGFzcyBuc0lET01FdmVudDsKY2xh
c3MgbnNJQ29udGVudDsKY2xhc3MgbnNJU3VwcG9ydHNBcnJheTsKY2xhc3MgbnNJRE9NUmFuZ2U7
CmNsYXNzIG5zSVNpemVPZkhhbmRsZXI7CmNsYXNzIG5zSU5vZGVJbmZvOwpjbGFzcyBuc0lFdmVu
dExpc3RlbmVyTWFuYWdlcjsKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRl
bnQuaCIKY2xhc3MgbnNJQ29udGVudCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBz
dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAw
eDc4MDMwMjIwLCAweDk0NDcsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAsIDB4NWYs
IDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dERvY3VtZW50KG5zSURvY3VtZW50KiYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldERvY3VtZW50KG5zSURvY3VtZW50KiBhRG9jdW1lbnQsIFBSQm9vbCBhRGVlcCwg
UFJCb29sIGFDb21waWxlRXZlbnRIYW5kbGVycykgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFBhcmVudChuc0lDb250ZW50KiYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVz
dWx0IFNldFBhcmVudChuc0lDb250ZW50KiBhUGFyZW50KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0TmFtZVNwYWNlSUQoUFJJbnQzMiYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFRhZyhuc0lBdG9tKiYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldE5vZGVJbmZvKG5zSU5vZGVJbmZvKiYgYVJlc3VsdCkgY29uc3QgPSAw
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkNvbnRhaW5DaGlsZHJlbihQUkJvb2wmIGFSZXN1bHQp
IGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGlsZENvdW50KFBSSW50MzImIGFSZXN1
bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGlsZEF0KFBSSW50MzIgYUluZGV4
LCBuc0lDb250ZW50KiYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IElu
ZGV4T2YobnNJQ29udGVudCogYVBvc3NpYmxlQ2hpbGQsIFBSSW50MzImIGFJbmRleCkgY29uc3Qg
PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydENoaWxkQXQobnNJQ29udGVudCogYUtpZCwg
UFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5
LCBQUkJvb2wgYURlZXBTZXREb2N1bWVudCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlcGxh
Y2VDaGlsZEF0KG5zSUNvbnRlbnQqIGFLaWQsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJCb29sIGFOb3RpZnksIFBSQm9vbCBhRGVlcFNldERvY3VtZW50KSA9
IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kQ2hpbGRUbyhuc0lDb250ZW50KiBhS2lkLCBQ
UkJvb2wgYU5vdGlmeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEZWVwU2V0
RG9jdW1lbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVDaGlsZEF0KFBSSW50MzIg
YUluZGV4LCBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDEwMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5vcm1hbGl6ZUF0dHJpYnV0ZVN0
cmluZyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lOb2RlSW5mbyomIGFOb2RlSW5mbykgPSAwOwojIDExOCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dEF0dHJpYnV0ZShQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFWYWx1ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDEzNiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEF0dHJp
YnV0ZShuc0lOb2RlSW5mbyogYU5vZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJCb29sIGFOb3RpZnkpID0gMDsKIyAxNTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lD
b250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZVNw
YWNlSUQsIG5zSUF0b20qIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVdyaXRh
YmxlU3RyaW5nJiBhUmVzdWx0KSBjb25zdCA9IDA7CiMgMTgwICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlKFBSSW50
MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lBdG9tKiYgYVByZWZpeCwgbnNBV3JpdGFibGVTdHJpbmcmIGFSZXN1bHQpIGNvbnN0ID0g
MDsKIyAxOTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBVbnNldEF0dHJpYnV0ZShQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSog
YUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5KSA9
IDA7CiMgMjA0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlTmFtZUF0KFBSSW50MzIgYUluZGV4LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzImIGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJQXRvbSomIGFQcmVmaXgpIGNvbnN0ID0gMDsKIyAyMTYgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdHRy
aWJ1dGVDb3VudChQUkludDMyJiBhQ291bnRSZXN1bHQpIGNvbnN0ID0gMDsKIyAyMzMgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTaXpl
T2YobnNJU2l6ZU9mSGFuZGxlciogYVNpemVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3QgPSAw
OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGlzdChGSUxFKiBvdXQgPSBzdGRvdXQsIFBSSW50
MzIgYUluZGVudCA9IDApIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IER1bXBD
b250ZW50KEZJTEUqIG91dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50ID0gMCxQUkJvb2wgYUR1
bXBBbGw9MSkgY29uc3QgPSAwOwojIDI1OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNv
bnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJhbmdlQWRkKG5zSURPTVJhbmdlJiBhUmFuZ2Up
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFJhbmdlUmVtb3ZlKG5zSURPTVJhbmdlJiBhUmFuZ2Up
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJhbmdlTGlzdChuc1ZvaWRBcnJheSomIGFSZXN1
bHQpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVET01FdmVudChuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNF
dmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NRXZlbnQqKiBh
RE9NRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZlbnRTdGF0dXMpID0g
MDsKIyAyODEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRDb250ZW50SUQoUFJVaW50MzIqIGFJRCkgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0Q29udGVudElEKFBSVWludDMyIGFJRCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0Rm9jdXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgUmVtb3ZlRm9jdXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkgPSAw
OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmluZGluZ1BhcmVudChuc0lDb250ZW50KiBh
Q29udGVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmluZGluZ1BhcmVudChuc0lDb250
ZW50KiogYUNvbnRlbnQpID0gMDsKCgoKCiAgZW51bSB7CiAgICBlVEVYVCA9IDB4MDAwMDAwMDEs
CiAgICBlRUxFTUVOVCA9IDB4MDAwMDAwMDIsCiAgICBlSFRNTCA9IDB4MDAwMDAwMDQsCiAgICBl
SFRNTF9GT1JNX0NPTlRST0wgPSAweDAwMDAwMDA4LAogICAgZVhVTCA9IDB4MDAwMDAwMTAKICB9
OwoKCgoKCiAgdmlydHVhbCBQUkJvb2wgSXNDb250ZW50T2ZUeXBlKFBSVWludDMyIGFGbGFncykg
PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpc3RlbmVyTWFuYWdlcihuc0lFdmVudExpc3Rl
bmVyTWFuYWdlcioqIGFSZXN1bHQpID0gMDsKfTsKIyAzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDT01QdHIuaCIgMQojIDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxl
Y3Rpb24uaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQu
aCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAyNiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29s
b3IuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0Lmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjkgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc01hcmdpbi5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Jl
Y3QuaCIgMQojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0Lmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGb250LmgiIDEKIyAzMiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zVm9pZEFycmF5LmgiIDEKIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
U3R5bGVDb29yZC5oIiAxCiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNv
bnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0Lmgi
IDEKIyAzNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb25zdHMuaCIgMQojIDM2ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIgMQojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJUHJlc0NvbnRleHQuaCIgMQojIDM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5
bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIg
MQojIDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTGFuZ3VhZ2VBdG9tLmgiIDEKIyA0MCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDEKIyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKY2xhc3Mg
bnNJRnJhbWU7CmNsYXNzIG5zSVN1cHBvcnRzQXJyYXk7CmNsYXNzIG5zSVN0eWxlQ29udGV4dDsK
Y2xhc3MgbnNJUnVsZU5vZGU7CgoKCgoKCgpjbGFzcyBuc0lTdHlsZUNvbnRleHQgOiBwdWJsaWMg
bnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0
YXRpYyBuc0lJRCBpaWQgPSB7IDB4MjZhNGQ5NzAsIDB4YTM0MiwgMHgxMWQxLCB7MHg4OSwgMHg3
NCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5MSwgMHgxYiwgMHg4MX0gfTsgcmV0dXJuIGlpZDsgfQoK
ICB2aXJ0dWFsIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNJU3R5bGVDb250ZXh0KiBhT3RoZXIpIGNv
bnN0ID0gMDsKCiAgdmlydHVhbCBuc0lTdHlsZUNvbnRleHQqIEdldFBhcmVudCh2b2lkKSBjb25z
dCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaXJzdENoaWxkKG5zSVN0eWxlQ29udGV4dCoq
IGFDb250ZXh0KT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBzZXVkb1R5cGUobnNJQXRvbSom
IGFQc2V1ZG9UYWcpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kQ2hpbGRXaXRo
UnVsZXMoY29uc3QgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lSdWxlTm9kZSogYVJ1bGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN0eWxlQ29udGV4dComIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBQUkJvb2wgSGFz
VGV4dERlY29yYXRpb25zKCk9MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyUGFkZGlu
Z0Zvcihuc1N0eWxlQm9yZGVyUGFkZGluZyYgYUJvcmRlclBhZGRpbmcpPTA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IENhbGNTdHlsZURpZmZlcmVuY2UobnNJU3R5bGVDb250ZXh0KiBhT3RoZXIsIFBS
SW50MzImIGFIaW50LCBQUkJvb2wgYVN0b3BBdEZpcnN0ID0gMCkgPSAwOwoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFJ1bGVOb2RlKG5zSVJ1bGVOb2RlKiogYVJlc3VsdCk9MDsKICB2aXJ0dWFsIG5z
cmVzdWx0IEFkZFN0eWxlQml0KGNvbnN0IFBSVWludDMyJiBhQml0KT0wOwogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0U3R5bGVCaXRzKFBSVWludDMyKiBhQml0cyk9MDsKCgogIHZpcnR1YWwgdm9pZCBM
aXN0KEZJTEUqIG91dCwgUFJJbnQzMiBhSW5kZW50KSA9IDA7CiAgdmlydHVhbCB2b2lkIFNpemVP
Zihuc0lTaXplT2ZIYW5kbGVyICphU2l6ZU9mSGFuZGxlciwgUFJVaW50MzIgJmFTaXplKSA9IDA7
CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3R5bGUobnNTdHlsZVN0cnVjdElEIGFTSUQs
IGNvbnN0IG5zU3R5bGVTdHJ1Y3QmIGFTdHJ1Y3QpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0U3R5bGUobnNTdHlsZVN0cnVjdElEIGFTSUQsIGNvbnN0IG5zU3R5bGVTdHJ1Y3QqKiBhU3Ry
dWN0KSA9IDA7CgogIHZpcnR1YWwgY29uc3QgbnNTdHlsZVN0cnVjdCogR2V0U3R5bGVEYXRhKG5z
U3R5bGVTdHJ1Y3RJRCBhU0lEKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNTdHlsZVN0cnVjdCogR2V0
VW5pcXVlU3R5bGVEYXRhKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIGNvbnN0IG5zU3R5
bGVTdHJ1Y3RJRCYgYVNJRCkgPSAwOwoKCiAgdmlydHVhbCB2b2lkIEZvcmNlVW5pcXVlKHZvaWQp
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1hcFN0eWxlKG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsIFBSQm9vbCBhUmVjdXJzZSA9IDEpID0gMDsKfTsKCgoKZXh0ZXJuIG5zcmVzdWx0
CiAgTlNfTmV3U3R5bGVDb250ZXh0KG5zSVN0eWxlQ29udGV4dCoqIGFJbnN0YW5jZVB0clJlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBzZXVkb1R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgIG5zSVJ1bGVOb2RlKiBhUnVsZU5vZGUsCiAgICAgICAgICAgICAgICAgICAgIG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRnJhbWVTZWxlY3Rpb24uaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT
ZWxlY3Rpb25Db250cm9sbGVyLmgiIDEKIyA0MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZyYW1lU2VsZWN0aW9uLmgiIDIKIyA1NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZy
YW1lU2VsZWN0aW9uLmgiCnN0cnVjdCBTZWxlY3Rpb25EZXRhaWxzCnsKICBQUkludDMyIG1TdGFy
dDsKICBQUkludDMyIG1FbmQ7CiAgU2VsZWN0aW9uVHlwZSBtVHlwZTsKICBTZWxlY3Rpb25EZXRh
aWxzICptTmV4dDsKfTsKIyA3NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2Vs
ZWN0aW9uLmgiCnN0cnVjdCBuc1BlZWtPZmZzZXRTdHJ1Y3QKewogIHZvaWQgU2V0RGF0YShuc0lG
b2N1c1RyYWNrZXIgKmFUcmFja2VyLAogICAgICAgICAgICAgICBuc2Nvb3JkIGFEZXNpcmVkWCwK
ICAgICAgICAgICAgICAgbnNTZWxlY3Rpb25BbW91bnQgYUFtb3VudCwKICAgICAgICAgICAgICAg
bnNEaXJlY3Rpb24gYURpcmVjdGlvbiwKICAgICAgICAgICAgICAgUFJJbnQzMiBhU3RhcnRPZmZz
ZXQsCiAgICAgICAgICAgICAgIFBSQm9vbCBhRWF0aW5nV1MsCiAgICAgICAgICAgICAgIFBSQm9v
bCBhUHJlZmVyTGVmdCwKICAgICAgICAgICAgICAgUFJCb29sIGFKdW1wTGluZXMpCiAgICAgIHsK
ICAgICAgIG1UcmFja2VyPWFUcmFja2VyO21EZXNpcmVkWD1hRGVzaXJlZFg7bUFtb3VudD1hQW1v
dW50OwogICAgICAgbURpcmVjdGlvbj1hRGlyZWN0aW9uO21TdGFydE9mZnNldD1hU3RhcnRPZmZz
ZXQ7bUVhdGluZ1dTPWFFYXRpbmdXUzsKICAgICAgIG1QcmVmZXJMZWZ0PWFQcmVmZXJMZWZ0O21K
dW1wTGluZXMgPSBhSnVtcExpbmVzOwogICAgICB9CiAgbnNJRm9jdXNUcmFja2VyICptVHJhY2tl
cjsKICBuc2Nvb3JkIG1EZXNpcmVkWDsKICBuc1NlbGVjdGlvbkFtb3VudCBtQW1vdW50OwogIG5z
RGlyZWN0aW9uIG1EaXJlY3Rpb247CiAgUFJJbnQzMiBtU3RhcnRPZmZzZXQ7CiAgbnNDT01QdHI8
bnNJQ29udGVudD4gbVJlc3VsdENvbnRlbnQ7CiAgUFJJbnQzMiBtQ29udGVudE9mZnNldDsKICBQ
UkludDMyIG1Db250ZW50T2Zmc2V0RW5kOwogIG5zSUZyYW1lICptUmVzdWx0RnJhbWU7CiAgUFJC
b29sIG1FYXRpbmdXUzsKICBQUkJvb2wgbVByZWZlckxlZnQ7CiAgUFJCb29sIG1KdW1wTGluZXM7
Cn07CgpjbGFzcyBuc0lTY3JvbGxhYmxlVmlldzsKCgpjbGFzcyBuc0lGcmFtZVNlbGVjdGlvbiA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHhmNDZlNDE3MSwgMHhkZWFhLCAweDExZDEsIHsg
MHg5NywgMHhmYywgMHgwLCAweDYwLCAweDk3LCAweDMsIDB4YzEsIDB4NGUgfSB9OyByZXR1cm4g
aWlkOyB9CiAgZW51bSBISU5UIHtISU5UTEVGVD0wLEhJTlRSSUdIVD0xfW1IaW50OwoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lGb2N1c1RyYWNrZXIgKmFUcmFja2VyLCBuc0lDb250
ZW50ICphTGltaXRlcikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcm9sbGFibGVW
aWV3KG5zSVNjcm9sbGFibGVWaWV3ICphU2Nyb2xsVmlldykgPTA7CgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0U2Nyb2xsYWJsZVZpZXcobnNJU2Nyb2xsYWJsZVZpZXcgKiphU2Nyb2xsVmlldykg
PTA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXREb3duKCkgPSAwOwoKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEhhbmRsZVRleHRFdmVudChuc0dVSUV2ZW50ICphR3VpRXZlbnQpID0gMDsK
CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVLZXlFdmVudChuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LCBuc0dVSUV2ZW50ICphR3VpRXZlbnQpID0gMDsKIyAxNjQgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
SGFuZGxlQ2xpY2sobnNJQ29udGVudCAqYU5ld0ZvY3VzLCBQUlVpbnQzMiBhQ29udGVudE9mZnNl
dCwgUFJVaW50MzIgYUNvbnRlbnRFbmRPZmZzZXQgLAogICAgICAgICAgICAgICAgICAgICAgIFBS
Qm9vbCBhQ29udGludWVTZWxlY3Rpb24sIFBSQm9vbCBhTXVsdGlwbGVTZWxlY3Rpb24sIFBSQm9v
bCBhSGludCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRHJhZyhuc0lQcmVz
Q29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqYUZyYW1lLCBuc1BvaW50JiBhUG9pbnQp
ID0gMDsKIyAxODYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlVGFibGVTZWxlY3Rpb24obnNJQ29udGVudCAqYVBh
cmVudENvbnRlbnQsIFBSSW50MzIgYUNvbnRlbnRPZmZzZXQsIFBSSW50MzIgYVRhcmdldCwgbnNN
b3VzZUV2ZW50ICphTW91c2VFdmVudCkgPSAwOwojIDE5NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdGFydEF1dG9TY3Jv
bGxUaW1lcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqYUZyYW1lLCBu
c1BvaW50JiBhUG9pbnQsIFBSVWludDMyIGFEZWxheSkgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgU3RvcEF1dG9TY3JvbGxUaW1lcigpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5h
YmxlRnJhbWVOb3RpZmljYXRpb24oUFJCb29sIGFFbmFibGUpID0gMDsKIyAyMTYgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
TG9va1VwU2VsZWN0aW9uKG5zSUNvbnRlbnQgKmFDb250ZW50LCBQUkludDMyIGFDb250ZW50T2Zm
c2V0LCBQUkludDMyIGFDb250ZW50TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNlbGVjdGlvbkRldGFpbHMgKiphUmV0dXJuRGV0YWlscywgUFJCb29sIGFTbG93Q2hlY2spID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW91c2VEb3duU3RhdGUoUFJCb29sIGFTdGF0
ZSk9MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW91c2VEb3duU3RhdGUoUFJCb29sICph
U3RhdGUpPTA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFibGVDZWxsU2VsZWN0aW9uKFBS
Qm9vbCAqYVN0YXRlKT0wOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb24oU2Vs
ZWN0aW9uVHlwZSBhU2VsZWN0aW9uVHlwZSwgbnNJU2VsZWN0aW9uICoqYVNlbGVjdGlvbik9MDsK
IyAyNDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgU2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcoU2VsZWN0aW9uVHlwZSBhU2Vs
ZWN0aW9uVHlwZSwgU2VsZWN0aW9uUmVnaW9uIGFSZWdpb24pPTA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFJlcGFpbnRTZWxlY3Rpb24obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgU2Vs
ZWN0aW9uVHlwZSBhU2VsZWN0aW9uVHlwZSk9MDsKIyAyNjQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVGb3JO
b2RlT2Zmc2V0KG5zSUNvbnRlbnQgKmFOb2RlLCBQUkludDMyIGFPZmZzZXQsIEhJTlQgYUhpbnQs
IG5zSUZyYW1lICoqYVJldHVybkZyYW1lLCBQUkludDMyICphUmV0dXJuT2Zmc2V0KT0wOwojIDI3
NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBBZGp1c3RPZmZzZXRzRnJvbVN0eWxlKG5zSUZyYW1lICphRnJhbWUsIFBSQm9v
bCAqY2hhbmdlU2VsZWN0aW9uLAogICAgICAgIG5zSUNvbnRlbnQqKiBvdXRDb250ZW50LCBQUklu
dDMyKiBvdXRTdGFydE9mZnNldCwgUFJJbnQzMiogb3V0RW5kT2Zmc2V0KT0wOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRIaW50KEhJTlQgKmFIaW50KT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
SGludChISU5UIGFIaW50KT0wOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hhcmFjdGVyTW92
ZShQUkJvb2wgYUZvcndhcmQsIFBSQm9vbCBhRXh0ZW5kKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgV29yZE1vdmUoUFJCb29sIGFGb3J3YXJkLCBQUkJvb2wgYUV4dGVuZCk9MDsKCgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IExpbmVNb3ZlKFBSQm9vbCBhRm9yd2FyZCwgUFJCb29sIGFFeHRl
bmQpPTA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnRyYUxpbmVNb3ZlKFBSQm9vbCBhRm9y
d2FyZCwgUFJCb29sIGFFeHRlbmQpPTA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0QWxs
KCk9MDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERpc3BsYXlTZWxlY3Rpb24oUFJJbnQxNiBh
U3RhdGUpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNwbGF5U2VsZWN0aW9uKFBSSW50MTYg
KmFTdGF0ZSk9MDsKIyAzMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVj
dGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVsYXlDYXJldE92ZXJFeGlzdGluZ1NlbGVj
dGlvbihQUkJvb2wgYURlbGF5KT0wOwojIDMzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWxheUNhcmV0T3ZlckV4
aXN0aW5nU2VsZWN0aW9uKFBSQm9vbCAqYURlbGF5KT0wOwojIDM0OSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWxh
eWVkQ2FyZXREYXRhKG5zTW91c2VFdmVudCAqYU1vdXNlRXZlbnQpPTA7CgoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RGVsYXllZENhcmV0RGF0YShuc01vdXNlRXZlbnQgKiphTW91c2VFdmVu
dCk9MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaW1pdGVyKG5zSUNvbnRlbnQgKiph
TGltaXRlckNvbnRlbnQpPTA7CiMgMzgxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJh
bWVTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXZOZXh0QmlkaUxldmVscyhu
c0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lDb250ZW50ICphTm9kZSwgUFJVaW50MzIg
YUNvbnRlbnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJh
bWUgKiphUHJldkZyYW1lLCBuc0lGcmFtZSAqKmFOZXh0RnJhbWUsIFBSVWludDggKmFQcmV2TGV2
ZWwsIFBSVWludDggKmFOZXh0TGV2ZWwpPTA7CiMgMzkzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lRnJvbUxl
dmVsKG5zSVByZXNDb250ZXh0ICphUHJlc0NvbnRleHQsIG5zSUZyYW1lICphRnJhbWVJbiwgbnNE
aXJlY3Rpb24gYURpcmVjdGlvbiwgUFJVaW50OCBhQmlkaUxldmVsLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJRnJhbWUgKiphRnJhbWVPdXQpPTA7CgoKfTsKIyAzNyAiLi4vLi4v
YmFzZS9zcmMvbnNGcmFtZS5oIiAyCiMgMTA3ICIuLi8uLi9iYXNlL3NyYy9uc0ZyYW1lLmgiCmNs
YXNzIG5zRnJhbWUgOiBwdWJsaWMgbnNJRnJhbWUKCgoKewpwdWJsaWM6CgoKCgogIGZyaWVuZCBu
c3Jlc3VsdCBOU19OZXdFbXB0eUZyYW1lKG5zSVByZXNTaGVsbCogYVNoZWxsLCBuc0lGcmFtZSoq
IGFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwg
bnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsKTsKCgoKCgogIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZv
aWQqIGFQdHIsIHNpemVfdCBzeik7Cgpwcml2YXRlOgoKCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCBzeikgdGhyb3cgKCkgeyByZXR1cm4gMDsgfTsKCgoKCnB1YmxpYzoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFu
Y2VQdHIpOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAg
ICAgICAgICAgIG5zSUZyYW1lKiBhUGFyZW50LAogICAgICAgICAgICAgICAgICAgbnNJU3R5bGVD
b250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhc1ByZXZJbkZs
b3cpOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SW5pdGlhbENoaWxkTGlzdChuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRv
bSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq
IGFDaGlsZExpc3QpOwogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kRnJhbWVzKG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVs
bCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3RO
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlzdCk7CiAg
dmlydHVhbCBuc3Jlc3VsdCBJbnNlcnRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUHJldkZyYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlzdCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVG
cmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFP
bGRGcmFtZSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBSZXBsYWNlRnJhbWUobnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBh
UHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhT2xkRnJhbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3RnJhbWUpOwogIHZpcnR1YWwgbnNyZXN1
bHQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldENvbnRlbnQobnNJQ29udGVudCoqIGFDb250ZW50KSBjb25zdDsKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFN0eWxlQ29udGV4dChuc0lTdHlsZUNvbnRleHQqKiBhU3R5bGVDb250ZXh0KSBj
b25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0eWxlQ29udGV4dChuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRl
eHQqIGFDb250ZXh0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxlRGF0YShuc1N0eWxlU3Ry
dWN0SUQgYVNJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHlsZVN0cnVj
dComIGFTdHlsZVN0cnVjdCkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZShuc1N0
eWxlU3RydWN0SUQgYVNJRCwgY29uc3QgbnNTdHlsZVN0cnVjdCoqIGFTdHJ1Y3QpIGNvbnN0Owog
IHZpcnR1YWwgbnNyZXN1bHQgQ2FsY0JvcmRlclBhZGRpbmcobnNNYXJnaW4mIGFCb3JkZXJQYWRk
aW5nKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFkZGl0aW9uYWxTdHlsZUNvbnRleHQo
UFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdHlsZUNvbnRleHQqKiBhU3R5bGVDb250ZXh0KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldEFkZGl0aW9uYWxTdHlsZUNvbnRleHQoUFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRleHQp
OwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50KG5zSUZyYW1lKiogYVBhcmVudCkgY29uc3Q7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJlbnQoY29uc3QgbnNJRnJhbWUqIGFQYXJlbnQpOwog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVjdChuc1JlY3QmIGFSZWN0KSBjb25zdDsKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldE9yaWdpbihuc1BvaW50JiBhUG9pbnQpIGNvbnN0OwogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0U2l6ZShuc1NpemUmIGFTaXplKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dFJlY3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgY29uc3QgbnNSZWN0JiBhUmVjdCk7
CiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlVG8obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwg
bnNjb29yZCBhWCwgbnNjb29yZCBhWSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTaXplVG8obnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCk7
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBZGRpdGlvbmFsQ2hpbGRMaXN0TmFtZShQUkludDMyIGFJ
bmRleCwgbnNJQXRvbSoqIGFMaXN0TmFtZSkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJz
dENoaWxkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFt
ZSoqIGFGaXJzdENoaWxkKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29u
dGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0
JiBhRGlydHlSZWN0LAogICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGlj
aExheWVyKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZUV2ZW50KG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNHVUlFdmVudCogYUV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFFdmVudFN0YXR1cyk7
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50Rm9yRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudCogYUV2
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiogYUNvbnRl
bnQpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3Vyc29yKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zUG9pbnQmIGFQb2ludCwKICAgICAgICAg
ICAgICAgICAgICAgICAgUFJJbnQzMiYgYUN1cnNvcik7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG
cmFtZUZvclBvaW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc1BvaW50JiBhUG9pbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYUZyYW1lKTsKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRQb2ludEZyb21PZmZzZXQobnNJUHJlc0NvbnRleHQqIGluUHJlc0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQqIGluUmVuZENv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgaW5PZmZzZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUG9pbnQqIG91dFBvaW50KTsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRDaGlsZEZyYW1lQ29udGFpbmluZ09mZnNldChQUkludDMyIGlu
Q29udGVudE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGlu
SGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiogb3V0RnJhbWVD
b250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog
Km91dENoaWxkRnJhbWUpOwoKICBzdGF0aWMgbnNyZXN1bHQgR2V0TmV4dFByZXZMaW5lRnJvbWVC
bG9ja0ZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc1BlZWtPZmZzZXRTdHJ1Y3QgKmFQb3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSAqYUJsb2NrRnJhbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFMaW5lU3RhcnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDggYU91dFNpZGVM
aW1pdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRGcmFtZVN0YXRlKG5zRnJhbWVTdGF0ZSogYVJlc3VsdCk7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRGcmFtZVN0YXRlKG5zRnJhbWVTdGF0ZSBhTmV3U3RhdGUpOwoKICB2aXJ0
dWFsIG5zcmVzdWx0IENvbnRlbnRDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiBhU3ViQ29udGVudCk7CiAgdmlydHVh
bCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFOYW1lU3BhY2VJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50KTsKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRl
bnRTdGF0ZUNoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUhpbnQpOwogIHZpcnR1YWwgbnNyZXN1bHQgSXNT
cGxpdHRhYmxlKG5zU3BsaXR0YWJsZVR5cGUmIGFJc1NwbGl0dGFibGUpIGNvbnN0OwogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0UHJldkluRmxvdyhuc0lGcmFtZSoqIGFQcmV2SW5GbG93KSBjb25zdDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZXZJbkZsb3cobnNJRnJhbWUqKTsKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldE5leHRJbkZsb3cobnNJRnJhbWUqKiBhTmV4dEluRmxvdykgY29uc3Q7CiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXROZXh0SW5GbG93KG5zSUZyYW1lKik7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zSVZpZXcqKiBhVmlldykg
Y29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsIG5zSVZpZXcqIGFWaWV3KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudFdpdGhW
aWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zSUZyYW1lKiogYVBhcmVudCkgY29u
c3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZzZXRGcm9tVmlldyhuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LCBuc1BvaW50JiBhT2Zmc2V0LCBuc0lWaWV3KiogYVZpZXcpIGNvbnN0Owog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0V2luZG93KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
IG5zSVdpZGdldCoqKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lVHlwZShuc0lB
dG9tKiogYVR5cGUpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgSXNQZXJjZW50YWdlQmFzZShQ
UkJvb2wmIGFCYXNlKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5leHRTaWJsaW5nKG5z
SUZyYW1lKiogYU5leHRTaWJsaW5nKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5leHRT
aWJsaW5nKG5zSUZyYW1lKiBhTmV4dFNpYmxpbmcpOwogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xs
ZWQobnNJVmlldyAqYVZpZXcpOwojIDI2NiAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0ZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwg
bnNJRE9NUmFuZ2UgKmFSYW5nZSxQUkJvb2wgYVNlbGVjdGVkLCBuc1NwcmVhZCBhU3ByZWFkKTsK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVjdGVkKFBSQm9vbCAqYVNlbGVjdGVkKSBjb25zdDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IElzU2VsZWN0YWJsZShQUkJvb2wqIGFJc1NlbGVjdGFibGUsIFBS
VWludDgqIGFTZWxlY3RTdHlsZSkgY29uc3Q7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0
aW9uQ29udHJvbGxlcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lTZWxlY3Rpb25D
b250cm9sbGVyICoqYVNlbENvbik7CiAgdmlydHVhbCBuc3Jlc3VsdCBQZWVrT2Zmc2V0KG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zUGVla09mZnNldFN0cnVjdCAqYVBvcykgOwogIHZp
cnR1YWwgbnNyZXN1bHQgQ2hlY2tWaXNpYmlsaXR5KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCwg
UFJJbnQzMiBhU3RhcnRJbmRleCwgUFJJbnQzMiBhRW5kSW5kZXgsIFBSQm9vbCBhUmVjdXJzZSwg
UFJCb29sICphRmluaXNoZWQsIFBSQm9vbCAqX3JldHZhbCk7CgogIHZpcnR1YWwgbnNyZXN1bHQg
UGVla09mZnNldFBhcmFncmFwaChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNQZWVrT2Zmc2V0U3RydWN0ICphUG9zKTsKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldHMoUFJJbnQzMiAmYVN0YXJ0LCBQUkludDMyICZhRW5k
KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvd0RpcnR5Q2hpbGQobnNJUHJlc1NoZWxs
KiBhUHJlc1NoZWxsLCBuc0lGcmFtZSogYUNoaWxkKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxv
d0NvbW1hbmROb3RpZnkobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJUmVmbG93Q29tbWFuZCogYVJDLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJCb29sIGFDb21tYW5kQWRkZWQpOwoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldEFjY2Vzc2libGUobnNJQWNjZXNzaWJsZSoqIGFBY2Nlc3NpYmxlKTsKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRQYXJlbnRTdHlsZUNvbnRleHRQcm92aWRlcihuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqKiBhUHJvdmlkZXJGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zQ29udGV4dFByb3ZpZGVyUmVsYXRpb25zaGlwJiBhUmVsYXRpb25zaGlw
KTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlRm9yUGFpbnRpbmcobnNJUHJlc0NvbnRl
eHQgKiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lS
ZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCBhQ2hlY2tWaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkJvb2wqIGFJc1Zpc2libGUpOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXaWxsUmVm
bG93KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwogIHZpcnR1YWwgbnNyZXN1bHQgUmVm
bG93KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIG5z
SFRNTFJlZmxvd01ldHJpY3MmIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAg
bnNSZWZsb3dTdGF0dXMmIGFTdGF0dXMpOwogIHZpcnR1YWwgbnNyZXN1bHQgRGlkUmVmbG93KG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zRGlk
UmVmbG93U3RhdHVzIGFTdGF0dXMpOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuQ29udGludWVUZXh0
UnVuKFBSQm9vbCYgYUNvbnRpbnVlVGV4dFJ1bikgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBB
ZGp1c3RGcmFtZVNpemUobnNjb29yZCBhRXh0cmFTcGFjZSwgbnNjb29yZCYgYVVzZWRTcGFjZSk7
CiAgdmlydHVhbCBuc3Jlc3VsdCBUcmltVHJhaWxpbmdXaGl0ZVNwYWNlKG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJl
bmRlcmluZ0NvbnRleHQmIGFSQywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNjb29yZCYgYURlbHRhV2lkdGgpOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVQcmVz
cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
bnNHVUlFdmVudCAqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0
dXMqIGFFdmVudFN0YXR1cyk7CgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlTXVsdGlwbGVQcmVz
cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
bnNHVUlFdmVudCAqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0
dXMqIGFFdmVudFN0YXR1cyk7CgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRHJhZyhuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0dVSUV2ZW50
ICogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZlbnRT
dGF0dXMpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZVJlbGVhc2UobnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNHVUlFdmVudCAqIGFF
dmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3Rh
dHVzKTsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50QW5kT2Zmc2V0c0Zyb21Qb2ludChu
c0lQcmVzQ29udGV4dCogYUNYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNQb2ludCYgYVBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJQ29udGVudCAqKiBhTmV3Q29udGVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzImIGFDb250ZW50T2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYUNvbnRlbnRP
ZmZzZXRFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv
b2wmIGFCZWdpbkZyYW1lQ29udGVudCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBQZWVrQmFja3dhcmRB
bmRGb3J3YXJkKG5zU2VsZWN0aW9uQW1vdW50IGFBbW91bnRCYWNrLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc1NlbGVjdGlvbkFtb3VudCBhQW1vdW50Rm9yd2FyZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhU3RhcnRQb3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhSnVtcExpbmVz
KTsKCgoKCgoKCiAgdm9pZCBJbnZhbGlkYXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEYW1hZ2VSZWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFJbW1lZGlhdGUgPSAwKSBjb25zdDsKCgoKICBz
dGF0aWMgUFJJbnQzMiBDb250ZW50SW5kZXhJbkNvbnRhaW5lcihjb25zdCBuc0lGcmFtZSogYUZy
YW1lKTsKCgoKCgoKICBQUkJvb2wgSXNGcmFtZVRyZWVUb29EZWVwKGNvbnN0IG5zSFRNTFJlZmxv
d1N0YXRlJiBhUmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0hUTUxS
ZWZsb3dNZXRyaWNzJiBhTWV0cmljcyk7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xvc2VzdFZp
ZXdGb3JGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSAqYUZyYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3ICoqYVZpZXcpOwoKICBzdGF0aWMg
bnNyZXN1bHQgQ3JlYXRlQW5kUG9zdFJlZmxvd0NvbW1hbmQobnNJUHJlc1NoZWxsKiBhUHJlc1No
ZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFt
ZSogYVRhcmdldEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lSZWZsb3dDb21tYW5kOjpSZWZsb3dUeXBlIGFSZWZsb3dUeXBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUNoaWxkRnJhbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFB
dHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUF0b20qIGFMaXN0TmFtZSk7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhcHR1cmVNb3VzZShuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBQUkJvb2wgYUdyYWJNb3VzZUV2ZW50cyk7CiAgUFJC
b29sIElzTW91c2VDYXB0dXJlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRCaWRpUHJvcGVydHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHJvcGVydHlOYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiBhUHJvcGVydHlWYWx1ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFTaXplID0gc2l6ZW9mKHZvaWQqKSApIGNvbnN0
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVByb3BlcnR5
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhUHJvcGVydHlWYWx1ZSkg
Y29uc3QgOwojIDQzNCAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIgpwcm90ZWN0ZWQ6CgogIG5z
RnJhbWUoKTsKICB2aXJ0dWFsIH5uc0ZyYW1lKCk7CgogIFBSSW50MTYgRGlzcGxheVNlbGVjdGlv
bihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBQUkJvb2wgaXNPa1RvVHVybk9uID0gMCk7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lRnJvbURpcmVjdGlvbihuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LCBuc1BlZWtPZmZzZXRTdHJ1Y3QgKmFQb3MpOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBEaWRTZXRTdHlsZUNvbnRleHQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7
CgoKICBuc3Jlc3VsdCBHZXRTZWxlY3Rpb25Gb3JWaXNDaGVjayhuc0lQcmVzQ29udGV4dCAqIGFQ
cmVzQ29udGV4dCwgbnNJU2VsZWN0aW9uKiogYVNlbGVjdGlvbik7CgoKICBzdGF0aWMgUFJJbnQz
MiBHZXRMaW5lTnVtYmVyKG5zSUZyYW1lICphRnJhbWUpOwoKICBzdGF0aWMgdm9pZCBHZXRMYXN0
TGVhZihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqKmFGcmFtZSk7CiAg
c3RhdGljIHZvaWQgR2V0Rmlyc3RMZWFmKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5z
SUZyYW1lICoqYUZyYW1lKTsKIyA0NjQgIi4uLy4uL2Jhc2Uvc3JjL25zRnJhbWUuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldERhdGFGb3JUYWJsZVNlbGVjdGlvbihuc0lGcmFtZVNlbGVjdGlvbiAq
YUZyYW1lU2VsZWN0aW9uLCBuc01vdXNlRXZlbnQgKmFNb3VzZUV2ZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQgKiphUGFyZW50Q29udGVudCwgUFJJ
bnQzMiAqYUNvbnRlbnRPZmZzZXQsIFBSSW50MzIgKmFUYXJnZXQpOwoKICBzdGF0aWMgdm9pZCBY
TUxRdW90ZShuc1N0cmluZyYgYVN0cmluZyk7CgoKCiAgdm9pZCBTZXREZWZhdWx0QmFja2dyb3Vu
ZENvbG9yKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICB2aXJ0dWFsIFBSQm9vbCBQ
YXJlbnREaXNhYmxlc1NlbGVjdGlvbigpIGNvbnN0OwoKCgoKCiAgdm9pZCBTZXRPdmVyZmxvd0Ns
aXBSZWN0KG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0KTsKCiAgbnNSZWN0
IG1SZWN0OwogIG5zSUNvbnRlbnQqIG1Db250ZW50OwogIG5zSVN0eWxlQ29udGV4dCogbVN0eWxl
Q29udGV4dDsKICBuc0lGcmFtZSogbVBhcmVudDsKICBuc0lGcmFtZSogbU5leHRTaWJsaW5nOwog
IG5zRnJhbWVTdGF0ZSBtU3RhdGU7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBuc3JlZmNudCBBZGRS
ZWYodm9pZCk7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpOwp9OwojIDI2ICIuLi8u
Li9iYXNlL3NyYy9uc0xlYWZGcmFtZS5oIiAyCgoKCgoKCgpjbGFzcyBuc0xlYWZGcmFtZSA6IHB1
YmxpYyBuc0ZyYW1lIHsKcHVibGljOgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29u
dGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3Qm
IGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hM
YXllcik7CiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhRGVzaXJlZFNp
emUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dT
dGF0ZSwKICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1N0YXR1cyYgYVN0YXR1cyk7CiAgdmly
dHVhbCBuc3Jlc3VsdCBDb250ZW50Q2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFTdWJDb250ZW50KTsKCgoKCnByb3Rl
Y3RlZDoKICB2aXJ0dWFsIH5uc0xlYWZGcmFtZSgpOwoKCgoKCgoKICB2aXJ0dWFsIHZvaWQgR2V0
RGVzaXJlZFNpemUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYURlc2lyZWRT
aXplKSA9IDA7CgoKCgogIHZvaWQgQWRkQm9yZGVyc0FuZFBhZGRpbmcobnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJl
Zmxvd1N0YXRlJiBhUmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0hU
TUxSZWZsb3dNZXRyaWNzJiBhRGVzaXJlZFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc01hcmdpbiYgYUJvcmRlclBhZGRpbmcpOwp9OwojIDMxICJuc0Zvcm1Db250cm9sSGVscGVy
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMzIgIm5z
Rm9ybUNvbnRyb2xIZWxwZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT
dHlsZUNvbnRleHQuaCIgMQojIDMzICJuc0Zvcm1Db250cm9sSGVscGVyLmgiIDIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMQojIDM0ICJuc0Zvcm1Db250
cm9sSGVscGVyLmgiIDIKCmNsYXNzIG5zSVZpZXc7CgpjbGFzcyBuc1N0eWxlQ29vcmQ7CmNsYXNz
IG5zRm9ybUZyYW1lOwojIDU0ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiCmVudW0gbnNNb3VzZVN0
YXRlIHsKICBlTW91c2VOb25lLAogIGVNb3VzZUVudGVyLAogIGVNb3VzZUV4aXQsCiAgZU1vdXNl
RG93biwKICBlTW91c2VVcAp9OwoKc3RydWN0IG5zSW5wdXREaW1lbnNpb25TcGVjCnsKICBuc0lB
dG9tKiBtQ29sU2l6ZUF0dHI7CiAgUFJCb29sIG1Db2xTaXplQXR0ckluUGl4ZWxzOwogIG5zSUF0
b20qIG1Db2xWYWx1ZUF0dHI7CgogIG5zU3RyaW5nKiBtQ29sRGVmYXVsdFZhbHVlOwogIG5zY29v
cmQgbUNvbERlZmF1bHRTaXplOwogIFBSQm9vbCBtQ29sRGVmYXVsdFNpemVJblBpeGVsczsKICBu
c0lBdG9tKiBtUm93U2l6ZUF0dHI7CiAgbnNjb29yZCBtUm93RGVmYXVsdFNpemU7CgogIG5zSW5w
dXREaW1lbnNpb25TcGVjKG5zSUF0b20qIGFDb2xTaXplQXR0ciwgUFJCb29sIGFDb2xTaXplQXR0
ckluUGl4ZWxzLAogICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFDb2xWYWx1ZUF0dHIs
IG5zU3RyaW5nKiBhQ29sRGVmYXVsdFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgIG5zY29v
cmQgYUNvbERlZmF1bHRTaXplLCBQUkJvb2wgYUNvbERlZmF1bHRTaXplSW5QaXhlbHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVJvd1NpemVBdHRyLCBuc2Nvb3JkIGFSb3dEZWZh
dWx0U2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICA6IG1Db2xTaXplQXR0cihhQ29sU2l6ZUF0
dHIpLCBtQ29sU2l6ZUF0dHJJblBpeGVscyhhQ29sU2l6ZUF0dHJJblBpeGVscyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtQ29sVmFsdWVBdHRyKGFDb2xWYWx1ZUF0dHIpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgbUNvbERlZmF1bHRWYWx1ZShhQ29sRGVmYXVsdFZhbHVlKSwgbUNvbERl
ZmF1bHRTaXplKGFDb2xEZWZhdWx0U2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICBtQ29s
RGVmYXVsdFNpemVJblBpeGVscyhhQ29sRGVmYXVsdFNpemVJblBpeGVscyksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtUm93U2l6ZUF0dHIoYVJvd1NpemVBdHRyKSwgbVJvd0RlZmF1bHRTaXpl
KGFSb3dEZWZhdWx0U2l6ZSkKICB7CiAgfQoKfTsKIyA5NSAibnNGb3JtQ29udHJvbEhlbHBlci5o
IgpjbGFzcyBuc0Zvcm1Db250cm9sSGVscGVyCnsKCnB1YmxpYzoKCgogIHN0YXRpYyBuc2Nvb3Jk
IENhbGN1bGF0ZVNpemUgKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCogYVJlbmRDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZvcm1Db250cm9sRnJhbWUqIGFGcmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1NpemUmIGFDU1NTaXpl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSW5wdXREaW1lbnNpb25TcGVjJiBh
RGltZW5zaW9uU3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUmIGFE
ZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUmIGFNaW5T
aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCYgYVdpZHRoRXhwbGlj
aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhSGVpZ2h0RXhwbGlj
aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCYgYVJvd1NpemUpOwoK
ICBzdGF0aWMgbnNjb29yZCBHZXRUZXh0U2l6ZShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQsIG5z
SUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBuc1N0cmluZyYgYVN0cmluZywgbnNTaXplJiBhU2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0ICphUmVuZENvbnRleHQpOwoKICBzdGF0aWMg
bnNjb29yZCBHZXRUZXh0U2l6ZShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQsIG5zSUZvcm1Db250
cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFO
dW1DaGFycywgbnNTaXplJiBhU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lS
ZW5kZXJpbmdDb250ZXh0ICphUmVuZENvbnRleHQpOwoKICBzdGF0aWMgbnNyZXN1bHQgR2V0Rm9u
dChuc0lGb3JtQ29udHJvbEZyYW1lICogYUZvcm1GcmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN0eWxlQ29udGV4dCAqIGFTdHlsZUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNGb250KiYgYUZvbnQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEdldEZyYW1l
Rm9udEZNKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZvcm1Db250cm9sRnJhbWUgKiBhRnJhbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUZvbnRNZXRyaWNzKiogYUZvbnRNZXQpOwoKICBzdGF0aWMg
bnNjb29yZCBDYWxjTmF2UXVpcmtTaXppbmcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCog
YVJlbmRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGb250
TWV0cmljcyogYUZvbnRNZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJbnB1dERpbWVuc2lvblNwZWMmIGFTcGVjLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc1NpemUmIGFTaXplKTsKCiAgc3RhdGljIHZvaWQgRm9yY2VEcmF3RnJh
bWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUgKiBhRnJhbWUpOwoKCiAg
c3RhdGljIHZvaWQgUGxhdGZvcm1Ub0RPTUxpbmVCcmVha3MobnNTdHJpbmcgJmFTdHJpbmcpOwoK
ICBzdGF0aWMgbnNyZXN1bHQgR2V0VmFsdWUobnNJQ29udGVudCogYUNvbnRlbnQsIG5zU3RyaW5n
KiBhUmVzdWx0KTsKICBzdGF0aWMgbnNyZXN1bHQgR2V0TmFtZShuc0lDb250ZW50KiBhQ29udGVu
dCwgbnNTdHJpbmcqIGFSZXN1bHQpOwogIHN0YXRpYyBuc3Jlc3VsdCBHZXRJbnB1dEVsZW1lbnRW
YWx1ZShuc0lDb250ZW50KiBhQ29udGVudCwgbnNTdHJpbmcqIGFUZXh0LCBQUkJvb2wgYUluaXRp
YWxWYWx1ZSk7CgoKCgoKCgogIHN0YXRpYyBQUkJvb2wgR2V0Qm9vbChjb25zdCBuc0FSZWFkYWJs
ZVN0cmluZyYgYVZhbHVlKTsKIyAxNjIgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICBzdGF0aWMg
dm9pZCBHZXRCb29sU3RyaW5nKGNvbnN0IFBSQm9vbCBhVmFsdWUsIG5zQVdyaXRhYmxlU3RyaW5n
JiBhUmVzdWx0KTsKCiAgc3RhdGljIG5zQ29tcGF0aWJpbGl0eSBHZXRSZXBDaGFycyhuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LCBjaGFyJiBjaGFyMSwgY2hhciYgY2hhcjIpOwoKCiAgdHlw
ZWRlZiBlbnVtIHsKICAgIGVIVE1MVGV4dFdyYXBfT2ZmID0gMSwKICAgIGVIVE1MVGV4dFdyYXBf
SGFyZCA9IDIsCiAgICBlSFRNTFRleHRXcmFwX1NvZnQgPSAzCiAgfSBuc0hUTUxUZXh0V3JhcDsK
CgoKCiAgc3RhdGljIG5zcmVzdWx0IEdldFdyYXBQcm9wZXJ0eShuc0lDb250ZW50ICogYUNvbnRl
bnQsIG5zU3RyaW5nICZhT3V0VmFsdWUpOwoKICBzdGF0aWMgbnNyZXN1bHQgR2V0V3JhcFByb3Bl
cnR5RW51bShuc0lDb250ZW50ICogYUNvbnRlbnQsIG5zSFRNTFRleHRXcmFwJiBhV3JhcFByb3Ap
OwoKCiAgc3RhdGljIG5zcmVzdWx0IEdldExvY2FsaXplZFN0cmluZyhjb25zdCBjaGFyICogYVBy
b3BGaWxlTmFtZSwgY29uc3QgY2hhciogYUtleSwgbnNTdHJpbmcmIG9WYWwpOwogIHN0YXRpYyBj
b25zdCBjaGFyICogR2V0SFRNTFByb3BlcnRpZXNGaWxlTmFtZSgpIHsgcmV0dXJuICJjaHJvbWU6
Ly9jb21tdW5pY2F0b3IvbG9jYWxlL2xheW91dC9IdG1sRm9ybS5wcm9wZXJ0aWVzIjsgfQoKICBz
dGF0aWMgbnNyZXN1bHQgR2V0RGlzYWJsZWQobnNJQ29udGVudCogYUNvbnRlbnQsIFBSQm9vbCog
b0lzRGlzYWJsZWQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IERvTWFudWFsU3VibWl0T3JSZXNldChu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3JtRnJhbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZvcm1Db250cm9sRnJhbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYURvU3VibWl0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEb0RPTUV2ZW50
KTsKIyAyMTUgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICBuc3Jlc3VsdCBTZXRDdXJyZW50Q2hl
Y2tTdGF0ZShQUkJvb2wgYVN0YXRlKTsKIyAyMjQgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICBu
c3Jlc3VsdCBHZXREZWZhdWx0Q2hlY2tTdGF0ZShQUkJvb2wqIGFTdGF0ZSk7CiMgMjQwICJuc0Zv
cm1Db250cm9sSGVscGVyLmgiCiAgIGVudW0gbnNBcnJvd0RpcmVjdGlvbiB7CiAgICBlQXJyb3dE
aXJlY3Rpb25fTGVmdCwKICAgIGVBcnJvd0RpcmVjdGlvbl9SaWdodCwKICAgIGVBcnJvd0RpcmVj
dGlvbl9VcCwKICAgIGVBcnJvd0RpcmVjdGlvbl9Eb3duCiAgIH07CiMgMjU5ICJuc0Zvcm1Db250
cm9sSGVscGVyLmgiCiAgIHN0YXRpYyB2b2lkIFNldHVwUG9pbnRzKFBSVWludDMyIGFOdW1iZXJP
ZlBvaW50cywgbnNjb29yZCogYVBvaW50cywKICAgICBuc1BvaW50KiBhUG9seWdvbiwgbnNjb29y
ZCBhU2NhbGVGYWN0b3IsIG5zY29vcmQgYVgsIG5zY29vcmQgYVksCiAgICAgbnNjb29yZCBhQ2Vu
dGVyWCwgbnNjb29yZCBhQ2VudGVyWSk7CiMgMjc2ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiCiAg
c3RhdGljIHZvaWQgUGFpbnRMaW5lKG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250
ZXh0LAogICAgICAgICAgICAgICAgIG5zY29vcmQgYVNYLCBuc2Nvb3JkIGFTWSwgbnNjb29yZCBh
RVgsIG5zY29vcmQgYUVZLAogICAgICAgICAgICAgICAgIFBSQm9vbCBhSG9yeiwgbnNjb29yZCBh
V2lkdGgsIG5zY29vcmQgYU9uZVBpeGVsKTsKIyAyODcgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIK
ICBzdGF0aWMgdm9pZCBQYWludEZpeGVkU2l6ZUNoZWNrTWFyayhuc0lSZW5kZXJpbmdDb250ZXh0
JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGFQaXhlbHNUb1R3aXBzKTsKIyAyOTkgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICBz
dGF0aWMgdm9pZCBQYWludENoZWNrTWFyayhuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5n
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhUGl4ZWxzVG9Ud2lw
cywgY29uc3QgbnNSZWN0ICYgYVJlY3QpOwojIDMxMCAibnNGb3JtQ29udHJvbEhlbHBlci5oIgog
IHN0YXRpYyB2b2lkIFBhaW50Rml4ZWRTaXplQ2hlY2tNYXJrQm9yZGVyKG5zSVJlbmRlcmluZ0Nv
bnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
YVBpeGVsc1RvVHdpcHMsIGNvbnN0IG5zU3R5bGVDb2xvciYgYUJhY2tncm91bmRDb2xvcik7CiMg
MzI3ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiCiAgc3RhdGljIHZvaWQgUGFpbnRSZWN0YW5ndWxh
ckJ1dHRvbihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsIGNvbnN0IG5zUmVj
dCYgYVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVNoaWZ0LCBQUkJv
b2wgYVNob3dGb2N1cywgUFJCb29sIGFEaXNhYmxlZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRHJh
d091dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFPdXRsaW5lU3R5bGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFGb2N1c1N0eWxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhU3R5bGVDb250ZXh0LCBuc1N0cmluZyYgYUxh
YmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3JGcmFtZSk7Cgpw
cm90ZWN0ZWQ6CiAgbnNGb3JtQ29udHJvbEhlbHBlcigpOwogIHZpcnR1YWwgfm5zRm9ybUNvbnRy
b2xIZWxwZXIoKTsKCgp9OwojIDI0ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5oIiAxCiMgMjUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc2NvcmUuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUGFydHMu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVJlZmxvd0NvbW1hbmQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNIVE1MUGFydHMuaCIgMgpjbGFzcyBuc0lBcmVuYTsKY2xhc3MgbnNJQXRv
bTsKY2xhc3MgbnNJTm9kZUluZm87CmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSUNvbnRlbnRJ
dGVyYXRvcjsKY2xhc3MgbnNJRG9jdW1lbnQ7CmNsYXNzIG5zSUhUTUxDb250ZW50OwpjbGFzcyBu
c0lIVE1MQ29udGVudFNpbms7CmNsYXNzIG5zSUhUTUxGcmFnbWVudENvbnRlbnRTaW5rOwpjbGFz
cyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJVGV4dENvbnRlbnQ7CmNsYXNzIG5zSVVSSTsKY2xh
c3MgbnNTdHJpbmc7CmNsYXNzIG5zSVdlYlNoZWxsOwpjbGFzcyBuc0lQcmVzU2hlbGw7CmNsYXNz
IG5zSUNoYW5uZWw7CiMgNjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5o
IgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3R2VuZXJhdGVkQ29udGVudEl0ZXJhdG9yKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudEl0
ZXJhdG9yKiogYUl0ZXJhdG9yKTsKCgoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxBbmNob3JF
bGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7
CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEFwcGxldEVsZW1lbnQobnNJSFRNTENvbnRlbnQq
KiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19O
ZXdIVE1MQXJlYUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MQlJFbGVtZW50KG5zSUhUTUxD
b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3SFRNTEJhc2VFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9k
ZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEJhc2VGb250RWxl
bWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoK
ZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxCb2R5RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFS
ZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hU
TUxCdXR0b25FbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFO
b2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTERMaXN0RWxlbWVudChuc0lIVE1M
Q29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVz
dWx0Ck5TX05ld0hUTUxEZWxFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9k
ZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTERpcmVjdG9yeUVs
ZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsK
CmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MRGl2RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFS
ZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hU
TUxFbWJlZEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5v
ZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MRmllbGRTZXRFbGVtZW50KG5zSUhU
TUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNy
ZXN1bHQKTlNfTmV3SFRNTEZvbnRFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJ
Tm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEZvcm1FbGVt
ZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7Cgpl
eHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEZyYW1lRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFS
ZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hU
TUxGcmFtZVNldEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MSFJFbGVtZW50KG5zSUhUTUxD
b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3SFRNTEhlYWRFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9k
ZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEhlYWRpbmdFbGVt
ZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7Cgpl
eHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEh0bWxFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJl
c3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRN
TElGcmFtZUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5v
ZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MSW1hZ2VFbGVtZW50KG5zSUhUTUxD
b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3SFRNTElucHV0RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5v
ZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxJbnNFbGVtZW50
KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRl
cm4gbnNyZXN1bHQKTlNfTmV3SFRNTElzSW5kZXhFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJl
c3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRN
TExJRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUlu
Zm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxMYWJlbEVsZW1lbnQobnNJSFRNTENvbnRl
bnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApO
U19OZXdIVE1MTGVnZW5kRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJ
bmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxMaW5rRWxlbWVudChu
c0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJu
IG5zcmVzdWx0Ck5TX05ld0hUTUxNYXBFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwg
bnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTE1lbnVF
bGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7
CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTE1ldGFFbGVtZW50KG5zSUhUTUxDb250ZW50Kiog
YVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3
SFRNTE1vZEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5v
ZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MT0xpc3RFbGVtZW50KG5zSUhUTUxD
b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3SFRNTE9iamVjdEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lO
b2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MT3B0R3JvdXBF
bGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7
CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTE9wdGlvbkVsZW1lbnQobnNJSFRNTENvbnRlbnQq
KiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19O
ZXdIVE1MUGFyYWdyYXBoRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJ
bmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxQYXJhbUVsZW1lbnQo
bnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVy
biBuc3Jlc3VsdApOU19OZXdIVE1MUHJlRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQs
IG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxRdW90
ZUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZv
KTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MU2NyaXB0RWxlbWVudChuc0lIVE1MQ29udGVu
dCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5T
X05ld0hUTUxTZWxlY3RFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUlu
Zm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFNwYWNlckVsZW1lbnQo
bnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVy
biBuc3Jlc3VsdApOU19OZXdIVE1MU3BhbkVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0
LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MU3R5
bGVFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5m
byk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQobnNJSFRN
TENvbnRlbnQqKiBhUmVzdWx0LG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVz
dWx0Ck5TX05ld0hUTUxUYWJsZUNlbGxFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwg
bnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxl
Q29sRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUlu
Zm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxUYWJsZUNvbEdyb3VwRWxlbWVudChuc0lI
VE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5z
cmVzdWx0Ck5TX05ld0hUTUxUYWJsZUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBu
c0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVGFibGVS
b3dFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5m
byk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQobnNJSFRN
TENvbnRlbnQqKiBhUmVzdWx0LG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVz
dWx0Ck5TX05ld0hUTUxUYm9keUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lO
b2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVGV4dEFyZWFF
bGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7
CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRmb290RWxlbWVudChuc0lIVE1MQ29udGVudCoq
IGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05l
d0hUTUxUaGVhZEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVGl0bGVFbGVtZW50KG5zSUhU
TUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNy
ZXN1bHQKTlNfTmV3SFRNTFVMaXN0RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5z
SU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxXQlJFbGVt
ZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7Cgpl
eHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFVua25vd25FbGVtZW50KG5zSUhUTUxDb250ZW50Kiog
YVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgoKCgoKCgpleHRlcm4gbnNyZXN1bHQK
TlNfQ3JlYXRlSFRNTEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgYUNhc2VTZW5zaXRpdmUpOwoKCgoKCgoKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0Jsb2Nr
RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzID0gMCk7CgoKZXh0
ZXJuIG5zcmVzdWx0Ck5TX05ld0F0dHJpYnV0ZUNvbnRlbnQobnNJQ29udGVudCAqKiBhUmVzdWx0
KTsKCgoKCgpleHRlcm4gbnNyZXN1bHQgTlNfTmV3U2VsZWN0c0FyZWFGcmFtZShuc0lQcmVzU2hl
bGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MgPSAweDAxMDAwMDAwKTsKCgoKZXh0
ZXJuIG5zcmVzdWx0IE5TX05ld0FyZWFGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5z
SUZyYW1lKiogYU5ld0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWlu
dDMyIGFGbGFncyA9IDB4MDA4MDAwMDB8MHgwMTAwMDAwMCk7CgoKaW5saW5lIG5zcmVzdWx0IE5T
X05ld1RhYmxlQ2VsbElubmVyRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFt
ZSoqIGFOZXdGcmFtZSkgewogIHJldHVybiBOU19OZXdCbG9ja0ZyYW1lKGFQcmVzU2hlbGwsIGFO
ZXdGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwfDB4MDEwMDAwMDB8
MHgwMDQwMDAwMCk7Cn0KCgoKaW5saW5lIG5zcmVzdWx0IE5TX05ld0RvY3VtZW50RWxlbWVudEZy
YW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpIHsKICBy
ZXR1cm4gTlNfTmV3QXJlYUZyYW1lKGFQcmVzU2hlbGwsIGFOZXdGcmFtZSwgMHgwMDgwMDAwMHww
eDAwNDAwMDAwKTsKfQoKCmlubGluZSBuc3Jlc3VsdCBOU19OZXdBYnNvbHV0ZUl0ZW1XcmFwcGVy
RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSkgewog
IHJldHVybiBOU19OZXdBcmVhRnJhbWUoYVByZXNTaGVsbCwgYU5ld0ZyYW1lLCAweDAwODAwMDAw
fDB4MDA0MDAwMDApOwp9CgoKaW5saW5lIG5zcmVzdWx0IE5TX05ld0Zsb2F0aW5nSXRlbVdyYXBw
ZXJGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKSB7
CiAgcmV0dXJuIE5TX05ld0FyZWFGcmFtZShhUHJlc1NoZWxsLCBhTmV3RnJhbWUsIDB4MDA4MDAw
MDB8MHgwMDEwMDAwMCk7Cn0KCgoKaW5saW5lIG5zcmVzdWx0IE5TX05ld1JlbGF0aXZlSXRlbVdy
YXBwZXJGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1l
KSB7CiAgcmV0dXJuIE5TX05ld0FyZWFGcmFtZShhUHJlc1NoZWxsLCBhTmV3RnJhbWUpOwp9Cgpl
eHRlcm4gbnNyZXN1bHQgTlNfTmV3QlJGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5z
SUZyYW1lKiogYU5ld0ZyYW1lKTsKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdDb21tZW50RnJhbWUo
bnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFGcmFtZVJlc3VsdCk7CmV4dGVy
biBuc3Jlc3VsdCBOU19OZXdIUkZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJh
bWUqKiBhTmV3RnJhbWUpOwoKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdIVE1MRnJhbWVPdXRlckZy
YW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwoKZXh0
ZXJuIG5zcmVzdWx0IE5TX05ld0hUTUxGcmFtZXNldEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNT
aGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwoKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1ZpZXdw
b3J0RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSk7
CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdDYW52YXNGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hl
bGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0ltYWdlRnJh
bWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFGcmFtZVJlc3VsdCk7CmV4
dGVybiBuc3Jlc3VsdCBOU19OZXdJbmxpbmVGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGws
IG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1Bvc2l0aW9uZWRJ
bmxpbmVGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1l
KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld09iamVjdEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNT
aGVsbCwgbnNJRnJhbWUqKiBhRnJhbWVSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3U3Bh
Y2VyRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpl
eHRlcm4gbnNyZXN1bHQgTlNfTmV3VGV4dEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwg
bnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0NvbnRpbnVpbmdUZXh0
RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRl
cm4gbnNyZXN1bHQgTlNfTmV3RW1wdHlGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5z
SUZyYW1lKiogYVJlc3VsdCk7CmlubGluZSBuc3Jlc3VsdCBOU19OZXdXQlJGcmFtZShuc0lQcmVz
U2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCkgewogIHJldHVybiBOU19OZXdF
bXB0eUZyYW1lKGFQcmVzU2hlbGwsIGFSZXN1bHQpOwp9CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdT
Y3JvbGxGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7
CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdTaW1wbGVQYWdlU2VxdWVuY2VGcmFtZShuc0lQcmVzU2hl
bGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19O
ZXdQYWdlRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQp
OwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3Rmlyc3RMZXR0ZXJGcmFtZShuc0lQcmVzU2hlbGwqIGFQ
cmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0Zp
cnN0TGluZUZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJh
bWUpOwoKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdGb3JtRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJl
c1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQsIFBSVWludDMyIGFGbGFncyk7CmV4dGVybiBuc3Jl
c3VsdCBOU19OZXdHZnhCdXR0b25Db250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxs
LCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3TmF0aXZlQnV0dG9u
Q29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0
KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0ltYWdlQ29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCog
YVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0hU
TUxCdXR0b25Db250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoq
IGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3R2Z4Q2hlY2tib3hDb250cm9sRnJhbWUo
bnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNy
ZXN1bHQgTlNfTmV3TmF0aXZlQ2hlY2tib3hDb250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJl
c1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3RmllbGRT
ZXRGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCwgUFJV
aW50MzIgYUZsYWdzKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0ZpbGVDb250cm9sRnJhbWUobnNJ
UHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1
bHQgTlNfTmV3TGFiZWxGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiog
YVJlc3VsdCwgUFJVaW50MzIgYVN0YXRlRmxhZ3MpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3TGVn
ZW5kRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpl
eHRlcm4gbnNyZXN1bHQgTlNfTmV3TmF0aXZlVGV4dENvbnRyb2xGcmFtZShuc0lQcmVzU2hlbGwq
IGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05l
d0dmeFRleHRDb250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoq
IGFOZXdGcmFtZSk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdHZnhBdXRvVGV4dENvbnRyb2xGcmFt
ZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJu
IG5zcmVzdWx0IE5TX05ld0dmeFJhZGlvQ29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNT
aGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld05hdGl2ZVJh
ZGlvQ29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVz
dWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld05hdGl2ZVNlbGVjdENvbnRyb2xGcmFtZShuc0lQ
cmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3Vs
dCBOU19OZXdMaXN0Q29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJh
bWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0NvbWJvYm94Q29udHJvbEZyYW1l
KG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0LCBQUlVpbnQzMiBh
RmxhZ3MpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3SXNJbmRleEZyYW1lKG5zSVByZXNTaGVsbCog
YVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKCgpleHRlcm4gbnNyZXN1bHQgTlNfTmV3
VGFibGVPdXRlckZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVz
dWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1RhYmxlRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJl
c1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVD
YXB0aW9uRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFt
ZSk7CgpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVDb2xGcmFtZShuc0lQcmVzU2hlbGwqIGFQ
cmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdUYWJs
ZUNvbEdyb3VwRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1
bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVSb3dGcmFtZShuc0lQcmVzU2hlbGwqIGFQ
cmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdUYWJs
ZVJvd0dyb3VwRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1
bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVDZWxsRnJhbWUobnNJUHJlc1NoZWxsKiBh
UHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwoKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdI
VE1MQ29udGVudFNpbmsobnNJSFRNTENvbnRlbnRTaW5rKiogYUluc3RhbmNlUHRyUmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURvY3VtZW50KiBhRG9jLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYVVSTCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJTaGVsbCogYVdlYlNoZWxsLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVs
KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0hUTUxGcmFnbWVudENvbnRlbnRTaW5rKG5zSUhUTUxG
cmFnbWVudENvbnRlbnRTaW5rKiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3SFRNTFJlZmxvd0NvbW1hbmQobnNJUmVmbG93Q29tbWFuZCoqIGFJbnN0YW5jZVB0
clJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFUYXJnZXRGcmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVmbG93Q29tbWFuZDo6UmVmbG93VHlwZSBhUmVm
bG93VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDaGlsZEZyYW1lID0g
MCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSA9IDApOwojIDI1
ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lIVE1MQ29udGVudC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lI
VE1MQ29udGVudC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50
LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhNTENvbnRlbnQuaCIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJWE1MQ29udGVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVN0eWxlZENvbnRlbnQuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJU3R5bGVkQ29udGVudC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lDb250ZW50LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlZENv
bnRlbnQuaCIgMgoKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSVN0eWxlUnVsZTsKY2xhc3MgbnNJ
U3R5bGVDb250ZXh0OwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5OwpjbGFzcyBuc0lSdWxlV2Fsa2Vy
OwoKCgoKCgoKY2xhc3MgbnNJU3R5bGVkQ29udGVudCA6IHB1YmxpYyBuc0lDb250ZW50IHsKcHVi
bGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0g
eyAweGMxZTg0ZTAxLCAweGNkMTUsIDB4MTFkMiwgeyAweDk2LCAweGVkLCAweDAsIDB4MTAsIDB4
NGIsIDB4N2IsIDB4N2QsIDB4ZWIgfSB9OyByZXR1cm4gaWlkOyB9CgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0SUQobnNJQXRvbSomIGFSZXN1bHQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldENsYXNzZXMobnNWb2lkQXJyYXkmIGFBcnJheSkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgSGFzQ2xhc3MobnNJQXRvbSogYUNsYXNzKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNy
ZXN1bHQgV2Fsa0NvbnRlbnRTdHlsZVJ1bGVzKG5zSVJ1bGVXYWxrZXIqIGFSdWxlV2Fsa2VyKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBXYWxrSW5saW5lU3R5bGVSdWxlcyhuc0lSdWxlV2Fsa2Vy
KiBhUnVsZVdhbGtlcikgPSAwOwojIDU4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5
bGVkQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFwcGVkQXR0cmlidXRlSW1wYWN0
KGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJJbnQzMiYgYUhpbnQpIGNvbnN0ID0gMDsKCn07CiMgMjkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50LmgiIDIKCmNsYXNzIG5zSU5hbWVTcGFjZTsKY2xh
c3MgbnNJTm9kZUluZm87CmNsYXNzIG5zSVdlYlNoZWxsOwpjbGFzcyBuc0lVUkk7CiMgNDIgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50LmgiCmNsYXNzIG5zSVhNTENvbnRl
bnQgOiBwdWJsaWMgbnNJU3R5bGVkQ29udGVudCB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJ
SUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHhhNmNmOTBjYiwgMHgxNWIzLCAw
eDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9
IH07IHJldHVybiBpaWQ7IH0KCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb250YWluaW5nTmFtZVNw
YWNlKG5zSU5hbWVTcGFjZSogYU5hbWVTcGFjZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
Q29udGFpbmluZ05hbWVTcGFjZShuc0lOYW1lU3BhY2UqJiBhTmFtZVNwYWNlKSBjb25zdCA9IDA7
CiMgNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50LmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBNYXliZVRyaWdnZXJBdXRvTGluayhuc0lXZWJTaGVsbCAqYVNoZWxsKSA9IDA7
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0WE1MQmFzZVVSSShuc0lVUkkgKiphVVJJKSA9IDA7Cn07
CiMgNzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50LmgiCmV4dGVybiBu
c3Jlc3VsdApOU19OZXdYTUxFbGVtZW50KG5zSVhNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2Rl
SW5mbyogYU5vZGVJbmZvKTsKCgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3WE1MUHJvY2Vzc2luZ0lu
c3RydWN0aW9uKG5zSUNvbnRlbnQqKiBhSW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVRhcmdldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhRGF0YSk7
CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3WE1MRW50aXR5KG5zSUNvbnRlbnQqKiBhSW5zdGFuY2VQ
dHJSZXN1bHQsCiAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYU5hbWUs
CiAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVB1YmxpY0lkLAogICAg
ICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTeXN0ZW1JZCwKICAgICAgICAg
ICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhTm90YXRpb25OYW1lKTsKCmV4dGVybiBu
c3Jlc3VsdApOU19OZXdYTUxOb3RhdGlvbihuc0lDb250ZW50KiogYUluc3RhbmNlUHRyUmVzdWx0
LAogICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYU5hbWUsCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhUHVibGljSWQsCiAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3lzdGVtSWQpOwoKY2xhc3MgbnNJ
RE9NTmFtZWROb2RlTWFwOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld1hNTE5hbWVkTm9kZU1hcChu
c0lET01OYW1lZE5vZGVNYXAqKiBhSW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICBuc0lTdXBwb3J0c0FycmF5ICphQXJyYXkpOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld1hN
TENEQVRBU2VjdGlvbihuc0lDb250ZW50KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKIyAyNiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUhUTUxDb250ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNIVE1MVmFsdWUuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNIVE1MVmFsdWUuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3Jl
LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFZhbHVlLmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb2xvci5oIiAxCiMgMjcgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0hUTUxWYWx1ZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zU3RyaW5nLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFZh
bHVlLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQoj
IDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MVmFsdWUuaCIgMgoKZW51bSBuc0hU
TUxVbml0IHsKICBlSFRNTFVuaXRfTnVsbCA9IDAsCiAgZUhUTUxVbml0X0VtcHR5ID0gMSwKICBl
SFRNTFVuaXRfU3RyaW5nID0gMTAsCiAgZUhUTUxVbml0X0lTdXBwb3J0cyA9IDIwLAogIGVIVE1M
VW5pdF9JbnRlZ2VyID0gNTAsCiAgZUhUTUxVbml0X0VudW1lcmF0ZWQgPSA1MSwKICBlSFRNTFVu
aXRfUHJvcG9ydGlvbmFsID0gNTIsCiAgZUhUTUxVbml0X0NvbG9yID0gODAsCiAgZUhUTUxVbml0
X0NvbG9yTmFtZSA9IDgxLAogIGVIVE1MVW5pdF9QZXJjZW50ID0gOTAsCgoKICBlSFRNTFVuaXRf
UGl4ZWwgPSA2MDAKfTsKCmNsYXNzIG5zSFRNTFZhbHVlIHsKcHVibGljOgogIG5zSFRNTFZhbHVl
KG5zSFRNTFVuaXQgYVVuaXQgPSBlSFRNTFVuaXRfTnVsbCk7CiAgbnNIVE1MVmFsdWUoUFJJbnQz
MiBhVmFsdWUsIG5zSFRNTFVuaXQgYVVuaXQpOwogIG5zSFRNTFZhbHVlKGZsb2F0IGFWYWx1ZSk7
CiAgbnNIVE1MVmFsdWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFWYWx1ZSwgbnNIVE1MVW5p
dCBhVW5pdCA9IGVIVE1MVW5pdF9TdHJpbmcpOwogIG5zSFRNTFZhbHVlKG5zSVN1cHBvcnRzKiBh
VmFsdWUpOwogIG5zSFRNTFZhbHVlKG5zY29sb3IgYVZhbHVlKTsKICBuc0hUTUxWYWx1ZShjb25z
dCBuc0hUTUxWYWx1ZSYgYUNvcHkpOwogIH5uc0hUTUxWYWx1ZSh2b2lkKTsKCiAgbnNIVE1MVmFs
dWUmIG9wZXJhdG9yPShjb25zdCBuc0hUTUxWYWx1ZSYgYUNvcHkpOwogIFBSQm9vbCBvcGVyYXRv
cj09KGNvbnN0IG5zSFRNTFZhbHVlJiBhT3RoZXIpIGNvbnN0OwogIFBSQm9vbCBvcGVyYXRvciE9
KGNvbnN0IG5zSFRNTFZhbHVlJiBhT3RoZXIpIGNvbnN0OwogIFBSVWludDMyIEhhc2hWYWx1ZSh2
b2lkKSBjb25zdDsKCiAgbnNIVE1MVW5pdCBHZXRVbml0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1V
bml0OyB9CiAgUFJJbnQzMiBHZXRJbnRWYWx1ZSh2b2lkKSBjb25zdDsKICBQUkludDMyIEdldFBp
eGVsVmFsdWUodm9pZCkgY29uc3Q7CiAgZmxvYXQgR2V0UGVyY2VudFZhbHVlKHZvaWQpIGNvbnN0
OwogIG5zQVdyaXRhYmxlU3RyaW5nJiBHZXRTdHJpbmdWYWx1ZShuc0FXcml0YWJsZVN0cmluZyYg
YUJ1ZmZlcikgY29uc3Q7CiAgbnNJU3VwcG9ydHMqIEdldElTdXBwb3J0c1ZhbHVlKHZvaWQpIGNv
bnN0OwogIG5zY29sb3IgR2V0Q29sb3JWYWx1ZSh2b2lkKSBjb25zdDsKCiAgdm9pZCBSZXNldCh2
b2lkKTsKICB2b2lkIFNldEludFZhbHVlKFBSSW50MzIgYVZhbHVlLCBuc0hUTUxVbml0IGFVbml0
KTsKICB2b2lkIFNldFBpeGVsVmFsdWUoUFJJbnQzMiBhVmFsdWUpOwogIHZvaWQgU2V0UGVyY2Vu
dFZhbHVlKGZsb2F0IGFWYWx1ZSk7CiAgdm9pZCBTZXRTdHJpbmdWYWx1ZShjb25zdCBuc0FSZWFk
YWJsZVN0cmluZyYgYVZhbHVlLCBuc0hUTUxVbml0IGFVbml0ID0gZUhUTUxVbml0X1N0cmluZyk7
CiAgdm9pZCBTZXRJU3VwcG9ydHNWYWx1ZShuc0lTdXBwb3J0cyogYVZhbHVlKTsKICB2b2lkIFNl
dENvbG9yVmFsdWUobnNjb2xvciBhVmFsdWUpOwogIHZvaWQgU2V0RW1wdHlWYWx1ZSh2b2lkKTsK
CiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc0FXcml0YWJsZVN0cmluZyYgYUJ1ZmZlcikgY29uc3Q7
CiAgdm9pZCBUb1N0cmluZyhuc0FXcml0YWJsZVN0cmluZyYgYUJ1ZmZlcikgY29uc3Q7Cgpwcm90
ZWN0ZWQ6CiAgbnNIVE1MVW5pdCBtVW5pdDsKICB1bmlvbiB7CiAgICBQUkludDMyIG1JbnQ7CiAg
ICBmbG9hdCBtRmxvYXQ7CiAgICBQUlVuaWNoYXIqIG1TdHJpbmc7CiAgICBuc0lTdXBwb3J0cyog
bUlTdXBwb3J0czsKICAgIG5zY29sb3IgbUNvbG9yOwogIH0gbVZhbHVlOwp9OwoKaW5saW5lIFBS
SW50MzIgbnNIVE1MVmFsdWU6OkdldEludFZhbHVlKHZvaWQpIGNvbnN0CnsKICB7fTsKCgoKICBp
ZiAoKG1Vbml0ID09IGVIVE1MVW5pdF9JbnRlZ2VyKSB8fAogICAgICAobVVuaXQgPT0gZUhUTUxV
bml0X0VudW1lcmF0ZWQpIHx8CiAgICAgIChtVW5pdCA9PSBlSFRNTFVuaXRfUHJvcG9ydGlvbmFs
KSkgewogICAgcmV0dXJuIG1WYWx1ZS5tSW50OwogIH0KICBlbHNlIGlmIChtVW5pdCA9PSBlSFRN
TFVuaXRfU3RyaW5nKSB7CiAgICBpZiAobVZhbHVlLm1TdHJpbmcpIHsKICAgICAgUFJJbnQzMiBl
cnI9MDsKICAgICAgbnNBdXRvU3RyaW5nIHN0cihtVmFsdWUubVN0cmluZyk7CiAgICAgIHJldHVy
biBzdHIuVG9JbnRlZ2VyKCZlcnIpOwogICAgfQogIH0KICByZXR1cm4gMDsKfQoKaW5saW5lIFBS
SW50MzIgbnNIVE1MVmFsdWU6OkdldFBpeGVsVmFsdWUodm9pZCkgY29uc3QKewogIHt9OwogIGlm
IChtVW5pdCA9PSBlSFRNTFVuaXRfUGl4ZWwpIHsKICAgIHJldHVybiBtVmFsdWUubUludDsKICB9
CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBmbG9hdCBuc0hUTUxWYWx1ZTo6R2V0UGVyY2VudFZhbHVl
KHZvaWQpIGNvbnN0CnsKICB7fTsKICBpZiAobVVuaXQgPT0gZUhUTUxVbml0X1BlcmNlbnQpIHsK
ICAgIHJldHVybiBtVmFsdWUubUZsb2F0OwogIH0KICByZXR1cm4gMC4wZjsKfQoKaW5saW5lIG5z
QVdyaXRhYmxlU3RyaW5nJiBuc0hUTUxWYWx1ZTo6R2V0U3RyaW5nVmFsdWUobnNBV3JpdGFibGVT
dHJpbmcmIGFCdWZmZXIpIGNvbnN0CnsKICB7fTsKCiAgYUJ1ZmZlci5TZXRMZW5ndGgoMCk7CiAg
aWYgKCgobVVuaXQgPT0gZUhUTUxVbml0X1N0cmluZykgfHwgKG1Vbml0ID09IGVIVE1MVW5pdF9D
b2xvck5hbWUpKSAmJgogICAgICAoMCAhPSBtVmFsdWUubVN0cmluZykpIHsKICAgIGFCdWZmZXIu
QXBwZW5kKG1WYWx1ZS5tU3RyaW5nKTsKICB9CiAgcmV0dXJuIGFCdWZmZXI7Cn0KCmlubGluZSBu
c0lTdXBwb3J0cyogbnNIVE1MVmFsdWU6OkdldElTdXBwb3J0c1ZhbHVlKHZvaWQpIGNvbnN0CnsK
ICB7fTsKICBpZiAobVVuaXQgPT0gZUhUTUxVbml0X0lTdXBwb3J0cykgewogICAgbnNJU3VwcG9y
dHMgKnJlc3VsdCA9IG1WYWx1ZS5tSVN1cHBvcnRzOwogICAgbnNfaWZfYWRkcmVmKHJlc3VsdCk7
CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICByZXR1cm4gMDsKfQoKaW5saW5lIG5zY29sb3IgbnNI
VE1MVmFsdWU6OkdldENvbG9yVmFsdWUodm9pZCkgY29uc3QKewogIHt9OwoKICBpZiAobVVuaXQg
PT0gZUhUTUxVbml0X0NvbG9yKSB7CiAgICByZXR1cm4gbVZhbHVlLm1Db2xvcjsKICB9CiAgaWYg
KChtVW5pdCA9PSBlSFRNTFVuaXRfQ29sb3JOYW1lKSAmJiAobVZhbHVlLm1TdHJpbmcpKSB7CiAg
ICBuc2NvbG9yIGNvbG9yOwogICAgaWYgKE5TX0NvbG9yTmFtZVRvUkdCKG5zQXV0b1N0cmluZyht
VmFsdWUubVN0cmluZyksICZjb2xvcikpIHsKICAgICAgcmV0dXJuIGNvbG9yOwogICAgfQogIH0K
ICByZXR1cm4gKChuc2NvbG9yKSAoKDI1NSA8PCAyNCkgfCAoKDApPDwxNikgfCAoKDApPDw4KSB8
ICgwKSkpOwp9CgppbmxpbmUgUFJCb29sIG5zSFRNTFZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IG5z
SFRNTFZhbHVlJiBhT3RoZXIpIGNvbnN0CnsKICByZXR1cm4gUFJCb29sKCEgKCgqdGhpcykgPT0g
YU90aGVyKSk7Cn0KIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUhUTUxDb250ZW50
LmgiIDIKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lTdHlsZVJ1bGU7
CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lIVE1MTWFwcGVkQXR0cmlidXRlczsKY2xh
c3MgbnNJVVJJOwpzdHJ1Y3QgbnNSdWxlRGF0YTsKCgoKCgoKdHlwZWRlZiB2b2lkICgqbnNNYXBS
dWxlVG9BdHRyaWJ1dGVzRnVuYykoY29uc3QgbnNJSFRNTE1hcHBlZEF0dHJpYnV0ZXMqIGFBdHRy
aWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1J1bGVE
YXRhKiBhRGF0YSk7CgoKY2xhc3MgbnNJSFRNTENvbnRlbnQgOiBwdWJsaWMgbnNJWE1MQ29udGVu
dAp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg
bnNJSUQgaWlkID0geyAweGI5ZTExMGIwLCAweDk0ZDYsIDB4MTFkMSwgezB4ODksIDB4NWMsIDB4
MDAsIDB4NjAsIDB4MDgsIDB4OTEsIDB4MWIsIDB4ODF9IH07IHJldHVybiBpaWQ7fQoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBDb21wYWN0KCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhU
TUxBdHRyaWJ1dGUobnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNIVE1MVmFsdWUmIGFWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJCb29sIGFOb3RpZnkpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIVE1MQXR0
cmlidXRlKG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSFRNTFZhbHVlJiBhVmFsdWUpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0
dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbihuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jJiBhTWFwUnVs
ZUZ1bmMpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVUb1N0cmluZyhu
c0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNIVE1MVmFsdWUmIGFWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVdy
aXRhYmxlU3RyaW5nJiBhUmVzdWx0KSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU3Ry
aW5nVG9BdHRyaWJ1dGUobnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0hUTUxWYWx1ZSYgYVJlc3VsdCkgPSAwOwoKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEJhc2VVUkwobnNJVVJJKiYgYUJhc2VVUkwpIGNvbnN0ID0gMDsKCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCYXNlVGFyZ2V0KG5zQVdyaXRhYmxlU3RyaW5nJiBh
QmFzZVRhcmdldCkgY29uc3QgPSAwOwp9OwojIDI2ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiIDEK
IyAyNyAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJUHJlc1NoZWxsLmgiIDEKIyAyOCAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMQojIDI5ICJu
c0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTdHlsZUNvbnRleHQuaCIgMQojIDMwICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEg
Ii4uLy4uL2Jhc2Uvc3JjL25zTGVhZkZyYW1lLmgiIDEKIyAzMSAibnNGb3JtQ29udHJvbEhlbHBl
ci5jcHAiIDIKIyAxICIuLi8uLi9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIgMQojIDI1ICIu
Li8uLi9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIiAxCiMgMjYgIi4uLy4uL3N0eWxlL3NyYy9uc0NT
U1JlbmRlcmluZy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29u
dGV4dC5oIiAxCiMgMjcgIi4uLy4uL3N0eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIiAyCnN0cnVj
dCBuc1BvaW50OwoKY2xhc3MgbnNDU1NSZW5kZXJpbmcgewpwdWJsaWM6CiMgMzkgIi4uLy4uL3N0
eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIgogIHN0YXRpYyB2b2lkIFBhaW50Qm9yZGVyKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVu
ZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUqIGFGb3JGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0
JiBhQm9yZGVyQXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxlQm9y
ZGVyJiBhQm9yZGVyU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250
ZXh0KiBhU3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBhU2tp
cFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVjdCogYUdhcCA9IDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhSGFyZEJvcmRlclNpemUgPSAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU2hvdWxkSWdub3JlUm91bmRlZCA9IDApOwojIDU5
ICIuLi8uLi9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIKICBzdGF0aWMgdm9pZCBQYWludE91
dGxpbmUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYUZvckZyYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBuc1JlY3QmIGFCb3JkZXJBcmVhLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zU3R5bGVCb3JkZXImIGFCb3JkZXJTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBuc1N0eWxlT3V0bGluZSYgYU91dGxpbmVTdHlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJJbnRuIGFTa2lwU2lkZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNSZWN0
KiBhR2FwID0gMCk7CiMgODEgIi4uLy4uL3N0eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIgogIHN0
YXRpYyB2b2lkIFBhaW50Qm9yZGVyRWRnZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5k
ZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFG
b3JGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURp
cnR5UmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYUJv
cmRlckFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0JvcmRlckVkZ2VzICog
YUJvcmRlckVkZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250
ZXh0KiBhU3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRu
IGFTa2lwU2lkZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JlY3QqIGFHYXAg
PSAwKTsKIyA5OSAiLi4vLi4vc3R5bGUvc3JjL25zQ1NTUmVuZGVyaW5nLmgiCiAgc3RhdGljIHZv
aWQgUGFpbnRCYWNrZ3JvdW5kKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZvckZyYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYUJvcmRlckFyZWEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVCYWNrZ3JvdW5kJiBhQ29s
b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVCb3JkZXImIGFC
b3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYURYLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFEWSk7CgogIHN0YXRpYyB2b2lkIERyYXdE
YXNoZWRTaWRlcyhQUkludG4gc3RhcnRTaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBQUlVpbnQ4IGJvcmRlclN0eWxlc1tdLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc2NvbG9yIGJvcmRlckNvbG9yc1tdLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc1JlY3QmIGJvcmRlck91dHNpZGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYm9yZGVySW5zaWRlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkludG4gYVNraXBTaWRlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNSZWN0KiBhR2FwKTsKCiAgc3RhdGljIHZvaWQgRHJhd0Rhc2hlZFNpZGVzKFBSSW50
biBzdGFydFNpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0Nv
bnRleHQmIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1Jl
Y3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5
bGVDb2xvciogYUNvbG9yU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zU3R5bGVCb3JkZXIqIGFCb3JkZXJTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNTdHlsZU91dGxpbmUqIGFPdXRsaW5lU3R5bGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCBhRG9PdXRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc1JlY3QmIGJvcmRlck91dHNpZGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zUmVjdCYgYm9yZGVySW5zaWRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkludG4gYVNraXBTaWRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNSZWN0KiBhR2FwKTsKCgoKCiAgc3RhdGljIHZvaWQgRHJhd0Rhc2hlZFNlZ21lbnRzKG5zSVJl
bmRlcmluZ0NvbnRleHQmIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc1JlY3QmIGFCb3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zQm9yZGVyRWRnZXMgKiBhQm9yZGVyRWRnZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1JlY3QqIGFHYXApOwoKCgoKCgoKICBzdGF0aWMgbnNjb2xvciBUcmFuc2Zvcm1Db2xvcihu
c2NvbG9yIGFNYXBDb2xvcixQUkJvb2wgYU5vQmFja0dyb3VuZCk7Cgpwcm90ZWN0ZWQ6CgoKCgoK
CgogIHN0YXRpYyB2b2lkIFBhaW50Um91bmRlZEJvcmRlcihuc0lQcmVzQ29udGV4dCogYVByZXND
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFS
ZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRm9y
RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYUJvcmRlckFyZWEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHlsZUJvcmRlciogYUJvcmRlclN0eWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVPdXRsaW5lKiBhT3V0bGlu
ZVN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVN0eWxl
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYVNraXBTaWRlcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDE2IGFCb3JkZXJSYWRpdXNbNF0sbnNSZWN0KiBh
R2FwID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUlzT3V0bGluZT0wKTsK
CgogIHN0YXRpYyB2b2lkIFJlbmRlclNpZGUobnNGbG9hdFBvaW50IGFQb2ludHNbXSxuc0lSZW5k
ZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNTdHlsZUJvcmRlciogYUJvcmRlclN0eWxlLGNvbnN0IG5zU3R5bGVPdXRsaW5lKiBh
T3V0bGluZVN0eWxlLG5zSVN0eWxlQ29udGV4dCogYVN0eWxlQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgUFJVaW50OCBhU2lkZSxuc01hcmdpbiAmYUJvclRoaWNrLG5zY29vcmQgYVR3
aXBzUGVyUGl4ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhSXNPdXRsaW5lPTAp
OwoKICBzdGF0aWMgdm9pZCBQYWludFJvdW5kZWRCYWNrZ3JvdW5kKG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0Nv
bnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lGcmFtZSogYUZvckZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
UmVjdCYgYUJvcmRlckFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
U3R5bGVCYWNrZ3JvdW5kJiBhQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
Y29vcmQgYURYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFEWSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQxNiBhVGhlUmFkaXVzWzRdKTsKCgogIHN0
YXRpYyBuc2NvbG9yIE1ha2VCZXZlbENvbG9yKFBSSW50biB3aGljaFNpZGUsIFBSVWludDggc3R5
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb2xvciBhQmFja2dyb3VuZENv
bG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29sb3IgYUJvcmRlckNvbG9y
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU3BlY2lhbENhc2UpOwoK
ICBzdGF0aWMgUFJJbnRuIE1ha2VTaWRlKG5zUG9pbnQgYVBvaW50c1tdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYUNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkludG4gd2hpY2hTaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNSZWN0JiBvdXRzaWRlLCBjb25zdCBuc1JlY3QmIGluc2lkZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJJ
bnRuIGJvcmRlclBhcnQsIGZsb2F0IGJvcmRlckZyYWMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBuc2Nvb3JkIHR3aXBzUGVyUGl4ZWwpOwoKICBzdGF0aWMgdm9pZCBEcmF3U2lkZShuc0lSZW5k
ZXJpbmdDb250ZXh0JiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gd2hp
Y2hTaWRlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVWludDggYm9yZGVyU3R5bGUs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb2xvciBib3JkZXJDb2xvciwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc2NvbG9yIGFCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBib3JkZXJPdXRzaWRlLAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYm9yZGVySW5zaWRlLAogICAgICAgICAgICAgICAgICAg
ICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgdHdp
cHNQZXJQaXhlbCwKICAgICAgICAgICAgICAgICAgICAgICBuc1JlY3QqIGFHYXAgPSAwKTsKCgog
IHN0YXRpYyB2b2lkIERyYXdMaW5lIChuc0lSZW5kZXJpbmdDb250ZXh0JiBhQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhWDEsIG5zY29vcmQgYVkxLCBuc2Nvb3JkIGFY
MiwgbnNjb29yZCBhWTIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVjdCogYUdhcCk7Cgog
IHN0YXRpYyB2b2lkIEZpbGxQb2x5Z29uIChuc0lSZW5kZXJpbmdDb250ZXh0JiBhQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCBhUG9pbnRzW10sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU51bVBvaW50cywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNSZWN0KiBhR2FwKTsKCn07CgoKCgoKCgpjbGFzcyBRQkN1cnZlCnsKCnB1
YmxpYzoKICAgICAgICBuc0Zsb2F0UG9pbnQgbUFuYzE7CiAgICAgICAgbnNGbG9hdFBvaW50IG1D
b247CiAgICAgICAgbnNGbG9hdFBvaW50IG1BbmMyOwoKICBRQkN1cnZlKCkge21BbmMxLng9MDtt
QW5jMS55PTA7bUNvbj1tQW5jMj1tQW5jMTt9CiAgdm9pZCBTZXRDb250cm9scyhuc0Zsb2F0UG9p
bnQgJmFBbmMxLG5zRmxvYXRQb2ludCAmYUNvbixuc0Zsb2F0UG9pbnQgJmFBbmMyKSB7IG1BbmMx
ID0gYUFuYzE7IG1Db24gPSBhQ29uOyBtQW5jMiA9IGFBbmMyO30KICB2b2lkIFNldFBvaW50cyhm
bG9hdCBhMXgsZmxvYXQgYTF5LGZsb2F0IGFjeCxmbG9hdCBhY3ksZmxvYXQgYTJ4LGZsb2F0IGEy
eSkge21BbmMxLk1vdmVUbyhhMXgsYTF5KSxtQ29uLk1vdmVUbyhhY3gsYWN5KSxtQW5jMi5Nb3Zl
VG8oYTJ4LGEyeSk7fQojIDI0NyAiLi4vLi4vc3R5bGUvc3JjL25zQ1NTUmVuZGVyaW5nLmgiCiAg
dm9pZCBTdWJEaXZpZGUobnNJUmVuZGVyaW5nQ29udGV4dCAqYVJlbmRlcmluZ0NvbnRleHQsbnNQ
b2ludCBhUG9pbnRBcnJheVtdLFBSSW50MzIgKmFDdXJJbmRleCk7CgoKCgoKCgogIHZvaWQgTWlk
UG9pbnREaXZpZGUoUUJDdXJ2ZSAqQSxRQkN1cnZlICpCKTsKfTsKCgoKCgoKCmNsYXNzIFJvdW5k
ZWRSZWN0CnsKCnB1YmxpYzoKICBQUkludDMyIG1Sb3VuZG5lc3NbNF07CgogIFBSQm9vbCBtRG9S
b3VuZDsKCiAgUFJJbnQxNiBtTGVmdDsKICBQUkludDE2IG1SaWdodDsKICBQUkludDE2IG1Ub3A7
CiAgUFJJbnQxNiBtQm90dG9tOwoKCgoKCiAgdm9pZCBSb3VuZFJlY3QoKSB7bVJvdW5kbmVzc1sw
XT0wO30KIyAyOTIgIi4uLy4uL3N0eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIgogIHZvaWQgU2V0
KG5zY29vcmQgYUxlZnQsbnNjb29yZCBhVG9wLFBSSW50MzIgYVdpZHRoLFBSSW50MzIgYUhlaWdo
dCxQUkludDE2IGFSYWRpdXNbNF0sUFJJbnQxNiBhTnVtVHdpcFBlclBpeCk7CiMgMzAxICIuLi8u
Li9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIKICB2b2lkIENhbGNJbnNldEN1cnZlcyhRQkN1
cnZlICZhVUxDdXJ2ZSxRQkN1cnZlICZhVVJDdXJ2ZSxRQkN1cnZlICZhTExDdXJ2ZSxRQkN1cnZl
ICZhTFJDdXJ2ZSxuc01hcmdpbiAmYUJvcmRlcik7CiMgMzExICIuLi8uLi9zdHlsZS9zcmMvbnND
U1NSZW5kZXJpbmcuaCIKICB2b2lkIEdldFJvdW5kZWRCb3JkZXJzKFFCQ3VydmUgJmFVTEN1cnZl
LFFCQ3VydmUgJmFVUkN1cnZlLFFCQ3VydmUgJmFMTEN1cnZlLFFCQ3VydmUgJmFMUkN1cnZlKTsK
Cn07CiMgMzIgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vYmFzZS9zcmMv
bnNIVE1MSUlEcy5oIiAxCiMgMjUgIi4uLy4uL2Jhc2Uvc3JjL25zSFRNTElJRHMuaCIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI2ICIuLi8uLi9iYXNl
L3NyYy9uc0hUTUxJSURzLmgiIDIKCgpleHRlcm4gY29uc3QgbnNJSUQga0lBcmVhRnJhbWVJSUQ7
CmV4dGVybiBjb25zdCBuc0lJRCBrSUhUTUxDb250ZW50SUlEOwpleHRlcm4gY29uc3QgbnNJSUQg
a0lIVE1MUmVmbG93SUlEOwpleHRlcm4gY29uc3QgbnNJSUQga0lQYWdlU2VxdWVuY2VGcmFtZUlJ
RDsKZXh0ZXJuIGNvbnN0IG5zSUlEIGtJU3R5bGVkQ29udGVudElJRDsKZXh0ZXJuIGNvbnN0IG5z
SUlEIGtJVGV4dENvbnRlbnRJSUQ7CiMgMzMgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIgMQojIDI2ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjcgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJU3VwcG9ydHMuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5o
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI5ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVdpZGdldC5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lW
aWV3LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAxCiMg
MzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiIDIKCmNsYXNzIG5zSVZpZXdN
YW5hZ2VyOwpjbGFzcyBuc0lSZWdpb247CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNz
IG5zVHJhbnNmb3JtMkQ7CmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lWaWV3T2JzZXJ2ZXI7CmNs
YXNzIG5zVm9pZEFycmF5OwpzdHJ1Y3QgbnNSZWN0OwoKCgoKc3RydWN0IG5zVmlld0NsaXAgewog
IG5zY29vcmQgbUxlZnQ7CiAgbnNjb29yZCBtUmlnaHQ7CiAgbnNjb29yZCBtVG9wOwogIG5zY29v
cmQgbUJvdHRvbTsKfTsKCgoKCgoKZW51bSBuc1ZpZXdWaXNpYmlsaXR5IHsKICBuc1ZpZXdWaXNp
YmlsaXR5X2tIaWRlID0gMCwKICBuc1ZpZXdWaXNpYmlsaXR5X2tTaG93ID0gMSwKICBuc1ZpZXdW
aXNpYmlsaXR5X2tJbmhlcml0ID0gMgp9OwojIDc4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJVmlldy5oIgpjbGFzcyBuc0lWaWV3IDogcHVibGljIG5zSVN1cHBvcnRzCnsKcHVibGljOgog
IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7
IDB4ZjBhMjFjNDAsIDB4YTdlMSwgMHgxMWQxLCB7IDB4YTgsIDB4MjQsIDB4MDAsIDB4NDAsIDB4
OTUsIDB4OWEsIDB4MjgsIDB4YzkgfSB9OyByZXR1cm4gaWlkO30KIyA5NCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJVmlld01h
bmFnZXIqIGFNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0ICZhQm91bmRzLAogICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNJVmlldyAqYVBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zVmlld1Zpc2liaWxpdHkgYVZpc2liaWxpdHlGbGFnID0gbnNWaWV3
VmlzaWJpbGl0eV9rU2hvdykgPSAwOwojIDEwOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3koKSA9IDA7CgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFZpZXdNYW5hZ2VyKG5zSVZpZXdNYW5hZ2VyIComYVZpZXdNZ3IpIGNvbnN0
ID0gMDsKIyAxMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBQYWludChuc0lSZW5kZXJpbmdDb250ZXh0JiByYywgY29uc3QgbnNSZWN0JiBy
ZWN0LAogICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFQYWludEZsYWdzLCBQUkJvb2wgJmFS
ZXN1bHQpID0gMDsKIyAxMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lSZW5kZXJpbmdDb250ZXh0JiByYywgY29uc3QgbnNJ
UmVnaW9uJiByZWdpb24sCiAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVBhaW50RmxhZ3Ms
IFBSQm9vbCAmYVJlc3VsdCkgPSAwOwojIDE0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZUV2ZW50KG5zR1VJRXZlbnQgKmV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFFdmVudEZsYWdzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFTdGF0dXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJCb29sIGFGb3JjZUhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUkJvb2wmIGFIYW5kbGVkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UG9z
aXRpb24obnNjb29yZCB4LCBuc2Nvb3JkIHkpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRQb3NpdGlvbihuc2Nvb3JkICp4LCBuc2Nvb3JkICp5KSBjb25zdCA9IDA7CgoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0RGltZW5zaW9ucyhuc2Nvb3JkIHdpZHRoLCBuc2Nvb3JkIGhl
aWdodCwgUFJCb29sIGFQYWludCA9IDEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpbWVu
c2lvbnMobnNjb29yZCAqd2lkdGgsIG5zY29vcmQgKmhlaWdodCkgY29uc3QgPSAwOwoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm91bmRzKGNvbnN0IG5zUmVjdCAmYUJvdW5kcywgUFJCb29s
IGFQYWludCA9IDEpID0gMDsKIyAxOTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3VuZHMobnNjb29yZCBhWCwgbnNjb29yZCBhWSwK
ICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQYWludCA9IDEpID0gMDsKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0Qm91bmRzKG5zUmVjdCAmYUJvdW5kcykgY29uc3QgPSAwOwojIDIx
NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldENoaWxkQ2xpcChuc2Nvb3JkIGFMZWZ0LCBuc2Nvb3JkIGFUb3AsIG5zY29vcmQgYVJpZ2h0
LCBuc2Nvb3JkIGFCb3R0b20pID0gMDsKIyAyMjQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGlsZENsaXAobnNjb29yZCAqYUxlZnQs
IG5zY29vcmQgKmFUb3AsIG5zY29vcmQgKmFSaWdodCwgbnNjb29yZCAqYUJvdHRvbSkgY29uc3Qg
PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmlzaWJpbGl0eShuc1ZpZXdWaXNpYmls
aXR5IGFWaXNpYmlsaXR5KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZpc2liaWxp
dHkobnNWaWV3VmlzaWJpbGl0eSAmYVZpc2liaWxpdHkpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXRaUGFyZW50KG5zSVZpZXcgKmFaUGFyZW50KSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRaUGFyZW50KG5zSVZpZXcgKiZhWlBhcmVudCkgY29uc3QgPSAwOwoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0WkluZGV4KFBSSW50MzIgYVpJbmRleCkgPSAwOwoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0WkluZGV4KFBSSW50MzIgJmFaSW5kZXgpIGNvbnN0ID0g
MDsKIyAyNjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRBdXRvWkluZGV4KFBSQm9vbCBhQXV0b1pJbmRleCkgPSAwOwoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRBdXRvWkluZGV4KFBSQm9vbCAmYUF1dG9aSW5kZXgpIGNvbnN0ID0g
MDsKIyAyODUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRGbG9hdGluZyhQUkJvb2wgYUZsb2F0aW5nVmlldykgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0RmxvYXRpbmcoUFJCb29sICZhRmxvYXRpbmdWaWV3KSBjb25zdCA9IDA7CgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJlbnQobnNJVmlldyAqYVBhcmVudCkgPSAwOwoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJVmlldyAqJmFQYXJlbnQpIGNvbnN0
ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dFNpYmxpbmcobnNJVmlldyAqJmFO
ZXh0U2libGluZykgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROZXh0U2li
bGluZyhuc0lWaWV3KiBhTmV4dFNpYmxpbmcpID0gMDsKIyAzMjEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNlcnRDaGlsZChuc0lWaWV3
ICphQ2hpbGQsIG5zSVZpZXcgKmFTaWJsaW5nKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBSZW1vdmVDaGlsZChuc0lWaWV3ICphQ2hpbGQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0Q2hpbGRDb3VudChQUkludDMyICZhQ291bnQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRDaGlsZChQUkludDMyIGluZGV4LCBuc0lWaWV3KiYgYUNoaWxkKSBj
b25zdCA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3BhY2l0eShmbG9hdCBhT3Bh
Y2l0eSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9wYWNpdHkoZmxvYXQgJmFP
cGFjaXR5KSBjb25zdCA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzVHJhbnNwYXJl
bmN5KFBSQm9vbCAmYVRyYW5zcGFyZW50KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRDb250ZW50VHJhbnNwYXJlbmN5KFBSQm9vbCBhVHJhbnNwYXJlbnQpID0gMDsKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2xpZW50RGF0YSh2b2lkICphRGF0YSkgPSAwOwoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGllbnREYXRhKHZvaWQgKiZhRGF0YSkgY29uc3QgPSAw
OwojIDM5NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldE9mZnNldEZyb21XaWRnZXQobnNjb29yZCAqYUR4LCBuc2Nvb3JkICphRHksIG5z
SVdpZGdldCAqJmFXaWRnZXQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlydHlS
ZWdpb24obnNJUmVnaW9uIComYVJlZ2lvbikgY29uc3QgPSAwOwojIDQxNSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVdpZGdldChj
b25zdCBuc0lJRCAmYVdpbmRvd0lJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc1dpZGdl
dEluaXREYXRhICphV2lkZ2V0SW5pdERhdGEgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTmF0aXZlV2lkZ2V0IGFOYXRpdmUgPSAw
LAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRW5hYmxlRHJhZ0Ryb3AgPSAxKSA9
IDA7CiMgNDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0V2lkZ2V0KG5zSVdpZGdldCAqYVdpZGdldCkgPSAwOwojIDQzOCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZGdl
dChuc0lXaWRnZXQgKiZhV2lkZ2V0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBIYXNXaWRnZXQoUFJCb29sICphSGFzV2lkZ2V0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBMaXN0KEZJTEUqIG91dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50ID0gMCkg
Y29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmlld0ZsYWdzKFBSVWludDMy
IGFGbGFncykgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJWaWV3RmxhZ3MoUFJV
aW50MzIgYUZsYWdzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3RmxhZ3Mo
UFJVaW50MzIgKmFGbGFncykgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
Q29tcG9zaXRvckZsYWdzKFBSVWludDMyIGFGbGFncykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q29tcG9zaXRvckZsYWdzKFBSVWludDMyICphRmxhZ3MpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRFeHRlbnRzKG5zUmVjdCAqYUV4dGVudHMpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgSWdub3JlU2V0UG9zaXRpb24oUFJCb29sIGFTaG91bGRJZ25vcmUpID0gMDsKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBTeW5jaFdpZGdldFNpemVQb3NpdGlvbigpID0gMDsKIyA1MDYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRDbGlwcGVkUmVjdChuc1JlY3QmIGFDbGlwcGVkUmVjdCwgUFJCb29sJiBhSXNDbGlwcGVkLCBQ
UkJvb2wmIGFFbXB0eSkgY29uc3QgPSAwOwoKCnByaXZhdGU6CiAgdmlydHVhbCBuc3JlZmNudCBB
ZGRSZWYodm9pZCkgPSAwOwogIHZpcnR1YWwgbnNyZWZjbnQgUmVsZWFzZSh2b2lkKSA9IDA7Cn07
CiMgMzQgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVZpZXdNYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5o
IiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyOCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lWaWV3TWFuYWdlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcu
aCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIgMgoK
Y2xhc3MgbnNJUmVnaW9uOwpjbGFzcyBuc0lFdmVudDsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNs
YXNzIG5zSVZpZXc7CmNsYXNzIG5zSVNjcm9sbGFibGVWaWV3OwpjbGFzcyBuc0lXaWRnZXQ7CmNs
YXNzIG5zSUNvbXBvc2l0ZUxpc3RlbmVyOwpzdHJ1Y3QgbnNSZWN0OwoKZW51bSBuc0NvbnRlbnRR
dWFsaXR5IHsKICBuc0NvbnRlbnRRdWFsaXR5X2tHb29kID0gMCwKICBuc0NvbnRlbnRRdWFsaXR5
X2tGYWlyLAogIG5zQ29udGVudFF1YWxpdHlfa1Bvb3IsCiAgbnNDb250ZW50UXVhbGl0eV9rVW5r
bm93bgp9OwoKCgoKCmNsYXNzIG5zSVZpZXdNYW5hZ2VyIDogcHVibGljIG5zSVN1cHBvcnRzCnsK
cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlp
ZCA9IHsgMHgzYTg4NjNkMCwgMHhhN2YzLCAweDExZDEsIHsgMHhhOCwgMHgyNCwgMHgwMCwgMHg0
MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9IH07IHJldHVybiBpaWQ7IH0KIyA2NSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJ
bml0KG5zSURldmljZUNvbnRleHQqIGFDb250ZXh0LCBuc2Nvb3JkIGFYID0gMCwgbnNjb29yZCBh
WSA9IDApID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9vdFZpZXcobnNJVmlldyAq
JmFWaWV3KSA9IDA7CiMgODMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdl
ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Um9vdFZpZXcobnNJVmlldyAqYVZpZXcsIG5zSVdp
ZGdldCogYVdpZGdldCA9IDApID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5k
b3dEaW1lbnNpb25zKG5zY29vcmQgKndpZHRoLCBuc2Nvb3JkICpoZWlnaHQpID0gMDsKIyAxMDAg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0V2luZG93RGltZW5zaW9ucyhuc2Nvb3JkIHdpZHRoLCBuc2Nvb3JkIGhlaWdodCkg
PSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc2V0U2Nyb2xsaW5nKHZvaWQpID0gMDsKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBDb21wb3NpdGUodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFVwZGF0ZVZpZXcobnNJVmlldyAqYVZpZXcsIFBSVWludDMyIGFVcGRhdGVGbGFn
cykgPSAwOwojIDEyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBVcGRhdGVWaWV3KG5zSVZpZXcgKmFWaWV3LCBjb25zdCBuc1Jl
Y3QgJmFSZWN0LCBQUlVpbnQzMiBhVXBkYXRlRmxhZ3MpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFVwZGF0ZUFsbFZpZXdzKFBSVWludDMyIGFVcGRhdGVGbGFncykgPSAwOwojIDE0NCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBVcGRhdGVWaWV3QWZ0ZXJTY3JvbGwobnNJVmlldyAqYVZpZXcsIFBSSW50MzIgYURYLCBQ
UkludDMyIGFEWSkgPSAwOwojIDE1MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdN
YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEaXNwYXRjaEV2ZW50KG5zR1VJRXZlbnQgKmFF
dmVudCwgbnNFdmVudFN0YXR1cyogYVN0YXR1cykgPSAwOwojIDE2MiAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHcmFiTW91c2VF
dmVudHMobnNJVmlldyAqYVZpZXcsIFBSQm9vbCYgYVJlc3VsdCkgPSAwOwojIDE3MSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH
cmFiS2V5RXZlbnRzKG5zSVZpZXcgKmFWaWV3LCBQUkJvb2wmIGFSZXN1bHQpID0gMDsKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0TW91c2VFdmVudEdyYWJiZXIobnNJVmlldyAqJmFWaWV3KSA9
IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEtleUV2ZW50R3JhYmJlcihuc0lWaWV3ICom
YVZpZXcpID0gMDsKIyAxOTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdl
ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0Q2hpbGQobnNJVmlldyAqYVBhcmVudCwgbnNJ
VmlldyAqYUNoaWxkLCBuc0lWaWV3ICphU2libGluZywKICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUkJvb2wgYUFib3ZlKSA9IDA7CiMgMjA3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Vmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydENoaWxkKG5zSVZpZXcgKmFQ
YXJlbnQsIG5zSVZpZXcgKmFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy
IGFaSW5kZXgpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNlcnRaUGxhY2Vob2xkZXIobnNJ
VmlldyAqYVBhcmVudCwgbnNJVmlldyAqYVpDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJJbnQzMiBhWkluZGV4KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UmVtb3ZlQ2hpbGQobnNJVmlldyAqYVBhcmVudCwgbnNJVmlldyAqYUNoaWxkKSA9IDA7CiMgMjI4
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IE1vdmVWaWV3QnkobnNJVmlldyAqYVZpZXcsIG5zY29vcmQgYVgsIG5zY29vcmQgYVkp
ID0gMDsKIyAyMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgTW92ZVZpZXdUbyhuc0lWaWV3ICphVmlldywgbnNjb29yZCBhWCwg
bnNjb29yZCBhWSkgPSAwOwojIDI1MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdN
YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNpemVWaWV3KG5zSVZpZXcgKmFWaWV3LCBu
c2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0LCBQUkJvb2wgYVJlcGFpbnRFeHBvc2VkQXJl
YU9ubHkgPSAwKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmlld0NoaWxkQ2xp
cChuc0lWaWV3ICphVmlldywgbnNSZWN0ICphUmVjdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldFZpZXdWaXNpYmlsaXR5KG5zSVZpZXcgKmFWaWV3LCBuc1ZpZXdWaXNpYmlsaXR5
IGFWaXNpYmxlKSA9IDA7CiMgMjc2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01h
bmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXdaSW5kZXgobnNJVmlldyAqYVZpZXcs
IFBSSW50MzIgYVppbmRleCkgPSAwOwojIDI4NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaWV3QXV0b1pJbmRleChuc0lW
aWV3ICphVmlldywgUFJCb29sIGFBdXRvWkluZGV4KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgTW92ZVZpZXdBYm92ZShuc0lWaWV3ICphVmlldywgbnNJVmlldyAqYU90aGVyKSA9IDA7
CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVZpZXdCZWxvdyhuc0lWaWV3ICphVmlldywg
bnNJVmlldyAqYU90aGVyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaWV3U2hv
d24obnNJVmlldyAqYVZpZXcsIFBSQm9vbCAmYVJlc3VsdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFZpZXdDbGlwQWJzb2x1dGUobnNJVmlldyAqYVZpZXcsIG5zUmVjdCAqYVJl
Y3QsIFBSQm9vbCAmYVJlc3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmll
d0NvbnRlbnRUcmFuc3BhcmVuY3kobnNJVmlldyAqYVZpZXcsIFBSQm9vbCBhVHJhbnNwYXJlbnQp
ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaWV3T3BhY2l0eShuc0lWaWV3ICph
VmlldywgZmxvYXQgYU9wYWNpdHkpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZp
ZXdPYnNlcnZlcihuc0lWaWV3T2JzZXJ2ZXIgKmFPYnNlcnZlcikgPSAwOwoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0Vmlld09ic2VydmVyKG5zSVZpZXdPYnNlcnZlciAqJmFPYnNlcnZlcikg
PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZXZpY2VDb250ZXh0KG5zSURldmljZUNv
bnRleHQgKiZhQ29udGV4dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTaG93UXVhbGl0
eShQUkJvb2wgYVNob3cpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2hvd1F1YWxp
dHkoUFJCb29sICZhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFF1YWxp
dHkobnNDb250ZW50UXVhbGl0eSBhUXVhbGl0eSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBEaXNhYmxlUmVmcmVzaCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5h
YmxlUmVmcmVzaChQUlVpbnQzMiBhVXBkYXRlRmxhZ3MpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBCZWdpblVwZGF0ZVZpZXdCYXRjaCh2b2lkKSA9IDA7CiMgNDAzICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZFVw
ZGF0ZVZpZXdCYXRjaChQUlVpbnQzMiBhVXBkYXRlRmxhZ3MpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRSb290U2Nyb2xsYWJsZVZpZXcobnNJU2Nyb2xsYWJsZVZpZXcgKmFTY3Jv
bGxhYmxlKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9vdFNjcm9sbGFibGVW
aWV3KG5zSVNjcm9sbGFibGVWaWV3ICoqYVNjcm9sbGFibGUpID0gMDsKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBEaXNwbGF5KG5zSVZpZXcgKmFWaWV3LCBuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKSA9
IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRDb21wb3NpdGVMaXN0ZW5lcihuc0lDb21w
b3NpdGVMaXN0ZW5lciAqYUxpc3RlbmVyKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZW1vdmVDb21wb3NpdGVMaXN0ZW5lcihuc0lDb21wb3NpdGVMaXN0ZW5lciAqYUxpc3RlbmVyKSA9
IDA7CiMgNDQ3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFdpZGdldEZvclZpZXcobnNJVmlldyAqYVZpZXcsIG5zSVdpZGdl
dCAqKmFXaWRnZXQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWRnZXQobnNJ
V2lkZ2V0ICoqYVdpZGdldCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvcmNlVXBk
YXRlKCkgPSAwOwojIDQ3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2Vy
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZzZXQobnNjb29yZCAqYVgsIG5zY29vcmQgKmFZ
KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNDYWNoaW5nV2lkZ2V0Q2hhbmdlcyhQUkJv
b2wqIGFDYWNoaW5nKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FjaGVXaWRnZXRDaGFu
Z2VzKFBSQm9vbCBhQ2FjaGUpPTA7CiMgNDk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Vmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFsbG93RG91YmxlQnVmZmVyaW5nKFBS
Qm9vbCBhRG91YmxlQnVmZmVyKT0wOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGFpbnRp
bmcoUFJCb29sJiBhSXNQYWludGluZyk9MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNo
UGVuZGluZ0ludmFsaWRhdGVzKCk9MDsKIyA1MjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdEJhY2tncm91bmRD
b2xvcihuc2NvbG9yIGFDb2xvcik9MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1
bHRCYWNrZ3JvdW5kQ29sb3IobnNjb2xvciogYUNvbG9yKT0wOwp9OwojIDM1ICJuc0Zvcm1Db250
cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgi
IDEKIyAzNiAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNXaWRnZXRzQ0lELmgiIDEKIyAzNyAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWaWV3c0NJRC5oIiAxCiMgMjYgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ZpZXdzQ0lELmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zVmlld3NDSUQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGYWN0b3J5
LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZhY3RvcnkuaCIKY2xhc3Mg
bnNJRmFjdG9yeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwMDAwMDAwMSwg
MHgwMDAwLCAweDAwMDAsIHsgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHg0NiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUluc3Rh
bmNlKG5zSVN1cHBvcnRzICphT3V0ZXIsIGNvbnN0IG5zSUlEICYgaWlkLCB2b2lkICogKnJlc3Vs
dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMb2NrRmFjdG9yeShQUkJvb2wgbG9jaykgPSAw
OwoKfTsKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVmlld3NDSUQuaCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDEKIyAxOCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIiAxCiMgMzUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1lcmF0b3Ig
OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZDE4OTkyNDAsIDB4ZjlkMiwgMHgx
MWQyLCB7IDB4YmQsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQgfX07
IHJldHVybiBpaWQ7fQojIDUzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRv
ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzTW9yZUVsZW1lbnRzKFBSQm9vbCAqX3JldHZhbCkg
PSAwOwojIDcwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0TmV4dChuc0lTdXBwb3J0cyAqKl9yZXR2YWwpID0gMDsKCn07CiMg
MTQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIgpjbGFzcyBuc0lF
bnVtZXJhdG9yIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0
IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGFkMzg1Mjg2LCAw
eGNiYzQsIDB4MTFkMiwgeyAweDhjLCAweGNhLCAweDAwLCAweDYwLCAweGIwLCAweGZjLCAweDE0
LCAweGEzIH19OyByZXR1cm4gaWlkO30KCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJzdCh2b2lk
KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV4dCh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEN1cnJlbnRJdGVtKG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBJc0RvbmUodm9pZCkgPSAwOwoKfTsKIyAyNTUgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSUJpZGlyZWN0aW9uYWxF
bnVtZXJhdG9yIDogcHVibGljIG5zSUVudW1lcmF0b3IgewogcHVibGljOgoKICBzdGF0aWMgY29u
c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NzVmMTU4YTAs
IDB4Y2FkZCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2EsIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4
MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IExhc3Qodm9p
ZCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByZXYodm9pZCkgPSAwOwoKfTsKIyAzMzEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmV4dGVybiAiQyIgbnNy
ZXN1bHQKTlNfTmV3RW1wdHlFbnVtZXJhdG9yKG5zSVNpbXBsZUVudW1lcmF0b3IqKiBhUmVzdWx0
KTsKCgoKCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3Q29uam9pbmluZ0VudW1lcmF0b3IobnNJ
RW51bWVyYXRvciogZmlyc3QsIG5zSUVudW1lcmF0b3IqIHNlY29uZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IqICphSW5zdGFuY2VQdHJSZXN1
bHQpOwoKCgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX05ld1VuaW9uRW51bWVyYXRvcihuc0lFbnVt
ZXJhdG9yKiBmaXJzdCwgbnNJRW51bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAgICAg
ICAgbnNJRW51bWVyYXRvciogKmFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCmV4dGVybiAiQyIgbnNy
ZXN1bHQKTlNfTmV3SW50ZXJzZWN0aW9uRW51bWVyYXRvcihuc0lFbnVtZXJhdG9yKiBmaXJzdCwg
bnNJRW51bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUVu
dW1lcmF0b3IqICphSW5zdGFuY2VQdHJSZXN1bHQpOwojIDE5ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIiAyCgoKCgoKCmNsYXNzIG5zSUZpbGU7CiMgMzUg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCmNsYXNzIG5z
SUNvbXBvbmVudE1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0
aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ODQ1
OGE3NDAsIDB4ZDVkYywgMHgxMWQyLCB7IDB4OTIsIDB4ZmIsIDB4MDAsIDB4ZTAsIDB4OTgsIDB4
MDUsIDB4NTcsIDB4MGYgfX07IHJldHVybiBpaWQ7fQojIDQ5ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZEZhY3Rv
cnkoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIG5zSUZhY3RvcnkgKipfcmV0dmFsKSA9IDA7CiMgNjAg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgbnNJ
SUQgJiBhSUlELCB2b2lkICogKl9yZXR2YWwpID0gMDsKIyA3MyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRyYWN0
SURUb0NsYXNzSUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zQ0lEICphQ2xhc3MpID0gMDsK
IyA4NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IENMU0lEVG9Db250cmFjdElEKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBj
aGFyICoqYUNsYXNzTmFtZSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA5OCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENy
ZWF0ZUluc3RhbmNlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lTdXBwb3J0cyAqYURlbGVnYXRl
LCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDExMiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IENyZWF0ZUluc3RhbmNlQnlDb250cmFjdElEKGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBu
c0lTdXBwb3J0cyAqYURlbGVnYXRlLCBjb25zdCBuc0lJRCAmIElJRCwgdm9pZCAqICpfcmV0dmFs
KSA9IDA7CiMgMTI0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdl
ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0cnlMb2NhdGlvbkZvclNwZWMobnNJRmlsZSAq
YVNwZWMsIGNoYXIgKipfcmV0dmFsKSA9IDA7CiMgMTMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3BlY0ZvclJlZ2lz
dHJ5TG9jYXRpb24oY29uc3QgY2hhciAqYUxvY2F0aW9uLCBuc0lGaWxlICoqX3JldHZhbCkgPSAw
OwojIDE0OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmIGFDbGFzcywg
Y29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zSUZhY3Rv
cnkgKmFGYWN0b3J5LCBQUkJvb2wgYVJlcGxhY2UpID0gMDsKIyAxNjkgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdp
c3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFt
ZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIGNvbnN0IGNoYXIgKmFMb2NhdGlvbiwgUFJCb29s
IGFSZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QpID0gMDsKIyAxOTEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3Rl
ckNvbXBvbmVudFdpdGhUeXBlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphQ2xh
c3NOYW1lLCBjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNJRmlsZSAqYVNwZWMsIGNvbnN0IGNo
YXIgKmFMb2NhdGlvbiwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QsIGNvbnN0IGNo
YXIgKmFUeXBlKSA9IDA7CiMgMjA5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9u
ZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRTcGVjKGNv
bnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBjaGFyICph
Q29udHJhY3RJRCwgbnNJRmlsZSAqYUxpYnJhcnksIFBSQm9vbCBhUmVwbGFjZSwgUFJCb29sIGFQ
ZXJzaXN0KSA9IDA7CiMgMjI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50
TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRMaWIoY29uc3Qg
bnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFDb250
cmFjdElELCBjb25zdCBjaGFyICphRGxsTmFtZSwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBl
cnNpc3QpID0gMDsKIyAyNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN
YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJ
RCAmIGFDbGFzcywgbnNJRmFjdG9yeSAqYUZhY3RvcnkpID0gMDsKIyAyNTQgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBV
bnJlZ2lzdGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphTG9j
YXRpb24pID0gMDsKIyAyNjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN
YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25z
dCBuc0NJRCAmIGFDbGFzcywgbnNJRmlsZSAqYUxpYnJhcnlTcGVjKSA9IDA7CgoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgRnJlZUxpYnJhcmllcyh2b2lkKSA9IDA7CgoKCgogIGVudW0geyBOU19T
dGFydHVwID0gMCB9OwoKICBlbnVtIHsgTlNfU2NyaXB0ID0gMSB9OwoKICBlbnVtIHsgTlNfVGlt
ZXIgPSAyIH07CgogIGVudW0geyBOU19TaHV0ZG93biA9IDMgfTsKIyAyOTUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBB
dXRvUmVnaXN0ZXIoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICpkaXJlY3RvcnkpID0gMDsKIyAzMDgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBBdXRvUmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICph
RmlsZUxvY2F0aW9uKSA9IDA7CiMgMzE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29t
cG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25l
bnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICphRmlsZUxvY2F0aW9uKSA9IDA7CiMgMzI5ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgSXNSZWdpc3RlcmVkKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBQUkJvb2wgKl9yZXR2YWwp
ID0gMDsKIyAzMzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2Vy
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGVDTFNJRHMobnNJRW51bWVyYXRvciAqKl9y
ZXR2YWwpID0gMDsKIyAzNDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN
YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGVDb250cmFjdElEcyhuc0lFbnVt
ZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKfTsKIyA2MDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Q29tcG9uZW50TWFuYWdlclV0aWxzLmgiIDEKIyAyMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ09NUHRyLmgiIDEKIyAyNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tcG9uZW50
TWFuYWdlclV0aWxzLmgiIDIKIyAzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tcG9u
ZW50TWFuYWdlclV0aWxzLmgiCmV4dGVybiAiQyIgbnNyZXN1bHQgTlNHZXRGYWN0b3J5KG5zSVN1
cHBvcnRzKiBhU2Vydk1nciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGYWN0b3J5ICoqYUZhY3RvcnkpOwpl
eHRlcm4gIkMiIFBSQm9vbCBOU0NhblVubG9hZChuc0lTdXBwb3J0cyogYVNlcnZNZ3IpOwpleHRl
cm4gIkMiIG5zcmVzdWx0IE5TUmVnaXN0ZXJTZWxmKG5zSVN1cHBvcnRzKiBhU2Vydk1nciwgY29u
c3QgY2hhciAqZnVsbHBhdGgpOwpleHRlcm4gIkMiIG5zcmVzdWx0IE5TVW5yZWdpc3RlclNlbGYo
bnNJU3VwcG9ydHMqIGFTZXJ2TWdyLCBjb25zdCBjaGFyICpmdWxscGF0aCk7Cgp0eXBlZGVmIG5z
cmVzdWx0ICgqbnNGYWN0b3J5UHJvYykobnNJU3VwcG9ydHMqIGFTZXJ2TWdyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZhY3RvcnkgKiphRmFjdG9yeSk7CnR5cGVkZWYg
UFJCb29sICgqbnNDYW5VbmxvYWRQcm9jKShuc0lTdXBwb3J0cyogYVNlcnZNZ3IpOwp0eXBlZGVm
IG5zcmVzdWx0ICgqbnNSZWdpc3RlclByb2MpKG5zSVN1cHBvcnRzKiBhU2Vydk1nciwgY29uc3Qg
Y2hhciAqcGF0aCk7CnR5cGVkZWYgbnNyZXN1bHQgKCpuc1VucmVnaXN0ZXJQcm9jKShuc0lTdXBw
b3J0cyogYVNlcnZNZ3IsIGNvbnN0IGNoYXIgKnBhdGgpOwojIDYzICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIKZXh0ZXJuIG5zcmVzdWx0Ck5TX0dl
dEdsb2JhbENvbXBvbmVudE1hbmFnZXIobnNJQ29tcG9uZW50TWFuYWdlciogKnJlc3VsdCk7CgoK
CgoKY2xhc3MgbnNDb21wb25lbnRNYW5hZ2VyIHsKcHVibGljOgogIHN0YXRpYyBuc3Jlc3VsdCBJ
bml0aWFsaXplKHZvaWQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEZpbmRGYWN0b3J5KGNvbnN0IG5z
Q0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZhY3RvcnkgKiph
RmFjdG9yeSk7CgoKICBzdGF0aWMgbnNyZXN1bHQgR2V0Q2xhc3NPYmplY3QoY29uc3QgbnNDSUQg
JmFDbGFzcywgY29uc3QgbnNJSUQgJmFJSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKiphUmVzdWx0KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBDb250cmFjdElEVG9DbGFz
c0lEKGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zQ0lEICphQ2xhc3MpOwoKCgogIHN0YXRpYyBuc3Jlc3VsdCBDTFNJRFRvQ29udHJhY3RJ
RChuc0NJRCAqYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqICph
Q2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqICphQ29udHJh
Y3RJRCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UoY29uc3QgbnNDSUQgJmFD
bGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKmFEZWxl
Z2F0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNJSUQgJmFJSUQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiphUmVzdWx0KTsKCgogIHN0
YXRpYyBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNJSUQgJmFJSUQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiphUmVzdWx0KTsKCgogIHN0YXRpYyBuc3Jl
c3VsdCBSZWdpc3RlckZhY3RvcnkoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUZhY3RvcnkgKmFGYWN0b3J5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBsYWNlKTsKIyAxMTggIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0NvbXBvbmVudE1hbmFnZXJVdGlscy5oIgogIHN0YXRpYyBuc3Jlc3Vs
dCBSZWdpc3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqYUxpYnJhcnlQZXJzaXN0ZW50RGVzY3JpcHRvciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUmVwbGFjZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUGVyc2lzdCk7CgoKCiAgc3RhdGljIG5zcmVzdWx0
IFJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmlsZSAqYUxpYnJhcnksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUGVyc2lzdCk7CgoKCgogIHN0YXRpYyBuc3Jlc3Vs
dCBSZWdpc3RlckNvbXBvbmVudExpYihjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYWRsbE5h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUmVwbGFj
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0
KTsKCgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3RlckZhY3RvcnkoY29uc3QgbnNDSUQgJmFD
bGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqYUZh
Y3RvcnkpOwoKCiAgc3RhdGljIG5zcmVzdWx0IFVucmVnaXN0ZXJDb21wb25lbnQoY29uc3QgbnND
SUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICphTGlicmFyeSk7CgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3RlckNvbXBvbmVudFNw
ZWMoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJRmlsZSAqYUxpYnJhcnlTcGVjKTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBGcmVl
TGlicmFyaWVzKHZvaWQpOwoKCgoKCiAgc3RhdGljIG5zcmVzdWx0IEF1dG9SZWdpc3RlcihQUklu
dDMyIHdoZW4sIG5zSUZpbGUqIGRpcmVjdG9yeSk7CiAgc3RhdGljIG5zcmVzdWx0IEF1dG9SZWdp
c3RlckNvbXBvbmVudChQUkludDMyIHdoZW4sIG5zSUZpbGUgKmNvbXBvbmVudCk7CiAgc3RhdGlj
IG5zcmVzdWx0IEF1dG9VbnJlZ2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAq
Y29tcG9uZW50KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBJc1JlZ2lzdGVyZWQoY29uc3QgbnNDSUQg
JmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqYVJlZ2lzdGVy
ZWQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEVudW1lcmF0ZUNMU0lEcyhuc0lFbnVtZXJhdG9yKiog
YUVtdW1lcmF0b3IpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEVudW1lcmF0ZUNvbnRyYWN0SURzKG5z
SUVudW1lcmF0b3IqKiBhRW11bWVyYXRvcik7Cgp9OwoKCmNsYXNzIG5zQ3JlYXRlSW5zdGFuY2VC
eUNJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKICAgICAgICB7CiAgICAgICAgICAgICAgICBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgIG5zQ3JlYXRlSW5zdGFuY2VCeUNJRCggY29u
c3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIg
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtQ0lEKGFDSUQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0ZXIoYU91
dGVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUVy
cm9yUHRyKGFFcnJvclB0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHZp
cnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsK
CiAgICAgICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c0NJRCYgbUNJRDsKICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIG1PdXRlcjsK
ICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICAgICAgICB9OwoK
Y2xhc3MgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxw
ZXIKICAgICAgICB7CiAgICAgICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgIG5zQ3JlYXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQoIGNvbnN0IGNoYXIqIGFDb250cmFjdElE
LCBuc0lTdXBwb3J0cyogYU91dGVyLCBuc3Jlc3VsdCogYUVycm9yUHRyICkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0ZXIoYU91
dGVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUVy
cm9yUHRyKGFFcnJvclB0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHZp
cnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsK
CiAgICAgICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBtQ29udHJhY3RJRDsKICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIG1P
dXRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICAgICAg
ICB9OwoKY2xhc3MgbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeSA6IHB1YmxpYyBuc0NPTVB0
cl9oZWxwZXIKewpwdWJsaWM6CiAgICBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KGNvbnN0
IGNoYXIgKmFDYXRlZ29yeSwgY29uc3QgY2hhciAqYUVudHJ5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYU91dGVyLCBuc3Jlc3VsdCAqYUVycm9yUHRyKQog
ICAgICAgIDogbUNhdGVnb3J5KGFDYXRlZ29yeSksCiAgICAgICAgICBtRW50cnkoYUVudHJ5KSwK
ICAgICAgICAgIG1FcnJvclB0cihhRXJyb3JQdHIpCiAgICB7CgogICAgfQogICAgdmlydHVhbCBu
c3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwogICAgdmly
dHVhbCB+bnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeSgpIHt9OwoKcHJpdmF0ZToKICAgIGNv
bnN0IGNoYXIgKm1DYXRlZ29yeTsKICAgIGNvbnN0IGNoYXIgKm1FbnRyeTsKICAgIG5zSVN1cHBv
cnRzICptT3V0ZXI7CiAgICBuc3Jlc3VsdCAqbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5z
Q3JlYXRlSW5zdGFuY2VCeUNJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgbnNDSUQmIGFDSUQs
IG5zcmVzdWx0KiBlcnJvciA9IDAgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBu
c0NyZWF0ZUluc3RhbmNlQnlDSUQoYUNJRCwgMCwgZXJyb3IpOwogICAgICAgIH0KCmlubGluZQpj
b25zdCBuc0NyZWF0ZUluc3RhbmNlQnlDSUQKZG9fQ3JlYXRlSW5zdGFuY2UoIGNvbnN0IG5zQ0lE
JiBhQ0lELCBuc0lTdXBwb3J0cyogYU91dGVyLCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICAgICAg
ICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKGFDSUQsIGFP
dXRlciwgZXJyb3IpOwogICAgICAgIH0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNlQnlD
b250cmFjdElECmRvX0NyZWF0ZUluc3RhbmNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNy
ZXN1bHQqIGVycm9yID0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG5zQ3Jl
YXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIDAsIGVycm9yKTsKICAgICAgICB9
CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRApkb19DcmVhdGVJbnN0
YW5jZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVz
dWx0KiBlcnJvciA9IDAgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBuc0NyZWF0
ZUluc3RhbmNlQnlDb250cmFjdElEKGFDb250cmFjdElELCBhT3V0ZXIsIGVycm9yKTsKICAgICAg
ICB9CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeQpkb19DcmVhdGVJ
bnN0YW5jZUZyb21DYXRlZ29yeSggY29uc3QgY2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICph
RW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3Jlc3VsdCAqYUVycm9yUHRy
ID0gMCkKewogICAgcmV0dXJuIG5zQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoYUNhdGVnb3J5
LCBhRW50cnksIDAsIGFFcnJvclB0cik7Cn0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNl
RnJvbUNhdGVnb3J5CmRvX0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KCBjb25zdCBjaGFyICph
Q2F0ZWdvcnksIGNvbnN0IGNoYXIgKmFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN1cHBvcnRzICphT3V0ZXIsIG5zcmVzdWx0ICphRXJyb3JQdHIgPSAwKQp7CiAgICBy
ZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeShhQ2F0ZWdvcnksIGFFbnRyeSwgYU91
dGVyLCBhRXJyb3JQdHIpOwp9CgoKZXh0ZXJuIGNvbnN0IGNoYXIgeHBjb21LZXlOYW1lW107CmV4
dGVybiBjb25zdCBjaGFyIHhwY29tQ29tcG9uZW50c0tleU5hbWVbXTsKZXh0ZXJuIGNvbnN0IGNo
YXIgbGFzdE1vZFZhbHVlTmFtZVtdOwpleHRlcm4gY29uc3QgY2hhciBmaWxlU2l6ZVZhbHVlTmFt
ZVtdOwpleHRlcm4gY29uc3QgY2hhciBuYXRpdmVDb21wb25lbnRUeXBlW107CiMgNjAzICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIiAyCiMgMjkgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ZpZXdzQ0lELmgiIDIKIyAzOCAibnNGb3JtQ29udHJvbEhl
bHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFu
YWdlci5oIiAxCiMgMzkgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIgMQojIDQwICJuc0Zvcm1Db250cm9sSGVscGVy
LmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIiAx
CiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ29vcmQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9u
dE1ldHJpY3MuaCIgMgoKc3RydWN0IG5zRm9udDsKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSURl
dmljZUNvbnRleHQ7CmNsYXNzIG5zSUF0b207CiMgNDQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGb250TWV0cmljcy5oIgp0eXBlZGVmIHZvaWQqIG5zRm9udEhhbmRsZTsKIyA2MyAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvbnRNZXRyaWNzLmgiCmNsYXNzIG5zSUZvbnRNZXRy
aWNzIDogcHVibGljIG5zSVN1cHBvcnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYg
R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4Yzc0Y2I3NzAsIDB4YTMzZSwg
MHgxMWQxLCB7IDB4YTgsIDB4MjQsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OWEsIDB4MjgsIDB4Yzkg
fSB9OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KGNvbnN0IG5z
Rm9udCYgYUZvbnQsIG5zSUF0b20qIGFMYW5nR3JvdXAsCiAgICAgICAgICAgICAgICAgICBuc0lE
ZXZpY2VDb250ZXh0ICphQ29udGV4dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZXN0
cm95KCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFhIZWlnaHQobnNjb29yZCYgYVJl
c3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3VwZXJzY3JpcHRPZmZzZXQo
bnNjb29yZCYgYVJlc3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3Vic2Ny
aXB0T2Zmc2V0KG5zY29vcmQmIGFSZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFN0cmlrZW91dChuc2Nvb3JkJiBhT2Zmc2V0LCBuc2Nvb3JkJiBhU2l6ZSkgPSAwOwoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VW5kZXJsaW5lKG5zY29vcmQmIGFPZmZzZXQsIG5zY29v
cmQmIGFTaXplKSA9IDA7CiMgMTIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9udE1l
dHJpY3MuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhlaWdodChuc2Nvb3JkICZhSGVpZ2h0KSA9
IDA7CiMgMTMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9udE1ldHJpY3MuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldE5vcm1hbExpbmVIZWlnaHQobnNjb29yZCAmYUhlaWdodCkgPSAw
OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVhZGluZyhuc2Nvb3JkICZhTGVhZGluZykg
PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVtSGVpZ2h0KG5zY29vcmQgJmFIZWln
aHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbUFzY2VudChuc2Nvb3JkICZhQXNj
ZW50KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW1EZXNjZW50KG5zY29vcmQgJmFE
ZXNjZW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1heEhlaWdodChuc2Nvb3Jk
ICZhSGVpZ2h0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWF4QXNjZW50KG5z
Y29vcmQgJmFBc2NlbnQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWF4RGVzY2Vu
dChuc2Nvb3JkICZhRGVzY2VudCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1heEFk
dmFuY2UobnNjb29yZCAmYUFkdmFuY2UpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG
b250KGNvbnN0IG5zRm9udCAqJmFGb250KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
TGFuZ0dyb3VwKG5zSUF0b20qKiBhTGFuZ0dyb3VwKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0Rm9udEhhbmRsZShuc0ZvbnRIYW5kbGUgJmFIYW5kbGUpID0gMDsKCgoKCgoKCn07CiMg
NDEgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZvcm1Db250cm9sLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZvcm1Db250cm9sLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRz
LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1Db250cm9sLmgiIDIK
Y2xhc3MgbnNJRE9NSFRNTEZvcm1FbGVtZW50OwojIDYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRm9ybUNvbnRyb2wuaCIKY2xhc3MgbnNJRm9ybUNvbnRyb2wgOiBwdWJsaWMgbnNJU3Vw
cG9ydHMgewpwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMg
bnNJSUQgaWlkID0geyAweDI4MmZmNDQwLCAweGNkN2UsIDB4MTFkMSwgezB4ODksIDB4YWQsIDB4
MDAsIDB4NjAsIDB4MDgsIDB4OTEsIDB4MWIsIDB4ODF9IH07IHJldHVybiBpaWQ7IH0KCgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvcm0obnNJRE9NSFRNTEZvcm1FbGVtZW50KiogYUZvcm0p
ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvcm0obnNJRE9NSFRNTEZvcm1FbGVt
ZW50KiBhRm9ybSwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZW1vdmVGcm9tRm9ybSA9
IDEpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUoUFJJbnQzMiogYVR5cGUp
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KCkgPSAwOwoKfTsKIyA0MiAibnNGb3JtQ29u
dHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNl
Q29udGV4dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250
ZXh0LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAy
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIgMgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1JlY3QuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNl
Q29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAx
CiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiIDIKCmNs
YXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zSVZpZXc7CmNsYXNzIG5zSUZvbnRNZXRy
aWNzOwpjbGFzcyBuc0lXaWRnZXQ7CmNsYXNzIG5zSURldmljZUNvbnRleHRTcGVjOwpjbGFzcyBu
c0lBdG9tOwoKc3RydWN0IG5zRm9udDsKc3RydWN0IG5zQ29sb3I7CgoKdHlwZWRlZiB2b2lkICog
bnNOYXRpdmVEZXZpY2VDb250ZXh0OwoKCgoKCgp0eXBlZGVmIHZvaWQgKiBuc1BhbGV0dGU7CgoK
c3RydWN0IG5zUGFsZXR0ZUluZm8gewogIFBSUGFja2VkQm9vbCBpc1BhbGV0dGVEZXZpY2U7CiAg
UFJVaW50MTYgc2l6ZVBhbGV0dGU7CiAgUFJVaW50MTYgbnVtUmVzZXJ2ZWQ7CiAgbnNQYWxldHRl
IHBhbGV0dGU7Cn07CgoKCgoKICB0eXBlZGVmIGVudW0gewoKICAgIGVTeXN0ZW1BdHRyX0NvbG9y
X1dpbmRvd0JhY2tncm91bmQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9XaW5kb3dGb3JlZ3JvdW5k
LAogICAgZVN5c3RlbUF0dHJfQ29sb3JfV2lkZ2V0QmFja2dyb3VuZCwKICAgIGVTeXN0ZW1BdHRy
X0NvbG9yX1dpZGdldEZvcmVncm91bmQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9XaWRnZXRTZWxl
Y3RCYWNrZ3JvdW5kLAogICAgZVN5c3RlbUF0dHJfQ29sb3JfV2lkZ2V0U2VsZWN0Rm9yZWdyb3Vu
ZCwKICAgIGVTeXN0ZW1BdHRyX0NvbG9yX1dpZGdldDNESGlnaGxpZ2h0LAogICAgZVN5c3RlbUF0
dHJfQ29sb3JfV2lkZ2V0M0RTaGFkb3csCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9UZXh0QmFja2dy
b3VuZCwKICAgIGVTeXN0ZW1BdHRyX0NvbG9yX1RleHRGb3JlZ3JvdW5kLAogICAgZVN5c3RlbUF0
dHJfQ29sb3JfVGV4dFNlbGVjdEJhY2tncm91bmQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9UZXh0
U2VsZWN0Rm9yZWdyb3VuZCwKCiAgICBlU3lzdGVtQXR0cl9TaXplX1dpbmRvd1RpdGxlSGVpZ2h0
LAogICAgZVN5c3RlbUF0dHJfU2l6ZV9XaW5kb3dCb3JkZXJXaWR0aCwKICAgIGVTeXN0ZW1BdHRy
X1NpemVfV2luZG93Qm9yZGVySGVpZ2h0LAogICAgZVN5c3RlbUF0dHJfU2l6ZV9XaWRnZXQzREJv
cmRlciwKICAgIGVTeXN0ZW1BdHRyX1NpemVfU2Nyb2xsYmFySGVpZ2h0LAogICAgZVN5c3RlbUF0
dHJfU2l6ZV9TY3JvbGxiYXJXaWR0aCwKCiAgICBlU3lzdGVtQXR0cl9Gb250X0NhcHRpb24sCiAg
ICBlU3lzdGVtQXR0cl9Gb250X0ljb24sCiAgICBlU3lzdGVtQXR0cl9Gb250X01lbnUsCiAgICBl
U3lzdGVtQXR0cl9Gb250X01lc3NhZ2VCb3gsCiAgICBlU3lzdGVtQXR0cl9Gb250X1NtYWxsQ2Fw
dGlvbiwKICAgIGVTeXN0ZW1BdHRyX0ZvbnRfU3RhdHVzQmFyLAoKICAgICAgICAgICAgICAgIGVT
eXN0ZW1BdHRyX0ZvbnRfV2luZG93LAogICAgICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9E
b2N1bWVudCwKICAgICAgICAgICAgICAgIGVTeXN0ZW1BdHRyX0ZvbnRfV29ya3NwYWNlLAogICAg
ICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9EZXNrdG9wLAogICAgICAgICAgICAgICAgZVN5
c3RlbUF0dHJfRm9udF9JbmZvLAogICAgICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9EaWFs
b2csCiAgICAgICAgICAgICAgICBlU3lzdGVtQXR0cl9Gb250X0J1dHRvbiwKICAgICAgICAgICAg
ICAgIGVTeXN0ZW1BdHRyX0ZvbnRfUHVsbERvd25NZW51LAogICAgICAgICAgICAgICAgZVN5c3Rl
bUF0dHJfRm9udF9MaXN0LAogICAgICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9GaWVsZCwK
CiAgICBlU3lzdGVtQXR0cl9Gb250X1Rvb2x0aXBzLAogICAgZVN5c3RlbUF0dHJfRm9udF9XaWRn
ZXQKICB9IG5zU3lzdGVtQXR0cklEOwoKICB0eXBlZGVmIHVuaW9uIHsKICAgIFBSVWludDMyIG1T
aXplOwogICAgbnNjb2xvciAqIG1Db2xvcjsKICAgIG5zRm9udCAqIG1Gb250OwogIH0gU3lzdGVt
QXR0clN0cnVjdDsKIyAxMjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250
ZXh0LmgiCnN0cnVjdCBfTklfQ29sb3JTcGFjZTsKdHlwZWRlZiBfTklfQ29sb3JTcGFjZSBOSV9D
b2xvclNwYWNlOwp0eXBlZGVmIE5JX0NvbG9yU3BhY2UgSUxfQ29sb3JTcGFjZTsKCmNsYXNzIG5z
SURldmljZUNvbnRleHQgOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg1OTMxYzU4
MCwgMHhiOTE3LCAweDExZDEsIHsgMHhhOCwgMHgyNCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5YSwg
MHgyOCwgMHhjOSB9IH07IHJldHVybiBpaWQ7fQoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5p
dChuc05hdGl2ZVdpZGdldCBhV2lkZ2V0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
Q3JlYXRlUmVuZGVyaW5nQ29udGV4dChuc0lWaWV3ICphVmlldywgbnNJUmVuZGVyaW5nQ29udGV4
dCAqJmFDb250ZXh0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlUmVuZGVy
aW5nQ29udGV4dChuc0lXaWRnZXQgKmFXaWRnZXQsIG5zSVJlbmRlcmluZ0NvbnRleHQgKiZhQ29u
dGV4dCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVJlbmRlcmluZ0NvbnRl
eHQobnNJUmVuZGVyaW5nQ29udGV4dCAqJmFDb250ZXh0KSA9IDA7CiMgMTcxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5p
dFJlbmRlcmluZ0NvbnRleHQobnNJUmVuZGVyaW5nQ29udGV4dCAqYUNvbnRleHQsIG5zSVdpZGdl
dCAqYVdpbmRvdykgPSAwOwojIDE4MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmlj
ZUNvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFN1cHBvcnRzTmF0aXZlV2lkZ2V0cyhQUkJv
b2wgJmFTdXBwb3J0c1dpZGdldHMpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE
ZXZVbml0c1RvVHdpcHMoZmxvYXQgJmFEZXZVbml0c1RvVHdpcHMpIGNvbnN0ID0gMDsKCgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR3aXBzVG9EZXZVbml0cyhmbG9hdCAmYVR3aXBzVG9EZXZV
bml0cykgY29uc3QgPSAwOwojIDIwOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmlj
ZUNvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFwcFVuaXRzVG9EZXZVbml0cyhmbG9h
dCBhQXBwVW5pdHMpID0gMDsKIyAyMTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZp
Y2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZXZVbml0c1RvQXBwVW5pdHMoZmxv
YXQgYURldlVuaXRzKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXBwVW5pdHNU
b0RldlVuaXRzKGZsb2F0ICZhQXBwVW5pdHMpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXREZXZVbml0c1RvQXBwVW5pdHMoZmxvYXQgJmFEZXZVbml0cykgY29uc3QgPSAw
OwojIDI0NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldENhbm9uaWNhbFBpeGVsU2NhbGUoZmxvYXQgJmFTY2FsZSkgY29u
c3QgPSAwOwojIDI1NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjcm9sbEJhckRpbWVuc2lvbnMoZmxvYXQgJmFXaWR0
aCwgZmxvYXQgJmFIZWlnaHQpIGNvbnN0ID0gMDsKIyAyNjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTeXN0ZW1BdHRy
aWJ1dGUobnNTeXN0ZW1BdHRySUQgYW5JRCwgU3lzdGVtQXR0clN0cnVjdCAqIGFJbmZvKSBjb25z
dCA9IDA7CiMgMjc1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0cmljc0Zvcihjb25zdCBuc0ZvbnQmIGFGb250LCBu
c0lBdG9tKiBhTGFuZ0dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRm9udE1l
dHJpY3MqJiBhTWV0cmljcykgPSAwOwojIDI4NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SURldmljZUNvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldHJpY3NGb3IoY29uc3Qg
bnNGb250JiBhRm9udCwgbnNJRm9udE1ldHJpY3MqJiBhTWV0cmljcykgPSAwOwoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0Wm9vbShmbG9hdCBhWm9vbSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Wm9vbShmbG9hdCAmYVpvb20pIGNvbnN0ID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dFRleHRab29tKGZsb2F0IGFUZXh0Wm9vbSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4
dFpvb20oZmxvYXQgJmFUZXh0Wm9vbSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXREcmF3aW5nU3VyZmFjZShuc0lSZW5kZXJpbmdDb250ZXh0ICZhQ29udGV4dCwgbnNEcmF3
aW5nU3VyZmFjZSAmYVN1cmZhY2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0R2FtbWEo
ZmxvYXQgJmFHYW1tcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0R2FtbWEoZmxvYXQgYUdh
bW1hKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEdhbW1hVGFibGUoUFJVaW50OCAqJmFH
YW1tYVRhYmxlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTG9hZEljb25JbWFnZShQUklu
dDMyIGFJZCwgbnNJSW1hZ2UqJiBhSW1hZ2UpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IENoZWNrRm9udEV4aXN0ZW5jZShjb25zdCBuc1N0cmluZyYgYUZhY2VOYW1lKSA9IDA7CiAgdmly
dHVhbCBuc3Jlc3VsdCBGaXJzdEV4aXN0aW5nRm9udChjb25zdCBuc0ZvbnQmIGFGb250LCBuc1N0
cmluZyYgYUZhY2VOYW1lKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYWxGb250TmFt
ZShjb25zdCBuc1N0cmluZyYgYUZhY2VOYW1lLCBuc1N0cmluZyYgYUxvY2FsTmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhQWxpYXNlZCkgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgRmx1c2hGb250Q2FjaGUodm9pZCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldERlcHRoKFBSVWludDMyJiBhRGVwdGgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRJTENvbG9yU3BhY2UoSUxfQ29sb3JTcGFjZSomIGFDb2xvclNwYWNlKSA9IDA7
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFsZXR0ZUluZm8obnNQYWxldHRlSW5mbyYpID0g
MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb252ZXJ0UGl4ZWwobnNjb2xvciBhQ29sb3IsIFBS
VWludDMyICYgYVBpeGVsKSA9IDA7CiMgMzYzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGV2aWNlU3VyZmFjZURpbWVu
c2lvbnMoUFJJbnQzMiAmYVdpZHRoLCBQUkludDMyICZhSGVpZ2h0KSA9IDA7CiMgMzcyICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0UmVjdCAoIG5zUmVjdCAmYVJlY3QgKSA9IDA7CiMgMzg0ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50
UmVjdChuc1JlY3QgJmFSZWN0KSA9IDA7CiMgMzk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGV2aWNlQ29udGV4dEZv
cihuc0lEZXZpY2VDb250ZXh0U3BlYyAqYURldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJRGV2aWNlQ29udGV4dCAqJmFDb250ZXh0KSA9IDA7CiMgNDA4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
QmVnaW5Eb2N1bWVudChQUlVuaWNoYXIgKiBhVGl0bGUpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBFbmREb2N1bWVudCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
QmVnaW5QYWdlKHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmRQYWdlKHZv
aWQpID0gMDsKfTsKIyA0MyAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MQXRvbXMuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNIVE1MQXRvbXMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
QXRvbS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxBdG9tcy5oIiAy
CiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxBdG9tcy5oIgpjbGFzcyBuc0hU
TUxBdG9tcyB7CnB1YmxpYzoKCiAgc3RhdGljIHZvaWQgQWRkUmVmQXRvbXMoKTsKICBzdGF0aWMg
dm9pZCBSZWxlYXNlQXRvbXMoKTsKIyA1MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRN
TEF0b21zLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTEF0b21MaXN0Lmgi
IDEKIyAzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTEF0b21MaXN0LmgiCnN0YXRp
YyBuc0lBdG9tKiBtb3pBbm9ueW1vdXNCbG9jazsKc3RhdGljIG5zSUF0b20qIG1vekFub255bW91
c1Bvc2l0aW9uZWRCbG9jazsKc3RhdGljIG5zSUF0b20qIG1vekZpcnN0TGluZUZpeHVwOwpzdGF0
aWMgbnNJQXRvbSogbW96TGV0dGVyRnJhbWU7CnN0YXRpYyBuc0lBdG9tKiBtb3pMaW5lRnJhbWU7
CnN0YXRpYyBuc0lBdG9tKiBtb3pMaXN0QnVsbGV0UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogbW96
U2luZ2xlTGluZVRleHRDb250cm9sRnJhbWU7CnN0YXRpYyBuc0lBdG9tKiBtb3pGb2N1c0lubmVy
UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogbW96Rm9jdXNPdXRlclBzZXVkbzsKc3RhdGljIG5zSUF0
b20qIG1vekRpc3BsYXlDb21ib2JveENvbnRyb2xGcmFtZTsKCnN0YXRpYyBuc0lBdG9tKiBfYmFz
ZUhyZWY7CnN0YXRpYyBuc0lBdG9tKiBfYmFzZVRhcmdldDsKc3RhdGljIG5zSUF0b20qIGE7CnN0
YXRpYyBuc0lBdG9tKiBhYmJyOwpzdGF0aWMgbnNJQXRvbSogYWJvdmU7CnN0YXRpYyBuc0lBdG9t
KiBhY2NlcHQ7CnN0YXRpYyBuc0lBdG9tKiBhY2NlcHRjaGFyc2V0OwpzdGF0aWMgbnNJQXRvbSog
YWNjZXNza2V5OwpzdGF0aWMgbnNJQXRvbSogYWN0aW9uOwpzdGF0aWMgbnNJQXRvbSogYWxpZ247
CnN0YXRpYyBuc0lBdG9tKiBhbGluazsKc3RhdGljIG5zSUF0b20qIGFsdDsKc3RhdGljIG5zSUF0
b20qIGFwcGxldDsKc3RhdGljIG5zSUF0b20qIGFyY2hpdmU7CnN0YXRpYyBuc0lBdG9tKiBhcmVh
OwpzdGF0aWMgbnNJQXRvbSogYXhpczsKc3RhdGljIG5zSUF0b20qIGJhY2tncm91bmQ7CnN0YXRp
YyBuc0lBdG9tKiBiYXNlOwpzdGF0aWMgbnNJQXRvbSogYmVsb3c7CgpzdGF0aWMgbnNJQXRvbSog
YmRvOwoKc3RhdGljIG5zSUF0b20qIGJnY29sb3I7CnN0YXRpYyBuc0lBdG9tKiBibG9ja3F1b3Rl
OwpzdGF0aWMgbnNJQXRvbSogYm9keTsKc3RhdGljIG5zSUF0b20qIGJvcmRlcjsKc3RhdGljIG5z
SUF0b20qIGJvcmRlcmNvbG9yOwpzdGF0aWMgbnNJQXRvbSogYm90dG9tcGFkZGluZzsKc3RhdGlj
IG5zSUF0b20qIGJyOwpzdGF0aWMgbnNJQXRvbSogYjsKc3RhdGljIG5zSUF0b20qIGJ1dHRvbjsK
c3RhdGljIG5zSUF0b20qIGJ1dHRvbkNvbnRlbnRQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBjYXB0
aW9uOwpzdGF0aWMgbnNJQXRvbSogY2VsbENvbnRlbnRQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBj
ZWxscGFkZGluZzsKc3RhdGljIG5zSUF0b20qIGNlbGxzcGFjaW5nOwpzdGF0aWMgbnNJQXRvbSog
Y2g7CnN0YXRpYyBuc0lBdG9tKiBfY2hhcjsKc3RhdGljIG5zSUF0b20qIGNoYXJvZmY7CnN0YXRp
YyBuc0lBdG9tKiBjaGFyc2V0OwpzdGF0aWMgbnNJQXRvbSogY2hlY2tlZDsKc3RhdGljIG5zSUF0
b20qIGNpdGU7CnN0YXRpYyBuc0lBdG9tKiBrQ2xhc3M7CnN0YXRpYyBuc0lBdG9tKiBjbGFzc2lk
OwpzdGF0aWMgbnNJQXRvbSogY2xlYXI7CnN0YXRpYyBuc0lBdG9tKiBjbGlwOwpzdGF0aWMgbnNJ
QXRvbSogY29kZTsKc3RhdGljIG5zSUF0b20qIGNvZGViYXNlOwpzdGF0aWMgbnNJQXRvbSogY29k
ZXR5cGU7CnN0YXRpYyBuc0lBdG9tKiBjb2xvcjsKc3RhdGljIG5zSUF0b20qIGNvbDsKc3RhdGlj
IG5zSUF0b20qIGNvbGdyb3VwOwpzdGF0aWMgbnNJQXRvbSogY29sczsKc3RhdGljIG5zSUF0b20q
IGNvbHNwYW47CnN0YXRpYyBuc0lBdG9tKiBjb21ib2JveDsKc3RhdGljIG5zSUF0b20qIGNvbHVt
blBzZXVkbzsKc3RhdGljIG5zSUF0b20qIGNvbW1lbnRQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBj
b21wYWN0OwpzdGF0aWMgbnNJQXRvbSogY29udGVudDsKc3RhdGljIG5zSUF0b20qIGNvb3JkczsK
c3RhdGljIG5zSUF0b20qIGRkOwpzdGF0aWMgbnNJQXRvbSogZGVmYXVsdGNoZWNrZWQ7CnN0YXRp
YyBuc0lBdG9tKiBkZWZhdWx0c2VsZWN0ZWQ7CnN0YXRpYyBuc0lBdG9tKiBkZWZhdWx0dmFsdWU7
CnN0YXRpYyBuc0lBdG9tKiBkZWNsYXJlOwpzdGF0aWMgbnNJQXRvbSogZGVmZXI7CnN0YXRpYyBu
c0lBdG9tKiBkaXI7CnN0YXRpYyBuc0lBdG9tKiBkaXY7CnN0YXRpYyBuc0lBdG9tKiBkaXNhYmxl
ZDsKc3RhdGljIG5zSUF0b20qIGRsOwpzdGF0aWMgbnNJQXRvbSogZHJvcERvd25MaXN0UHNldWRv
OwpzdGF0aWMgbnNJQXRvbSogZHQ7CgpzdGF0aWMgbnNJQXRvbSogZGF0ZXRpbWU7CnN0YXRpYyBu
c0lBdG9tKiBkYXRhOwpzdGF0aWMgbnNJQXRvbSogZGZuOwpzdGF0aWMgbnNJQXRvbSogZW07CnN0
YXRpYyBuc0lBdG9tKiBlbWJlZDsKc3RhdGljIG5zSUF0b20qIGVuY29kaW5nOwpzdGF0aWMgbnNJ
QXRvbSogZW5jdHlwZTsKc3RhdGljIG5zSUF0b20qIGZhY2U7CnN0YXRpYyBuc0lBdG9tKiBmaWVs
ZHNldDsKc3RhdGljIG5zSUF0b20qIGZpZWxkc2V0Q29udGVudFBzZXVkbzsKc3RhdGljIG5zSUF0
b20qIGZpcnN0TGV0dGVyUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogZmlyc3RMaW5lUHNldWRvOwpz
dGF0aWMgbnNJQXRvbSogZm9udDsKc3RhdGljIG5zSUF0b20qIGZvbnRXZWlnaHQ7CnN0YXRpYyBu
c0lBdG9tKiBfZm9yOwpzdGF0aWMgbnNJQXRvbSogZm9ybTsKc3RhdGljIG5zSUF0b20qIGZyYW1l
OwpzdGF0aWMgbnNJQXRvbSogZnJhbWVib3JkZXI7CnN0YXRpYyBuc0lBdG9tKiBmcmFtZXNldDsK
c3RhdGljIG5zSUF0b20qIGZyYW1lc2V0QmxhbmtQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBndXR0
ZXI7CnN0YXRpYyBuc0lBdG9tKiBoMTsKc3RhdGljIG5zSUF0b20qIGgyOwpzdGF0aWMgbnNJQXRv
bSogaDM7CnN0YXRpYyBuc0lBdG9tKiBoNDsKc3RhdGljIG5zSUF0b20qIGg1OwpzdGF0aWMgbnNJ
QXRvbSogaDY7CnN0YXRpYyBuc0lBdG9tKiBoZWFkOwpzdGF0aWMgbnNJQXRvbSogaGVhZGVyQ29u
dGVudEJhc2U7CnN0YXRpYyBuc0lBdG9tKiBoZWFkZXJDb250ZW50TGFuZ3VhZ2U7CnN0YXRpYyBu
c0lBdG9tKiBoZWFkZXJDb250ZW50U2NyaXB0VHlwZTsKc3RhdGljIG5zSUF0b20qIGhlYWRlckNv
bnRlbnRTdHlsZVR5cGU7CnN0YXRpYyBuc0lBdG9tKiBoZWFkZXJDb250ZW50VHlwZTsKc3RhdGlj
IG5zSUF0b20qIGhlYWRlckRlZmF1bHRTdHlsZTsKc3RhdGljIG5zSUF0b20qIGhlYWRlcldpbmRv
d1RhcmdldDsKc3RhdGljIG5zSUF0b20qIGhlYWRlcnM7CnN0YXRpYyBuc0lBdG9tKiBoZWlnaHQ7
CnN0YXRpYyBuc0lBdG9tKiBoaWRkZW47CnN0YXRpYyBuc0lBdG9tKiBob3Jpem9udGFsRnJhbWVz
ZXRCb3JkZXJQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBocjsKc3RhdGljIG5zSUF0b20qIGhyZWY7
CnN0YXRpYyBuc0lBdG9tKiBocmVmbGFuZzsKc3RhdGljIG5zSUF0b20qIGhzcGFjZTsKc3RhdGlj
IG5zSUF0b20qIGh0bWw7CnN0YXRpYyBuc0lBdG9tKiBodHRwRXF1aXY7CnN0YXRpYyBuc0lBdG9t
KiBpYlBzZXVkbzsKc3RhdGljIG5zSUF0b20qIGk7CnN0YXRpYyBuc0lBdG9tKiBpZDsKc3RhdGlj
IG5zSUF0b20qIGlmcmFtZTsKc3RhdGljIG5zSUF0b20qIGlsYXllcjsKc3RhdGljIG5zSUF0b20q
IGltZzsKc3RhdGljIG5zSUF0b20qIGluZGV4OwpzdGF0aWMgbnNJQXRvbSogaW5wdXQ7CnN0YXRp
YyBuc0lBdG9tKiBpc2luZGV4OwpzdGF0aWMgbnNJQXRvbSogaXNtYXA7CnN0YXRpYyBuc0lBdG9t
KiBsYWJlbDsKc3RhdGljIG5zSUF0b20qIGxhYmVsQ29udGVudFBzZXVkbzsKc3RhdGljIG5zSUF0
b20qIGxhbmc7CnN0YXRpYyBuc0lBdG9tKiBsYXllcjsKc3RhdGljIG5zSUF0b20qIGxheW91dDsK
c3RhdGljIG5zSUF0b20qIGxpOwpzdGF0aWMgbnNJQXRvbSogbGluazsKc3RhdGljIG5zSUF0b20q
IGxlZnQ7CnN0YXRpYyBuc0lBdG9tKiBsZWZ0cGFkZGluZzsKc3RhdGljIG5zSUF0b20qIGxlZ2Vu
ZDsKc3RhdGljIG5zSUF0b20qIGxlZ2VuZENvbnRlbnRQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBs
ZW5ndGg7CnN0YXRpYyBuc0lBdG9tKiBsb25nZGVzYzsKc3RhdGljIG5zSUF0b20qIGxvd3NyYzsK
c3RhdGljIG5zSUF0b20qIG1hcDsKc3RhdGljIG5zSUF0b20qIG1hcmdpbmhlaWdodDsKc3RhdGlj
IG5zSUF0b20qIG1hcmdpbndpZHRoOwpzdGF0aWMgbnNJQXRvbSogbWF4bGVuZ3RoOwpzdGF0aWMg
bnNJQXRvbSogbWF5c2NyaXB0OwpzdGF0aWMgbnNJQXRvbSogbWVkaWE7CnN0YXRpYyBuc0lBdG9t
KiBtZW51OwpzdGF0aWMgbnNJQXRvbSogbWV0YTsKc3RhdGljIG5zSUF0b20qIG1ldGhvZDsKc3Rh
dGljIG5zSUF0b20qIG11bHRpY29sOwpzdGF0aWMgbnNJQXRvbSogbXVsdGlwbGU7CnN0YXRpYyBu
c0lBdG9tKiBuYW1lOwpzdGF0aWMgbnNJQXRvbSogbm9lbWJlZDsKc3RhdGljIG5zSUF0b20qIG5v
ZnJhbWVzOwpzdGF0aWMgbnNJQXRvbSogbm9ocmVmOwpzdGF0aWMgbnNJQXRvbSogbm9yZXNpemU7
CnN0YXRpYyBuc0lBdG9tKiBub3NjcmlwdDsKc3RhdGljIG5zSUF0b20qIG5vc2hhZGU7CnN0YXRp
YyBuc0lBdG9tKiBub3dyYXA7CnN0YXRpYyBuc0lBdG9tKiBvYmplY3Q7CnN0YXRpYyBuc0lBdG9t
KiBvbDsKc3RhdGljIG5zSUF0b20qIG9wdGlvbjsKc3RhdGljIG5zSUF0b20qIG92ZXJmbG93Owpz
dGF0aWMgbnNJQXRvbSogcDsKc3RhdGljIG5zSUF0b20qIHBhZ2V4OwpzdGF0aWMgbnNJQXRvbSog
cGFnZXk7CnN0YXRpYyBuc0lBdG9tKiBwYXJhbTsKc3RhdGljIG5zSUF0b20qIHBsYWNlaG9sZGVy
UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogcG9pbnRTaXplOwpzdGF0aWMgbnNJQXRvbSogcHJlOwpz
dGF0aWMgbnNJQXRvbSogcHJvY2Vzc2luZ0luc3RydWN0aW9uUHNldWRvOwpzdGF0aWMgbnNJQXRv
bSogcHJvZmlsZTsKc3RhdGljIG5zSUF0b20qIHByb21wdDsKc3RhdGljIG5zSUF0b20qIHJhZGlv
UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogY2hlY2tQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiByZWFk
b25seTsKc3RhdGljIG5zSUF0b20qIHJlZnJlc2g7CnN0YXRpYyBuc0lBdG9tKiByZWw7CnN0YXRp
YyBuc0lBdG9tKiByZXBlYXQ7CnN0YXRpYyBuc0lBdG9tKiByZXY7CnN0YXRpYyBuc0lBdG9tKiBy
aWdodHBhZGRpbmc7CnN0YXRpYyBuc0lBdG9tKiByb3dzOwpzdGF0aWMgbnNJQXRvbSogcm93c3Bh
bjsKc3RhdGljIG5zSUF0b20qIHJ1bGVzOwpzdGF0aWMgbnNJQXRvbSogczsKc3RhdGljIG5zSUF0
b20qIHNjaGVtZTsKc3RhdGljIG5zSUF0b20qIHNjb3BlOwpzdGF0aWMgbnNJQXRvbSogc2NyaXB0
OwpzdGF0aWMgbnNJQXRvbSogc2Nyb2xsaW5nOwpzdGF0aWMgbnNJQXRvbSogc2VsZWN0OwpzdGF0
aWMgbnNJQXRvbSogc2VsZWN0ZWQ7CnN0YXRpYyBuc0lBdG9tKiBzZWxlY3RlZGluZGV4OwpzdGF0
aWMgbnNJQXRvbSogc2V0Y29va2llOwpzdGF0aWMgbnNJQXRvbSogc2hhcGU7CnN0YXRpYyBuc0lB
dG9tKiBzaXplOwpzdGF0aWMgbnNJQXRvbSogc3BhY2VyOwpzdGF0aWMgbnNJQXRvbSogc3BhbjsK
c3RhdGljIG5zSUF0b20qIHNyYzsKc3RhdGljIG5zSUF0b20qIHN0YW5kYnk7CnN0YXRpYyBuc0lB
dG9tKiBzdGFydDsKc3RhdGljIG5zSUF0b20qIHN0cmlrZTsKc3RhdGljIG5zSUF0b20qIHN0cm9u
ZzsKc3RhdGljIG5zSUF0b20qIHN0eWxlOwpzdGF0aWMgbnNJQXRvbSogc3VtbWFyeTsKc3RhdGlj
IG5zSUF0b20qIHN1cHByZXNzOwpzdGF0aWMgbnNJQXRvbSogdGFiaW5kZXg7CnN0YXRpYyBuc0lB
dG9tKiB0YWJsZTsKc3RhdGljIG5zSUF0b20qIHRhYmxlUHNldWRvOwpzdGF0aWMgbnNJQXRvbSog
dGFibGVDZWxsUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogdGFibGVDb2xHcm91cFBzZXVkbzsKc3Rh
dGljIG5zSUF0b20qIHRhYmxlQ29sUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogdGFibGVPdXRlclBz
ZXVkbzsKc3RhdGljIG5zSUF0b20qIHRhYmxlUm93R3JvdXBQc2V1ZG87CnN0YXRpYyBuc0lBdG9t
KiB0YWJsZVJvd1BzZXVkbzsKc3RhdGljIG5zSUF0b20qIHRhYnN0b3A7CnN0YXRpYyBuc0lBdG9t
KiB0YXJnZXQ7CnN0YXRpYyBuc0lBdG9tKiB0Ym9keTsKc3RhdGljIG5zSUF0b20qIHRkOwpzdGF0
aWMgbnNJQXRvbSogdGZvb3Q7CnN0YXRpYyBuc0lBdG9tKiB0aGVhZDsKc3RhdGljIG5zSUF0b20q
IHRleHQ7CnN0YXRpYyBuc0lBdG9tKiB0ZXh0YXJlYTsKc3RhdGljIG5zSUF0b20qIHRleHRQc2V1
ZG87CnN0YXRpYyBuc0lBdG9tKiB0aDsKc3RhdGljIG5zSUF0b20qIHRpdGxlOwpzdGF0aWMgbnNJ
QXRvbSogdG9wOwpzdGF0aWMgbnNJQXRvbSogdG9wcGFkZGluZzsKc3RhdGljIG5zSUF0b20qIHRy
OwpzdGF0aWMgbnNJQXRvbSogdHQ7CnN0YXRpYyBuc0lBdG9tKiB0eXBlOwpzdGF0aWMgbnNJQXRv
bSogdTsKc3RhdGljIG5zSUF0b20qIHVsOwpzdGF0aWMgbnNJQXRvbSogdXNlbWFwOwpzdGF0aWMg
bnNJQXRvbSogdmFsaWduOwpzdGF0aWMgbnNJQXRvbSogdmFsdWU7CnN0YXRpYyBuc0lBdG9tKiB2
YWx1ZXR5cGU7CnN0YXRpYyBuc0lBdG9tKiB2YXJpYWJsZTsKc3RhdGljIG5zSUF0b20qIHZjYXJk
X25hbWU7CnN0YXRpYyBuc0lBdG9tKiB2ZXJzaW9uOwpzdGF0aWMgbnNJQXRvbSogdmVydGljYWxG
cmFtZXNldEJvcmRlclBzZXVkbzsKc3RhdGljIG5zSUF0b20qIHZpc2liaWxpdHk7CnN0YXRpYyBu
c0lBdG9tKiB2bGluazsKc3RhdGljIG5zSUF0b20qIHZzcGFjZTsKc3RhdGljIG5zSUF0b20qIHdi
cjsKc3RhdGljIG5zSUF0b20qIHdpZHRoOwpzdGF0aWMgbnNJQXRvbSogd3JhcDsKc3RhdGljIG5z
SUF0b20qIHdyYXBwZWRGcmFtZVBzZXVkbzsKc3RhdGljIG5zSUF0b20qIHppbmRleDsKc3RhdGlj
IG5zSUF0b20qIHpfaW5kZXg7CgpzdGF0aWMgbnNJQXRvbSogbW96X3RyaXN0YXRlOwpzdGF0aWMg
bnNJQXRvbSogbW96X3RyaXN0YXRldmFsdWU7CiMgNTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0hUTUxBdG9tcy5oIiAyCgp9OwojIDQ0ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCdXR0b24uaCIgMQojIDI2ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJQnV0dG9uLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVdpZGdldC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCdXR0
b24uaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCdXR0b24uaCIgMgojIDM4ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJQnV0dG9uLmgiCmNsYXNzIG5zSUJ1dHRvbiA6IHB1YmxpYyBuc0lT
dXBwb3J0cyB7CgpwdWJsaWM6CiAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4MTgwMzJhZDAsIDB4YjI2NSwgMHgxMWQxLCB7IDB4YWEs
IDB4MmEsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAgfSB9OyByZXR1cm4gaWlkO30KIyA1
MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUJ1dHRvbi5oIgogICAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRMYWJlbChjb25zdCBuc1N0cmluZyAmYVRleHQpID0gMDsKIyA1OSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUJ1dHRvbi5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYWJl
bChuc1N0cmluZyAmYUJ1ZmZlcikgPSAwOwoKfTsKIyA0NSAibnNGb3JtQ29udHJvbEhlbHBlci5j
cHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIgMQoj
IDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDMxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lXaWRnZXQuaCIgMQojIDMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hl
Y2tCdXR0b24uaCIgMgoKCgoKCgoKY2xhc3MgbnNJQ2hlY2tCdXR0b24gOiBwdWJsaWMgbnNJU3Vw
cG9ydHMgewoKcHVibGljOgogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj
IGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg5NjEwODVmNSwgMHhiZDI4LCAweDExZDEsIHsgMHg5Nywg
MHhlZiwgMHgwLCAweDYwLCAweDk3LCAweDMsIDB4YzEsIDB4NGUgfSB9OyByZXR1cm4gaWlkO30K
IyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNoZWNrQnV0dG9uLmgiCiAgICB2aXJ0
dWFsIG5zcmVzdWx0IFNldExhYmVsKGNvbnN0IG5zU3RyaW5nICZhVGV4dCkgPSAwOwojIDYwICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIKICAgIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0TGFiZWwobnNTdHJpbmcgJmFCdWZmZXIpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFs
IG5zcmVzdWx0IFNldFN0YXRlKGNvbnN0IFBSQm9vbCBhU3RhdGUpID0gMDsKCgoKCgoKCiAgICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFN0YXRlKFBSQm9vbCYgYVN0YXRlKSA9IDA7Cgp9OwojIDQ2ICJu
c0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lUZXh0V2lkZ2V0LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRX
aWRnZXQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiIDEKIyAy
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lUZXh0V2lkZ2V0LmgiIDIKCgoKCgoKc3RydWN0IG5zVGV4dFdpZGdldEluaXRE
YXRhIDogcHVibGljIG5zV2lkZ2V0SW5pdERhdGEgewogIG5zVGV4dFdpZGdldEluaXREYXRhKCkK
ICAgIDogbUlzUGFzc3dvcmQoMCksCiAgICAgIG1Jc1JlYWRPbmx5KDApCiAgewogIH0KCiAgUFJC
b29sIG1Jc1Bhc3N3b3JkOwogIFBSQm9vbCBtSXNSZWFkT25seTsKfTsKIyA1MyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKY2xhc3MgbnNJVGV4dFdpZGdldCA6IHB1
YmxpYyBuc0lTdXBwb3J0cwp7CgogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4ZjgwMzAwMTEsIDB4YzM0MiwgMHgx
MWQxLCB7IDB4OTcsIDB4ZjAsIDB4MCwgMHg2MCwgMHg5NywgMHgzLCAweGMxLCAweDRlIH0gfTsg
cmV0dXJuIGlpZDt9CiMgNjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0
LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRleHQobnNTdHJpbmcgJmFUZXh0QnVmZmVyLCBQ
UlVpbnQzMiBhQnVmZmVyU2l6ZSwgUFJVaW50MzImIGFBY3R1YWxTaXplKSA9IDA7CiMgODAgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVz
dWx0IFNldFRleHQoY29uc3QgbnNTdHJpbmcgJmFUZXh0LCBQUlVpbnQzMiYgYUFjdHVhbFNpemUp
ID0gMDsKIyA5NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKICAg
IHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0VGV4dChjb25zdCBuc1N0cmluZyAmYVRleHQsIFBSVWlu
dDMyIGFTdGFydFBvcywgUFJVaW50MzIgYUVuZFBvcywgUFJVaW50MzImIGFBY3R1YWxTaXplKSA9
IDA7CgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZVRleHQodm9pZCkgPSAwOwojIDEx
MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKICAgIHZpcnR1YWwg
bnNyZXN1bHQgU2V0UGFzc3dvcmQoUFJCb29sIGFJc1Bhc3N3b3JkKSA9IDA7CiMgMTIxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRNYXhUZXh0TGVuZ3RoKFBSVWludDMyIGFDaGFycykgPSAwOwojIDEzMyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0
UmVhZE9ubHkoUFJCb29sIGFOZXdSZWFkT25seUZsYWcsIFBSQm9vbCYgYU9sZFJlYWRPbmx5Rmxh
ZykgPSAwOwoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3RBbGwoKSA9IDA7CiMgMTQ5
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5oIgogICAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRTZWxlY3Rpb24oUFJVaW50MzIgYVN0YXJ0U2VsLCBQUlVpbnQzMiBhRW5kU2Vs
KSA9IDA7CiMgMTU4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5oIgog
ICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb24oUFJVaW50MzIgKmFTdGFydFNlbCwgUFJV
aW50MzIgKmFFbmRTZWwpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldENhcmV0
UG9zaXRpb24oUFJVaW50MzIgYVBvc2l0aW9uKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRDYXJldFBvc2l0aW9uKFBSVWludDMyJiBhUG9zaXRpb24pID0gMDsKCn07CiMgNDcg
Im5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVN1cHBvcnRzLmgiIDEKIyA0OCAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvbnN0cy5oIiAxCiMgNDkgIm5zRm9ybUNv
bnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVW5pdENv
bnZlcnNpb24uaCIgMQojIDUwICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c2xheW91dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5o
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVV0aWwuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0eWxlVXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxp
bmtIYW5kbGVyLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxpbmtIYW5k
bGVyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAy
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxpbmtIYW5kbGVyLmgiIDIKCmNsYXNzIG5z
SUlucHV0U3RyZWFtOwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc1N0cmluZzsKc3RydWN0IG5z
R1VJRXZlbnQ7CgoKCgoKZW51bSBuc0xpbmtTdGF0ZSB7CiAgZUxpbmtTdGF0ZV9Vbmtub3duID0g
MCwKICBlTGlua1N0YXRlX1VudmlzaXRlZCA9IDEsCiAgZUxpbmtTdGF0ZV9WaXNpdGVkID0gMiwK
ICBlTGlua1N0YXRlX05vdExpbmsgPSAzCn07CgoKCgplbnVtIG5zTGlua1ZlcmIgewogIGVMaW5r
VmVyYl9SZXBsYWNlID0gMCwKICBlTGlua1ZlcmJfTmV3ID0gMSwKICBlTGlua1ZlcmJfRW1iZWQg
PSAyLAogIGVMaW5rVmVyYl9VbmRlZmluZWQgPSAzCn07CgoKCgpjbGFzcyBuc0lMaW5rSGFuZGxl
ciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGE2Y2Y5MDViLCAweDE1YjMsIDB4
MTFkMix7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyBy
ZXR1cm4gaWlkO30KIyA2NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxpbmtIYW5kbGVy
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPbkxpbmtDbGljayhuc0lDb250ZW50KiBhQ29udGVudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zTGlua1ZlcmIgYVZlcmIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFVUkxTcGVjLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUFJVbmljaGFyKiBhVGFyZ2V0U3BlYywKICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUlucHV0U3RyZWFtKiBhUG9zdERhdGFTdHJlYW0gPSAwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJSW5wdXRTdHJlYW0qIGFIZWFkZXJzRGF0YVN0cmVhbSA9IDApID0gMDsKCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPbk92ZXJMaW5rKG5zSUNvbnRlbnQqIGFDb250ZW50LAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFVUkxTcGVjLAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFUYXJnZXRTcGVjKSA9IDA7CgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlua1N0YXRlKGNvbnN0IGNoYXIqIGFMaW5rVVJJLCBuc0xp
bmtTdGF0ZSYgYVN0YXRlKSA9IDA7Cn07CiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1N0eWxlVXRpbC5oIiAyCgpjbGFzcyBuc0lTdHlsZUNvbnRleHQ7CnN0cnVjdCBuc1N0eWxlQmFj
a2dyb3VuZDsKCmVudW0gbnNGb250U2l6ZVR5cGUgewogIGVGb250U2l6ZV9IVE1MID0gMSwKICBl
Rm9udFNpemVfQ1NTID0gMgp9OwoKCgpjbGFzcyBuc1N0eWxlVXRpbCB7CnB1YmxpYzoKCiAgc3Rh
dGljIGZsb2F0IEdldFNjYWxpbmdGYWN0b3IoUFJJbnQzMiBhU2NhbGVyKTsKCiAgc3RhdGljIG5z
Y29vcmQgQ2FsY0ZvbnRQb2ludFNpemUoUFJJbnQzMiBhSFRNTFNpemUsIFBSSW50MzIgYUJhc2VQ
b2ludFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVNjYWxp
bmdGYWN0b3IsIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNGb250U2l6ZVR5cGUgYUZvbnRTaXplVHlwZSA9IGVGb250U2l6
ZV9IVE1MKTsKCiAgc3RhdGljIFBSSW50MzIgRmluZE5leHRTbWFsbGVyRm9udFNpemUobnNjb29y
ZCBhRm9udFNpemUsIFBSSW50MzIgYUJhc2VQb2ludFNpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVNjYWxpbmdGYWN0b3IsIG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNGb250U2l6ZVR5cGUgYUZvbnRTaXplVHlwZSA9IGVGb250U2l6ZV9IVE1MKTsKCiAgc3RhdGlj
IFBSSW50MzIgRmluZE5leHRMYXJnZXJGb250U2l6ZShuc2Nvb3JkIGFGb250U2l6ZSwgUFJJbnQz
MiBhQmFzZVBvaW50U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGFTY2FsaW5nRmFjdG9yLCBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGb250U2l6ZVR5cGUgYUZvbnRT
aXplVHlwZSA9IGVGb250U2l6ZV9IVE1MKTsKCiAgc3RhdGljIFBSSW50MzIgQ29uc3RyYWluRm9u
dFdlaWdodChQUkludDMyIGFXZWlnaHQpOwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZUJhY2tncm91
bmQqIEZpbmROb25UcmFuc3BhcmVudEJhY2tncm91bmQobnNJU3R5bGVDb250ZXh0KiBhQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJCb29sIGFTdGFydEF0UGFyZW50ID0gMCk7CgogIHN0YXRpYyBQUkJvb2wgSXNI
VE1MTGluayhuc0lDb250ZW50ICphQ29udGVudCwgbnNJQXRvbSAqYVRhZywgbnNJUHJlc0NvbnRl
eHQgKmFQcmVzQ29udGV4dCwgbnNMaW5rU3RhdGUgKmFTdGF0ZSk7CiAgc3RhdGljIFBSQm9vbCBJ
c1NpbXBsZVhsaW5rKG5zSUNvbnRlbnQgKmFDb250ZW50LCBuc0lQcmVzQ29udGV4dCAqYVByZXND
b250ZXh0LCBuc0xpbmtTdGF0ZSAqYVN0YXRlKTsKCn07CiMgNTEgIm5zRm9ybUNvbnRyb2xIZWxw
ZXIuY3BwIiAyCiMgMSAibnNGb3JtRnJhbWUuaCIgMQojIDI1ICJuc0Zvcm1GcmFtZS5oIgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtTWFuYWdlci5oIiAxCiMgMjYgIm5zRm9y
bUZyYW1lLmgiIDIKIyAxICIuLi8uLi9iYXNlL3NyYy9uc0Jsb2NrRnJhbWUuaCIgMQojIDI1ICIu
Li8uLi9iYXNlL3NyYy9uc0Jsb2NrRnJhbWUuaCIKIyAxICIuLi8uLi9iYXNlL3NyYy9uc0hUTUxD
b250YWluZXJGcmFtZS5oIiAxCiMgMjUgIi4uLy4uL2Jhc2Uvc3JjL25zSFRNTENvbnRhaW5lckZy
YW1lLmgiCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNDb250YWluZXJGcmFtZS5oIiAxCiMgMjUgIi4u
Ly4uL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIKIyAxICIuLi8uLi9iYXNlL3NyYy9uc1Nw
bGl0dGFibGVGcmFtZS5oIiAxCiMgMjUgIi4uLy4uL2Jhc2Uvc3JjL25zU3BsaXR0YWJsZUZyYW1l
LmgiCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIiAxCiMgMjYgIi4uLy4uL2Jhc2Uvc3Jj
L25zU3BsaXR0YWJsZUZyYW1lLmgiIDIKCgpjbGFzcyBuc1NwbGl0dGFibGVGcmFtZSA6IHB1Ymxp
YyBuc0ZyYW1lCnsKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwK
ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnQsCiAgICAgICAgICAgICAgICAgIG5z
SVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUHJl
dkluRmxvdyk7CgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTcGxpdHRhYmxlKG5zU3BsaXR0YWJsZVR5
cGUmIGFJc1NwbGl0dGFibGUpIGNvbnN0OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2
SW5GbG93KG5zSUZyYW1lKiogYVByZXZJbkZsb3cpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0UHJldkluRmxvdyhuc0lGcmFtZSopOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dEluRmxv
dyhuc0lGcmFtZSoqIGFOZXh0SW5GbG93KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5l
eHRJbkZsb3cobnNJRnJhbWUqKTsKCgoKCiAgbnNJRnJhbWUqIEdldEZpcnN0SW5GbG93KCkgY29u
c3Q7CgoKCgogIG5zSUZyYW1lKiBHZXRMYXN0SW5GbG93KCkgY29uc3Q7CgoKCiAgc3RhdGljIHZv
aWQgUmVtb3ZlRnJvbUZsb3cobnNJRnJhbWUqIGFGcmFtZSk7CgoKICBzdGF0aWMgdm9pZCBCcmVh
a0Zyb21QcmV2Rmxvdyhuc0lGcmFtZSogYUZyYW1lKTsKCiAgbnNJRnJhbWUqIEdldFByZXZJbkZs
b3coKTsKICBuc0lGcmFtZSogR2V0TmV4dEluRmxvdygpOwoKcHJvdGVjdGVkOgoKCgoKICBuc0lG
cmFtZSogbVByZXZJbkZsb3c7CiAgbnNJRnJhbWUqIG1OZXh0SW5GbG93Owp9OwojIDI2ICIuLi8u
Li9iYXNlL3NyYy9uc0NvbnRhaW5lckZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNGcmFtZUxpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNG
cmFtZUxpc3QuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMQoj
IDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGcmFtZUxpc3QuaCIgMgoKCgoKCmNsYXNz
IG5zRnJhbWVMaXN0IHsKcHVibGljOgogIG5zRnJhbWVMaXN0KCkgewogICAgbUZpcnN0Q2hpbGQg
PSAwOwogIH0KCiAgbnNGcmFtZUxpc3QobnNJRnJhbWUqIGFIZWFkKSB7CiAgICBtRmlyc3RDaGls
ZCA9IGFIZWFkOwogIH0KCiAgfm5zRnJhbWVMaXN0KCkgewogIH0KCiAgdm9pZCBEZXN0cm95RnJh
bWVzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICB2b2lkIFNldEZyYW1lcyhuc0lG
cmFtZSogYUZyYW1lTGlzdCkgewogICAgbUZpcnN0Q2hpbGQgPSBhRnJhbWVMaXN0OwogIH0KCiAg
dm9pZCBBcHBlbmRGcmFtZXMobnNJRnJhbWUqIGFQYXJlbnQsIG5zSUZyYW1lKiBhRnJhbWVMaXN0
KTsKCiAgdm9pZCBBcHBlbmRGcmFtZXMobnNJRnJhbWUqIGFQYXJlbnQsIG5zRnJhbWVMaXN0JiBh
RnJhbWVMaXN0KSB7CiAgICBBcHBlbmRGcmFtZXMoYVBhcmVudCwgYUZyYW1lTGlzdC5tRmlyc3RD
aGlsZCk7CiAgICBhRnJhbWVMaXN0Lm1GaXJzdENoaWxkID0gMDsKICB9CgogIHZvaWQgQXBwZW5k
RnJhbWUobnNJRnJhbWUqIGFQYXJlbnQsIG5zSUZyYW1lKiBhRnJhbWUpOwoKCgoKICBQUkJvb2wg
UmVtb3ZlRnJhbWUobnNJRnJhbWUqIGFGcmFtZSk7CgoKCgogIFBSQm9vbCBSZW1vdmVGaXJzdENo
aWxkKCk7CgoKCgogIFBSQm9vbCBEZXN0cm95RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwgbnNJRnJhbWUqIGFGcmFtZSk7CgogIHZvaWQgSW5zZXJ0RnJhbWUobnNJRnJhbWUqIGFQ
YXJlbnQsCiAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVByZXZTaWJsaW5nLAogICAgICAg
ICAgICAgICAgICAgbnNJRnJhbWUqIGFOZXdGcmFtZSk7CgogIHZvaWQgSW5zZXJ0RnJhbWVzKG5z
SUZyYW1lKiBhUGFyZW50LAogICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUHJldlNpYmxp
bmcsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZUxpc3QpOwoKICB2b2lkIElu
c2VydEZyYW1lcyhuc0lGcmFtZSogYVBhcmVudCwgbnNJRnJhbWUqIGFQcmV2U2libGluZywKICAg
ICAgICAgICAgICAgICAgICBuc0ZyYW1lTGlzdCYgYUZyYW1lTGlzdCkgewogICAgSW5zZXJ0RnJh
bWVzKGFQYXJlbnQsIGFQcmV2U2libGluZywgYUZyYW1lTGlzdC5GaXJzdENoaWxkKCkpOwogICAg
YUZyYW1lTGlzdC5tRmlyc3RDaGlsZCA9IDA7CiAgfQoKICBQUkJvb2wgUmVwbGFjZUZyYW1lKG5z
SUZyYW1lKiBhUGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPbGRGcmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3RnJhbWUpOwoKICBQUkJvb2wg
UmVwbGFjZUFuZERlc3Ryb3lGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUGFyZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhT2xkRnJhbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFOZXdGcmFtZSk7CgogIFBSQm9vbCBTcGxpdChu
c0lGcmFtZSogYUFmdGVyRnJhbWUsIG5zSUZyYW1lKiogYU5leHRGcmFtZVJlc3VsdCk7CgogIG5z
SUZyYW1lKiBQdWxsRnJhbWUobnNJRnJhbWUqIGFQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAg
ICBuc0lGcmFtZSogYUxhc3RDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgIG5zRnJhbWVMaXN0
JiBhRnJvbUxpc3QpOwoKICBuc0lGcmFtZSogRmlyc3RDaGlsZCgpIGNvbnN0IHsKICAgIHJldHVy
biBtRmlyc3RDaGlsZDsKICB9CgogIG5zSUZyYW1lKiBMYXN0Q2hpbGQoKSBjb25zdDsKCiAgbnNJ
RnJhbWUqIEZyYW1lQXQoUFJJbnQzMiBhSW5kZXgpIGNvbnN0OwoKICBQUkJvb2wgSXNFbXB0eSgp
IGNvbnN0IHsKICAgIHJldHVybiAwID09IG1GaXJzdENoaWxkOwogIH0KCiAgUFJCb29sIE5vdEVt
cHR5KCkgY29uc3QgewogICAgcmV0dXJuIDAgIT0gbUZpcnN0Q2hpbGQ7CiAgfQoKICBQUkJvb2wg
Q29udGFpbnNGcmFtZShjb25zdCBuc0lGcmFtZSogYUZyYW1lKSBjb25zdDsKCiAgUFJJbnQzMiBH
ZXRMZW5ndGgoKSBjb25zdDsKCiAgbnNJRnJhbWUqIEdldFByZXZTaWJsaW5nRm9yKG5zSUZyYW1l
KiBhRnJhbWUpIGNvbnN0OwoKCgoKCiAgbnNJRnJhbWUqIEdldFByZXZWaXN1YWxGb3IobnNJRnJh
bWUqIGFGcmFtZSkgY29uc3Q7CgoKCgogIG5zSUZyYW1lKiBHZXROZXh0VmlzdWFsRm9yKG5zSUZy
YW1lKiBhRnJhbWUpIGNvbnN0OwoKCiAgdm9pZCBWZXJpZnlQYXJlbnQobnNJRnJhbWUqIGFQYXJl
bnQpIGNvbnN0OwoKCgoKCnByb3RlY3RlZDoKICBuc0lGcmFtZSogbUZpcnN0Q2hpbGQ7Cn07CiMg
MjcgIi4uLy4uL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIgMgojIDM5ICIuLi8uLi9iYXNl
L3NyYy9uc0NvbnRhaW5lckZyYW1lLmgiCmNsYXNzIG5zQ29udGFpbmVyRnJhbWUgOiBwdWJsaWMg
bnNTcGxpdHRhYmxlRnJhbWUKewpwdWJsaWM6CgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBh
Q29udGVudCwKICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnQsCiAgICAgICAgICAg
ICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lKiBhUHJldkluRmxvdyk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbml0aWFsQ2hpbGRMaXN0
KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUqIGFDaGlsZExpc3QpOwogIHZpcnR1YWwgbnNyZXN1bHQgRmlyc3RDaGlsZChu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0lB
dG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYUZpcnN0
Q2hpbGQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgRGVzdHJveShuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVu
ZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVj
dCwKICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyKTsKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lRm9yUG9pbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCYgYVBvaW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hM
YXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhRnJhbWUpOwog
IHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUZyYW1lKiBhTmV3RnJhbWUpOwogIHZpcnR1YWwgbnNyZXN1bHQgUmVmbG93RGlydHlD
aGlsZChuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiBhQ2hpbGQpOwoKCgoKCgoK
ICB2aXJ0dWFsIHZvaWQgRGVsZXRlQ2hpbGRzTmV4dEluRmxvdyhuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhQ2hpbGQpOwoKICBzdGF0aWMgUFJJbnQzMiBMZW5ndGhPZihuc0lGcmFtZSogYUZyYW1lTGlz
dCkgewogICAgbnNGcmFtZUxpc3QgdG1wKGFGcmFtZUxpc3QpOwogICAgcmV0dXJuIHRtcC5HZXRM
ZW5ndGgoKTsKICB9CgoKICBzdGF0aWMgdm9pZCBQb3NpdGlvbkZyYW1lVmlldyhuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lKiBhS2lkRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVmlldyog
YVZpZXcpOwojIDEwMiAiLi4vLi4vYmFzZS9zcmMvbnNDb250YWluZXJGcmFtZS5oIgogIHN0YXRp
YyB2b2lkIFN5bmNGcmFtZVZpZXdBZnRlclJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZy
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3KiBhVmll
dywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0KiBh
Q29tYmluZWRBcmVhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVp
bnQzMiBhRmxhZ3MgPSAwKTsKIyAxMTkgIi4uLy4uL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUu
aCIKICBuc3Jlc3VsdCBSZWZsb3dDaGlsZChuc0lGcmFtZSogYUtpZEZyYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYURlc2lyZWRTaXplLAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUmVmbG93U3RhdGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgbnNjb29yZCBhWCwKICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3Jk
IGFZLAogICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFGbGFncywKICAgICAgICAgICAg
ICAgICAgICAgICBuc1JlZmxvd1N0YXR1cyYgYVN0YXR1cyk7CiMgMTQ5ICIuLi8uLi9iYXNlL3Ny
Yy9uc0NvbnRhaW5lckZyYW1lLmgiCiAgc3RhdGljIG5zcmVzdWx0IEZpbmlzaFJlZmxvd0NoaWxk
KG5zSUZyYW1lKiBhS2lkRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJpY3MmIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhWCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNjb29yZCBhWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJVaW50MzIgYUZsYWdzKTsKCgogIHN0YXRpYyB2b2lkIFBvc2l0aW9uQ2hpbGRWaWV3
cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYUZyYW1lKTsKCnByb3RlY3RlZDoKICBuc0NvbnRhaW5lckZyYW1l
KCk7CiAgfm5zQ29udGFpbmVyRnJhbWUoKTsKCiAgbnNyZXN1bHQgR2V0RnJhbWVGb3JQb2ludFVz
aW5nKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zUG9pbnQmIGFQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQXRvbSogYUxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkJvb2wgYUNvbnNpZGVyU2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJRnJhbWUqKiBhRnJhbWUpOwoKICB2aXJ0dWFsIHZvaWQgUGFpbnRDaGlsZHJlbihu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcik7CgogIHZpcnR1YWwgdm9p
ZCBQYWludENoaWxkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNGcmFtZVBhaW50TGF5ZXIgYVdoaWNoTGF5ZXIpOwoKCgoKICBuc0lGcmFtZSogR2V0T3Zl
cmZsb3dGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJCb29sIGFSZW1vdmVQcm9wZXJ0eSkgY29uc3Q7CgoKCgogIG5zcmVz
dWx0IFNldE92ZXJmbG93RnJhbWVzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPdmVyZmxvd0ZyYW1lcyk7CiMgMjAz
ICIuLi8uLi9iYXNlL3NyYy9uc0NvbnRhaW5lckZyYW1lLmgiCiAgUFJCb29sIE1vdmVPdmVyZmxv
d1RvQ2hpbGRMaXN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwojIDIxOSAiLi4vLi4v
YmFzZS9zcmMvbnNDb250YWluZXJGcmFtZS5oIgogIHZvaWQgUHVzaENoaWxkcmVuKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcm9t
Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2U2libGluZyk7CgogIG5z
RnJhbWVMaXN0IG1GcmFtZXM7Cn07CiMgMjYgIi4uLy4uL2Jhc2Uvc3JjL25zSFRNTENvbnRhaW5l
ckZyYW1lLmgiIDIKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zQWJzb2x1dGVGcmFtZTsKY2xhc3Mg
bnNQbGFjZWhvbGRlckZyYW1lOwpzdHJ1Y3QgbnNTdHlsZURpc3BsYXk7CnN0cnVjdCBuc1N0eWxl
UG9zaXRpb247CiMgNDYgIi4uLy4uL2Jhc2Uvc3JjL25zSFRNTENvbnRhaW5lckZyYW1lLmgiCmNs
YXNzIG5zSFRNTENvbnRhaW5lckZyYW1lIDogcHVibGljIG5zQ29udGFpbmVyRnJhbWUgewpwdWJs
aWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAg
ICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcik7CiMgNjAgIi4uLy4u
L2Jhc2Uvc3JjL25zSFRNTENvbnRhaW5lckZyYW1lLmgiCiAgc3RhdGljIG5zcmVzdWx0IENyZWF0
ZU5leHRJbkZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU91dGVyRnJhbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lGcmFtZSomIGFOZXh0SW5GbG93UmVzdWx0KTsKIyA3NSAiLi4v
Li4vYmFzZS9zcmMvbnNIVE1MQ29udGFpbmVyRnJhbWUuaCIKICBzdGF0aWMgbnNyZXN1bHQgQ3Jl
YXRlVmlld0ZvckZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhU3R5bGVDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDb250ZW50UGFy
ZW50RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUZv
cmNlKTsKCiAgc3RhdGljIG5zcmVzdWx0IFJlcGFyZW50RnJhbWVWaWV3KG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lKiBhQ2hpbGRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
RnJhbWUqIGFPbGRQYXJlbnRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUqIGFOZXdQYXJlbnRGcmFtZSk7CgogIHN0YXRpYyBuc3Jlc3VsdCBSZXBhcmVu
dEZyYW1lVmlld0xpc3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhQ2hpbGRGcmFtZUxpc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZFBhcmVu
dEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq
IGFOZXdQYXJlbnRGcmFtZSk7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBQUkludG4gR2V0U2tpcFNp
ZGVzKCkgY29uc3QgPSAwOwp9OwojIDI2ICIuLi8uLi9iYXNlL3NyYy9uc0Jsb2NrRnJhbWUuaCIg
MgojIDEgIi4uLy4uL2Jhc2Uvc3JjL25zSFRNTFBhcnRzLmgiIDEKIyAyNyAiLi4vLi4vYmFzZS9z
cmMvbnNCbG9ja0ZyYW1lLmgiIDIKIyAxICIuLi8uLi9iYXNlL3NyYy9uc0Fic29sdXRlQ29udGFp
bmluZ0Jsb2NrLmgiIDEKIyAyNSAiLi4vLi4vYmFzZS9zcmMvbnNBYnNvbHV0ZUNvbnRhaW5pbmdC
bG9jay5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAxCiMgMjYg
Ii4uLy4uL2Jhc2Uvc3JjL25zQWJzb2x1dGVDb250YWluaW5nQmxvY2suaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZyYW1lTGlzdC5oIiAxCiMgMjcgIi4uLy4uL2Jhc2Uvc3Jj
L25zQWJzb2x1dGVDb250YWluaW5nQmxvY2suaCIgMgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJ
RnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwojIDQzICIuLi8uLi9iYXNlL3NyYy9uc0Fic29s
dXRlQ29udGFpbmluZ0Jsb2NrLmgiCmNsYXNzIG5zQWJzb2x1dGVDb250YWluaW5nQmxvY2sKewpw
dWJsaWM6CiAgbnNyZXN1bHQgRmlyc3RDaGlsZChjb25zdCBuc0lGcmFtZSogYURlbGVnYXRpbmdG
cmFtZSwKICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZyYW1lKiogYUZpcnN0Q2hpbGQpIGNvbnN0OwoKICBuc3Jlc3VsdCBT
ZXRJbml0aWFsQ2hpbGRMaXN0KG5zSUZyYW1lKiBhRGVsZWdhdGluZ0ZyYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhQ2hpbGRMaXN0KTsKICBuc3Jlc3VsdCBBcHBl
bmRGcmFtZXMobnNJRnJhbWUqIGFEZWxlZ2F0aW5nRnJhbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRv
bSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlz
dCk7CiAgbnNyZXN1bHQgSW5zZXJ0RnJhbWVzKG5zSUZyYW1lKiBhRGVsZWdhdGluZ0ZyYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqIGFQcmV2RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBh
RnJhbWVMaXN0KTsKICBuc3Jlc3VsdCBSZW1vdmVGcmFtZShuc0lGcmFtZSogYURlbGVnYXRpbmdG
cmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAg
ICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUqIGFPbGRGcmFtZSk7CiMgNzggIi4uLy4uL2Jhc2Uvc3JjL25zQWJzb2x1dGVD
b250YWluaW5nQmxvY2suaCIKICBuc3Jlc3VsdCBSZWZsb3cobnNJRnJhbWUqIGFEZWxlZ2F0aW5n
RnJhbWUsCiAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUmVmbG93U3RhdGUsCiAg
ICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAogICAgICAgICAg
ICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQsCiAgICAgICAgICAgICAgICAg
IG5zUmVjdCYgYUNoaWxkQm91bmRzKTsKIyA5MiAiLi4vLi4vYmFzZS9zcmMvbnNBYnNvbHV0ZUNv
bnRhaW5pbmdCbG9jay5oIgogIG5zcmVzdWx0IEluY3JlbWVudGFsUmVmbG93KG5zSUZyYW1lKiBh
RGVsZWdhdGluZ0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNI
VE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJCb29sJiBhV2FzSGFuZGxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1JlY3QmIGFDaGlsZEJvdW5kcyk7CgogIHZvaWQgRGVzdHJveUZyYW1lcyhuc0lGcmFtZSog
YURlbGVnYXRpbmdGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCk7CgogIFBSQm9vbCBIYXNBYnNvbHV0ZUZyYW1lcygpIHtyZXR1cm4gbUFic29s
dXRlRnJhbWVzLk5vdEVtcHR5KCk7fQoKcHJvdGVjdGVkOgogIG5zcmVzdWx0IFJlZmxvd0Fic29s
dXRlRnJhbWUobnNJRnJhbWUqIGFEZWxlZ2F0aW5nRnJhbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2Nr
SGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFLaWRGcmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVmbG93UmVhc29uIGFSZWFzb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1N0YXR1cyYgYVN0YXR1cyk7
CgogIHZvaWQgQ2FsY3VsYXRlQ2hpbGRCb3VuZHMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwgbnNSZWN0JiBhQ2hpbGRCb3VuZHMpOwoKcHJvdGVjdGVkOgogIG5zRnJhbWVMaXN0IG1BYnNv
bHV0ZUZyYW1lczsKfTsKIyAyOCAiLi4vLi4vYmFzZS9zcmMvbnNCbG9ja0ZyYW1lLmgiIDIKCmNs
YXNzIG5zQmxvY2tSZWZsb3dTdGF0ZTsKY2xhc3MgbnNCdWxsZXRGcmFtZTsKY2xhc3MgbnNMaW5l
Qm94OwpjbGFzcyBuc0ZpcnN0TGluZUZyYW1lOwpjbGFzcyBuc0lMaW5lSXRlcmF0b3I7CiMgNDgg
Ii4uLy4uL2Jhc2Uvc3JjL25zQmxvY2tGcmFtZS5oIgpleHRlcm4gY29uc3QgbnNJSUQga0Jsb2Nr
RnJhbWVDSUQ7CiMgNTcgIi4uLy4uL2Jhc2Uvc3JjL25zQmxvY2tGcmFtZS5oIgpjbGFzcyBuc0Js
b2NrRnJhbWUgOiBwdWJsaWMgbnNIVE1MQ29udGFpbmVyRnJhbWUKewpwdWJsaWM6CiAgZnJpZW5k
IG5zcmVzdWx0IE5TX05ld0Jsb2NrRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lG
cmFtZSoqIGFOZXdGcmFtZSwgUFJVaW50MzIgYUZsYWdzKTsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICBu
c0lGcmFtZSogYVBhcmVudCwKICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2SW5GbG93KTsKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldEluaXRpYWxDaGlsZExpc3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUNoaWxkTGlzdCk7CiAg
dmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0KTsKICB2aXJ0dWFsIG5zcmVzdWx0
IEluc2VydEZyYW1lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqIGFQcmV2RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhRnJhbWVMaXN0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZyYW1lKG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxs
JiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lKTsKICB2aXJ0
dWFsIG5zcmVzdWx0IEZpcnN0Q2hpbGQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSoqIGFGaXJzdENoaWxkKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEFkZGl0aW9uYWxDaGlsZExpc3ROYW1lKFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSoqIGFMaXN0TmFtZSkgY29uc3Q7CiAg
dmlydHVhbCBuc3Jlc3VsdCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwog
IHZpcnR1YWwgbnNyZXN1bHQgSXNTcGxpdHRhYmxlKG5zU3BsaXR0YWJsZVR5cGUmIGFJc1NwbGl0
dGFibGUpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgSXNQZXJjZW50YWdlQmFzZShQUkJvb2wm
IGFCYXNlKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVu
ZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVj
dCwKICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyKTsKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lVHlwZShuc0lBdG9tKiogYVR5cGUpIGNvbnN0OwoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVGb3JQb2ludChuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LCBjb25zdCBuc1BvaW50JiBhUG9pbnQsIG5zRnJhbWVQYWludExheWVyIGFXaGlj
aExheWVyLCBuc0lGcmFtZSoqIGFGcmFtZSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVFdmVu
dChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
bnNHVUlFdmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1
cyogYUV2ZW50U3RhdHVzKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvd0RpcnR5Q2hpbGQobnNJ
UHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSogYUNoaWxkKTsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBJc1Zpc2libGVGb3JQYWludGluZyhuc0lQcmVzQ29udGV4dCAqIGFQcmVzQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFS
ZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29s
IGFDaGVja1ZpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlz
VmlzaWJsZSk7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJpY3MmIGFEZXNp
cmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJl
Zmxvd1N0YXRlLAogICAgICAgICAgICAgICAgICAgIG5zUmVmbG93U3RhdHVzJiBhU3RhdHVzKTsK
CiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGls
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNwYWNlSUQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUhpbnQpOwojIDE0NCAiLi4vLi4vYmFzZS9z
cmMvbnNCbG9ja0ZyYW1lLmgiCiAgdmlydHVhbCB2b2lkIERlbGV0ZUNoaWxkc05leHRJbkZsb3co
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGcmFtZSogYU5leHRJbkZsb3cpOwoKCgoKCiAgbnNJRnJhbWUqIEdldFRv
cEJsb2NrQ2hpbGQoKTsKCgoKCiAgbnNyZXN1bHQgVXBkYXRlU3BhY2VNYW5hZ2VyKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVNw
YWNlTWFuYWdlciogYVNwYWNlTWFuYWdlcik7CgogIG5zTGluZUJveCogRmluZExpbmVGb3IobnNJ
RnJhbWUqIGFGcmFtZSwgbnNMaW5lQm94KiogYVByZXZMaW5lUmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgUFJCb29sKiBhSXNGbG9hdGVyUmVzdWx0KTsKCiAgc3RhdGljIG5zcmVzdWx0
IEdldEN1cnJlbnRMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSAqYVN0YXRlLCBuc0xpbmVCb3ggKiph
T3V0Q3VycmVudExpbmUpOwoKICBzdGF0aWMgdm9pZCBDb21iaW5lUmVjdHMoY29uc3QgbnNSZWN0
JiByMSwgbnNSZWN0JiByMik7Cgpwcm90ZWN0ZWQ6CiAgbnNCbG9ja0ZyYW1lKCk7CiAgdmlydHVh
bCB+bnNCbG9ja0ZyYW1lKCk7CgogIG5zSVN0eWxlQ29udGV4dCogR2V0Rmlyc3RMZXR0ZXJTdHls
ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKCgoKCgoKCiAgbnNyZXN1bHQgR2V0Q2xv
c2VzdExpbmUobnNJTGluZUl0ZXJhdG9yICphTEksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNQb2ludCAmYU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBuc1BvaW50ICZhUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQz
MiAmYUNsb3Nlc3RMaW5lKTsKCiAgdm9pZCBTZXRGbGFncyhQUlVpbnQzMiBhRmxhZ3MpIHsKICAg
IG1TdGF0ZSAmPSB+MHhGRkYwMDAwMDsKICAgIG1TdGF0ZSB8PSBhRmxhZ3M7CiAgfQoKICBQUkJv
b2wgSGF2ZU91dHNpZGVCdWxsZXQoKSBjb25zdCB7CgoKCgoKICAgIHJldHVybiAwICE9IChtU3Rh
dGUgJiAweDQwMDAwMDAwKTsKICB9CgoKCgogIFBSQm9vbCBJc0luY3JlbWVudGFsRGFtYWdlQ29u
c3RyYWluZWQoY29uc3QgbnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUpIGNvbnN0OwoKCgoKICB2
b2lkIFNsaWRlTGluZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAg
ICBuc0xpbmVCb3gqIGFMaW5lLCBuc2Nvb3JkIGFEWSk7CgoKCgoKICBQUkJvb2wgRHJhaW5PdmVy
Zmxvd0xpbmVzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICB2aXJ0dWFsIFBSSW50
biBHZXRTa2lwU2lkZXMoKSBjb25zdDsKCiAgdmlydHVhbCB2b2lkIENvbXB1dGVGaW5hbFNpemUo
Y29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhTWV0cmljcyk7CgoKCgoKCgog
IG5zcmVzdWx0IEFkZEZyYW1lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlzdCwKICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqIGFQcmV2U2libGluZyk7CgoKCgoKICB2b2lkIEZpeFBhcmVudEFuZFZpZXcobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUqIGFGcmFtZSk7CgoKCgoKCiAgbnNy
ZXN1bHQgRG9SZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFEZWxldGVkRnJhbWUpOwoKCgogIG5zcmVzdWx0
IFByZXBhcmVJbml0aWFsUmVmbG93KG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlKTsKCgogIG5z
cmVzdWx0IFByZXBhcmVTdHlsZUNoYW5nZWRSZWZsb3cobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3Rh
dGUpOwoKCgoKICBuc3Jlc3VsdCBQcmVwYXJlQ2hpbGRJbmNyZW1lbnRhbFJlZmxvdyhuc0Jsb2Nr
UmVmbG93U3RhdGUmIGFTdGF0ZSk7CgoKCgogIG5zcmVzdWx0IFByZXBhcmVSZXNpemVSZWZsb3co
bnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUpOwoKCiAgbnNyZXN1bHQgUmVmbG93RGlydHlMaW5l
cyhuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSk7CgoKICB2b2lkIFJlY292ZXJTdGF0ZUZyb20o
bnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zTGlu
ZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVjdCogYURhbWFnZVJlY3Qp
OwojIDI4MCAiLi4vLi4vYmFzZS9zcmMvbnNCbG9ja0ZyYW1lLmgiCiAgbnNyZXN1bHQgUmVmbG93
TGluZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgIG5z
TGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFLZWVwUmVmbG93
R29pbmcsCiAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYURhbWFnZURpcnR5QXJlYSA9IDAp
OwoKICBuc3Jlc3VsdCBQbGFjZUxpbmUobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAg
ICAgICAgICAgICAgICAgIG5zTGluZUxheW91dCYgYUxpbmVMYXlvdXQsCiAgICAgICAgICAgICAg
ICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUtl
ZXBSZWZsb3dHb2luZywKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFVcGRhdGVNYXhpbXVt
V2lkdGgpOwoKICBuc3Jlc3VsdCBNYXJrTGluZURpcnR5IChuc0xpbmVCb3gqIGFMaW5lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYVByZXZMaW5lKTsKCgogIHZvaWQgUG9z
dFBsYWNlTGluZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAg
ICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTaXplJiBh
TWF4RWxlbWVudFNpemUpOwoKICB2b2lkIENvbXB1dGVMaW5lTWF4RWxlbWVudFNpemUobnNCbG9j
a1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
TGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2l6ZSog
YU1heEVsZW1lbnRTaXplKTsKCgogIFBSQm9vbCBTaG91bGRKdXN0aWZ5TGluZShuc0Jsb2NrUmVm
bG93U3RhdGUmIGFTdGF0ZSwgbnNMaW5lQm94KiBhTGluZSk7CgogIHZvaWQgRGVsZXRlTGluZShu
c0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwgbnNMaW5lQm94KiBhTGluZSk7CgoKCgogIFBSQm9v
bCBTaG91bGRBcHBseVRvcE1hcmdpbihuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSk7CgogIG5zcmVzdWx0IFJl
Zmxvd0Jsb2NrRnJhbWUobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJCb29sKiBhS2VlcEdvaW5nKTsKCiAgbnNyZXN1bHQgUmVmbG93SW5saW5lRnJhbWVzKG5z
QmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFL
ZWVwTGluZUdvaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYURhbWFn
ZURpcnR5QXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFVcGRhdGVN
YXhpbXVtV2lkdGggPSAwKTsKCiAgbnNyZXN1bHQgRG9SZWZsb3dJbmxpbmVGcmFtZXMobnNCbG9j
a1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNM
aW5lTGF5b3V0JiBhTGluZUxheW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCog
YUtlZXBSZWZsb3dHb2luZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQ4
KiBhTGluZVJlZmxvd1N0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv
b2wgYVVwZGF0ZU1heGltdW1XaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgYURhbWFnZURpcnR5QXJlYSk7CgogIG5zcmVzdWx0IERvUmVmbG93SW5saW5lRnJhbWVz
QXV0byhuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJCb29sKiBhS2VlcFJlZmxvd0dvaW5nLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUlVpbnQ4KiBhTGluZVJlZmxvd1N0YXR1cywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFVcGRhdGVNYXhpbXVtV2lkdGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRGFtYWdlRGlydHlBcmVhKTsKCiAg
bnNyZXN1bHQgRG9SZWZsb3dJbmxpbmVGcmFtZXNNYWxsb2MobnNCbG9ja1JlZmxvd1N0YXRlJiBh
U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBh
TGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFLZWVw
UmVmbG93R29pbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50
OCogYUxpbmVSZWZsb3dTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJCb29sIGFVcGRhdGVNYXhpbXVtV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJCb29sIGFEYW1hZ2VEaXJ0eUFyZWEpOwoKICBuc3Jlc3VsdCBSZWZsb3dJ
bmxpbmVGcmFtZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0xpbmVMYXlvdXQmIGFMaW5lTGF5b3V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQ4KiBh
TGluZVJlZmxvd1N0YXR1cyk7CgogIG5zcmVzdWx0IFJlZmxvd0Zsb2F0ZXIobnNCbG9ja1JlZmxv
d1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc1BsYWNlaG9sZGVyRnJh
bWUqIGFQbGFjZWhvbGRlciwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVjdCYgYUNvbWJp
bmVkUmVjdFJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zTWFyZ2luJiBhTWFyZ2lu
UmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNNYXJnaW4mIGFDb21wdXRlZE9mZnNl
dHNSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkJiBhTWF4RWxlbWVudFdp
ZHRoUmVzdWx0KTsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVDb250aW51YXRpb25Gb3Io
bnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSQm9vbCYgYU1hZGVOZXdGcmFtZSk7CgogIG5zcmVzdWx0IFNwbGl0
TGluZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgbnNM
aW5lTGF5b3V0JiBhTGluZUxheW91dCwKICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBh
TGluZSwKICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSk7CgogIG5zQmxvY2tG
cmFtZSogRmluZEZvbGxvd2luZ0Jsb2NrRnJhbWUobnNJRnJhbWUqIGFGcmFtZSk7CgogIG5zcmVz
dWx0IFB1bGxGcmFtZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAg
ICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEYW1h
Z2VEZWxldGVkTGluZSwKICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqJiBhRnJhbWVSZXN1
bHQpOwoKICBuc3Jlc3VsdCBQdWxsRnJhbWUobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAg
ICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYVRvTGluZSwKICAgICAgICAgICAgICAgICAg
ICAgbnNMaW5lQm94KiogYUZyb21MaXN0LAogICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVVw
ZGF0ZUdlb21ldHJpY1BhcmVudCwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEYW1hZ2VE
ZWxldGVkTGluZXMsCiAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiYgYUZyYW1lUmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICBQUkJvb2wmIGFTdG9wUHVsbGluZyk7CgogIHZvaWQgUHVz
aExpbmVzKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlKTsKCgoKICB2aXJ0dWFsIHZvaWQgUGFp
bnRDaGlsZHJlbihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcik7Cgog
IHZvaWQgUGFpbnRGbG9hdGVycyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0KTsKCiAgdm9pZCBQcm9w
YWdhdGVSZWZsb3dEYW1hZ2UobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc1JlY3QmIGFPbGRDb21iaW5lZEFyZWEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNjb29yZCBhRGVsdGFZKTsKCiAgdm9pZCBCdWlsZEZsb2F0ZXJMaXN0KCk7
CgoKCgogIHZvaWQgUmVudW1iZXJMaXN0cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsK
CiAgUFJCb29sIFJlbnVtYmVyTGlzdHNJbihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDb250YWluZXJGcmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFPcmRpbmFsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgUFJJbnQzMiBhRGVwdGgpOwoKICBQUkJvb2wgUmVudW1iZXJMaXN0c0luQmxvY2sobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNCbG9ja0ZyYW1lKiBhQ29udGFpbmVyRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSSW50MzIqIGFPcmRpbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu
dDMyIGFEZXB0aCk7CgogIFBSQm9vbCBSZW51bWJlckxpc3RzRm9yKG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsIG5zSUZyYW1lKiBhS2lkLCBQUkludDMyKiBhT3JkaW5hbCwgUFJJbnQzMiBh
RGVwdGgpOwoKICBQUkJvb2wgRnJhbWVTdGFydHNDb3VudGVyU2NvcGUobnNJRnJhbWUqIGFGcmFt
ZSk7CgogIG5zcmVzdWx0IFVwZGF0ZUJ1bGxldFBvc2l0aW9uKG5zQmxvY2tSZWZsb3dTdGF0ZSYg
YVN0YXRlKTsKCiAgdm9pZCBSZWZsb3dCdWxsZXQobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUs
CiAgICAgICAgICAgICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYU1ldHJpY3MpOwoKCgog
IG5zTGluZUJveCogR2V0T3ZlcmZsb3dMaW5lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlbW92ZVByb3BlcnR5KSBj
b25zdDsKCiAgbnNyZXN1bHQgU2V0T3ZlcmZsb3dMaW5lcyhuc0lQcmVzQ29udGV4dCogYVByZXND
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhT3ZlcmZsb3dG
cmFtZXMpOwoKICBuc0lGcmFtZSogTGFzdENoaWxkKCk7CiMgNDQ5ICIuLi8uLi9iYXNlL3NyYy9u
c0Jsb2NrRnJhbWUuaCIKICBuc2Nvb3JkIG1Bc2NlbnQ7CgogIG5zTGluZUJveCogbUxpbmVzOwoK
CiAgbnNGcmFtZUxpc3QgbUZsb2F0ZXJzOwoKCgogIG5zQnVsbGV0RnJhbWUqIG1CdWxsZXQ7Cgog
IGZyaWVuZCBjbGFzcyBuc0Jsb2NrUmVmbG93U3RhdGU7Cgpwcml2YXRlOgogIG5zQWJzb2x1dGVD
b250YWluaW5nQmxvY2sgbUFic29sdXRlQ29udGFpbmVyOwojIDQ4NCAiLi4vLi4vYmFzZS9zcmMv
bnNCbG9ja0ZyYW1lLmgiCn07CiMgMjcgIm5zRm9ybUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDI4ICJuc0Zvcm1GcmFtZS5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiIDEKIyAxNyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zRmlsZVNwZWMuaCIgMQojIDEzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
RmlsZVNwZWMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAx
MzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAxCiMgMTMzICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNGaWxlU3BlYy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
aW5nLmgiIDEKIyAxMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMQojIDEzNSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1j
dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAxMzYgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxNjAgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxv
Y2FsRmlsZS5oIiAxCiMgMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUu
aCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAxCiMgMTcgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1lcmF0b3I7
CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNzIG5zSUZpbGUg
OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YzhjMGEwODAsIDB4MDg2OCwgMHgx
MWQzLCB7IDB4OTEsIDB4NWYsIDB4ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUsIDB4M2MgfX07
IHJldHVybiBpaWQ7fQoKCgoKCgoKICBlbnVtIHsgTk9STUFMX0ZJTEVfVFlQRSA9IDBVIH07Cgog
IGVudW0geyBESVJFQ1RPUllfVFlQRSA9IDFVIH07CiMgNTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmQoY29uc3QgY2hhciAqbm9k
ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRVbmljb2RlKGNvbnN0IFBSVW5pY2hh
ciAqbm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOb3JtYWxpemUodm9pZCkgPSAw
OwojIDg1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgQ3JlYXRlKFBSVWludDMyIHR5cGUsIFBSVWludDMyIHBlcm1pc3Npb25zKSA9IDA7CgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlYWZOYW1lKGNoYXIgKiAqYUxlYWZOYW1lKSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMZWFmTmFtZShjb25zdCBjaGFyICogYUxlYWZOYW1lKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaWNvZGVMZWFmTmFtZShQUlVuaWNoYXIgKiAq
YVVuaWNvZGVMZWFmTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VW5pY29kZUxlYWZO
YW1lKGNvbnN0IFBSVW5pY2hhciAqIGFVbmljb2RlTGVhZk5hbWUpID0gMDsKIyAxMjIgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG8o
bnNJRmlsZSAqbmV3UGFyZW50RGlyLCBjb25zdCBjaGFyICpuZXdOYW1lKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IENvcHlUb1VuaWNvZGUobnNJRmlsZSAqbmV3UGFyZW50RGlyLCBjb25zdCBQ
UlVuaWNoYXIgKm5ld05hbWUpID0gMDsKIyAxMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG9Gb2xsb3dpbmdMaW5rcyhuc0lGaWxl
ICpuZXdQYXJlbnREaXIsIGNvbnN0IGNoYXIgKm5ld05hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgQ29weVRvRm9sbG93aW5nTGlua3NVbmljb2RlKG5zSUZpbGUgKm5ld1BhcmVudERpciwg
Y29uc3QgUFJVbmljaGFyICpuZXdOYW1lKSA9IDA7CiMgMTY3ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVRvKG5zSUZpbGUgKm5ld1Bh
cmVudERpciwgY29uc3QgY2hhciAqbmV3TmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBN
b3ZlVG9Vbmljb2RlKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgUFJVbmljaGFyICpuZXdO
YW1lKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3Bhd24oY29uc3QgY2hhciAqKmFy
Z3MsIFBSVWludDMyIGNvdW50KSA9IDA7CiMgMTg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlKFBSQm9vbCByZWN1cnNpdmUpID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGVybWlzc2lvbnMoUFJVaW50MzIgKmFQZXJt
aXNzaW9ucykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGVybWlzc2lvbnMoUFJVaW50MzIg
YVBlcm1pc3Npb25zKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlcm1pc3Npb25zT2ZM
aW5rKFBSVWludDMyICphUGVybWlzc2lvbnNPZkxpbmspID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldFBlcm1pc3Npb25zT2ZMaW5rKFBSVWludDMyIGFQZXJtaXNzaW9uc09mTGluaykgPSAwOwoK
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhc3RNb2RpZmljYXRpb25EYXRlKFBSSW50NjQg
KmFMYXN0TW9kaWZpY2F0aW9uRGF0ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1v
ZGlmaWNhdGlvbkRhdGUoUFJJbnQ2NCBhTGFzdE1vZGlmaWNhdGlvbkRhdGUpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWNhdGlvbkRhdGVPZkxpbmsoUFJJbnQ2NCAqYUxh
c3RNb2RpZmljYXRpb25EYXRlT2ZMaW5rKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYXN0
TW9kaWZpY2F0aW9uRGF0ZU9mTGluayhQUkludDY0IGFMYXN0TW9kaWZpY2F0aW9uRGF0ZU9mTGlu
aykgPSAwOwojIDIyMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEZpbGVTaXplKFBSSW50NjQgKmFGaWxlU2l6ZSkgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0RmlsZVNpemUoUFJJbnQ2NCBhRmlsZVNpemUpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RmlsZVNpemVPZkxpbmsoUFJJbnQ2NCAqYUZpbGVTaXplT2ZMaW5rKSA9
IDA7CiMgMjQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0VGFyZ2V0KGNoYXIgKiAqYVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRVbmljb2RlVGFyZ2V0KFBSVW5pY2hhciAqICphVW5pY29kZVRhcmdldCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRoKGNoYXIgKiAqYVBhdGgpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0VW5pY29kZVBhdGgoUFJVbmljaGFyICogKmFVbmljb2RlUGF0aCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IElzV3JpdGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IElzUmVhZGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IElzRXhlY3V0YWJsZShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgSXNIaWRkZW4oUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IElzRGlyZWN0b3J5KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBJc0ZpbGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3lt
bGluayhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTcGVj
aWFsKFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDMxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVVuaXF1ZShjb25zdCBjaGFyICpz
dWdnZXN0ZWROYW1lLCBQUlVpbnQzMiB0eXBlLCBQUlVpbnQzMiBwZXJtaXNzaW9ucykgPSAwOwoj
IDMyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IENsb25lKG5zSUZpbGUgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEVxdWFscyhuc0lGaWxlICppbkZpbGUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgQ29udGFpbnMobnNJRmlsZSAqaW5GaWxlLCBQUkJvb2wgcmVjdXIsIFBS
Qm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJ
RmlsZSAqICphUGFyZW50KSA9IDA7CiMgMzU4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlyZWN0b3J5RW50cmllcyhuc0lTaW1wbGVF
bnVtZXJhdG9yICogKmFEaXJlY3RvcnlFbnRyaWVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRVUkwoY2hhciAqICphVVJMKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVUkwo
Y29uc3QgY2hhciAqIGFVUkwpID0gMDsKCn07CiMgODMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRmlsZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFu
YWdlci5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdl
ci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgi
IDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIiAxCiMgMjkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAyCgoKCgoKY2xhc3MgbnNJU2h1dGRv
d25MaXN0ZW5lcjsKY2xhc3MgbnNJRGlyZWN0b3J5U2VydmljZVByb3ZpZGVyOwojIDg3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VydmljZU1hbmFnZXIuaCIKY2xhc3MgbnNJU2Vydmlj
ZU1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CgogICAgc3RhdGljIGNvbnN0
IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhjZjBkZjNiMCwg
MHgzNDAxLCAweDExZDIsIHsweDgxLCAweDYzLCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlk
LCAweDdhfSB9OyByZXR1cm4gaWlkO307CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAg
UmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBhU2Vydmlj
ZSkgPSAwOwojIDExMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2Vy
LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBuc0NJ
RCYgYUNsYXNzKSA9IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25z
dCBuc0NJRCYgYUNsYXNzLCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJU3Vw
cG9ydHMqICpyZXN1bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNodXRk
b3duTGlzdGVuZXIgPSAwKSA9IDA7CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgIFJlbGVhc2VT
ZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBzZXJ2aWNlLAogICAgICAg
ICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApID0g
MDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2UoY29uc3QgY2hh
ciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSkgPSAwOwoKICAgIHZpcnR1YWwg
bnNyZXN1bHQKICAgIFVucmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElEKSA9
IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBjaGFyKiBhQ29u
dHJhY3RJRCwgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiAq
cmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3Rl
bmVyID0gMCkgPSAwOwoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShj
b25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAg
ICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCkgPSAwOwoK
fTsKIyAxNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpj
bGFzcyBuc0lTaHV0ZG93bkxpc3RlbmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgoK
ICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg
PSB7IDB4NTZkZWNhZTAsIDB4MzQwNiwgMHgxMWQyLCB7MHg4MSwgMHg2MywgMHgwMCwgMHg2MCwg
MHgwOCwgMHgxMSwgMHg5ZCwgMHg3YX0gfTsgcmV0dXJuIGlpZDt9OwoKICAgIHZpcnR1YWwgbnNy
ZXN1bHQKICAgIE9uU2h1dGRvd24oY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMqIHNl
cnZpY2UpID0gMDsKCn07CgoKCgpjbGFzcyBuc1NlcnZpY2VNYW5hZ2VyIHsKcHVibGljOgoKICAg
IHN0YXRpYyBuc3Jlc3VsdAogICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3Ms
IG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBVbnJlZ2lz
dGVyU2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNzKTsKCiAgICBzdGF0aWMgbnNyZXN1bHQKICAg
IEdldFNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAg
ICAgICAgICAgIG5zSVN1cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93
bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKICAgIHN0YXRpYyBuc3Jlc3VsdAog
ICAgUmVsZWFzZVNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMqIHNlcnZp
Y2UsCiAgICAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3Rl
bmVyID0gMCk7CgoKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2UoY29u
c3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3RhdGlj
IG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJRCk7
CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBHZXRTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFj
dElELCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqICpyZXN1
bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNodXRkb3duTGlzdGVuZXIg
PSAwKTsKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShjb25zdCBjaGFy
KiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICBu
c0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKCiAgICBzdGF0aWMg
bnNyZXN1bHQgR2V0R2xvYmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1
bHQpOwoKCgogICAgc3RhdGljIG5zcmVzdWx0IFNodXRkb3duR2xvYmFsU2VydmljZU1hbmFnZXIo
bnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwp9OwoKCgoKY2xhc3MgbnNHZXRTZXJ2aWNlQnlD
SUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc0dldFNl
cnZpY2VCeUNJRCggY29uc3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFn
ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAgOiBtQ0lEKGFDSUQpLAogICAgICAg
ICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdlcikg
KSwKICAgICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAgIH0K
CiAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9p
ZCoqICkgY29uc3Q7CiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDSUQoKSB7fTsKCiAg
ICBwcml2YXRlOgogICAgICBjb25zdCBuc0NJRCYgbUNJRDsKICAgICAgbnNDT01QdHI8bnNJU2Vy
dmljZU1hbmFnZXI+IG1TZXJ2aWNlTWFuYWdlcjsKICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsK
ICB9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldFNlcnZpY2UoIGNvbnN0
IG5zQ0lEJiBhQ0lELCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNHZXRT
ZXJ2aWNlQnlDSUQoYUNJRCwgMCwgZXJyb3IpOwogIH0KCmlubGluZQpjb25zdCBuc0dldFNlcnZp
Y2VCeUNJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBuc0NJRCYgYUNJRCwgbnNJU3VwcG9ydHMqIGFT
ZXJ2aWNlTWFuYWdlciwgbnNyZXN1bHQqIGVycm9yID0gMCApCiAgewogICAgcmV0dXJuIG5zR2V0
U2VydmljZUJ5Q0lEKGFDSUQsIGFTZXJ2aWNlTWFuYWdlciwgZXJyb3IpOwogIH0KCmNsYXNzIG5z
R2V0U2VydmljZUJ5Q29udHJhY3RJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKICB7CiAgICBw
dWJsaWM6CiAgICAgIG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNvbnRy
YWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIg
KQogICAgICAgICAgOiBtQ29udHJhY3RJRChhQ29udHJhY3RJRCksCiAgICAgICAgICAgIG1TZXJ2
aWNlTWFuYWdlciggZG9fUXVlcnlJbnRlcmZhY2UoYVNlcnZpY2VNYW5hZ2VyKSApLAogICAgICAg
ICAgICBtRXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAgICAg
IHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25z
dDsKCiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDb250cmFjdElEKCkge307CgogICAg
cHJpdmF0ZToKICAgICAgY29uc3QgY2hhciogbUNvbnRyYWN0SUQ7CiAgICAgIG5zQ09NUHRyPG5z
SVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1hbmFnZXI7CiAgICAgIG5zcmVzdWx0KiBtRXJyb3JQ
dHI7CiAgfTsKCmlubGluZQpjb25zdCBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQKZG9fR2V0U2Vy
dmljZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogIHsK
ICAgIHJldHVybiBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIDAsIGVycm9y
KTsKICB9CgppbmxpbmUKY29uc3QgbnNHZXRTZXJ2aWNlQnlDb250cmFjdElECmRvX0dldFNlcnZp
Y2UoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5hZ2Vy
LCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2aWNlQnlDb250
cmFjdElEKGFDb250cmFjdElELCBhU2VydmljZU1hbmFnZXIsIGVycm9yKTsKICB9CgpjbGFzcyBu
c0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCnsKcHVibGlj
OgogIG5zR2V0U2VydmljZUZyb21DYXRlZ29yeShjb25zdCBjaGFyKiBhQ2F0ZWdvcnksIGNvbnN0
IGNoYXIqIGFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFT
ZXJ2aWNlTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIGFFcnJv
clB0cikKICAgIDogbUNhdGVnb3J5KGFDYXRlZ29yeSksCiAgICAgIG1FbnRyeShhRW50cnkpLAog
ICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdlcikg
KSwKICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICB7CgogIH0KCiAgdmlydHVhbCBuc3Jlc3Vs
dCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwogIHZpcnR1YWwgfm5z
R2V0U2VydmljZUZyb21DYXRlZ29yeSgpIHt9Owpwcm90ZWN0ZWQ6CiAgY29uc3QgY2hhciogbUNh
dGVnb3J5OwogIGNvbnN0IGNoYXIqIG1FbnRyeTsKICBuc0NPTVB0cjxuc0lTZXJ2aWNlTWFuYWdl
cj4gbVNlcnZpY2VNYW5hZ2VyOwogIG5zcmVzdWx0KiBtRXJyb3JQdHI7Cn07CgppbmxpbmUKY29u
c3QgbnNHZXRTZXJ2aWNlRnJvbUNhdGVnb3J5CmRvX0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkoIGNv
bnN0IGNoYXIqIGNhdGVnb3J5LCBjb25zdCBjaGFyKiBlbnRyeSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNyZXN1bHQqIGVycm9yID0gMCkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2aWNl
RnJvbUNhdGVnb3J5KGNhdGVnb3J5LCBlbnRyeSwgMCwgZXJyb3IpOwogIH0KIyAzNTYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQK
TlNfTmV3U2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwojIDM2OSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiCmV4dGVybiBuc3Jl
c3VsdApOU19Jbml0WFBDT00obnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQsIG5zSUZpbGUqIGJp
bkRpcmVjdG9yeSk7CgoKCgpleHRlcm4gbnNyZXN1bHQKTlNfSW5pdFhQQ09NMihuc0lTZXJ2aWNl
TWFuYWdlciogKnJlc3VsdCwgbnNJRmlsZSogYmluRGlyZWN0b3J5LCBuc0lEaXJlY3RvcnlTZXJ2
aWNlUHJvdmlkZXIqIGFwcEZpbGVMb2NhdGlvblByb3ZpZGVyKTsKIyAzODYgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQKTlNfU2h1
dGRvd25YUENPTShuc0lTZXJ2aWNlTWFuYWdlciogc2Vydk1ncik7CiMgODMyICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVByb3BlcnRpZXMuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJv
cGVydGllcy5oIgpjbGFzcyBuc0lQcm9wZXJ0aWVzIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1
YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE
IGlpZCA9IHsweDYxYzFiM2MwLCAweGIxYmYsIDB4MTFkMywgeyAweDkzLCAweGI2LCAweDAwLCAw
eDEwLCAweDRiLCAweGEwLCAweGZkLCAweDQwIH19OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBEZWZpbmUoY29uc3QgY2hhciAqcHJvcCwgbnNJU3VwcG9ydHMgKmluaXRp
YWxWYWx1ZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVuZGVmaW5lKGNvbnN0IGNo
YXIgKnByb3ApID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXQoY29uc3QgY2hhciAq
cHJvcCwgY29uc3QgbnNJSUQgJiB1dWlkLCB2b2lkICogKnJlc3VsdCkgPSAwOwoKCgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldChjb25zdCBjaGFyICpwcm9wLCBuc0lTdXBwb3J0cyAqdmFsdWUp
ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzKGNvbnN0IGNoYXIgKnByb3AsIFBSQm9v
bCAqX3JldHZhbCkgPSAwOwoKfTsKIyAxNjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQ
cm9wZXJ0aWVzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1h
bmFnZXIuaCIgMQojIDE2NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByb3BlcnRpZXMu
aCIgMgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3SVByb3BlcnRpZXMobnNJU3VwcG9ydHMqIG91dGVy
LCBuc0lQcm9wZXJ0aWVzKiAqcmVzdWx0KQp7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga1Byb3Bl
cnRpZXNDSUQgPSB7IDB4NGRlMmJjOTAsIDB4YjFiZiwgMHgxMWQzLCB7MHg5MywgMHhiNiwgMHgw
MCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MH0gfTsKICAgIHJldHVybiBuc0NvbXBvbmVu
dE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNlKGtQcm9wZXJ0aWVzQ0lELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSVByb3BlcnRpZXM+OjpH
ZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
b2lkKiopcmVzdWx0KTsKfQojIDgzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgODM0ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAyCgppbmxpbmUgbnNyZXN1bHQKTlNf
R2V0U3BlY2lhbERpcmVjdG9yeShjb25zdCBjaGFyKiBzcGVjaWFsRGlyTmFtZSwgbnNJRmlsZSog
KnJlc3VsdCkKewogICAgbnNyZXN1bHQgcnY7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0RpcmVj
dG9yeVNlcnZpY2VDSUQgPSB7MHhmMDAxNTJkMCwweGI0MGIsMHgxMWQzLHsweDhjLCAweDljLCAw
eDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0fX07CiAgICBuc0NPTVB0cjxuc0lQcm9w
ZXJ0aWVzPiBzZXJ2ID0gZG9fR2V0U2VydmljZShrRGlyZWN0b3J5U2VydmljZUNJRCwgJnJ2KTs7
CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgbnNDT01QdHI8bnNJ
U3VwcG9ydHM+IGRpcjsKICAgIHJ2ID0gc2Vydi0+R2V0KHNwZWNpYWxEaXJOYW1lLCBuc0NPTVR5
cGVJbmZvPG5zSUZpbGU+OjpHZXRJSUQoKSwgZ2V0dGVyX0FkZFJlZnMoZGlyKSk7CiAgICBpZiAo
KChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgKnJlc3VsdCA9IChuc0lGaWxlKilk
aXIuZ2V0KCk7CiAgICBpZiAoKnJlc3VsdCkKICAgICAgICAoKnJlc3VsdCktPkFkZFJlZigpOwog
ICAgcmV0dXJuIDA7Cn0KIyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmls
ZS5oIiAyCgoKCgoKCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByaW8uaCIgMQojIDI5ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDMwICIvd2luZG93cy9oZGExMi9t
b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCiMgMSAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIiAxCiMgMzEg
Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi
IDIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJpbnJ2YWwuaCIgMQojIDMyICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJpby5oIiAyCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAxCiMgNDggIi93aW5kb3dzL2hkYTEyL21vei1j
dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluZXQuaCIKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDEgMwojIDQ5ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5o
IiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgpl
eHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIgMSAzCiMgMjIgIi91c3Iv
aW5jbHVkZS9zeXMvdWlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjMgIi91c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAyIDMKCmV4dGVybiAiQyIg
ewoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdWlvLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUv
Yml0cy91aW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjUgIi91
c3IvaW5jbHVkZS9iaXRzL3Vpby5oIiAyIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2JpdHMvdWlvLmgi
IDMKc3RydWN0IGlvdmVjCiAgewogICAgdm9pZCAqaW92X2Jhc2U7CiAgICBzaXplX3QgaW92X2xl
bjsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAyIDMKCgoKCgoKCmV4dGVybiBz
c2l6ZV90IHJlYWR2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBp
bnQgX19jb3VudCkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGV2IChp
bnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBpbnQgX19jb3VudCkKICAg
ICB0aHJvdyAoKTsKCn0KIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgojIDEg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMv
c29ja2V0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0
LmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0Lmgi
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVk
ZS9iaXRzL3NvY2tldC5oIiAyIDMKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CgoK
CgplbnVtIF9fc29ja2V0X3R5cGUKewogIFNPQ0tfU1RSRUFNID0gMSwKCgogIFNPQ0tfREdSQU0g
PSAyLAoKCiAgU09DS19SQVcgPSAzLAoKICBTT0NLX1JETSA9IDQsCgogIFNPQ0tfU0VRUEFDS0VU
ID0gNSwKCgogIFNPQ0tfUEFDS0VUID0gMTAKCgoKfTsKIyAxMzggIi91c3IvaW5jbHVkZS9iaXRz
L3NvY2tldC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCIgMSAzCiMgMjkg
Ii91c3IvaW5jbHVkZS9iaXRzL3NvY2thZGRyLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp
bnQgc2FfZmFtaWx5X3Q7CiMgMTM5ICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCgoK
c3RydWN0IHNvY2thZGRyCiAgewogICAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgY2hhciBz
YV9kYXRhWzE0XTsKICB9OwojIDE1OCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMKc3Ry
dWN0IHNvY2thZGRyX3N0b3JhZ2UKICB7CiAgICBzYV9mYW1pbHlfdCBzc19mYW1pbHk7CiAgICBf
X3VpbnQzMl90IF9fc3NfYWxpZ247CiAgICBjaGFyIF9fc3NfcGFkZGluZ1soMTI4IC0gKDIgKiBz
aXplb2YgKF9fdWludDMyX3QpKSldOwogIH07CgoKCmVudW0KICB7CiAgICBNU0dfT09CID0gMHgw
MSwKCiAgICBNU0dfUEVFSyA9IDB4MDIsCgogICAgTVNHX0RPTlRST1VURSA9IDB4MDQsCgoKCiAg
ICBNU0dfVFJZSEFSRCA9IE1TR19ET05UUk9VVEUsCgoKICAgIE1TR19DVFJVTkMgPSAweDA4LAoK
ICAgIE1TR19QUk9YWSA9IDB4MTAsCgogICAgTVNHX1RSVU5DID0gMHgyMCwKCiAgICBNU0dfRE9O
VFdBSVQgPSAweDQwLAoKICAgIE1TR19FT1IgPSAweDgwLAoKICAgIE1TR19XQUlUQUxMID0gMHgx
MDAsCgogICAgTVNHX0ZJTiA9IDB4MjAwLAoKICAgIE1TR19TWU4gPSAweDQwMCwKCiAgICBNU0df
Q09ORklSTSA9IDB4ODAwLAoKICAgIE1TR19SU1QgPSAweDEwMDAsCgogICAgTVNHX0VSUlFVRVVF
ID0gMHgyMDAwLAoKICAgIE1TR19OT1NJR05BTCA9IDB4NDAwMAoKICB9OwoKCgoKc3RydWN0IG1z
Z2hkcgogIHsKICAgIHZvaWQgKm1zZ19uYW1lOwogICAgc29ja2xlbl90IG1zZ19uYW1lbGVuOwoK
ICAgIHN0cnVjdCBpb3ZlYyAqbXNnX2lvdjsKICAgIGludCBtc2dfaW92bGVuOwoKICAgIHZvaWQg
Km1zZ19jb250cm9sOwogICAgc29ja2xlbl90IG1zZ19jb250cm9sbGVuOwoKICAgIGludCBtc2df
ZmxhZ3M7CiAgfTsKCgpzdHJ1Y3QgY21zZ2hkcgogIHsKICAgIHNpemVfdCBjbXNnX2xlbjsKCiAg
ICBpbnQgY21zZ19sZXZlbDsKICAgIGludCBjbXNnX3R5cGU7CiAgICBfX2V4dGVuc2lvbl9fIHVu
c2lnbmVkIGNoYXIgX19jbXNnX2RhdGEgW107CgogIH07CiMgMjUwICIvdXNyL2luY2x1ZGUvYml0
cy9zb2NrZXQuaCIgMwpleHRlcm4gc3RydWN0IGNtc2doZHIgKl9fY21zZ19ueHRoZHIgKHN0cnVj
dCBtc2doZHIgKl9fbWhkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgY21zZ2hkciAqX19jbXNnKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2lubGluZSBzdHJ1
Y3QgY21zZ2hkciAqCl9fY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwgc3RydWN0
IGNtc2doZHIgKl9fY21zZykgdGhyb3cgKCkKewogIGlmICgoc2l6ZV90KSBfX2Ntc2ctPmNtc2df
bGVuIDwgc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikpCgogICAgcmV0dXJuIDA7CgogIF9fY21zZyA9
IChzdHJ1Y3QgY21zZ2hkciAqKSAoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXpl
X3QpIC0gMSkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKSk7CiAgaWYgKCh1bnNp
Z25lZCBjaGFyICopIChfX2Ntc2cgKyAxKSA+PSAoKHVuc2lnbmVkIGNoYXIgKikgX19taGRyLT5t
c2dfY29udHJvbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX19t
aGRyLT5tc2dfY29udHJvbGxlbikKICAgICAgfHwgKCh1bnNpZ25lZCBjaGFyICopIF9fY21zZyAr
ICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXplX3QpIC0gMSkgJiAoc2l6ZV90KSB+
KHNpemVvZiAoc2l6ZV90KSAtIDEpKQogICAgICAgICAgPiAoKHVuc2lnbmVkIGNoYXIgKikgX19t
aGRyLT5tc2dfY29udHJvbCArIF9fbWhkci0+bXNnX2NvbnRyb2xsZW4pKSkKCiAgICByZXR1cm4g
MDsKICByZXR1cm4gX19jbXNnOwp9CgoKCgplbnVtCiAgewogICAgU0NNX1JJR0hUUyA9IDB4MDEs
CgoKICAgIFNDTV9DUkVERU5USUFMUyA9IDB4MDIsCgoKICAgIF9fU0NNX0NPTk5FQ1QgPSAweDAz
CiAgfTsKCgoKc3RydWN0IHVjcmVkCnsKICBwaWRfdCBwaWQ7CiAgdWlkX3QgdWlkOwogIGdpZF90
IGdpZDsKfTsKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29ja2V0LmgiIDEgMwoKCgojIDEgIi91
c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvYXNtL3NvY2tl
dC5oIiAyIDMKIyAyOTkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgoKc3RydWN0
IGxpbmdlcgogIHsKICAgIGludCBsX29ub2ZmOwogICAgaW50IGxfbGluZ2VyOwogIH07CiMgMzYg
Ii91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKCgoKc3RydWN0IG9zb2NrYWRkcgogIHsK
ICAgIHVuc2lnbmVkIHNob3J0IGludCBzYV9mYW1pbHk7CiAgICB1bnNpZ25lZCBjaGFyIHNhX2Rh
dGFbMTRdOwogIH07CgoKCgplbnVtCnsKICBTSFVUX1JEID0gMCwKCiAgU0hVVF9XUiwKCiAgU0hV
VF9SRFdSCgp9OwojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMwpleHRlcm4gaW50
IHNvY2tldCAoaW50IF9fZG9tYWluLCBpbnQgX190eXBlLCBpbnQgX19wcm90b2NvbCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBzb2NrZXRwYWlyIChpbnQgX19kb21haW4sIGludCBfX3R5cGUs
IGludCBfX3Byb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Zkc1syXSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kIChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3Qgc29ja2Fk
ZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGdldHNvY2tuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fYWRk
ciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fbGVuKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGNvbm5lY3QgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVj
dCBzb2NrYWRkciAqIF9fYWRkciwgc29ja2xlbl90IF9fbGVuKQogICAgIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IGdldHBlZXJuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRyICpfX3Jlc3Ry
aWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0
IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZW5kIChpbnQgX19mZCwgX19jb25zdCB2
b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgcmVjdiAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19m
bGFncykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZW5kdG8gKGludCBfX2ZkLCBfX2Nv
bnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgaW50IF9fZmxh
Z3MsIF9fY29uc3Qgc3RydWN0IHNvY2thZGRyICogX19hZGRyLAogICAgICAgICAgICAgICAgICAg
c29ja2xlbl90IF9fYWRkcl9sZW4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmVjdmZyb20g
KGludCBfX2ZkLCB2b2lkICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19mbGFn
cywKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fYWRk
ciwgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fYWRkcl9sZW4pCiAgICAgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IHNlbmRtc2cgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBtc2doZHIgKl9fbWVz
c2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmVjdm1zZyAo
aW50IF9fZmQsIHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50IF9fbGV2ZWws
IGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBf
X29wdHZhbCwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19v
cHRsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50
IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2
b2lkICpfX29wdHZhbCwgc29ja2xlbl90IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IGxpc3RlbiAoaW50IF9fZmQsIGludCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IGFjY2VwdCAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIsCiAg
ICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbikKICAgICB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgc2h1dGRvd24gKGludCBfX2ZkLCBpbnQgX19ob3cp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzZmR0eXBlIChpbnQgX19mZCwgaW50IF9fZmR0
eXBlKSB0aHJvdyAoKTsKCgp9CiMgNTAgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmluZXQuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2lu
LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMK
IyAxICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkaW50
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVk
ZS9zdGRpbnQuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc3RkaW50
LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDMwICIvdXNyL2lu
Y2x1ZGUvc3RkaW50LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEg
MwojIDMxICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDIgMwojIDUxICIvdXNyL2luY2x1ZGUvc3Rk
aW50LmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgaW50IHVpbnQxNl90OwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgoK
X19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludDY0X3Q7CgoK
CgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50X2xlYXN0OF90Owp0eXBlZGVmIHNob3J0IGludCBp
bnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBpbnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9f
CnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfbGVhc3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgdWludF9sZWFzdDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFz
dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lv
bl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50X2xlYXN0NjRfdDsKCgoKCgoK
dHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFzdDhfdDsKCgoKCgp0eXBlZGVmIGludCBpbnRfZmFz
dDE2X3Q7CnR5cGVkZWYgaW50IGludF9mYXN0MzJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxv
bmcgbG9uZyBpbnQgaW50X2Zhc3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9m
YXN0OF90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVpbnRfZmFzdDMyX3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IHVpbnRfZmFzdDY0X3Q7CiMgMTI4ICIvdXNyL2luY2x1ZGUvc3RkaW50
LmgiIDMKdHlwZWRlZiBpbnQgaW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludHB0
cl90OwojIDE0MCAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCl9fZXh0ZW5zaW9uX18KdHlwZWRl
ZiBsb25nIGxvbmcgaW50IGludG1heF90OwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBsb25nIGludCB1aW50bWF4X3Q7CiMgMjQgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgi
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1
ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgpleHRlcm4gIkMiIHsKCgplbnVtCiAgewogICAgSVBQUk9U
T19JUCA9IDAsCgogICAgSVBQUk9UT19IT1BPUFRTID0gMCwKCiAgICBJUFBST1RPX0lDTVAgPSAx
LAoKICAgIElQUFJPVE9fSUdNUCA9IDIsCgogICAgSVBQUk9UT19JUElQID0gNCwKCiAgICBJUFBS
T1RPX1RDUCA9IDYsCgogICAgSVBQUk9UT19FR1AgPSA4LAoKICAgIElQUFJPVE9fUFVQID0gMTIs
CgogICAgSVBQUk9UT19VRFAgPSAxNywKCiAgICBJUFBST1RPX0lEUCA9IDIyLAoKICAgIElQUFJP
VE9fVFAgPSAyOSwKCiAgICBJUFBST1RPX0lQVjYgPSA0MSwKCiAgICBJUFBST1RPX1JPVVRJTkcg
PSA0MywKCiAgICBJUFBST1RPX0ZSQUdNRU5UID0gNDQsCgogICAgSVBQUk9UT19SU1ZQID0gNDYs
CgogICAgSVBQUk9UT19HUkUgPSA0NywKCiAgICBJUFBST1RPX0VTUCA9IDUwLAoKICAgIElQUFJP
VE9fQUggPSA1MSwKCiAgICBJUFBST1RPX0lDTVBWNiA9IDU4LAoKICAgIElQUFJPVE9fTk9ORSA9
IDU5LAoKICAgIElQUFJPVE9fRFNUT1BUUyA9IDYwLAoKICAgIElQUFJPVE9fTVRQID0gOTIsCgog
ICAgSVBQUk9UT19FTkNBUCA9IDk4LAoKICAgIElQUFJPVE9fUElNID0gMTAzLAoKICAgIElQUFJP
VE9fQ09NUCA9IDEwOCwKCiAgICBJUFBST1RPX1JBVyA9IDI1NSwKCiAgICBJUFBST1RPX01BWAog
IH07CgoKCnR5cGVkZWYgdWludDE2X3QgaW5fcG9ydF90OwoKCmVudW0KICB7CiAgICBJUFBPUlRf
RUNITyA9IDcsCiAgICBJUFBPUlRfRElTQ0FSRCA9IDksCiAgICBJUFBPUlRfU1lTVEFUID0gMTEs
CiAgICBJUFBPUlRfREFZVElNRSA9IDEzLAogICAgSVBQT1JUX05FVFNUQVQgPSAxNSwKICAgIElQ
UE9SVF9GVFAgPSAyMSwKICAgIElQUE9SVF9URUxORVQgPSAyMywKICAgIElQUE9SVF9TTVRQID0g
MjUsCiAgICBJUFBPUlRfVElNRVNFUlZFUiA9IDM3LAogICAgSVBQT1JUX05BTUVTRVJWRVIgPSA0
MiwKICAgIElQUE9SVF9XSE9JUyA9IDQzLAogICAgSVBQT1JUX01UUCA9IDU3LAoKICAgIElQUE9S
VF9URlRQID0gNjksCiAgICBJUFBPUlRfUkpFID0gNzcsCiAgICBJUFBPUlRfRklOR0VSID0gNzks
CiAgICBJUFBPUlRfVFRZTElOSyA9IDg3LAogICAgSVBQT1JUX1NVUERVUCA9IDk1LAoKCiAgICBJ
UFBPUlRfRVhFQ1NFUlZFUiA9IDUxMiwKICAgIElQUE9SVF9MT0dJTlNFUlZFUiA9IDUxMywKICAg
IElQUE9SVF9DTURTRVJWRVIgPSA1MTQsCiAgICBJUFBPUlRfRUZTU0VSVkVSID0gNTIwLAoKCiAg
ICBJUFBPUlRfQklGRlVEUCA9IDUxMiwKICAgIElQUE9SVF9XSE9TRVJWRVIgPSA1MTMsCiAgICBJ
UFBPUlRfUk9VVEVTRVJWRVIgPSA1MjAsCgoKICAgIElQUE9SVF9SRVNFUlZFRCA9IDEwMjQsCgoK
ICAgIElQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCiAgfTsKCgoKdHlwZWRlZiB1aW50MzJfdCBp
bl9hZGRyX3Q7CnN0cnVjdCBpbl9hZGRyCiAgewogICAgaW5fYWRkcl90IHNfYWRkcjsKICB9Owoj
IDE5MCAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpzdHJ1Y3QgaW42X2FkZHIKICB7CiAg
ICB1bmlvbgogICAgICB7CiAgICAgICAgdWludDhfdCB1Nl9hZGRyOFsxNl07CiAgICAgICAgdWlu
dDE2X3QgdTZfYWRkcjE2WzhdOwogICAgICAgIHVpbnQzMl90IHU2X2FkZHIzMls0XTsKICAgICAg
fSBpbjZfdTsKCgoKICB9OwoKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2Fu
eTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3BiYWNrOwoKCgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMSAzCiMgMjEzICIvdXNyL2luY2x1ZGUv
bmV0aW5ldC9pbi5oIiAyIDMKCgoKc3RydWN0IHNvY2thZGRyX2luCiAgewogICAgc2FfZmFtaWx5
X3Qgc2luX2ZhbWlseTsKICAgIGluX3BvcnRfdCBzaW5fcG9ydDsKICAgIHN0cnVjdCBpbl9hZGRy
IHNpbl9hZGRyOwoKCiAgICB1bnNpZ25lZCBjaGFyIHNpbl96ZXJvW3NpemVvZiAoc3RydWN0IHNv
Y2thZGRyKSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplb2YgKHVuc2lnbmVkIHNo
b3J0IGludCkpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChpbl9wb3J0X3Qp
IC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcildOwog
IH07CgoKc3RydWN0IHNvY2thZGRyX2luNgogIHsKICAgIHNhX2ZhbWlseV90IHNpbjZfZmFtaWx5
OwogICAgaW5fcG9ydF90IHNpbjZfcG9ydDsKICAgIHVpbnQzMl90IHNpbjZfZmxvd2luZm87CiAg
ICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwogICAgdWludDMyX3Qgc2luNl9zY29wZV9pZDsK
ICB9OwoKCnN0cnVjdCBpcHY2X21yZXEKICB7CgogICAgc3RydWN0IGluNl9hZGRyIGlwdjZtcl9t
dWx0aWFkZHI7CgoKICAgIHVuc2lnbmVkIGludCBpcHY2bXJfaW50ZXJmYWNlOwogIH07CgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9pbi5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2JpdHMvaW4u
aCIgMwpzdHJ1Y3QgaXBfb3B0cwogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGlwX2RzdDsKICAgIGNo
YXIgaXBfb3B0c1s0MF07CiAgfTsKCgpzdHJ1Y3QgaXBfbXJlcQogIHsKICAgIHN0cnVjdCBpbl9h
ZGRyIGltcl9tdWx0aWFkZHI7CiAgICBzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOwogIH07
CgoKc3RydWN0IGlwX21yZXFuCiAgewogICAgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsK
ICAgIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNzOwogICAgaW50IGltcl9pZmluZGV4OwogIH07
CgoKc3RydWN0IGluX3BrdGluZm8KICB7CiAgICBpbnQgaXBpX2lmaW5kZXg7CiAgICBzdHJ1Y3Qg
aW5fYWRkciBpcGlfc3BlY19kc3Q7CiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfYWRkcjsKICB9Owoj
IDI1MSAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCiMgMjU5ICIvdXNyL2luY2x1ZGUv
bmV0aW5ldC9pbi5oIiAzCmV4dGVybiB1aW50MzJfdCBudG9obCAodWludDMyX3QgX19uZXRsb25n
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBu
dG9ocyAodWludDE2X3QgX19uZXRzaG9ydCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CmV4dGVybiB1aW50MzJfdCBodG9ubCAodWludDMyX3QgX19ob3N0bG9uZykK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MTZf
dCBodG9ucyAodWludDE2X3QgX19ob3N0c2hvcnQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDI2OCAi
L3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9i
eXRlc3dhcC5oIiAxIDMKIyAyNzEgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwojIDMz
MyAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpleHRlcm4gaW50IGJpbmRyZXN2cG9ydCAo
aW50IF9fc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKl9fc29ja19pbikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBiaW5kcmVzdnBvcnQ2IChpbnQgX19zb2NrZmQsIHN0cnVjdCBzb2NrYWRkcl9p
bjYgKl9fc29ja19pbikKICAgICB0aHJvdyAoKTsKIyAzNjEgIi91c3IvaW5jbHVkZS9uZXRpbmV0
L2luLmgiIDMKc3RydWN0IGluNl9wa3RpbmZvCiAgewogICAgc3RydWN0IGluNl9hZGRyIGlwaTZf
YWRkcjsKICAgIHVuc2lnbmVkIGludCBpcGk2X2lmaW5kZXg7CiAgfTsKCn0KIyA1MSAiL3dpbmRv
d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAyCiMg
NjUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlu
ZXQuaCIKIyAxICIvdXNyL2luY2x1ZGUvYXJwYS9pbmV0LmgiIDEgMwojIDIyICIvdXNyL2luY2x1
ZGUvYXJwYS9pbmV0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMg
Ii91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL25ldGluZXQv
aW4uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCgoKCgoKCgpleHRl
cm4gIkMiIHsKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2FkZHIgKF9fY29uc3QgY2hhciAqX19j
cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2xuYW9mIChzdHJ1Y3QgaW5fYWRk
ciBfX2luKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRfbWFrZWFkZHIg
KGluX2FkZHJfdCBfX25ldCwgaW5fYWRkcl90IF9faG9zdCkKICAgICB0aHJvdyAoKTsKCgpleHRl
cm4gaW5fYWRkcl90IGluZXRfbmV0b2YgKHN0cnVjdCBpbl9hZGRyIF9faW4pIHRocm93ICgpOwoK
CgpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0d29yayAoX19jb25zdCBjaGFyICpfX2NwKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSAoc3RydWN0IGluX2FkZHIgX19pbikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGluZXRfcHRvbiAoaW50IF9fYWYsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2NwLAogICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBf
X2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19jb25zdCBjaGFyICppbmV0X250b3AgKGludCBf
X2FmLCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19jcCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzb2NrbGVuX3QgX19sZW4pCiAgICAg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9hdG9uIChfX2NvbnN0IGNoYXIg
Kl9fY3AsIHN0cnVjdCBpbl9hZGRyICpfX2lucCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpp
bmV0X25ldGEgKGluX2FkZHJfdCBfX25ldCwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gY2hhciAqaW5ldF9uZXRfbnRvcCAoaW50IF9fYWYsIF9fY29uc3Qg
dm9pZCAqX19jcCwgaW50IF9fYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
Kl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpbmV0X25ldF9w
dG9uIChpbnQgX19hZiwgX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2ln
bmVkIGludCBpbmV0X25zYXBfYWRkciAoX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2J1ZiwgaW50IF9fbGVuKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnNhcF9udG9hIChpbnQgX19sZW4sIF9fY29u
c3QgdW5zaWduZWQgY2hhciAqX19jcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICpfX2J1ZikgdGhyb3cgKCk7CgoKfQojIDY2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL25ldGRi
LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKIyAxICIvdXNy
L2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9uZXRk
Yi5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgiIDEgMwojIDM5ICIvdXNy
L2luY2x1ZGUvcnBjL25ldGRiLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz
CiMgNDAgIi91c3IvaW5jbHVkZS9ycGMvbmV0ZGIuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0
MyAiL3Vzci9pbmNsdWRlL3JwYy9uZXRkYi5oIiAyIDMKCmV4dGVybiAiQyIgewoKc3RydWN0IHJw
Y2VudAp7CiAgY2hhciAqcl9uYW1lOwogIGNoYXIgKipyX2FsaWFzZXM7CiAgaW50IHJfbnVtYmVy
Owp9OwoKZXh0ZXJuIHZvaWQgc2V0cnBjZW50IChpbnQgX19zdGF5b3BlbikgdGhyb3cgKCk7CmV4
dGVybiB2b2lkIGVuZHJwY2VudCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3QgcnBjZW50
ICpnZXRycGNieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKZXh0ZXJuIHN0
cnVjdCBycGNlbnQgKmdldHJwY2J5bnVtYmVyIChpbnQgX19udW1iZXIpIHRocm93ICgpOwpleHRl
cm4gc3RydWN0IHJwY2VudCAqZ2V0cnBjZW50ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGdldHJwY2J5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc3RydWN0IHJwY2VudCAqX19y
ZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2J1ZmZlciwgc2l6
ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnBjZW50ICoq
X19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRycGNieW51bWJlcl9yIChpbnQgX19u
dW1iZXIsIHN0cnVjdCBycGNlbnQgKl9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICpfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBycGNlbnQgKipfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGdldHJwY2VudF9yIChzdHJ1Y3QgcnBjZW50ICpfX3Jlc3VsdF9idWYsIGNoYXIgKl9fYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19idWZsZW4sIHN0cnVjdCBycGNl
bnQgKipfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKfQojIDM0ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIg
MiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9uZXRkYi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs
dWRlL2JpdHMvbmV0ZGIuaCIgMwpzdHJ1Y3QgbmV0ZW50CnsKICBjaGFyICpuX25hbWU7CiAgY2hh
ciAqKm5fYWxpYXNlczsKICBpbnQgbl9hZGRydHlwZTsKICB1aW50MzJfdCBuX25ldDsKfTsKIyAz
NyAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwojIDQ3ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIg
MwpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IGhfZXJybm87CgoKZXh0ZXJuIGludCAqX19oX2Vy
cm5vX2xvY2F0aW9uICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CiMgOTggIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVybiB2b2lkIGhlcnJvciAoX19jb25z
dCBjaGFyICpfX3N0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fY29uc3QgY2hhciAqaHN0cmVycm9y
IChpbnQgX19lcnJfbnVtKSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBob3N0ZW50CnsKICBjaGFyICpo
X25hbWU7CiAgY2hhciAqKmhfYWxpYXNlczsKICBpbnQgaF9hZGRydHlwZTsKICBpbnQgaF9sZW5n
dGg7CiAgY2hhciAqKmhfYWRkcl9saXN0OwoKfTsKCgoKZXh0ZXJuIHZvaWQgc2V0aG9zdGVudCAo
aW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRob3N0ZW50ICh2b2lk
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0ZW50ICh2b2lkKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnlhZGRyIChfX2NvbnN0
IHZvaWQgKl9fYWRkciwgX19zb2NrbGVuX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBob3N0
ZW50ICpnZXRob3N0YnluYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lMiAoX19jb25zdCBjaGFyICpfX25h
bWUsIGludCBfX2FmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRob3N0ZW50X3IgKHN0
cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgZ2V0aG9zdGJ5YWRkcl9yIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg
X19hZGRyLCBfX3NvY2tsZW5fdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqX19y
ZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRl
cm4gaW50IGdldGhvc3RieW5hbWVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9f
cmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg
X19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0
aG9zdGJ5bmFtZTJfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwgaW50IF9fYWYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKCgoKCmV4dGVy
biB2b2lkIHNldG5ldGVudCAoaW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p
ZCBlbmRuZXRlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IG5ldGVudCAqZ2V0
bmV0ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdldG5ldGJ5
YWRkciAodWludDMyX3QgX19uZXQsIGludCBfX3R5cGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IHN0cnVjdCBuZXRlbnQgKmdldG5ldGJ5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93
ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRuZXRlbnRfciAoc3RydWN0IG5ldGVudCAqX19yZXN0
cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IG5ldGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0bmV0Ynlh
ZGRyX3IgKHVpbnQzMl90IF9fbmV0LCBpbnQgX190eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgbmV0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJu
b3ApIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRuZXRieW5hbWVfciAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGVu
dCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IG5ldGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCgoK
CnN0cnVjdCBzZXJ2ZW50CnsKICBjaGFyICpzX25hbWU7CiAgY2hhciAqKnNfYWxpYXNlczsKICBp
bnQgc19wb3J0OwogIGNoYXIgKnNfcHJvdG87Cn07CgoKCmV4dGVybiB2b2lkIHNldHNlcnZlbnQg
KGludCBfX3N0YXlfb3BlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kc2VydmVudCAodm9p
ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmVudCAodm9pZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFtZSAoX19jb25z
dCBjaGFyICpfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Byb3RvKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBzZXJ2ZW50ICpn
ZXRzZXJ2Ynlwb3J0IChpbnQgX19wb3J0LCBfX2NvbnN0IGNoYXIgKl9fcHJvdG8pCiAgICAgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRzZXJ2ZW50X3IgKHN0cnVjdCBzZXJ2ZW50ICpfX3Jl
c3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBzZXJ2ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50
IGdldHNlcnZieW5hbWVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Byb3RvLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZlbnQgKl9fcmVzdHJpY3QgX19y
ZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBf
X2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNlcnZlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0
c2VydmJ5cG9ydF9yIChpbnQgX19wb3J0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wcm90
bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICpfX3Jlc3RyaWN0
IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBzZXJ2ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qg
cHJvdG9lbnQKewogIGNoYXIgKnBfbmFtZTsKICBjaGFyICoqcF9hbGlhc2VzOwogIGludCBwX3By
b3RvOwp9OwoKCgpleHRlcm4gdm9pZCBzZXRwcm90b2VudCAoaW50IF9fc3RheV9vcGVuKSB0aHJv
dyAoKTsKCgpleHRlcm4gdm9pZCBlbmRwcm90b2VudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvZW50ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4g
c3RydWN0IHByb3RvZW50ICpnZXRwcm90b2J5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo
cm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1iZXIgKGludCBf
X3Byb3RvKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHByb3RvZW50X3IgKHN0cnVjdCBw
cm90b2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93
ICgpOwoKZXh0ZXJuIGludCBnZXRwcm90b2J5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAq
X19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
OwoKZXh0ZXJuIGludCBnZXRwcm90b2J5bnVtYmVyX3IgKGludCBfX3Byb3RvLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0
X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBwcm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBzZXRuZXRncmVudCAoX19jb25zdCBjaGFyICpfX25ldGdyb3VwKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBlbmRuZXRncmVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZ2V0bmV0
Z3JlbnQgKGNoYXIgKipfX3Jlc3RyaWN0IF9faG9zdHAsCiAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fdXNlcnAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZG9tYWlucCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaW5uZXRnciAo
X19jb25zdCBjaGFyICpfX25ldGdyb3VwLCBfX2NvbnN0IGNoYXIgKl9faG9zdCwKICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fdXNlciwgX19jb25zdCBjaGFyICpkb21haW4pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0bmV0Z3JlbnRfciAoY2hhciAqKl9fcmVzdHJpY3QgX19o
b3N0cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3VzZXJw
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZG9tYWlucCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBzaXpl
X3QgX19idWZsZW4pIHRocm93ICgpOwojIDM0NCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0
ZXJuIGludCByY21kIChjaGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCB1bnNpZ25lZCBzaG9ydCBp
bnQgX19ycG9ydCwKICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19s
b2N1c2VyLAogICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3JlbXVz
ZXIsCiAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQg
Kl9fcmVzdHJpY3QgX19mZDJwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJjbWRfYWYg
KGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3QsIHVuc2lnbmVkIHNob3J0IGludCBfX3Jwb3J0LAog
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2xvY3VzZXIsCiAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcmVtdXNlciwKICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAqX19y
ZXN0cmljdCBfX2ZkMnAsCiAgICAgICAgICAgICAgICAgICAgc2FfZmFtaWx5X3QgX19hZikgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmV4ZWMgKGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3Qs
IGludCBfX3Jwb3J0LAogICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19uYW1lLAogICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXNz
LAogICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAq
X19yZXN0cmljdCBfX2ZkMnApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmV4ZWNfYWYg
KGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3QsIGludCBfX3Jwb3J0LAogICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXNzLAogICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnAsCiAg
ICAgICAgICAgICAgICAgICAgIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBydXNlcm9rIChfX2NvbnN0IGNoYXIgKl9fcmhvc3QsIGludCBfX3N1c2VyLAogICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZW11c2VyLCBfX2NvbnN0IGNoYXIgKl9fbG9j
dXNlcikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcnVzZXJva19hZiAoX19jb25zdCBjaGFyICpf
X3Job3N0LCBpbnQgX19zdXNlciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVtdXNlciwgX19jb25zdCBjaGFyICpfX2xvY3VzZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgc2FfZmFtaWx5X3QgX19hZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJyZXN2cG9ydCAo
aW50ICpfX2FscG9ydCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcnJlc3Zwb3J0X2FmIChpbnQg
Kl9fYWxwb3J0LCBzYV9mYW1pbHlfdCBfX2FmKSB0aHJvdyAoKTsKCgoKCgoKc3RydWN0IGFkZHJp
bmZvCnsKICBpbnQgYWlfZmxhZ3M7CiAgaW50IGFpX2ZhbWlseTsKICBpbnQgYWlfc29ja3R5cGU7
CiAgaW50IGFpX3Byb3RvY29sOwogIHNvY2tsZW5fdCBhaV9hZGRybGVuOwogIHN0cnVjdCBzb2Nr
YWRkciAqYWlfYWRkcjsKICBjaGFyICphaV9jYW5vbm5hbWU7CiAgc3RydWN0IGFkZHJpbmZvICph
aV9uZXh0Owp9OwojIDQ0NCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuIGludCBnZXRh
ZGRyaW5mbyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc2VydmljZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgYWRkcmluZm8gKl9fcmVzdHJpY3QgX19yZXEsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqKl9fcmVzdHJpY3QgX19wYWkp
IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZyZWVhZGRyaW5mbyAoc3RydWN0IGFkZHJpbmZvICpf
X2FpKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqZ2FpX3N0cmVycm9yIChpbnQgX19lY29kZSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRuYW1laW5mbyAoX19jb25zdCBzdHJ1Y3Qgc29ja2Fk
ZHIgKl9fcmVzdHJpY3QgX19zYSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IF9f
c2FsZW4sIGNoYXIgKl9fcmVzdHJpY3QgX19ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICBz
b2NrbGVuX3QgX19ob3N0bGVuLCBjaGFyICpfX3Jlc3RyaWN0IF9fc2VydiwKICAgICAgICAgICAg
ICAgICAgICAgICAgc29ja2xlbl90IF9fc2VydmxlbiwgdW5zaWduZWQgaW50IF9fZmxhZ3MpIHRo
cm93ICgpOwoKCgp9CiMgNjggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmluZXQuaCIgMgojIDMzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHN0
cnVjdCBQUkRpciBQUkRpcjsKdHlwZWRlZiBzdHJ1Y3QgUFJEaXJFbnRyeSBQUkRpckVudHJ5Owp0
eXBlZGVmIHN0cnVjdCBQUkZpbGVEZXNjIFBSRmlsZURlc2M7CnR5cGVkZWYgc3RydWN0IFBSRmls
ZUluZm8gUFJGaWxlSW5mbzsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlSW5mbzY0IFBSRmlsZUluZm82
NDsKdHlwZWRlZiB1bmlvbiBQUk5ldEFkZHIgUFJOZXRBZGRyOwp0eXBlZGVmIHN0cnVjdCBQUklP
TWV0aG9kcyBQUklPTWV0aG9kczsKdHlwZWRlZiBzdHJ1Y3QgUFJQb2xsRGVzYyBQUlBvbGxEZXNj
Owp0eXBlZGVmIHN0cnVjdCBQUkZpbGVQcml2YXRlIFBSRmlsZVByaXZhdGU7CnR5cGVkZWYgc3Ry
dWN0IFBSU2VuZEZpbGVEYXRhIFBSU2VuZEZpbGVEYXRhOwojIDU5ICIvd2luZG93cy9oZGExMi9t
b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIFBSSW50biBQ
UkRlc2NJZGVudGl0eTsKCnN0cnVjdCBQUkZpbGVEZXNjIHsKICAgIGNvbnN0IFBSSU9NZXRob2Rz
ICptZXRob2RzOwogICAgUFJGaWxlUHJpdmF0ZSAqc2VjcmV0OwogICAgUFJGaWxlRGVzYyAqbG93
ZXIsICpoaWdoZXI7CiAgICB2b2lkICggKmR0b3IpKFBSRmlsZURlc2MgKmZkKTsKCiAgICBQUkRl
c2NJZGVudGl0eSBpZGVudGl0eTsKfTsKIyA3OSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSVHJhbnNtaXRGaWxl
RmxhZ3MgewogICAgUFJfVFJBTlNNSVRGSUxFX0tFRVBfT1BFTiA9IDAsCgogICAgUFJfVFJBTlNN
SVRGSUxFX0NMT1NFX1NPQ0tFVCA9IDEKCn0gUFJUcmFuc21pdEZpbGVGbGFnczsKIyAxMzIgIi93
aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnN0
cnVjdCBQUklQdjZBZGRyIHsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBQUlVpbnQ4
IF9TNl91OFsxNl07CiAgICAgICAgICAgICAgICBQUlVpbnQxNiBfUzZfdTE2WzhdOwogICAgICAg
ICAgICAgICAgUFJVaW50MzIgX1M2X3UzMls0XTsKICAgICAgICAgICAgICAgIFBSVWludDY0IF9T
Nl91NjRbMl07CiAgICAgICAgfSBfUzZfdW47Cn07CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJJUHY2
QWRkciBQUklQdjZBZGRyOwoKdW5pb24gUFJOZXRBZGRyIHsKICAgIHN0cnVjdCB7CiAgICAgICAg
UFJVaW50MTYgZmFtaWx5OwoKCgogICAgICAgIGNoYXIgZGF0YVsxNF07CgogICAgfSByYXc7CiAg
ICBzdHJ1Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKICAgICAgICBQUlVpbnQxNiBwb3J0
OwogICAgICAgIFBSVWludDMyIGlwOwoKCgogICAgICAgIGNoYXIgcGFkWzhdOwoKICAgIH0gaW5l
dDsKICAgIHN0cnVjdCB7CiAgICAgICAgUFJVaW50MTYgZmFtaWx5OwogICAgICAgIFBSVWludDE2
IHBvcnQ7CiAgICAgICAgUFJVaW50MzIgZmxvd2luZm87CiAgICAgICAgUFJJUHY2QWRkciBpcDsK
ICAgICAgICBQUlVpbnQzMiBzY29wZV9pZDsKICAgIH0gaXB2NjsKCiAgICBzdHJ1Y3QgewogICAg
ICAgIFBSVWludDE2IGZhbWlseTsKICAgICAgICBjaGFyIHBhdGhbMTA0XTsKICAgIH0gbG9jYWw7
Cgp9OwojIDE5MCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU29ja09wdGlvbgp7CiAgICBQUl9Tb2NrT3B0X05v
bmJsb2NraW5nLAogICAgUFJfU29ja09wdF9MaW5nZXIsCiAgICBQUl9Tb2NrT3B0X1JldXNlYWRk
ciwKICAgIFBSX1NvY2tPcHRfS2VlcGFsaXZlLAogICAgUFJfU29ja09wdF9SZWN2QnVmZmVyU2l6
ZSwKICAgIFBSX1NvY2tPcHRfU2VuZEJ1ZmZlclNpemUsCgogICAgUFJfU29ja09wdF9JcFRpbWVU
b0xpdmUsCiAgICBQUl9Tb2NrT3B0X0lwVHlwZU9mU2VydmljZSwKCiAgICBQUl9Tb2NrT3B0X0Fk
ZE1lbWJlciwKICAgIFBSX1NvY2tPcHRfRHJvcE1lbWJlciwKICAgIFBSX1NvY2tPcHRfTWNhc3RJ
bnRlcmZhY2UsCiAgICBQUl9Tb2NrT3B0X01jYXN0VGltZVRvTGl2ZSwKICAgIFBSX1NvY2tPcHRf
TWNhc3RMb29wYmFjaywKCiAgICBQUl9Tb2NrT3B0X05vRGVsYXksCiAgICBQUl9Tb2NrT3B0X01h
eFNlZ21lbnQsCiAgICBQUl9Tb2NrT3B0X0Jyb2FkY2FzdCwKICAgIFBSX1NvY2tPcHRfTGFzdAp9
IFBSU29ja09wdGlvbjsKCnR5cGVkZWYgc3RydWN0IFBSTGluZ2VyIHsKICAgICAgICBQUkJvb2wg
cG9sYXJpdHk7CiAgICAgICAgUFJJbnRlcnZhbFRpbWUgbGluZ2VyOwp9IFBSTGluZ2VyOwoKdHlw
ZWRlZiBzdHJ1Y3QgUFJNY2FzdFJlcXVlc3QgewogICAgICAgIFBSTmV0QWRkciBtY2FkZHI7CiAg
ICAgICAgUFJOZXRBZGRyIGlmYWRkcjsKfSBQUk1jYXN0UmVxdWVzdDsKCnR5cGVkZWYgc3RydWN0
IFBSU29ja2V0T3B0aW9uRGF0YQp7CiAgICBQUlNvY2tPcHRpb24gb3B0aW9uOwogICAgdW5pb24K
ICAgIHsKICAgICAgICBQUlVpbnRuIGlwX3R0bDsKICAgICAgICBQUlVpbnRuIG1jYXN0X3R0bDsK
ICAgICAgICBQUlVpbnRuIHRvczsKICAgICAgICBQUkJvb2wgbm9uX2Jsb2NraW5nOwogICAgICAg
IFBSQm9vbCByZXVzZV9hZGRyOwogICAgICAgIFBSQm9vbCBrZWVwX2FsaXZlOwogICAgICAgIFBS
Qm9vbCBtY2FzdF9sb29wYmFjazsKICAgICAgICBQUkJvb2wgbm9fZGVsYXk7CiAgICAgICAgUFJC
b29sIGJyb2FkY2FzdDsKICAgICAgICBQUlNpemUgbWF4X3NlZ21lbnQ7CiAgICAgICAgUFJTaXpl
IHJlY3ZfYnVmZmVyX3NpemU7CiAgICAgICAgUFJTaXplIHNlbmRfYnVmZmVyX3NpemU7CiAgICAg
ICAgUFJMaW5nZXIgbGluZ2VyOwogICAgICAgIFBSTWNhc3RSZXF1ZXN0IGFkZF9tZW1iZXI7CiAg
ICAgICAgUFJNY2FzdFJlcXVlc3QgZHJvcF9tZW1iZXI7CiAgICAgICAgUFJOZXRBZGRyIG1jYXN0
X2lmOwogICAgfSB2YWx1ZTsKfSBQUlNvY2tldE9wdGlvbkRhdGE7CiMgMjU2ICIvd2luZG93cy9o
ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIHN0
cnVjdCBQUklPVmVjIHsKICAgIGNoYXIgKmlvdl9iYXNlOwogICAgaW50IGlvdl9sZW47Cn0gUFJJ
T1ZlYzsKCgoKCgoKdHlwZWRlZiBlbnVtIFBSRGVzY1R5cGUKewogICAgUFJfREVTQ19GSUxFID0g
MSwKICAgIFBSX0RFU0NfU09DS0VUX1RDUCA9IDIsCiAgICBQUl9ERVNDX1NPQ0tFVF9VRFAgPSAz
LAogICAgUFJfREVTQ19MQVlFUkVEID0gNCwKICAgIFBSX0RFU0NfUElQRSA9IDUKfSBQUkRlc2NU
eXBlOwoKdHlwZWRlZiBlbnVtIFBSU2Vla1doZW5jZSB7CiAgICBQUl9TRUVLX1NFVCA9IDAsCiAg
ICBQUl9TRUVLX0NVUiA9IDEsCiAgICBQUl9TRUVLX0VORCA9IDIKfSBQUlNlZWtXaGVuY2U7Cgpl
eHRlcm4gUFJEZXNjVHlwZSBQUl9HZXREZXNjVHlwZShQUkZpbGVEZXNjICpmaWxlKTsKIyAyOTkg
Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi
CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJDbG9zZUZOKShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYg
UFJJbnQzMiAoICpQUlJlYWRGTikoUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBh
bW91bnQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJXcml0ZUZOKShQUkZpbGVEZXNjICpmZCwgY29u
c3Qgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUkF2YWls
YWJsZUZOKShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJJbnQ2NCAoICpQUkF2YWlsYWJsZTY0
Rk4pKFBSRmlsZURlc2MgKmZkKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkZzeW5jRk4pKFBSRmls
ZURlc2MgKmZkKTsKdHlwZWRlZiBQUk9mZnNldDMyICggKlBSU2Vla0ZOKShQUkZpbGVEZXNjICpm
ZCwgUFJPZmZzZXQzMiBvZmZzZXQsIFBSU2Vla1doZW5jZSBob3cpOwp0eXBlZGVmIFBST2Zmc2V0
NjQgKCAqUFJTZWVrNjRGTikoUFJGaWxlRGVzYyAqZmQsIFBST2Zmc2V0NjQgb2Zmc2V0LCBQUlNl
ZWtXaGVuY2UgaG93KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkZpbGVJbmZvRk4pKFBSRmlsZURl
c2MgKmZkLCBQUkZpbGVJbmZvICppbmZvKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkZpbGVJbmZv
NjRGTikoUFJGaWxlRGVzYyAqZmQsIFBSRmlsZUluZm82NCAqaW5mbyk7CnR5cGVkZWYgUFJJbnQz
MiAoICpQUldyaXRldkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBjb25zdCBQUklPVmVjICppb3Ys
IFBSSW50MzIgaW92X3NpemUsCiAgICBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQ
UlN0YXR1cyAoICpQUkNvbm5lY3RGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJOZXRB
ZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUkZpbGVEZXNjKiAo
ICpQUkFjY2VwdEZOKSAoCiAgICBQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyLCBQUklu
dGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkJpbmRGTikoUFJGaWxl
RGVzYyAqZmQsIGNvbnN0IFBSTmV0QWRkciAqYWRkcik7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJM
aXN0ZW5GTikoUFJGaWxlRGVzYyAqZmQsIFBSSW50biBiYWNrbG9nKTsKdHlwZWRlZiBQUlN0YXR1
cyAoICpQUlNodXRkb3duRk4pKFBSRmlsZURlc2MgKmZkLCBQUkludG4gaG93KTsKdHlwZWRlZiBQ
UkludDMyICggKlBSUmVjdkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYsIFBSSW50
MzIgYW1vdW50LAogICAgUFJJbnRuIGZsYWdzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlw
ZWRlZiBQUkludDMyICggKlBSU2VuZEZOKSAoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9p
ZCAqYnVmLCBQUkludDMyIGFtb3VudCwKICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUg
dGltZW91dCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUlJlY3Zmcm9tRk4pKAogICAgUFJGaWxlRGVz
YyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAgICBQUkludG4gZmxhZ3MsIFBSTmV0
QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQ
UlNlbmR0b0ZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBjb25zdCB2b2lkICpidWYsIFBSSW50MzIg
YW1vdW50LAogICAgUFJJbnRuIGZsYWdzLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIsIFBSSW50ZXJ2
YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50MTYgKCAqUFJQb2xsRk4pKAogICAgUFJGaWxl
RGVzYyAqZmQsIFBSSW50MTYgaW5fZmxhZ3MsIFBSSW50MTYgKm91dF9mbGFncyk7CnR5cGVkZWYg
UFJJbnQzMiAoICpQUkFjY2VwdHJlYWRGTikoCiAgICBQUkZpbGVEZXNjICpzZCwgUFJGaWxlRGVz
YyAqKm5kLCBQUk5ldEFkZHIgKipyYWRkciwKICAgIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQs
IFBSSW50ZXJ2YWxUaW1lIHQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJUcmFuc21pdGZpbGVGTiko
CiAgICAgUFJGaWxlRGVzYyAqc2QsIFBSRmlsZURlc2MgKmZkLCBjb25zdCB2b2lkICpoZWFkZXJz
LAogICAgIFBSSW50MzIgaGxlbiwgUFJUcmFuc21pdEZpbGVGbGFncyBmbGFncywgUFJJbnRlcnZh
bFRpbWUgdCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJHZXRzb2NrbmFtZUZOKShQUkZpbGVEZXNj
ICpmZCwgUFJOZXRBZGRyICphZGRyKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkdldHBlZXJuYW1l
Rk4pKFBSRmlsZURlc2MgKmZkLCBQUk5ldEFkZHIgKmFkZHIpOwp0eXBlZGVmIFBSU3RhdHVzICgg
KlBSR2V0c29ja2V0b3B0aW9uRk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIFBSU29ja2V0T3B0aW9u
RGF0YSAqZGF0YSk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJTZXRzb2NrZXRvcHRpb25GTikoCiAg
ICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJTb2NrZXRPcHRpb25EYXRhICpkYXRhKTsKdHlwZWRl
ZiBQUkludDMyICggKlBSU2VuZGZpbGVGTikoCiAgICAgICAgUFJGaWxlRGVzYyAqbmV0d29ya1Nv
Y2tldCwgUFJTZW5kRmlsZURhdGEgKnNlbmREYXRhLAogICAgICAgIFBSVHJhbnNtaXRGaWxlRmxh
Z3MgZmxhZ3MsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50biAoICpQUlJl
c2VydmVkRk4pKFBSRmlsZURlc2MgKmZkKTsKCnN0cnVjdCBQUklPTWV0aG9kcyB7CiAgICBQUkRl
c2NUeXBlIGZpbGVfdHlwZTsKICAgIFBSQ2xvc2VGTiBjbG9zZTsKICAgIFBSUmVhZEZOIHJlYWQ7
CiAgICBQUldyaXRlRk4gd3JpdGU7CiAgICBQUkF2YWlsYWJsZUZOIGF2YWlsYWJsZTsKICAgIFBS
QXZhaWxhYmxlNjRGTiBhdmFpbGFibGU2NDsKICAgIFBSRnN5bmNGTiBmc3luYzsKICAgIFBSU2Vl
a0ZOIHNlZWs7CiAgICBQUlNlZWs2NEZOIHNlZWs2NDsKICAgIFBSRmlsZUluZm9GTiBmaWxlSW5m
bzsKICAgIFBSRmlsZUluZm82NEZOIGZpbGVJbmZvNjQ7CiAgICBQUldyaXRldkZOIHdyaXRldjsK
ICAgIFBSQ29ubmVjdEZOIGNvbm5lY3Q7CiAgICBQUkFjY2VwdEZOIGFjY2VwdDsKICAgIFBSQmlu
ZEZOIGJpbmQ7CiAgICBQUkxpc3RlbkZOIGxpc3RlbjsKICAgIFBSU2h1dGRvd25GTiBzaHV0ZG93
bjsKICAgIFBSUmVjdkZOIHJlY3Y7CiAgICBQUlNlbmRGTiBzZW5kOwogICAgUFJSZWN2ZnJvbUZO
IHJlY3Zmcm9tOwogICAgUFJTZW5kdG9GTiBzZW5kdG87CiAgICBQUlBvbGxGTiBwb2xsOwogICAg
UFJBY2NlcHRyZWFkRk4gYWNjZXB0cmVhZDsKICAgIFBSVHJhbnNtaXRmaWxlRk4gdHJhbnNtaXRm
aWxlOwogICAgUFJHZXRzb2NrbmFtZUZOIGdldHNvY2tuYW1lOwogICAgUFJHZXRwZWVybmFtZUZO
IGdldHBlZXJuYW1lOwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzY7CiAgICBQUlJlc2Vy
dmVkRk4gcmVzZXJ2ZWRfZm5fNTsKICAgIFBSR2V0c29ja2V0b3B0aW9uRk4gZ2V0c29ja2V0b3B0
aW9uOwoKICAgIFBSU2V0c29ja2V0b3B0aW9uRk4gc2V0c29ja2V0b3B0aW9uOwoKICAgIFBSU2Vu
ZGZpbGVGTiBzZW5kZmlsZTsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl80OwogICAgUFJS
ZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzM7CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5fMjsK
ICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl8xOwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVk
X2ZuXzA7Cn07CiMgNDEwICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJTcGVjaWFsRkQKewogICAgUFJfU3RhbmRh
cmRJbnB1dCwKICAgIFBSX1N0YW5kYXJkT3V0cHV0LAogICAgUFJfU3RhbmRhcmRFcnJvcgp9IFBS
U3BlY2lhbEZEOwoKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX0dldFNwZWNpYWxGRChQUlNwZWNpYWxG
RCBpZCk7CiMgNDU2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJpby5oIgpleHRlcm4gUFJEZXNjSWRlbnRpdHkgUFJfR2V0VW5pcXVlSWRlbnRpdHko
Y29uc3QgY2hhciAqbGF5ZXJfbmFtZSk7CmV4dGVybiBjb25zdCBjaGFyKiBQUl9HZXROYW1lRm9y
SWRlbnRpdHkoUFJEZXNjSWRlbnRpdHkgaWRlbnQpOwpleHRlcm4gUFJEZXNjSWRlbnRpdHkgUFJf
R2V0TGF5ZXJzSWRlbnRpdHkoUFJGaWxlRGVzYyogZmQpOwpleHRlcm4gUFJGaWxlRGVzYyogUFJf
R2V0SWRlbnRpdGllc0xheWVyKFBSRmlsZURlc2MqIGZkX3N0YWNrLCBQUkRlc2NJZGVudGl0eSBp
ZCk7CiMgNDY5ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJpby5oIgpleHRlcm4gY29uc3QgUFJJT01ldGhvZHMgKiBQUl9HZXREZWZhdWx0SU9NZXRo
b2RzKHZvaWQpOwojIDQ4MCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX0NyZWF0ZUlPTGF5ZXJTdHVi
KAogICAgUFJEZXNjSWRlbnRpdHkgaWRlbnQsIGNvbnN0IFBSSU9NZXRob2RzICptZXRob2RzKTsK
IyA0OTcgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9QdXNoSU9MYXllcigKICAgIFBSRmlsZURlc2MgKmZk
X3N0YWNrLCBQUkRlc2NJZGVudGl0eSBpZCwgUFJGaWxlRGVzYyAqbGF5ZXIpOwojIDUxNCAiL3dp
bmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0
ZXJuIFBSRmlsZURlc2MqIFBSX1BvcElPTGF5ZXIoUFJGaWxlRGVzYyAqZmRfc3RhY2ssIFBSRGVz
Y0lkZW50aXR5IGlkKTsKIyA1ODggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9PcGVuKGNvbnN0IGNo
YXIgKm5hbWUsIFBSSW50biBmbGFncywgUFJJbnRuIG1vZGUpOwojIDYxNCAiL3dpbmRvd3MvaGRh
MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmls
ZURlc2MqIFBSX09wZW5GaWxlKAogICAgY29uc3QgY2hhciAqbmFtZSwgUFJJbnRuIGZsYWdzLCBQ
UkludG4gbW9kZSk7CiMgNjM3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfQ2xvc2UoUFJGaWxlRGVzYyAq
ZmQpOwojIDY3MiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfUmVhZChQUkZpbGVEZXNjICpmZCwgdm9pZCAq
YnVmLCBQUkludDMyIGFtb3VudCk7CiMgNjk2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9Xcml0ZShQUkZp
bGVEZXNjICpmZCxjb25zdCB2b2lkICpidWYsUFJJbnQzMiBhbW91bnQpOwojIDczMCAiL3dpbmRv
d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJu
IFBSSW50MzIgUFJfV3JpdGV2KAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSSU9WZWMgKmlv
diwgUFJJbnQzMiBpb3Zfc2l6ZSwKICAgIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDc1MSAi
L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK
ZXh0ZXJuIFBSU3RhdHVzIFBSX0RlbGV0ZShjb25zdCBjaGFyICpuYW1lKTsKCgoKdHlwZWRlZiBl
bnVtIFBSRmlsZVR5cGUKewogICAgUFJfRklMRV9GSUxFID0gMSwKICAgIFBSX0ZJTEVfRElSRUNU
T1JZID0gMiwKICAgIFBSX0ZJTEVfT1RIRVIgPSAzCn0gUFJGaWxlVHlwZTsKCnN0cnVjdCBQUkZp
bGVJbmZvIHsKICAgIFBSRmlsZVR5cGUgdHlwZTsKICAgIFBST2Zmc2V0MzIgc2l6ZTsKICAgIFBS
VGltZSBjcmVhdGlvblRpbWU7CiAgICBQUlRpbWUgbW9kaWZ5VGltZTsKfTsKCnN0cnVjdCBQUkZp
bGVJbmZvNjQgewogICAgUFJGaWxlVHlwZSB0eXBlOwogICAgUFJPZmZzZXQ2NCBzaXplOwogICAg
UFJUaW1lIGNyZWF0aW9uVGltZTsKICAgIFBSVGltZSBtb2RpZnlUaW1lOwp9OwojIDc5NCAiL3dp
bmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0
ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvKGNvbnN0IGNoYXIgKmZuLCBQUkZpbGVJbmZvICpp
bmZvKTsKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvNjQoY29uc3QgY2hhciAqZm4sIFBS
RmlsZUluZm82NCAqaW5mbyk7CiMgODE0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0T3BlbkZpbGVJ
bmZvKFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvICppbmZvKTsKZXh0ZXJuIFBSU3RhdHVzIFBS
X0dldE9wZW5GaWxlSW5mbzY0KFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvNjQgKmluZm8pOwoj
IDgzMyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1JlbmFtZShjb25zdCBjaGFyICpmcm9tLCBjb25zdCBj
aGFyICp0byk7CiMgODU5ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJBY2Nlc3NIb3cgewogICAgUFJfQUNDRVNT
X0VYSVNUUyA9IDEsCiAgICBQUl9BQ0NFU1NfV1JJVEVfT0sgPSAyLAogICAgUFJfQUNDRVNTX1JF
QURfT0sgPSAzCn0gUFJBY2Nlc3NIb3c7CgpleHRlcm4gUFJTdGF0dXMgUFJfQWNjZXNzKGNvbnN0
IGNoYXIgKm5hbWUsIFBSQWNjZXNzSG93IGhvdyk7CiMgOTAwICIvd2luZG93cy9oZGExMi9tb3ot
Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJPZmZzZXQzMiBQ
Ul9TZWVrKFBSRmlsZURlc2MgKmZkLCBQUk9mZnNldDMyIG9mZnNldCwgUFJTZWVrV2hlbmNlIHdo
ZW5jZSk7CmV4dGVybiBQUk9mZnNldDY0IFBSX1NlZWs2NChQUkZpbGVEZXNjICpmZCwgUFJPZmZz
ZXQ2NCBvZmZzZXQsIFBSU2Vla1doZW5jZSB3aGVuY2UpOwojIDkyMyAiL3dpbmRvd3MvaGRhMTIv
bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIg
UFJfQXZhaWxhYmxlKFBSRmlsZURlc2MgKmZkKTsKZXh0ZXJuIFBSSW50NjQgUFJfQXZhaWxhYmxl
NjQoUFJGaWxlRGVzYyAqZmQpOwojIDk0MyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1N5bmMoUFJGaWxl
RGVzYyAqZmQpOwoKCgpzdHJ1Y3QgUFJEaXJFbnRyeSB7CiAgICBjb25zdCBjaGFyICpuYW1lOwp9
OwojIDk3NSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3ByaW8uaCIKZXh0ZXJuIFBSRGlyKiBQUl9PcGVuRGlyKGNvbnN0IGNoYXIgKm5hbWUpOwojIDEw
MDAgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlv
LmgiCnR5cGVkZWYgZW51bSBQUkRpckZsYWdzIHsKICAgIFBSX1NLSVBfTk9ORSA9IDB4MCwKICAg
IFBSX1NLSVBfRE9UID0gMHgxLAogICAgUFJfU0tJUF9ET1RfRE9UID0gMHgyLAogICAgUFJfU0tJ
UF9CT1RIID0gMHgzLAogICAgUFJfU0tJUF9ISURERU4gPSAweDQKfSBQUkRpckZsYWdzOwoKZXh0
ZXJuIFBSRGlyRW50cnkqIFBSX1JlYWREaXIoUFJEaXIgKmRpciwgUFJEaXJGbGFncyBmbGFncyk7
CiMgMTAyNyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlRGlyKFBSRGlyICpkaXIpOwojIDEwNDkg
Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi
CmV4dGVybiBQUlN0YXR1cyBQUl9Na0Rpcihjb25zdCBjaGFyICpuYW1lLCBQUkludG4gbW9kZSk7
CiMgMTA2MSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX01ha2VEaXIoY29uc3QgY2hhciAqbmFtZSwgUFJJ
bnRuIG1vZGUpOwojIDEwODEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9SbURpcihjb25zdCBjaGFyICpu
YW1lKTsKIyAxMTAwICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfTmV3VURQU29ja2V0KHZvaWQpOwoj
IDExMTkgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9OZXdUQ1BTb2NrZXQodm9pZCk7CiMgMTEzOSAi
L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK
ZXh0ZXJuIFBSRmlsZURlc2MqIFBSX09wZW5VRFBTb2NrZXQoUFJJbnRuIGFmKTsKIyAxMTU5ICIv
d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpl
eHRlcm4gUFJGaWxlRGVzYyogUFJfT3BlblRDUFNvY2tldChQUkludG4gYWYpOwojIDExODMgIi93
aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4
dGVybiBQUlN0YXR1cyBQUl9Db25uZWN0KAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSTmV0
QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTIxMiAiL3dpbmRvd3MvaGRh
MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3Rh
dHVzIFBSX0dldENvbm5lY3RTdGF0dXMoY29uc3QgUFJQb2xsRGVzYyAqcGQpOwojIDEyMzYgIi93
aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4
dGVybiBQUkZpbGVEZXNjKiBQUl9BY2NlcHQoCiAgICBQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRy
ICphZGRyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxMjU4ICIvd2luZG93cy9oZGExMi9t
b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMg
UFJfQmluZChQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJOZXRBZGRyICphZGRyKTsKIyAxMjgwICIv
d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpl
eHRlcm4gUFJTdGF0dXMgUFJfTGlzdGVuKFBSRmlsZURlc2MgKmZkLCBQUkludG4gYmFja2xvZyk7
CiMgMTMwNCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU2h1dGRvd25Ib3cKewogICAgUFJfU0hVVERPV05fUkNW
ID0gMCwKICAgIFBSX1NIVVRET1dOX1NFTkQgPSAxLAogICAgUFJfU0hVVERPV05fQk9USCA9IDIK
fSBQUlNodXRkb3duSG93OwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1NodXRkb3duKFBSRmlsZURlc2Mg
KmZkLCBQUlNodXRkb3duSG93IGhvdyk7CiMgMTM0MiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfUmVjdihQ
UkZpbGVEZXNjICpmZCwgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCwKICAgICAgICAgICAgICAg
IFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTM3MyAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBS
SW50MzIgUFJfU2VuZChQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFt
b3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gZmxhZ3MsIFBSSW50
ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE0MDggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1JlY3ZGcm9tKAog
ICAgUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBSSW50biBmbGFn
cywKICAgIFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTQ0MSAi
L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK
ZXh0ZXJuIFBSSW50MzIgUFJfU2VuZFRvKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQg
KmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBSSW50biBmbGFncywKICAgIGNvbnN0IFBSTmV0QWRkciAq
YWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTQ4MSAiL3dpbmRvd3MvaGRhMTIvbW96
LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJf
VHJhbnNtaXRGaWxlKAogICAgUFJGaWxlRGVzYyAqbmV0d29ya1NvY2tldCwgUFJGaWxlRGVzYyAq
c291cmNlRmlsZSwKICAgIGNvbnN0IHZvaWQgKmhlYWRlcnMsIFBSSW50MzIgaGxlbiwgUFJUcmFu
c21pdEZpbGVGbGFncyBmbGFncywKICAgIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE1MjAg
Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi
CnN0cnVjdCBQUlNlbmRGaWxlRGF0YSB7CiAgICAgICAgUFJGaWxlRGVzYyAqZmQ7CiAgICAgICAg
UFJVaW50MzIgZmlsZV9vZmZzZXQ7CiAgICAgICAgUFJTaXplIGZpbGVfbmJ5dGVzOwoKCiAgICAg
ICAgY29uc3Qgdm9pZCAqaGVhZGVyOwogICAgICAgIFBSSW50MzIgaGxlbjsKICAgICAgICBjb25z
dCB2b2lkICp0cmFpbGVyOwogICAgICAgIFBSSW50MzIgdGxlbjsKfTsKCgpleHRlcm4gUFJJbnQz
MiBQUl9TZW5kRmlsZSgKICAgIFBSRmlsZURlc2MgKm5ldHdvcmtTb2NrZXQsIFBSU2VuZEZpbGVE
YXRhICpzZW5kRGF0YSwKICAgICAgICBQUlRyYW5zbWl0RmlsZUZsYWdzIGZsYWdzLCBQUkludGVy
dmFsVGltZSB0aW1lb3V0KTsKIyAxNTg3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9BY2NlcHRSZWFkKAog
ICAgUFJGaWxlRGVzYyAqbGlzdGVuU29jaywgUFJGaWxlRGVzYyAqKmFjY2VwdGVkU29jaywKICAg
IFBSTmV0QWRkciAqKnBlZXJBZGRyLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LCBQUkludGVy
dmFsVGltZSB0aW1lb3V0KTsKIyAxNjExICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTmV3VENQU29ja2V0
UGFpcihQUkZpbGVEZXNjICpmZHNbMl0pOwojIDE2MzEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRT
b2NrTmFtZShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKIyAxNjUzICIvd2luZG93
cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4g
UFJTdGF0dXMgUFJfR2V0UGVlck5hbWUoUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAqYWRkcik7
CgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0U29ja2V0T3B0aW9uKAogICAgUFJGaWxlRGVzYyAqZmQs
IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0YSk7CgpleHRlcm4gUFJTdGF0dXMgUFJfU2V0U29ja2V0
T3B0aW9uKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0
YSk7CiMgMTY4OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldEZESW5oZXJpdGFibGUoCiAgICBQUkZp
bGVEZXNjICpmZCwKICAgIFBSQm9vbCBpbmhlcml0YWJsZSk7CiMgMTcwOCAiL3dpbmRvd3MvaGRh
MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmls
ZURlc2MgKiBQUl9HZXRJbmhlcml0ZWRGRChjb25zdCBjaGFyICpuYW1lKTsKIyAxNzE4ICIvd2lu
ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBl
ZGVmIHN0cnVjdCBQUkZpbGVNYXAgUFJGaWxlTWFwOwoKCgoKdHlwZWRlZiBlbnVtIFBSRmlsZU1h
cFByb3RlY3QgewogICAgUFJfUFJPVF9SRUFET05MWSwKICAgIFBSX1BST1RfUkVBRFdSSVRFLAog
ICAgUFJfUFJPVF9XUklURUNPUFkKfSBQUkZpbGVNYXBQcm90ZWN0OwoKZXh0ZXJuIFBSRmlsZU1h
cCAqIFBSX0NyZWF0ZUZpbGVNYXAoCiAgICBQUkZpbGVEZXNjICpmZCwKICAgIFBSSW50NjQgc2l6
ZSwKICAgIFBSRmlsZU1hcFByb3RlY3QgcHJvdCk7CgpleHRlcm4gdm9pZCAqIFBSX01lbU1hcCgK
ICAgIFBSRmlsZU1hcCAqZm1hcCwKICAgIFBST2Zmc2V0NjQgb2Zmc2V0LAogICAgUFJVaW50MzIg
bGVuKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9NZW1Vbm1hcCh2b2lkICphZGRyLCBQUlVpbnQzMiBs
ZW4pOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlRmlsZU1hcChQUkZpbGVNYXAgKmZtYXApOwoj
IDE3NTYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9DcmVhdGVQaXBlKAogICAgUFJGaWxlRGVzYyAqKnJl
YWRQaXBlLAogICAgUFJGaWxlRGVzYyAqKndyaXRlUGlwZQopOwoKCgoKCnN0cnVjdCBQUlBvbGxE
ZXNjIHsKICAgIFBSRmlsZURlc2MqIGZkOwogICAgUFJJbnQxNiBpbl9mbGFnczsKICAgIFBSSW50
MTYgb3V0X2ZsYWdzOwp9OwojIDE4MzIgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1BvbGwoCiAgICBQUlBv
bGxEZXNjICpwZHMsIFBSSW50biBucGRzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxODc2
ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5o
IgpleHRlcm4gUFJGaWxlRGVzYyAqIFBSX05ld1BvbGxhYmxlRXZlbnQodm9pZCk7CgpleHRlcm4g
UFJTdGF0dXMgUFJfRGVzdHJveVBvbGxhYmxlRXZlbnQoUFJGaWxlRGVzYyAqZXZlbnQpOwoKZXh0
ZXJuIFBSU3RhdHVzIFBSX1NldFBvbGxhYmxlRXZlbnQoUFJGaWxlRGVzYyAqZXZlbnQpOwoKZXh0
ZXJuIFBSU3RhdHVzIFBSX1dhaXRGb3JQb2xsYWJsZUV2ZW50KFBSRmlsZURlc2MgKmV2ZW50KTsK
Cn0KIyAxOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIiAyCiMgMSAi
L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5o
IiAxCiMgMjUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcmxpbmsuaCIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIgMgoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0
cnVjdCBQUkxpYnJhcnkgUFJMaWJyYXJ5OwoKdHlwZWRlZiBzdHJ1Y3QgUFJTdGF0aWNMaW5rVGFi
bGUgewogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHZvaWQgKCpmcCkoKTsKfSBQUlN0YXRpY0xp
bmtUYWJsZTsKIyA0MyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BybGluay5oIgpleHRlcm4gUFJTdGF0dXMgUFJfU2V0TGlicmFyeVBhdGgoY29uc3Qg
Y2hhciAqcGF0aCk7CiMgNTMgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIGNoYXIqIFBSX0dldExpYnJhcnlQYXRoKHZvaWQp
OwojIDY2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJsaW5rLmgiCmV4dGVybiBjaGFyKiBQUl9HZXRMaWJyYXJ5TmFtZShjb25zdCBjaGFyICpkaXIs
IGNvbnN0IGNoYXIgKmxpYik7CgoKCgoKZXh0ZXJuIHZvaWQgUFJfRnJlZUxpYnJhcnlOYW1lKGNo
YXIgKm1lbSk7CiMgODYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFyeSogUFJfTG9hZExpYnJhcnkoY29uc3Qg
Y2hhciAqbmFtZSk7CiMgMTA3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJsaW5rLmgiCnR5cGVkZWYgZW51bSBQUkxpYlNwZWNUeXBlIHsKICAgIFBS
X0xpYlNwZWNfUGF0aG5hbWUsCiAgICBQUl9MaWJTcGVjX01hY05hbWVkRnJhZ21lbnQsCiAgICBQ
Ul9MaWJTcGVjX01hY0luZGV4ZWRGcmFnbWVudAp9IFBSTGliU3BlY1R5cGU7CgpzdHJ1Y3QgRlNT
cGVjOwoKdHlwZWRlZiBzdHJ1Y3QgUFJMaWJTcGVjIHsKICAgIFBSTGliU3BlY1R5cGUgdHlwZTsK
ICAgIHVuaW9uIHsKCiAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWU7CgoKICAgICAgICBzdHJ1
Y3QgewogICAgICAgICAgICBjb25zdCBzdHJ1Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAgICAgICAg
IGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAgfSBtYWNfbmFtZWRfZnJhZ21lbnQ7CgoKICAgICAg
ICBzdHJ1Y3QgewogICAgICAgICAgICBjb25zdCBzdHJ1Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAg
ICAgICAgIFBSVWludDMyIGluZGV4OwogICAgICAgIH0gbWFjX2luZGV4ZWRfZnJhZ21lbnQ7CiAg
ICB9IHZhbHVlOwp9IFBSTGliU3BlYzsKIyAxNTAgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFyeSAqClBSX0xv
YWRMaWJyYXJ5V2l0aEZsYWdzKAogICAgUFJMaWJTcGVjIGxpYlNwZWMsCiAgICBQUkludG4gZmxh
Z3MKKTsKIyAxNjUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1VubG9hZExpYnJhcnkoUFJMaWJyYXJ5
ICpsaWIpOwojIDE3NSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BybGluay5oIgpleHRlcm4gdm9pZCogUFJfRmluZFN5bWJvbChQUkxpYnJhcnkgKmxp
YiwgY29uc3QgY2hhciAqbmFtZSk7CiMgMTg3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiB2b2lkKiBQUl9GaW5kU3ltYm9s
QW5kTGlicmFyeShjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkxpYnJhcnkqICpsaWIpOwojIDIwMSAiL3dpbmRv
d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRl
cm4gUFJMaWJyYXJ5KiBQUl9Mb2FkU3RhdGljTGlicmFyeSgKICAgIGNvbnN0IGNoYXIgKm5hbWUs
IGNvbnN0IFBSU3RhdGljTGlua1RhYmxlICp0YWJsZSk7Cgp9CiMgMTkgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIgMgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjAgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIgMgojIDI4ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiCmNsYXNzIG5zSUxvY2FsRmlsZSA6IHB1YmxpYyBuc0lG
aWxlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv
bnN0IG5zSUlEIGlpZCA9IHsweGFhNjEwZjIwLCAweGE4ODksIDB4MTFkMywgeyAweDhjLCAweDgx
LCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0IH19OyByZXR1cm4gaWlkO30KIyA1
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgSW5pdFdpdGhQYXRoKGNvbnN0IGNoYXIgKmZpbGVQYXRoKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEluaXRXaXRoVW5pY29kZVBhdGgoY29uc3QgUFJVbmljaGFyICpmaWxlUGF0aCkg
PSAwOwojIDcyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRGb2xsb3dMaW5rcyhQUkJvb2wgKmFGb2xsb3dMaW5rcykgPSAwOwog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0Rm9sbG93TGlua3MoUFJCb29sIGFGb2xsb3dMaW5rcykgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuTlNQUkZpbGVEZXNjKFBSSW50MzIgZmxhZ3MsIFBS
SW50MzIgbW9kZSwgUFJGaWxlRGVzYyAqICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IE9wZW5BTlNJRmlsZURlc2MoY29uc3QgY2hhciAqbW9kZSwgRklMRSAqICpfcmV0dmFsKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvYWQoUFJMaWJyYXJ5ICogKl9yZXR2YWwpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlza1NwYWNlQXZhaWxhYmxlKFBSSW50NjQgKmFEaXNr
U3BhY2VBdmFpbGFibGUpID0gMDsKIyA5NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxv
Y2FsRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kUmVsYXRpdmVQYXRoKGNvbnN0IGNo
YXIgKnJlbGF0aXZlRmlsZVBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kUmVs
YXRpdmVVbmljb2RlUGF0aChjb25zdCBQUlVuaWNoYXIgKnJlbGF0aXZlRmlsZVBhdGgpID0gMDsK
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlcnNpc3RlbnREZXNjcmlwdG9yKGNoYXIgKiAq
YVBlcnNpc3RlbnREZXNjcmlwdG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQZXJzaXN0
ZW50RGVzY3JpcHRvcihjb25zdCBjaGFyICogYVBlcnNpc3RlbnREZXNjcmlwdG9yKSA9IDA7CgoK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmV2ZWFsKHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBMYXVuY2godm9pZCkgPSAwOwoKfTsKIyAyOTMgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19OZXdMb2NhbEZp
bGUoY29uc3QgY2hhciogcGF0aCwgUFJCb29sIGZvbGxvd0xpbmtzLCBuc0lMb2NhbEZpbGUqICpy
ZXN1bHQpOwpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX05ld1VuaWNvZGVMb2NhbEZpbGUoY29uc3Qg
UFJVbmljaGFyKiBwYXRoLCBQUkJvb2wgZm9sbG93TGlua3MsIG5zSUxvY2FsRmlsZSogKnJlc3Vs
dCk7CiMgMTYxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIiAyCiMgMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEKIyAxNjIgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0ZpbGVTcGVjLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAxIDMKIyAyNiAi
L3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg
MwojIDI3ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi
IDIgMwojIDYyICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9kaXJlbnQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2RpcmVudC5oIiAzCnN0cnVj
dCBkaXJlbnQKICB7CgogICAgX19pbm9fdCBkX2lubzsKICAgIF9fb2ZmX3QgZF9vZmY7CgoKCgog
ICAgdW5zaWduZWQgc2hvcnQgaW50IGRfcmVjbGVuOwogICAgdW5zaWduZWQgY2hhciBkX3R5cGU7
CiAgICBjaGFyIGRfbmFtZVsyNTZdOwogIH07CgoKc3RydWN0IGRpcmVudDY0CiAgewogICAgX19p
bm82NF90IGRfaW5vOwogICAgX19vZmY2NF90IGRfb2ZmOwogICAgdW5zaWduZWQgc2hvcnQgaW50
IGRfcmVjbGVuOwogICAgdW5zaWduZWQgY2hhciBkX3R5cGU7CiAgICBjaGFyIGRfbmFtZVsyNTZd
OwogIH07CiMgNjMgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCiMgOTggIi91c3IvaW5jbHVk
ZS9kaXJlbnQuaCIgMwplbnVtCiAgewogICAgRFRfVU5LTk9XTiA9IDAsCgogICAgRFRfRklGTyA9
IDEsCgogICAgRFRfQ0hSID0gMiwKCiAgICBEVF9ESVIgPSA0LAoKICAgIERUX0JMSyA9IDYsCgog
ICAgRFRfUkVHID0gOCwKCiAgICBEVF9MTksgPSAxMCwKCiAgICBEVF9TT0NLID0gMTIsCgogICAg
RFRfV0hUID0gMTQKCiAgfTsKIyAxMjggIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwp0eXBlZGVm
IHN0cnVjdCBfX2RpcnN0cmVhbSBESVI7CgoKCmV4dGVybiBESVIgKm9wZW5kaXIgKF9fY29uc3Qg
Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9zZWRpciAoRElSICpfX2Rp
cnApIHRocm93ICgpOwojIDE0NiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBzdHJ1
Y3QgZGlyZW50ICpyZWFkZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CiMgMTU2ICIvdXNyL2lu
Y2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIHN0cnVjdCBkaXJlbnQ2NCAqcmVhZGRpcjY0IChESVIg
Kl9fZGlycCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmVhZGRpcl9yIChESVIgKl9fcmVz
dHJpY3QgX19kaXJwLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqX19yZXN0
cmljdCBfX2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwojIDE3OSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAz
CmV4dGVybiBpbnQgcmVhZGRpcjY0X3IgKERJUiAqX19yZXN0cmljdCBfX2RpcnAsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQ2NCAqX19yZXN0cmljdCBfX2VudHJ5LAogICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHJld2luZGRpciAoRElSICpfX2RpcnApIHRocm93
ICgpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTkwICIvdXNyL2lu
Y2x1ZGUvZGlyZW50LmgiIDIgMwoKCmV4dGVybiB2b2lkIHNlZWtkaXIgKERJUiAqX19kaXJwLCBs
b25nIGludCBfX3BvcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IHRlbGxkaXIgKERJUiAq
X19kaXJwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGRpcmZkIChESVIgKl9fZGlycCkgdGhy
b3cgKCk7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMg
MjEwICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDIgMwojIDIyMCAiL3Vzci9pbmNsdWRlL2RpcmVu
dC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjIxICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDIgMwoK
CgoKCgpleHRlcm4gaW50IHNjYW5kaXIgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RpciwK
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICoqKl9fcmVzdHJpY3QgX19uYW1lbGlz
dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX3NlbGVjdG9yKSAoX19jb25zdCBzdHJ1Y3Qg
ZGlyZW50ICopLAogICAgICAgICAgICAgICAgICAgIGludCAoKl9fY21wKSAoX19jb25zdCB2b2lk
ICosIF9fY29uc3Qgdm9pZCAqKSkgdGhyb3cgKCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvZGlyZW50
LmgiIDMKZXh0ZXJuIGludCBzY2FuZGlyNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rp
ciwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQ2NCAqKipfX3Jlc3RyaWN0IF9f
bmFtZWxpc3QsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX3NlbGVjdG9yKSAoX19jb25z
dCBzdHJ1Y3QgZGlyZW50NjQgKiksCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX2NtcCkg
KF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBhbHBoYXNvcnQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDI2OSAiL3Vzci9pbmNsdWRl
L2RpcmVudC5oIiAzCmV4dGVybiBpbnQgYWxwaGFzb3J0NjQgKF9fY29uc3Qgdm9pZCAqX19lMSwg
X19jb25zdCB2b2lkICpfX2UyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgoKCmV4dGVybiBpbnQgdmVyc2lvbnNvcnQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19j
b25zdCB2b2lkICpfX2UyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwojIDI5MCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBpbnQgdmVyc2lvbnNvcnQ2
NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMzAwICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi
IDMKZXh0ZXJuIF9fc3NpemVfdCBnZXRkaXJlbnRyaWVzIChpbnQgX19mZCwgY2hhciAqX19yZXN0
cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uYnl0
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmZfdCAqX19yZXN0cmljdCBf
X2Jhc2VwKSB0aHJvdyAoKTsKIyAzMTYgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4g
X19zc2l6ZV90IGdldGRpcmVudHJpZXM2NCAoaW50IF9fZmQsIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uYnl0ZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgKl9fcmVzdHJpY3QgX19i
YXNlcCkgdGhyb3cgKCk7CgoKCgp9CiMgMTc5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNG
aWxlU3BlYy5oIiAyCiMgMTk3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5o
IgpjbGFzcyBuc0ZpbGVTcGVjOwpjbGFzcyBuc0ZpbGVQYXRoOwpjbGFzcyBuc0ZpbGVVUkw7CmNs
YXNzIG5zTlNQUlBhdGg7CmNsYXNzIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yOwoKCgoKY2xh
c3MgbnNPdXRwdXRTdHJlYW07CmNsYXNzIG5zSW5wdXRTdHJlYW07CmNsYXNzIG5zSU91dHB1dFN0
cmVhbTsKY2xhc3MgbnNJSW5wdXRTdHJlYW07CmNsYXNzIG5zT3V0cHV0RmlsZVN0cmVhbTsKY2xh
c3MgbnNJbnB1dEZpbGVTdHJlYW07CmNsYXNzIG5zT3V0cHV0Q29uc29sZVN0cmVhbTsKCmNsYXNz
IG5zU3RyaW5nOwoKY2xhc3MgbnNJVW5pY29kZUVuY29kZXI7CmNsYXNzIG5zSVVuaWNvZGVEZWNv
ZGVyOwojIDIyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKbnNyZXN1
bHQgbnNfZmlsZV9jb252ZXJ0X3Jlc3VsdChQUkludDMyIG5hdGl2ZUVycik7CgoKCmNsYXNzIG5z
QXV0b0NTdHJpbmcKIyAyNDcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgi
CnsKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F1dG9DU3RyaW5n
KGNvbnN0IG5zU3RyaW5nJiBvdGhlcikgOiBtQ1N0cmluZyhvdGhlci5Ub05ld0NTdHJpbmcoKSkg
e30KICAgIHZpcnR1YWwgfm5zQXV0b0NTdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBjb25zdCB7IHJldHVybiBtQ1N0cmluZzsg
fQoKCgoKcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBtQ1N0cmluZzsKfTsKCgpjbGFzcyBuc1NpbXBsZUNoYXJTdHJpbmcKCgoKewpwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZygpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpbXBsZUNoYXJTdHJpbmcoY29uc3Qg
Y2hhciopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpbXBsZUNoYXJTdHJp
bmcoY29uc3QgbnNTdHJpbmcmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNT
aW1wbGVDaGFyU3RyaW5nKGNvbnN0IG5zU2ltcGxlQ2hhclN0cmluZyYpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc1NpbXBsZUNoYXJTdHJpbmcoY29uc3QgY2hhciogaW5EYXRh
LCBQUlVpbnQzMiBpbkxlbmd0aCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+
bnNTaW1wbGVDaGFyU3RyaW5nKCk7CgogICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBjaGFyKik7
CiAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zU3RyaW5nJik7CiAgICB2b2lkIG9wZXJhdG9y
ID0gKGNvbnN0IG5zU2ltcGxlQ2hhclN0cmluZyYpOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBjb25zdCB7IHJldHVybiBtRGF0YSA/IG1E
YXRhLT5tU3RyaW5nIDogMDsgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YXRvciBjaGFyKiAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsbG9jRGF0YShMZW5ndGgoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbURhdGEgPyBtRGF0YS0+bVN0
cmluZyA6IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIFBSQm9vbCBv
cGVyYXRvciA9PSAoY29uc3QgY2hhciopOwogICAgUFJCb29sIG9wZXJhdG9yID09IChjb25zdCBu
c1N0cmluZyYpOwogICAgUFJCb29sIG9wZXJhdG9yID09IChjb25zdCBuc1NpbXBsZUNoYXJTdHJp
bmcmKTsKCiAgICB2b2lkIG9wZXJhdG9yICs9IChjb25zdCBjaGFyKiBpblN0cmluZyk7CiAgICBu
c1NpbXBsZUNoYXJTdHJpbmcgb3BlcmF0b3IgKyAoY29uc3QgY2hhciogaW5TdHJpbmcpIGNvbnN0
OwoKICAgIGNoYXIgb3BlcmF0b3IgW10oaW50IGkpIGNvbnN0IHsgcmV0dXJuIG1EYXRhID8gbURh
dGEtPm1TdHJpbmdbaV0gOiAnXDAnOyB9CiAgICBjaGFyJiBvcGVyYXRvciBbXShpbnQgaSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGkgPj0gKGludClMZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZWFsbG9jRGF0YSgoUFJVaW50MzIpaSArIDEpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1EYXRhLT5tU3RyaW5nW2ldOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICBjaGFyJiBvcGVyYXRvciBbXSh1
bnNpZ25lZCBpbnQgaSkgeyByZXR1cm4gKCp0aGlzKVsoaW50KWldOyB9CgogICAgdm9pZCBDYXRl
bmF0ZShjb25zdCBjaGFyKiBpblN0cmluZzEsIGNvbnN0IGNoYXIqIGluU3RyaW5nMik7CgogICAg
dm9pZCBTZXRUb0VtcHR5KCk7CiAgICBQUkJvb2wgSXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIExl
bmd0aCgpID09IDA7IH0KCiAgICBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtRGF0
YSA/IG1EYXRhLT5tTGVuZ3RoIDogMDsgfQogICAgdm9pZCBTZXRMZW5ndGgoUFJVaW50MzIgaW5M
ZW5ndGgpIHsgUmVhbGxvY0RhdGEoaW5MZW5ndGgpOyB9CiAgICB2b2lkIENvcHlGcm9tKGNvbnN0
IGNoYXIqIGluRGF0YSwgUFJVaW50MzIgaW5MZW5ndGgpOwogICAgdm9pZCBMZWFmUmVwbGFjZShj
aGFyIGluU2VwYXJhdG9yLCBjb25zdCBjaGFyKiBpbkxlYWZOYW1lKTsKICAgIGNoYXIqIEdldExl
YWYoY2hhciBpblNlcGFyYXRvcikgY29uc3Q7CiAgICB2b2lkIFVuZXNjYXBlKCk7Cgpwcm90ZWN0
ZWQ6CgogICAgdm9pZCBBZGRSZWZEYXRhKCk7CiAgICB2b2lkIFJlbGVhc2VEYXRhKCk7CiAgICB2
b2lkIFJlYWxsb2NEYXRhKFBSVWludDMyIGluTGVuZ3RoKTsKCgoKCgpwcm90ZWN0ZWQ6CgogICAg
c3RydWN0IERhdGEgewogICAgICAgIGludCBtUmVmQ291bnQ7CiAgICAgICAgUFJVaW50MzIgbUxl
bmd0aDsKICAgICAgICBjaGFyIG1TdHJpbmdbMV07CiAgICAgICAgfTsKICAgIERhdGEqIG1EYXRh
Owp9OwoKCmNsYXNzIG5zRmlsZVNwZWMKCgoKewogICAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zRmlsZVNwZWMoKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zRmlsZVNwZWMoY29uc3QgY2hhciogaW5OYXRpdmVQYXRoLCBQUkJvb2wgaW5DcmVh
dGVEaXJzID0gMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlU3BlYyhj
b25zdCBuc1N0cmluZyYgaW5OYXRpdmVQYXRoLCBQUkJvb2wgaW5DcmVhdGVEaXJzID0gMCk7CgoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKGNvbnN0IG5zRmlsZVBh
dGgmIGluUGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlU3BlYyhj
b25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0ZpbGVTcGVjKGNvbnN0IG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yJiBpblVSTCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlU3BlYyhjb25zdCBuc0ZpbGVTcGVjJiBp
blBhdGgpOwogICAgICAgIHZpcnR1YWwgfm5zRmlsZVNwZWMoKTsKCgogICAgICAgIHZvaWQgb3Bl
cmF0b3IgPSAoY29uc3QgY2hhciogaW5OYXRpdmVQYXRoKTsKICAgICAgICB2b2lkIG9wZXJhdG9y
ID0gKGNvbnN0IG5zU3RyaW5nJiBpbk5hdGl2ZVBhdGgpOwoKICAgICAgICB2b2lkIG9wZXJhdG9y
ID0gKGNvbnN0IG5zRmlsZVBhdGgmIGluUGF0aCk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChj
b25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5z
RmlsZVNwZWMmIGluT3RoZXIpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNQZXJz
aXN0ZW50RmlsZURlc2NyaXB0b3ImIGluT3RoZXIpOwoKICAgICAgICBQUkJvb2wgb3BlcmF0b3Ig
PT0oY29uc3QgbnNGaWxlU3BlYyYgaW5PdGhlcikgY29uc3Q7CiAgICAgICAgUFJCb29sIG9wZXJh
dG9yICE9KGNvbnN0IG5zRmlsZVNwZWMmIGluT3RoZXIpIGNvbnN0OwojIDM3NCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgICAgIGNvbnN0IGNoYXIqIEdldENTdHJp
bmcoKSBjb25zdDsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciBj
b25zdCBjaGFyKiAoKSBjb25zdCB7IHJldHVybiBHZXRDU3RyaW5nKCk7IH0KCgoKICAgICAgIGNv
bnN0IGNoYXIqIEdldE5hdGl2ZVBhdGhDU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gR2V0Q1N0cmlu
ZygpOyB9CgoKCiAgICAgICB2b2lkIEdldE5hdGl2ZVBhdGhTdHJpbmcobnNTdHJpbmcgJm5hdGl2
ZVBhdGhTdHJpbmcpOwoKICAgICAgIFBSQm9vbCBJc0NoaWxkT2YobnNGaWxlU3BlYyAmcG9zc2li
bGVQYXJlbnQpOwojIDQyMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIK
ICAgICAgICBQUkJvb2wgVmFsaWQoKSBjb25zdCB7IHJldHVybiAoISgoRXJyb3IoKSkgJiAweDgw
MDAwMDAwKSk7IH0KICAgICAgICBuc3Jlc3VsdCBFcnJvcigpIGNvbnN0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1QYXRoLklzRW1wdHkoKSAmJiAoISgobUVycm9yKSAmIDB4ODAwMDAwMDApKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobnNGaWxlU3BlYyopdGhpcyktPm1F
cnJvciA9ICgoKG5zcmVzdWx0KSAweEMxRjMwMDAwKSArIDEpOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgUFJCb29sIEZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIChQUkJvb2wp
KChFcnJvcigpKSAmIDB4ODAwMDAwMDApOyB9CgoKCgoKICAgICAgICBjaGFyKiBHZXRMZWFmTmFt
ZSgpIGNvbnN0OwoKCiAgICAgICAgdm9pZCBHZXRMZWFmTmFtZShuc1N0cmluZyAmbmF0aXZlUGF0
aFN0cmluZyk7CiMgNDUyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgog
ICAgICAgIHZvaWQgU2V0TGVhZk5hbWUoY29uc3QgY2hhciogaW5MZWFmTmFtZSk7CiAgICAgICAg
dm9pZCBTZXRMZWFmTmFtZShjb25zdCBuc1N0cmluZyYgaW5MZWFmTmFtZSk7CgoKCgoKCgogICAg
ICAgIHZvaWQgR2V0UGFyZW50KG5zRmlsZVNwZWMmIG91dFNwZWMpIGNvbnN0OwojIDQ3MCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgICAgICB0eXBlZGVmIFBSVWlu
dDMyIFRpbWVTdGFtcDsKCgoKCgogICAgICAgIHZvaWQgR2V0TW9kRGF0ZShUaW1lU3RhbXAmIG91
dFN0YW1wKSBjb25zdDsKCiAgICAgICAgUFJCb29sIE1vZERhdGVDaGFuZ2VkKGNvbnN0IFRpbWVT
dGFtcCYgb2xkU3RhbXApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3RhbXAgbmV3U3RhbXA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldE1vZERhdGUobmV3U3RhbXApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3U3RhbXAgIT0gb2xk
U3RhbXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICBQUlVpbnQz
MiBHZXRGaWxlU2l6ZSgpIGNvbnN0OwogICAgICAgIFBSSW50NjQgR2V0RGlza1NwYWNlQXZhaWxh
YmxlKCkgY29uc3Q7CgogICAgICAgIG5zRmlsZVNwZWMgb3BlcmF0b3IgKyAoY29uc3QgY2hhciog
aW5SZWxhdGl2ZVVuaXhQYXRoKSBjb25zdDsKICAgICAgICBuc0ZpbGVTcGVjIG9wZXJhdG9yICsg
KGNvbnN0IG5zU3RyaW5nJiBpblJlbGF0aXZlVW5peFBhdGgpIGNvbnN0OwojIDQ5OSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgICAgICB2b2lkIG9wZXJhdG9yICs9
IChjb25zdCBjaGFyKiBpblJlbGF0aXZlVW5peFBhdGgpOwoKICAgICAgICB2b2lkIG9wZXJhdG9y
ICs9IChjb25zdCBuc1N0cmluZyYgaW5SZWxhdGl2ZVVuaXhQYXRoKTsKCiAgICAgICAgdm9pZCBN
YWtlVW5pcXVlKCk7CiAgICAgICAgdm9pZCBNYWtlVW5pcXVlKGNvbnN0IGNoYXIqIGluU3VnZ2Vz
dGVkTGVhZk5hbWUpOwogICAgICAgIHZvaWQgTWFrZVVuaXF1ZShjb25zdCBuc1N0cmluZyYgaW5T
dWdnZXN0ZWRMZWFmTmFtZSk7CgoKICAgICAgICBQUkJvb2wgSXNEaXJlY3RvcnkoKSBjb25zdDsK
ICAgICAgICBQUkJvb2wgSXNGaWxlKCkgY29uc3Q7CiAgICAgICAgUFJCb29sIEV4aXN0cygpIGNv
bnN0OwoKICAgICAgICBQUkJvb2wgSXNIaWRkZW4oKSBjb25zdDsKCiAgICAgICAgUFJCb29sIElz
U3ltbGluaygpIGNvbnN0OwoKCgoKCgoKICAgICAgICBuc3Jlc3VsdCBSZXNvbHZlU3ltbGluayhQ
UkJvb2wmIHdhc1N5bWxpbmspOwoKICAgICAgICB2b2lkIENyZWF0ZURpcmVjdG9yeShpbnQgbW9k
ZSA9IDA3NzUgKTsKICAgICAgICB2b2lkIENyZWF0ZURpcihpbnQgbW9kZSA9IDA3NzUpIHsgQ3Jl
YXRlRGlyZWN0b3J5KG1vZGUpOyB9CgogICAgICAgIHZvaWQgRGVsZXRlKFBSQm9vbCBpblJlY3Vy
c2l2ZSkgY29uc3Q7CiAgICAgICAgbnNyZXN1bHQgVHJ1bmNhdGUoUFJJbnQzMiBhTmV3TGVuZ3Ro
KSBjb25zdDsKICAgICAgICB2b2lkIFJlY3Vyc2l2ZUNvcHkobnNGaWxlU3BlYyBuZXdEaXIpIGNv
bnN0OwoKICAgICAgICBuc3Jlc3VsdCBSZW5hbWUoY29uc3QgY2hhciogaW5OZXdOYW1lKTsKICAg
ICAgICBuc3Jlc3VsdCBSZW5hbWUoY29uc3QgbnNTdHJpbmcmIGluTmV3TmFtZSk7CiAgICAgICAg
bnNyZXN1bHQgQ29weVRvRGlyKGNvbnN0IG5zRmlsZVNwZWMmIGluTmV3UGFyZW50RGlyZWN0b3J5
KSBjb25zdDsKICAgICAgICBuc3Jlc3VsdCBNb3ZlVG9EaXIoY29uc3QgbnNGaWxlU3BlYyYgaW5O
ZXdQYXJlbnREaXJlY3RvcnkpOwogICAgICAgIG5zcmVzdWx0IEV4ZWN1dGUoY29uc3QgY2hhciog
YXJncykgY29uc3Q7CiAgICAgICAgbnNyZXN1bHQgRXhlY3V0ZShjb25zdCBuc1N0cmluZyYgYXJn
cykgY29uc3Q7CgoKCgoKICAgIHByb3RlY3RlZDoKCgogICAgICAgUFJVbmljaGFyKiBDb252ZXJ0
RnJvbUZpbGVTeXN0ZW1DaGFyc2V0KGNvbnN0IGNoYXIgKmluU3RyaW5nKTsKICAgICAgIHN0YXRp
YyB2b2lkIEdldEZpbGVTeXN0ZW1DaGFyc2V0KG5zU3RyaW5nICYgZmlsZVN5c3RlbUNoYXJzZXQp
OwoKCgoKCiAgICBwcm90ZWN0ZWQ6CgoKCiAgICAgICB2b2lkIENsZWFyKCk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBuc0ZpbGVQYXRoOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBuc0ZpbGVVUkw7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIG5zRGlyZWN0b3J5SXRlcmF0b3I7CgoK
CiAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5nIG1QYXRoOwogICAgICAgIG5zcmVzdWx0IG1FcnJv
cjsKCn07CgoKCnR5cGVkZWYgbnNGaWxlU3BlYyBuc05hdGl2ZUZpbGVTcGVjOwoKCmNsYXNzIG5z
RmlsZVVSTAoKCgoKewogICAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zRmlsZVVSTChjb25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0ZpbGVVUkwoY29uc3QgY2hhciogaW5VUkxTdHJpbmcsIFBSQm9vbCBpbkNy
ZWF0ZURpcnMgPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVVUkwo
Y29uc3QgbnNTdHJpbmcmIGluVVJMU3RyaW5nLCBQUkJvb2wgaW5DcmVhdGVEaXJzID0gMCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlVVJMKGNvbnN0IG5zRmlsZVBhdGgm
IGluUGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlVVJMKGNvbnN0
IG5zRmlsZVNwZWMmIGluUGF0aCk7CiAgICAgICAgdmlydHVhbCB+bnNGaWxlVVJMKCk7CgoKCgoK
ICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zRmlsZVVSTCYgaW5VUkwpOwogICAgICAg
IHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgY2hhciogaW5VUkxTdHJpbmcpOwogICAgICAgIHZvaWQg
b3BlcmF0b3IgPSAoY29uc3QgbnNTdHJpbmcmIGluVVJMU3RyaW5nKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNBdXRvQ1N0cmluZyBzdHJpbmcoaW5VUkxTdHJpbmcpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqdGhpcyA9IHN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc0ZpbGVQYXRoJiBpbk90
aGVyKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zRmlsZVNwZWMmIGluT3RoZXIp
OwoKICAgICAgICB2b2lkIG9wZXJhdG9yICs9KGNvbnN0IGNoYXIqIGluUmVsYXRpdmVVbml4UGF0
aCk7CiAgICAgICAgbnNGaWxlVVJMIG9wZXJhdG9yICsoY29uc3QgY2hhciogaW5SZWxhdGl2ZVVu
aXhQYXRoKSBjb25zdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciBj
b25zdCBjaGFyKiAoKSBjb25zdCB7IHJldHVybiAoY29uc3QgY2hhciopbVVSTDsgfQogICAgICAg
IGNvbnN0IGNoYXIqIEdldFVSTFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBjaGFyKilt
VVJMOyB9CgogICAgICAgIGNvbnN0IGNoYXIqIEdldEFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
KGNvbnN0IGNoYXIqKW1VUkw7IH0KIyA2MTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Zp
bGVTcGVjLmgiCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnJpZW5kIGNsYXNzIG5zRmlsZVBhdGg7CiAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5nIG1VUkw7
CgoKCgoKCn07CgoKY2xhc3MgbnNGaWxlUGF0aAoKCgoKewogICAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVBhdGgoY29uc3QgbnNGaWxlUGF0aCYgaW5QYXRo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVQYXRoKGNvbnN0IGNoYXIq
IGluVW5peFBhdGhTdHJpbmcsIFBSQm9vbCBpbkNyZWF0ZURpcnMgPSAwKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0ZpbGVQYXRoKGNvbnN0IG5zU3RyaW5nJiBpblVuaXhQYXRo
U3RyaW5nLCBQUkJvb2wgaW5DcmVhdGVEaXJzID0gMCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNGaWxlUGF0aChjb25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0ZpbGVQYXRoKGNvbnN0IG5zRmlsZVNwZWMmIGluUGF0aCk7
CiAgICAgICAgdmlydHVhbCB+bnNGaWxlUGF0aCgpOwoKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1cm4gbVBhdGg7IH0K
CgoKCiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc0ZpbGVQYXRoJiBpblBhdGgpOwog
ICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgY2hhciogaW5Vbml4UGF0aFN0cmluZyk7CiAg
ICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1N0cmluZyYgaW5Vbml4UGF0aFN0cmluZykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zQXV0b0NTdHJpbmcgc3RyaW5nKGluVW5peFBhdGhTdHJpbmcp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHN0cmluZzsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChj
b25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5z
RmlsZVNwZWMmIGluT3RoZXIpOwoKICAgICAgICB2b2lkIG9wZXJhdG9yICs9KGNvbnN0IGNoYXIq
IGluUmVsYXRpdmVVbml4UGF0aCk7CiAgICAgICAgbnNGaWxlUGF0aCBvcGVyYXRvciArKGNvbnN0
IGNoYXIqIGluUmVsYXRpdmVVbml4UGF0aCkgY29uc3Q7CiMgNjc0ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgogICAgcHJpdmF0ZToKCiAgICAgICAgbnNTaW1wbGVDaGFy
U3RyaW5nIG1QYXRoOwoKCgoKCn07CgoKY2xhc3MgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3IK
CgoKCgp7CiAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNQZXJz
aXN0ZW50RmlsZURlc2NyaXB0b3IoKSB7fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvcihjb25zdCBuc1BlcnNpc3RlbnRGaWxlRGVzY3Jp
cHRvciYgaW5FbmNvZGVkRGF0YSk7CiAgICAgICAgdmlydHVhbCB+bnNQZXJzaXN0ZW50RmlsZURl
c2NyaXB0b3IoKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zUGVyc2lzdGVudEZp
bGVEZXNjcmlwdG9yJiBpbkVuY29kZWREYXRhKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yKGNvbnN0IG5zRmlsZVNwZWMmIGluU3Bl
Yyk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc0ZpbGVTcGVjJiBpblNwZWMpOwoK
CgoKICAgICAgICBmcmllbmQgbnNyZXN1bHQgUmVhZChuc0lJbnB1dFN0cmVhbSogYVN0cmVhbSwg
bnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImKTsKICAgICAgICBmcmllbmQgbnNyZXN1bHQgV3Jp
dGUobnNJT3V0cHV0U3RyZWFtKiBhU3RyZWFtLCBjb25zdCBuc1BlcnNpc3RlbnRGaWxlRGVzY3Jp
cHRvciYpOwoKICAgICAgICBmcmllbmQgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3IgPj4gKG5zSW5w
dXRTdHJlYW0mLCBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvciYpOwoKICAgICAgICBmcmllbmQg
bnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChuc091dHB1dFN0cmVhbSYsIGNvbnN0IG5zUGVy
c2lzdGVudEZpbGVEZXNjcmlwdG9yJik7CgogICAgICAgIGZyaWVuZCBjbGFzcyBuc0ZpbGVTcGVj
OwoKICAgICAgICB2b2lkIEdldERhdGEobnNTaW1wbGVDaGFyU3RyaW5nJiBvdXREYXRhKSBjb25z
dDsKICAgICAgICB2b2lkIFNldERhdGEoY29uc3QgbnNTaW1wbGVDaGFyU3RyaW5nJiBpbkRhdGEp
OwogICAgICAgIHZvaWQgR2V0RGF0YShuc1NpbXBsZUNoYXJTdHJpbmcmIG91dERhdGEsIFBSSW50
MzImIG91dFNpemUpIGNvbnN0OwogICAgICAgIHZvaWQgU2V0RGF0YShjb25zdCBuc1NpbXBsZUNo
YXJTdHJpbmcmIGluRGF0YSwgUFJJbnQzMiBpblNpemUpOwogICAgICAgIHZvaWQgU2V0RGF0YShj
b25zdCBjaGFyKiBpbkRhdGEsIFBSSW50MzIgaW5TaXplKTsKCgoKCgogICAgcHJvdGVjdGVkOgoK
ICAgICAgICBuc1NpbXBsZUNoYXJTdHJpbmcgbURlc2NyaXB0b3JTdHJpbmc7Cgp9OwoKCmNsYXNz
IG5zRGlyZWN0b3J5SXRlcmF0b3IKIyA3NDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Zp
bGVTcGVjLmgiCnsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zRGlyZWN0b3J5SXRlcmF0b3IoIGNvbnN0IG5zRmlsZVNwZWMmIHBhcmVudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJC
b29sIHJlc292ZVN5bUxpbmtzKTsKCgogICAgICAgICAgICB2aXJ0dWFsIH5uc0RpcmVjdG9yeUl0
ZXJhdG9yKCk7CgogICAgICAgICAgICBQUkJvb2wgRXhpc3RzKCkgY29uc3QgeyByZXR1cm4gbUV4
aXN0czsgfQogICAgICAgICAgICBuc0RpcmVjdG9yeUl0ZXJhdG9yJiBvcGVyYXRvciArKygpOwog
ICAgICAgICAgICBuc0RpcmVjdG9yeUl0ZXJhdG9yJiBvcGVyYXRvciArKyhpbnQpIHsgcmV0dXJu
ICsrKCp0aGlzKTsgfQogICAgICAgICAgICBuc0RpcmVjdG9yeUl0ZXJhdG9yJiBvcGVyYXRvciAt
LSgpOwogICAgICAgICAgICBuc0RpcmVjdG9yeUl0ZXJhdG9yJiBvcGVyYXRvciAtLShpbnQpIHsg
cmV0dXJuIC0tKCp0aGlzKTsgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRvciBuc0ZpbGVTcGVjJigpIHsgcmV0dXJuIG1DdXJyZW50OyB9CgogICAgICAgICAgICBu
c0ZpbGVTcGVjJiBTcGVjKCkgeyByZXR1cm4gbUN1cnJlbnQ7IH0KCiAgICAgICAgcHJpdmF0ZToK
IyA3NzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICAgICAgcHJp
dmF0ZToKCiAgICAgICAgICAgIG5zRmlsZVNwZWMgbUN1cnJlbnQ7CiAgICAgICAgICAgIFBSQm9v
bCBtRXhpc3RzOwogICAgICAgIFBSQm9vbCBtUmVzb3ZlU3ltTGlua3M7CgoKICAgICAgICAgICAg
bnNGaWxlU3BlYyBtU3RhcnRpbmc7CgoKCiAgICAgICAgICAgIERJUiogbURpcjsKIyA3OTYgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCn07CgoKY2xhc3MgbnNOU1BSUGF0
aAoKCgoKewpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTlNQUlBh
dGgoY29uc3QgbnNGaWxlU3BlYyYgaW5TcGVjKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiBtRmlsZVBhdGgoaW5TcGVjKSwgbW9kaWZpZWROU1BSUGF0aCgwKSB7fQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc05TUFJQYXRoKGNvbnN0IG5zRmlsZVVSTCYg
aW5VUkwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1GaWxlUGF0aChp
blVSTCksIG1vZGlmaWVkTlNQUlBhdGgoMCkge30KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNOU1BSUGF0aChjb25zdCBuc0ZpbGVQYXRoJiBpblVuaXhQYXRoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtRmlsZVBhdGgoaW5Vbml4UGF0aCksIG1vZGlm
aWVkTlNQUlBhdGgoMCkge30KCiAgICB2aXJ0dWFsIH5uc05TUFJQYXRoKCk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0OwojIDgy
NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKcHJpdmF0ZToKCiAgICBu
c0ZpbGVQYXRoIG1GaWxlUGF0aDsKICAgIGNoYXIqIG1vZGlmaWVkTlNQUlBhdGg7Cn07CgoKICAg
ICAgIG5zcmVzdWx0IE5TX0ZpbGVTcGVjVG9JRmlsZShuc0ZpbGVTcGVjKiBmaWxlU3BlYywgbnNJ
TG9jYWxGaWxlKiAqcmVzdWx0KTsKIyAxOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZp
bGVTcGVjLmgiIDIKY2xhc3MgbnNJRmlsZVVSTDsKCmNsYXNzIG5zSUZpbGVQYXRoOwoKY2xhc3Mg
bnNJT3V0cHV0U3RyZWFtOwoKY2xhc3MgbnNJSW5wdXRTdHJlYW07CiMgNDIgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGaWxlU3BlYy5oIgpjbGFzcyBuc0lGaWxlU3BlYyA6IHB1YmxpYyBu
c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0
YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkOGMwYTA4MCwgMHgwODY4LCAweDExZDMsIHsgMHg5
MSwgMHg1ZiwgMHhkOSwgMHhkOCwgMHg4OSwgMHhkNCwgMHg4ZSwgMHgzYyB9fTsgcmV0dXJuIGlp
ZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZyb21GaWxlU3BlYyhjb25zdCBuc0lGaWxlU3BlYyAq
b3JpZ2luYWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VVJMU3RyaW5nKGNoYXIgKiAq
YVVSTFN0cmluZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VVJMU3RyaW5nKGNvbnN0IGNo
YXIgKiBhVVJMU3RyaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaXhTdHlsZUZp
bGVQYXRoKGNoYXIgKiAqYVVuaXhTdHlsZUZpbGVQYXRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRVbml4U3R5bGVGaWxlUGF0aChjb25zdCBjaGFyICogYVVuaXhTdHlsZUZpbGVQYXRoKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlcnNpc3RlbnREZXNjcmlwdG9yU3RyaW5nKGNo
YXIgKiAqYVBlcnNpc3RlbnREZXNjcmlwdG9yU3RyaW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRQZXJzaXN0ZW50RGVzY3JpcHRvclN0cmluZyhjb25zdCBjaGFyICogYVBlcnNpc3RlbnRE
ZXNjcmlwdG9yU3RyaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hdGl2ZVBhdGgo
Y2hhciAqICphTmF0aXZlUGF0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TmF0aXZlUGF0
aChjb25zdCBjaGFyICogYU5hdGl2ZVBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
TlNQUlBhdGgoY2hhciAqICphTlNQUlBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXJy
b3Iodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1ZhbGlkKFBSQm9vbCAqX3JldHZh
bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGYWlsZWQoUFJCb29sICpfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlYWZOYW1lKGNoYXIgKiAqYUxlYWZOYW1lKSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMZWFmTmFtZShjb25zdCBjaGFyICogYUxlYWZOYW1lKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudChuc0lGaWxlU3BlYyAqICphUGFyZW50
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElucHV0U3RyZWFtKG5zSUlucHV0U3RyZWFt
ICogKmFJbnB1dFN0cmVhbSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRwdXRTdHJl
YW0obnNJT3V0cHV0U3RyZWFtICogKmFPdXRwdXRTdHJlYW0pID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgSXNDaGlsZE9mKG5zSUZpbGVTcGVjICpwb3NzaWJsZVBhcmVudCwgUFJCb29sICpfcmV0
dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVTcGVjKG5zRmlsZVNwZWMgKmFG
aWxlU3BlYykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGcm9tRmlsZVNwZWMoY29uc3Qg
bnNGaWxlU3BlYyAmIHNwZWMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZUNvbnRl
bnRzKGNoYXIgKiAqYUZpbGVDb250ZW50cykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Rmls
ZUNvbnRlbnRzKGNvbnN0IGNoYXIgKiBhRmlsZUNvbnRlbnRzKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IE1ha2VVbmlxdWUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNYWtlVW5p
cXVlV2l0aFN1Z2dlc3RlZE5hbWUoY29uc3QgY2hhciAqc3VnZ2VzdGVkTmFtZSkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRNb2REYXRlKFBSVWludDMyICphTW9kRGF0ZSkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBNb2REYXRlQ2hhbmdlZChQUlVpbnQzMiBvbGRTdGFtcCwgUFJCb29s
ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRGlyZWN0b3J5KFBSQm9vbCAq
X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0ZpbGUoUFJCb29sICpfcmV0dmFs
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEV4aXN0cyhQUkJvb2wgKl9yZXR2YWwpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgSXNIaWRkZW4oUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEVxdWFscyhuc0lGaWxlU3BlYyAqc3BlYywgUFJCb29sICpfcmV0dmFs
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVTaXplKFBSVWludDMyICphRmlsZVNp
emUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlza1NwYWNlQXZhaWxhYmxlKFBSSW50
NjQgKmFEaXNrU3BhY2VBdmFpbGFibGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5k
UmVsYXRpdmVVbml4UGF0aChjb25zdCBjaGFyICpyZWxhdGl2ZVBhdGgpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgQ3JlYXRlRGlyKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG91
Y2godm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1N5bWxpbmsoUFJCb29sICpfcmV0
dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmVTeW1saW5rKHZvaWQpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlKFBSQm9vbCByZWN1cnNpdmUpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgVHJ1bmNhdGUoUFJJbnQzMiBhTmV3TGVuZ3RoKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFJlbmFtZShjb25zdCBjaGFyICpuZXdMZWFmTmFtZSkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBDb3B5VG9EaXIoY29uc3QgbnNJRmlsZVNwZWMgKm5ld1BhcmVudERpcikg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlVG9EaXIoY29uc3QgbnNJRmlsZVNwZWMgKm5l
d1BhcmVudERpcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGVjdXRlKGNvbnN0IGNoYXIg
KmFyZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3BlblN0cmVhbUZvclJlYWRpbmcodm9p
ZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuU3RyZWFtRm9yV3JpdGluZyh2b2lkKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW5TdHJlYW1Gb3JSZWFkaW5nQW5kV3JpdGluZyh2
b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsb3NlU3RyZWFtKHZvaWQpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgSXNTdHJlYW1PcGVuKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBFb2YoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFJlYWQoY2hhciAqKmJ1ZmZlciwgUFJJbnQzMiByZXF1ZXN0ZWRDb3VudCwgUFJJbnQz
MiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWFkTGluZShjaGFyICoqbGlu
ZSwgUFJJbnQzMiBidWZmZXJTaXplLCBQUkJvb2wgKndhc1RydW5jYXRlZCkgPSAwOwoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgV3JpdGUoY29uc3QgY2hhciAqZGF0YSwgUFJJbnQzMiByZXF1ZXN0
ZWRDb3VudCwgUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVz
aCh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlZWsoUFJJbnQzMiBvZmZzZXQpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVGVsbChQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEVuZExpbmUodm9pZCkgPSAwOwoKfTsKIyA3NzkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGaWxlU3BlYy5oIgpjbGFzcyBuc0lEaXJlY3RvcnlJdGVyYXRvciA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkOGMwYTA4MywgMHgwODY4LCAweDEx
ZDMsIHsgMHg5MSwgMHg1ZiwgMHhkOSwgMHhkOCwgMHg4OSwgMHhkNCwgMHg4ZSwgMHgzYyB9fTsg
cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRmlsZVNwZWMgKnBhcmVu
dCwgUFJCb29sIHJlc29sdmVTeW1saW5rKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEV4aXN0
cyhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV4dCh2b2lkKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRTcGVjKG5zSUZpbGVTcGVjICogKmFD
dXJyZW50U3BlYykgPSAwOwoKfTsKIyA4NzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lG
aWxlU3BlYy5oIgogICAgICAgbnNyZXN1bHQgTlNfTmV3RmlsZVNwZWNXaXRoU3BlYyhjb25zdCBu
c0ZpbGVTcGVjJiBhU3JjRmlsZVNwZWMsIG5zSUZpbGVTcGVjICoqcmVzdWx0KTsKICAgICAgIG5z
cmVzdWx0IE5TX05ld0ZpbGVTcGVjKG5zSUZpbGVTcGVjKiogcmVzdWx0KTsKICAgICAgIG5zcmVz
dWx0IE5TX05ld0RpcmVjdG9yeUl0ZXJhdG9yKG5zSURpcmVjdG9yeUl0ZXJhdG9yKiogcmVzdWx0
KTsKCmlubGluZSBQUkJvb2wgRXhpc3RzKG5zSUZpbGVTcGVjKiBmKSB7IFBSQm9vbCB5ZXM7IHJl
dHVybiAoISgoZi0+RXhpc3RzKCZ5ZXMpKSAmIDB4ODAwMDAwMDApKSAmJiB5ZXM7IH0KaW5saW5l
IFBSQm9vbCBFeGlzdHMobnNJRGlyZWN0b3J5SXRlcmF0b3IqIGYpIHsgUFJCb29sIHllczsgcmV0
dXJuICghKChmLT5FeGlzdHMoJnllcykpICYgMHg4MDAwMDAwMCkpICYmIHllczsgfQppbmxpbmUg
UFJCb29sIElzRGlyZWN0b3J5KG5zSUZpbGVTcGVjKiBmKSB7IFBSQm9vbCB5ZXM7IHJldHVybiAo
ISgoZi0+SXNEaXJlY3RvcnkoJnllcykpICYgMHg4MDAwMDAwMCkpICYmIHllczsgfQojIDI5ICJu
c0Zvcm1GcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1Qcm9j
ZXNzb3IuaCIgMQojIDMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nv
ci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMzQg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtUHJvY2Vzc29yLmgiIDIKIyAxICIvd2lu
ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAx
CiMgMzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtUHJvY2Vzc29yLmgiIDIKCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUhUTUxJbnB1dEVsZW1lbnQuaCIgMQoj
IDEwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTElucHV0RWxlbWVudC5oIgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MRWxlbWVudC5oIiAxCiMgMTAg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MRWxlbWVudC5oIgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01FbGVtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSURPTUVsZW1lbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRE9NTm9kZS5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01O
b2RlLmgiCmNsYXNzIG5zSURPTU5vZGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK
ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g
ezB4YTZjZjkwN2MsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4
NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKICBlbnVtIHsgRUxFTUVOVF9O
T0RFID0gMVUgfTsKCiAgZW51bSB7IEFUVFJJQlVURV9OT0RFID0gMlUgfTsKCiAgZW51bSB7IFRF
WFRfTk9ERSA9IDNVIH07CgogIGVudW0geyBDREFUQV9TRUNUSU9OX05PREUgPSA0VSB9OwoKICBl
bnVtIHsgRU5USVRZX1JFRkVSRU5DRV9OT0RFID0gNVUgfTsKCiAgZW51bSB7IEVOVElUWV9OT0RF
ID0gNlUgfTsKCiAgZW51bSB7IFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSA9IDdVIH07Cgog
IGVudW0geyBDT01NRU5UX05PREUgPSA4VSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfTk9ERSA9IDlV
IH07CgogIGVudW0geyBET0NVTUVOVF9UWVBFX05PREUgPSAxMFUgfTsKCiAgZW51bSB7IERPQ1VN
RU5UX0ZSQUdNRU5UX05PREUgPSAxMVUgfTsKCiAgZW51bSB7IE5PVEFUSU9OX05PREUgPSAxMlUg
fTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9kZU5hbWUobnNBV3JpdGFibGVTdHJpbmcgJiBh
Tm9kZU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9kZVZhbHVlKG5zQVdyaXRh
YmxlU3RyaW5nICYgYU5vZGVWYWx1ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Tm9kZVZh
bHVlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgYU5vZGVWYWx1ZSkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXROb2RlVHlwZShQUlVpbnQxNiAqYU5vZGVUeXBlKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFBhcmVudE5vZGUobnNJRE9NTm9kZSAqICphUGFyZW50Tm9kZSkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGlsZE5vZGVzKG5zSURPTU5vZGVMaXN0ICogKmFD
aGlsZE5vZGVzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpcnN0Q2hpbGQobnNJRE9N
Tm9kZSAqICphRmlyc3RDaGlsZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXN0Q2hp
bGQobnNJRE9NTm9kZSAqICphTGFzdENoaWxkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFByZXZpb3VzU2libGluZyhuc0lET01Ob2RlICogKmFQcmV2aW91c1NpYmxpbmcpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dFNpYmxpbmcobnNJRE9NTm9kZSAqICphTmV4dFNpYmxp
bmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlcyhuc0lET01OYW1lZE5v
ZGVNYXAgKiAqYUF0dHJpYnV0ZXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3duZXJE
b2N1bWVudChuc0lET01Eb2N1bWVudCAqICphT3duZXJEb2N1bWVudCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBJbnNlcnRCZWZvcmUobnNJRE9NTm9kZSAqbmV3Q2hpbGQsIG5zSURPTU5vZGUg
KnJlZkNoaWxkLCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBSZXBsYWNlQ2hpbGQobnNJRE9NTm9kZSAqbmV3Q2hpbGQsIG5zSURPTU5vZGUgKm9sZENoaWxk
LCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVD
aGlsZChuc0lET01Ob2RlICpvbGRDaGlsZCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kQ2hpbGQobnNJRE9NTm9kZSAqbmV3Q2hpbGQsIG5zSURP
TU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0NoaWxkTm9kZXMo
UFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lTm9kZShQUkJv
b2wgZGVlcCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
Tm9ybWFsaXplKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTdXBwb3J0ZWQoY29u
c3QgbnNBUmVhZGFibGVTdHJpbmcgJiBmZWF0dXJlLCBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAm
IHZlcnNpb24sIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRO
YW1lc3BhY2VVUkkobnNBV3JpdGFibGVTdHJpbmcgJiBhTmFtZXNwYWNlVVJJKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFByZWZpeChuc0FXcml0YWJsZVN0cmluZyAmIGFQcmVmaXgpID0g
MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZWZpeChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAm
IGFQcmVmaXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYWxOYW1lKG5zQVdyaXRh
YmxlU3RyaW5nICYgYUxvY2FsTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNBdHRy
aWJ1dGVzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAzOTcgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lET01Ob2RlLmgiCmNsYXNzIG5zSURPTTNOb2RlIDogcHVibGljIG5zSVN1cHBv
cnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv
bnN0IG5zSUlEIGlpZCA9IHsweDI5ZmIyYTE4LCAweDFkZDIsIDB4MTFiMiwgeyAweDhkLCAweGQ5
LCAweGE2LCAweGZkLCAweDVkLCAweDVhLCAweGQxLCAweDJmIH19OyByZXR1cm4gaWlkO30KCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFzZVVSSShuc0FXcml0YWJsZVN0cmluZyAmIGFCYXNlVVJJ
KSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NRWxlbWVudC5o
IiAyCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01FbGVtZW50LmgiCmNsYXNz
IG5zSURPTUVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NTm9kZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBj
b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA3
OCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg
MHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhZ05h
bWUobnNBV3JpdGFibGVTdHJpbmcgJiBhVGFnTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRBdHRyaWJ1dGUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lLCBuc0FXcml0YWJs
ZVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRl
KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZSwgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcg
JiB2YWx1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVBdHRyaWJ1dGUoY29uc3Qg
bnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0
dHJpYnV0ZU5vZGUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lLCBuc0lET01BdHRyICoq
X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyaWJ1dGVOb2RlKG5zSURP
TUF0dHIgKm5ld0F0dHIsIG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFJlbW92ZUF0dHJpYnV0ZU5vZGUobnNJRE9NQXR0ciAqb2xkQXR0ciwgbnNJRE9NQXR0
ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RWxlbWVudHNCeVRhZ05h
bWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lLCBuc0lET01Ob2RlTGlzdCAqKl9yZXR2
YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlTlMoY29uc3QgbnNBUmVh
ZGFibGVTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbG9j
YWxOYW1lLCBuc0FXcml0YWJsZVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0QXR0cmlidXRlTlMoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lc3BhY2VV
UkksIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgcXVhbGlmaWVkTmFtZSwgY29uc3QgbnNBUmVh
ZGFibGVTdHJpbmcgJiB2YWx1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVBdHRy
aWJ1dGVOUyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIG5hbWVzcGFjZVVSSSwgY29uc3QgbnNB
UmVhZGFibGVTdHJpbmcgJiBsb2NhbE5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
QXR0cmlidXRlTm9kZU5TKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBj
b25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGxvY2FsTmFtZSwgbnNJRE9NQXR0ciAqKl9yZXR2YWwp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRlTm9kZU5TKG5zSURPTUF0dHIg
Km5ld0F0dHIsIG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbG9jYWxOYW1lLCBuc0lET01Ob2RlTGlz
dCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzQXR0cmlidXRlKGNvbnN0
IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZSwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEhhc0F0dHJpYnV0ZU5TKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGxvY2FsTmFtZSwgUFJCb29sICpf
cmV0dmFsKSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRN
TEVsZW1lbnQuaCIgMgojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTEVs
ZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NRWxlbWVudCB7
CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu
c0lJRCBpaWQgPSB7MHhhNmNmOTA4NSwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgw
MCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldElkKG5zQVdyaXRhYmxlU3RyaW5nICYgYUlkKSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRJZChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFJZCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRUaXRsZShuc0FXcml0YWJsZVN0cmluZyAmIGFUaXRsZSkgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGl0bGUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBh
VGl0bGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZyhuc0FXcml0YWJsZVN0cmlu
ZyAmIGFMYW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYW5nKGNvbnN0IG5zQVJlYWRh
YmxlU3RyaW5nICYgYUxhbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlyKG5zQVdy
aXRhYmxlU3RyaW5nICYgYURpcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlyKGNvbnN0
IG5zQVJlYWRhYmxlU3RyaW5nICYgYURpcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD
bGFzc05hbWUobnNBV3JpdGFibGVTdHJpbmcgJiBhQ2xhc3NOYW1lKSA9IDA7CiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRDbGFzc05hbWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhQ2xhc3NOYW1l
KSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTElucHV0
RWxlbWVudC5oIiAyCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MSW5w
dXRFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxJbnB1dEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9N
SFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtz
dGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwOTMsIDB4MTViMywgMHgxMWQyLCB7IDB4
OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBp
aWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0VmFsdWUobnNBV3JpdGFibGVTdHJp
bmcgJiBhRGVmYXVsdFZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0VmFs
dWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhRGVmYXVsdFZhbHVlKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldERlZmF1bHRDaGVja2VkKFBSQm9vbCAqYURlZmF1bHRDaGVja2VkKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0Q2hlY2tlZChQUkJvb2wgYURlZmF1bHRD
aGVja2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvcm0obnNJRE9NSFRNTEZvcm1F
bGVtZW50ICogKmFGb3JtKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFjY2VwdChuc0FX
cml0YWJsZVN0cmluZyAmIGFBY2NlcHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2Vw
dChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFBY2NlcHQpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0QWNjZXNzS2V5KG5zQVdyaXRhYmxlU3RyaW5nICYgYUFjY2Vzc0tleSkgPSAwOwog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0QWNjZXNzS2V5KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYg
YUFjY2Vzc0tleSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlnbihuc0FXcml0YWJs
ZVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29uc3Qg
bnNBUmVhZGFibGVTdHJpbmcgJiBhQWxpZ24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
QWx0KG5zQVdyaXRhYmxlU3RyaW5nICYgYUFsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
QWx0KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgYUFsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRDaGVja2VkKFBSQm9vbCAqYUNoZWNrZWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldENoZWNrZWQoUFJCb29sIGFDaGVja2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRE
aXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1h
eExlbmd0aChQUkludDMyICphTWF4TGVuZ3RoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRN
YXhMZW5ndGgoUFJJbnQzMiBhTWF4TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dE5hbWUobnNBV3JpdGFibGVTdHJpbmcgJiBhTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0TmFtZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFJlYWRPbmx5KFBSQm9vbCAqYVJlYWRPbmx5KSA9IDA7CiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRSZWFkT25seShQUkJvb2wgYVJlYWRPbmx5KSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFNpemUobnNBV3JpdGFibGVTdHJpbmcgJiBhU2l6ZSkgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0U2l6ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFTaXplKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNyYyhuc0FXcml0YWJsZVN0cmluZyAmIGFTcmMpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNyYyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFTcmMp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFiSW5kZXgoUFJJbnQzMiAqYVRhYkluZGV4
KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUYWJJbmRleChQUkludDMyIGFUYWJJbmRleCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUeXBlKG5zQVdyaXRhYmxlU3RyaW5nICYgYVR5
cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFR5cGUoY29uc3QgbnNBUmVhZGFibGVTdHJp
bmcgJiBhVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVc2VNYXAobnNBV3JpdGFi
bGVTdHJpbmcgJiBhVXNlTWFwKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVc2VNYXAoY29u
c3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhVXNlTWFwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFZhbHVlKG5zQVdyaXRhYmxlU3RyaW5nICYgYVZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRWYWx1ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFWYWx1ZSkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBCbHVyKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRm9j
dXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3Qodm9pZCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBDbGljayh2b2lkKSA9IDA7Cgp9OwojIDM3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nvci5oIiAyCgpjbGFzcyBuc1N0cmluZzsKY2xhc3Mg
bnNWb2lkQXJyYXk7CiMgNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtUHJvY2Vz
c29yLmgiCmNsYXNzIG5zSUZvcm1Qcm9jZXNzb3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJs
aWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp
ZCA9IHsgMHhmMTFjMWUyMCwgMHg4NzNmLCAweDExZDMsIHsgMHg5NiwgMHg3ZiwgMHgwLCAweDEw
LCAweDVhLCAweDFiLCAweDFiLCAweDc2IH0gfTsgcmV0dXJuIGlpZDt9CiMgNzQgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtUHJvY2Vzc29yLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQ
cm9jZXNzVmFsdWUobnNJRE9NSFRNTEVsZW1lbnQgKmFFbGVtZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1N0cmluZyYgYVZhbHVlKSA9IDA7CiMgODcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGb3JtUHJvY2Vzc29yLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQcm92aWRlQ29udGVudChjb25z
dCBuc1N0cmluZyYgYUZvcm1UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNWb2lk
QXJyYXkmIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTdHJpbmcmIGFB
dHRyaWJ1dGUpID0gMDsKCn07CiMgMzAgIm5zRm9ybUZyYW1lLmgiIDIKCmNsYXNzIG5zU3RyaW5n
OwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc0lGcmFtZTsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7
CnN0cnVjdCBuc0hUTUxSZWZsb3dTdGF0ZTsKY2xhc3MgbnNGb3JtQ29udHJvbEZyYW1lOwpjbGFz
cyBuc0dmeFJhZGlvQ29udHJvbEZyYW1lOwpjbGFzcyBuc0lGb3JtQ29udHJvbEZyYW1lOwpjbGFz
cyBuc0lET01IVE1MRm9ybUVsZW1lbnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lQcmVz
Q29udGV4dDsKY2xhc3MgbnNGb3JtRnJhbWU7CmNsYXNzIG5zSVVuaWNvZGVFbmNvZGVyOwpjbGFz
cyBuc1JhZGlvQ29udHJvbEdyb3VwOwoKY2xhc3MgbnNGb3JtRnJhbWUgOiBwdWJsaWMgbnNCbG9j
a0ZyYW1lLAogICAgICAgICAgICAgICAgICAgIHB1YmxpYyBuc0lGb3JtTWFuYWdlcgp7CnB1Ymxp
YzoKICBuc0Zvcm1GcmFtZSgpOwogIHZpcnR1YWwgfm5zRm9ybUZyYW1lKCk7CgogIHZpcnR1YWwg
bnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFu
Y2VQdHIpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZyYW1lKG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVz
U2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lKTsKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IE9uUmVzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CgogIHZpcnR1YWwg
bnNyZXN1bHQgT25TdWJtaXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUq
IGFGcmFtZSk7CgoKCgoKCgogIG5zcmVzdWx0IE9uUmFkaW9DaGVja2VkKG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsIG5zR2Z4UmFkaW9Db250cm9sRnJhbWUmIGFSYWRpbywgUFJCb29sIGFD
aGVja2VkID0gMSk7CgogIHZvaWQgQWRkRm9ybUNvbnRyb2xGcmFtZShuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LCBuc0lGb3JtQ29udHJvbEZyYW1lJiBhRnJhbWUpOwogIHN0YXRpYyB2b2lk
IEFkZEZvcm1Db250cm9sRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJh
bWUmIGFGcmFtZSk7CiAgdm9pZCBSZW1vdmVGb3JtQ29udHJvbEZyYW1lKG5zSUZvcm1Db250cm9s
RnJhbWUmIGFGcmFtZSk7CiAgdm9pZCBSZW1vdmVSYWRpb0NvbnRyb2xGcmFtZShuc0lGb3JtQ29u
dHJvbEZyYW1lICogYUZyYW1lKTsKICBuc3Jlc3VsdCBHZXRSYWRpb0luZm8obnNJRm9ybUNvbnRy
b2xGcmFtZSogYUZyYW1lLCBuc1N0cmluZyYgYU5hbWUsIG5zUmFkaW9Db250cm9sR3JvdXAgKiYg
YUdyb3VwKTsKCiAgUFJCb29sIENhblN1Ym1pdChuc0lGb3JtQ29udHJvbEZyYW1lICphRnJhbWUp
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldGhvZChQUkludDMyKiBhTWV0aG9kKTsKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEVuY3R5cGUoUFJJbnQzMiogYUVuY3R5cGUpOwogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0VGFyZ2V0KG5zU3RyaW5nKiBhVGFyZ2V0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dEFjdGlvbihuc1N0cmluZyogYUFjdGlvbik7CgoKCiAgc3RhdGljIFBSQm9vbCBHZXREaXNhYmxl
ZChuc0lGcmFtZSogYUNoaWxkRnJhbWUsIG5zSUNvbnRlbnQqIGFDb250ZW50ID0gMCk7CiAgc3Rh
dGljIFBSQm9vbCBHZXRSZWFkb25seShuc0lGcmFtZSogYUNoaWxkRnJhbWUsIG5zSUNvbnRlbnQq
IGFDb250ZW50ID0gMCk7CiAgc3RhdGljIG5zcmVzdWx0IEdldE5hbWUobnNJRnJhbWUqIGFDaGls
ZEZyYW1lLCBuc1N0cmluZyYgYU5hbWUsIG5zSUNvbnRlbnQqIGFDb250ZW50ID0gMCk7CiAgc3Rh
dGljIG5zcmVzdWx0IEdldFZhbHVlKG5zSUZyYW1lKiBhQ2hpbGRGcmFtZSwgbnNTdHJpbmcmIGFW
YWx1ZSwgbnNJQ29udGVudCogYUNvbnRlbnQgPSAwKTsKICBzdGF0aWMgdm9pZCBTdHlsZUNoYW5n
ZVJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUpOwogIHN0YXRpYyBuc3Jlc3VsdCBHZXRSYWRp
b0dyb3VwU2VsZWN0ZWRDb250ZW50KG5zR2Z4UmFkaW9Db250cm9sRnJhbWUqIGFDb250cm9sLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQg
KiogYVJhZGlvYnRuKTsKICB2b2lkIFNldEZsYWdzKFBSVWludDMyIGFGbGFncykgewogICAgbVN0
YXRlICY9IH4weEZGRjAwMDAwOwogICAgbVN0YXRlIHw9IGFGbGFnczsKICB9Cgpwcm90ZWN0ZWQ6
CiAgdmlydHVhbCBuc3JlZmNudCBBZGRSZWYodm9pZCk7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxl
YXNlKHZvaWQpOwogIHZvaWQgUmVtb3ZlUmFkaW9Hcm91cHMoKTsKCiAgdm9pZCBEb0RlZmF1bHRT
ZWxlY3Rpb24obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc1JhZGlvQ29udHJvbEdyb3VwICogYUdyb3VwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zR2Z4UmFkaW9Db250cm9sRnJhbWUgKiBhUmFkaW9Ub0lnbm9yZSA9IDApOwoKICBu
c3Jlc3VsdCBQcm9jZXNzVmFsdWUobnNJRm9ybVByb2Nlc3NvciYgYUZvcm1Qcm9jZXNzb3IsIG5z
SUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZUNvbnRyb2wsIGNvbnN0IG5zU3RyaW5nJiBhTmFtZSwg
bnNTdHJpbmcmIGFOZXdWYWx1ZSk7CiAgbnNyZXN1bHQgUHJvY2Vzc0FzVVJMRW5jb2RlZChuc0lG
b3JtUHJvY2Vzc29yKiBhRm9ybVByb2Nlc3NvciwgUFJCb29sIGFJc1Bvc3QsIG5zU3RyaW5nJiBh
RGF0YSwgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lKTsKICBuc3Jlc3VsdCBQcm9jZXNzQXNN
dWx0aXBhcnQobnNJRm9ybVByb2Nlc3NvciogYUZvcm1Qcm9jZXNzb3IsIG5zSUZpbGVTcGVjKiYg
YU11bHRpcGFydERhdGFGaWxlLCBuc0lGb3JtQ29udHJvbEZyYW1lKiBhRnJhbWUpOwogIHN0YXRp
YyBjb25zdCBjaGFyKiBHZXRGaWxlTmFtZVdpdGhpblBhdGgoY2hhciogYVBhdGhOYW1lKTsKICBu
c3Jlc3VsdCBHZXRDb250ZW50VHlwZShjaGFyKiBhUGF0aE5hbWUsIGNoYXIqKiBhQ29udGVudFR5
cGUpOwoKCiAgbnNTdHJpbmcqIFVSTEVuY29kZShjb25zdCBuc1N0cmluZyYgYVN0cmluZywgbnNJ
VW5pY29kZUVuY29kZXIqIGVuY29kZXIpOwogIGNoYXIqIFVuaWNvZGVUb05ld0J5dGVzKGNvbnN0
IFBSVW5pY2hhciogYVNyYywgUFJVaW50MzIgYUxlbiwgbnNJVW5pY29kZUVuY29kZXIqIGVuY29k
ZXIpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuY29kZXIobnNJVW5pY29kZUVuY29kZXIqKiBl
bmNvZGVyKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsYXRmb3JtRW5jb2Rlcihuc0lVbmljb2Rl
RW5jb2RlcioqIGVuY29kZXIpOwogIHZvaWQgR2V0U3VibWl0Q2hhcnNldChuc1N0cmluZyYgb0No
YXJzZXQpOwogIHZvaWQgVXBkYXRlU3VibWl0dGVyKG5zSUZvcm1Db250cm9sRnJhbWUgKiBhRnJh
bWUpOwoKICBuc1ZvaWRBcnJheSBtRm9ybUNvbnRyb2xzOwogIG5zVm9pZEFycmF5IG1SYWRpb0dy
b3VwczsKICBuc0lGb3JtQ29udHJvbEZyYW1lKiBtVGV4dFN1Ym1pdHRlcjsKICBQUkJvb2wgbVRl
eHRTdWJtaXR0ZXJTZXQ7CgoKICBuc0F1dG9TdHJpbmcgbUNoYXJzZXQ7CiAgUFJVaW50OCBtVGV4
dERpcjsKICBQUlVpbnQ4IG1DdHJsc01vZEF0U3VibWl0OwoKCn07CiMgNTIgIm5zRm9ybUNvbnRy
b2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQu
aCIgMQojIDUzICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIiAxCiMgNTQgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3Bw
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU5hbWVTcGFjZU1hbmFnZXIuaCIg
MQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTmFtZVNwYWNlTWFuYWdlci5oIgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lOYW1lU3BhY2VNYW5hZ2VyLmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJTmFtZVNwYWNlTWFuYWdlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zQVdyaXRhYmxlU3RyaW5nLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSU5hbWVTcGFjZU1hbmFnZXIuaCIgMgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNTdHJpbmc7
CmNsYXNzIG5zSU5hbWVTcGFjZTsKIyA2OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU5h
bWVTcGFjZU1hbmFnZXIuaCIKY2xhc3MgbnNJTmFtZVNwYWNlTWFuYWdlciA6IHB1YmxpYyBuc0lT
dXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGlj
IG5zSUlEIGlpZCA9IHsgMHhhNmNmOTBkNSwgMHgxNWIzLCAweDExZDIsIHsweDkzLCAweDJlLCAw
eDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfX07IHJldHVybiBpaWQ7IH0KCiAgdmly
dHVhbCBuc3Jlc3VsdCBDcmVhdGVSb290TmFtZVNwYWNlKG5zSU5hbWVTcGFjZSomIGFSb290TmFt
ZVNwYWNlKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJOYW1lU3BhY2UoY29uc3Qg
bnNBUmVhZGFibGVTdHJpbmcmIGFVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkludDMyJiBhTmFtZVNwYWNlSUQpID0gMDsKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXROYW1lU3BhY2VVUkkoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zQVdyaXRhYmxl
U3RyaW5nJiBhVVJJKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lU3BhY2VJRChjb25z
dCBuc0FSZWFkYWJsZVN0cmluZyYgYVVSSSwgUFJJbnQzMiYgYU5hbWVTcGFjZUlEKSA9IDA7Cn07
CgpleHRlcm4gbnNyZXN1bHQKICBOU19OZXdOYW1lU3BhY2VNYW5hZ2VyKG5zSU5hbWVTcGFjZU1h
bmFnZXIqKiBhSW5zdGFuY2VQdHJSZXN1bHQpOwojIDU1ICJuc0Zvcm1Db250cm9sSGVscGVyLmNw
cCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MSW5wdXRFbGVtZW50
LmgiIDEKIyA1NiAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNOZXRDSUQuaCIgMQojIDU3ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIg
MgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiIDEK
IyA2MCAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJSU9TZXJ2aWNlLmgiIDEKIyAxNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUlPU2VydmljZS5oIgpjbGFzcyBuc0lQcm90b2NvbEhhbmRsZXI7CgpjbGFzcyBuc0lDaGFubmVs
OwoKY2xhc3MgbnNJVVJJOwojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2
aWNlLmgiCmNsYXNzIG5zSUlPU2VydmljZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6
CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg
PSB7MHhhYjdjM2E4NCwgMHhkNDg4LCAweDExZDMsIHsgMHg4YywgMHhkYSwgMHgwMCwgMHg2MCwg
MHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CiMgNDMgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3Rv
Y29sSGFuZGxlcihjb25zdCBjaGFyICpzY2hlbWUsIG5zSVByb3RvY29sSGFuZGxlciAqKl9yZXR2
YWwpID0gMDsKIyA1NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlPU2VydmljZS5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgTmV3VVJJKGNvbnN0IGNoYXIgKmFTcGVjLCBuc0lVUkkgKmFCYXNl
VVJJLCBuc0lVUkkgKipfcmV0dmFsKSA9IDA7CiMgNzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld0NoYW5uZWxGcm9tVVJJKG5z
SVVSSSAqYVVSSSwgbnNJQ2hhbm5lbCAqKl9yZXR2YWwpID0gMDsKIyA5MiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUlPU2VydmljZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3Q2hhbm5l
bChjb25zdCBjaGFyICphU3BlYywgbnNJVVJJICphQmFzZVVSSSwgbnNJQ2hhbm5lbCAqKl9yZXR2
YWwpID0gMDsKIyAxMDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZmxpbmUoUFJCb29sICphT2ZmbGluZSkgPSAwOwogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0T2ZmbGluZShQUkJvb2wgYU9mZmxpbmUpID0gMDsKIyAxMTIgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IEFsbG93UG9ydChQUkludDMyIHBvcnQsIGNvbnN0IGNoYXIgKnNjaGVtZSwgUFJCb29sICpfcmV0
dmFsKSA9IDA7CiMgMTMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBFeHRyYWN0U2NoZW1lKGNvbnN0IGNoYXIgKnVybFN0cmluZywg
UFJVaW50MzIgKnNjaGVtZVN0YXJ0UG9zLCBQUlVpbnQzMiAqc2NoZW1lRW5kUG9zLCBjaGFyICoq
c2NoZW1lKSA9IDA7CgoKCgogIGVudW0geyB1cmxfU2NoZW1lID0gMSB9OwoKICBlbnVtIHsgdXJs
X1VzZXJuYW1lID0gMiB9OwoKICBlbnVtIHsgdXJsX1Bhc3N3b3JkID0gNCB9OwoKICBlbnVtIHsg
dXJsX0hvc3QgPSA4IH07CgogIGVudW0geyB1cmxfRGlyZWN0b3J5ID0gMTYgfTsKCiAgZW51bSB7
IHVybF9GaWxlQmFzZU5hbWUgPSAzMiB9OwoKICBlbnVtIHsgdXJsX0ZpbGVFeHRlbnNpb24gPSA2
NCB9OwoKICBlbnVtIHsgdXJsX1BhcmFtID0gMTI4IH07CgogIGVudW0geyB1cmxfUXVlcnkgPSAy
NTYgfTsKCiAgZW51bSB7IHVybF9SZWYgPSA1MTIgfTsKCiAgZW51bSB7IHVybF9Gb3JjZWQgPSAx
MDI0IH07CiMgMTY1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBFc2NhcGUoY29uc3QgY2hhciAqc3RyLCBQUkludDE2IG1hc2ssIGNo
YXIgKipfcmV0dmFsKSA9IDA7CiMgMTc0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9T
ZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmVzY2FwZShjb25zdCBjaGFyICpzdHIsIGNo
YXIgKipfcmV0dmFsKSA9IDA7CiMgMTgzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9T
ZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFeHRyYWN0UG9ydChjb25zdCBjaGFyICpzdHIs
IFBSSW50MzIgKl9yZXR2YWwpID0gMDsKIyAxOTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmVSZWxhdGl2ZVBhdGgoY29u
c3QgY2hhciAqcmVsYXRpdmVQYXRoLCBjb25zdCBjaGFyICpiYXNlUGF0aCwgY2hhciAqKl9yZXR2
YWwpID0gMDsKCn07CiMgNjEgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIiAxCiMgNjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lVUkkuaCIKY2xhc3MgbnNJVVJJIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1Ymxp
YzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp
ZCA9IHsweDA3YTIyY2MwLCAweDBjZTUsIDB4MTFkMywgeyAweDkzLCAweDMxLCAweDAwLCAweDEw
LCAweDRiLCAweGEwLCAweGZkLCAweDQwIH19OyByZXR1cm4gaWlkO30KIyA3MyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3BlYyhjaGFy
ICogKmFTcGVjKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTcGVjKGNvbnN0IGNoYXIgKiBh
U3BlYykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZVBhdGgoY2hhciAqICph
UHJlUGF0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJlUGF0aChjb25zdCBjaGFyICog
YVByZVBhdGgpID0gMDsKIyA5MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NoZW1lKGNoYXIgKiAqYVNjaGVtZSkgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0U2NoZW1lKGNvbnN0IGNoYXIgKiBhU2NoZW1lKSA9IDA7CgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVIb3N0KGNoYXIgKiAqYVByZUhvc3QpID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldFByZUhvc3QoY29uc3QgY2hhciAqIGFQcmVIb3N0KSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFVzZXJuYW1lKGNoYXIgKiAqYVVzZXJuYW1lKSA9IDA7CiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXRVc2VybmFtZShjb25zdCBjaGFyICogYVVzZXJuYW1lKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhc3N3b3JkKGNoYXIgKiAqYVBhc3N3b3JkKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBTZXRQYXNzd29yZChjb25zdCBjaGFyICogYVBhc3N3b3JkKSA9IDA7
CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIb3N0KGNoYXIgKiAqYUhvc3QpID0gMDsKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldEhvc3QoY29uc3QgY2hhciAqIGFIb3N0KSA9IDA7CiMgMTMwICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ
b3J0KFBSSW50MzIgKmFQb3J0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3J0KFBSSW50
MzIgYVBvcnQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRoKGNoYXIgKiAq
YVBhdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhdGgoY29uc3QgY2hhciAqIGFQYXRo
KSA9IDA7CiMgMTUxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVVJJLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBFcXVhbHMobnNJVVJJICpvdGhlciwgUFJCb29sICpfcmV0dmFsKSA9IDA7CiMg
MTYwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTY2hlbWVJcyhjb25zdCBjaGFyICpzY2hlbWUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDE2
OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
Q2xvbmUobnNJVVJJICoqX3JldHZhbCkgPSAwOwojIDE3OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZShjb25zdCBjaGFyICpyZWxh
dGl2ZVBhdGgsIGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDYyICJuc0Zvcm1Db250cm9sSGVs
cGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHJpbmdCdW5kbGUu
aCIgMQojIDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3RyaW5nQnVuZGxlLmgiCmNs
YXNzIG5zSVN0cmluZ0J1bmRsZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0
YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhk
ODVhMTdjMiwgMHhhYTdjLCAweDExZDIsIHsgMHg5YiwgMHg4YywgMHgwMCwgMHg4MCwgMHg1Ziwg
MHg4YSwgMHgxNiwgMHhkOSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFN0cmluZ0Zyb21JRChQUkludDMyIGFJRCwgUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRTdHJpbmdGcm9tTmFtZShjb25zdCBQUlVuaWNoYXIgKmFOYW1l
LCBQUlVuaWNoYXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvcm1hdFN0
cmluZ0Zyb21JRChQUkludDMyIGFJRCwgY29uc3QgUFJVbmljaGFyICoqcGFyYW1zLCBQUlVpbnQz
MiBsZW5ndGgsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
Rm9ybWF0U3RyaW5nRnJvbU5hbWUoY29uc3QgUFJVbmljaGFyICphTmFtZSwgY29uc3QgUFJVbmlj
aGFyICoqcGFyYW1zLCBQUlVpbnQzMiBsZW5ndGgsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW51bWVyYXRpb24obnNJQmlkaXJlY3Rpb25hbEVudW1l
cmF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpbXBsZUVudW1l
cmF0aW9uKG5zSVNpbXBsZUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldExvYWRlZChQUkJvb2wgKmFMb2FkZWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldExvYWRlZChQUkJvb2wgYUxvYWRlZCkgPSAwOwoKfTsKIyAxODcgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTdHJpbmdCdW5kbGUuaCIKY2xhc3MgbnNJU3RyaW5nQnVuZGxlU2Vydmlj
ZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg
R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkODVhMTdjMCwgMHhhYTdjLCAw
eDExZDIsIHsgMHg5YiwgMHg4YywgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHgxNiwgMHhkOSB9
fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUJ1bmRsZShjb25zdCBj
aGFyICphVVJMU3BlYywgbnNJU3RyaW5nQnVuZGxlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBDcmVhdGVBc3luY0J1bmRsZShjb25zdCBjaGFyICphVVJMU3BlYywgbnNJU3Ry
aW5nQnVuZGxlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVFeHRl
bnNpYmxlQnVuZGxlKGNvbnN0IGNoYXIgKmFSZWdpc3RyeUtleSwgbnNJU3RyaW5nQnVuZGxlICoq
X3JldHZhbCkgPSAwOwojIDIxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0cmluZ0J1
bmRsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRm9ybWF0U3RhdHVzTWVzc2FnZShuc3Jlc3VsdCBh
U3RhdHVzLCBjb25zdCBQUlVuaWNoYXIgKmFTdGF0dXNBcmcsIFBSVW5pY2hhciAqKl9yZXR2YWwp
ID0gMDsKIyAyMjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHJpbmdCdW5kbGUuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoQnVuZGxlcyh2b2lkKSA9IDA7Cgp9OwojIDYzICJuc0Zv
cm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lU
ZXh0Q29udGVudC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0Q29u
dGVudC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAxCiMgMjYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0Q29udGVudC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJVGV4dENvbnRlbnQuaCIgMgpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNUZXh0
RnJhZ21lbnQ7CiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0Q29udGVudC5o
IgpjbGFzcyBuc0lUZXh0Q29udGVudCA6IHB1YmxpYyBuc0lDb250ZW50IHsKcHVibGljOgogIHN0
YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0gezB4YTZjZjkw
NjUsIDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg
MHhkZCwgMHgzMn19OyByZXR1cm4gaWlkOyB9CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4
dChjb25zdCBuc1RleHRGcmFnbWVudCoqIGFGcmFnbWVudHNSZXN1bHQpID0gMDsKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRUZXh0TGVuZ3RoKFBSSW50MzIqIGFMZW5ndGhSZXN1bHQpID0gMDsK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VGV4dChuc0FXcml0YWJsZVN0cmluZyYgYVJlc3Vs
dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUZXh0KGNvbnN0IFBSVW5pY2hhciog
YUJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTGVuZ3RoLAogICAgICAgICAg
ICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRUZXh0KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3RyLAogICAgICAgICAgICAgICAgICAg
ICBQUkJvb2wgYU5vdGlmeSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUZXh0KGNv
bnN0IGNoYXIqIGFCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUxlbmd0aCwK
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFOb3RpZnkpID0gMDsKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBJc09ubHlXaGl0ZXNwYWNlKFBSQm9vbCogYVJlc3VsdCkgPSAwOwoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBDbG9uZUNvbnRlbnQoUFJCb29sIGFDbG9uZVRleHQsIG5zSVRleHRDb250
ZW50KiogYUNsb25lKSA9IDA7Cn07CiMgMTAwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
VGV4dENvbnRlbnQuaCIKY2xhc3MgbnNJVGV4dENvbnRlbnRDaGFuZ2VEYXRhIDogcHVibGljIG5z
SVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA1ZSwgMHgxNWIzLCAweDExZDIsIHsweDkzLCAw
eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfX07IHJldHVybiBpaWQ7fTsK
CiAgZW51bSBDaGFuZ2VUeXBlIHsKICAgIEluc2VydCwKICAgIEFwcGVuZCwKICAgIFJlcGxhY2UK
ICB9OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGFuZ2VUeXBlKENoYW5nZVR5cGUqIGFS
ZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbnNlcnREYXRhKFBSSW50MzIqIGFP
ZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFJbnNlcnRMZW5ndGgp
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcHBlbmREYXRhKFBSSW50MzIqIGFPZmZzZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFBcHBlbmRMZW5ndGgpID0gMDsK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZXBsYWNlRGF0YShQUkludDMyKiBhT2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiogYVNvdXJjZUxlbmd0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFSZXBsYWNlTGVuZ3RoKSA9IDA7Cn07CgoKZXh0
ZXJuIG5zcmVzdWx0Ck5TX05ld1RleHROb2RlKG5zSUNvbnRlbnQqKiBhUmVzdWx0KTsKCmV4dGVy
biBuc3Jlc3VsdApOU19OZXdDb21tZW50Tm9kZShuc0lDb250ZW50KiogYVJlc3VsdCk7CiMgNjQg
Im5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVN1cHBvcnRzQXJyYXkuaCIgMQojIDE0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
U3VwcG9ydHNBcnJheS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb2xsZWN0
aW9uLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbGxlY3Rpb24uaCIK
Y2xhc3MgbnNJQ29sbGVjdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0
YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4
M2I2MDE5YywgMHhjYmM0LCAweDExZDIsIHsgMHg4YywgMHhjYSwgMHgwMCwgMHg2MCwgMHhiMCwg
MHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENv
dW50KFBSVWludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVsZW1l
bnRBdChQUlVpbnQzMiBpbmRleCwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFF1ZXJ5RWxlbWVudEF0KFBSVWludDMyIGluZGV4LCBjb25zdCBuc0lJRCAm
IHV1aWQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEVsZW1l
bnRBdChQUlVpbnQzMiBpbmRleCwgbnNJU3VwcG9ydHMgKml0ZW0pID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgQXBwZW5kRWxlbWVudChuc0lTdXBwb3J0cyAqaXRlbSkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBSZW1vdmVFbGVtZW50KG5zSVN1cHBvcnRzICppdGVtKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEVudW1lcmF0ZShuc0lFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBDbGVhcih2b2lkKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5oIiAyCgoKCgoKCmNsYXNzIG5zSUJpZGlyZWN0
aW9uYWxFbnVtZXJhdG9yOwojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9y
dHNBcnJheS5oIgp0eXBlZGVmIFBSQm9vbCAoKm5zSVN1cHBvcnRzQXJyYXlFbnVtRnVuYykobnNJ
U3VwcG9ydHMqIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CiMgNDQgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lTdXBwb3J0c0FycmF5LmgiCmNsYXNzIG5zSVN1cHBvcnRzQXJyYXkgOiBwdWJs
aWMgbnNJQ29sbGVjdGlvbiB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE
KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg3OTFlYWZhMCwgMHhiOWU2LCAweDExZDEs
IHsgMHg4MCwgMHgzMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHgxNSwgMHg5YiwgMHg1YSB9fTsgcmV0
dXJuIGlpZDt9CgoKICB2aXJ0dWFsIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNJU3VwcG9ydHNBcnJh
eSAqb3RoZXIpID0gMDsKCgogIHZpcnR1YWwgbnNJU3VwcG9ydHMgKiBFbGVtZW50QXQoUFJVaW50
MzIgYUluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIFBSSW50MzIgSW5kZXhPZihjb25zdCBuc0lTdXBw
b3J0cyAqYVBvc3NpYmxlRWxlbWVudCkgPSAwOwoKCiAgdmlydHVhbCBQUkludDMyIEluZGV4T2ZT
dGFydGluZ0F0KGNvbnN0IG5zSVN1cHBvcnRzICphUG9zc2libGVFbGVtZW50LCBQUlVpbnQzMiBh
U3RhcnRJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBQUkludDMyIExhc3RJbmRleE9mKGNvbnN0IG5z
SVN1cHBvcnRzICphUG9zc2libGVFbGVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dEluZGV4T2YobnNJU3VwcG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQsIFBSSW50MzIgKl9yZXR2YWwp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5kZXhPZlN0YXJ0aW5nQXQobnNJU3VwcG9y
dHMgKmFQb3NzaWJsZUVsZW1lbnQsIFBSVWludDMyIGFTdGFydEluZGV4LCBQUkludDMyICpfcmV0
dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhc3RJbmRleE9mKG5zSVN1cHBvcnRz
ICphUG9zc2libGVFbGVtZW50LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIFBS
Qm9vbCBJbnNlcnRFbGVtZW50QXQobnNJU3VwcG9ydHMgKmFFbGVtZW50LCBQUlVpbnQzMiBhSW5k
ZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIFJlcGxhY2VFbGVtZW50QXQobnNJU3VwcG9ydHMg
KmFFbGVtZW50LCBQUlVpbnQzMiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIFJlbW92
ZUVsZW1lbnRBdChQUlVpbnQzMiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIFJlbW92
ZUxhc3RFbGVtZW50KGNvbnN0IG5zSVN1cHBvcnRzICphRWxlbWVudCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBEZWxldGVMYXN0RWxlbWVudChuc0lTdXBwb3J0cyAqYUVsZW1lbnQpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlRWxlbWVudEF0KFBSVWludDMyIGFJbmRleCkgPSAw
OwoKCiAgdmlydHVhbCBQUkJvb2wgQXBwZW5kRWxlbWVudHMobnNJU3VwcG9ydHNBcnJheSAqYUVs
ZW1lbnRzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBhY3Qodm9pZCkgPSAwOwoKCiAg
dmlydHVhbCBQUkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNJU3VwcG9ydHNBcnJheUVudW1GdW5j
IGFGdW5jLCB2b2lkICogYURhdGEpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIEVudW1lcmF0ZUJh
Y2t3YXJkcyhuc0lTdXBwb3J0c0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQgKiBhRGF0YSkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lTdXBwb3J0c0FycmF5ICoqX3JldHZhbCkg
PSAwOwoKcHJpdmF0ZToKCiAgdmlydHVhbCBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc0lTdXBw
b3J0c0FycmF5JiBvdGhlcikgPSAwOwogIHZpcnR1YWwgbnNJU3VwcG9ydHMqIG9wZXJhdG9yW10o
UFJVaW50MzIgYUluZGV4KSA9IDA7Cn07CiMgMzI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJU3VwcG9ydHNBcnJheS5oIgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SVN1cHBvcnRzQXJyYXko
bnNJU3VwcG9ydHNBcnJheSoqIGFJbnN0YW5jZVB0clJlc3VsdCk7CgpleHRlcm4gbnNyZXN1bHQK
TlNfTmV3SVN1cHBvcnRzQXJyYXlFbnVtZXJhdG9yKG5zSVN1cHBvcnRzQXJyYXkqIGFycmF5LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3Iq
ICphSW5zdGFuY2VQdHJSZXN1bHQpOwojIDY1ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiIDEKIyA5MSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJRExTdHJpbmcuaCIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyA5MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
WFBJRExTdHJpbmcuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbS5oIiAx
CiMgOTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiIDIKIyAxICIv
d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5o
IiAxCiMgOTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiIDIKIyAx
MDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiCmNsYXNzIG5zWFBJ
RExTdHJpbmcgewpwcml2YXRlOgogICAgUFJVbmljaGFyKiBtQnVmOwoKICAgIFBSVW5pY2hhcioq
IFN0YXJ0QXNzaWdubWVudEJ5VmFsdWUoKTsKCnB1YmxpYzoKCgoKICAgIG5zWFBJRExTdHJpbmco
KSA6IG1CdWYoMCkge30KCiAgICB+bnNYUElETFN0cmluZygpOwoKCgoKICAgIG9wZXJhdG9yIGNv
bnN0IFBSVW5pY2hhciooKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQoKCgoKICAgIGNvbnN0IFBS
VW5pY2hhciogZ2V0KCkgY29uc3QgeyByZXR1cm4gbUJ1ZjsgfQoKCgoKICAgIGNsYXNzIEdldHRl
ckNvcGllcyB7CiAgICBwcml2YXRlOgogICAgICAgIG5zWFBJRExTdHJpbmcmIG1YUElETFN0cmlu
ZzsKCiAgICBwdWJsaWM6CiAgICAgICAgR2V0dGVyQ29waWVzKG5zWFBJRExTdHJpbmcmIGFYUElE
TFN0cmluZykKICAgICAgICAgICAgOiBtWFBJRExTdHJpbmcoYVhQSURMU3RyaW5nKSB7fQoKICAg
ICAgICBvcGVyYXRvciBQUlVuaWNoYXIqKigpIHsKICAgICAgICAgICAgcmV0dXJuIG1YUElETFN0
cmluZy5TdGFydEFzc2lnbm1lbnRCeVZhbHVlKCk7CiAgICAgICAgfQoKICAgICAgICBmcmllbmQg
R2V0dGVyQ29waWVzIGdldHRlcl9Db3BpZXMobnNYUElETFN0cmluZyYgYVhQSURMU3RyaW5nKTsK
ICAgIH07CgogICAgZnJpZW5kIGNsYXNzIEdldHRlckNvcGllczsKCiAgICBpbmxpbmUgdm9pZCBB
ZG9wdCggUFJVbmljaGFyKiApOwoKcHJpdmF0ZToKCiAgICBuc1hQSURMU3RyaW5nKG5zWFBJRExT
dHJpbmcmICkge30KICAgIHZvaWQgb3BlcmF0b3I9KG5zWFBJRExTdHJpbmcmICkge30KfTsKCgoK
CgppbmxpbmUgbnNYUElETFN0cmluZzo6R2V0dGVyQ29waWVzCmdldHRlcl9Db3BpZXMobnNYUElE
TFN0cmluZyYgYVhQSURMU3RyaW5nKQp7CiAgICByZXR1cm4gbnNYUElETFN0cmluZzo6R2V0dGVy
Q29waWVzKGFYUElETFN0cmluZyk7Cn0KCmlubGluZQp2b2lkCm5zWFBJRExTdHJpbmc6OkFkb3B0
KCBQUlVuaWNoYXIqIGFOZXdWYWx1ZSApCiAgewogICAgKlN0YXJ0QXNzaWdubWVudEJ5VmFsdWUo
KSA9IGFOZXdWYWx1ZTsKICB9CgoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KGNvbnN0IFBSVW5p
Y2hhciogbGhzLCBjb25zdCBuc1hQSURMU3RyaW5nJiByaHMpCnsKICAgIHJldHVybiBsaHMgPT0g
cmhzLmdldCgpOwp9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPT0oY29uc3QgbnNYUElETFN0cmlu
ZyYgbGhzLCBjb25zdCBQUlVuaWNoYXIqIHJocykKewogICAgcmV0dXJuIGxocy5nZXQoKSA9PSBy
aHM7Cn0KIyAyMjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiCmNs
YXNzIG5zWFBJRExDU3RyaW5nIHsKcHJpdmF0ZToKICAgIGNoYXIqIG1CdWY7CgogICAgY2hhcioq
IFN0YXJ0QXNzaWdubWVudEJ5VmFsdWUoKTsKCnB1YmxpYzoKCgoKICAgIG5zWFBJRExDU3RyaW5n
KCkgOiBtQnVmKDApIHt9CgogICAgfm5zWFBJRExDU3RyaW5nKCk7CgoKCgogICAgb3BlcmF0b3Ig
Y29uc3QgY2hhciooKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQoKCgoKICAgIGNvbnN0IGNoYXIq
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1CdWY7IH0KCgoKCiAgICBjbGFzcyBHZXR0ZXJDb3BpZXMg
ewogICAgcHJpdmF0ZToKICAgICAgICBuc1hQSURMQ1N0cmluZyYgbVhQSURMU3RyaW5nOwoKICAg
IHB1YmxpYzoKICAgICAgICBHZXR0ZXJDb3BpZXMobnNYUElETENTdHJpbmcmIGFYUElETFN0cmlu
ZykKICAgICAgICAgICAgOiBtWFBJRExTdHJpbmcoYVhQSURMU3RyaW5nKSB7fQoKICAgICAgICBv
cGVyYXRvciBjaGFyKiooKSB7CiAgICAgICAgICAgIHJldHVybiBtWFBJRExTdHJpbmcuU3RhcnRB
c3NpZ25tZW50QnlWYWx1ZSgpOwogICAgICAgIH0KCiAgICAgICAgZnJpZW5kIEdldHRlckNvcGll
cyBnZXR0ZXJfQ29waWVzKG5zWFBJRExDU3RyaW5nJiBhWFBJRExTdHJpbmcpOwogICAgfTsKCiAg
ICBmcmllbmQgY2xhc3MgR2V0dGVyQ29waWVzOwoKICAgIGlubGluZSB2b2lkIEFkb3B0KCBjaGFy
KiApOwoKcHJpdmF0ZToKCiAgICBuc1hQSURMQ1N0cmluZyhuc1hQSURMQ1N0cmluZyYgKSB7fQog
ICAgdm9pZCBvcGVyYXRvcj0obnNYUElETENTdHJpbmcmICkge30KfTsKCgoKCgppbmxpbmUgbnNY
UElETENTdHJpbmc6OkdldHRlckNvcGllcwpnZXR0ZXJfQ29waWVzKG5zWFBJRExDU3RyaW5nJiBh
WFBJRExTdHJpbmcpCnsKICAgIHJldHVybiBuc1hQSURMQ1N0cmluZzo6R2V0dGVyQ29waWVzKGFY
UElETFN0cmluZyk7Cn0KCmlubGluZQp2b2lkCm5zWFBJRExDU3RyaW5nOjpBZG9wdCggY2hhciog
YU5ld1ZhbHVlICkKICB7CiAgICAqU3RhcnRBc3NpZ25tZW50QnlWYWx1ZSgpID0gYU5ld1ZhbHVl
OwogIH0KCgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPT0oY29uc3QgY2hhciogbGhzLCBjb25zdCBu
c1hQSURMQ1N0cmluZyYgcmhzKQp7CiAgICByZXR1cm4gbGhzID09IHJocy5nZXQoKTsKfQoKaW5s
aW5lClBSQm9vbApvcGVyYXRvcj09KGNvbnN0IG5zWFBJRExDU3RyaW5nJiBsaHMsIGNvbnN0IGNo
YXIqIHJocykKewogICAgcmV0dXJuIGxocy5nZXQoKSA9PSByaHM7Cn0KIyA2NiAibnNGb3JtQ29u
dHJvbEhlbHBlci5jcHAiIDIKCnN0YXRpYyBjb25zdCBuc0NJRCBrSU9TZXJ2aWNlQ0lEID0geyAw
eDlhYzllNzcwLCAweDE4YmMsIDB4MTFkMywgezB4OTMsIDB4MzcsIDB4MDAsIDB4MTAsIDB4NGIs
IDB4YTAsIDB4ZmQsIDB4NDB9IH07CnN0YXRpYyBjb25zdCBuc0NJRCBrU3RyaW5nQnVuZGxlU2Vy
dmljZUNJRCA9IHsgMHhkODVhMTdjMSwgMHhhYTdjLCAweDExZDIsIHsgMHg5YiwgMHg4YywgMHgw
LCAweDgwLCAweDVmLCAweDhhLCAweDE2LCAweGQ5IH0gfTsKCgoKc3RhdGljIGNvbnN0IG5zSUlE
IGtJU3VwcG9ydHNJSUQgPSB7IDB4MDAwMDAwMDAsIDB4MDAwMCwgMHgwMDAwLCB7MHhjMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0Nn0gfTsKc3RhdGljIGNvbnN0IG5z
SUlEIGtWaWV3Q0lEID0geyAweGM5NWYxODMyLCAweGMzNzYsIDB4MTFkMSwgezB4YjcsIDB4MjEs
IDB4MCwgMHg2MCwgMHg4LCAweDkxLCAweGQ4LCAweGM5fX07CiMgODggIm5zRm9ybUNvbnRyb2xI
ZWxwZXIuY3BwIgpuc0Zvcm1Db250cm9sSGVscGVyOjpuc0Zvcm1Db250cm9sSGVscGVyKCkKewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9Cgpuc0Zvcm1Db250cm9sSGVs
cGVyOjp+bnNGb3JtQ29udHJvbEhlbHBlcigpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKfQoKdm9pZCBuc0Zvcm1Db250cm9sSGVscGVyOjpGb3JjZURyYXdGcmFtZShu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqIGFGcmFtZSkKewoKICBpZiAo
YUZyYW1lID09IDApIHsKICAgIHJldHVybjsKICB9CiAgbnNSZWN0IHJlY3Q7CiAgbnNJVmlldyAq
IHZpZXc7CiAgbnNQb2ludCBwbnQ7CiAgYUZyYW1lLT5HZXRPZmZzZXRGcm9tVmlldyhhUHJlc0Nv
bnRleHQsIHBudCwgJnZpZXcpOwogIGFGcmFtZS0+R2V0UmVjdChyZWN0KTsKICByZWN0LnggPSBw
bnQueDsKICByZWN0LnkgPSBwbnQueTsKICBpZiAodmlldyAhPSAwKSB7CiAgICBuc0lWaWV3TWFu
YWdlciAqIHZpZXdNZ3I7CiAgICB2aWV3LT5HZXRWaWV3TWFuYWdlcih2aWV3TWdyKTsKICAgIGlm
ICh2aWV3TWdyICE9IDApIHsKICAgICAgdmlld01nci0+VXBkYXRlVmlldyh2aWV3LCByZWN0LCAw
eDAwMDQpOwogICAgICBkbyB7ICh2aWV3TWdyKS0+UmVsZWFzZSgpOyAodmlld01ncikgPSAwOyB9
IHdoaWxlICgwKTsKICAgIH0KICB9Cgp9Cgp2b2lkIG5zRm9ybUNvbnRyb2xIZWxwZXI6OlBsYXRm
b3JtVG9ET01MaW5lQnJlYWtzKG5zU3RyaW5nICZhU3RyaW5nKQp7CgogIGFTdHJpbmcuUmVwbGFj
ZVN1YnN0cmluZyhOU19Db252ZXJ0QVNDSUl0b1VDUzIoIlxyXG4iKSwgTlNfQ29udmVydEFTQ0lJ
dG9VQ1MyKCJcbiIpKTsKCgogIGFTdHJpbmcuUmVwbGFjZVN1YnN0cmluZyhOU19Db252ZXJ0QVND
SUl0b1VDUzIoIlxyIiksIE5TX0NvbnZlcnRBU0NJSXRvVUNTMigiXG4iKSk7Cn0KClBSQm9vbCBu
c0Zvcm1Db250cm9sSGVscGVyOjpHZXRCb29sKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFs
dWUpCnsKICByZXR1cm4gYVZhbHVlLkVxdWFscyhzdGF0aWNfY2FzdDwgY29uc3QgbnNBRmxhdFN0
cmluZyYgPihuc0RlcGVuZGVudFN0cmluZyhyZWludGVycHJldF9jYXN0PCBjb25zdCBQUlVuaWNo
YXIqID4oTCIxIiksIFBSVWludDMyKChzaXplb2YoTCIxIikvc2l6ZW9mKHdjaGFyX3QpKS0xKSkp
KTsKfQoKdm9pZCBuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRCb29sU3RyaW5nKGNvbnN0IFBSQm9v
bCBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FXcml0
YWJsZVN0cmluZyYgYVJlc3VsdCkKewogIGlmIChhVmFsdWUpCiAgICBhUmVzdWx0LkFzc2lnbihz
dGF0aWNfY2FzdDwgY29uc3QgbnNBRmxhdFN0cmluZyYgPihuc0RlcGVuZGVudFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PCBjb25zdCBQUlVuaWNoYXIqID4oTCIxIiksIFBSVWludDMyKChzaXplb2Yo
TCIxIikvc2l6ZW9mKHdjaGFyX3QpKS0xKSkpKTsKICBlbHNlCiAgICBhUmVzdWx0LkFzc2lnbihz
dGF0aWNfY2FzdDwgY29uc3QgbnNBRmxhdFN0cmluZyYgPihuc0RlcGVuZGVudFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PCBjb25zdCBQUlVuaWNoYXIqID4oTCIwIiksIFBSVWludDMyKChzaXplb2Yo
TCIwIikvc2l6ZW9mKHdjaGFyX3QpKS0xKSkpKTsKfQoKCm5zQ29tcGF0aWJpbGl0eQpuc0Zvcm1D
b250cm9sSGVscGVyOjpHZXRSZXBDaGFycyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBj
aGFyJiBjaGFyMSwgY2hhciYgY2hhcjIpCnsKICBuc0NvbXBhdGliaWxpdHkgbW9kZTsKICBhUHJl
c0NvbnRleHQtPkdldENvbXBhdGliaWxpdHlNb2RlKCZtb2RlKTsKICBpZiAoZUNvbXBhdGliaWxp
dHlfU3RhbmRhcmQgPT0gbW9kZSkgewogICAgY2hhcjEgPSAnVyc7CiAgICBjaGFyMiA9ICd3JzsK
ICAgIHJldHVybiBlQ29tcGF0aWJpbGl0eV9TdGFuZGFyZDsKICB9IGVsc2UgewogICAgY2hhcjEg
PSAnVyc7CiAgICBjaGFyMiA9ICd3JzsKICAgIHJldHVybiBlQ29tcGF0aWJpbGl0eV9OYXZRdWly
a3M7CiAgfQp9Cgpuc3Jlc3VsdCBuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRGcmFtZUZvbnRGTShu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZvcm1Db250cm9sRnJhbWUgKiBhRnJhbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRm9udE1ldHJpY3MqKiBhRm9udE1ldCkKewoK
ICBjb25zdCBuc0ZvbnQgKiBmb250ID0gMDsKCiAgaWYgKCghKChhRnJhbWUtPkdldEZvbnQoYVBy
ZXNDb250ZXh0LCBmb250KSkgJiAweDgwMDAwMDAwKSkpIHsKICAgIG5zQ09NUHRyPG5zSURldmlj
ZUNvbnRleHQ+IGRldmljZUNvbnRleHQ7CiAgICBhUHJlc0NvbnRleHQtPkdldERldmljZUNvbnRl
eHQoZ2V0dGVyX0FkZFJlZnMoZGV2aWNlQ29udGV4dCkpOwogICAge307CiAgICBpZiAoZm9udCAh
PSAwKSB7CiAgICAgIHJldHVybiBkZXZpY2VDb250ZXh0LT5HZXRNZXRyaWNzRm9yKCpmb250LCAq
YUZvbnRNZXQpOwogICAgfQogIH0KICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwNUwpOwp9
Cgpuc3Jlc3VsdApuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRXcmFwUHJvcGVydHkobnNJQ29udGVu
dCAqIGFDb250ZW50LCBuc1N0cmluZyAmYU91dFZhbHVlKQp7CiAgYU91dFZhbHVlLlNldExlbmd0
aCgwKTsKICBuc3Jlc3VsdCByZXN1bHQgPSAoKG5zcmVzdWx0KSAoKChQUlVpbnQzMikoMCk8PDMx
KSB8ICgoUFJVaW50MzIpKDggKzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgxKSkpICk7CiAgbnNJ
SFRNTENvbnRlbnQqIGNvbnRlbnQgPSAwOwogIGFDb250ZW50LT5RdWVyeUludGVyZmFjZShrSUhU
TUxDb250ZW50SUlELCAodm9pZCoqKSAmY29udGVudCk7CiAgaWYgKDAgIT0gY29udGVudCkgewog
ICAgbnNIVE1MVmFsdWUgdmFsdWU7CiAgICByZXN1bHQgPSBjb250ZW50LT5HZXRIVE1MQXR0cmli
dXRlKG5zSFRNTEF0b21zOjp3cmFwLCB2YWx1ZSk7CiAgICBpZiAoZUhUTUxVbml0X1N0cmluZyA9
PSB2YWx1ZS5HZXRVbml0KCkpIHsKICAgICAgdmFsdWUuR2V0U3RyaW5nVmFsdWUoYU91dFZhbHVl
KTsKICAgIH0KICAgIGRvIHsgKGNvbnRlbnQpLT5SZWxlYXNlKCk7IChjb250ZW50KSA9IDA7IH0g
d2hpbGUgKDApOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgoKbnNyZXN1bHQKbnNGb3JtQ29udHJv
bEhlbHBlcjo6R2V0V3JhcFByb3BlcnR5RW51bShuc0lDb250ZW50ICogYUNvbnRlbnQsIG5zSFRN
TFRleHRXcmFwJiBhV3JhcFByb3ApCnsKICBuc1N0cmluZyB3cmFwOwogIGFXcmFwUHJvcCA9IGVI
VE1MVGV4dFdyYXBfT2ZmOwoKICBuc3Jlc3VsdCByZXN1bHQgPSBHZXRXcmFwUHJvcGVydHkoYUNv
bnRlbnQsIHdyYXApOwoKICBpZiAoKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIpKDApPDwzMSkgfCAo
KFBSVWludDMyKSg4ICsweDQ1KTw8MTYpIHwgKChQUlVpbnQzMikoMSkpKSApICE9IHJlc3VsdCkg
ewoKICAgIG5zQXV0b1N0cmluZyB3cmFwSGFyZDsgd3JhcEhhcmQuQXNzaWduV2l0aENvbnZlcnNp
b24oIkhBUkQiKTsKICAgIG5zQXV0b1N0cmluZyB3cmFwUGh5c2ljYWw7IHdyYXBQaHlzaWNhbC5B
c3NpZ25XaXRoQ29udmVyc2lvbigiUEhZU0lDQUwiKTsKICAgIGlmICh3cmFwLkVxdWFsc0lnbm9y
ZUNhc2Uod3JhcEhhcmQpKSB7CiAgICAgIGFXcmFwUHJvcCA9IGVIVE1MVGV4dFdyYXBfSGFyZDsK
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBuc0F1dG9TdHJpbmcgd3JhcFNvZnQ7IHdy
YXBTb2Z0LkFzc2lnbldpdGhDb252ZXJzaW9uKCJTT0ZUIik7CiAgICBuc0F1dG9TdHJpbmcgd3Jh
cFZpcnR1YWw7IHdyYXBWaXJ0dWFsLkFzc2lnbldpdGhDb252ZXJzaW9uKCJWSVJUVUFMIik7CiAg
ICBpZiAod3JhcC5FcXVhbHNJZ25vcmVDYXNlKHdyYXBTb2Z0KSB8fAogICAgICAgIHdyYXAuRXF1
YWxzSWdub3JlQ2FzZSh3cmFwVmlydHVhbCkgfHwKICAgICAgICB3cmFwLkVxdWFsc0lnbm9yZUNh
c2Uod3JhcFBoeXNpY2FsKSkgewogICAgICBhV3JhcFByb3AgPSBlSFRNTFRleHRXcmFwX1NvZnQ7
CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCm5zY29v
cmQKbnNGb3JtQ29udHJvbEhlbHBlcjo6Q2FsY05hdlF1aXJrU2l6aW5nKG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lSZW5kZXJpbmdDb250ZXh0KiBhUmVuZENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lGb250TWV0cmljcyogYUZvbnRNZXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGb3JtQ29udHJvbEZyYW1lKiBhRnJhbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lucHV0RGltZW5zaW9uU3Bl
YyYgYVNwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUm
IGFTaXplKQp7CiAgZmxvYXQgcDJ0OwogIGZsb2F0IHQycDsKICBhUHJlc0NvbnRleHQtPkdldFBp
eGVsc1RvVHdpcHMoJnAydCk7CiAgYVByZXNDb250ZXh0LT5HZXRUd2lwc1RvUGl4ZWxzKCZ0MnAp
OwoKICBuc2Nvb3JkIGFzY2VudDsKICBuc2Nvb3JkIGRlc2NlbnQ7CiAgbnNjb29yZCBtYXhDaGFy
V2lkdGg7CiAgYUZvbnRNZXQtPkdldE1heEFzY2VudChhc2NlbnQpOwogIGFGb250TWV0LT5HZXRN
YXhEZXNjZW50KGRlc2NlbnQpOwogIGFGb250TWV0LT5HZXRNYXhBZHZhbmNlKG1heENoYXJXaWR0
aCk7CgogIGFzY2VudCA9IE5TVG9Db29yZFJvdW5kKGFzY2VudCAqIHQycCk7CiAgZGVzY2VudCA9
IE5TVG9Db29yZFJvdW5kKGRlc2NlbnQgKiB0MnApOwogIG1heENoYXJXaWR0aCA9IE5TVG9Db29y
ZFJvdW5kKG1heENoYXJXaWR0aCAqIHQycCk7CgogIGNoYXIgY2hhcjEsIGNoYXIyOwogIEdldFJl
cENoYXJzKGFQcmVzQ29udGV4dCwgY2hhcjEsIGNoYXIyKTsKCiAgbnNjb29yZCBjaGFyMVdpZHRo
LCBjaGFyMldpZHRoOwogIGFSZW5kQ29udGV4dC0+R2V0V2lkdGgoY2hhcjEsIGNoYXIxV2lkdGgp
OwogIGFSZW5kQ29udGV4dC0+R2V0V2lkdGgoY2hhcjIsIGNoYXIyV2lkdGgpOwogIGNoYXIxV2lk
dGggPSBOU1RvQ29vcmRSb3VuZChjaGFyMVdpZHRoICogdDJwKTsKICBjaGFyMldpZHRoID0gTlNU
b0Nvb3JkUm91bmQoY2hhcjJXaWR0aCAqIHQycCk7CgoKICBQUkludDMyIHR5cGU7CiAgYUZyYW1l
LT5HZXRUeXBlKCZ0eXBlKTsKICBuc2Nvb3JkIHdpZHRoOwogIG5zY29vcmQgaGd0OwogIG5zY29v
cmQgaGVpZ2h0OwogIG5zY29vcmQgYXZlcmFnZSA9IDA7CiAgaWYgKCgxNCA9PSB0eXBlKSB8fCAo
MTEgPT0gdHlwZSkpIHsKICAgIGF2ZXJhZ2UgPSAoY2hhcjFXaWR0aCArIGNoYXIyV2lkdGgpIC8g
MjsKICAgIHdpZHRoID0gbWF4Q2hhcldpZHRoOwogICAgaGd0ID0gYXNjZW50ICsgZGVzY2VudDsK
ICAgIGhlaWdodCA9IGhndCArIChoZ3QgLyAyKTsKICAgIHdpZHRoICs9IGFTcGVjLm1Db2xEZWZh
dWx0U2l6ZSAqIGF2ZXJhZ2U7CiAgfSBlbHNlIGlmICgyMCA9PSB0eXBlKSB7CiAgICBuc2Nvb3Jk
IGxpbmVzID0gMTsKICAgIG5zY29vcmQgc2Nyb2xsYmFyV2lkdGggPSAwOwogICAgbnNjb29yZCBz
Y3JvbGxiYXJIZWlnaHQgPSAwOwogICAgZmxvYXQgc2NhbGU7CiAgICBuc0NPTVB0cjxuc0lEZXZp
Y2VDb250ZXh0PiBkeDsKICAgIGFQcmVzQ29udGV4dC0+R2V0RGV2aWNlQ29udGV4dChnZXR0ZXJf
QWRkUmVmcyhkeCkpOwogICAgaWYgKGR4KSB7CiAgICAgIGZsb2F0IHNiV2lkdGg7CiAgICAgIGZs
b2F0IHNiSGVpZ2h0OwogICAgICBkeC0+R2V0Q2Fub25pY2FsUGl4ZWxTY2FsZShzY2FsZSk7CiAg
ICAgIGR4LT5HZXRTY3JvbGxCYXJEaW1lbnNpb25zKHNiV2lkdGgsIHNiSGVpZ2h0KTsKICAgICAg
c2Nyb2xsYmFyV2lkdGggPSBQUkludDMyKHNiV2lkdGggKiBzY2FsZSk7CiAgICAgIHNjcm9sbGJh
ckhlaWdodCA9IFBSSW50MzIoc2JIZWlnaHQgKiBzY2FsZSk7CiAgICAgIHNjcm9sbGJhcldpZHRo
ID0gTlNUb0Nvb3JkUm91bmQoc2Nyb2xsYmFyV2lkdGggKiB0MnApOwogICAgICBzY3JvbGxiYXJI
ZWlnaHQgPSBOU1RvQ29vcmRSb3VuZChzY3JvbGxiYXJIZWlnaHQgKiB0MnApOwogICAgfSBlbHNl
IHsKICAgICAge307CiAgICAgIHNjcm9sbGJhcldpZHRoID0gMTY7CiAgICAgIHNjcm9sbGJhckhl
aWdodCA9IDE2OwogICAgfQogICAgbnNJQ29udGVudCAqIGNvbnRlbnQ7CiAgICBhRnJhbWUtPkdl
dEZvcm1Db250ZW50KGNvbnRlbnQpOwogICAgbnNDT01QdHI8bnNJSFRNTENvbnRlbnQ+IGhDb250
ZW50KGRvX1F1ZXJ5SW50ZXJmYWNlKGNvbnRlbnQpKTsKCgogICAgbnNIVE1MVmFsdWUgcm93QXR0
cjsKICAgIG5zcmVzdWx0IHJvd1N0YXR1cyA9ICgobnNyZXN1bHQpICgoKFBSVWludDMyKSgwKTw8
MzEpIHwgKChQUlVpbnQzMikoOCArMHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEpKSkgKTsKICAg
IGlmICgwICE9IGFTcGVjLm1Sb3dTaXplQXR0cikgewogICAgICByb3dTdGF0dXMgPSBoQ29udGVu
dC0+R2V0SFRNTEF0dHJpYnV0ZShhU3BlYy5tUm93U2l6ZUF0dHIsIHJvd0F0dHIpOwogICAgfQog
ICAgaWYgKDAgPT0gcm93U3RhdHVzKSB7CiAgICAgIFBSSW50MzIgcm93QXR0ckludCA9ICgocm93
QXR0ci5HZXRVbml0KCkgPT0gZUhUTUxVbml0X1BpeGVsKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IHJvd0F0dHIuR2V0UGl4ZWxWYWx1ZSgpIDogcm93QXR0ci5HZXRJbnRWYWx1ZSgp
KTsKICAgICAgbGluZXMgPSAocm93QXR0ckludCA+IDApID8gcm93QXR0ckludCA6IDE7CiAgICB9
IGVsc2UgewogICAgICBsaW5lcyA9IGFTcGVjLm1Sb3dEZWZhdWx0U2l6ZTsKICAgIH0KCiAgICBh
dmVyYWdlID0gKGNoYXIxV2lkdGggKyBjaGFyMldpZHRoKSAvIDI7CiAgICB3aWR0aCA9ICgoYVNw
ZWMubUNvbERlZmF1bHRTaXplICsgMSkgKiBhdmVyYWdlKSArIHNjcm9sbGJhcldpZHRoOwogICAg
aGd0ID0gYXNjZW50ICsgZGVzY2VudDsKICAgIGhlaWdodCA9IChsaW5lcyArIDEpICogaGd0OwoK
CiAgICBuc0hUTUxUZXh0V3JhcCB3cmFwUHJvcDsKICAgIG5zRm9ybUNvbnRyb2xIZWxwZXI6Okdl
dFdyYXBQcm9wZXJ0eUVudW0oY29udGVudCwgd3JhcFByb3ApOwogICAgaWYgKHdyYXBQcm9wID09
IGVIVE1MVGV4dFdyYXBfT2ZmKSB7CiAgICAgIGhlaWdodCArPSBzY3JvbGxiYXJIZWlnaHQ7CiAg
ICB9CiAgICBkbyB7IChjb250ZW50KS0+UmVsZWFzZSgpOyAoY29udGVudCkgPSAwOyB9IHdoaWxl
ICgwKTsKICB9IGVsc2UgaWYgKDUgPT0gdHlwZSB8fAogICAgICAgICAgICAgMTMgPT0gdHlwZSB8
fAogICAgICAgICAgICAgOSA9PSB0eXBlKSB7CiAgICBHZXRUZXh0U2l6ZShhUHJlc0NvbnRleHQs
IGFGcmFtZSwgKmFTcGVjLm1Db2xEZWZhdWx0VmFsdWUsIGFTaXplLCBhUmVuZENvbnRleHQpOwog
ICAgYVNpemUud2lkdGggPSBOU1RvQ29vcmRSb3VuZChhU2l6ZS53aWR0aCAqIHQycCk7CiAgICBh
U2l6ZS5oZWlnaHQgPSBOU1RvQ29vcmRSb3VuZChhU2l6ZS5oZWlnaHQgKiB0MnApOwogICAgd2lk
dGggPSAzICogYVNpemUud2lkdGggLyAyOwogICAgaGVpZ2h0ID0gMyAqIGFTaXplLmhlaWdodCAv
IDI7CiAgfSBlbHNlIGlmICg4ID09IHR5cGUpIHsKICAgIHdpZHRoID0gMDsKICAgIGhlaWdodCA9
IDA7CiAgfSBlbHNlIHsKICAgIHdpZHRoID0gMDsKICAgIGhlaWdodCA9IDA7CiAgfQoKCgoKCgog
IGFTaXplLndpZHRoID0gTlNJbnRQaXhlbHNUb1R3aXBzKHdpZHRoLCBwMnQpOwogIGFTaXplLmhl
aWdodCA9IE5TSW50UGl4ZWxzVG9Ud2lwcyhoZWlnaHQsIHAydCk7CiAgYXZlcmFnZSA9IE5TSW50
UGl4ZWxzVG9Ud2lwcyhhdmVyYWdlLCBwMnQpOwoKICByZXR1cm4gYXZlcmFnZTsKCn0KCm5zY29v
cmQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0VGV4dFNpemUobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLCBuc1NpemUmIGFTaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQgKmFSZW5kQ29u
dGV4dCkKewogIG5zQ09NUHRyPG5zSUZvbnRNZXRyaWNzPiBmb250TWV0OwogIG5zcmVzdWx0IHJl
cyA9IEdldEZyYW1lRm9udEZNKGFQcmVzQ29udGV4dCwgYUZyYW1lLCBnZXR0ZXJfQWRkUmVmcyhm
b250TWV0KSk7CiAgaWYgKCghKChyZXMpICYgMHg4MDAwMDAwMCkpICYmIGZvbnRNZXQpIHsKICAg
IGFSZW5kQ29udGV4dC0+U2V0Rm9udChmb250TWV0KTsKCgogICAgYVJlbmRDb250ZXh0LT5HZXRX
aWR0aChhU3RyaW5nLCBhU2l6ZS53aWR0aCk7CiAgICBmb250TWV0LT5HZXRIZWlnaHQoYVNpemUu
aGVpZ2h0KTsKICB9IGVsc2UgewogICAge307CiAgICBhU2l6ZS53aWR0aCA9IDA7CiAgfQoKICBj
aGFyIGNoYXIxLCBjaGFyMjsKICBuc0NvbXBhdGliaWxpdHkgbW9kZSA9IEdldFJlcENoYXJzKGFQ
cmVzQ29udGV4dCwgY2hhcjEsIGNoYXIyKTsKICBuc2Nvb3JkIGNoYXIxV2lkdGgsIGNoYXIyV2lk
dGg7CiAgYVJlbmRDb250ZXh0LT5HZXRXaWR0aChjaGFyMSwgY2hhcjFXaWR0aCk7CiAgYVJlbmRD
b250ZXh0LT5HZXRXaWR0aChjaGFyMiwgY2hhcjJXaWR0aCk7CgogIGlmIChlQ29tcGF0aWJpbGl0
eV9TdGFuZGFyZCA9PSBtb2RlKSB7CiAgICByZXR1cm4gKChjaGFyMVdpZHRoICsgY2hhcjJXaWR0
aCkgLyAyKSArIDE7CiAgfSBlbHNlIHsKICAgIHJldHVybiAoY2hhcjFXaWR0aCArIGNoYXIyV2lk
dGgpIC8gMjsKICB9Cn0KCm5zY29vcmQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0VGV4dFNpemUo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU51bUNoYXJzLCBuc1Np
emUmIGFTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0Nv
bnRleHQgKmFSZW5kQ29udGV4dCkKewogIG5zQXV0b1N0cmluZyB2YWw7CiAgY2hhciBjaGFyMSwg
Y2hhcjI7CiAgR2V0UmVwQ2hhcnMoYVByZXNDb250ZXh0LCBjaGFyMSwgY2hhcjIpOwogIGludCBp
OwogIGZvciAoaSA9IDA7IGkgPCBhTnVtQ2hhcnM7IGkrPTIpIHsKICAgIHZhbC5BcHBlbmRXaXRo
Q29udmVyc2lvbihjaGFyMSk7CiAgfQogIGZvciAoaSA9IDE7IGkgPCBhTnVtQ2hhcnM7IGkrPTIp
IHsKICAgIHZhbC5BcHBlbmRXaXRoQ29udmVyc2lvbihjaGFyMik7CiAgfQogIHJldHVybiBHZXRU
ZXh0U2l6ZShhUHJlc0NvbnRleHQsIGFGcmFtZSwgdmFsLCBhU2l6ZSwgYVJlbmRDb250ZXh0KTsK
fQoKUFJJbnQzMgpuc0Zvcm1Db250cm9sSGVscGVyOjpDYWxjdWxhdGVTaXplIChuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lSZW5kZXJpbmdDb250ZXh0KiBhUmVuZENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTaXplJiBhQ1NTU2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJbnB1dERpbWVuc2lvblNwZWMmIGFTcGVjLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUmIGFEZXNpcmVkU2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTaXplJiBhTWluU2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhV2lkdGhFeHBsaWNpdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhSGVpZ2h0RXhwbGljaXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQmIGFSb3dIZWlnaHQp
CnsKICBuc2Nvb3JkIGNoYXJXaWR0aCA9IDA7CiAgUFJJbnQzMiBudW1Sb3dzID0gLTE7CiAgYVdp
ZHRoRXhwbGljaXQgPSAwOwogIGFIZWlnaHRFeHBsaWNpdCA9IDA7CgogIGFEZXNpcmVkU2l6ZS53
aWR0aCA9IC0xOwogIGFEZXNpcmVkU2l6ZS5oZWlnaHQgPSAtMTsKCiAgbnNJQ29udGVudCogaUNv
bnRlbnQgPSAwOwogIGFGcmFtZS0+R2V0Rm9ybUNvbnRlbnQoKG5zSUNvbnRlbnQqJikgaUNvbnRl
bnQpOwogIGlmICghaUNvbnRlbnQpIHsKICAgIHJldHVybiAwOwogIH0KICBuc0lIVE1MQ29udGVu
dCogaENvbnRlbnQgPSAwOwogIG5zcmVzdWx0IHJlc3VsdCA9IGlDb250ZW50LT5RdWVyeUludGVy
ZmFjZShrSUhUTUxDb250ZW50SUlELCAodm9pZCoqKSZoQ29udGVudCk7CiAgaWYgKCgwICE9IHJl
c3VsdCkgfHwgIWhDb250ZW50KSB7CiAgICBkbyB7IChpQ29udGVudCktPlJlbGVhc2UoKTsgKGlD
b250ZW50KSA9IDA7IH0gd2hpbGUgKDApOwogICAgcmV0dXJuIDA7CiAgfQogIG5zQXV0b1N0cmlu
ZyB2YWxBdHRyOwogIG5zcmVzdWx0IHZhbFN0YXR1cyA9ICgobnNyZXN1bHQpICgoKFBSVWludDMy
KSgwKTw8MzEpIHwgKChQUlVpbnQzMikoOCArMHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEpKSkg
KTsKICBpZiAoMCAhPSBhU3BlYy5tQ29sVmFsdWVBdHRyKSB7CiAgICB2YWxTdGF0dXMgPSBoQ29u
dGVudC0+R2V0QXR0cmlidXRlKDMsIGFTcGVjLm1Db2xWYWx1ZUF0dHIsIHZhbEF0dHIpOwogIH0K
ICBuc0hUTUxWYWx1ZSBjb2xBdHRyOwogIG5zcmVzdWx0IGNvbFN0YXR1cyA9ICgobnNyZXN1bHQp
ICgoKFBSVWludDMyKSgwKTw8MzEpIHwgKChQUlVpbnQzMikoOCArMHg0NSk8PDE2KSB8ICgoUFJV
aW50MzIpKDEpKSkgKTsKICBpZiAoMCAhPSBhU3BlYy5tQ29sU2l6ZUF0dHIpIHsKICAgIGNvbFN0
YXR1cyA9IGhDb250ZW50LT5HZXRIVE1MQXR0cmlidXRlKGFTcGVjLm1Db2xTaXplQXR0ciwgY29s
QXR0cik7CiAgfQogIGZsb2F0IHAydDsKICBhUHJlc0NvbnRleHQtPkdldFNjYWxlZFBpeGVsc1Rv
VHdpcHMoJnAydCk7CiMgNDY2ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIKICBuc0NvbXBhdGli
aWxpdHkgcU1vZGU7CiAgYVByZXNDb250ZXh0LT5HZXRDb21wYXRpYmlsaXR5TW9kZSgmcU1vZGUp
OwoKCiAgaWYgKDAgPT0gY29sU3RhdHVzKSB7CiAgICBQUkludDMyIGNvbCA9ICgoY29sQXR0ci5H
ZXRVbml0KCkgPT0gZUhUTUxVbml0X1BpeGVsKSA/IGNvbEF0dHIuR2V0UGl4ZWxWYWx1ZSgpIDog
Y29sQXR0ci5HZXRJbnRWYWx1ZSgpKTsKICAgIGlmIChhU3BlYy5tQ29sU2l6ZUF0dHJJblBpeGVs
cykgewoKICAgICAgY2hhcldpZHRoID0gR2V0VGV4dFNpemUoYVByZXNDb250ZXh0LCBhRnJhbWUs
IDEsIGFEZXNpcmVkU2l6ZSwgYVJlbmRDb250ZXh0KTsKICAgICAgY29sID0gKGNvbCA8PSAwKSA/
IDE1IDogY29sOwoKICAgICAgYURlc2lyZWRTaXplLndpZHRoID0gTlNJbnRQaXhlbHNUb1R3aXBz
KGNvbCwgcDJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbCA9IChjb2wgPD0gMCkgPyAxIDogY29s
OwogICAgICBpZiAoZUNvbXBhdGliaWxpdHlfTmF2UXVpcmtzID09IHFNb2RlKSB7CiAgICAgICAg
bnNDT01QdHI8bnNJRm9udE1ldHJpY3M+IGZvbnRNZXQ7CiAgICAgICAgbnNyZXN1bHQgcmVzID0g
R2V0RnJhbWVGb250Rk0oYVByZXNDb250ZXh0LCBhRnJhbWUsIGdldHRlcl9BZGRSZWZzKGZvbnRN
ZXQpKTsKICAgICAgICBpZiAoKCEoKHJlcykgJiAweDgwMDAwMDAwKSkgJiYgZm9udE1ldCkgewog
ICAgICAgICAgYVJlbmRDb250ZXh0LT5TZXRGb250KGZvbnRNZXQpOwogICAgICAgICAgYVNwZWMu
bUNvbERlZmF1bHRTaXplID0gY29sOwogICAgICAgICAgY2hhcldpZHRoID0gQ2FsY05hdlF1aXJr
U2l6aW5nKGFQcmVzQ29udGV4dCwgYVJlbmRDb250ZXh0LCBmb250TWV0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFGcmFtZSwgYVNwZWMsIGFEZXNpcmVkU2l6ZSk7
CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNoYXJXaWR0aCA9IEdldFRleHRTaXplKGFQcmVz
Q29udGV4dCwgYUZyYW1lLCBjb2wsIGFEZXNpcmVkU2l6ZSwgYVJlbmRDb250ZXh0KTsKICAgICAg
ICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChlQ29tcGF0aWJpbGl0eV9TdGFuZGFyZCA9PSBxTW9k
ZSkgewogICAgICBpZiAoYVNwZWMubUNvbFNpemVBdHRySW5QaXhlbHMpIHsKICAgICAgICBhV2lk
dGhFeHBsaWNpdCA9IDE7CiAgICAgIH0KICAgIH0KICAgIGFNaW5TaXplLndpZHRoID0gYURlc2ly
ZWRTaXplLndpZHRoOwogIH0gZWxzZSB7CgogICAgaWYgKDAgPT0gdmFsU3RhdHVzKSB7CiAgICAg
IGNoYXJXaWR0aCA9IEdldFRleHRTaXplKGFQcmVzQ29udGV4dCwgYUZyYW1lLCB2YWxBdHRyLCBh
RGVzaXJlZFNpemUsIGFSZW5kQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGFTcGVjLm1Db2xEZWZh
dWx0VmFsdWUpIHsKICAgICAgY2hhcldpZHRoID0gR2V0VGV4dFNpemUoYVByZXNDb250ZXh0LCBh
RnJhbWUsICphU3BlYy5tQ29sRGVmYXVsdFZhbHVlLCBhRGVzaXJlZFNpemUsIGFSZW5kQ29udGV4
dCk7CiAgICB9IGVsc2UgaWYgKGFTcGVjLm1Db2xEZWZhdWx0U2l6ZUluUGl4ZWxzKSB7CiAgICAg
IGNoYXJXaWR0aCA9IEdldFRleHRTaXplKGFQcmVzQ29udGV4dCwgYUZyYW1lLCAxLCBhRGVzaXJl
ZFNpemUsIGFSZW5kQ29udGV4dCk7CiAgICAgIGFEZXNpcmVkU2l6ZS53aWR0aCA9IGFTcGVjLm1D
b2xEZWZhdWx0U2l6ZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChlQ29tcGF0aWJpbGl0eV9OYXZR
dWlya3MgPT0gcU1vZGUpIHsKICAgICAgICBuc0NPTVB0cjxuc0lGb250TWV0cmljcz4gZm9udE1l
dDsKICAgICAgICBuc3Jlc3VsdCByZXMgPSBHZXRGcmFtZUZvbnRGTShhUHJlc0NvbnRleHQsIGFG
cmFtZSwgZ2V0dGVyX0FkZFJlZnMoZm9udE1ldCkpOwogICAgICAgIGlmICgoISgocmVzKSAmIDB4
ODAwMDAwMDApKSAmJiBmb250TWV0KSB7CiAgICAgICAgICBhUmVuZENvbnRleHQtPlNldEZvbnQo
Zm9udE1ldCk7CgogICAgICAgICAgY2hhcldpZHRoID0gQ2FsY05hdlF1aXJrU2l6aW5nKGFQcmVz
Q29udGV4dCwgYVJlbmRDb250ZXh0LCBmb250TWV0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFGcmFtZSwgYVNwZWMsIGFEZXNpcmVkU2l6ZSk7CiAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgIHt9OwogICAgICAgICAgYURlc2lyZWRTaXplLndpZHRoID0gMzAwOwog
ICAgICAgICAgYURlc2lyZWRTaXplLndpZHRoID0gMTUwMDsKICAgICAgICB9CiAgICAgIH0gZWxz
ZSB7CiAgICAgICAgY2hhcldpZHRoID0gR2V0VGV4dFNpemUoYVByZXNDb250ZXh0LCBhRnJhbWUs
IGFTcGVjLm1Db2xEZWZhdWx0U2l6ZSwgYURlc2lyZWRTaXplLCBhUmVuZENvbnRleHQpOwogICAg
ICB9CiAgICB9CiAgICBhTWluU2l6ZS53aWR0aCA9IGFEZXNpcmVkU2l6ZS53aWR0aDsKICAgIGlm
ICgtMSAhPSBhQ1NTU2l6ZS53aWR0aCkgewogICAgICB7fTsKICAgICAgaWYgKG5zY29vcmQoMSA8
PCAzMCkgIT0gYUNTU1NpemUud2lkdGgpIHsKICAgICAgICBhRGVzaXJlZFNpemUud2lkdGggPSAo
KGFEZXNpcmVkU2l6ZS53aWR0aCk+KGFDU1NTaXplLndpZHRoKT8oYURlc2lyZWRTaXplLndpZHRo
KTooYUNTU1NpemUud2lkdGgpKTsKICAgICAgICBhV2lkdGhFeHBsaWNpdCA9IDE7CiAgICAgIH0K
ICAgIH0KICB9CiAgYVJvd0hlaWdodCA9IGFEZXNpcmVkU2l6ZS5oZWlnaHQ7CiAgYU1pblNpemUu
aGVpZ2h0ID0gYURlc2lyZWRTaXplLmhlaWdodDsKCgogIGlmIChlQ29tcGF0aWJpbGl0eV9TdGFu
ZGFyZCA9PSBxTW9kZSkgewogICAgbnNIVE1MVmFsdWUgcm93QXR0cjsKICAgIG5zcmVzdWx0IHJv
d1N0YXR1cyA9ICgobnNyZXN1bHQpICgoKFBSVWludDMyKSgwKTw8MzEpIHwgKChQUlVpbnQzMiko
OCArMHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEpKSkgKTsKICAgIGlmICgwICE9IGFTcGVjLm1S
b3dTaXplQXR0cikgewogICAgICByb3dTdGF0dXMgPSBoQ29udGVudC0+R2V0SFRNTEF0dHJpYnV0
ZShhU3BlYy5tUm93U2l6ZUF0dHIsIHJvd0F0dHIpOwogICAgfQogICAgaWYgKDAgPT0gcm93U3Rh
dHVzKSB7CiAgICAgIFBSSW50MzIgcm93QXR0ckludCA9ICgocm93QXR0ci5HZXRVbml0KCkgPT0g
ZUhUTUxVbml0X1BpeGVsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd0F0dHIu
R2V0UGl4ZWxWYWx1ZSgpIDogcm93QXR0ci5HZXRJbnRWYWx1ZSgpKTsKICAgICAgbnVtUm93cyA9
IChyb3dBdHRySW50ID4gMCkgPyByb3dBdHRySW50IDogMTsKICAgICAgYURlc2lyZWRTaXplLmhl
aWdodCA9IGFEZXNpcmVkU2l6ZS5oZWlnaHQgKiBudW1Sb3dzOwogICAgfSBlbHNlIHsKICAgICAg
YURlc2lyZWRTaXplLmhlaWdodCA9IGFEZXNpcmVkU2l6ZS5oZWlnaHQgKiBhU3BlYy5tUm93RGVm
YXVsdFNpemU7CiAgICAgIGlmICgtMSAhPSBhQ1NTU2l6ZS5oZWlnaHQpIHsKICAgICAgICB7fTsK
ICAgICAgICBpZiAobnNjb29yZCgxIDw8IDMwKSAhPSBhQ1NTU2l6ZS5oZWlnaHQpIHsKICAgICAg
ICAgIGFEZXNpcmVkU2l6ZS5oZWlnaHQgPSAoKGFEZXNpcmVkU2l6ZS5oZWlnaHQpPihhQ1NTU2l6
ZS5oZWlnaHQpPyhhRGVzaXJlZFNpemUuaGVpZ2h0KTooYUNTU1NpemUuaGVpZ2h0KSk7CiAgICAg
ICAgICBhSGVpZ2h0RXhwbGljaXQgPSAxOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAg
ZG8geyAoaENvbnRlbnQpLT5SZWxlYXNlKCk7IChoQ29udGVudCkgPSAwOyB9IHdoaWxlICgwKTsK
ICBpZiAoLTEgPT0gbnVtUm93cykgewogICAgbnVtUm93cyA9IChhUm93SGVpZ2h0ID4gMCkgPyAo
YURlc2lyZWRTaXplLmhlaWdodCAvIGFSb3dIZWlnaHQpIDogMDsKICB9CgogIGRvIHsgKGlDb250
ZW50KS0+UmVsZWFzZSgpOyAoaUNvbnRlbnQpID0gMDsgfSB3aGlsZSAoMCk7CgogIHJldHVybiBu
dW1Sb3dzOwp9CgoKCm5zcmVzdWx0Cm5zRm9ybUNvbnRyb2xIZWxwZXI6OkdldEZvbnQobnNJRm9y
bUNvbnRyb2xGcmFtZSAqIGFGb3JtRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lTdHlsZUNvbnRleHQgKiBhU3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zRm9udComIGFGb250KQp7CiAgY29uc3QgbnNTdHlsZUZvbnQqIHN0eWxl
Rm9udCA9IChjb25zdCBuc1N0eWxlRm9udCopYVN0eWxlQ29udGV4dC0+R2V0U3R5bGVEYXRhKGVT
dHlsZVN0cnVjdF9Gb250KTsKCiAgbnNXaWRnZXRSZW5kZXJpbmcgbTsKICBhUHJlc0NvbnRleHQt
PkdldFdpZGdldFJlbmRlcmluZ01vZGUoJm0pOwoKCiAgUFJCb29sIHJlcXVpcmVzV2lkZ2V0ID0g
MDsKICBhRm9ybUZyYW1lLT5SZXF1aXJlc1dpZGdldChyZXF1aXJlc1dpZGdldCk7CgogIFBSSW50
MzIgdHlwZTsKICBhRm9ybUZyYW1lLT5HZXRUeXBlKCZ0eXBlKTsKCiAgaWYgKHR5cGUhPTE0ICYm
CiAgICAgIHR5cGUhPTIwICYmCiAgICAgIHR5cGUhPTExKSB7CiAgICBpZiAoMSAhPSByZXF1aXJl
c1dpZGdldCAmJiBlV2lkZ2V0UmVuZGVyaW5nX0dmeCA9PSBtKSB7CiAgICAgIGFGb250ID0gJnN0
eWxlRm9udC0+bUZvbnQ7CiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgbnNDb21wYXRpYmls
aXR5IG1vZGU7CiAgYVByZXNDb250ZXh0LT5HZXRDb21wYXRpYmlsaXR5TW9kZSgmbW9kZSk7Cgog
IGlmIChlQ29tcGF0aWJpbGl0eV9TdGFuZGFyZCA9PSBtb2RlKSB7CiAgICBhRm9udCA9ICZzdHls
ZUZvbnQtPm1Gb250OwogICAgcmV0dXJuIDA7CiAgfQoKICBzd2l0Y2ggKHR5cGUpIHsKICAgIGNh
c2UgMTQ6CiAgICBjYXNlIDIwOgogICAgY2FzZSAxMToKICAgICAgYUZvbnQgPSAmc3R5bGVGb250
LT5tRm9udDsKICAgICAgYnJlYWs7CiAgICBjYXNlIDU6CiAgICBjYXNlIDEzOgogICAgY2FzZSA5
OgogICAgY2FzZSAxOToKICAgICAge307CiMgNjQzICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIK
ICAgICAgYnJlYWs7CiAgfQogIHJldHVybiAwOwp9CiMgNjU1ICJuc0Zvcm1Db250cm9sSGVscGVy
LmNwcCIKdm9pZApuc0Zvcm1Db250cm9sSGVscGVyOjpQYWludExpbmUobnNJUmVuZGVyaW5nQ29u
dGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
Y29vcmQgYVNYLCBuc2Nvb3JkIGFTWSwgbnNjb29yZCBhRVgsIG5zY29vcmQgYUVZLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUhvcnosIG5zY29vcmQgYVdpZHRoLCBuc2Nv
b3JkIGFPbmVQaXhlbCkKewoKICBuc1BvaW50IHBbNV07CiAgaWYgKGFIb3J6KSB7CiAgICBhRVgr
KzsKICAgIHBbMF0ueCA9IG5zY29vcmQoZmxvYXQoYVNYKSphT25lUGl4ZWwpOwogICAgcFswXS55
ID0gbnNjb29yZChmbG9hdChhU1kpKmFPbmVQaXhlbCk7CiAgICBwWzFdLnggPSBuc2Nvb3JkKGZs
b2F0KGFFWCkqYU9uZVBpeGVsKTsKICAgIHBbMV0ueSA9IG5zY29vcmQoZmxvYXQoYUVZKSphT25l
UGl4ZWwpOwogICAgcFsyXS54ID0gbnNjb29yZChmbG9hdChhRVgpKmFPbmVQaXhlbCk7CiAgICBw
WzJdLnkgPSBuc2Nvb3JkKGZsb2F0KGFFWSsxKSphT25lUGl4ZWwpOwogICAgcFszXS54ID0gbnNj
b29yZChmbG9hdChhU1gpKmFPbmVQaXhlbCk7CiAgICBwWzNdLnkgPSBuc2Nvb3JkKGZsb2F0KGFT
WSsxKSphT25lUGl4ZWwpOwogICAgcFs0XS54ID0gbnNjb29yZChmbG9hdChhU1gpKmFPbmVQaXhl
bCk7CiAgICBwWzRdLnkgPSBuc2Nvb3JkKGZsb2F0KGFTWSkqYU9uZVBpeGVsKTsKICB9IGVsc2Ug
ewogICAgYUVZKys7CiAgICBwWzBdLnggPSBuc2Nvb3JkKGZsb2F0KGFTWCkqYU9uZVBpeGVsKTsK
ICAgIHBbMF0ueSA9IG5zY29vcmQoZmxvYXQoYVNZKSphT25lUGl4ZWwpOwogICAgcFsxXS54ID0g
bnNjb29yZChmbG9hdChhRVgpKmFPbmVQaXhlbCk7CiAgICBwWzFdLnkgPSBuc2Nvb3JkKGZsb2F0
KGFFWSkqYU9uZVBpeGVsKTsKICAgIHBbMl0ueCA9IG5zY29vcmQoZmxvYXQoYUVYKzEpKmFPbmVQ
aXhlbCk7CiAgICBwWzJdLnkgPSBuc2Nvb3JkKGZsb2F0KGFFWSkqYU9uZVBpeGVsKTsKICAgIHBb
M10ueCA9IG5zY29vcmQoZmxvYXQoYVNYKzEpKmFPbmVQaXhlbCk7CiAgICBwWzNdLnkgPSBuc2Nv
b3JkKGZsb2F0KGFTWSkqYU9uZVBpeGVsKTsKICAgIHBbNF0ueCA9IG5zY29vcmQoZmxvYXQoYVNY
KSphT25lUGl4ZWwpOwogICAgcFs0XS55ID0gbnNjb29yZChmbG9hdChhU1kpKmFPbmVQaXhlbCk7
CiAgfQogIGFSZW5kZXJpbmdDb250ZXh0LkZpbGxQb2x5Z29uKHAsIDUpOwoKfQoKCnZvaWQKbnNG
b3JtQ29udHJvbEhlbHBlcjo6U2V0dXBQb2ludHMoUFJVaW50MzIgYU51bWJlck9mUG9pbnRzLCBu
c2Nvb3JkKiBhUG9pbnRzLCBuc1BvaW50KiBhUG9seWdvbiwgbnNjb29yZCBhU2NhbGVGYWN0b3Is
IG5zY29vcmQgYVgsIG5zY29vcmQgYVksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNjb29yZCBhQ2VudGVyWCwgbnNjb29yZCBhQ2VudGVyWSkKewogIGNvbnN0IG5zY29vcmQgb2Zm
c2V0WCA9IGFDZW50ZXJYICogYVNjYWxlRmFjdG9yOwogIGNvbnN0IG5zY29vcmQgb2Zmc2V0WSA9
IGFDZW50ZXJZICogYVNjYWxlRmFjdG9yOwoKICBQUlVpbnQzMiBpID0gMDsKICBQUlVpbnQzMiBj
b3VudCA9IDA7CiAgZm9yIChpID0gMDsgaSA8IGFOdW1iZXJPZlBvaW50czsgaSsrKSB7CiAgICBh
UG9seWdvbltpXS54ID0gKGFQb2ludHNbY291bnRdICogYVNjYWxlRmFjdG9yKSArIGFYIC0gb2Zm
c2V0WDsKICAgIGNvdW50Kys7CiAgICBhUG9seWdvbltpXS55ID0gKGFQb2ludHNbY291bnRdICog
YVNjYWxlRmFjdG9yKSArIGFZIC0gb2Zmc2V0WTsKICAgIGNvdW50Kys7CiAgfQp9CgoKdm9pZApu
c0Zvcm1Db250cm9sSGVscGVyOjpQYWludEZpeGVkU2l6ZUNoZWNrTWFyayhuc0lSZW5kZXJpbmdD
b250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
IGFQaXhlbHNUb1R3aXBzKQp7CgoKCiAgY29uc3QgUFJVaW50MzIgb3ggPSAzOwogIGNvbnN0IFBS
VWludDMyIG95ID0gMzsKCiAgbnNjb29yZCBvbmVQaXhlbCA9IE5TSW50UGl4ZWxzVG9Ud2lwcygx
LCBhUGl4ZWxzVG9Ud2lwcyk7CgoKCgoKICBQYWludExpbmUoYVJlbmRlcmluZ0NvbnRleHQsIDAg
KyBveCwgMiArIG95LCAwICsgb3gsIDQgKyBveSwgMCwgMSwgb25lUGl4ZWwpOwogIFBhaW50TGlu
ZShhUmVuZGVyaW5nQ29udGV4dCwgMSArIG94LCAzICsgb3ksIDEgKyBveCwgNSArIG95LCAwLCAx
LCBvbmVQaXhlbCk7CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0LCAyICsgb3gsIDQgKyBv
eSwgMiArIG94LCA2ICsgb3ksIDAsIDEsIG9uZVBpeGVsKTsKICBQYWludExpbmUoYVJlbmRlcmlu
Z0NvbnRleHQsIDMgKyBveCwgMyArIG95LCAzICsgb3gsIDUgKyBveSwgMCwgMSwgb25lUGl4ZWwp
OwogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4dCwgNCArIG94LCAyICsgb3ksIDQgKyBveCwg
NCArIG95LCAwLCAxLCBvbmVQaXhlbCk7CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0LCA1
ICsgb3gsIDEgKyBveSwgNSArIG94LCAzICsgb3ksIDAsIDEsIG9uZVBpeGVsKTsKICBQYWludExp
bmUoYVJlbmRlcmluZ0NvbnRleHQsIDYgKyBveCwgMCArIG95LCA2ICsgb3gsIDIgKyBveSwgMCwg
MSwgb25lUGl4ZWwpOwp9Cgp2b2lkCm5zRm9ybUNvbnRyb2xIZWxwZXI6OlBhaW50Rml4ZWRTaXpl
Q2hlY2tNYXJrQm9yZGVyKG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVBpeGVsc1RvVHdpcHMsIGNvbnN0IG5zU3R5
bGVDb2xvciYgYUJhY2tncm91bmRDb2xvcikKewoKICBQUlVpbnQzMiBveCA9IDA7CiAgUFJVaW50
MzIgb3kgPSAwOwoKICBuc2Nvb3JkIG9uZVBpeGVsID0gTlNJbnRQaXhlbHNUb1R3aXBzKDEsIGFQ
aXhlbHNUb1R3aXBzKTsKICBuc2Nvb3JkIHR3ZWx2ZVBpeGVscyA9IE5TSW50UGl4ZWxzVG9Ud2lw
cygxMiwgYVBpeGVsc1RvVHdpcHMpOwoKCiAgYVJlbmRlcmluZ0NvbnRleHQuU2V0Q29sb3IoYUJh
Y2tncm91bmRDb2xvci5tQ29sb3IpOwogIG5zUmVjdCByZWN0KDAsIDAsIHR3ZWx2ZVBpeGVscywg
dHdlbHZlUGl4ZWxzKTsKICBhUmVuZGVyaW5nQ29udGV4dC5GaWxsUmVjdChyZWN0KTsKCgogIGFS
ZW5kZXJpbmdDb250ZXh0LlNldENvbG9yKCgobnNjb2xvcikgKCgyNTUgPDwgMjQpIHwgKCgxMjgp
PDwxNikgfCAoKDEyOCk8PDgpIHwgKDEyOCkpKSk7CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250
ZXh0LCAwICsgb3gsIDAgKyBveSwgMTEgKyBveCwgMCArIG95LCAxLCAxLCBvbmVQaXhlbCk7CiAg
UGFpbnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0LCAwICsgb3gsIDAgKyBveSwgMCArIG94LCAxMSAr
IG95LCAwLCAxLCBvbmVQaXhlbCk7CgogIGFSZW5kZXJpbmdDb250ZXh0LlNldENvbG9yKCgobnNj
b2xvcikgKCgyNTUgPDwgMjQpIHwgKCgxOTIpPDwxNikgfCAoKDE5Mik8PDgpIHwgKDE5MikpKSk7
CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0LCAxICsgb3gsIDExICsgb3ksIDExICsgb3gs
IDExICsgb3ksIDEsIDEsIG9uZVBpeGVsKTsKICBQYWludExpbmUoYVJlbmRlcmluZ0NvbnRleHQs
IDExICsgb3gsIDEgKyBveSwgMTEgKyBveCwgMTEgKyBveSwgMCwgMSwgb25lUGl4ZWwpOwoKICBh
UmVuZGVyaW5nQ29udGV4dC5TZXRDb2xvcigoKG5zY29sb3IpICgoMjU1IDw8IDI0KSB8ICgoMCk8
PDE2KSB8ICgoMCk8PDgpIHwgKDApKSkpOwogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4dCwg
MSArIG94LCAxICsgb3ksIDEwICsgb3gsIDEgKyBveSwgMSwgMSwgb25lUGl4ZWwpOwogIFBhaW50
TGluZShhUmVuZGVyaW5nQ29udGV4dCwgMSArIG94LCAxICsgb3ksIDEgKyBveCwgMTAgKyBveSwg
MCwgMSwgb25lUGl4ZWwpOwoKfQoKCnZvaWQKbnNGb3JtQ29udHJvbEhlbHBlcjo6UGFpbnRDaGVj
a01hcmsobnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFQaXhlbHNUb1R3aXBzLCBjb25zdCBuc1Jl
Y3QgJiBhUmVjdCkKewoKICBjb25zdCBQUkludDMyIGZpeGVkU2l6ZUNoZWNrbWFya1dpZHRoID0g
MTY1OwogIGNvbnN0IFBSSW50MzIgZml4ZWRTaXplQ2hlY2ttYXJrSGVpZ2h0ID0gMTY1OwoKICBp
ZiAoKGZpeGVkU2l6ZUNoZWNrbWFya1dpZHRoID09IGFSZWN0LndpZHRoKSAmJgogICAgICAoZml4
ZWRTaXplQ2hlY2ttYXJrSGVpZ2h0ID09IGFSZWN0LmhlaWdodCkpIHsKCiAgICAgIFBhaW50Rml4
ZWRTaXplQ2hlY2tNYXJrKGFSZW5kZXJpbmdDb250ZXh0LCBhUGl4ZWxzVG9Ud2lwcyk7CiAgICBy
ZXR1cm47CiAgfQoKICBjb25zdCBQUlVpbnQzMiBjaGVja3BvaW50cyA9IDc7CiAgY29uc3QgUFJV
aW50MzIgY2hlY2tzaXplID0gOTsKCgoKCgogIG5zY29vcmQgY2hlY2tlZFBvbHlnb25EZWZbXSA9
IHswLDIsIDIsNCwgNiwwICwgNiwyLCAyLDYsIDAsNCwgMCwyIH07CgogIGNvbnN0IFBSVWludDMy
IGNlbnRlcnggPSAzOwogIGNvbnN0IFBSVWludDMyIGNlbnRlcnkgPSAzOwoKICBuc1BvaW50IGNo
ZWNrZWRQb2x5Z29uW2NoZWNrcG9pbnRzXTsKICBQUlVpbnQzMiBkZWZJbmRleCA9IDA7CiAgUFJV
aW50MzIgcG9seUluZGV4ID0gMDsKCgogIFBSVWludDMyIHNpemUgPSBhUmVjdC53aWR0aCAvIGNo
ZWNrc2l6ZTsKICBpZiAoYVJlY3QuaGVpZ2h0IDwgYVJlY3Qud2lkdGgpIHsKICAgc2l6ZSA9IGFS
ZWN0LmhlaWdodCAvIGNoZWNrc2l6ZTsKICB9CgoKICBmb3IgKGRlZkluZGV4ID0gMDsgZGVmSW5k
ZXggPCAoY2hlY2twb2ludHMgKiAyKTsgZGVmSW5kZXgrKykgewogICAgY2hlY2tlZFBvbHlnb25b
cG9seUluZGV4XS54ID0gbnNjb29yZCgoKChjaGVja2VkUG9seWdvbkRlZltkZWZJbmRleF0pIC0g
Y2VudGVyeCkgKiAoc2l6ZSkpICsgKGFSZWN0LndpZHRoIC8gMikgKyBhUmVjdC54KTsKICAgIGRl
ZkluZGV4Kys7CiAgICBjaGVja2VkUG9seWdvbltwb2x5SW5kZXhdLnkgPSBuc2Nvb3JkKCgoKGNo
ZWNrZWRQb2x5Z29uRGVmW2RlZkluZGV4XSkgLSBjZW50ZXJ5KSAqIChzaXplKSkgKyAoYVJlY3Qu
aGVpZ2h0IC8gMikgKyBhUmVjdC55KTsKICAgIHBvbHlJbmRleCsrOwogIH0KCiAgYVJlbmRlcmlu
Z0NvbnRleHQuRmlsbFBvbHlnb24oY2hlY2tlZFBvbHlnb24sIGNoZWNrcG9pbnRzKTsKfQoKbnNy
ZXN1bHQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0TmFtZShuc0lDb250ZW50KiBhQ29udGVudCxu
c1N0cmluZyogYVJlc3VsdCkKewogIG5zcmVzdWx0IHJlc3VsdCA9IDB4RkZGRkZGRjc7CiAgaWYg
KDAgIT0gYUNvbnRlbnQpIHsKICAgIG5zSUhUTUxDb250ZW50KiBmb3JtQ29udHJvbCA9IDA7CiAg
ICByZXN1bHQgPSBhQ29udGVudC0+UXVlcnlJbnRlcmZhY2Uoa0lIVE1MQ29udGVudElJRCwgKHZv
aWQqKikmZm9ybUNvbnRyb2wpOwogICAgaWYgKCgwID09IHJlc3VsdCkgJiYgZm9ybUNvbnRyb2wp
IHsKICAgICAgbnNIVE1MVmFsdWUgdmFsdWU7CiAgICAgIHJlc3VsdCA9IGZvcm1Db250cm9sLT5H
ZXRIVE1MQXR0cmlidXRlKG5zSFRNTEF0b21zOjpuYW1lLCB2YWx1ZSk7CiAgICAgIGlmICgwID09
IHJlc3VsdCkgewogICAgICAgIGlmIChlSFRNTFVuaXRfU3RyaW5nID09IHZhbHVlLkdldFVuaXQo
KSkgewogICAgICAgICAgdmFsdWUuR2V0U3RyaW5nVmFsdWUoKmFSZXN1bHQpOwogICAgICAgIH0K
ICAgICAgfQogICAgICBkbyB7IChmb3JtQ29udHJvbCktPlJlbGVhc2UoKTsgKGZvcm1Db250cm9s
KSA9IDA7IH0gd2hpbGUgKDApOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CgoKbnNyZXN1
bHQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0VmFsdWUobnNJQ29udGVudCogYUNvbnRlbnQsIG5z
U3RyaW5nKiBhUmVzdWx0KQp7CiAgbnNyZXN1bHQgcmVzdWx0ID0gMHhGRkZGRkZGNzsKICBpZiAo
MCAhPSBhQ29udGVudCkgewogICAgbnNJSFRNTENvbnRlbnQqIGZvcm1Db250cm9sID0gMDsKICAg
IHJlc3VsdCA9IGFDb250ZW50LT5RdWVyeUludGVyZmFjZShrSUhUTUxDb250ZW50SUlELCAodm9p
ZCoqKSZmb3JtQ29udHJvbCk7CiAgICBpZiAoKDAgPT0gcmVzdWx0KSAmJiBmb3JtQ29udHJvbCkg
ewogICAgICBuc0hUTUxWYWx1ZSB2YWx1ZTsKICAgICAgcmVzdWx0ID0gZm9ybUNvbnRyb2wtPkdl
dEhUTUxBdHRyaWJ1dGUobnNIVE1MQXRvbXM6OnZhbHVlLCB2YWx1ZSk7CiAgICAgIGlmICgwID09
IHJlc3VsdCkgewogICAgICAgIGlmIChlSFRNTFVuaXRfU3RyaW5nID09IHZhbHVlLkdldFVuaXQo
KSkgewogICAgICAgICAgdmFsdWUuR2V0U3RyaW5nVmFsdWUoKmFSZXN1bHQpOwogICAgICAgIH0K
ICAgICAgfQogICAgICBkbyB7IChmb3JtQ29udHJvbCktPlJlbGVhc2UoKTsgKGZvcm1Db250cm9s
KSA9IDA7IH0gd2hpbGUgKDApOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9Cgpuc3Jlc3Vs
dApuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRJbnB1dEVsZW1lbnRWYWx1ZShuc0lDb250ZW50KiBh
Q29udGVudCwgbnNTdHJpbmcqIGFUZXh0LCBQUkJvb2wgYUluaXRpYWxWYWx1ZSkKewogIG5zcmVz
dWx0IHJlc3VsdCA9IDA7CiAgbnNJRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtID0gMDsK
ICByZXN1bHQgPSBhQ29udGVudC0+UXVlcnlJbnRlcmZhY2UobnNDT01UeXBlSW5mbzxuc0lET01I
VE1MSW5wdXRFbGVtZW50Pjo6R2V0SUlEKCksICh2b2lkKiopJmlucHV0RWxlbSk7CiAgaWYgKCgw
ID09IHJlc3VsdCkgJiYgaW5wdXRFbGVtKSB7CiAgICBpZiAoMSA9PSBhSW5pdGlhbFZhbHVlKSB7
CiAgICAgIHJlc3VsdCA9IGlucHV0RWxlbS0+R2V0RGVmYXVsdFZhbHVlKCphVGV4dCk7CiAgICB9
CiAgICBlbHNlIHsKICAgICAgcmVzdWx0ID0gaW5wdXRFbGVtLT5HZXRWYWx1ZSgqYVRleHQpOwog
ICAgfQoKICAgIGRvIHsgKGlucHV0RWxlbSktPlJlbGVhc2UoKTsgKGlucHV0RWxlbSkgPSAwOyB9
IHdoaWxlICgwKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKCgoKbnNyZXN1bHQKbnNGb3JtQ29u
dHJvbEhlbHBlcjo6R2V0TG9jYWxpemVkU3RyaW5nKGNvbnN0IGNoYXIgKiBhUHJvcEZpbGVOYW1l
LCBjb25zdCBjaGFyKiBhS2V5LCBuc1N0cmluZyYgb1ZhbCkKewogIG5zcmVzdWx0IHJ2OwogIG5z
Q09NUHRyPG5zSVN0cmluZ0J1bmRsZT4gYnVuZGxlOwoKCgogIG5zQ09NUHRyPG5zSUlPU2Vydmlj
ZT4gcE5ldFNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKGtJT1NlcnZpY2VDSUQsICZydik7OwogIGlm
ICgoISgocnYpICYgMHg4MDAwMDAwMCkpICYmIHBOZXRTZXJ2aWNlKSB7CiAgICBuc0NPTVB0cjxu
c0lVUkk+IHVyaTsKICAgIHJ2ID0gcE5ldFNlcnZpY2UtPk5ld1VSSShhUHJvcEZpbGVOYW1lLCAw
LCBnZXR0ZXJfQWRkUmVmcyh1cmkpKTsKICAgIGlmICgoISgocnYpICYgMHg4MDAwMDAwMCkpICYm
IHVyaSkgewoKCiAgICAgIG5zQ09NUHRyPG5zSVN0cmluZ0J1bmRsZVNlcnZpY2U+IHN0cmluZ1Nl
cnZpY2UgPSBkb19HZXRTZXJ2aWNlKGtTdHJpbmdCdW5kbGVTZXJ2aWNlQ0lELCAmcnYpOzsKICAg
ICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkgJiYgc3RyaW5nU2VydmljZSkgewogICAgICAg
IG5zWFBJRExDU3RyaW5nIHNwZWM7CiAgICAgICAgcnYgPSB1cmktPkdldFNwZWMoZ2V0dGVyX0Nv
cGllcyhzcGVjKSk7CiAgICAgICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkgJiYgc3BlYykg
ewogICAgICAgICAgcnYgPSBzdHJpbmdTZXJ2aWNlLT5DcmVhdGVCdW5kbGUoc3BlYywgZ2V0dGVy
X0FkZFJlZnMoYnVuZGxlKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKCiAgaWYgKCgh
KChydikgJiAweDgwMDAwMDAwKSkgJiYgYnVuZGxlICYmIGFLZXkpIHsKICAgIG5zWFBJRExTdHJp
bmcgdmFsVW5pOwogICAgbnNBdXRvU3RyaW5nIGtleTsga2V5LkFzc2lnbldpdGhDb252ZXJzaW9u
KGFLZXkpOwogICAgcnYgPSBidW5kbGUtPkdldFN0cmluZ0Zyb21OYW1lKGtleS5HZXRVbmljb2Rl
KCksIGdldHRlcl9Db3BpZXModmFsVW5pKSk7CiAgICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDAp
KSAmJiB2YWxVbmkpIHsKICAgICAgb1ZhbC5Bc3NpZ24odmFsVW5pKTsKICAgIH0gZWxzZSB7CiAg
ICAgIG9WYWwuVHJ1bmNhdGUoKTsKICAgIH0KICB9CiAgcmV0dXJuIHJ2Owp9CgoKbnNyZXN1bHQK
bnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0RGlzYWJsZWQobnNJQ29udGVudCogYUNvbnRlbnQsIFBS
Qm9vbCogb0lzRGlzYWJsZWQpCnsKICBuc0NPTVB0cjxuc0lIVE1MQ29udGVudD4gZm9ybUNvbnRy
b2wgPSBkb19RdWVyeUludGVyZmFjZShhQ29udGVudCk7CiAgbnNIVE1MVmFsdWUgdmFsdWU7CiAg
bnNyZXN1bHQgcmVzdWx0ID0gZm9ybUNvbnRyb2wtPkdldEhUTUxBdHRyaWJ1dGUobnNIVE1MQXRv
bXM6OmRpc2FibGVkLCB2YWx1ZSk7CiAgaWYgKDAgPT0gcmVzdWx0KSB7CiAgICBpZiAoZUhUTUxV
bml0X0VtcHR5ID09IHZhbHVlLkdldFVuaXQoKSkgewogICAgICAqb0lzRGlzYWJsZWQgPSAxOwog
ICAgfSBlbHNlIHsKICAgICAgKm9Jc0Rpc2FibGVkID0gMDsKICAgIH0KICB9IGVsc2UgewogICAg
Km9Jc0Rpc2FibGVkID0gMDsKICB9CiAgcmV0dXJuIDA7Cn0KIyA5NDcgIm5zRm9ybUNvbnRyb2xI
ZWxwZXIuY3BwIgpuc3Jlc3VsdApuc0Zvcm1Db250cm9sSGVscGVyOjpEb01hbnVhbFN1Ym1pdE9y
UmVzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRm9ybUZyYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3Jt
Q29udHJvbEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJCb29sIGFEb1N1Ym1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSQm9vbCBhRG9ET01FdmVudCkKewogIGRvIHsgaWYoKCEoYVByZXNDb250ZXh0KSA/IDEg
OiAwKSkgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDNMKTsgfSB3aGlsZSAoMCk7CiAgZG8g
eyBpZigoIShhRm9ybUZyYW1lKSA/IDEgOiAwKSkgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQw
MDNMKTsgfSB3aGlsZSAoMCk7CgogIG5zcmVzdWx0IHJlc3VsdCA9IDA7CgogIG5zQ09NUHRyPG5z
SUNvbnRlbnQ+IGZvcm1Db250ZW50OwogIGFGb3JtRnJhbWUtPkdldENvbnRlbnQoZ2V0dGVyX0Fk
ZFJlZnMoZm9ybUNvbnRlbnQpKTsKIyA5NzAgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIgogIG5z
Q09NUHRyPG5zSUNvbnRlbnQ+IGNvbnRyb2xDb250ZW50OwogIGlmIChhRG9TdWJtaXQgJiYgYUZv
cm1Db250cm9sRnJhbWUgIT0gMCkgewogICAgYUZvcm1Db250cm9sRnJhbWUtPkdldENvbnRlbnQo
Z2V0dGVyX0FkZFJlZnMoY29udHJvbENvbnRlbnQpKTsKICB9CgogIGlmIChmb3JtQ29udGVudCkg
ewoKICAgIG5zQ09NUHRyPG5zSVByZXNTaGVsbD4gc2hlbGw7CiAgICBpZiAoYVByZXNTaGVsbCA9
PSAwKSB7CiAgICAgIHJlc3VsdCA9IGFQcmVzQ29udGV4dC0+R2V0U2hlbGwoZ2V0dGVyX0FkZFJl
ZnMoc2hlbGwpKTsKICAgICAgYVByZXNTaGVsbCA9IHNoZWxsLmdldCgpOwogICAgfQoKCiAgICBp
ZiAoKCEoKHJlc3VsdCkgJiAweDgwMDAwMDAwKSkgJiYgMCAhPSBhUHJlc1NoZWxsKSB7CgoKICAg
ICAgbnNDT01QdHI8bnNJQ29udGVudD4gZm9ybUNvbnRyb2w7CiAgICAgIGFGb3JtQ29udHJvbEZy
YW1lLT5HZXRDb250ZW50KGdldHRlcl9BZGRSZWZzKGZvcm1Db250cm9sKSk7CgogICAgICBuc0Zv
cm1FdmVudCBldmVudDsKICAgICAgZXZlbnQuZXZlbnRTdHJ1Y3RUeXBlID0gMjE7CiAgICAgIGV2
ZW50Lm1lc3NhZ2UgPSBhRG9TdWJtaXQ/KDEyMDApOigxMjAwICsgMSk7CiAgICAgIGV2ZW50Lm9y
aWdpbmF0b3IgPSBmb3JtQ29udHJvbDsKICAgICAgbnNFdmVudFN0YXR1cyBzdGF0dXMgPSBuc0V2
ZW50U3RhdHVzX2VJZ25vcmU7CiAgICAgIGlmIChhRG9ET01FdmVudCkgewogICAgICAgIGFQcmVz
U2hlbGwtPkhhbmRsZURPTUV2ZW50V2l0aFRhcmdldChmb3JtQ29udGVudCwgJmV2ZW50LCAmc3Rh
dHVzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhUHJlc1NoZWxsLT5IYW5kbGVFdmVudFdpdGhU
YXJnZXQoJmV2ZW50LCAwLCBmb3JtQ29udGVudCwgMHgwMDAxLCAmc3RhdHVzKTsKICAgICAgfQog
ICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9Cg==


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