public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/3135: internal compiler error on kdelibs/arts/soundserver/wavplayobject_impl.cc
@ 2001-06-12  9:33 nathan
  0 siblings, 0 replies; 3+ messages in thread
From: nathan @ 2001-06-12  9:33 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, gerald.roth, nathan, nobody

Synopsis: internal compiler error on kdelibs/arts/soundserver/wavplayobject_impl.cc

Responsible-Changed-From-To: unassigned->nathan
Responsible-Changed-By: nathan
Responsible-Changed-When: Tue Jun 12 09:32:55 2001
Responsible-Changed-Why:
    working on it
State-Changed-From-To: open->analyzed
State-Changed-By: nathan
State-Changed-When: Tue Jun 12 09:32:55 2001
State-Changed-Why:
    probably same as 3130

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=3135&database=gcc


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: c++/3135: internal compiler error on kdelibs/arts/soundserver/wavplayobject_impl.cc
@ 2001-06-12 10:18 nathan
  0 siblings, 0 replies; 3+ messages in thread
From: nathan @ 2001-06-12 10:18 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, gerald.roth, nathan

Synopsis: internal compiler error on kdelibs/arts/soundserver/wavplayobject_impl.cc

State-Changed-From-To: analyzed->closed
State-Changed-By: nathan
State-Changed-When: Tue Jun 12 10:18:39 2001
State-Changed-Why:
    This is indeed the same bug as 3089

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=3135&database=gcc


^ permalink raw reply	[flat|nested] 3+ messages in thread

* c++/3135: internal compiler error on kdelibs/arts/soundserver/wavplayobject_impl.cc
@ 2001-06-12  4:06 gerald.roth
  0 siblings, 0 replies; 3+ messages in thread
From: gerald.roth @ 2001-06-12  4:06 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3135
>Category:       c++
>Synopsis:       internal compiler error on kdelibs/arts/soundserver/wavplayobject_impl.cc
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 12 04:06:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     gerald.roth@aon.at
>Release:        gcc version 3.0 20010612 (prerelease)
>Organization:
>Environment:
Configured with: /usr/src/gcc-cvs/gcc/configure --enable-shared --enable-multilib --enable-threads
Thread model: posix, i686-pc-linux-gnu, linux 2.4.5-ac12
>Description:
internal compiler error when compiling kdelibs/arts/soundserver/wavplayobject_impl.cc:

g++ -save-temps -DHAVE_CONFIG_H -I. -I. -I../.. -I../../arts/mcop -I../../arts/flow -I../../arts/flow -I../../dcop -I../../libltdl -I../../kdecore -I../../kdeui -I../../kssl -I/usr/src/kde2/cvs/qt-copy/include -I/usr/X11R6/include -I/opt/kde/include -D_REENTRANT -I/usr/local/include -O2 -DNDEBUG -fno-exceptions -fno-check-new -O3 -march=athlon -frtti -ftemplate-depth-99 -DQT_NO_TRANSLATION -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT -DQT_NO_ASCII_CAST -Wp,-MD,.deps/wavplayobject_impl.pp -c wavplayobject_impl.cc  -fPIC -DPIC -o .libs/wavplayobject_impl.o
wavplayobject_impl.cc:16: Internal error #20010126.
wavplayobject_impl.cc:16: Internal compiler error in dfs_accumulate_vtbl_inits,    at cp/class.c:7620
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
make: *** [wavplayobject_impl.lo] Error 1
>How-To-Repeat:

>Fix:

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

IyAxICJ3YXZwbGF5b2JqZWN0X2ltcGwuY2MiCiMgMSAiLi4vLi4vY29uZmlnLmgiIDEKIyA2MDIg
Ii4uLy4uL2NvbmZpZy5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjYg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAxIDMKIyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9jZGVmcy5oIiAxIDMKIyAyNTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAy
NzggIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVi
cy5oIiAxIDMKIyAyNzkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxOTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgc2l6ZV90OwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3No
b3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
X191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBf
X3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsK
IyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9f
aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBz
aG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90
Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vp
bnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50
NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50
NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBf
X2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7
CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBl
ZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYg
X19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3Np
emVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxp
bTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGlu
dCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRl
ZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgbG9u
ZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7CiMgMTAwICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQg
LyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBfX2ZkX3NldDsKCgp0eXBlZGVm
IGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoK
CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2Nu
dDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRf
dCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19pbm82NF90
OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3Nj
YWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRl
ZiBpbnQgX19pbnRwdHJfdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hl
ZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5Owog
IH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3Qg
X3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2Nr
Owp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rl
c2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19z
Y2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9f
aW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQg
X19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6
ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVh
ZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhy
ZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRf
Y29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5
cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0
aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRf
ZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50
IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewog
IHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsK
ICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRf
d2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndf
a2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYg
c3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcnds
b2NrYXR0cl90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTUx
ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAyIDMKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQg
dV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsK
dHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlw
ZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVk
ZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5
cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVk
ZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5
cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5
cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0
eXBlZGVmIF9faWRfdCBpZF90OwoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlw
ZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlw
ZWRlZiBfX2tleV90IGtleV90OwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMK
IyA1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDEgMwojIDU4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tf
dCBjbG9ja190OwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2
OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMg
MTI0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTI3
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
aW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5z
aWduZWQgaW50IHVpbnQ7CiMgMTcwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRl
ZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVm
IGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm
IGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVm
IGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVk
ZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9f
KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0
ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDE5MiAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAy
MiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUv
ZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzYgIi91
c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMTkzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAy
MyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWlj
X3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygx
MDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7
CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDEgMwojIDgzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3Bl
YwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyAz
OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpzdHJ1
Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKdHlwZWRlZiBfX2ZkX3Nl
dCBmZF9zZXQ7CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBf
X3NlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3Jp
dGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3Jl
YWRmZHMsIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsIHN0cnVj
dCB0aW1ldmFsICpfX3RpbWVvdXQpIHRocm93ICgpOwojIDg3ICIvdXNyL2luY2x1ZGUvc3lzL3Nl
bGVjdC5oIiAzCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVh
ZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgY29uc3Qg
c3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0IF9fc2lnc2V0X3QgKl9fc2lnbWFzaykg
dGhyb3cgKCk7CgoKCgoKfQojIDE5NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDE5OSAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAyIDMKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CnR5cGVk
ZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250
X3Q7CgoKCgoKCgp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNi
bGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0
X3Q7CgoKfQojIDYwMyAiLi4vLi4vY29uZmlnLmgiIDIKIyA3NTYgIi4uLy4uL2NvbmZpZy5oIgpl
eHRlcm4gIkMiCgppbnQgbWtzdGVtcHMgKGNoYXIqIF90ZW1wbGF0ZSwgaW50IHN1ZmZpeF9sZW4p
OwojIDIgIndhdnBsYXlvYmplY3RfaW1wbC5jYyIgMgoKCgojIDEgInNvdW5kc2VydmVyLmgiIDEK
CgoKCgojIDEgIi4uLy4uL2FydHMvbWNvcC9jb21tb24uaCIgMQojIDI2ICIuLi8uLi9hcnRzL21j
b3AvY29tbW9uLmgiCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2J1ZmZlci5oIiAxCiMgMjYgIi4uLy4u
L2FydHMvbWNvcC9idWZmZXIuaCIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3N0cmlu
ZyIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMSAzCiMgMzggIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDMKCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMK
IyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr
K2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4
LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDIgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQwICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDM4ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0
MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0
czsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjaGFyX3RyYWl0czxjaGFyPjsKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg
ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCgp9CiMgNDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyAzOCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDM3ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6
OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAx
IDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7
CgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpl
eHRlcm4gdm9pZCAqIG1lbWNweSAodm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZv
aWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZv
aWQgKiBtZW1tb3ZlICh2b2lkICogX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3NyYywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICogbWVtY2NweSAodm9pZCAqIF9fZGVz
dCwgX19jb25zdCB2b2lkICogX19zcmMsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgoKCmV4dGVybiB2b2lkICogbWVtc2V0ICh2b2lkICogX19zLCBpbnQgX19jLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICogX19zMSwgX19j
b25zdCB2b2lkICogX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICog
bWVtY2hyIChfX2NvbnN0IHZvaWQgKiBfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHZvaWQgKiByYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqIF9fcywgaW50IF9f
YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCgpleHRlcm4g
Y2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzdHJj
YXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
cmMpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3Mx
LCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
c3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpIHRocm93ICgp
OwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUu
aCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewogIHN0cnVjdCBsb2NhbGVfZGF0
YSAqX19sb2NhbGVzWzZdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7
CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBw
ZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTAwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCmV4
dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1f
bCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLCBfX2xvY2Fs
ZV90IF9fbCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChfX2NvbnN0IGNo
YXIgKl9fcykgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19z
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19z
dHJpbmcsIHNpemVfdCBfX24pIHRocm93ICgpOwojIDE0NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywg
aW50IF9fYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hh
ciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90
IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpIHRocm93
ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNo
YXIgKl9fYWNjZXB0KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hh
ciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBjaGFyICpfX3N0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBj
aGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25z
dCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tf
ciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGlt
LCBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg
KnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZGVsaW0sIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwojIDE5NCAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiB2b2lkICogbWVtbWVtIChfX2NvbnN0IHZv
aWQgKiBfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwgX19jb25zdCB2b2lkICogX19u
ZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqIF9f
bWVtcGNweSAodm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogbWVtcGNweSAo
dm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3Jj
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25z
dCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0
IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19z
dHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRo
cm93ICgpOwpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1
Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZv
aWQgKiBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19j
b25zdCB2b2lkICogX19zcmMsIHZvaWQgKiBfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9pZCAqIF9fczIs
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFy
ICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3Qg
Y2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAoaW50IF9f
aSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZzIChpbnQg
X19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgZmZz
bCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKSB0aHJvdyAoKQog
ICAgIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXAg
KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBf
X2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wg
KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAq
Kl9fcmVzdHJpY3QgX19zdHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEs
IF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAo
aW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoK
ZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jl
c3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93
ICgpOwoKCmV4dGVybiB2b2lkICogbWVtZnJvYiAodm9pZCAqIF9fcywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVu
YW1lKSB0aHJvdyAoKTsKIyAzNTAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyA2NiAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKbmFtZXNwYWNlIHN0
ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVzaW5nIDo6c3RyY3B5
OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2luZyA6OnN0cm5jYXQ7
CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcgOjpzdHJjb2xsOwog
IHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcgOjpzdHJjc3BuOwog
IHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6bWVtc2V0OwogIHVz
aW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6bWVtY2hyOwoKICBp
bmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXplX3QgX19uKQogIHsg
cmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbik7IH0K
CiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihjaGFyKiBfX3MxLCBp
bnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFy
Kj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxpbmUgY2hhcioKICBz
dHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGlu
X3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5n
IDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19u
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9f
czEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hhcioKICBzdHJzdHIo
Y2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ryc3Ry
KGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMgNDAgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2
ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2NzdGRpbyIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRp
by5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jc3RkaW8uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NzdGRpby5oIiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs
dWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjggIi91
c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj
IDM0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFy
Zy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTEwICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFy
Zy5oIiAzCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAzOSAiL3Vzci9pbmNsdWRl
L3N0ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA0MSAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUg
RklMRTsKIyA1NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAiL3Vzci9pbmNsdWRlL19HX2NvbmZp
Zy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAzNSAi
L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H
X3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVu
c2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp
KTsKIyAzMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDQ4ICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMg
MTU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9J
T19GSUxFOwojIDE2NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19s
b2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4
dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE4NyAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoK
CiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9f
cmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7
CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lP
X2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNl
OwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoK
ICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXpl
OwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47
CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAg
X0lPX2xvY2tfdCAqX2xvY2s7CiMgMjMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2Zm
NjRfdCBfb2Zmc2V0OwoKICBpbnQgX3VudXNlZDJbMTZdOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJ
TEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRl
cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9J
T19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDI2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICogX19jb29raWUsIGNoYXIg
Kl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwojIDI3MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
dHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqIF9fY29va2llLCBfX2NvbnN0
IGNoYXIgKl9fYnVmLCBzaXplX3QgX19uKTsKIyAyODAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz
CnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqIF9fY29va2llLCBfX29mZl90IF9fcG9z
LCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICogX19jb29raWUp
OwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRl
ZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vl
a19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2ll
X2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVh
ZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19j
bG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9f
Y29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCgpzdHJ1Y3QgX0lP
X2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEUgX19maWxlOwogIGNvbnN0IHZvaWQgKl9f
dnRhYmxlOwogIHZvaWQgKl9fY29va2llOwogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19p
b19mdW5jdGlvbnM7Cn07CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgp
OwojIDMzNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lP
X0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9f
RklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2Zw
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cg
KCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
ZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyAzNjMgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19y
ZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0LCBpbnQgKl9f
cmVzdHJpY3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpf
X3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCkgdGhyb3cg
KCk7CgpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVf
dCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICos
IHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklM
RSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f
c2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZv
aWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCn0KIyA1OCAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgp0eXBlZGVmIF9fb2ZmX3QgZnBvc190OwoKCgoK
dHlwZWRlZiBfX29mZjY0X3QgZnBvczY0X3Q7CiMgMTEwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMTEgIi91c3IvaW5j
bHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rk
b3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgoKZXh0ZXJuIGludCByZW1vdmUgKF9fY29u
c3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25z
dCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpleHRlcm4g
RklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTQwICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hh
ciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9y
IChjaGFyICpfX3MpIHRocm93ICgpOwojIDE2MCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0
ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19w
ZngpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZv
cGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIwMyAiL3Vz
ci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rlcykg
dGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChp
bnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklM
RSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9f
ZnVuY3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIg
KipfX3Jlc3RyaWN0IF9fYnVmbG9jLCBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
LCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVm
IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQg
X19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVy
IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXpl
X3QgX19zaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBf
X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251
Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0
X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IF9fdnNucHJpbnRmIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKCiAgICAgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CmV4dGVybiBpbnQgdnNucHJp
bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoKCgoK
ZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mLCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAgICAg
X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBp
bnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt
YXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9f
cmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJv
dyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykp
KTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50
ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAo
KQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoK
CgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNj
YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB2
ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCgogICAgIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcp
IHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwg
MCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcp
IHRocm93ICgpCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAy
LCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdl
dGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9p
ZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2Vk
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7
CiMgNDEzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVs
aW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwg
aW50IF9fZGVsaW1pdGVyLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpl
eHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsIHNp
emVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwgRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipf
X3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMg
KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVh
ZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBmd3JpdGUg
KF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9f
biwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBmcmVh
ZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90
IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90
IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3Qg
X19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBp
bnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKIyA0OTMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChG
SUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4
dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmlj
dCBfX3BvcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwg
X19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MjYgIi91c3IvaW5jbHVkZS9zdGRp
by5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19v
ZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19w
b3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRl
cm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBj
bGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZl
b2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3Jf
dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHBlcnJv
ciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsK
ZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQg
X3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoK
CgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIg
Kl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1
Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAq
X19yZXN0cmljdCBfX29ic3RhY2ssIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFj
ayAqX19yZXN0cmljdCBfX29ic3RhY2ssIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKIyA2MTIgIi91c3IvaW5jbHVkZS9z
dGRpby5oIiAzCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNjMz
ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgi
IDEgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCmlubGluZSBpbnQKdnByaW50
ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykg
dGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoK
aW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19nZXRjIChz
dGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkgdGhyb3cg
KCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9l
bmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFk
X3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCkK
ewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9JT19yZWFkX2Vu
ZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVh
ZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCkKewog
IHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgppbmxpbmUgaW50CmZwdXRjX3Vu
bG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChf
X3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBf
X292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBj
aGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxp
bmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7
CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9f
d3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykp
IDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykp
KTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCkKewog
IHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVf
ZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNp
Z25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoK
aW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXplX3QgKl9fbiwg
RklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRy
LCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGluZSBpbnQKZmVvZl91bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3Mg
JiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9
IDApOwp9CiMgNjM0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKfQojIDQyICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyA4NiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1
c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNp
bmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6
ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6Zmdl
dHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsK
ICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVz
aW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5n
IDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0
Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7
CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNp
bmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcg
OjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpz
cHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRt
cG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnBy
aW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6
c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5nIDo6dnNjYW5mOwogIHVzaW5nIDo6
dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg
X19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZmc2NhbmY7CiAgdXNpbmcg
X19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c25wcmludGY7CiAgdXNpbmcg
X19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3N0
ZGlvIiAyIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2MrK2lvLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3N0ZGRl
ZiIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9jKytpby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRl
ZmF1bHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDE4ICIvdXNyL2lu
Y2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDE5
ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi
IDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMK
CgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQu
aCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA0NyAiL3Vzci9p
bmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2No
ZWRfcHJpb3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQg
KCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLCBpbnQgX19mbGFncywg
dm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgp9CiMgMzMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAy
IDMKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX19zY2hlZF9zZXRwYXJhbSAoX19waWRfdCBf
X3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKZXh0
ZXJuIGludCBzY2hlZF9zZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0cGFy
YW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9w
YXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3NldHNjaGVkdWxl
ciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJh
bSAqX19wYXJhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAoX19w
aWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19w
YXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlk
X3QgX19waWQpIHRocm93ICgpOwpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRf
dCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3lpZWxkICh2b2lkKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGht
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdv
cml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9f
cGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBz
Y2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190
KSB0aHJvdyAoKTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg
MwoKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKIyA5NSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1
Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQg
dG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGlu
dCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2Nv
bnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQp
IHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAo
KTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGlt
ZTApIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0
aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXpl
X3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3Ry
aWN0IF9fdHApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3Qg
Y2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVy
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVf
dCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpfX2dtdGltZV9yIChf
X2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3Qg
X190cCkgdGhyb3cgKCk7CgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1l
X3QgKl9fcmVzdHJpY3QgX190aW1lciwgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpf
X3Jlc3RyaWN0IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93
ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19y
ZXN0cmljdCBfX3RwLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIGNoYXIg
Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsy
XTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoK
CmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoK
CgoKCmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3doZW4pIHRocm93ICgpOwoj
IDIyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0
IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRt
ICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3JlcXVlc3RlZF90aW1lLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsK
IyAyNTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoK
CgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJv
dyAoKTsKIyAyNzIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX3Ig
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0cmluZywgc3RydWN0IHRtICpfX3Jlc3RyaWN0
IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCgp9CiMgMjIgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi
IDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRl
L3NpZ25hbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDMwICIvdXNy
L2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3NpZ3NldC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA0OSAi
L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKIyAz
NjIgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5jbHVkZS9wdGhyZWFk
LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyNiAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMgNDkgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBU
SFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVE
LAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9T
WVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVU
RVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVY
X0VSUk9SQ0hFQ0tfTlAKCiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRF
WF9GQVNUX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNV
UlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJP
UkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFM
Cgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VT
U19TSEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwK
ICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZF
Ul9XUklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQ
VEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CgoKCgoKCnN0cnVjdCBfcHRocmVhZF9j
bGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAqX19h
cmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIg
Kl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFE
X0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAg
UFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE0MSAiL3Vzci9pbmNsdWRlL3B0aHJl
YWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fdGhyZWFkLCBf
X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAo
dm9pZCAqKSwgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBwdGhyZWFkX3QgcHRo
cmVhZF9zZWxmICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0
aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIHRocm93ICgpOwoKCmV4dGVy
biB2b2lkIHB0aHJlYWRfZXhpdCAodm9pZCAqX19yZXR2YWwpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFk
X3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVhZF9hdHRyX3QgKl9fYXR0
cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwgaW50ICpfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgX19jb25z
dCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19w
b2xpY3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGlj
eSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgKl9fcG9saWN5KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0
dHJfdCAqX19hdHRyLCBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
IGludCAqX19pbmhlcml0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0
c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19hdHRyLCBpbnQgKl9fc2NvcGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgX19ndWFyZHNp
emUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90ICpfX2d1YXJkc2l6ZSkgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJlYWRf
YXR0cl90ICpfX2F0dHIsIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsIHZvaWQgKipfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgX19zdGFj
a3NpemUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUg
KF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90ICpfX3N0YWNrc2l6ZSkgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX3Qg
X190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt
ICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0g
KHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCAqX19wb2xpY3ksIHN0cnVjdCBzY2hlZF9w
YXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1
cnJlbmN5ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3VycmVu
Y3kgKGludCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0
ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhh
dHRyX3QgKl9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf
aW5pdCAocHRocmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRy
X3QgKl9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4
X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
cHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq
X19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhy
ZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211
dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
cHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9tdXRleF90ICpfX211
dGV4KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9t
dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0
ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CmV4dGVy
biBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRy
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRo
cmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4
YXR0cl90ICpfX2F0dHIsIGludCBfX2tpbmQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFk
X211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCBfX2tp
bmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9f
Y29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgKl9fa2luZCkgdGhyb3cgKCk7
CiMgMzIzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9jb25k
X2luaXQgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQsIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90
ICpfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ry
b3kgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9f
Y29uZCwgcHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kLCBwdGhyZWFk
X211dGV4X3QgKl9fbXV0ZXgsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX2Fic3RpbWUpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAocHRocmVhZF9j
b25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0
cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2Nr
LCBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2Nr
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9y
d2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf
dHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9y
d2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf
dW5sb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0
cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRo
cmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja2F0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19h
dHRyLCBpbnQgKl9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLCBpbnQgX19w
c2hhcmVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2lu
ZF9ucCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLCBpbnQgKl9fcHJlZikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wIChw
dGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLCBpbnQgX19wcmVmKSB0aHJvdyAoKTsKIyA0MjAg
Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBfX3B0aHJlYWRfa2V5X2NyZWF0
ZSAocHRocmVhZF9rZXlfdCAqX19rZXksIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAq
KSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlf
dCAqX19rZXksIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBf
X2tleSwgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhy
ZWFkX3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fcG9p
bnRlcikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICpfX3B0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0
aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVj
aWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNDQ1ICIvdXNyL2luY2x1ZGUv
cHRocmVhZC5oIiAzCmV4dGVybiBpbnQgX19wdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpf
X29uY2VfY29udHJvbCwgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwg
dm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUs
IGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChw
dGhyZWFkX3QgX190aHJlYWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0
Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA0ODEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK
ZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKl9fYnVmZmVyLCB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwgdm9pZCAqX19h
cmcpIHRocm93ICgpOwojIDQ5MSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9p
ZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpf
X2J1ZmZlciwgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CiMgNTAyICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0
IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgdm9pZCAoKl9fcm91dGluZSkgKHZv
aWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA1MTMgIi91c3IvaW5jbHVkZS9wdGhyZWFk
LmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAoc3RydWN0IF9w
dGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAzMSAiL3Vzci9p
bmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgKGlu
dCBfX2hvdywgX19jb25zdCBfX3NpZ3NldF90ICpfX25ld21hc2ssIF9fc2lnc2V0X3QgKl9fb2xk
bWFzaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFkX3QgX190
aHJlYWQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsKIyA1MTkgIi91c3IvaW5jbHVkZS9wdGhyZWFk
LmgiIDIgMwojIDUzNCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IF9fcHRo
cmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwgdm9pZCAoKl9fcGFyZW50KSAo
dm9pZCksIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwgdm9pZCAoKl9fcGFyZW50KSAo
dm9pZCksIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9p
ZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy
biB2b2lkIF9fcHRocmVhZF9pbml0aWFsaXplICh2b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVs
dC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7CnR5cGVkZWYg
cHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhyZWFkX211dGV4X3Qg
X19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UKI3ByYWdt
YSB3ZWFrIHB0aHJlYWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRl
CiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX3Nl
dHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdtYSB3ZWFrIHB0aHJl
YWRfbXV0ZXhfbG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF90cnlsb2NrCiNwcmFnbWEg
d2VhayBwdGhyZWFkX211dGV4X3VubG9jawojIDc4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIHZvaWQgKl9f
Z3RocmVhZF9hY3RpdmVfcHRyID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwoKc3RhdGljIGlu
bGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgcmV0dXJuIF9fZ3RocmVhZF9h
Y3RpdmVfcHRyICE9IDA7Cn0KIyA0MjcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0
aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkK
ewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChv
bmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9f
Z3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2
b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3Rh
dGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2
b2lkICpwdHIpCnsKCiAgaWYgKHB0cikKICAgIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChr
ZXksIDApOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJl
YWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2tl
eV9kZWxldGUgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVj
aWZpYyAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmlj
IChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3Ro
cmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikKewogIHJldHVybiBwdGhyZWFkX3NldHNw
ZWNpZmljIChrZXksIHB0cik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9s
b2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9w
ICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJl
dHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19n
dGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAg
IHJldHVybiBwdGhyZWFkX211dGV4X3RyeWxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4g
MDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFk
X211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVy
biBwdGhyZWFkX211dGV4X3VubG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CiMg
OTkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhy
LmgiIDIgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysraW8uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBsb25nIHN0cmVh
bW9mZjsKICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOwoKCgogIHR5cGVkZWYgZnBvc190
IF9fY19zdHJlYW1wb3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoK
CiAgdHlwZWRlZiBGSUxFIF9fY19maWxlX3R5cGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7
CiAgICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
ZGVjID0gMHgwMDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAw
MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19vY3QgPSAweDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9
IDB4MDA4MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAx
MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU191bml0YnVmID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBw
ZXJjYXNlID0gMHg0MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0Zmll
bGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19iYXNlZmllbGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1NfZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2ZhaWxiaXQgPSAweDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAw
eDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19pbiA9IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAw
eDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0K
IyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMSAzCiMgMzcgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwoj
IDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzkg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDQyICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIg
MwoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDIgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgY291bnQ7CiAgd2ludF90IHZhbHVlOwp9IG1ic3RhdGVfdDsKIyA3NyAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMKc3RydWN0IHRtOwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3
Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAq
X19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhy
b3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19k
ZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHdjc2NtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0
IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKZXh0ZXJuIGludCB3Y3NuY21wIChfX2NvbnN0IHdj
aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z
dCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc25jYXNlY21wIChfX2Nv
bnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDExMyAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDIgMwoKZXh0ZXJuIGludCBfX3djc2Nhc2VjbXBfbCAoX19jb25zdCB3
Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgX193Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f
czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEs
IF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZy
bSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgMTM2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MwpleHRlcm4gaW50IF9fd2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qg
d2NoYXJfdCAqX19zMiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6
ZV90IF9fd2NzeGZybV9sICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNp
emVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAq
d2NzZHVwIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90
ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykgdGhyb3cgKCk7
CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJf
dCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdjaGFy
X3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAq
X19hY2NlcHQpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2No
YXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpIHRocm93ICgpOwoKCmV4dGVy
biB3Y2hhcl90ICp3Y3NzdHIgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3
Y2hhcl90ICpfX25lZWRsZSkgdGhyb3cgKCk7CiMgMTc0ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MwpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRy
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgX193Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAq
X19zKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19z
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChfX2NvbnN0IHdjaGFyX3QgKl9f
cywgc2l6ZV90IF9fbWF4bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY2hy
IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEs
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwgX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3Qg
Kl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNldCAo
d2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gd2ludF90IGJ0b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3RvYiAo
d2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoX19jb25zdCBtYnN0
YXRlX3QgKl9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19wd2MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf
X24sIG1ic3RhdGVfdCAqX19wKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAo
Y2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0
IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykg
dGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBfX2lubGluZSBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0
ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpCnsgcmV0dXJuIChfX3BzICE9IF9fbnVsbAog
ICAgICAgICAgPyBtYnJ0b3djIChfX251bGwsIF9fcywgX19uLCBfX3BzKSA6IF9fbWJybGVuIChf
X3MsIF9fbiwgX19udWxsKSk7IH0KCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZHN0LCBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl
X3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJp
Y3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNp
emVfdCBfX25tYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9f
ZHN0LCBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ud2MsIHNp
emVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwojIDI3NyAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIGludCB3Y3dpZHRoICh3aW50X3QgX19jKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgd2NzdG9kIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7Cgpl
eHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRo
cm93ICgpOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4g
dW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhy
b3cgKCk7CgoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVz
dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CiMgMzU1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS94bG9jYWxlLmgiIDEgMwojIDM1NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgpleHRl
cm4gbG9uZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2wg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfbCAoX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgX193
Y3N0b2RfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4g
ZmxvYXQgX193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2lu
dGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19u
cHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93ICgp
OwoKCgoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0
ciwgd2NoYXJfdCAqKiBfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91
cCkgdGhyb3cgKCk7CgoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9f
d2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy
b3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIs
IHdjaGFyX3QgKiogX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXAp
IHRocm93ICgpOwojIDQ0MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIF9faW5saW5l
IGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikg
dGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDAp
OyB9CmV4dGVybiBfX2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9pbnRlcm5hbCAoX19ucHRyLCBf
X2VuZHB0ciwgX19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQg
d2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz
ZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRy
LCBfX2Jhc2UsIDApOyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9m
X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBk
b3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0cikgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2xkX2ludGVybmFsIChfX25wdHIsIF9f
ZW5kcHRyLCAwKTsgfQoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBp
bnQgd2NzdG9xIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93
ICgpCnsgcmV0dXJuIF9fd2NzdG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNl
LCAwKTsgfQpfX2V4dGVuc2lvbl9fCmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcg
aW50IHdjc3RvdXEgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBf
X2VuZHB0ciwgX19iYXNlLCAwKTsgfQoKCgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjcGNweSAod2No
YXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHdjaGFyX3QgKndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Ny
Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgNTAyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp9
CiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwoj
IDU3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCm5hbWVz
cGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdGF0
ZV90eXBlIF9NX3N0OwogICAgICBzdHJlYW1vZmYgX01fb2ZmOwoKICAgIHB1YmxpYzoKICAgICAg
X19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAg
IHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoK
CiAgICAgIGZwb3MoKTogX01fc3QoX19zdGF0ZV90eXBlKCkpLCBfTV9vZmYoc3RyZWFtb2ZmKCkp
IHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19z
dGF0ZV90eXBlKCkpCiAgICAgIDogX01fc3QoX19zdCksIF9NX29mZihfX29mZikgeyB9CgogICAg
ICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZw
b3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsg
cmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBf
X29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAg
ICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgdCgqdGhp
cyk7CiAgICAgICAgcmV0dXJuIHQgKz0gX19vZmY7CiAgICAgIH0KCiAgICAgIGZwb3MmCiAgICAg
IG9wZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIHQoKnRoaXMp
OwogICAgICAgIHJldHVybiB0IC09IF9fb2ZmOwogICAgICB9CgogICAgICBib29sCiAgICAgIG9w
ZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9
PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9z
JiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoK
ICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2Zm
OyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9v
ZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBv
czsKCgoKfQojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBz
dHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoK
ICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVh
bXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5
cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3Np
Z24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9
IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19j
MSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0K
CiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3Qg
Y2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3Rh
dGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90
eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgZm9yIChzaXplX3QgX19pID0g
MDsgX19pIDwgX19uOyArK19faSkKICAgICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBfX3MyW19f
aV0pKQogICAgICAgICAgICByZXR1cm4gbHQoX19zMVtfX2ldLCBfX3MyW19faV0pID8gLTEgOiAx
OwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxl
bmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgewogICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19wID0gX19zOwogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsKICAgICAgICByZXR1cm4g
KF9fcCAtIF9fcyk7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYg
X19hKQogICAgICB7CiAgICAgICAgZm9yIChjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsgc2l6
ZV90KF9fcCAtIF9fcykgPCBfX247ICsrX19wKQogICAgICAgICAgaWYgKCpfX3AgPT0gX19hKSBy
ZXR1cm4gX19wOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90
eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBz
aXplX3QgX19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZShfX3MxLCBfX3My
LCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAg
ICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBf
X24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwgX19zMiwgX19uICog
c2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3Np
Z24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsKICAg
ICAgICBmb3IgKGNoYXJfdHlwZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBfX247ICsrX19wKQog
ICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0dXJuIF9fczsKICAgICAgfQoK
ICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUm
IF9fYykKICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRf
dHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50
X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3Qg
aW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2Mx
ID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg
bm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShf
X2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9OwoKCgogIHRlbXBsYXRlPD4K
ICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNoYXIgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1w
b3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBl
ZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWdu
KGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBf
X2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEs
IGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9Cgog
ICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNo
YXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRp
YyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw
ZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9f
bik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSog
X19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29u
c3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJf
dHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq
CiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVf
dCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19z
MSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hh
cl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24pKTsg
fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBz
aXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFy
X3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl
CiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBlCiAg
ICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0KCiAg
ICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBj
b25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAg
ICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5
cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBp
bnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7IH0K
ICB9OwojIDI2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1
Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBfQ2hh
cl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAgICAg
Ym9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJhaXRz
OjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaXRlcmF0b3IuaCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaXRlcmF0b3IuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9mcG9zLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRp
b25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9l
eGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2
b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVp
ZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19v
dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0
MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
aXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g
Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBl
bmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdi
dWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAg
ICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp
Y19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9
IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh
c2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
aXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0
ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4g
aW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVm
IGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hh
cj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lz
dHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdz
dHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxj
aGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7
CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2lj
X29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBm
c3RyZWFtOwojIDEyOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2Qu
aCIgMwp9CiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3Iu
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9i
YXNlX3R5cGVzLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgpzdHJ1Y3QgaW5wdXRf
aXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZv
cndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0
IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFn
IHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9E
aXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0
eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3RydWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlw
ZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9p
ZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2
b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVk
ZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
IHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21f
YWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0
ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlz
dGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYg
X1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NhdGVnb3J5LCBjbGFzcyBfVHAs
IGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0g
X1RwKiwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCY+CnN0cnVjdCBpdGVyYXRvciB7CiAgdHlwZWRl
ZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfUG9pbnRlciBw
b2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1l
IF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5
cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5h
bWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9p
bnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0
IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwp9OwojIDE0MCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRl
ciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9y
X2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0
aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUq
PigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikKewog
IHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1
ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5
KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQoK
CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19pKSB7
IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgpp
bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVf
dHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoKfQoj
IDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5j
cy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29u
Y2VwdF9jaGVjay5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Nv
bmNlcHRfY2hlY2suaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+
CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBpbnB1
dF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19u
LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwg
X0Rpc3RhbmNlJiBfX24pCnsKCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbiwgaXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9
IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwog
IH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBfX2xh
c3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUK
ZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQp7
CgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRl
cmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0
LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rp
c3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX24t
LSkgKytfX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y
JiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAoX19uID4g
MCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9fbisrKSAtLV9f
aTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9E
aXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX2kgKz0gX19uOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQg
YWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQp7CgogIF9fYWR2YW5j
ZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0KIyAzNiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDM0ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpw
cm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29u
dGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVy
YXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg
ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCBy
ZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9f
eCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192
YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7
IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy
YXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFp
bmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJh
Y2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFz
cyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFp
bmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVk
ZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p
ZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2lu
c2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJv
bnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFt
ZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250YWluZXItPnB1c2hf
ZnJvbnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg
fQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsg
cmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGZy
b250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVy
JiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpw
cm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6
Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5
cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5
cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgaW5zZXJ0
X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3Ig
X19pKQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs
dWVfdHlwZSYgX192YWx1ZSkgewogICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9f
dmFsdWUpOwogICAgKytpdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5l
Cmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9J
dGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9f
aXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9f
aSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX1Rw
LCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0
cmRpZmZfdD4KY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVm
IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBf
VHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwg
X0Rpc3RhbmNlPiBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3Vy
cmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0
b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5j
ZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVm
ZXJlbmNlIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30K
ICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJ
dGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0
b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9y
KigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50Owog
ICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJy
ZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAg
X1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9
CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwog
ICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
QmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJv
b2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxf
QmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkK
ewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
QmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJv
b2wgb3BlcmF0b3IhPSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxf
QmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkK
ewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CiMgMTkzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xh
c3MgcmV2ZXJzZV9pdGVyYXRvcgp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVi
bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJh
dG9yX2NhdGVnb3J5CiAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7
CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNl
CiAgICAgICAgICByZWZlcmVuY2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7
CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAg
cmV2ZXJzZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRv
cl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBf
U2VsZiYgX194KSA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9J
dGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9f
eCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBj
b25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsK
ICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQog
IHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9Cgog
IF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg
IC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7
CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0o
aW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJu
IF9fdG1wOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0
IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9y
Kz0oZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7
CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09
KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0
aGlzOwogIH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25z
dCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRv
cj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkg
PCBfX3guYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7
CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+Cmlu
bGluZSBib29sIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRv
cj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpv
cGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUgX19uLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3gpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBf
X24pOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNo
YXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgY2xhc3Mg
X0Rpc3QgPSBwdHJkaWZmX3Q+CmNsYXNzIGlzdHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogIHR5
cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBj
b25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKCiAgaXN0
cmVhbV9pdGVyYXRvcigpIDogX01fc3RyZWFtKDApLCBfTV9vayhmYWxzZSkge30KICBpc3RyZWFt
X2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQo
KTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0K
ICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoK
ICBpc3RyZWFtX2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fcmVhZCgpOwogICAgcmV0
dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBp
c3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4g
X190bXA7CiAgfQoKICBib29sIF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkg
Y29uc3QKICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01f
c3RyZWFtID09IF9feC5fTV9zdHJlYW0pOyB9Cgpwcml2YXRlOgogIGlzdHJlYW1fdHlwZSogX01f
c3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9NX29rOwoKICB2b2lkIF9NX3JlYWQoKSB7
CiAgICBfTV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAg
ICBpZiAoX01fb2spIHsKICAgICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgICAgX01fb2sg
PSAqX01fc3RyZWFtID8gdHJ1ZSA6IGZhbHNlOwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBi
b29sCm9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0
cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9D
aGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xh
c3MgX0Rpc3Q+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxf
VHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVh
bV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4g
IV9feC5fTV9lcXVhbChfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNs
YXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K
Y2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlw
ZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9f
cykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQogIG9zdHJlYW1faXRlcmF0b3Io
b3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQogICAgOiBfTV9zdHJlYW0oJl9f
cyksIF9NX3N0cmluZyhfX2MpIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0o
Y29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAo
X01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQog
IG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAg
b3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0K
cHJpdmF0ZToKICBvc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsKICBjb25zdCBfQ2hhclQqIF9NX3N0
cmluZzsKfTsKIyA0MTcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0
b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAg
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAg
ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KewoKcHJvdGVj
dGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgogIHR5cGVkZWYgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxfaXRlcmF0b3JfdHlwZTsKICB0
eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVy
IHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UgcmVm
ZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkg
eyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6
IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogIGlubGlu
ZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRh
aW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogIHJlZmVyZW5j
ZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogIHBvaW50ZXIK
ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICBub3JtYWxfaXRl
cmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsg
fQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25v
cm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYK
ICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxf
aXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv
cihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVyYXRvcltdKGNvbnN0IGRpZmZl
cmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICBu
b3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYg
X19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRl
cmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QK
ICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICBub3Jt
YWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u
KQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0
b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7
IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICBkaWZmZXJl
bmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29u
c3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgY29uc3QgX0l0
ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9Cn07CgoKCnRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D
b250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gX19saHMu
YmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwg
dHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3Bl
cmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv
bnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQoKCgp0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNl
KCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu
YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9y
Pihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs
CiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy
PiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGlu
ZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv
bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX3JocyA8IF9fbGhzKTsgfQoK
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5h
bWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAh
KF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1l
IF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cgp9CiMgMzcgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgNDMgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzYgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFpci5oIiAxIDMKIyAzNCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBm
aXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1Qy
IHNlY29uZDsKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCiAgcGFpcihjb25z
dCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30K
CiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEs
IF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAg
cmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25k
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7
CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3Qg
PCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1Qx
LCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3gg
PT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBj
b25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1
cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5s
aW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0
dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDM4ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDIxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMiAzCiMgNTcgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlIDxib29s
IF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Owp0eXBlZGVmIF9Cb29sPHRydWU+IF9fdHJ1ZV90eXBl
Owp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2ZhbHNlX3R5cGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1t
eV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyA4MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1
bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1
bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu
ZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRz
PF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBz
aG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl
Z2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBs
b25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25v
cm1hbF9pdGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFt
ZXNwYWNlIHN0ZCB7CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0Nv
bnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9y
PCBzdGQ6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lz
bGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMCAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xpbWl0
cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEy
NiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvbG9jYWxfbGltLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVk
ZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9s
aW0uaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5o
IiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91
c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3Rk
aW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMg
MzkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMxICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N5c2xpbWl0
cy5oIiAyIDMKIyAxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY2xpbWl0cy5oIiAyIDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdGRsaWIuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBj
LWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAz
CiMgMjUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoK
Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90
OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCBy
ZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAg
IGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsK
IyA4MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRf
bWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25z
dCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIg
Kl9fbnB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpf
X25wdHIpIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0
b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc3Ry
dG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBs
b25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgpleHRlcm4gdW5zaWdu
ZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhy
b3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0
b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSkgdGhyb3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBs
b25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDE1NyAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMTU4
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xf
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4g
dW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90
IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBf
X3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxf
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCmV4
dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhy
b3cgKCk7CiMgMTk2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJsZSBfX3N0
cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQg
X19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9f
bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0
b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoK
CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19j
b25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKiogX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDI0MiAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkK
ewogIHJldHVybiBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0
ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhy
b3cgKCkKewogIHJldHVybiBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i
YXNlLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
CiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVy
bmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZs
b2F0CnN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2ZfaW50ZXJuYWwgKF9f
bnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpzdHJ0b2xk
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19l
bmRwdHIsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBp
bnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9f
c3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVu
c2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50
ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBl
eHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9f
YmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19l
bmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWdu
ZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkgdGhy
b3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBf
X2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIg
Kl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9f
bnVsbCk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
dGhyb3cgKCkKewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVs
bCwgMTApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9f
bnB0cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVs
bCwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAph
dG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sbCAo
X19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KIyAzMzMgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAzNDAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MiAzCgoKCgoKCmV4dGVybiBpbnQzMl90IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IHZvaWQgKiBpbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIHZvaWQgKiBfX3N0YXRlYnVm
LCBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqIHNldHN0YXRl
ICh2b2lkICogX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEK
ICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0
YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3Nl
cDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVj
dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jl
c3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3Nl
ZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0
c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqIF9fcmVzdHJpY3QgX19zdGF0ZWJ1
Ziwgc2l6ZV90IF9fc3RhdGVsZW4sIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1
ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHN0YXRlX3IgKHZvaWQgKiBfX3Jlc3RyaWN0
IF9fc3RhdGVidWYsIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBz
cmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmFuZF9y
ICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRy
YW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAo
dm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f
eHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2Vl
ZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWdu
ZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDgg
KHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgpzdHJ1Y3QgZHJhbmQ0
OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IHhbM107CiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgYVszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBjOwogICAgdW5zaWduZWQgc2hvcnQg
aW50IG9sZF94WzNdOwogICAgaW50IGluaXQ7CiAgfTsKCgoKZXh0ZXJuIGludCBkcmFuZDQ4X3Ig
KHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGRvdWJsZSAqX19yZXN0
cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQg
c2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwg
bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBucmFu
ZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRh
ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
OwoKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLCBz
dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0
cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBp
bnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLCBzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBsY29uZzQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X2J1ZmZlcikgdGhyb3cgKCk7CiMgNDc0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu
IHZvaWQgKiBtYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgKiBj
YWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gdm9pZCAqIHJlYWxsb2MgKHZvaWQgKiBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7
CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9p
ZCBjZnJlZSAodm9pZCAqIF9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxs
b2NhLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAx
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAiQyIg
ewoKCgoKCmV4dGVybiB2b2lkICogYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoK
Cgp9CiMgNDkzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKiB2
YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZv
aWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGlu
dCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IF9fb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqIF9fYXJnKSwg
dm9pZCAqIF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVu
YykgKGludCBfX3N0YXR1cywgdm9pZCAqIF9fYXJnKSwgdm9pZCAqIF9fYXJnKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVz
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hh
ciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBp
bnQgX19yZXBsYWNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgKF9fY29uc3Qg
Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkg
dGhyb3cgKCk7CiMgNTY2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1r
dGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWtzdGVt
cCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19j
b25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25p
Y2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDU5NSAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJv
dyAoKTsKCgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAq
LCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5f
dDsKCgoKCgpleHRlcm4gdm9pZCAqIGJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqIF9fa2V5LCBfX2Nv
bnN0IHZvaWQgKiBfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBh
cl9mbl90IF9fY29tcGFyKTsKCgoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqIF9fYmFzZSwg
c2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoK
CgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25n
IGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50
IF9fZGVub20pIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxk
aXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKSB0aHJvdyAoKQog
ICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxs
ZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwgbG9uZyBsb25nIGludCBfX2Rlbm9t
KSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNjUxICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19z
aWduKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3Np
Z24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChs
b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpxZmN2dCAo
bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNw
dCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqcWdjdnQg
KGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp
bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19y
ZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZjdnRf
ciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs
IGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf
X2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CiMgNjk1ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fcHdjLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3
Y3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKIyA3MTggIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAq
X19yZXNwb25zZSkgdGhyb3cgKCk7CiMgNzI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0
ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwgX19jb25zdCBj
aGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLCBjaGFyICoqX19yZXN0cmljdCBfX3Zh
bHVlcCkgdGhyb3cgKCk7CiMgNzM4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZv
aWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp
bnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChp
bnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVm
LCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRo
cm93ICgpOwoKCgoKCn0KIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RkbGliLmgiIDIgMwojIDczICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nz
dGRsaWIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRp
dl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6YXRleGl0Owog
IHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwogIHVzaW5nIDo6
YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7
CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFiczsKICB1c2lu
ZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1i
c3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5k
OwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6c3RydG9kOwog
IHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5c3RlbTsKICB1
c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9uZwogIGFicyhs
b25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9u
ZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMgMTI1ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwpuYW1lc3BhY2UgX19n
bnVfY3h4CnsKICB1c2luZyA6OmxsZGl2X3Q7CiAgdXNpbmcgOjpfRXhpdDsKCiAgaW5saW5lIGxv
bmcgbG9uZwogIGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1f
X3g7IH0KCiAgaW5saW5lIGxvbmcgbG9uZwogIGxsYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJu
IF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGRpdihsb25nIGxv
bmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8g
X19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIGlubGluZSBsbGRpdl90
CiAgbGxkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBf
X3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoK
ICB1c2luZyA6OmF0b2xsOwogIHVzaW5nIDo6c3RydG9mOwogIHVzaW5nIDo6c3RydG9sbDsKICB1
c2luZyA6OnN0cnRvdWxsOwogIHVzaW5nIDo6c3RydG9sZDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAg
dXNpbmcgX19nbnVfY3h4OjpsbGRpdl90OwogIHVzaW5nIF9fZ251X2N4eDo6X0V4aXQ7CiAgdXNp
bmcgX19nbnVfY3h4OjphYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGFiczsKICB1c2luZyBfX2du
dV9jeHg6OmRpdjsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6
YXRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2Y7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0
b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG91bGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0
b2xkOwp9CiMgNDUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgi
IDEgMwojIDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAxIDMKIyAzNCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2NzdGRkZWYiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDM0ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNl
IHN0ZAp7CiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRo
cm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgdmlydHVhbCBj
b25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKICBjbGFzcyBiYWRfZXhjZXB0
aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkg
dGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07Cgog
IHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKICB0eXBlZGVmIHZvaWQgKCp1
bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRl
KHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0
ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0
cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0
aHJvdygpOwp9Cgp9CiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAyIDMKCmV4
dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMg
ZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CiAgICB2
aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9
OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpuZXdf
aGFuZGxlcikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIpOwp9
CgoKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp
Owp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9j
KTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRl
bGV0ZVtdKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBj
b25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6
c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs
ZXRlKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9y
IGRlbGV0ZVtdKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGlu
ZSB2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsg
cmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwg
dm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfQojIDQ3ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA0OSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNTAgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEg
MwojIDUxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAz
CiMgNTIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAz
CiMgNTMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNz
IF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0Zvcndh
cmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9f
YTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0Zv
cndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChf
X2EsIF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxp
bmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7
CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBj
b25zdCBfVHAmIF9fYikgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJl
dHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg
Y29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBf
X2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1Rw
JiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsK
CiAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KIyAxMzcg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikK
ewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgX091dHB1dEl0ZXIKX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9f
biA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAq
X19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jl
c3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwo
Y29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKewog
IG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmly
c3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRl
ciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2Vf
dHlwZSkKewogIHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBf
X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKF9UcCog
X19maXJzdCwgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlf
YXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlf
dHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0
ZXIgX19jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewog
IHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19j
b3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7
CiAgcmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9f
Zmlyc3QpKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0
SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVl
X3R5cGUpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0
ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgp
LCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIg
X19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlw
ZSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46
Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs
X2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4gX19jb3B5
X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIs
CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
Y29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
CiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJk
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7
IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGly
ZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9i
YWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Jp
ZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0OwogIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZm
ZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFs
SXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpIHsKICAg
IHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgp
LCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9f
Y29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRp
YyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBf
X3Jlc3VsdCkgewogICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0Owog
ICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7
CiAgICByZXR1cm4gX19yZXN1bHQgLSBfTnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVl
X3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw
KiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlz
cGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4K
aW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0
LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAg
ICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlh
bDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFs
PgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVt
cGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9i
YWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIg
X19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1
dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19m
YWxzZV90eXBlKXsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+Cmlu
bGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2Zp
cnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4g
X19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9f
bGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5
cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRl
cmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19O
b3JtYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwg
dHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9C
STEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBf
X05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9P
dXRwdXRJdGVyPiBfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpIHsKICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBh
aXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l
IHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1Np
emUgX19jb3VudCwKICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19j
b3VudDsKICByZXR1cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwg
X091dHB1dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwg
X091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3Vu
dCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9P
dXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29weV9uKF9J
bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1
bHQpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lk
IGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9U
cCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZp
bGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQog
ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lk
IGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVkIGNoYXIg
X190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsK
fQoKaW5saW5lIHZvaWQgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9f
bGFzdCwKICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgc2lnbmVk
IGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hh
ciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFyIF9fdG1w
ID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3Rt
cCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSB1
bnNpZ25lZCBjaGFyKiBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewog
IGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9f
bjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihj
aGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7
CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5l
IGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykK
ewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCAr
IF9fbjsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRl
cjI+CnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAg
KytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIx
LCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFp
cjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFy
eVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJz
dDIpKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8
X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVh
bChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQog
ICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICBy
ZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3Qx
LCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy
KSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxf
Y29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg
X19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJz
dDEsICsrX19maXJzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJl
dHVybiB0cnVlOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZh
bHNlOwogIH0KICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj
bGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAg
ICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy
LCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dy
YXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBf
X2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFz
dDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9f
Zmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9f
cmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhp
Y2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBj
b25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgo
Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19s
ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpf
X2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK
ICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYg
KF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEp
OwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29n
cmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmly
c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog
X19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7
CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBp
bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl
bjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAg
ICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAx
KSk7Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNo
YXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAg
cmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFz
dDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3
YXkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDIxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDI4ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBf
X3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Mo
dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5n
ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq
IF9fcyk7Cn0KIyAyOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg
MSAzCiMgMzAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwoj
IDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzMiAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2Fzc2VydC5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIg
MwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAz
CiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgoK
CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAz
CiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIu
aCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o
IiAyIDMKIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi
IDMKbmFtZXNwYWNlIHN0ZAp7CiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfUmVmY291bnRfQmFzZQp7CgoKCgogIHR5cGVkZWYgc2l6
ZV90IF9SQ190OwoKCgogICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7CgoKCgogIF9fZ3Ro
cmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwogIF9SZWZjb3VudF9CYXNlKF9SQ190IF9f
bikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhyZWFkX211dGV4X3QgX190
bXAgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9GQVNUX05QLCB7MCwgMH19OwogICAgICBfTV9y
ZWZfY291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9CiMgMTEyICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsKICAgIF9f
Z3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICArK19NX3JlZl9jb3Vu
dDsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICB9CiAg
X1JDX3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRf
bG9jayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgX19n
dGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgcmV0dXJuIF9fdG1w
OwogIH0KIyAxNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o
IiAzCn07CiMgMjg0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMu
aCIgMwp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kc3RydWN0IF9TVExfbXV0ZXhfc3BpbiB7CiAgZW51
bSB7IF9fbG93X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9OwoKCiAgc3RhdGljIHVuc2ln
bmVkIF9fbWF4OwogIHN0YXRpYyB1bnNpZ25lZCBfX2xhc3Q7Cn07Cgp0ZW1wbGF0ZSA8aW50IF9f
aW5zdD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbWF4ID0gX1NUTF9tdXRl
eF9zcGluPF9faW5zdD46Ol9fbG93X21heDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNpZ25l
ZCBfU1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sYXN0ID0gMDsKCnN0cnVjdCBfU1RMX211dGV4
X2xvY2sKewoKCiAgX19ndGhyZWFkX211dGV4X3QgX01fbG9jazsKICB2b2lkIF9NX2luaXRpYWxp
emUoKQogIHsKCgoKCgogIH0KICB2b2lkIF9NX2FjcXVpcmVfbG9jaygpIHsgX19ndGhyZWFkX211
dGV4X2xvY2soJl9NX2xvY2spOyB9CiAgdm9pZCBfTV9yZWxlYXNlX2xvY2soKSB7IF9fZ3RocmVh
ZF9tdXRleF91bmxvY2soJl9NX2xvY2spOyB9CiMgNDEyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwp9OwojIDQ0NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKc3RydWN0IF9TVExfYXV0b19sb2NrCnsKICBfU1RM
X211dGV4X2xvY2smIF9NX2xvY2s7CgogIF9TVExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYg
X19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygp
OyB9CiAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9Cgpw
cml2YXRlOgogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgX1NUTF9h
dXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKfTsKCn0KIyAzOSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyA2OCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0
ZSA8aW50IF9faW5zdD4KY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToK
CiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nf
b29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxs
b2Nfb29tX2hhbmRsZXIpKCk7CgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXpl
X3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoMCA9
PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkK
ICB7CiAgICBmcmVlKF9fcCk7CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBf
X3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IHJl
YWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBf
U19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cgog
IHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAg
ewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAg
X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICByZXR1cm4oX19vbGQpOwogIH0K
Cn07CgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsKCnRlbXBsYXRl
IDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19v
b21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlciko
KTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxv
Y19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0g
X19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7IH0KICAgICAg
ICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSBtYWxsb2MoX19u
KTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnRlbXBs
YXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+Ojpf
U19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9t
YWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsKICAg
ICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAg
ICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhyb3dfYmFkX2Fs
bG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1
bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jl
c3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9j
X2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIHNpbXBsZV9h
bGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAg
ICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShfX24gKiBz
aXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSh2b2lkKQogICAgICB7IHJl
dHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMg
dm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgICB7IGlmICgwICE9IF9f
bikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUo
X19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNs
YXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0ge19TX2V4dHJhID0gOH07CgoKCnB1
YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgY2hhciog
X19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50KSBfU19leHRyYSk7
CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50
KSBfU19leHRyYTsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl
X3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4
dHJhOwogICAgKCh2b2lkKSAwKTsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19u
ICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3Jl
YWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgodm9pZCkgMCk7CiAgICBj
aGFyKiBfX3Jlc3VsdCA9IChjaGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9w
LCBfX29sZF9zeiArIChpbnQpIF9TX2V4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0
ID0gX19uZXdfc3o7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICB9Cgp9
OwojIDI0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRl
bXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGUgewoKcHJpdmF0ZToKCgogIGVudW0ge19BTElHTiA9IDh9OwogIGVudW0ge19NQVhfQllU
RVMgPSAxMjh9OwogIGVudW0ge19ORlJFRUxJU1RTID0gMTZ9OwogIHN0YXRpYyBzaXplX3QKICBf
U19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNp
emVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgdW5pb24gX09i
aiB7CiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBf
TV9jbGllbnRfZGF0YVsxXTsKICB9OwoKICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9s
aXN0W107CgogIHN0YXRpYyBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMp
IHsKICAgICAgICByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9BTElHTi0xKS8oc2l6ZV90
KV9BTElHTiAtIDEpOwogIH0KCgogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7
CgoKICBzdGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25v
YmpzKTsKCgogIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19l
bmRfZnJlZTsKICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgogICAgc3RhdGljIF9TVExf
bXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCiAgICBjbGFzcyBfTG9jazsK
ICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6
CiAgICAgICAgICAgIF9Mb2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9s
b2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9OyB9CiAgICAgICAgICAgIH5fTG9jaygpIHsgeyBpZiAo
dGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfTsgfQog
ICAgfTsKCnB1YmxpYzoKCgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsK
ICAgIHZvaWQqIF9fcmV0ID0gMDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykg
ewogICAgICBfX3JldCA9IG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKTsKICAgIH0KICAgIGVs
c2UgewogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1Nf
ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKCgogICAgICBfTG9jayBfX2xv
Y2tfaW5zdGFuY2U7CgogICAgICBfT2JqKiBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAg
ICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRf
dXAoX19uKSk7CiAgICAgIGVsc2UgewogICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0
IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgIH0K
ICAgIH0KCiAgICByZXR1cm4gX19yZXQ7CiAgfTsKCgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo
dm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZ
VEVTKQogICAgICBtYWxsb2NfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgZWxzZSB7
CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAogICAgICAgICAgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICBfT2JqKiBfX3EgPSAoX09iaiop
X19wOwoKCgoKICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgICAgX19xIC0+IF9NX2Zy
ZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAqX19teV9mcmVlX2xpc3QgPSBf
X3E7CgogICAgfQogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl
X3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7Cgp9IDsKCnR5cGVkZWYgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPHRydWUsIDA+IGFsbG9jOwp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1w
bGF0ZTxmYWxzZSwgMD4gc2luZ2xlX2NsaWVudF9hbGxvYzsKCnRlbXBsYXRlIDxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewog
IHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoK
CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhcioKX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90
IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jlc3VsdDsKICAgIHNpemVf
dCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNpemVfdCBfX2J5dGVzX2xl
ZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYgKF9fYnl0ZXNfbGVmdCA+
PSBfX3RvdGFsX2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAg
ICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1
bHQpOwogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19u
b2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMg
PSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAg
ICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVz
dWx0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAg
ICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoK
ICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAgICBfT2JqKiB2b2xhdGls
ZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3Qg
KyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgKChfT2JqKilf
U19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAg
ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg
fQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsK
ICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7
CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAg
X09iaiogX19wOwoKCgogICAgICAgICAgICBmb3IgKF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAg
ICAgICBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsKICAgICAgICAgICAgICAgICBfX2kgKz0g
KHNpemVfdCkgX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2Zy
ZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAq
X19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAg
ICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAg
ICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAg
ICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAg
ICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAg
ICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9f
Ynl0ZXNfdG9fZ2V0KTsKCgoKICAgICAgICB9CiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0
ZXNfdG9fZ2V0OwogICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNf
dG9fZ2V0OwogICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsK
ICAgIH0KfQoKCgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kdm9pZCoK
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNp
emVfdCBfX24pCnsKICAgIGludCBfX25vYmpzID0gMjA7CiAgICBjaGFyKiBfX2NodW5rID0gX1Nf
Y2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVf
bGlzdDsKICAgIF9PYmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9P
YmoqIF9fbmV4dF9vYmo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVy
bihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxp
c3RfaW5kZXgoX19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAq
X19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAg
ICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4
dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBf
X24pOwogICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgICAgX19jdXJy
ZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xp
bmsgPSBfX25leHRfb2JqOwogICAgICAgIH0KICAgICAgfQogICAgcmV0dXJuKF9fcmVzdWx0KTsK
fQoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRf
c3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fY29weV9z
ejsKCiAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4g
KHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdf
c3opKTsKICAgIH0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAo
X19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3op
OwogICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25ld19z
ejsKICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgZGVhbGxvY2F0ZShf
X3AsIF9fb2xkX3N6KTsKICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCgogICAgdGVtcGxhdGUgPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9s
b2NrCiAgICAgICAgPSB7IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAsIHswLCAwfX0g
fTsKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsK
CnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciogX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoKdGVtcGxh
dGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCnRlbXBsYXRlIDxi
b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KdHlwZW5hbWUgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsKICAgIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9ORlJFRUxJU1RTCl0gPSB7MCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfTsKIyA1MjYgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpjbGFzcyBhbGxvY2F0b3IgewogIHR5cGVkZWYgYWxsb2MgX0FsbG9jOwpwdWJsaWM6CiAg
dHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3Rf
cG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBj
b25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNs
YXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3Ro
ZXI7CiAgfTsKCiAgYWxsb2NhdG9yKCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikg
e30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAx
PiYpIHt9CiAgfmFsbG9jYXRvcigpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194
KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3Jl
ZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNp
emVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3Rh
dGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAg
ICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwg
c2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9m
KF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXpl
X3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNv
bnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShw
b2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0
b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlw
ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs
bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0
IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m
LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2MDIgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7CiAgX0FsbG9jIF9fdW5kZXJs
eWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNv
bnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogIHR5cGVk
ZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK
CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2Fs
bG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07CgogIF9fYWxsb2NhdG9yKCkge30KICBf
X2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKQogICAgOiBfX3VuZGVybHlpbmdfYWxs
b2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBf
X2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpCiAgICA6IF9f
dW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9jYXRv
cigpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAm
X194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0
IHsgcmV0dXJuICZfX3g7IH0KCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qg
dm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9U
cCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAg
ICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9f
bikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2Yo
X1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVf
dCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29u
c3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBv
aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpj
bGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCog
cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2
b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsK
ICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5f
X3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf
X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRl
cmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUg
PGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2lu
c3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1
cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDczMiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29u
c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxv
Y2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3Ry
YWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9U
cDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw
ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxv
Y2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50
IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7
CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2Fs
bG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8
X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0
YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVf
YWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4K
ICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRv
cl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9B
bGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4KewogIHN0YXRpYyBjb25zdCBi
b29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBk
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxf
VHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRz
PF9UcCwKICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl
bGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAs
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0Pgpz
dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRv
cjxfVHAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z
dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5
cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19p
bnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19h
bGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBi
b29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBk
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxf
VHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCn0KIyAyMiAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzQgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfY29uc3RydWN0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNDcgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wLCBjb25z
dCBfVDImIF9fdmFsdWUpIHsKbmV3ICgodm9pZCopIF9fcCkgX1QxKF9fdmFsdWUpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3
ICgodm9pZCopIF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lk
IF9EZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+X1RwKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCl9fZGVzdHJveV9hdXgoX0ZvcndhcmRJ
dGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQp7
CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgZGVzdHJveSgmKl9f
Zmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQg
X19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVf
dHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+Cmlu
bGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
cmF0b3IgX19sYXN0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9U
cD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7
CiAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9Ucml2aWFsX2Rlc3RydWN0b3IoKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBfRGVzdHJv
eShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAg
X19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKaW5s
aW5lIHZvaWQgX0Rlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShp
bnQqLCBpbnQqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShsb25nKiwgbG9uZyopIHt9CmlubGlu
ZSB2b2lkIF9EZXN0cm95KGZsb2F0KiwgZmxvYXQqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShk
b3VibGUqLCBkb3VibGUqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJf
dCopIHt9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSB2b2lkIGNv
bnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7CiAgX0NvbnN0cnVjdChfX3As
IF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3Qo
X1QxKiBfX3ApIHsKICBfQ29uc3RydWN0KF9fcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu
bGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsKICBfRGVzdHJveShfX3BvaW50ZXIp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJv
eShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAg
X0Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsKfQoKfQojIDIzICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgMjQgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpwYWlyPF9UcCosIHB0cmRpZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZl
cihwdHJkaWZmX3QgX19sZW4sIF9UcCopCnsKICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4
MzY0NyAvIHNpemVvZihfVHApKSkKICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp
OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCopIG1hbGxvYygo
c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYgKF9fdG1wICE9IDApCiAgICAgIHJl
dHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgIF9fbGVuIC89IDI7
CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAsIDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3Jh
cnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikgewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVm
ZmVyKF9fbGVuLCAoX1RwKikgMCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l
IHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19s
ZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCop
IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgp2b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVy
KF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
YXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlciB7CnByaXZhdGU6CiAgcHRy
ZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVm
ZmVyOwoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9
IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3Qp
KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBz
aXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAo
X1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikK
ICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2lu
aXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5p
dGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0
aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0
cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVl
c3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdp
bigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVy
ICsgX01fbGVuOyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAg
ICBfVHJpdmlhbDsKCiAgICAgICAgICAgICAgewogICAgICBfTV9sZW4gPSAwOwogICAgICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigp
OwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19m
aXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigp
IHsKICAgIGRlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShf
TV9idWZmZXIpOwogIH0KCnByaXZhdGU6CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1w
b3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZl
ciYpIHt9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLAogICAgICAgICAg
Y2xhc3MgX1RwCiAgICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgPgpzdHJ1Y3QgdGVtcG9yYXJ5
X2J1ZmZlciA6IHB1YmxpYyBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+
CnsKICB0ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJ
dGVyYXRvciBfX2xhc3QpCiAgICA6IF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3Is
IF9UcD4oX19maXJzdCwgX19sYXN0KSB7fQogIH50ZW1wb3JhcnlfYnVmZmVyKCkge30KfTsKCn0K
IyAyNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEg
MwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQu
aCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAx
IDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVk
LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRf
Y29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+
Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9G
b3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICAgICAgICB7CiAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIF9Db25zdHJ1Y3QoJipf
X2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmlu
aXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0
dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf
SXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJ
dGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5
cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNoYXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBj
aGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBf
X2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7
Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19m
aXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCog
X19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkg
KiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2Zp
cnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFs
aXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsK
ICAgICAgICAgICAgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2Zp
cnN0LCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJl
dHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIpOwogIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4K
aW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxp
emVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nlc3NJ
dGVyLCBfRm9yd2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRl
cj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRf
Y29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9j
b3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFp
cjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0
ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwg
X19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9fbGFz
dCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lk
Cl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2Zh
bHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICAgICAgICB7
CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgm
Kl9fY3VyLCBfX3gpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAx
PgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u
c3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9U
cDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7
CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Np
emUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9u
X2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmlsbF9uKF9f
Zmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIg
PSBfX2ZpcnN0OwogICAgICAgICAgICB7CiAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f
Y3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpp
bmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBf
X3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4K
aW5saW5lIF9Gb3J3YXJkSXRlcgp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6
ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CiMg
MjMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIg
Mwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
Rm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29w
eShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9y
d2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KTsKICAgICAgICAgICAgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp
cnN0MiwgX19sYXN0MiwgX19taWQpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9U
cCwgY2xhc3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRp
YWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogICAgICAgICAgICB7CiAgICByZXR1
cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCgoKCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQK
X191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVy
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3Qy
LCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9feCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19m
aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICAgICAgICAgICAgewogICAgdW5pbml0aWFsaXpl
ZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKfQoKfQojIDI2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xhc3MgcmF3X3N0b3Jh
Z2VfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOwpwdWJs
aWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5
cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGlj
aXQgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihf
X3gpIHt9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlz
OyB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVu
dCkgewogICAgY29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYgb3Bl
cmF0b3IrKygpIHsKICAgICsrX01faXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmF3X3N0
b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRvcisrKGludCkgewog
ICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0
aGlzOwogICAgKytfTV9pdGVyOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCgp9CiMgMjcgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7CgogdGVtcGxhdGU8Y2xhc3MgX1RwMT4gc3RydWN0IGF1dG9fcHRyX3JlZiB7CiAgIF9U
cDEqIF9NX3B0cjsKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9wdHIoX19wKSB7fQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgYXV0b19wdHIgewpwcml2YXRlOgogIF9UcCog
X01fcHRyOwoKcHVibGljOgogIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKCiAgZXhwbGljaXQg
YXV0b19wdHIoX1RwKiBfX3AgPSAwKSA6IF9NX3B0cihfX3ApIHt9CiAgYXV0b19wdHIoYXV0b19w
dHImIF9fYSkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9U
cDE+IGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpCiAgICA6IF9NX3B0cihfX2EucmVsZWFz
ZSgpKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHsKICAgIHJlc2V0
KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNz
IF9UcDE+CiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB7CiAgICBy
ZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCgoKICB+YXV0b19w
dHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KCiAgX1RwJiBvcGVyYXRvciooKSBjb25zdCB7CiAgICBy
ZXR1cm4gKl9NX3B0cjsKICB9CiAgX1RwKiBvcGVyYXRvci0+KCkgY29uc3QgewogICAgcmV0dXJu
IF9NX3B0cjsKICB9CiAgX1RwKiBnZXQoKSBjb25zdCB7CiAgICByZXR1cm4gX01fcHRyOwogIH0K
ICBfVHAqIHJlbGVhc2UoKSB7CiAgICBfVHAqIF9fdG1wID0gX01fcHRyOwogICAgX01fcHRyID0g
MDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgdm9pZCByZXNldChfVHAqIF9fcCA9IDApIHsKICAg
IGlmIChfX3AgIT0gX01fcHRyKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9
IF9fcDsKICAgIH0KICB9CgoKCgoKcHVibGljOgogIGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxfVHA+
IF9fcmVmKQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0
b3I9KGF1dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB7CiAgICBpZiAoX19yZWYuX01fcHRyICE9IHRo
aXMtPmdldCgpKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9N
X3B0cjsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PiBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKQogICAgeyByZXR1cm4gYXV0b19wdHJfcmVm
PF9UcD4odGhpcy0+cmVsZWFzZSgpKTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRv
ciBhdXRvX3B0cjxfVHAxPigpCiAgICB7IHJldHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxl
YXNlKCkpOyB9Cn07Cgp9CiMgNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
c3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3Ry
YWl0cy5oIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJp
bmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2Qu
aCIgMSAzCiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIg
MSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIg
MwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv
YXRvbWljaXR5LmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoK
c3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpf
X2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3Zh
bCkKewogIHJlZ2lzdGVyIF9BdG9taWNfd29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoImxvY2s7IHhhZGRsICUwLCUyIgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIg
KF9fcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAoX192YWwpLCAibSIgKCpf
X21lbSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIF9fcmVz
dWx0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpf
X2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewog
IF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAlMCwlMSIKICAgICAgICAgICAgICAg
ICAgICAgICAgOiA6ICJpciIgKF9fdmFsKSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIpOwp9Cgpz
dGF0aWMgaW5saW5lIGNoYXIKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2NvbXBhcmVf
YW5kX3N3YXAgKHZvbGF0aWxlIGxvbmcqIF9fcCwgbG9uZyBfX29sZHZhbCwgbG9uZyBfX25ld3Zh
bCkKewogIGNoYXIgX19yZXQ7CiAgbG9uZyBfX3JlYWR2YWw7CgogIF9fYXNtX18gX192b2xhdGls
ZV9fICgibG9jazsgY21weGNoZ2wgJTMsICUxOyBzZXRlICUwIgogICAgICAgICAgICAgICAgICAg
ICAgICA6ICI9cSIgKF9fcmV0KSwgIj1tIiAoKl9fcCksICI9YSIgKF9fcmVhZHZhbCkKICAgICAg
ICAgICAgICAgICAgICAgICAgOiAiciIgKF9fbmV3dmFsKSwgIm0iICgqX19wKSwgImEiIChfX29s
ZHZhbCkpOwogIHJldHVybiBfX3JldDsKfQojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgODMgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3Mg
YmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh
aXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVl
X3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBf
X25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0
eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4gY29u
c3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRv
cj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y
PGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiMgMTE4ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9S
ZXAKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmViaW5kPGNoYXI+
OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDEzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBf
U19tYXhfc2l6ZTsKICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFsOwoKICAg
ICAgICBzaXplX3R5cGUgX01fbGVuZ3RoOwogICAgICAgIHNpemVfdHlwZSBfTV9jYXBhY2l0eTsK
ICAgICAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgICAgICAgYm9vbAogICAgICAg
IF9NX2lzX2xlYWtlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA8IDA7
IH0KCiAgICAgICAgYm9vbAogICAgICAgIF9NX2lzX3NoYXJlZCgpIGNvbnN0CiAgICAgICAgeyBy
ZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9s
ZWFrZWQoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9CgogICAgICAgIHZvaWQKICAg
ICAgICBfTV9zZXRfc2hhcmFibGUoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IDA7IH0KCiAg
ICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmRhdGEoKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxfQ2hhclQqPiAodGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFy
VCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVy
biBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIo
Y29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7
IHJldHVybiAoIV9NX2lzX2xlYWtlZCgpICYmIF9fYWxsb2MxID09IF9fYWxsb2MyKSA/CiAgICAg
ICAgICAgIF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxsb2MxKTsgfQoKCiAgICAgICAgc3Rh
dGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7CgogICAg
ICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsK
ICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAw
KQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAg
ICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQq
CiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0b21p
Y19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsK
ICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2Mm
LCBzaXplX3R5cGUgX19yZXMgPSAwKTsKIyAyMDggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIGlubGluZSBzdGF0aWMgYm9vbAogICAgICAg
IF9TX2V4Y2Vzc19zbG9wKHNpemVfdCwgc2l6ZV90KTsKCiAgICAgIH07CgoKICAgICAgc3RydWN0
IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFy
VCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3Ao
X19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAgcHVibGljOgoK
CgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5
cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0
YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNp
emVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXpl
b2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2Rh
dGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsg
fQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1cm4gJigocmVp
bnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0
b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsg
fQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbGVhaygp
CiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAg
IF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhz
aXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5z
aXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9j
aGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAg
ICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29m
ZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5z
aXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBf
X29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01faWJlZ2luKCkg
KyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRl
cmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCog
X19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewogICAgICAgICAg
Zm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5
cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAg
ICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19r
MikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsg
fQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29u
c3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2No
YXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQK
ICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9f
azIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0K
CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0
IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpj
b3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoK
ICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAg
ICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4o
Jl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQog
ICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhj
b25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3Mp
OwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl
IF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBf
X2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u
LAogICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAg
IGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxs
b2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25z
dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBfSW5w
dXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2Eg
PSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBfTV9yZXAoKS0+X01f
ZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5h
c3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25z
dCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFzc2ln
bigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7CiAgICAg
ICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9
CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgp
CiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01f
ZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAg
ICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsg
dGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQog
ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVy
YXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5i
ZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29u
c3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsg
fQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyByZXR1
cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQog
ICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9CgogICAg
ICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHZv
aWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJU
KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBf
TV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5
cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUo
MCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAg
IG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0
YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBl
IF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRh
KClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90
eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQog
ICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAg
ICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBh
dChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSBzaXplKCkpCiAgICAg
ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIF9N
X2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg
eyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19z
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsg
cmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBw
ZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5h
cHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBs
YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBh
cHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAg
ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3Qs
IF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAgICAg
IHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwgX19jKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICByZXR1cm4g
dGhpcy0+YXNzaWduKF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwgX19zdHIuX01fZm9sZChfX3Bvcywg
X19uKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19z
LCBfX3MgKyBfX24pOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBf
Q2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgX19zICsgdHJhaXRz
X3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24o
c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf
TV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0
KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsg
fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNl
cnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19l
bmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hl
Y2soX19wb3MxKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3N0ci5fTV9pYmVn
aW4oKSwgX19zdHIuX01faWVuZCgpKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5
cGUgX19uKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hlY2soX19wb3MxKTsK
ICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3N0ci5fTV9jaGVjayhfX3BvczIpLAog
ICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvczIsIF9fbikpOwogICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQo
c2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAg
ewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zKTsKICAgICAgICB0aGlzLT5y
ZXBsYWNlKF9fcCwgX19wLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3Ms
IGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MsIF9f
cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAg
ICB7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgX19uLCBfX2MpOwogICAg
ICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0
ZXJhdG9yIF9fcCwgX0NoYXJUIF9fYyA9IF9DaGFyVCgpKQogICAgICB7CiAgICAgICAgc2l6ZV90
eXBlIF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2No
ZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEpLCBfX2MpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRf
bGVha2VkKCk7CiAgICAgICAgcmV0dXJuIHRoaXMtPl9NX2liZWdpbigpICsgX19wb3M7CiAgICAg
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwg
c2l6ZV90eXBlIF9fbiA9IG5wb3MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFj
ZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBpdGVyYXRv
cgogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7CiAgICAgICAgc2l6ZV90
eXBlIF9faSA9IF9fcG9zaXRpb24gLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBsYWNl
KF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyAxLCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAg
ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkg
KyBfX2k7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmly
c3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX2Zp
cnN0IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX2ZpcnN0LCBfX2xhc3Qs
IF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgp
OwogICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxh
Y2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3N0ci5iZWdpbigpLCBfX3N0ci5lbmQoKSk7CiAgICAgIH0KCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUg
X19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUg
X19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxh
Y2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAg
ICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+
cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uMik7CiAgICAgIH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBj
b25zdCBfQ2hhclQqIF9fcykKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9N
X2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOwogICAgICB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICByZXR1
cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLCBf
X24yLCBfX2MpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg
ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5iZWdpbigpLCBfX3N0
ci5lbmQoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBf
X2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kx
LCBfX2kyLCBfX3MsIF9fcyArIF9fbik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw
bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykKICAg
ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
IHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRlcmF0b3Ig
X19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazEs
IF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBf
X2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCiAgICBwcml2YXRlOgogICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVy
YXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRf
aXRlcmF0b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVyYXRvcj4KICAgICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv
ciBfX2kyLCBfRndkSXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9Gd2RJdGVyYXRv
ciBfX2syLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J
bkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9J
bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFn
OwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSwgX1RhZygp
KTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRp
YyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVy
IF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1
ZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nh
c3Q8c2l6ZV90eXBlPihfX2JlZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHZhbHVlX3R5cGU+KF9fZW5kKSwgX19hKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3Ry
dWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAg
ICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0luSXRlcj46Ol9J
bnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2Jl
ZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTxj
bGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgIF9TX2NvbnN0cnVj
dChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgoKCiAgICAgIHRlbXBsYXRlPGNs
YXNzIF9Gd2RJdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0
KF9Gd2RJdGVyIF9fZW5kLCBfRndkSXRlciBfX2JlZywgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAg
ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHN0YXRpYyBfQ2hh
clQqCiAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0
IF9BbGxvYyYgX19hKTsKCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgY29weShf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7Cgog
ICAgICB2b2lkCiAgICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19zKTsKCgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGNfc3RyKCkgY29uc3QKICAgICAg
ewoKICAgICAgICBzaXplX3R5cGUgX19uID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHRyYWl0c190
eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9SZXA6Ol9TX3Rlcm1pbmFsKTsKICAgICAgICBy
ZXR1cm4gX01fZGF0YSgpOwogICAgICB9CgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGRhdGEo
KSBjb25zdCB7IHJldHVybiBfTV9kYXRhKCk7IH0KCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAg
IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhcGx1czsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5maW5kKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Mg
PSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fcywgX19wb3MsIHRyYWl0c190
eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKF9DaGFyVCBf
X2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJm
aW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3Ry
LnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlw
ZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKF9DaGFyVCBfX2Ms
IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp
bmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0g
MCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3N0ci5kYXRhKCks
IF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJz
dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj
b25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k
X2ZpcnN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3Bv
cyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAg
ICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu
ZF9sYXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNp
emVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9s
YXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihfQ2hh
clQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5yZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rf
bm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwg
X19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0
X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBm
aW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zLCBfX3Bvcywg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf
Zmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZmluZF9sYXN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNv
bnN0OwogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZmluZF9sYXN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9
CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXpl
X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIGJhc2ljX3N0cmluZwogICAgICBzdWJz
dHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpIGNvbnN0CiAgICAg
IHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291
dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpzdWJzdHIiKTsKICAgICAgICByZXR1cm4gYmFzaWNf
c3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBh
cmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAgICAgewogICAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBf
X3N0ci5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6
ZSk7CgogICAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9f
c3RyLmRhdGEoKSwgX19sZW4pOwogICAgICAgIGlmICghX19yKQogICAgICAgICAgX19yID0gX19z
aXplIC0gX19vc2l6ZTsKICAgICAgICByZXR1cm4gX19yOwogICAgICB9CgogICAgICBpbnQKICAg
ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9f
cG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoKICAgICAgaW50
CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKCgogICAgICBpbnQKICAg
ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQq
IF9fcykgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUg
X19uMikgY29uc3Q7CgogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVz
KF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg
ICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19s
aHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJh
dG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9y
Kyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQo
X19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQog
ICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4g
X19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXpl
X3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAg
ICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3Ry
OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl
dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVy
biBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9f
bGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0No
YXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz
LmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh
cmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29u
c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19s
aHMpID4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAg
eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1
cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19y
aHMuY29tcGFyZShfX2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz
LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU
KiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3JocykKICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh
cmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUo
X19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25z
dCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhz
KSA8PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+
KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19zdHIpOwp9CiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9hbGdvcml0aG0uaCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfYWxnb3JpdGhtLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF90ZW1wYnVmLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsZ28uaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9o
ZWFwLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAu
aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZvaWQKX19wdXNoX2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRl
eCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fcGFy
ZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9w
SW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgKihfX2ZpcnN0
ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXgg
PSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAq
KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZv
aWQKX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNlKiwgX1RwKikK
ewogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAx
KSwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCnB1c2hfaGVh
cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogIF9fcHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBf
VHAsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZApfX3B1c2hfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICBf
RGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKewogIF9E
aXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB3aGlsZSAoX19ob2xl
SW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFs
dWUpKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVu
dCk7CiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5k
ZXggLSAxKSAvIDI7CiAgfQogICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLAog
ICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcHVzaF9o
ZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSosIF9UcCopCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2Uo
KF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAo
KihfX2xhc3QgLSAxKSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApwdXNoX2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAg
ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNl
LCBjbGFzcyBfVHA+CnZvaWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
aXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl
biwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4Owog
IF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAo
X19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls
ZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgX19zZWNvbmRDaGls
ZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRD
aGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxk
ID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9f
bGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNv
bmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQog
IF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkCl9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0Rpc3RhbmNlKikKewogICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDAp
LCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcG9wX2hl
YXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICBfVHAqKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBf
X2xhc3QgLSAxLCBfX2xhc3QgLSAxLAogICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBf
X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yPgppbmxpbmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9f
cG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLAog
ICAgICAgICAgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZApfX2FkanVzdF9oZWFwKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7
CiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNv
bmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBf
X2xlbikgewogICAgaWYgKF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSwgKihfX2Zp
cnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAgICBfX3NlY29uZENoaWxkLS07CiAgICAq
KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAg
IF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9f
c2Vjb25kQ2hpbGQgKyAxKTsKICB9CiAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAg
ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0g
MSkpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICB9CiAgX19wdXNoX2hl
YXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUsIF9fY29tcCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkCl9fcG9wX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192
YWx1ZSwgX0NvbXBhcmUgX19jb21wLAogICAgICAgICAgIF9EaXN0YW5jZSopCnsKICAqX19yZXN1
bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rp
c3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21w
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkKewogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0
IC0gMSwgX19sYXN0IC0gMSwgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXAsCiAgICAgICAgICAg
ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKcG9wX2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmly
c3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJu
OwogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFy
ZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0X2hlYXAo
X19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAg
ICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCm1ha2VfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUo
X19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX1Rw
LCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19tYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwg
MikgcmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3Rh
bmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRq
dXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJl
bnQpKSwKICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSBy
ZXR1cm47CiAgICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCm1ha2VfaGVhcChfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAogICAgICAgICAgICAg
IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4Kdm9pZCBzb3J0X2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGls
ZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJl
Pgp2b2lkCnNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4g
MSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwp9Cgp9CiMgMzUgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNl
IHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFu
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogIGlmIChfX2EgPCBfX2IpCiAgICBpZiAoX19iIDwgX19jKQogICAgICByZXR1cm4gX19iOwog
ICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICBy
ZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgIHJldHVybiBfX2E7CiAgZWxzZSBp
ZiAoX19iIDwgX19jKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYKX19t
ZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0Nv
bXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChfX2NvbXAoX19h
LCBfX2IpKQogICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgIHJldHVybiBfX2I7CiAgICBl
bHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAg
ICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICByZXR1cm4gX19h
OwogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAg
IHJldHVybiBfX2I7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Z1bmN0
aW9uPgpfRnVuY3Rpb24gZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwgX0Z1bmN0aW9uIF9fZikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICBfX2YoKl9fZmlyc3QpOwogIHJldHVybiBfX2Y7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIgZmlu
ZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0g
X192YWwpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9p
ZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVk
KCpfX2ZpcnN0KSkKICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIGZp
bmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAg
ICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg
OyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19m
aXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBf
X2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu
IF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1
cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0
KSB7CiAgY2FzZSAzOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsK
ICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy
biBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToKICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6
CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0g
KF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0t
X190cmlwX2NvdW50KSB7CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7
CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0
OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJz
dDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNh
c2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19m
aXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7
CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy
biBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJu
IF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+Cmlu
bGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGlj
YXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBf
X2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIGFkamFjZW50X2ZpbmQoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJ
dGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBp
ZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0
ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmlu
ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsK
ICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xh
c3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9
CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6
ZT4Kdm9pZCBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25z
dCBfVHAmIF9fdmFsdWUsCiAgICAgICAgICAgX1NpemUmIF9fbikKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9f
Zmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAg
ICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICArK19fbjsKICByZXR1cm4g
X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnRf
aWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3By
ZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19uOwogIHJldHVy
biBfX247Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9y
d2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m
aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9f
bGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmly
c3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQo
X19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBf
X3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVu
dCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgX19maXJz
dDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgaWYgKF9fZmlyc3Qx
ID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgIF9fcCA9IF9fcDE7CiAgICBf
X2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAg
ICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAg
IGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYg
KCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9Cgog
ICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9G
b3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv
cndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3By
ZWRpY2F0ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGlmIChf
X2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19m
aXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlm
IChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAh
X19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAg
cmV0dXJuIF9fZmlyc3QxOwogIH0KCgoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19w
MSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJz
dDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSkgewogICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIp
KQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAg
ICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4g
X19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwogICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICBp
ZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFzdDE7CgogICAgd2hpbGUgKF9f
cHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3Qy
KQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFz
dDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAg
cmV0dXJuIF9fZmlyc3QxOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9JbnRl
Z2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgaWYgKF9fY291bnQgPD0gMCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UgewogICAg
X19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgIF9G
b3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgd2hpbGUgKF9faSAh
PSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICsrX19pOwog
ICAgICAgIC0tX19uOwogICAgICB9CiAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICByZXR1cm4g
X19maXJzdDsKICAgICAgZWxzZQogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBf
X3ZhbCk7CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0JpbmFyeVByZWQ+
Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9U
cCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVk
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0
dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg
ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICBicmVhazsKICAg
ICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAg
IF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19m
aXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAw
ICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAg
LS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0
OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewogICAgICAgICAg
aWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICsrX19pOwogICAgICAgIH0KICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICB9CiAgICB9
CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
MSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMiBzd2FwX3JhbmdlcyhfRm9yd2Fy
ZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0
MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaXRlcl9zd2FwKF9fZmly
c3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fZmlyc3QyOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1VuYXJ5T3BlcmF0aW9uPgpfT3V0
cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRp
b24gX191bmFyeV9vcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpf
X2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3Mg
X0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
X0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoK
CgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Miwg
KytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBf
VHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJz
dCA9PSBfX29sZF92YWx1ZSkKICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgp2b2lk
IHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICpfX2Zp
cnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
T3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHkoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkK
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAq
X19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0
SXRlciByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19u
ZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0
KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9HZW5lcmF0b3I+CnZvaWQgZ2VuZXJhdGUo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19n
ZW4pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr
K19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0
cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9HZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIGdlbmVy
YXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQp7
CgoKCgoKCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3Qg
PSBfX2dlbigpOwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNh
dGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsK
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0
dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+
Cl9Gb3J3YXJkSXRlciByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3Qs
IF9fbGFzdCwgX192YWx1ZSk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJu
IF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICA6
IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgcmVt
b3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAg
X0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8g
X19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19p
LCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2Nv
cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewoKICBfVHAgX192YWx1ZSA9
ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBf
X2xhc3QpCiAgICBpZiAoIShfX3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0g
Kl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4gKytf
X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy
PgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0
ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CgogICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYg
KCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsK
ICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGUsCiAgICAgICAgICBjbGFzcyBfVHA+
Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQs
IF9UcCopCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIF9UcCBfX3ZhbHVlID0gKl9f
Zmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz
dCkKICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgX192
YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0
dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0
cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5p
cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICBy
ZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9w
cmVkLAogICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5h
cnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0
ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
dG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgoKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICB3aGlsZSAoKytfX2Zp
cnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0
KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJl
ZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBf
X2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXI+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fZmlyc3QgPSBh
ZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAg
X19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsK
ICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9w
cmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgp2b2lkIF9fcmV2
ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAo
dHJ1ZSkKICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQog
ICAgICByZXR1cm47CiAgICBlbHNlCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX3JldmVyc2UoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX2ZpcnN0IDwg
X19sYXN0KQogICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgLS1fX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCByZXZlcnNlKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChf
X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1fX2xhc3Q7CiAgICAqX19yZXN1bHQgPSAqX19sYXN0
OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+Cl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChf
RXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0V1
Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKewogIHdoaWxlIChfX24gIT0gMCkgewogICAgX0V1Y2xp
ZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgIF9fbSA9IF9fbjsKICAgIF9fbiA9
IF9fdDsKICB9CiAgcmV0dXJuIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7
CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xh
c3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fZmly
c3QyID0gX19taWRkbGU7CiAgZG8gewogICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7
CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsK
ICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoKICBfRm9yd2FyZEl0ZXIgX19uZXdfbWlk
ZGxlID0gX19maXJzdDsKCiAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgd2hpbGUgKF9fZmlyc3Qy
ICE9IF9fbGFzdCkgewogICAgc3dhcCAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYg
KF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICBlbHNl
IGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgfQoK
ICByZXR1cm4gX19uZXdfbWlkZGxlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25hbEl0ZXIgX19yb3RhdGUoX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19t
aWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICBy
ZXR1cm4gX19maXJzdDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZygpKTsKICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYm
IF9fbWlkZGxlICE9IF9fbGFzdCkKICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7Cgog
IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFz
dCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19sYXN0OwogIH0K
ICBlbHNlIHsKICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21B
Y2Nlc3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZSAqLCBfVHAgKikKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9f
ayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwogIF9S
YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0ID0gX19maXJzdCArIChfX2xhc3QgLSBfX21pZGRsZSk7
CgogIGlmIChfX2sgPT0gMCkKICAgIHJldHVybiBfX2xhc3Q7CgogIGVsc2UgaWYgKF9fayA9PSBf
X2wpIHsKICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoK
ICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9faSsrKSB7CiAgICBfVHAgX190
bXAgPSAqX19maXJzdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAg
aWYgKF9fayA8IF9fbCkgewogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wv
X19kOyBfX2orKykgewogICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAg
ICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICB9Cgog
ICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgX19wICs9IF9fazsKICAgICAgfQog
ICAgfQoKICAgIGVsc2UgewogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2sv
X19kIC0gMTsgX19qICsrKSB7CiAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAg
ICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAg
fQoKICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICBfX3AgLT0gX19sOwogICAg
ICB9CiAgICB9CgogICAgKl9fcCA9IF9fdG1wOwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJu
IF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0Zvcndh
cmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLAogICAgICAg
ICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJvdGF0ZV9j
b3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUs
IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5jZSBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9f
bikgewoKICByZXR1cm4gbHJhbmQ0OCgpICUgX19uOwoKCgp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly
c3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3Qg
KyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CnZvaWQg
cmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9f
cmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsg
MTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19y
YW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfT3V0cHV0SXRlciByYW5k
b21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3Rh
bmNlIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9
IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNl
IF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlm
IChfX3JhbmRvbV9udW1iZXIoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpf
X2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWlu
aW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAg
ICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2Ft
cGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9f
cmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7
CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9f
bSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChf
X3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAg
ICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytf
X2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNz
SXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
b3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9f
bikKewogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19tLCArK19fZmlyc3QpCiAgICBf
X291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg
KytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5kb21fbnVtYmVyKF9fdCk7CiAgICBpZiAo
X19NIDwgX19uKQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAg
fQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5l
cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxl
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9E
aXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19tLCArK19fZmlyc3QpCiAgICBfX291dFtfX21d
ID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAg
ICBfRGlzdGFuY2UgX19NID0gX19yYW5kKF9fdCk7CiAgICBpZiAoX19NIDwgX19uKQogICAgICBf
X291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQg
KyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShf
X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19v
dXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5l
cmF0b3I+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QsCiAgICAgICAgICAg
ICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX291dF9sYXN0IC0gX19vdXRfZmlyc3QpOwp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBf
X3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7
CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgd2hpbGUgKF9fcHJl
ZCgqX19maXJzdCkpCiAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7
CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICB3aGlsZSAoKytfX25leHQgIT0g
X19sYXN0KQogICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICBzd2FwKCpfX2ZpcnN0LCAq
X19uZXh0KTsKICAgICAgKytfX2ZpcnN0OwogICAgfQoKICByZXR1cm4gX19maXJzdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0JpZGly
ZWN0aW9uYWxJdGVyIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKICB3aGls
ZSAodHJ1ZSkgewogICAgd2hpbGUgKHRydWUpCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkK
ICAgICAgICArK19fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICAgIC0tX19sYXN0
OwogICAgd2hpbGUgKHRydWUpCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICBy
ZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBpZiAoIV9fcHJlZCgqX19sYXN0KSkKICAgICAgICAt
LV9fbGFzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgaXRlcl9zd2FwKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHBhcnRpdGlvbihfRm9y
d2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By
ZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3BhcnRpdGlvbihf
X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0K
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBf
RGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQp7CiAgaWYgKF9fbGVuID09IDEp
CiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgX0Zvcndh
cmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIp
OwogIHJldHVybiByb3RhdGUoX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19t
aWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGVuIC8gMiksCiAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9f
aW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBf
UHJlZGljYXRlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19zdGFi
bGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0
YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9p
bnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7
CiAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgIF9Qb2ludGVyIF9fcmVz
dWx0MiA9IF9fYnVmZmVyOwogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJz
dCkKICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAqX19yZXN1bHQxID0gKl9f
Zmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAg
Kl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQyOwogICAgICB9CiAgICBj
b3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICByZXR1cm4gX19yZXN1bHQx
OwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBh
ZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgcmV0dXJuIHJvdGF0ZShfX3N0YWJsZV9w
YXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCwgX19t
aWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplKSwKICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19taWRkbGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSkpOwogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3Mg
X1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfRm9yd2FyZEl0ZXIKX19zdGFibGVfcGFydGl0
aW9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1RwKiwgX0Rpc3RhbmNlKikKewog
IF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xh
c3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlv
bl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5z
aXplKCkpOwogIGVsc2UKICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2Zp
cnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHN0YWJs
ZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVs
c2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19w
cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmly
c3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9f
Zmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+
Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1RwIF9fcGl2b3QpCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwg
X19waXZvdCkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZv
dCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkp
CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAg
ICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3Bh
cnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkK
ewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkK
ICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19jb21wKF9fcGl2b3Qs
ICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsKICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQog
ICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAg
KytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50IF9fc3RsX3RocmVzaG9sZCA9IDE2OwoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRl
ZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQp7CiAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxlIChf
X3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19u
ZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f
dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192
YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBf
UmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9f
Y29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgX19sYXN0
ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9fbGlu
ZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgX1RwIF9fdmFsID0g
Kl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgY29weV9iYWNrd2FyZChfX2Zp
cnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxz
ZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2xhc3QsIF9fdmFsKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpp
bmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwg
X0NvbXBhcmUgX19jb21wKQp7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX19jb21wKF9f
dmFsLCAqX19maXJzdCkpIHsKICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xh
c3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7CiAgfQogIGVsc2UKICAgIF9fdW5ndWFyZGVk
X2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsg
MTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19p
LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47
CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFz
dDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUo
X19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9f
aSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFy
X2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QpIHsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJz
dCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJk
ZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7
CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyAr
K19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVHAoKl9faSksIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+
CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQp7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmly
c3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+
CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAg
aWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCk7CiAgICBfX3VuZ3VhcmRl
ZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QpOwogIH0K
ICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19maW5hbF9p
bnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsK
ICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2NvbXApOwogICAg
X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19s
YXN0LCBfX2NvbXApOwogIH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgX1NpemUgX19s
ZyhfU2l6ZSBfX24pCnsKICBfU2l6ZSBfX2s7CiAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19u
ID4+PSAxKSArK19fazsKICByZXR1cm4gX19rOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0
aF9saW1pdCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7
CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0
LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC0tX19kZXB0aF9saW1p
dDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0
aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21l
ZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
KF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgIF9faW50cm9zb3J0X2xvb3Ao
X19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGltaXQpOwogICAgX19sYXN0ID0gX19j
dXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGlt
aXQsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxf
dGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxf
c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuOwogICAg
fQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAg
ICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLCBfX2Nv
bXApKSwKICAgICAgIF9fY29tcCk7CiAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3Qs
IChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgX19sYXN0ID0gX19jdXQ7CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHNvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ICE9
IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAg
X19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBp
ZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAg
ICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLAogICAgICAgICAgICAgICAg
ICAgICBfX2NvbXApOwogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fY29tcCk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9p
ZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9f
bGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
c3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmly
c3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2Zp
cnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3Qp
OwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19m
aXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21w
KTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0
ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJz
dCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBf
X2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIx
LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CnZv
aWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6
ZSkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJz
dCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAg
ICAgX19yZXN1bHQpOwogICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogIH0KCiAgX19zdGVwX3Np
emUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgbWVy
Z2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUs
IF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0
YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vz
c0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1
bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAg
d2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBt
ZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAg
IF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAg
ICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19m
aXJzdCArPSBfX3R3b19zdGVwOwogIH0KICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19s
YXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKCiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCAr
IF9fc3RlcF9zaXplLAogICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAg
ICAgIF9fcmVzdWx0LAogICAgICAgIF9fY29tcCk7Cn0KCmNvbnN0IGludCBfX3N0bF9jaHVua19z
aXplID0gNzsKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3Rh
bmNlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwg
X0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9f
Y2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19j
aHVua19zaXplKTsKICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2NodW5rX2luc2Vy
dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgIF9fZmlyc3QgKz0g
X19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j
b21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRl
ciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVy
IF9fYnVmZmVyLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19m
aXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rp
c3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICB3aGlsZSAoX19zdGVwX3Np
emUgPCBfX2xlbikgewogICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1
ZmZlciwgX19zdGVwX3NpemUpOwogICAgX19zdGVwX3NpemUgKj0gMjsKICAgIF9fbWVyZ2Vfc29y
dF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAg
ICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX0Nv
bXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47Cgog
IF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwoKICB3aGls
ZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwg
X19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAq
PSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmly
c3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9E
aXN0YW5jZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlIF9fYnVmZmVyX3NpemUpCnsKICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJz
dCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xl
bjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0
aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX3N0
YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9z
aXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwg
X19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICAgIF9fbWVyZ2Vfc29ydF93aXRo
X2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgfQog
IF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9f
bWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0g
X19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAg
ICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3Rh
bmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6
ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
ICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNl
IHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm
ZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp
OwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy
LCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsK
ICB9CiAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFu
Y2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xh
c3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZm
ZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1
Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0
KTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVm
LmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgp
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1
eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9UZW1wb3JhcnlfYnVmZmVy
PF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYu
YmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg
X19jb21wKTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFz
dCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYu
c2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5
cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D
b21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNl
X3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3BhcnRpYWxfc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwK
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBt
YWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19p
ID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0
KQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwKICAg
ICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwogIHNvcnRfaGVhcChfX2Zp
cnN0LCBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5s
aW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19wYXJ0
aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19t
aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAq
LCBfQ29tcGFyZSBfX2NvbXApCnsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29t
cCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0
OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICBfX3BvcF9oZWFw
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwgX19jb21wLAogICAgICAgICAgICAg
ICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29t
cGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHA+
Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikKewogIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBf
X3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNzSXRlciBf
X3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9IF9f
bGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgKl9fcmVz
dWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAr
K19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s
YXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA8ICpf
X3Jlc3VsdF9maXJzdCkKICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3Rh
bmNlKDApLAogICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3Qg
LSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAg
ICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh
bF9sYXN0KTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNz
SXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwK
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0
X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmlyc3Qp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRv
bUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopCnsKICBp
ZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7
CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7
CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVz
dWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19y
ZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRf
Zmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAg
IF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAog
ICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKICAgICsrX19maXJzdDsKICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jl
c3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfQ29tcGFyZT4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJl
dHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3Qs
IF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX250
aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bnRoLAogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7
CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmly
c3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0
IC0gMSkpKSk7CiAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsK
ICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxp
bmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9f
bnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3Qp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBf
X2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3Vh
cmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9
IF9fY3V0OwogICAgZWxzZQogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25f
c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19udGhfZWxl
bWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29t
cCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2Fy
ZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVu
ID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hh
bGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRs
ZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAg
IH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2Fy
ZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0
LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3Rh
bmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7Cgog
IHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRs
ZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29t
cCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsr
X19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNl
CiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9G
b3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFs
LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21w
LAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpf
Rm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwg
X0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRk
bGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBf
X21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYg
KF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAg
ICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xl
biAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJf
Ym91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9f
dmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0
YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rp
c3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+
IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlk
ZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9f
bWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAx
OwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBl
cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2Nv
bXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9f
dXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRl
ciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgIF9EaXN0YW5j
ZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xl
ZnQsIF9fcmlnaHQ7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+
IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYp
OwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsK
ICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0K
ICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAg
IGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192
YWwpOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVy
X2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIHBhaXI8X0Zv
cndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICB9CiAgfQogIHJl
dHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgcGFpcjxf
Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBf
X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1
YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0
IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7
CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVu
KTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBf
X3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog
ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg
IGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxl
OwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAg
fQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICBfX2xlbiA9IF9f
aGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21p
ZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAg
ICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29t
cCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQs
IF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJk
SXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv
cndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX2VxdWFs
X3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAgICAgICAgICAg
ICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxv
d2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogIHJldHVybiBfX2kgIT0gX19sYXN0
ICYmICEoX192YWwgPCAqX19pKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJf
Ym91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICByZXR1cm4gX19pICE9IF9f
bGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIg
bWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsK
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAg
KytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19m
aXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3Mg
X0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsK
ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0
OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19s
YXN0MSwgX19yZXN1bHQpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
LCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rp
b25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19s
ZW4xLCBfRGlzdGFuY2UgX19sZW4yKQp7CiAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAw
KQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgaWYgKCpfX21p
ZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAg
cmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Owog
IF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2Ug
X19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xl
bjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwg
X19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0
LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s
ZW4yMik7CiAgfQogIGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNl
KF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9f
Zmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9f
Zmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRs
ZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9f
bWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vfd2l0
aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g
X19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp
c3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAo
X19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJz
dCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAgfQog
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0gMDsK
ICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgX19s
ZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAg
IF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1
dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIp
OwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3Nl
Y29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0
LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fZmlyc3Qs
IF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21p
ZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwog
IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRs
ZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0
LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19s
ZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRp
cmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXpl
KQp7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+IF9f
bGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0gY29w
eShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2Vu
ZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAg
ICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBj
b3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo
X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgcmV0dXJuIHJv
dGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dh
cmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIzIF9fcmVzdWx0KQp7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4gY29w
eV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9
PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAgICBp
ZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwog
ICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2Fy
ZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0K
ICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJz
dDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytf
X2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAog
ICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9CaWRp
cmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDEg
PT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBf
X3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9iYWNr
d2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9fbGFz
dDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkg
ewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19s
YXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBf
X3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jl
c3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICBy
ZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAg
IC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXI+CnZvaWQgX19tZXJnZV9hZGFwdGl2
ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBf
RGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIs
IF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19s
ZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko
X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZl
cl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjIg
PD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21p
ZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlIHsKICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9
IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7
CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBf
X2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFz
dCwgKl9fZmlyc3RfY3V0KTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAg
ICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1
cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3Rh
bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1
dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJn
ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAog
ICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAg
ICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9f
bGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAg
ICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sZW4xIDw9
IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZm
ZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19i
dWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsK
ICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9f
YnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJn
ZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAg
ICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAg
IF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjEx
KTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9f
Zmlyc3RfY3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0
LCBfX2xlbjIyKTsKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsK
ICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9
IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwog
ICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUo
X19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsK
ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwg
X19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUsIF9fY29tcCk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNv
bmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9f
bGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlz
dGFuY2U+CmlubGluZSB2b2lkIF9faW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4xID0g
MDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2UgX19s
ZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVtcG9y
YXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0
KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf
X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CiAgZWxzZQogICAgX19t
ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwK
ICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUo
KSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsCiAg
ICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lu
cGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBf
RGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBf
X2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwg
X1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAg
ICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVu
MSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg
X19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9f
YnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAg
ICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUg
dm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUg
fHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVf
dHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIGlucGxh
Y2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBf
X21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNlX21l
cmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
X192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg
aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBp
ZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAg
ICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
Q29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg
X19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNl
OwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmly
c3QxOwogICAgZWxzZQogICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19m
aXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAo
Kl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAg
ICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVz
dWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFy
ZT4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoX19j
b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7
CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytf
X3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg
Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfaW50
ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0
MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8
ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsr
X19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAg
IGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXAp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19m
aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmIChfX2NvbXAo
Kl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0
MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVy
PgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQog
ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlm
ICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2Zp
cnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEs
IGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9D
b21wYXJlPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0
MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAg
ICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly
c3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAg
ICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
c3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIs
IGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlcgpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2Uo
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikgewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19y
ZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0
OwogICAgfQogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAg
ICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFz
dDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lu
cHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9P
dXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29t
cCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog
ICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19j
b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7
CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2Zp
cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2Fy
ZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQog
ICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg
cmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
Q29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAo
KytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkp
IF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICgqX19maXJz
dCA8ICpfX3Jlc3VsdCkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3Vs
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0NvbXBhcmU+Cl9Gb3J3
YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Owog
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBf
X2xhc3QpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICBfX3Jlc3Vs
dCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4g
ZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYg
KF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19p
OwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1f
X2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2og
PSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgIHt9CiAgICAg
IGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAg
cmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJz
ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBuZXh0
X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsK
ICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBf
X2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkg
PSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCpfX2ks
ICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2
ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kg
PT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVy
biBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+
CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkK
ICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7Oykgewog
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19p
aSA8ICpfX2kpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAg
d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwg
X19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAg
IH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFz
dCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIHByZXZfcGVybXV0YXRpb24oX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZh
bHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChf
X2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsK
CiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19p
OwogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAg
ICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFz
dCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAg
ICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQog
IH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpf
SW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBf
Rm9yd2FyZEl0ZXIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBm
b3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJk
SXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAg
ICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJl
dHVybiBfX2xhc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2Yo
X0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFz
dDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0Mjsg
X19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg
Kl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9CiMg
MzM5MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRl
cjEgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9y
d2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
dG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0
MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3Vs
dCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jl
c3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0
Mik7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAg
ICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0K
ICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyMSBf
X2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1
cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3Qx
OwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAg
ICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7
CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAg
IF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAg
IH0KICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMj4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFs
SXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9u
YWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9S
ZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJj
aChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7CgogIGlmIChfX3JyZXN1bHQgPT0g
X19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwg
LWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFs
SXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0
MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICBfQmlu
YXJ5UHJlZGljYXRlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rp
b25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVj
dGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsK
ICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBz
ZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAg
cmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0
ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2Zp
cnN0MiwgX19sYXN0MikpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5lIF9Gb3J3YXJk
SXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xh
c3QxLAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFz
dDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX2Zp
bmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAg
ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVBy
ZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2Zp
cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly
c3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19j
b21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19m
aW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAg
ICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rp
c3RhbmNlPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfRGlzdGFu
Y2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsKICBmb3IgKF9EaXN0YW5jZSBfX2No
aWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytfX2NoaWxkKSB7CiAgICBpZiAoX19maXJzdFtfX3Bh
cmVudF0gPCBfX2ZpcnN0W19fY2hpbGRdKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9f
Y2hpbGQgJiAxKSA9PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9TdHJpY3RXZWFrT3JkZXJpbmc+CmJvb2wgX19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wLAogICAgICAgICAgICAgICBfRGlzdGFu
Y2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsKICBmb3IgKF9EaXN0YW5jZSBfX2No
aWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytfX2NoaWxkKSB7CiAgICBpZiAoX19jb21wKF9fZmly
c3RbX19wYXJlbnRdLCBfX2ZpcnN0W19fY2hpbGRdKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAg
aWYgKChfX2NoaWxkICYgMSkgPT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRy
dWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIGJvb2wgaXNf
aGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19pc19oZWFw
KF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgppbmxpbmUgYm9vbCBpc19oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19pc19oZWFwKF9fZmlyc3QsIF9f
Y29tcCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAg
IHJldHVybiB0cnVlOwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsr
X19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewog
ICAgaWYgKCpfX25leHQgPCAqX19maXJzdCkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0
dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TdHJpY3RX
ZWFrT3JkZXJpbmc+CmJvb2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1
cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4
dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlm
IChfX2NvbXAoKl9fbmV4dCwgKl9fZmlyc3QpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBy
ZXR1cm4gdHJ1ZTsKfQoKfQojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2FsZ29yaXRobS5oIiAyIDMKIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2lj
X3N0cmluZy50Y2MiIDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfc3RyaW5nLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190
ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU19tYXhfc2l6ZSA9ICgoKG5wb3Mg
LSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQpKSAtIDEpIC8gNDsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25z
dCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7CgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz
aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9TX2Vt
cHR5X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6
ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAm
JiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVm
Y29weSgpOwoKICAgICAgICBfQ2hhclQgX19idWZbMTAwXTsKICAgICAgICBzaXplX3R5cGUgX19p
ID0gMDsKICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgc2l6ZW9mKF9fYnVm
KSAvIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgewogICAgICAgICAgICBfX2J1ZltfX2krK10g
PSAqX19iZWc7CiAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICB9CiAgICAgICAgX1JlcCog
X19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19hKTsKICAgICAgICB0cmFpdHNfdHlwZTo6Y29w
eShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7CiAgICAgICAgX19yLT5fTV9sZW5ndGgg
PSBfX2k7CiAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGZvciAo
OzspCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0NoYXJUKiBfX3AgPSBfX3ItPl9N
X3JlZmRhdGEoKSArIF9fci0+X01fbGVuZ3RoOwogICAgICAgICAgICAgICAgX0NoYXJUKiBfX2xh
c3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNpdHk7CiAgICAgICAgICAgICAg
ICBmb3IgKDs7KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKF9f
YmVnID09IF9fZW5kKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFzdCkKICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpfX2JlZzsKICAgICAgICAg
ICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
c2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAg
ICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBfX2EpOwogICAg
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZkYXRhKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKSwgX19sZW4p
OwogICAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgICAgICBf
X3IgPSBfX2Fub3RoZXI7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbGVuOwog
ICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICB7
CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0
ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19k
bmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCiAg
ICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJl
dHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgICBfUmVwKiBfX3IgPSBf
UmVwOjpfU19jcmVhdGUoX19kbmV3LCBfX2EpOwogICAgICAgIGlmICh0cnVlKQogICAgICAgICAg
eyBfU19jb3B5X2NoYXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAg
ICAgaWYgKGZhbHNlKQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19h
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICB9CiAgICAg
ICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7CgogICAgICAgIF9fci0+X01fcmVmZGF0YSgpW19f
ZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRh
KCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9U
cmFpdHMsIF9BbGxvYz46OgogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBf
X2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09
IF9BbGxvYygpKQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoK
ICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgaWYgKHRy
dWUpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fbikKICAgICAgICAgICAgdHJhaXRzX3R5cGU6
OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwgX19uLCBfX2MpOwogICAgICAgIH0KICAgICAgaWYg
KGZhbHNlKQogICAgICAgIHsKICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0
aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFs
OwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBsdXMoX19zdHIuX01fcmVwKCktPl9N
X2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3IoKSksCiAgICAgICAgICAgICAgICAg
X19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBf
X2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwgX0NoYXJUKCks
IF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIDogX01fZGF0YXBsdXMoX1NfY29u
c3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9jKCkpCiAgICB7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Ms
CiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6
IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfX2EpLCBf
X2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwg
Y29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9f
cyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3Ms
IGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBf
X3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3Ry
aW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBf
TV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVn
LCBfSW5wdXRJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMo
X1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KQogICAgewogICAgICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAgICAgICAgewoK
ICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAg
ICAgICAgIF9DaGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9fc3Ry
LmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwog
ICAgICAgICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6X1JlcDo6CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQog
ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5
ICsgMSkgKiBzaXplb2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxs
b2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X01f
bGVha19oYXJkKCkKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAg
ICAgICBfTV9tdXRhdGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4x
LCBzaXplX3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRo
aXMtPnNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXpl
ICsgX19sZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgp
ICsgX19wb3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19v
bGRfc2l6ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFy
ZWQoKSB8fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAgICAgICAgYWxs
b2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX1JlcCogX19yID0g
X1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICBpZiAodHJ1ZSkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX3BvcykKICAgICAgICAgICAgICAgIHRyYWl0
c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAg
ICAgICAgICBpZiAoX19ob3dfbXVjaCkKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGlmIChmYWxzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9zZShn
ZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICB9CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAg
ICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19o
b3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQogICAgICAgIHsKCiAgICAgICAgICB0cmFpdHNf
dHlwZTo6bW92ZShfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gp
OwogICAgICAgIH0KICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9y
ZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6ZTsKICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVd
ID0gX1JlcDo6X1NfdGVybWluYWw7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQog
ICAgewogICAgICBpZiAoX19yZXMgPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9p
c19zaGFyZWQoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6
ZSgpKQogICAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNl
cnZlIik7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAg
ICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0
aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAg
ICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3Mp
CiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVw
KCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFr
ZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAo
dGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewog
ICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19z
Ll9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2lu
KCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJp
bmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0aGlzID0g
X190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KIyAzNTYgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6
ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoK
ICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xl
bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBf
X3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7
CgoKICAgICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2Nh
dGUoX19zaXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBf
X3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUo
KTsKICAgICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
Ol9SZXA6OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19y
ZXMpCiAgICB7CiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGggKyBf
X3JlcywgX19hbGxvYyk7CiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAg
aWYgKHRydWUpCiAgICAgICAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRh
KCksIF9NX3JlZmRhdGEoKSwgX01fbGVuZ3RoKTsgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVm
ZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUgYm9vbAoKCgoKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90
IF9fcywgc2l6ZV90IF9fcikKCiAgICB7CiAgICAgIHJldHVybiAyICogKF9fcyA8PSAxNiA/IDE2
IDogX19zKSA8IF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykK
ICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhf
ZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5k
KF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAg
IHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAg
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBs
YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXIgX19rMSwKICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewog
ICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0dXJuIHRoaXMt
PnJlcGxhY2UoX19pMSwgX19pMiwgX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpKTsKICAg
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwg
aXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90
eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlz
LT5tYXhfc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXpl
X3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKCiAgICAgICAgaWYgKF9fZG1heCA8PSBfX2Ru
ZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfTV9yZXBs
YWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOwogICAg
ICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKICAgICAgICBpZiAoX19kbmV3
KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7
CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEs
IGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIs
IHNpemVfdHlwZSBfX24yKQogICAgewogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVj
ayhfX3BvczEpLCBfTV9mb2xkKF9fcG9zMSwgX19uMSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
c3RyLl9NX2ZvbGQoX19wb3MyLCBfX24yKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs
X0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKCgoK
ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBh
Y2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gdGhpcy0+
cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2luKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUg
X19sZW4gPSBtaW4oX19zdHIuc2l6ZSgpIC0gX19wb3MsIF9fbikgKyB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShf
X2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf
X3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9N
X2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46
OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgewogICAg
ICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+
IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90
eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsg
dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAg
IHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVu
ZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMs
CiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYg
X19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B
bGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBl
OjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX1RyYWl0
czo6bGVuZ3RoKF9fbGhzKTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zdHIu
cmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX2xocywg
X19saHMgKyBfX2xlbik7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBf
X3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
PgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxf
VHJhaXRzLF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQsX1RyYWl0cyxfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190
eXBlIF9fc3RyOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNpemUoKTsKICAgICAg
X19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUo
MSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3Ry
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uo
aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2Mp
CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CiAgICAgIHNpemVfdHlw
ZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgIGlmIChtYXhfc2l6ZSgpIC0gKHRo
aXMtPnNpemUoKSAtIF9fbjEpIDw9IF9fbjIpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3Io
ImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBfTV9tdXRhdGUgKF9fb2ZmMSwgX19uMSwg
X19uMik7CgogICAgICBpZiAoX19uMikKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2Rh
dGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb3B5KF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAg
IGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgi
YmFzaWNfc3RyaW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4gdGhpcy0+c2l6ZSgpIC0gX19w
b3MpCiAgICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7CgogICAgICB0cmFpdHNfdHlw
ZTo6Y29weShfX3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoKICAgICAgcmV0dXJuIF9fbjsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz
aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
ZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj
b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBz
aXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0
YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsgKytfX3hwb3MpCiAgICAg
ICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBvcywgX19zLCBfX24pID09
IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChfQ2hh
clQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX3JldCA9IG5wb3M7CiAgICAgIGlm
IChfX3BvcyA8IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0
YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBfX3NpemUgLSBfX3BvczsK
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19kYXRhICsg
X19wb3MsIF9fbiwgX19jKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIF9fcmV0ID0g
X19wIC0gX19kYXRhOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK
ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbiA8PSBf
X3NpemUpCiAgICAgICAgewogICAgICAgICAgX19wb3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24g
LF9fcG9zKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAg
ICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29t
cGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICAgICAgICByZXR1
cm4gX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3Bvcy0tID4gMCk7CiAg
ICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9f
cG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3Np
emUgLSAxOwogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQogICAgICAgICAgICBfX3hwb3Mg
PSBfX3BvczsKCiAgICAgICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3MtLSA+IDA7ICkKICAgICAg
ICAgICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAg
ICAgICAgICByZXR1cm4gX194cG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRf
Zmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
bikgY29uc3QKICAgIHsKICAgICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsg
KytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190
eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsKICAgICAgICAgIGlmIChfX3Ap
CiAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp
emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBm
aW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK
ICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXpl
ID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01f
ZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAg
ICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAgICAgIH0KICAgICAgcmV0
dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBf
X3BvczsKICAgICAgZm9yICg7IF9fbiAmJiBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9z
KQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hw
b3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlw
ZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2Zp
cnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUo
KTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBv
c10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXpl
X3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmlu
ZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3Np
emUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwg
X01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAg
ICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVy
biBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29u
c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYg
KF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAg
ICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAg
ICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAo
X19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBh
cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4g
X19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBh
cmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7
CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50
IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRh
KCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3Np
emU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9z
MSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAg
IHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXpl
X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9f
c3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXpl
KQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsK
CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAg
ICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19wb3MyLCBfX24yKTsKICAg
ICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9f
ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwog
ICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJl
dHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAog
ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpbnQgX19y
ID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9fc2l6ZSk7CiAgICAgIGlm
ICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsK
ICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcg
PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90
eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAg
ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAg
IHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXpl
X3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlw
ZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190
eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFf
X3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxv
Yz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBf
Q2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6
ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7
CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyks
IF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19u
MSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAg
aW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9f
bGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAg
ICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9U
cmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAgICAg
ICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXop
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBl
OwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5
cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6
OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNd
ID0gX0NoYXJUKCk7CiAgICB9Cn0KIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9zdHJpbmcuaCIgMiAzCiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3RyaW5n
IiAyIDMKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL2J1ZmZlci5oIiAyCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L3ZlY3RvciIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9y
LmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5o
IiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAx
IDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwoj
IDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgog
IHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9j
YXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAog
IF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
ZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRf
YXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhy
b3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDMzICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF92ZWN0b3IuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
aXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0
aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9m
dW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRf
ZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBl
aWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
b3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVf
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMg
MzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM3
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3Rh
dGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAg
ICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0
YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3Rl
ZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9NX3N0YXJ0Owog
IF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9UcCogX01fYWxs
b2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRl
KF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7
IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9Cn07CgoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxs
b2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAg
ICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0
IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0
IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5k
X29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBf
TV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwog
IF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjph
bGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19u
KQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMg
X1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlw
ZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAg
ICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFs
bG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkg
OiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9f
bik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01f
c3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0
YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJv
dGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4KewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHJpdmF0ZToKICB0eXBlZGVmIF9W
ZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxs
b2M+IHZlY3Rvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25z
dF9wb2ludGVyOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5
cGU+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwg
dmVjdG9yX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJl
bmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVk
ZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7
CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl
OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6
Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy
YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8
aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9N
X2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpf
TV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNlOjpfTV9lbmRf
b2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19w
b3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBf
X3Bvc2l0aW9uKTsKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9y
IChfTV9zdGFydCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAgICB7IHJldHVy
biBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4g
aXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBjb25zdF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJi
ZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IoZW5kKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJu
IHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl
bmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsg
fQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkg
LSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBz
aXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25z
dAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdl
KSAtIGJlZ2luKCkpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBiZWdpbigp
ID09IGVuZCgpOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsgcmV0
dXJuICooYmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXpl
X3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CgogIHZvaWQgX01f
cmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgaWYgKF9fbiA+PSB0aGlzLT5z
aXplKCkpCiAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsKICB9CgogIHJlZmVy
ZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4g
KCp0aGlzKVtfX25dOyB9CiAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0
CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgZXhw
bGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAm
IF9fdmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf
dHlwZSgpKQogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs
aXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9y
KHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsg
X01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9
CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9f
eC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlh
bGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg
X01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdl
ciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9zdGFydCA9IF9N
X2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwog
ICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1
ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0
aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX3JhbmdlX2lu
aXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK
ICB9CgogIH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0KCiAgdmVj
dG9yPF9UcCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f
eCk7CiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0eSgpIDwg
X19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBw
b2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmlu
aXNoKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxv
Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0
YXJ0ID0gX190bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6ZTsKICAgICAg
X01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIH0KICB9CgoKCgoKCiAgdm9p
ZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2ln
bihfX24sIF9fdmFsKTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29u
c3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk
IGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdy
YWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0lu
dGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNz
aWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQog
ICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IF9N
X2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp
KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25f
YXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19m
aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndh
cmRfaXRlcmF0b3JfdGFnKTsKCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7
IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQog
IHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgY29uc3RfcmVmZXJl
bmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCiAgdm9pZCBwdXNoX2Jh
Y2soY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3Jh
Z2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7
CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZv
aWQgcHVzaF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkg
ewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAg
ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOwogIH0KICB2b2lkIHN3YXAodmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194KSB7CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFy
dCk7CiAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgIHN0ZDo6c3dh
cChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CgogIGl0ZXJh
dG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgewogICAgc2l6
ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBf
TV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVj
dChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAg
ICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pLCBfX3gpOwogICAgcmV0dXJuIGJl
Z2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7
CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmlu
aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAg
Y29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQog
ICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJldHVybiBiZWdp
bigpICsgX19uOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg
aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRl
cmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9z
LCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
SW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVn
ZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVf
dHlwZSkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkg
X192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2lu
c2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3Ms
IF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB2
b2lkIGluc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194
KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogIHZvaWQgX01fZmls
bF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7
CgogIHZvaWQgcG9wX2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmlu
aXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYg
KF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQo
KSwgX19wb3NpdGlvbik7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsK
ICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2Zp
cnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9fbGFzdCwgZW5k
KCksIF9fZmlyc3QpKTsKICAgIGRlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBf
TV9maW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cgog
IHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAg
aWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXpl
LCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUo
KSwgX194KTsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXpl
KF9fbmV3X3NpemUsIF9UcCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVu
ZCgpKTsgfQoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K
ICBwb2ludGVyIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBwb2ludGVyIF9fcmVzdWx0ID0g
X01fYWxsb2NhdGUoX19uKTsKICAgICAgICAgICAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6
ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAg
fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9p
bml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsK
ICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24p
OwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3Ig
X19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0
ZXJhdG9yX3RhZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6
ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVy
YXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBf
QWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2lu
KCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2lu
KCksIF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3RvcjxfVHAsIF9BbGxv
Yz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+
JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9
PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
Cm9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rvcjxf
VHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCB2ZWN0b3I8
X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNv
bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+Jgp2
ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf
X3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5cGUgX194bGVuID0g
X194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAgICAgIHBvaW50ZXIg
X190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5k
KCkpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9j
YXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3Rh
cnQgPSBfX3RtcDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsK
ICAgIH0KICAgIGVsc2UgaWYgKHNpemUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19p
KGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSkpOwogICAgICBkZXN0cm95KF9f
aSwgZW5kKCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5i
ZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3gu
YmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01fZmlu
aXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Zp
bGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQp7CiAgaWYgKF9f
biA+IGNhcGFjaXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3Zh
bCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNlIGlm
IChfX24gPiBzaXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9N
X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBf
X3ZhbCk7CiAgfQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwg
ZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yIF9f
Y3VyKGJlZ2luKCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5k
KCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0
KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0Fs
bG9jPjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZykgewogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
LCBfX2xlbik7CgogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIHBvaW50ZXIgX190bXAo
X01fYWxsb2NhdGVfYW5kX2NvcHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCkpOwogICAgZGVzdHJv
eShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2Vu
ZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3RtcDsKICAgIF9NX2Vu
ZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsKICB9CiAgZWxzZSBp
ZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkp
OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICB9CiAgZWxzZSB7CiAgICBf
Rm9yd2FyZEl0ZXIgX19taWQgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsK
ICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2lu
c2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX01f
ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAq
KF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5ID0gX194
OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwg
aXRlcmF0b3IoX01fZmluaXNoLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5OwogIH0K
ICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29u
c3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAx
OwogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgIGl0ZXJh
dG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgICAgICAgICAgewogICAgICBfX25l
d19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQp
OwogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAgKytfX25l
d19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0
aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgZGVzdHJveShiZWdpbigpLCBl
bmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N
X3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgX01fZmluaXNo
ID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3Rh
cnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bv
c2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgY29u
c3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAg
IGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksCiAgICAg
ICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0g
X1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXpl
KCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19v
bGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4p
OwogICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgICAgICAgICAgICB7
CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFy
dCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19fbmV3
X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRp
b24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwog
ICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7
CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNo
OwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46
Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBp
ZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9m
aW5pc2gpID49IF9fbikgewogICAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICAgIGNvbnN0IHNp
emVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRv
ciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24p
IHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gs
IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3
YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAg
ICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgfQog
ICAgICBlbHNlIHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAt
IF9fZWxlbXNfYWZ0ZXIsIF9feF9jb3B5KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19l
bGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRf
ZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwog
ICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfX3hfY29weSk7CiAgICAgIH0K
ICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUo
KTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9z
aXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xlbikp
OwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICAgICAgICAg
ICAgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShiZWdpbigpLCBf
X3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs
aXplZF9maWxsX24oX19uZXdfZmluaXNoLCBfX24sIF9feCk7CiAgICAgICAgX19uZXdfZmluaXNo
CiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19uZXdf
ZmluaXNoKTsKICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNo
KTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5p
c2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3
X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQKdmVjdG9y
PF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewog
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgX19wb3MgPSBpbnNl
cnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lk
CnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgc2l6ZV90eXBl
IF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBpZiAoc2l6
ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0
ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+
IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2Zp
bmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlf
YmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwog
ICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgICBl
bHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBh
ZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHko
X19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19l
bGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRf
ZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwog
ICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19u
KTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAg
aXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgICAgICAgICAgIHsKICAg
ICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0aW9uLCBf
X25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAg
ICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCks
IF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9N
X2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl
IC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAg
X01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0KIyAzOCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9idmVjdG9yLmgiIDEgMwojIDM0ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnN0
YXRpYyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNpemVvZih1bnNpZ25lZCBpbnQpKTsK
CnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CiAgdW5zaWduZWQgaW50KiBfTV9wOwogIHVuc2lnbmVk
IGludCBfTV9tYXNrOwogIF9CaXRfcmVmZXJlbmNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25l
ZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9C
aXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICEoISgqX01fcCAmIF9NX21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNl
JiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsK
ICAgIGVsc2UgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRf
cmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0
dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVm
ZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7
IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAq
X01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9f
eCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9IF9feDsKICBfX3ggPSBfX3k7
CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcjxib29sLCBwdHJkaWZmX3Q+CnsKICB1bnNpZ25lZCBpbnQqIF9N
X3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2ln
bmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNl
dChfX3kpIHt9CgogIHZvaWQgX01fYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBf
X1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9
CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsK
ICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9
CgogIHZvaWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19u
ID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19u
ID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9
ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxz
ZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgfQoKICBib29sIG9wZXJh
dG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBf
TV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29s
IG9wZXJhdG9yPChjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0
dXJuIF9NX3AgPCBfX2kuX01fcCB8fCAoX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBf
X2kuX01fb2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3Jf
YmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29s
IG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0
dXJuIF9faSA8ICp0aGlzOwogIH0KICBib29sIG9wZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRv
cl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9v
bCBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICBy
ZXR1cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9OwoKaW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0o
Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYg
X195KSB7CiAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3gu
X01fb2Zmc2V0IC0gX195Ll9NX29mZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVi
bGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVu
Y2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRl
cmF0b3IgaXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgw
LCAwKSB7fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBf
X3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQp
OyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBf
X3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBp
dGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0
aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAg
PSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVy
YXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2Vf
dHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0
ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRv
ciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Ig
b3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1w
ID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJh
dG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsK
CmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0
X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0
X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJl
ZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3Qg
Ym9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7
fQogIF9CaXRfY29uc3RfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBf
X3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0
ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNl
KF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3Iq
KCkgY29uc3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNl
dCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkg
ewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAg
IHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBf
TV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3Bl
cmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9i
dW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJh
dG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUg
X19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9p
dGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3Rf
aXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNv
bnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBj
b25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9
CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAg
cmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9y
Cm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gp
IHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwg
Ym9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0
eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRv
cl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxs
b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3Jf
YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9j
YXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkg
e30KCnByb3RlY3RlZDoKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQog
ICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQg
LSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9z
dGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9N
X3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug
LSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQg
aW50LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2Nh
dG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7
CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0FsbG9jYXRvcj4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7
CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRv
cj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3Jf
dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoK
ICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3Rh
cnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46
Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgdW5zaWduZWQgaW50KiBfTV9i
aXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgo
X19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl
KCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxvY190eXBlOjpkZWFsbG9jYXRl
KF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0Owog
IF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3Jh
Z2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBw
dWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4Kewog
IHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgog
ICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9N
X2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF92ZWN0b3IuaCIgMSAzCiMgMzE4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2J2ZWN0b3IuaCIgMiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPHR5cGVuYW1l
IF9BbGxvYz4KICBjbGFzcyB2ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1YmxpYyBfQnZlY3Rvcl9i
YXNlPF9BbGxvYz4KICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAg
ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVk
ZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2lu
dGVyOwogICAgdHlwZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVyOwoKICAgIHR5cGVkZWYg
X0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0
b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8
aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQnZlY3Rv
cl9iYXNlPF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAgYWxsb2Nh
dG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9CdmVjdG9yX2Jh
c2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigpOwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICB1c2lu
ZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2JpdF9hbGxvYzsKICAgIHVzaW5nIF9CdmVjdG9y
X2Jhc2U8X0FsbG9jPjo6X01fZGVhbGxvY2F0ZTsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0Fs
bG9jPjo6X01fc3RhcnQ7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2Zpbmlz
aDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZW5kX29mX3N0b3JhZ2U7Cgog
IHByb3RlY3RlZDoKICAgIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUgX19uKSB7CiAgICAg
IHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gX19xICsgKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICBf
TV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsg
ZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICB9CiAgICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0
b3IgX19wb3NpdGlvbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9N
X2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9m
aW5pc2gsIF9NX2ZpbmlzaCArIDEpOwogICAgICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICAg
ICsrX01fZmluaXNoOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xl
biA9IHNpemUoKSA/IDIgKiBzaXplKCkgOiBfX1dPUkRfQklUOwogICAgICAgIHVuc2lnbmVkIGlu
dCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5
KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgICpfX2krKyA9
IF9feDsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwog
ICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSAr
IChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0g
aXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoKTsKICAg
ICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSAwOwog
ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgcHVzaF9i
YWNrKCpfX2ZpcnN0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAg
ICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBf
X3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZykgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsK
ICAgICAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICAgICsrX19wb3M7
CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAg
IHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAg
ICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAg
ICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgICAgIGlmIChjYXBhY2l0
eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9u
LCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgICAgY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICAgICAgX01fZmluaXNoICs9IGRp
ZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNp
emVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgICB1bnNp
Z25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgICBpdGVyYXRvciBf
X2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAg
ICAgX19pID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9faSk7CiAgICAgICAgICBfTV9maW5pc2gg
PSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZSgp
OwogICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklU
IC0gMSkvX19XT1JEX0JJVDsKICAgICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsK
ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgcHVibGljOgogICAgaXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBfTV9zdGFydDsgfQogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBfTV9zdGFydDsgfQogICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9
CiAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAg
ICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5k
KCkpOyB9CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKICAgICAg
cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogICAgfQogICAgcmV2ZXJzZV9p
dGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogICAg
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgICByZXR1cm4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICAgIH0KCiAgICBzaXplX3R5cGUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgICBzaXplX3R5cGUg
bWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgICBzaXplX3R5cGUg
Y2FwYWNpdHkoKSBjb25zdCB7CiAgICAgIHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3Io
X01fZW5kX29mX3N0b3JhZ2UsIDApIC0gYmVnaW4oKSk7CiAgICB9CiAgICBib29sIGVtcHR5KCkg
Y29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICAgIHJlZmVyZW5jZSBvcGVyYXRv
cltdKHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2Vf
dHlwZShfX24pKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f
bikgY29uc3QKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikp
OyB9CgogICAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICAg
IGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfcmFuZ2VfZXJyb3IoInZl
Y3Rvcjxib29sPiIpOwogICAgfQoKICAgIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAg
ICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KICAgIGNvbnN0
X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgICB7IF9NX3JhbmdlX2NoZWNr
KF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+KF9fYSkge30KCiAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3Zh
bHVlLAogICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf
dHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIF9N
X2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3Rv
cmFnZSwgX192YWx1ZSA/IH4wIDogMCk7CiAgICB9CgogICAgZXhwbGljaXQgdmVjdG9yKHNpemVf
dHlwZSBfX24pCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90eXBlKCkp
CiAgICB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9w
LCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7CiAgICB9CgogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYg
X194KSA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7CiAgICAg
IF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5l
bmQoKSwgX01fc3RhcnQpOwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgog
ICAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194
LCBfX3RydWVfdHlwZSkgewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01f
c3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICB9CgogICAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2Rp
c3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5p
dGlhbGl6ZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZlY3Rv
cihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAg
OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAg
X01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg
IH0KCiAgICB+dmVjdG9yKCkgeyB9CgogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9y
JiBfX3gpIHsKICAgICAgaWYgKCZfX3ggPT0gdGhpcykgcmV0dXJuICp0aGlzOwogICAgICBpZiAo
X194LnNpemUoKSA+IGNhcGFjaXR5KCkpIHsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAg
ICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgfQogICAgICBjb3B5KF9feC5iZWdp
bigpLCBfX3guZW5kKCksIGJlZ2luKCkpOwogICAgICBfTV9maW5pc2ggPSBiZWdpbigpICsgZGlm
ZmVyZW5jZV90eXBlKF9feC5zaXplKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoK
CiAgICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7CiAgICAgIGlm
IChfX24gPiBzaXplKCkpIHsKICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9z
dG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgp
LCBfX3gpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24s
IGVuZCgpKTsKICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBf
X3ggPyB+MCA6IDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwg
Ym9vbCBfX3gpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3gpOyB9CgogICAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu
dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9hc3Np
Z25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdGVt
cGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVn
ZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgIHsgX01fZmlsbF9hc3Np
Z24oKHNpemVfdCkgX19uLCAoYm9vbCkgX192YWwpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICAgIHsgX01fYXNzaWduX2F1eChf
X2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogICAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgaXRlcmF0b3IgX19jdXIgPSBiZWdp
bigpOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyAr
K19fY3VyLCArK19fZmlyc3QpCiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogICAgICBlbHNl
CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICAgIHRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbGVu
ID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgICAgIGlmIChf
X2xlbiA8IHNpemUoKSkKICAgICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4o
KSksIGVuZCgpKTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9
IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgICAgICBjb3B5KF9f
Zmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xh
c3QpOwogICAgICB9CiAgICB9CgogICAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAg
ICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N
X2JpdF9hbGxvYyhfX24pOwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoYmVnaW4oKSwgZW5kKCks
IGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9z
dGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3Eg
KyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIH0KICAgIH0KCiAgICBy
ZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgY29uc3RfcmVmZXJlbmNl
IGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIHJlZmVyZW5jZSBiYWNrKCkg
eyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0
IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogICAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsK
ICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAgICpf
TV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoZW5kKCks
IF9feCk7CiAgICB9CiAgICB2b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9feCkgewog
ICAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgIHN0ZDo6c3dhcChf
TV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3Jh
Z2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgICB9CiAgICBpdGVyYXRvciBpbnNlcnQoaXRl
cmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgZGlmZmVyZW5jZV90
eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgICBpZiAoX01fZmluaXNoLl9NX3Ag
IT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgICAqX01f
ZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRp
b24sIF9feCk7CiAgICAgIHJldHVybiBiZWdpbigpICsgX19uOwogICAgfQoKCgogICAgdGVtcGxh
dGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3Ig
X19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX190cnVlX3R5cGUpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194
KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9N
X2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbnNlcnRfcmFu
Z2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNl
cnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01f
aW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkp
OwogICAgfQoKICAgIHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6
ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICAg
IGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgIGNvcHlfYmFja3dhcmQo
X19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAg
ICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwg
X194KTsKICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0K
ICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUo
KSwgX19uKTsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7
CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRv
cihfX3EsIDApKTsKICAgICAgICBmaWxsX24oX19pLCBfX24sIF9feCk7CiAgICAgICAgX01fZmlu
aXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikp
OwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9f
cSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0
ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIF9NX2ZpbGxf
aW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsKICAgIH0KCiAgICB2b2lkIHBvcF9iYWNrKCkg
eyAtLV9NX2ZpbmlzaDsgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg
ewogICAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgICAgY29weShfX3Bvc2l0
aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgICAgIC0tX01fZmluaXNoOwogICAgICBy
ZXR1cm4gX19wb3NpdGlvbjsKICAgIH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmly
c3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFzdCwgZW5k
KCksIF9fZmlyc3QpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KICAgIHZvaWQgcmVzaXpl
KHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBpZiAoX19u
ZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBl
KF9fbmV3X3NpemUpLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9f
bmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgICB9CiAgICB2b2lkIGZsaXAoKSB7CiAgICAgIGZv
ciAodW5zaWduZWQgaW50KiBfX3AgPSBfTV9zdGFydC5fTV9wOyBfX3AgIT0gX01fZW5kX29mX3N0
b3JhZ2U7ICsrX19wKQogICAgICAgICpfX3AgPSB+Kl9fcDsKICAgIH0KCiAgICB2b2lkIGNsZWFy
KCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KICB9OwoKCnR5cGVkZWYgdmVjdG9yPGJvb2ws
IGFsbG9jPiBiaXRfdmVjdG9yOwoKfQojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My92ZWN0
b3IiIDIgMwojIDI4ICIuLi8uLi9hcnRzL21jb3AvYnVmZmVyLmgiIDIKIyAzOSAiLi4vLi4vYXJ0
cy9tY29wL2J1ZmZlci5oIgpuYW1lc3BhY2UgQXJ0cyB7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hh
ciBtY29wYnl0ZTsKCgpjbGFzcyBCdWZmZXJQcml2YXRlOwoKY2xhc3MgQnVmZmVyIHsKcHJpdmF0
ZToKICAgICAgICBsb25nIHJwb3M7CiAgICAgICAgYm9vbCBfcmVhZEVycm9yOwogICAgICAgIHN0
ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IGNvbnRlbnRzOwoKICAgICAgICBCdWZmZXJQcml2YXRl
ICpkOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZnJvbUhleE5pYmJsZShjaGFyIGMpOwoKcHVibGlj
OgogICAgICAgIEJ1ZmZlcigpOwogICAgICAgIH5CdWZmZXIoKTsKCiAgICAgICAgYm9vbCByZWFk
RXJyb3IoKTsKICAgICAgICB2b2lkIHdyaXRlQm9vbChib29sIGIpOwogICAgICAgIHZvaWQgd3Jp
dGVCb29sU2VxKGNvbnN0IHN0ZDo6dmVjdG9yPGJvb2w+JiBzZXEpOwogICAgICAgIHZvaWQgd3Jp
dGVCeXRlKG1jb3BieXRlIGIpOwogICAgICAgIHZvaWQgd3JpdGVCeXRlU2VxKGNvbnN0IHN0ZDo6
dmVjdG9yPG1jb3BieXRlPiYgc2VxKTsKICAgICAgICB2b2lkIHdyaXRlTG9uZyhsb25nIGwpOwog
ICAgICAgIHZvaWQgd3JpdGVMb25nU2VxKGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBzZXEpOwog
ICAgICAgIHZvaWQgd3JpdGVGbG9hdChmbG9hdCBmKTsKICAgICAgICB2b2lkIHdyaXRlRmxvYXRT
ZXEoY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQ+JiBzZXEpOwogICAgICAgIHZvaWQgd3JpdGVTdHJp
bmcoY29uc3Qgc3RkOjpzdHJpbmcmIHMpOwogICAgICAgIHZvaWQgd3JpdGVTdHJpbmdTZXEoY29u
c3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzZXEpOwoKICAgICAgICBsb25nIHNpemUoKTsK
ICAgICAgICBsb25nIHJlbWFpbmluZygpOwogICAgICAgIHZvaWQgKnJlYWQobG9uZyBsKTsKICAg
ICAgICB2b2lkIHJlYWQoc3RkOjp2ZWN0b3I8bWNvcGJ5dGU+JiByYXcsIGxvbmcgbCk7CiAgICAg
ICAgdm9pZCAqcGVlayhsb25nIGwpOwogICAgICAgIHZvaWQgc2tpcChsb25nIGwpOwogICAgICAg
IHZvaWQgcmV3aW5kKCk7CgogICAgICAgIHZvaWQgd3JpdGUodm9pZCAqZGF0YSwgbG9uZyBsKTsK
ICAgICAgICB2b2lkIHdyaXRlKGNvbnN0IHN0ZDo6dmVjdG9yPG1jb3BieXRlPiYgcmF3KTsKCiAg
ICAgICAgYm9vbCByZWFkQm9vbCgpOwogICAgICAgIHZvaWQgcmVhZEJvb2xTZXEoc3RkOjp2ZWN0
b3I8Ym9vbD4mIHJlc3VsdCk7CiAgICAgICAgbWNvcGJ5dGUgcmVhZEJ5dGUoKTsKICAgICAgICB2
b2lkIHJlYWRCeXRlU2VxKHN0ZDo6dmVjdG9yPG1jb3BieXRlPiYgcmVzdWx0KTsKICAgICAgICBs
b25nIHJlYWRMb25nKCk7CiAgICAgICAgdm9pZCByZWFkTG9uZ1NlcShzdGQ6OnZlY3Rvcjxsb25n
PiYgcmVzdWx0KTsKICAgICAgICBmbG9hdCByZWFkRmxvYXQoKTsKICAgICAgICB2b2lkIHJlYWRG
bG9hdFNlcShzdGQ6OnZlY3RvcjxmbG9hdD4mIHJlc3VsdCk7CiAgICAgICAgdm9pZCByZWFkU3Ry
aW5nKHN0ZDo6c3RyaW5nJiByZXN1bHQpOwogICAgICAgIHZvaWQgcmVhZFN0cmluZ1NlcShzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHJlc3VsdCk7CgogICAgICAgIHZvaWQgcGF0Y2hMZW5ndGgo
KTsKICAgICAgICB2b2lkIHBhdGNoTG9uZyhsb25nIHBvc2l0aW9uLCBsb25nIHZhbHVlKTsKCiAg
ICAgICAgc3RkOjpzdHJpbmcgdG9TdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAg
ICAgIGJvb2wgZnJvbVN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgZGF0YSwgY29uc3Qgc3RkOjpz
dHJpbmcmIG5hbWUpOwp9OwoKfTsKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL2NvbW1vbi5oIiAyCiMg
MSAiLi4vLi4vYXJ0cy9tY29wL3R5cGUuaCIgMQojIDI2ICIuLi8uLi9hcnRzL21jb3AvdHlwZS5o
IgojIDEgIi4uLy4uL2FydHMvbWNvcC9idWZmZXIuaCIgMQojIDI3ICIuLi8uLi9hcnRzL21jb3Av
dHlwZS5oIiAyCgoKCgoKCgpuYW1lc3BhY2UgQXJ0cyB7CgoKCgpjbGFzcyBUeXBlIHsKcHJpdmF0
ZToKICAgICAgICBzdGF0aWMgbG9uZyBfc3RhdGljVHlwZUNvdW50OwoKcHVibGljOgogICAgICAg
IGlubGluZSBzdGF0aWMgbG9uZyBfdHlwZUNvdW50KCkgeyByZXR1cm4gX3N0YXRpY1R5cGVDb3Vu
dDsgfQoKCgogICAgICAgIGlubGluZSBUeXBlKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBf
c3RhdGljVHlwZUNvdW50Kys7CiAgICAgICAgfQoKCgoKICAgICAgICBpbmxpbmUgVHlwZShjb25z
dCBUeXBlJikKICAgICAgICB7CiAgICAgICAgICAgICAgICBfc3RhdGljVHlwZUNvdW50Kys7CiAg
ICAgICAgfQoKCgoKICAgICAgICB2aXJ0dWFsIH5UeXBlKCk7CiMgNzUgIi4uLy4uL2FydHMvbWNv
cC90eXBlLmgiCiAgICAgICAgdmlydHVhbCB2b2lkIHJlYWRUeXBlKEJ1ZmZlciYgc3RyZWFtKSA9
IDA7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVR5cGUoQnVmZmVyJiBzdHJlYW0pIGNv
bnN0ID0gMDsKfTsKCn07CiMgMjggIi4uLy4uL2FydHMvbWNvcC9jb21tb24uaCIgMgojIDEgIi4u
Ly4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9tY29wL2Rpc3Bh
dGNoZXIuaCIKIyAxICIuLi8uLi9hcnRzL21jb3AvY29tbW9uLmgiIDEKIyAyNyAiLi4vLi4vYXJ0
cy9tY29wL2Rpc3BhdGNoZXIuaCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9wb29sLmgiIDEKIyA0
NSAiLi4vLi4vYXJ0cy9tY29wL3Bvb2wuaCIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L3N0YWNrIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdGFjayIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMSAzCiMgMzEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMwoKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDMzICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0YWNrLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX3N0YWNrLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfZGVxdWUuaCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfZGVxdWUuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2RlcXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9kZXF1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMiAzCiMgNzIgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKaW5saW5lIHNp
emVfdCBfX2RlcXVlX2J1Zl9zaXplKHNpemVfdCBfX3NpemUpIHsKICByZXR1cm4gX19zaXplIDwg
NTEyID8gc2l6ZV90KDUxMiAvIF9fc2l6ZSkgOiBzaXplX3QoMSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfRGVxdWVfaXRlcmF0b3Igewog
IHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gaXRlcmF0b3I7CiAgdHlw
ZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiBjb25zdF9p
dGVyYXRvcjsKICBzdGF0aWMgc2l6ZV90IF9TX2J1ZmZlcl9zaXplKCkgeyByZXR1cm4gX19kZXF1
ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7IH0KCiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBz
aXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0
eXBlZGVmIF9UcCoqIF9NYXBfcG9pbnRlcjsKCiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3IgX1Nl
bGY7CgogIF9UcCogX01fY3VyOwogIF9UcCogX01fZmlyc3Q7CiAgX1RwKiBfTV9sYXN0OwogIF9N
YXBfcG9pbnRlciBfTV9ub2RlOwoKICBfRGVxdWVfaXRlcmF0b3IoX1RwKiBfX3gsIF9NYXBfcG9p
bnRlciBfX3kpCiAgICA6IF9NX2N1cihfX3gpLCBfTV9maXJzdCgqX195KSwKICAgICAgX01fbGFz
dCgqX195ICsgX1NfYnVmZmVyX3NpemUoKSksIF9NX25vZGUoX195KSB7fQogIF9EZXF1ZV9pdGVy
YXRvcigpIDogX01fY3VyKDApLCBfTV9maXJzdCgwKSwgX01fbGFzdCgwKSwgX01fbm9kZSgwKSB7
fQogIF9EZXF1ZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KQogICAgOiBfTV9jdXIoX194
Ll9NX2N1ciksIF9NX2ZpcnN0KF9feC5fTV9maXJzdCksCiAgICAgIF9NX2xhc3QoX194Ll9NX2xh
c3QpLCBfTV9ub2RlKF9feC5fTV9ub2RlKSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gKl9NX2N1cjsgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuIF9NX2N1cjsgfQoKICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0IF9TZWxmJiBf
X3gpIGNvbnN0IHsKICAgIHJldHVybiBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkg
KiAoX01fbm9kZSAtIF9feC5fTV9ub2RlIC0gMSkgKwogICAgICAoX01fY3VyIC0gX01fZmlyc3Qp
ICsgKF9feC5fTV9sYXN0IC0gX194Ll9NX2N1cik7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3IrKygp
IHsKICAgICsrX01fY3VyOwogICAgaWYgKF9NX2N1ciA9PSBfTV9sYXN0KSB7CiAgICAgIF9NX3Nl
dF9ub2RlKF9NX25vZGUgKyAxKTsKICAgICAgX01fY3VyID0gX01fZmlyc3Q7CiAgICB9CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3Rt
cCA9ICp0aGlzOwogICAgKysqdGhpczsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIF9TZWxmJiBv
cGVyYXRvci0tKCkgewogICAgaWYgKF9NX2N1ciA9PSBfTV9maXJzdCkgewogICAgICBfTV9zZXRf
bm9kZShfTV9ub2RlIC0gMSk7CiAgICAgIF9NX2N1ciA9IF9NX2xhc3Q7CiAgICB9CiAgICAtLV9N
X2N1cjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAg
IF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLSp0aGlzOwogICAgcmV0dXJuIF9fdG1wOwogIH0K
CiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICB7CiAgICBkaWZmZXJl
bmNlX3R5cGUgX19vZmZzZXQgPSBfX24gKyAoX01fY3VyIC0gX01fZmlyc3QpOwogICAgaWYgKF9f
b2Zmc2V0ID49IDAgJiYgX19vZmZzZXQgPCBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUo
KSkpCiAgICAgIF9NX2N1ciArPSBfX247CiAgICBlbHNlIHsKICAgICAgZGlmZmVyZW5jZV90eXBl
IF9fbm9kZV9vZmZzZXQgPQogICAgICAgIF9fb2Zmc2V0ID4gMCA/IF9fb2Zmc2V0IC8gZGlmZmVy
ZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkpCiAgICAgICAgICAgICAgICAgICA6IC1kaWZmZXJl
bmNlX3R5cGUoKC1fX29mZnNldCAtIDEpIC8gX1NfYnVmZmVyX3NpemUoKSkgLSAxOwogICAgICBf
TV9zZXRfbm9kZShfTV9ub2RlICsgX19ub2RlX29mZnNldCk7CiAgICAgIF9NX2N1ciA9IF9NX2Zp
cnN0ICsKICAgICAgICAoX19vZmZzZXQgLSBfX25vZGVfb2Zmc2V0ICogZGlmZmVyZW5jZV90eXBl
KF9TX2J1ZmZlcl9zaXplKCkpKTsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIF9TZWxm
IG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogIHsKICAgIF9TZWxmIF9fdG1w
ID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19uOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9y
LT0oZGlmZmVyZW5jZV90eXBlIF9fbikgeyByZXR1cm4gKnRoaXMgKz0gLV9fbjsgfQoKICBfU2Vs
ZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgX1NlbGYgX190bXAg
PSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX247CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0
b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsg
fQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QgeyByZXR1cm4gX01f
Y3VyID09IF9feC5fTV9jdXI7IH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX1NlbGYmIF9feCkg
Y29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
X1NlbGYmIF9feCkgY29uc3QgewogICAgcmV0dXJuIChfTV9ub2RlID09IF9feC5fTV9ub2RlKSA/
CiAgICAgIChfTV9jdXIgPCBfX3guX01fY3VyKSA6IChfTV9ub2RlIDwgX194Ll9NX25vZGUpOwog
IH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfU2VsZiYgX194KSBjb25zdCB7IHJldHVybiBfX3gg
PCAqdGhpczsgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfU2VsZiYgX194KSBjb25zdCB7IHJl
dHVybiAhKF9feCA8ICp0aGlzKTsgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfU2VsZiYgX194
KSBjb25zdCB7IHJldHVybiAhKCp0aGlzIDwgX194KTsgfQoKICB2b2lkIF9NX3NldF9ub2RlKF9N
YXBfcG9pbnRlciBfX25ld19ub2RlKSB7CiAgICBfTV9ub2RlID0gX19uZXdfbm9kZTsKICAgIF9N
X2ZpcnN0ID0gKl9fbmV3X25vZGU7CiAgICBfTV9sYXN0ID0gX01fZmlyc3QgKyBkaWZmZXJlbmNl
X3R5cGUoX1NfYnVmZmVyX3NpemUoKSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9Q
dHI+Cm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBf
UmVmLCBfUHRyPiYgX194KQp7CiAgcmV0dXJuIF9feCArIF9fbjsKfQojIDIwOSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYywgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0RlcXVlX2FsbG9jX2Jhc2Ug
ewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCxfQWxsb2M+Ojph
bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgX0RlcXVlX2FsbG9j
X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fbm9kZV9hbGxvY2F0b3Io
X19hKSwgX01fbWFwX2FsbG9jYXRvcihfX2EpLAogICAgICBfTV9tYXAoMCksIF9NX21hcF9zaXpl
KDApCiAge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1Rw
KiwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NYXBfYWxsb2NhdG9yX3R5cGU7
CgogIGFsbG9jYXRvcl90eXBlIF9NX25vZGVfYWxsb2NhdG9yOwogIF9NYXBfYWxsb2NhdG9yX3R5
cGUgX01fbWFwX2FsbG9jYXRvcjsKCiAgX1RwKiBfTV9hbGxvY2F0ZV9ub2RlKCkgewogICAgcmV0
dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9U
cCkpKTsKICB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX25vZGUoX1RwKiBfX3ApIHsKICAgIF9NX25v
ZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHAp
KSk7CiAgfQogIF9UcCoqIF9NX2FsbG9jYXRlX21hcChzaXplX3QgX19uKQogICAgeyByZXR1cm4g
X01fbWFwX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX21h
cChfVHAqKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IF9NX21hcF9hbGxvY2F0b3IuZGVhbGxvY2F0
ZShfX3AsIF9fbik7IH0KCiAgX1RwKiogX01fbWFwOwogIHNpemVfdCBfTV9tYXBfc2l6ZTsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9EZXF1ZV9hbGxvY19i
YXNlPF9UcCwgX0FsbG9jLCB0cnVlPgp7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxv
Y190cmFpdHM8X1RwLF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFs
bG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlw
ZSgpOyB9CgogIF9EZXF1ZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9t
YXAoMCksIF9NX21hcF9zaXplKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X0FsbG9jX3R5cGUgX05vZGVfYWxsb2NfdHlwZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwKiwgX0FsbG9jPjo6X0FsbG9jX3R5
cGUgX01hcF9hbGxvY190eXBlOwoKICBfVHAqIF9NX2FsbG9jYXRlX25vZGUoKSB7CiAgICByZXR1
cm4gX05vZGVfYWxsb2NfdHlwZTo6YWxsb2NhdGUoX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1Rw
KSkpOwogIH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbm9kZShfVHAqIF9fcCkgewogICAgX05vZGVf
YWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkp
KTsKICB9CiAgX1RwKiogX01fYWxsb2NhdGVfbWFwKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBf
TWFwX2FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbWFw
KF9UcCoqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX01hcF9hbGxvY190eXBlOjpkZWFsbG9jYXRl
KF9fcCwgX19uKTsgfQoKICBfVHAqKiBfTV9tYXA7CiAgc2l6ZV90IF9NX21hcF9zaXplOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfRGVxdWVfYmFzZQogIDog
cHVibGljIF9EZXF1ZV9hbGxvY19iYXNlPF9UcCxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsK
cHVibGljOgogIHR5cGVkZWYgX0RlcXVlX2FsbG9jX2Jhc2U8X1RwLF9BbGxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFu
Y2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2Nh
dG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLF9U
cCYsX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLGNvbnN0IF9U
cCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CgogIF9EZXF1ZV9iYXNlKGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EsIHNpemVfdCBfX251bV9lbGVtZW50cykKICAgIDogX0Jhc2UoX19hKSwg
X01fc3RhcnQoKSwgX01fZmluaXNoKCkKICAgIHsgX01faW5pdGlhbGl6ZV9tYXAoX19udW1fZWxl
bWVudHMpOyB9CiAgX0RlcXVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDog
X0Jhc2UoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCkge30KICB+X0RlcXVlX2Jhc2UoKTsK
CnByb3RlY3RlZDoKICB2b2lkIF9NX2luaXRpYWxpemVfbWFwKHNpemVfdCk7CiAgdm9pZCBfTV9j
cmVhdGVfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCk7CiAgdm9pZCBfTV9k
ZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpOwogIGVudW0geyBf
U19pbml0aWFsX21hcF9zaXplID0gOCB9OwoKcHJvdGVjdGVkOgogIGl0ZXJhdG9yIF9NX3N0YXJ0
OwogIGl0ZXJhdG9yIF9NX2ZpbmlzaDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgpfRGVxdWVfYmFzZTxfVHAsX0FsbG9jPjo6fl9EZXF1ZV9iYXNlKCkgewogIGlmIChf
TV9tYXApIHsKICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNo
Ll9NX25vZGUgKyAxKTsKICAgIF9NX2RlYWxsb2NhdGVfbWFwKF9NX21hcCwgX01fbWFwX3NpemUp
OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCl9EZXF1ZV9i
YXNlPF9UcCxfQWxsb2M+OjpfTV9pbml0aWFsaXplX21hcChzaXplX3QgX19udW1fZWxlbWVudHMp
CnsKICBzaXplX3QgX19udW1fbm9kZXMgPQogICAgX19udW1fZWxlbWVudHMgLyBfX2RlcXVlX2J1
Zl9zaXplKHNpemVvZihfVHApKSArIDE7CgogIF9NX21hcF9zaXplID0gbWF4KChzaXplX3QpIF9T
X2luaXRpYWxfbWFwX3NpemUsIF9fbnVtX25vZGVzICsgMik7CiAgX01fbWFwID0gX01fYWxsb2Nh
dGVfbWFwKF9NX21hcF9zaXplKTsKCiAgX1RwKiogX19uc3RhcnQgPSBfTV9tYXAgKyAoX01fbWFw
X3NpemUgLSBfX251bV9ub2RlcykgLyAyOwogIF9UcCoqIF9fbmZpbmlzaCA9IF9fbnN0YXJ0ICsg
X19udW1fbm9kZXM7CgogICAgICAgICAgICB7CiAgICBfTV9jcmVhdGVfbm9kZXMoX19uc3RhcnQs
IF9fbmZpbmlzaCk7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9fbnN0YXJ0KTsKICBfTV9maW5pc2guX01f
c2V0X25vZGUoX19uZmluaXNoIC0gMSk7CiAgX01fc3RhcnQuX01fY3VyID0gX01fc3RhcnQuX01f
Zmlyc3Q7CiAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdCArCiAgICAgICAg
ICAgICAgIF9fbnVtX2VsZW1lbnRzICUgX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfRGVxdWVfYmFzZTxfVHAs
X0FsbG9jPjo6X01fY3JlYXRlX25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gp
CnsKICBfVHAqKiBfX2N1cjsKICAgICAgICAgICAgewogICAgZm9yIChfX2N1ciA9IF9fbnN0YXJ0
OyBfX2N1ciA8IF9fbmZpbmlzaDsgKytfX2N1cikKICAgICAgKl9fY3VyID0gX01fYWxsb2NhdGVf
bm9kZSgpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCl9EZXF1ZV9i
YXNlPF9UcCxfQWxsb2M+OjpfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBf
X25maW5pc2gpCnsKICBmb3IgKF9UcCoqIF9fbiA9IF9fbnN0YXJ0OyBfX24gPCBfX25maW5pc2g7
ICsrX19uKQogICAgX01fZGVhbGxvY2F0ZV9ub2RlKCpfX24pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIGRlcXVlIDogcHJvdGVj
dGVkIF9EZXF1ZV9iYXNlPF9UcCwgX0FsbG9jPiB7CgoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0eXBlZGVmIF9EZXF1ZV9iYXNlPF9U
cCwgX0FsbG9jPiBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29u
c3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNv
bnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVu
YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlw
ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsg
fQoKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIGl0ZXJhdG9yOwog
IHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoK
ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0
ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHR5cGVkZWYgcG9pbnRlciogX01hcF9wb2ludGVyOwogIHN0
YXRpYyBzaXplX3QgX1NfYnVmZmVyX3NpemUoKSB7IHJldHVybiBfX2RlcXVlX2J1Zl9zaXplKHNp
emVvZihfVHApKTsgfQoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9pbml0aWFsaXplX21h
cDsKICB1c2luZyBfQmFzZTo6X01fY3JlYXRlX25vZGVzOwogIHVzaW5nIF9CYXNlOjpfTV9kZXN0
cm95X25vZGVzOwogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZV9ub2RlOwogIHVzaW5nIF9CYXNl
OjpfTV9kZWFsbG9jYXRlX25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlX21hcDsKICB1
c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZV9tYXA7CgogIHVzaW5nIF9CYXNlOjpfTV9tYXA7CiAg
dXNpbmcgX0Jhc2U6Ol9NX21hcF9zaXplOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFydDsKICB1c2lu
ZyBfQmFzZTo6X01fZmluaXNoOwoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g
X01fc3RhcnQ7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0
b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihfTV9maW5pc2gpOyB9CiAgcmV2
ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihfTV9zdGFydCk7
IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihfTV9z
dGFydCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKICAgIHsgcmV0
dXJuIF9NX3N0YXJ0W2RpZmZlcmVuY2VfdHlwZShfX24pXTsgfQogIGNvbnN0X3JlZmVyZW5jZSBv
cGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IHJldHVybiBfTV9zdGFydFtkaWZm
ZXJlbmNlX3R5cGUoX19uKV07IH0KCiAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19u
KSBjb25zdCB7CiAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgX190aHJvd19yYW5n
ZV9lcnJvcigiZGVxdWUiKTsKICB9CgogIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAg
eyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgY29uc3RfcmVm
ZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7
IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKl9N
X3N0YXJ0OyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2Zp
bmlzaDsKICAgIC0tX190bXA7CiAgICByZXR1cm4gKl9fdG1wOwogIH0KICBjb25zdF9yZWZlcmVu
Y2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqX01fc3RhcnQ7IH0KICBjb25zdF9yZWZlcmVuY2Ug
YmFjaygpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX01fZmluaXNoOwogICAg
LS1fX3RtcDsKICAgIHJldHVybiAqX190bXA7CiAgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIF9NX2ZpbmlzaCAtIF9NX3N0YXJ0OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkg
Y29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJl
dHVybiBfTV9maW5pc2ggPT0gX01fc3RhcnQ7IH0KCnB1YmxpYzoKICBleHBsaWNpdCBkZXF1ZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2Uo
X19hLCAwKSB7fQogIGRlcXVlKGNvbnN0IGRlcXVlJiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxv
Y2F0b3IoKSwgX194LnNpemUoKSkKICAgIHsgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigp
LCBfX3guZW5kKCksIF9NX3N0YXJ0KTsgfQogIGRlcXVlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZh
bHVlX3R5cGUmIF9fdmFsdWUsCiAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hLCBfX24pCiAgICB7IF9NX2ZpbGxfaW5pdGlhbGl6
ZShfX3ZhbHVlKTsgfQogIGV4cGxpY2l0IGRlcXVlKHNpemVfdHlwZSBfX24pIDogX0Jhc2UoYWxs
b2NhdG9yX3R5cGUoKSwgX19uKQogICAgeyBfTV9maWxsX2luaXRpYWxpemUodmFsdWVfdHlwZSgp
KTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGRlcXVlKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu
dGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRl
Z3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRp
YWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7
CiAgICBfTV9pbml0aWFsaXplX21hcChfX24pOwogICAgX01fZmlsbF9pbml0aWFsaXplKF9feCk7
CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2luaXRpYWxpemVf
ZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFs
aXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoK
ICB+ZGVxdWUoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0KCiAgZGVxdWUmIG9w
ZXJhdG9yPSAoY29uc3QgZGVxdWUmIF9feCkgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0g
c2l6ZSgpOwogICAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgICBpZiAoX19sZW4gPj0gX194LnNp
emUoKSkKICAgICAgICBlcmFzZShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0
KSwgX01fZmluaXNoKTsKICAgICAgZWxzZSB7CiAgICAgICAgY29uc3RfaXRlcmF0b3IgX19taWQg
PSBfX3guYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX2xlbik7CiAgICAgICAgY29weShfX3gu
YmVnaW4oKSwgX19taWQsIF9NX3N0YXJ0KTsKICAgICAgICBpbnNlcnQoX01fZmluaXNoLCBfX21p
ZCwgX194LmVuZCgpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdm9p
ZCBzd2FwKGRlcXVlJiBfX3gpIHsKICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0
KTsKICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgc3RkOjpzd2Fw
KF9NX21hcCwgX194Ll9NX21hcCk7CiAgICBzdGQ6OnN3YXAoX01fbWFwX3NpemUsIF9feC5fTV9t
YXBfc2l6ZSk7CiAgfQoKcHVibGljOgoKCgoKCiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5
cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICAg
IGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBz
aXplKCksIF9fdmFsKTsKICAgIH0KICAgIGVsc2UgewogICAgICBlcmFzZShiZWdpbigpICsgX19u
LCBlbmQoKSk7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIH0KICB9Cgog
IHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsKICAgIF9NX2Zp
bGxfYXNzaWduKF9fbiwgX192YWwpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRv
cj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwg
X19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKcHJpdmF0ZToKCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIg
X192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24s
IChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAg
X01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNz
aWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgIGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogICAgaWYgKF9fbGVuID4gc2l6ZSgpKSB7CiAg
ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlk
LCBzaXplKCkpOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgaW5z
ZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgIH0KICAgIGVsc2UKICAgICAgZXJhc2UoY29w
eShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgfQoKcHVibGljOgoKICB2b2lk
IHB1c2hfYmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3QpIHsKICAgIGlmIChfTV9maW5pc2guX01f
Y3VyICE9IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNo
Ll9NX2N1ciwgX190KTsKICAgICAgKytfTV9maW5pc2guX01fY3VyOwogICAgfQogICAgZWxzZQog
ICAgICBfTV9wdXNoX2JhY2tfYXV4KF9fdCk7CiAgfQoKICB2b2lkIHB1c2hfYmFjaygpIHsKICAg
IGlmIChfTV9maW5pc2guX01fY3VyICE9IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkgewogICAgICBj
b25zdHJ1Y3QoX01fZmluaXNoLl9NX2N1cik7CiAgICAgICsrX01fZmluaXNoLl9NX2N1cjsKICAg
IH0KICAgIGVsc2UKICAgICAgX01fcHVzaF9iYWNrX2F1eCgpOwogIH0KCiAgdm9pZCBwdXNoX2Zy
b250KGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX2N1ciAhPSBf
TV9zdGFydC5fTV9maXJzdCkgewogICAgICBjb25zdHJ1Y3QoX01fc3RhcnQuX01fY3VyIC0gMSwg
X190KTsKICAgICAgLS1fTV9zdGFydC5fTV9jdXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1
c2hfZnJvbnRfYXV4KF9fdCk7CiAgfQoKICB2b2lkIHB1c2hfZnJvbnQoKSB7CiAgICBpZiAoX01f
c3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2ZpcnN0KSB7CiAgICAgIGNvbnN0cnVjdChfTV9z
dGFydC5fTV9jdXIgLSAxKTsKICAgICAgLS1fTV9zdGFydC5fTV9jdXI7CiAgICB9CiAgICBlbHNl
CiAgICAgIF9NX3B1c2hfZnJvbnRfYXV4KCk7CiAgfQoKCiAgdm9pZCBwb3BfYmFjaygpIHsKICAg
IGlmIChfTV9maW5pc2guX01fY3VyICE9IF9NX2ZpbmlzaC5fTV9maXJzdCkgewogICAgICAtLV9N
X2ZpbmlzaC5fTV9jdXI7CiAgICAgIGRlc3Ryb3koX01fZmluaXNoLl9NX2N1cik7CiAgICB9CiAg
ICBlbHNlCiAgICAgIF9NX3BvcF9iYWNrX2F1eCgpOwogIH0KCiAgdm9pZCBwb3BfZnJvbnQoKSB7
CiAgICBpZiAoX01fc3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2xhc3QgLSAxKSB7CiAgICAg
IGRlc3Ryb3koX01fc3RhcnQuX01fY3VyKTsKICAgICAgKytfTV9zdGFydC5fTV9jdXI7CiAgICB9
CiAgICBlbHNlCiAgICAgIF9NX3BvcF9mcm9udF9hdXgoKTsKICB9CgpwdWJsaWM6CgogIGl0ZXJh
dG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAg
ICBpZiAocG9zaXRpb24uX01fY3VyID09IF9NX3N0YXJ0Ll9NX2N1cikgewogICAgICBwdXNoX2Zy
b250KF9feCk7CiAgICAgIHJldHVybiBfTV9zdGFydDsKICAgIH0KICAgIGVsc2UgaWYgKHBvc2l0
aW9uLl9NX2N1ciA9PSBfTV9maW5pc2guX01fY3VyKSB7CiAgICAgIHB1c2hfYmFjayhfX3gpOwog
ICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2ZpbmlzaDsKICAgICAgLS1fX3RtcDsKICAgICAgcmV0
dXJuIF9fdG1wOwogICAgfQogICAgZWxzZSB7CiAgICAgIHJldHVybiBfTV9pbnNlcnRfYXV4KHBv
c2l0aW9uLCBfX3gpOwogICAgfQogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z
aXRpb24pCiAgICB7IHJldHVybiBpbnNlcnQoX19wb3NpdGlvbiwgdmFsdWVfdHlwZSgpKTsgfQoK
ICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVf
dHlwZSYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogIHZv
aWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZh
bHVlX3R5cGUmIF9feCk7CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJ
dGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19w
b3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnRlZ2VyPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50
ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVf
dHlwZSkgewogICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKHZhbHVl
X3R5cGUpIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgaW5zZXJ0KF9fcG9zLCBf
X2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCiAgdm9p
ZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewog
ICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpOwogICAgaWYgKF9fbmV3X3NpemUgPCBf
X2xlbikKICAgICAgZXJhc2UoX01fc3RhcnQgKyBfX25ld19zaXplLCBfTV9maW5pc2gpOwogICAg
ZWxzZQogICAgICBpbnNlcnQoX01fZmluaXNoLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7CiAg
fQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgbmV3X3NpemUpIHsgcmVzaXplKG5ld19zaXplLCB2
YWx1ZV90eXBlKCkpOyB9CgpwdWJsaWM6CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3Mp
IHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fcG9zOwogICAgKytfX25leHQ7CiAgICBzaXplX3R5
cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgICBpZiAoX19pbmRleCA8IChzaXplKCkg
Pj4gMSkpIHsKICAgICAgY29weV9iYWNrd2FyZChfTV9zdGFydCwgX19wb3MsIF9fbmV4dCk7CiAg
ICAgIHBvcF9mcm9udCgpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX19uZXh0LCBfTV9m
aW5pc2gsIF9fcG9zKTsKICAgICAgcG9wX2JhY2soKTsKICAgIH0KICAgIHJldHVybiBfTV9zdGFy
dCArIF9faW5kZXg7CiAgfQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVy
YXRvciBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKTsKCnByb3RlY3RlZDoKCiAgdm9pZCBfTV9maWxs
X2luaXRpYWxpemUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSk7CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p
dGVyYXRvcl90YWcpOwoKcHJvdGVjdGVkOgoKICB2b2lkIF9NX3B1c2hfYmFja19hdXgoY29uc3Qg
dmFsdWVfdHlwZSYpOwogIHZvaWQgX01fcHVzaF9iYWNrX2F1eCgpOwogIHZvaWQgX01fcHVzaF9m
cm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYpOwogIHZvaWQgX01fcHVzaF9mcm9udF9hdXgoKTsK
ICB2b2lkIF9NX3BvcF9iYWNrX2F1eCgpOwogIHZvaWQgX01fcG9wX2Zyb250X2F1eCgpOwoKcHJv
dGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQo
aXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywKICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgaXRlcmF0b3IgX01faW5z
ZXJ0X2F1eChpdGVyYXRvciBfX3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKICBpdGVyYXRv
ciBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zKTsKICB2b2lkIF9NX2luc2VydF9hdXgoaXRl
cmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIHRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVy
YXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl
IF9fbik7CgogIGl0ZXJhdG9yIF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoc2l6ZV90eXBl
IF9fbikgewogICAgc2l6ZV90eXBlIF9fdmFjYW5jaWVzID0gX01fc3RhcnQuX01fY3VyIC0gX01f
c3RhcnQuX01fZmlyc3Q7CiAgICBpZiAoX19uID4gX192YWNhbmNpZXMpCiAgICAgIF9NX25ld19l
bGVtZW50c19hdF9mcm9udChfX24gLSBfX3ZhY2FuY2llcyk7CiAgICByZXR1cm4gX01fc3RhcnQg
LSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9CgogIGl0ZXJhdG9yIF9NX3Jlc2VydmVfZWxlbWVu
dHNfYXRfYmFjayhzaXplX3R5cGUgX19uKSB7CiAgICBzaXplX3R5cGUgX192YWNhbmNpZXMgPSAo
X01fZmluaXNoLl9NX2xhc3QgLSBfTV9maW5pc2guX01fY3VyKSAtIDE7CiAgICBpZiAoX19uID4g
X192YWNhbmNpZXMpCiAgICAgIF9NX25ld19lbGVtZW50c19hdF9iYWNrKF9fbiAtIF9fdmFjYW5j
aWVzKTsKICAgIHJldHVybiBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9Cgog
IHZvaWQgX01fbmV3X2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19lbGVtZW50cyk7
CiAgdm9pZCBfTV9uZXdfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUgX19uZXdfZWxlbWVudHMp
OwoKcHJvdGVjdGVkOgoKCgoKCiAgdm9pZCBfTV9yZXNlcnZlX21hcF9hdF9iYWNrIChzaXplX3R5
cGUgX19ub2Rlc190b19hZGQgPSAxKSB7CiAgICBpZiAoX19ub2Rlc190b19hZGQgKyAxID4gX01f
bWFwX3NpemUgLSAoX01fZmluaXNoLl9NX25vZGUgLSBfTV9tYXApKQogICAgICBfTV9yZWFsbG9j
YXRlX21hcChfX25vZGVzX3RvX2FkZCwgZmFsc2UpOwogIH0KCiAgdm9pZCBfTV9yZXNlcnZlX21h
cF9hdF9mcm9udCAoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkID0gMSkgewogICAgaWYgKF9fbm9k
ZXNfdG9fYWRkID4gc2l6ZV90eXBlKF9NX3N0YXJ0Ll9NX25vZGUgLSBfTV9tYXApKQogICAgICBf
TV9yZWFsbG9jYXRlX21hcChfX25vZGVzX3RvX2FkZCwgdHJ1ZSk7CiAgfQoKICB2b2lkIF9NX3Jl
YWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25vZGVzX3RvX2FkZCwgYm9vbCBfX2FkZF9hdF9mcm9u
dCk7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXI+CnZvaWQgZGVxdWU8X1RwLCBfQWxsb2M+CiAgOjpfTV9hc3NpZ25fYXV4
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3Rh
ZykKewogIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIgPSAq
X19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5kKCkp
OwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCwgX0FsbG9jPjo6X01fZmls
bF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsKICBpZiAoX19w
b3MuX01fY3VyID09IF9NX3N0YXJ0Ll9NX2N1cikgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQg
PSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Zyb250KF9fbik7CiAgICAgICAgICAgICAgewogICAg
ICB1bmluaXRpYWxpemVkX2ZpbGwoX19uZXdfc3RhcnQsIF9NX3N0YXJ0LCBfX3gpOwogICAgICBf
TV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIH0KICBlbHNl
IGlmIChfX3Bvcy5fTV9jdXIgPT0gX01fZmluaXNoLl9NX2N1cikgewogICAgaXRlcmF0b3IgX19u
ZXdfZmluaXNoID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAgICAgICAgICAg
ICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX01fZmluaXNoLCBfX25ld19maW5pc2gsIF9f
eCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB9CiAgZWxz
ZQogICAgX01faW5zZXJ0X2F1eChfX3BvcywgX19uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIGRlcXVlPF9UcCxfQWxsb2M+OjppdGVyYXRvcgpk
ZXF1ZTxfVHAsX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0
KQp7CiAgaWYgKF9fZmlyc3QgPT0gX01fc3RhcnQgJiYgX19sYXN0ID09IF9NX2ZpbmlzaCkgewog
ICAgY2xlYXIoKTsKICAgIHJldHVybiBfTV9maW5pc2g7CiAgfQogIGVsc2UgewogICAgZGlmZmVy
ZW5jZV90eXBlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19l
bGVtc19iZWZvcmUgPSBfX2ZpcnN0IC0gX01fc3RhcnQ7CiAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6
ZV90eXBlPihfX2VsZW1zX2JlZm9yZSkgPCAoc2l6ZSgpIC0gX19uKSAvIDIpIHsKICAgICAgY29w
eV9iYWNrd2FyZChfTV9zdGFydCwgX19maXJzdCwgX19sYXN0KTsKICAgICAgaXRlcmF0b3IgX19u
ZXdfc3RhcnQgPSBfTV9zdGFydCArIF9fbjsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX19uZXdf
c3RhcnQpOwogICAgICBfTV9kZXN0cm95X25vZGVzKF9fbmV3X3N0YXJ0Ll9NX25vZGUsIF9NX3N0
YXJ0Ll9NX25vZGUpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgfQogICAgZWxz
ZSB7CiAgICAgIGNvcHkoX19sYXN0LCBfTV9maW5pc2gsIF9fZmlyc3QpOwogICAgICBpdGVyYXRv
ciBfX25ld19maW5pc2ggPSBfTV9maW5pc2ggLSBfX247CiAgICAgIGRlc3Ryb3koX19uZXdfZmlu
aXNoLCBfTV9maW5pc2gpOwogICAgICBfTV9kZXN0cm95X25vZGVzKF9fbmV3X2ZpbmlzaC5fTV9u
b2RlICsgMSwgX01fZmluaXNoLl9NX25vZGUgKyAxKTsKICAgICAgX01fZmluaXNoID0gX19uZXdf
ZmluaXNoOwogICAgfQogICAgcmV0dXJuIF9NX3N0YXJ0ICsgX19lbGVtc19iZWZvcmU7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxv
Yz46OmNsZWFyKCkKewogIGZvciAoX01hcF9wb2ludGVyIF9fbm9kZSA9IF9NX3N0YXJ0Ll9NX25v
ZGUgKyAxOwogICAgICAgX19ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAgICArK19fbm9k
ZSkgewogICAgZGVzdHJveSgqX19ub2RlLCAqX19ub2RlICsgX1NfYnVmZmVyX3NpemUoKSk7CiAg
ICBfTV9kZWFsbG9jYXRlX25vZGUoKl9fbm9kZSk7CiAgfQoKICBpZiAoX01fc3RhcnQuX01fbm9k
ZSAhPSBfTV9maW5pc2guX01fbm9kZSkgewogICAgZGVzdHJveShfTV9zdGFydC5fTV9jdXIsIF9N
X3N0YXJ0Ll9NX2xhc3QpOwogICAgZGVzdHJveShfTV9maW5pc2guX01fZmlyc3QsIF9NX2Zpbmlz
aC5fTV9jdXIpOwogICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9maXJzdCk7CiAg
fQogIGVsc2UKICAgIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyLCBfTV9maW5pc2guX01fY3VyKTsK
CiAgX01fZmluaXNoID0gX01fc3RhcnQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9maWxsX2luaXRpYWxpemUoY29uc3Qg
dmFsdWVfdHlwZSYgX192YWx1ZSkgewogIF9NYXBfcG9pbnRlciBfX2N1cjsKICAgICAgICAgICAg
ewogICAgZm9yIChfX2N1ciA9IF9NX3N0YXJ0Ll9NX25vZGU7IF9fY3VyIDwgX01fZmluaXNoLl9N
X25vZGU7ICsrX19jdXIpCiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbCgqX19jdXIsICpfX2N1ciAr
IF9TX2J1ZmZlcl9zaXplKCksIF9fdmFsdWUpOwogICAgdW5pbml0aWFsaXplZF9maWxsKF9NX2Zp
bmlzaC5fTV9maXJzdCwgX01fZmluaXNoLl9NX2N1ciwgX192YWx1ZSk7CiAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfTV9pbml0aWFsaXplX21hcCgw
KTsKICAgICAgICAgICAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICA7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3JhbmdlX2luaXRpYWxp
emUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgc2l6
ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogIF9NX2lu
aXRpYWxpemVfbWFwKF9fbik7CgogIF9NYXBfcG9pbnRlciBfX2N1cl9ub2RlOwogICAgICAgICAg
ICB7CiAgICBmb3IgKF9fY3VyX25vZGUgPSBfTV9zdGFydC5fTV9ub2RlOwogICAgICAgICBfX2N1
cl9ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAgICAgICsrX19jdXJfbm9kZSkgewogICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwg
X1NfYnVmZmVyX3NpemUoKSk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX21p
ZCwgKl9fY3VyX25vZGUpOwogICAgICBfX2ZpcnN0ID0gX19taWQ7CiAgICB9CiAgICB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9maW5pc2guX01fZmlyc3QpOwogIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVx
dWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfYmFja19hdXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQp7
CiAgdmFsdWVfdHlwZSBfX3RfY29weSA9IF9fdDsKICBfTV9yZXNlcnZlX21hcF9hdF9iYWNrKCk7
CiAgKihfTV9maW5pc2guX01fbm9kZSArIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogICAgICAg
ICAgICB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLl9NX2N1ciwgX190X2NvcHkpOwogICAgX01f
ZmluaXNoLl9NX3NldF9ub2RlKF9NX2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICBfTV9maW5pc2gu
X01fY3VyID0gX01fZmluaXNoLl9NX2ZpcnN0OwogIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9wdXNoX2JhY2tf
YXV4KCkKewogIF9NX3Jlc2VydmVfbWFwX2F0X2JhY2soKTsKICAqKF9NX2ZpbmlzaC5fTV9ub2Rl
ICsgMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgICAgICAgICAgIHsKICAgIGNvbnN0cnVjdChf
TV9maW5pc2guX01fY3VyKTsKICAgIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2guX01f
bm9kZSArIDEpOwogICAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdDsKICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxf
VHAsX0FsbG9jPjo6X01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQp7CiAg
dmFsdWVfdHlwZSBfX3RfY29weSA9IF9fdDsKICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udCgpOwog
ICooX01fc3RhcnQuX01fbm9kZSAtIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogICAgICAgICAg
ICB7CiAgICBfTV9zdGFydC5fTV9zZXRfbm9kZShfTV9zdGFydC5fTV9ub2RlIC0gMSk7CiAgICBf
TV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9sYXN0IC0gMTsKICAgIGNvbnN0cnVjdChfTV9z
dGFydC5fTV9jdXIsIF9fdF9jb3B5KTsKICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1
c2hfZnJvbnRfYXV4KCkKewogIF9NX3Jlc2VydmVfbWFwX2F0X2Zyb250KCk7CiAgKihfTV9zdGFy
dC5fTV9ub2RlIC0gMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgICAgICAgICAgIHsKICAgIF9N
X3N0YXJ0Ll9NX3NldF9ub2RlKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKTsKICAgIF9NX3N0YXJ0Ll9N
X2N1ciA9IF9NX3N0YXJ0Ll9NX2xhc3QgLSAxOwogICAgY29uc3RydWN0KF9NX3N0YXJ0Ll9NX2N1
cik7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9wb3BfYmFja19hdXgoKQp7CiAgX01f
ZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9maXJzdCk7CiAgX01fZmluaXNoLl9NX3NldF9u
b2RlKF9NX2ZpbmlzaC5fTV9ub2RlIC0gMSk7CiAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2Zpbmlz
aC5fTV9sYXN0IC0gMTsKICBkZXN0cm95KF9NX2ZpbmlzaC5fTV9jdXIpOwp9CgoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9w
b3BfZnJvbnRfYXV4KCkKewogIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyKTsKICBfTV9kZWFsbG9j
YXRlX25vZGUoX01fc3RhcnQuX01fZmlyc3QpOwogIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9NX3N0
YXJ0Ll9NX25vZGUgKyAxKTsKICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9maXJzdDsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Omluc2VydChpdGVyYXRvciBfX3Bv
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0X2l0ZXJhdG9yX3RhZykKewogIGNvcHkoX19maXJzdCwgX19sYXN0LCBpbnNlcnRlcigqdGhp
cywgX19wb3MpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9jPjo6aW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0
b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19uID0gMDsKICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgaWYgKF9fcG9zLl9NX2N1ciA9PSBfTV9zdGFy
dC5fTV9jdXIpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50
c19hdF9mcm9udChfX24pOwogICAgICAgICAgICAgIHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0
YXJ0OwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIH0KICBlbHNlIGlmIChfX3Bvcy5fTV9jdXIg
PT0gX01fZmluaXNoLl9NX2N1cikgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX01fcmVz
ZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAgICAgICAgICAgICAgewogICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICBfTV9maW5pc2gg
PSBfX25ld19maW5pc2g7CiAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgfQogIGVsc2UKICAgIF9NX2luc2VydF9hdXgo
X19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9U
cCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBjb25zdCB2YWx1ZV90eXBl
JiBfX3gpCnsKICBkaWZmZXJlbmNlX3R5cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAg
dmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihf
X2luZGV4KSA8IHNpemUoKSAvIDIpIHsKICAgIHB1c2hfZnJvbnQoZnJvbnQoKSk7CiAgICBpdGVy
YXRvciBfX2Zyb250MSA9IF9NX3N0YXJ0OwogICAgKytfX2Zyb250MTsKICAgIGl0ZXJhdG9yIF9f
ZnJvbnQyID0gX19mcm9udDE7CiAgICArK19fZnJvbnQyOwogICAgX19wb3MgPSBfTV9zdGFydCAr
IF9faW5kZXg7CiAgICBpdGVyYXRvciBfX3BvczEgPSBfX3BvczsKICAgICsrX19wb3MxOwogICAg
Y29weShfX2Zyb250MiwgX19wb3MxLCBfX2Zyb250MSk7CiAgfQogIGVsc2UgewogICAgcHVzaF9i
YWNrKGJhY2soKSk7CiAgICBpdGVyYXRvciBfX2JhY2sxID0gX01fZmluaXNoOwogICAgLS1fX2Jh
Y2sxOwogICAgaXRlcmF0b3IgX19iYWNrMiA9IF9fYmFjazE7CiAgICAtLV9fYmFjazI7CiAgICBf
X3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fYmFj
azIsIF9fYmFjazEpOwogIH0KICAqX19wb3MgPSBfX3hfY29weTsKICByZXR1cm4gX19wb3M7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgZGVxdWU8X1RwLF9B
bGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9y
IF9fcG9zKQp7CiAgZGlmZmVyZW5jZV90eXBlIF9faW5kZXggPSBfX3BvcyAtIF9NX3N0YXJ0Owog
IGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW5kZXgpIDwgc2l6ZSgpIC8gMikgewogICAg
cHVzaF9mcm9udChmcm9udCgpKTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQxID0gX01fc3RhcnQ7CiAg
ICArK19fZnJvbnQxOwogICAgaXRlcmF0b3IgX19mcm9udDIgPSBfX2Zyb250MTsKICAgICsrX19m
cm9udDI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAgIGl0ZXJhdG9yIF9fcG9z
MSA9IF9fcG9zOwogICAgKytfX3BvczE7CiAgICBjb3B5KF9fZnJvbnQyLCBfX3BvczEsIF9fZnJv
bnQxKTsKICB9CiAgZWxzZSB7CiAgICBwdXNoX2JhY2soYmFjaygpKTsKICAgIGl0ZXJhdG9yIF9f
YmFjazEgPSBfTV9maW5pc2g7CiAgICAtLV9fYmFjazE7CiAgICBpdGVyYXRvciBfX2JhY2syID0g
X19iYWNrMTsKICAgIC0tX19iYWNrMjsKICAgIF9fcG9zID0gX01fc3RhcnQgKyBfX2luZGV4Owog
ICAgY29weV9iYWNrd2FyZChfX3BvcywgX19iYWNrMiwgX19iYWNrMSk7CiAgfQogICpfX3BvcyA9
IHZhbHVlX3R5cGUoKTsKICByZXR1cm4gX19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRv
ciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg
X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlX3R5
cGUmIF9feCkKewogIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zX2JlZm9yZSA9IF9fcG9z
IC0gX01fc3RhcnQ7CiAgc2l6ZV90eXBlIF9fbGVuZ3RoID0gdGhpcy0+c2l6ZSgpOwogIHZhbHVl
X3R5cGUgX194X2NvcHkgPSBfX3g7CiAgaWYgKF9fZWxlbXNfYmVmb3JlIDwgZGlmZmVyZW5jZV90
eXBlKF9fbGVuZ3RoIC8gMikpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2
ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwogICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9z
dGFydDsKICAgIF9fcG9zID0gX01fc3RhcnQgKyBfX2VsZW1zX2JlZm9yZTsKICAgICAgICAgICAg
ICB7CiAgICAgIGlmIChfX2VsZW1zX2JlZm9yZSA+PSBkaWZmZXJlbmNlX3R5cGUoX19uKSkgewog
ICAgICAgIGl0ZXJhdG9yIF9fc3RhcnRfbiA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9f
bik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3N0YXJ0X24sIF9fbmV3
X3N0YXJ0KTsKICAgICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICAgIGNvcHkoX19z
dGFydF9uLCBfX3BvcywgX19vbGRfc3RhcnQpOwogICAgICAgIGZpbGwoX19wb3MgLSBkaWZmZXJl
bmNlX3R5cGUoX19uKSwgX19wb3MsIF9feF9jb3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAg
ICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9NX3N0YXJ0LCBfX3BvcywgX19uZXdfc3Rh
cnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9zdGFydCwgX194X2NvcHkp
OwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgZmlsbChfX29sZF9zdGFy
dCwgX19wb3MsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIH0K
ICBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNf
YXRfYmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAg
Y29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPQogICAgICBkaWZmZXJlbmNlX3R5
cGUoX19sZW5ndGgpIC0gX19lbGVtc19iZWZvcmU7CiAgICBfX3BvcyA9IF9NX2ZpbmlzaCAtIF9f
ZWxlbXNfYWZ0ZXI7CiAgICAgICAgICAgICAgewogICAgICBpZiAoX19lbGVtc19hZnRlciA+IGRp
ZmZlcmVuY2VfdHlwZShfX24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19maW5pc2hfbiA9IF9NX2Zp
bmlzaCAtIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShf
X2ZpbmlzaF9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoID0gX19u
ZXdfZmluaXNoOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fZmluaXNoX24sIF9fb2xk
X2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3BvcywgX19wb3MgKyBkaWZmZXJlbmNlX3R5cGUoX19u
KSwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fdW5pbml0aWFsaXpl
ZF9maWxsX2NvcHkoX01fZmluaXNoLCBfX3BvcyArIGRpZmZlcmVuY2VfdHlwZShfX24pLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX194X2NvcHksIF9fcG9zLCBfTV9maW5pc2gp
OwogICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBmaWxsKF9fcG9zLCBf
X29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
YXRvcj4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bv
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90eXBlIF9fbikKewogIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zYmVmb3JlID0gX19w
b3MgLSBfTV9zdGFydDsKICBzaXplX3R5cGUgX19sZW5ndGggPSBzaXplKCk7CiAgaWYgKHN0YXRp
Y19jYXN0PHNpemVfdHlwZT4oX19lbGVtc2JlZm9yZSkgPCBfX2xlbmd0aCAvIDIpIHsKICAgIGl0
ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwog
ICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9zdGFydDsKICAgIF9fcG9zID0gX01fc3RhcnQg
KyBfX2VsZW1zYmVmb3JlOwogICAgICAgICAgICAgIHsKICAgICAgaWYgKF9fZWxlbXNiZWZvcmUg
Pj0gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX3N0YXJ0X24gPSBf
TV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w
eShfTV9zdGFydCwgX19zdGFydF9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX01fc3RhcnQgPSBf
X25ld19zdGFydDsKICAgICAgICBjb3B5KF9fc3RhcnRfbiwgX19wb3MsIF9fb2xkX3N0YXJ0KTsK
ICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MgLSBkaWZmZXJlbmNlX3R5cGUoX19u
KSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9
IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgZGlmZmVyZW5jZV90eXBlKF9fbikgLSBf
X2VsZW1zYmVmb3JlKTsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9NX3N0YXJ0
LCBfX3BvcywgX19maXJzdCwgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX25ld19zdGFydCk7CiAgICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgICAgICBj
b3B5KF9fbWlkLCBfX2xhc3QsIF9fb2xkX3N0YXJ0KTsKICAgICAgfQogICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogIH0KICBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2Vy
dmVfZWxlbWVudHNfYXRfYmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01f
ZmluaXNoOwogICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNhZnRlciA9CiAgICAgIGRp
ZmZlcmVuY2VfdHlwZShfX2xlbmd0aCkgLSBfX2VsZW1zYmVmb3JlOwogICAgX19wb3MgPSBfTV9m
aW5pc2ggLSBfX2VsZW1zYWZ0ZXI7CiAgICAgICAgICAgICAgewogICAgICBpZiAoX19lbGVtc2Fm
dGVyID4gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX2ZpbmlzaF9u
ID0gX01fZmluaXNoIC0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmluaXNoX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5p
c2ggPSBfX25ld19maW5pc2g7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3BvcywgX19maW5pc2hf
biwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MpOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp
cnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNhZnRlcik7CiAgICAgICAgX191bmlu
aXRpYWxpemVkX2NvcHlfY29weShfX21pZCwgX19sYXN0LCBfX3BvcywgX01fZmluaXNoLCBfTV9m
aW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBjb3B5KF9f
Zmlyc3QsIF9fbWlkLCBfX3Bvcyk7CiAgICAgIH0KICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fbmV3
X2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19lbGVtcykKewogIHNpemVfdHlwZSBf
X25ld19ub2RlcwogICAgICA9IChfX25ld19lbGVtcyArIF9TX2J1ZmZlcl9zaXplKCkgLSAxKSAv
IF9TX2J1ZmZlcl9zaXplKCk7CiAgX01fcmVzZXJ2ZV9tYXBfYXRfZnJvbnQoX19uZXdfbm9kZXMp
OwogIHNpemVfdHlwZSBfX2k7CiAgICAgICAgICAgIHsKICAgIGZvciAoX19pID0gMTsgX19pIDw9
IF9fbmV3X25vZGVzOyArK19faSkKICAgICAgKihfTV9zdGFydC5fTV9ub2RlIC0gX19pKSA9IF9N
X2FsbG9jYXRlX25vZGUoKTsKICB9CgoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX25ld19lbGVtZW50c19hdF9iYWNr
KHNpemVfdHlwZSBfX25ld19lbGVtcykKewogIHNpemVfdHlwZSBfX25ld19ub2RlcwogICAgICA9
IChfX25ld19lbGVtcyArIF9TX2J1ZmZlcl9zaXplKCkgLSAxKSAvIF9TX2J1ZmZlcl9zaXplKCk7
CiAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFjayhfX25ld19ub2Rlcyk7CiAgc2l6ZV90eXBlIF9faTsK
ICAgICAgICAgICAgewogICAgZm9yIChfX2kgPSAxOyBfX2kgPD0gX19uZXdfbm9kZXM7ICsrX19p
KQogICAgICAqKF9NX2ZpbmlzaC5fTV9ub2RlICsgX19pKSA9IF9NX2FsbG9jYXRlX25vZGUoKTsK
ICB9CgoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVx
dWU8X1RwLF9BbGxvYz46Ol9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25vZGVzX3RvX2Fk
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBfX2FkZF9h
dF9mcm9udCkKewogIHNpemVfdHlwZSBfX29sZF9udW1fbm9kZXMgPSBfTV9maW5pc2guX01fbm9k
ZSAtIF9NX3N0YXJ0Ll9NX25vZGUgKyAxOwogIHNpemVfdHlwZSBfX25ld19udW1fbm9kZXMgPSBf
X29sZF9udW1fbm9kZXMgKyBfX25vZGVzX3RvX2FkZDsKCiAgX01hcF9wb2ludGVyIF9fbmV3X25z
dGFydDsKICBpZiAoX01fbWFwX3NpemUgPiAyICogX19uZXdfbnVtX25vZGVzKSB7CiAgICBfX25l
d19uc3RhcnQgPSBfTV9tYXAgKyAoX01fbWFwX3NpemUgLSBfX25ld19udW1fbm9kZXMpIC8gMgog
ICAgICAgICAgICAgICAgICAgICArIChfX2FkZF9hdF9mcm9udCA/IF9fbm9kZXNfdG9fYWRkIDog
MCk7CiAgICBpZiAoX19uZXdfbnN0YXJ0IDwgX01fc3RhcnQuX01fbm9kZSkKICAgICAgY29weShf
TV9zdGFydC5fTV9ub2RlLCBfTV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3X25zdGFydCk7CiAg
ICBlbHNlCiAgICAgIGNvcHlfYmFja3dhcmQoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNoLl9N
X25vZGUgKyAxLAogICAgICAgICAgICAgICAgICAgIF9fbmV3X25zdGFydCArIF9fb2xkX251bV9u
b2Rlcyk7CiAgfQogIGVsc2UgewogICAgc2l6ZV90eXBlIF9fbmV3X21hcF9zaXplID0KICAgICAg
X01fbWFwX3NpemUgKyBtYXgoX01fbWFwX3NpemUsIF9fbm9kZXNfdG9fYWRkKSArIDI7CgogICAg
X01hcF9wb2ludGVyIF9fbmV3X21hcCA9IF9NX2FsbG9jYXRlX21hcChfX25ld19tYXBfc2l6ZSk7
CiAgICBfX25ld19uc3RhcnQgPSBfX25ld19tYXAgKyAoX19uZXdfbWFwX3NpemUgLSBfX25ld19u
dW1fbm9kZXMpIC8gMgogICAgICAgICAgICAgICAgICAgICAgICAgKyAoX19hZGRfYXRfZnJvbnQg
PyBfX25vZGVzX3RvX2FkZCA6IDApOwogICAgY29weShfTV9zdGFydC5fTV9ub2RlLCBfTV9maW5p
c2guX01fbm9kZSArIDEsIF9fbmV3X25zdGFydCk7CiAgICBfTV9kZWFsbG9jYXRlX21hcChfTV9t
YXAsIF9NX21hcF9zaXplKTsKCiAgICBfTV9tYXAgPSBfX25ld19tYXA7CiAgICBfTV9tYXBfc2l6
ZSA9IF9fbmV3X21hcF9zaXplOwogIH0KCiAgX01fc3RhcnQuX01fc2V0X25vZGUoX19uZXdfbnN0
YXJ0KTsKICBfTV9maW5pc2guX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0ICsgX19vbGRfbnVtX25v
ZGVzIC0gMSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBf
X3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9f
eC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KSB7CiAg
cmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKGRlcXVlPF9U
cCxfQWxsb2M+JiBfX3gsIGRlcXVlPF9UcCxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kp
Owp9Cgp9CiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zdGFjay5oIiAxIDMK
IyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zdGFjay5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzUg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfc3RhY2suaCIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9TZXF1ZW5j
ZSA9IGRlcXVlPF9UcD4gPgpjbGFzcyBzdGFjazsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9TZXE+CmJvb2wgb3BlcmF0b3I9PShjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qg
c3RhY2s8X1RwLF9TZXE+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4K
Ym9vbCBvcGVyYXRvcjwoY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9U
cCxfU2VxPiYgX195KTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxdWVuY2U+CmNs
YXNzIHN0YWNrCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZh
bHVlX3R5cGUgX1NlcXVlbmNlX3ZhbHVlX3R5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgdGVtcGxh
dGUgPGNsYXNzIF9UcDEsIGNsYXNzIF9TZXExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNv
bnN0IHN0YWNrPF9UcDEsIF9TZXExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RhY2s8X1RwMSwgX1NlcTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDEsIGNsYXNzIF9TZXEx
PgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3Qgc3RhY2s8X1RwMSwgX1NlcTE+JiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrPF9UcDEsIF9TZXExPiYpOwpwdWJsaWM6
CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVm
IF9TZXF1ZW5jZSBjb250YWluZXJfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6
OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0
X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CnByb3RlY3RlZDoKICBfU2VxdWVuY2UgYzsKcHVi
bGljOgogIHN0YWNrKCkgOiBjKCkge30KICBleHBsaWNpdCBzdGFjayhjb25zdCBfU2VxdWVuY2Um
IF9fcykgOiBjKF9fcykge30KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGMuZW1wdHko
KTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gYy5zaXplKCk7IH0KICByZWZl
cmVuY2UgdG9wKCkgeyByZXR1cm4gYy5iYWNrKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgdG9wKCkg
Y29uc3QgeyByZXR1cm4gYy5iYWNrKCk7IH0KICB2b2lkIHB1c2goY29uc3QgdmFsdWVfdHlwZSYg
X194KSB7IGMucHVzaF9iYWNrKF9feCk7IH0KICB2b2lkIHBvcCgpIHsgYy5wb3BfYmFjaygpOyB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPT0oY29u
c3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7CiAg
cmV0dXJuIF9feC5jID09IF9feS5jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2Vx
Pgpib29sIG9wZXJhdG9yPChjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8
X1RwLF9TZXE+JiBfX3kpCnsKICByZXR1cm4gX194LmMgPCBfX3kuYzsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvciE9KGNvbnN0IHN0YWNrPF9UcCxfU2Vx
PiYgX194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBf
X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPihj
b25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kpCnsK
ICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpi
b29sIG9wZXJhdG9yPD0oY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9U
cCxfU2VxPiYgX195KQp7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcj49KGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYg
X194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAhKF9feCA8IF9feSk7
Cn0KCn0KIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdGFjay5oIiAy
IDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdGFjayIgMiAzCiMgNDYgIi4uLy4u
L2FydHMvbWNvcC9wb29sLmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3ZlY3Rv
ciIgMSAzCiMgNDcgIi4uLy4uL2FydHMvbWNvcC9wb29sLmgiIDIKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2xpc3QiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2xp
c3QiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMSAz
CiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAzCgojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgMzMg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDM0ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfbGlzdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfbGlzdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKc3RydWN0IF9MaXN0X25vZGVf
YmFzZSB7CiAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9uZXh0OwogIF9MaXN0X25vZGVfYmFzZSogX01f
cHJldjsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfTGlzdF9ub2RlIDogcHVibGlj
IF9MaXN0X25vZGVfYmFzZSB7CiAgX1RwIF9NX2RhdGE7Cn07CgpzdHJ1Y3QgX0xpc3RfaXRlcmF0
b3JfYmFzZSB7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0
ZXJhdG9yX2NhdGVnb3J5OwoKICBfTGlzdF9ub2RlX2Jhc2UqIF9NX25vZGU7CgogIF9MaXN0X2l0
ZXJhdG9yX2Jhc2UoX0xpc3Rfbm9kZV9iYXNlKiBfX3gpIDogX01fbm9kZShfX3gpIHt9CiAgX0xp
c3RfaXRlcmF0b3JfYmFzZSgpIHt9CgogIHZvaWQgX01faW5jcigpIHsgX01fbm9kZSA9IF9NX25v
ZGUtPl9NX25leHQ7IH0KICB2b2lkIF9NX2RlY3IoKSB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9w
cmV2OyB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOwogIH0KICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgX0xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNs
YXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfTGlzdF9pdGVyYXRvciA6IHB1YmxpYyBfTGlz
dF9pdGVyYXRvcl9iYXNlIHsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+
IGl0ZXJhdG9yOwogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3Qg
X1RwKj4gY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1JlZixf
UHRyPiBfU2VsZjsKCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9QdHIgcG9p
bnRlcjsKICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+
IF9Ob2RlOwoKICBfTGlzdF9pdGVyYXRvcihfTm9kZSogX194KSA6IF9MaXN0X2l0ZXJhdG9yX2Jh
c2UoX194KSB7fQogIF9MaXN0X2l0ZXJhdG9yKCkge30KICBfTGlzdF9pdGVyYXRvcihjb25zdCBp
dGVyYXRvciYgX194KSA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX25vZGUpIHt9CgogIHJl
ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAoKF9Ob2RlKikgX01fbm9kZSktPl9N
X2RhdGE7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9y
KigpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIHRoaXMtPl9NX2luY3IoKTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9f
dG1wID0gKnRoaXM7CiAgICB0aGlzLT5fTV9pbmNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQog
IF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgdGhpcy0+X01fZGVjcigpOwogICAgcmV0dXJuICp0
aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhp
czsKICAgIHRoaXMtPl9NX2RlY3IoKTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CiMgMTE4ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIgMwp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX0xpc3RfYWxs
b2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFs
bG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTm9kZV9hbGxvY2F0
b3I7IH0KCiAgX0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9O
b2RlX2FsbG9jYXRvcihfX2EpIHt9Cgpwcm90ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9n
ZXRfbm9kZSgpCiAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZv
aWQgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9Ob2RlX2FsbG9jYXRv
ci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KCnByb3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2NfdHJh
aXRzPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAg
ICAgX05vZGVfYWxsb2NhdG9yOwogIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKfTsKCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0xpc3RfYWxsb2NfYmFz
ZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxs
b2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0
dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0
b3JfdHlwZSYpIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz
PF9MaXN0X25vZGU8X1RwPiwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxs
b2NfdHlwZTsKICBfTGlzdF9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX0FsbG9j
X3R5cGU6OmFsbG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4q
IF9fcCkgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAg
X0xpc3Rfbm9kZTxfVHA+KiBfTV9ub2RlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgpjbGFzcyBfTGlzdF9iYXNlCiAgOiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxfVHAs
IF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsKcHVibGljOgogIHR5cGVkZWYgX0xpc3RfYWxsb2Nf
YmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfTGlz
dF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9u
b2RlID0gX01fZ2V0X25vZGUoKTsKICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAg
X01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7CiAgfQogIH5fTGlzdF9iYXNlKCkgewogICAgY2xl
YXIoKTsKICAgIF9NX3B1dF9ub2RlKF9NX25vZGUpOwogIH0KCiAgdm9pZCBjbGVhcigpOwp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApfTGlzdF9iYXNlPF9UcCxf
QWxsb2M+OjpjbGVhcigpCnsKICBfTGlzdF9ub2RlPF9UcD4qIF9fY3VyID0gKF9MaXN0X25vZGU8
X1RwPiopIF9NX25vZGUtPl9NX25leHQ7CiAgd2hpbGUgKF9fY3VyICE9IF9NX25vZGUpIHsKICAg
IF9MaXN0X25vZGU8X1RwPiogX190bXAgPSBfX2N1cjsKICAgIF9fY3VyID0gKF9MaXN0X25vZGU8
X1RwPiopIF9fY3VyLT5fTV9uZXh0OwogICAgX0Rlc3Ryb3koJl9fdG1wLT5fTV9kYXRhKTsKICAg
IF9NX3B1dF9ub2RlKF9fdG1wKTsKICB9CiAgX01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAg
X01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgbGlzdCA6IHByb3RlY3RlZCBfTGlzdF9i
YXNlPF9UcCwgX0FsbG9jPgp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogIHR5cGVkZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gX0Jh
c2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIHZvaWQqIF9Wb2lkX3BvaW50ZXI7CgpwdWJsaWM6CiAg
dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAg
dHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVf
dHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJl
bmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwogIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYg
dHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRv
cigpOyB9CgpwdWJsaWM6CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBp
dGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9U
cCo+IGNvbnN0X2l0ZXJhdG9yOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRl
cmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y
PGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpf
TV9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fZ2V0
X25vZGU7Cgpwcm90ZWN0ZWQ6CiAgX05vZGUqIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9UcCYgX194
KQogIHsKICAgIF9Ob2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAgICAgICAgICAgIHsKICAg
ICAgX0NvbnN0cnVjdCgmX19wLT5fTV9kYXRhLCBfX3gpOwogICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJuIF9fcDsKICB9CgogIF9Ob2RlKiBfTV9jcmVh
dGVfbm9kZSgpCiAgewogICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgICAg
ICAgewogICAgICBfQ29uc3RydWN0KCZfX3AtPl9NX2RhdGEpOwogICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJuIF9fcDsKICB9CgpwdWJsaWM6CiAgZXhw
bGljaXQgbGlzdChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkg
OiBfQmFzZShfX2EpIHt9CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gKF9Ob2RlKikoX01f
bm9kZS0+X01fbmV4dCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IChfTm9kZSopKF9NX25vZGUtPl9NX25leHQpOyB9CgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJu
IF9NX25vZGU7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9ub2Rl
OyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRl
cmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAog
ICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgcmV2ZXJzZV9p
dGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0K
ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1
cm4gX01fbm9kZS0+X01fbmV4dCA9PSBfTV9ub2RlOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25z
dCB7CiAgICBzaXplX3R5cGUgX19yZXN1bHQgPSAwOwogICAgZGlzdGFuY2UoYmVnaW4oKSwgZW5k
KCksIF9fcmVzdWx0KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CiAgc2l6ZV90eXBlIG1heF9z
aXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICByZWZlcmVuY2UgZnJvbnQo
KSB7IHJldHVybiAqYmVnaW4oKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsg
cmV0dXJuICpiZWdpbigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKC0tZW5kKCkp
OyB9CiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKC0tZW5kKCkpOyB9
CgogIHZvaWQgc3dhcChsaXN0PF9UcCwgX0FsbG9jPiYgX194KSB7IHN0ZDo6c3dhcChfTV9ub2Rl
LCBfX3guX01fbm9kZSk7IH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24s
IGNvbnN0IF9UcCYgX194KSB7CiAgICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gp
OwogICAgX190bXAtPl9NX25leHQgPSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICBfX3RtcC0+X01f
cHJldiA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgIF9fcG9zaXRpb24uX01fbm9k
ZS0+X01fcHJldi0+X01fbmV4dCA9IF9fdG1wOwogICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9w
cmV2ID0gX190bXA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVy
YXRvciBfX3Bvc2l0aW9uKSB7IHJldHVybiBpbnNlcnQoX19wb3NpdGlvbiwgX1RwKCkpOyB9CgoK
ICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVy
YXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6ZV90
eXBlKSBfX24sIChfVHApIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh
bDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdy
YWwoKSk7CiAgfQoKICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwg
Y29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0K
ICB2b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z
dCBfVHAmIF9feCk7CgogIHZvaWQgcHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQo
YmVnaW4oKSwgX194KTsgfQogIHZvaWQgcHVzaF9mcm9udCgpIHtpbnNlcnQoYmVnaW4oKSk7fQog
IHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7IGluc2VydChlbmQoKSwgX194KTsgfQog
IHZvaWQgcHVzaF9iYWNrKCkge2luc2VydChlbmQoKSk7fQoKICBpdGVyYXRvciBlcmFzZShpdGVy
YXRvciBfX3Bvc2l0aW9uKSB7CiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fbmV4dF9ub2RlID0gX19w
b3NpdGlvbi5fTV9ub2RlLT5fTV9uZXh0OwogICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3ByZXZfbm9k
ZSA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgIF9Ob2RlKiBfX24gPSAoX05vZGUq
KSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV4dF9u
b2RlOwogICAgX19uZXh0X25vZGUtPl9NX3ByZXYgPSBfX3ByZXZfbm9kZTsKICAgIF9EZXN0cm95
KCZfX24tPl9NX2RhdGEpOwogICAgX01fcHV0X25vZGUoX19uKTsKICAgIHJldHVybiBpdGVyYXRv
cigoX05vZGUqKSBfX25leHRfbm9kZSk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9f
Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CiAgdm9pZCBjbGVhcigpIHsgX0Jhc2U6OmNsZWFyKCk7
IH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KTsK
ICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyB0aGlzLT5yZXNpemUoX19uZXdf
c2l6ZSwgX1RwKCkpOyB9CgogIHZvaWQgcG9wX2Zyb250KCkgeyBlcmFzZShiZWdpbigpKTsgfQog
IHZvaWQgcG9wX2JhY2soKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IGVuZCgpOwogICAgZXJhc2Uo
LS1fX3RtcCk7CiAgfQogIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAog
ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6
IF9CYXNlKF9fYSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX192YWx1ZSk7IH0KICBleHBs
aWNpdCBsaXN0KHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAg
ICB7IGluc2VydChiZWdpbigpLCBfX24sIF9UcCgpKTsgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICBsaXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf
dHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgICB7IGluc2VydChiZWdpbigpLCBfX2ZpcnN0LCBf
X2xhc3QpOyB9CgogIGxpc3QoY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkgOiBfQmFzZShf
X3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX194LmJlZ2luKCksIF9f
eC5lbmQoKSk7IH0KCiAgfmxpc3QoKSB7IH0KCiAgbGlzdDxfVHAsIF9BbGxvYz4mIG9wZXJhdG9y
PShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KTsKCnB1YmxpYzoKCgoKCgogIHZvaWQgYXNz
aWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19u
LCBfX3ZhbCk7IH0KCiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBf
VHAmIF9fdmFsKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNz
aWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAg
dHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBf
SW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdy
YWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25f
ZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7
IF9NX2ZpbGxfYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19mYWxzZV90eXBlKTsKCnByb3RlY3RlZDoKICB2b2lkIHRyYW5zZmVyKGl0
ZXJhdG9yIF9fcG9zaXRpb24sIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewog
ICAgaWYgKF9fcG9zaXRpb24gIT0gX19sYXN0KSB7CgogICAgICBfX2xhc3QuX01fbm9kZS0+X01f
cHJldi0+X01fbmV4dCA9IF9fcG9zaXRpb24uX01fbm9kZTsKICAgICAgX19maXJzdC5fTV9ub2Rl
LT5fTV9wcmV2LT5fTV9uZXh0ID0gX19sYXN0Ll9NX25vZGU7CiAgICAgIF9fcG9zaXRpb24uX01f
bm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fZmlyc3QuX01fbm9kZTsKCgogICAgICBfTGlzdF9u
b2RlX2Jhc2UqIF9fdG1wID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX3Bv
c2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX2xhc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAg
X19sYXN0Ll9NX25vZGUtPl9NX3ByZXYgPSBfX2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAg
IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgfQogIH0KCnB1YmxpYzoKICB2
b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpIHsKICAgIGlmICghX194
LmVtcHR5KCkpCiAgICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBf
X3guZW5kKCkpOwogIH0KICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0Jiwg
aXRlcmF0b3IgX19pKSB7CiAgICBpdGVyYXRvciBfX2ogPSBfX2k7CiAgICArK19fajsKICAgIGlm
IChfX3Bvc2l0aW9uID09IF9faSB8fCBfX3Bvc2l0aW9uID09IF9faikgcmV0dXJuOwogICAgdGhp
cy0+dHJhbnNmZXIoX19wb3NpdGlvbiwgX19pLCBfX2opOwogIH0KICB2b2lkIHNwbGljZShpdGVy
YXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0
KSB7CiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9z
aXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CiAgfQogIHZvaWQgcmVtb3ZlKGNvbnN0IF9UcCYgX192
YWx1ZSk7CiAgdm9pZCB1bmlxdWUoKTsKICB2b2lkIG1lcmdlKGxpc3QmIF9feCk7CiAgdm9pZCBy
ZXZlcnNlKCk7CiAgdm9pZCBzb3J0KCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiB2
b2lkIHJlbW92ZV9pZihfUHJlZGljYXRlKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4gdm9pZCB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9T
dHJpY3RXZWFrT3JkZXJpbmc+IHZvaWQgbWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcp
OwogIHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPiB2b2lkIHNvcnQoX1N0cmlj
dFdlYWtPcmRlcmluZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBs
aXN0PF9UcCxfQWxsb2M+JiBfX3kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxv
Yz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIGNvbnN0X2l0ZXJhdG9yIF9fZW5k
MSA9IF9feC5lbmQoKTsKICBjb25zdF9pdGVyYXRvciBfX2VuZDIgPSBfX3kuZW5kKCk7CgogIGNv
bnN0X2l0ZXJhdG9yIF9faTEgPSBfX3guYmVnaW4oKTsKICBjb25zdF9pdGVyYXRvciBfX2kyID0g
X195LmJlZ2luKCk7CiAgd2hpbGUgKF9faTEgIT0gX19lbmQxICYmIF9faTIgIT0gX19lbmQyICYm
ICpfX2kxID09ICpfX2kyKSB7CiAgICArK19faTE7CiAgICArK19faTI7CiAgfQogIHJldHVybiBf
X2kxID09IF9fZW5kMSAmJiBfX2kyID09IF9fZW5kMjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbGlzdDxfVHAsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195
KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5k
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5k
KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh
dG9yPihjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29u
c3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxp
c3Q8X1RwLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBs
aXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxf
VHAsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZApzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+
JiBfX3gsIGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
Pgp2b2lkCmxpc3Q8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19w
b3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgIGluc2VydChfX3Bvc2l0aW9uLCAqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9p
bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQp7CiAgZm9yICggOyBfX24gPiAwOyAt
LV9fbikKICAgIGluc2VydChfX3Bvc2l0aW9uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxvYz46Oml0ZXJhdG9yIGxpc3Q8
X1RwLCBfQWxsb2M+OjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IgX19sYXN0
KQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgZXJhc2UoX19maXJzdCsrKTsKICBy
ZXR1cm4gX19sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQg
bGlzdDxfVHAsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1Rw
JiBfX3gpCnsKICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwogIHNpemVfdHlwZSBfX2xlbiA9IDA7
CiAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYgX19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytf
X2xlbikKICAgIDsKICBpZiAoX19sZW4gPT0gX19uZXdfc2l6ZSkKICAgIGVyYXNlKF9faSwgZW5k
KCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmxpc3Q8X1RwLCBfQWxsb2M+JiBs
aXN0PF9UcCwgX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gp
CnsKICBpZiAodGhpcyAhPSAmX194KSB7CiAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7
CiAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0
MiA9IF9feC5iZWdpbigpOwogICAgY29uc3RfaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsK
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg
ICAgICpfX2ZpcnN0MSsrID0gKl9fZmlyc3QyKys7CiAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0
MikKICAgICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogICAgZWxzZQogICAgICBpbnNlcnQo
X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6X01f
ZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgewogIGl0ZXJhdG9y
IF9faSA9IGJlZ2luKCk7CiAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ks
IC0tX19uKQogICAgKl9faSA9IF9fdmFsOwogIGlmIChfX24gPiAwKQogICAgaW5zZXJ0KGVuZCgp
LCBfX24sIF9fdmFsKTsKICBlbHNlCiAgICBlcmFzZShfX2ksIGVuZCgpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9p
ZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz
dDIsIF9JbnB1dEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2ZhbHNlX3R5cGUpCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRl
cmF0b3IgX19sYXN0MSA9IGVuZCgpOwogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgKl9fZmlyc3Qx
ID0gKl9fZmlyc3QyOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgZXJhc2UoX19maXJz
dDEsIF9fbGFzdDEpOwogIGVsc2UKICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0
Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwg
X0FsbG9jPjo6cmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSkKewogIGl0ZXJhdG9yIF9fZmlyc3Qg
PSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICsrX19uZXh0Owog
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpIGVyYXNlKF9fZmlyc3QpOwogICAgX19maXJzdCA9
IF9fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBs
aXN0PF9UcCwgX0FsbG9jPjo6dW5pcXVlKCkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigp
OwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuOwogIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19uZXh0ICE9IF9f
bGFzdCkgewogICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgIGVyYXNlKF9fbmV4dCk7
CiAgICBlbHNlCiAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0Owog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBf
QWxsb2M+OjptZXJnZShsaXN0PF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaXRlcmF0b3IgX19maXJz
dDEgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKICBpdGVyYXRvciBfX2Zp
cnN0MiA9IF9feC5iZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7
CiAgICAgIHRyYW5zZmVyKF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2Zp
cnN0MiA9IF9fbmV4dDsKICAgIH0KICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19m
aXJzdDIgIT0gX19sYXN0MikgdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9
CgppbmxpbmUgdm9pZCBfX0xpc3RfYmFzZV9yZXZlcnNlKF9MaXN0X25vZGVfYmFzZSogX19wKQp7
CiAgX0xpc3Rfbm9kZV9iYXNlKiBfX3RtcCA9IF9fcDsKICBkbyB7CiAgICBzdGQ6OnN3YXAoX190
bXAtPl9NX25leHQsIF9fdG1wLT5fTV9wcmV2KTsKICAgIF9fdG1wID0gX190bXAtPl9NX3ByZXY7
CiAgfSB3aGlsZSAoX190bXAgIT0gX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmV2ZXJzZSgpCnsKICBfX0xp
c3RfYmFzZV9yZXZlcnNlKHRoaXMtPl9NX25vZGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnNvcnQoKQp7CgogIGlmIChfTV9u
b2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBf
TV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAsIF9B
bGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0
eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2lu
KCkpOwogICAgICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2Nv
dW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jYXJy
eSk7CiAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2krK10pOwogICAgICB9CiAgICAg
IF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgIGlmIChfX2kgPT0gX19maWxsKSAr
K19fZmlsbDsKICAgIH0KCiAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19p
KQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFdKTsKICAgIHN3YXAo
X19jb3VudGVyW19fZmlsbC0xXSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+
OjpyZW1vdmVfaWYoX1ByZWRpY2F0ZSBfX3ByZWQpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVn
aW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xh
c3QpIHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICArK19fbmV4dDsKICAgIGlm
IChfX3ByZWQoKl9fZmlyc3QpKSBlcmFzZShfX2ZpcnN0KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7
CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFz
cyBfQmluYXJ5UHJlZGljYXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojp1bmlxdWUoX0JpbmFy
eVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7
CiAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
cm47CiAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX25leHQgIT0gX19s
YXN0KSB7CiAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIGVy
YXNlKF9fbmV4dCk7CiAgICBlbHNlCiAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQg
PSBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1w
bGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6
bWVyZ2UobGlzdDxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJl
Z2luKCk7CiAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogIGl0ZXJhdG9yIF9fZmlyc3QyID0g
X194LmJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgq
X19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7
CiAgICAgIHRyYW5zZmVyKF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2Zp
cnN0MiA9IF9fbmV4dDsKICAgIH0KICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19m
aXJzdDIgIT0gX19sYXN0MikgdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3Ry
aWN0V2Vha09yZGVyaW5nPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KF9TdHJpY3RXZWFr
T3JkZXJpbmcgX19jb21wKQp7CgogIGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYg
X01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0Fs
bG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGlu
dCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNl
KF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAg
ICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAg
ICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jYXJyeSwgX19jb21wKTsKICAgICAgICBfX2NhcnJ5
LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgIH0KICAgICAgX19jYXJyeS5zd2FwKF9fY291
bnRlcltfX2ldKTsKICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgfQoKICAg
IGZvciAoaW50IF9faSA9IDE7IF9faSA8IF9fZmlsbDsgKytfX2kpCiAgICAgIF9fY291bnRlcltf
X2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0sIF9fY29tcCk7CiAgICBzd2FwKF9fY291bnRlcltf
X2ZpbGwtMV0pOwogIH0KfQoKfQojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2xpc3QuaCIgMiAzCiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbGlzdCIgMiAz
CiMgNDggIi4uLy4uL2FydHMvbWNvcC9wb29sLmgiIDIKCm5hbWVzcGFjZSBBcnRzIHsKCnRlbXBs
YXRlIDxjbGFzcyBUPgpjbGFzcyBQb29sIHsKICAgICAgICBzdGQ6OnN0YWNrPHVuc2lnbmVkIGxv
bmc+IGZyZWVJRHM7CiAgICAgICAgc3RkOjp2ZWN0b3I8VCAqPiBzdG9yYWdlOwpwdWJsaWM6CiAg
ICAgICAgaW5saW5lIFQqJiBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgbikgeyByZXR1cm4gc3Rv
cmFnZVtuXTsgfQogICAgICAgIGlubGluZSB2b2lkIHJlbGVhc2VTbG90KHVuc2lnbmVkIGxvbmcg
bikgewogICAgICAgICAgICAgICAgZnJlZUlEcy5wdXNoKG4pOwogICAgICAgICAgICAgICAgc3Rv
cmFnZVtuXSA9IDA7CiAgICAgICAgfQogICAgICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NTbG90KCkg
ewogICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzbG90OwogICAgICAgICAgICAgICAgaWYo
ZnJlZUlEcy5lbXB0eSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIG47CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihuPTA7bjwzMjtu
KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlSURzLnB1c2goc3RvcmFn
ZS5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UucHVzaF9i
YWNrKDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBzbG90ID0gZnJlZUlEcy50b3AoKTsKICAgICAgICAgICAgICAgIGZyZWVJRHMu
cG9wKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gc2xvdDsKICAgICAgICB9CiAgICAgICAgc3Rk
OjpsaXN0PFQgKj4gZW51bWVyYXRlKCkgewogICAgICAgICAgICAgICAgc3RkOjpsaXN0PFQgKj4g
aXRlbXM7CgogICAgICAgICAgICAgICAgaW50IG4sbWF4ID0gc3RvcmFnZS5zaXplKCk7CgogICAg
ICAgICAgICAgICAgZm9yKG49MDsgbiA8IG1heDsgbisrKQogICAgICAgICAgICAgICAgICAgICAg
ICBpZihzdG9yYWdlW25dKSBpdGVtcy5wdXNoX2JhY2soc3RvcmFnZVtuXSk7CgogICAgICAgICAg
ICAgICAgcmV0dXJuIGl0ZW1zOwogICAgICAgIH0KICAgICAgICB1bnNpZ25lZCBsb25nIG1heCgp
IHsgcmV0dXJuIHN0b3JhZ2Uuc2l6ZSgpOyB9Cn07Cgp9OwojIDI4ICIuLi8uLi9hcnRzL21jb3Av
ZGlzcGF0Y2hlci5oIiAyCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2lvbWFuYWdlci5oIiAxCiMgMzYg
Ii4uLy4uL2FydHMvbWNvcC9pb21hbmFnZXIuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUu
aCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk
ZS9zeXMvdGltZS5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMg
NDkgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDEgMwojIDUwICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDIgMwoKCgpzdHJ1Y3Qg
dGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fdGltZV90IHR2X3VzZWM7CiAg
fTsKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQ2
ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXpvbmUKICB7CiAgICBpbnQg
dHpfbWludXRlc3dlc3Q7CiAgICBpbnQgdHpfZHN0dGltZTsKICB9OwoKCgoKCgpleHRlcm4gaW50
IGdldHRpbWVvZmRheSAoc3RydWN0IHRpbWV2YWwgKl9fdHYsIHN0cnVjdCB0aW1lem9uZSAqX190
eikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHRpbWVvZmRheSAoX19jb25zdCBzdHJ1Y3Qg
dGltZXZhbCAqX190diwgX19jb25zdCBzdHJ1Y3QgdGltZXpvbmUgKl9fdHopIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IGFkanRpbWUgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fZGVsdGEs
IHN0cnVjdCB0aW1ldmFsICpfX29sZGRlbHRhKSB0aHJvdyAoKTsKCgoKCmVudW0gX19pdGltZXJf
d2hpY2gKICB7CgogICAgSVRJTUVSX1JFQUwgPSAwLAoKCiAgICBJVElNRVJfVklSVFVBTCA9IDEs
CgoKCiAgICBJVElNRVJfUFJPRiA9IDIKCiAgfTsKCgoKc3RydWN0IGl0aW1lcnZhbAogIHsKCiAg
ICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1
ZTsKICB9OwoKCgpleHRlcm4gaW50IGdldGl0aW1lciAoZW51bSBfX2l0aW1lcl93aGljaCBfX3do
aWNoLCBzdHJ1Y3QgaXRpbWVydmFsICpfX3ZhbHVlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHNldGl0aW1lciAoZW51bSBfX2l0aW1lcl93aGljaCBfX3doaWNoLCBfX2NvbnN0IHN0cnVjdCBp
dGltZXJ2YWwgKl9fbmV3LCBzdHJ1Y3QgaXRpbWVydmFsICpfX29sZCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCB1dGltZXMgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3QgdGltZXZhbCBf
X3R2cFsyXSkgdGhyb3cgKCk7CiMgMTQzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwp9CiMg
MzcgIi4uLy4uL2FydHMvbWNvcC9pb21hbmFnZXIuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMSAzCiMgMzggIi4uLy4uL2FydHMvbWNvcC9pb21hbmFnZXIuaCIgMgojIDEgIi91
c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3VuaXN0
ZC5oIiAyIDMKCmV4dGVybiAiQyIgewojIDE3NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXhfb3B0LmgiIDEgMwojIDE3NiAiL3Vzci9pbmNsdWRl
L3VuaXN0ZC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIg
MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmly
b25tZW50cy5oIiAyIDMKIyAxODAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMTkwICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAx
IDMKIyAxOTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMTk5ICIvdXNyL2luY2x1ZGUv
dW5pc3RkLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MiAzCiMgMjM1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKdHlwZWRlZiBfX2ludHB0cl90IGlu
dHB0cl90OwojIDI0OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgYWNjZXNz
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGV1aWRhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAo
KTsKIyAyNzcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBfX2xzZWVr
IChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4
dGVybiBfX29mZl90IGxzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hl
bmNlKSB0aHJvdyAoKTsKIyAyOTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19v
ZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5j
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19jbG9zZSAoaW50IF9fZmQpIHRocm93ICgpOwpl
eHRlcm4gaW50IGNsb3NlIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IF9f
cmVhZCAoaW50IF9fZmQsIHZvaWQgKiBfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKSB0aHJvdyAoKTsK
ZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQgKiBfX2J1Ziwgc2l6ZV90IF9fbmJ5
dGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVfdCBfX3dyaXRlIChpbnQgX19mZCwgX19jb25z
dCB2b2lkICogX19idWYsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gc3NpemVfdCB3cml0
ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqIF9fYnVmLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gc3NpemVfdCBfX3ByZWFkNjQgKGludCBfX2ZkLCB2b2lkICogX19idWYsIHNp
emVfdCBfX25ieXRlcywgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNz
aXplX3QgX19wd3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqIF9fYnVmLCBzaXplX3Qg
X19uLCBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gc3NpemVfdCBwcmVh
ZCAoaW50IF9fZmQsIHZvaWQgKiBfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBfX29mZl90IF9fb2Zm
c2V0KSB0aHJvdyAoKTsKCmV4dGVybiBzc2l6ZV90IHB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qg
dm9pZCAqIF9fYnVmLCBzaXplX3QgX19uLCBfX29mZl90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKIyAz
MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVfdCBwcmVhZDY0IChpbnQg
X19mZCwgdm9pZCAqIF9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmNjRfdCBfX29mZnNldCkg
dGhyb3cgKCk7CgpleHRlcm4gc3NpemVfdCBwd3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9p
ZCAqIF9fYnVmLCBzaXplX3QgX19uLCBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgpOwojIDM0
OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgcGlwZSAoaW50IF9fcGlwZWRl
c1syXSkgdGhyb3cgKCk7CiMgMzU4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVu
c2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CiMgMzY3
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5z
aWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQg
dWFsYXJtICh1bnNpZ25lZCBpbnQgX192YWx1ZSwgdW5zaWduZWQgaW50IF9faW50ZXJ2YWwpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgdXNsZWVwICh1bnNpZ25lZCBpbnQgX191c2Vjb25kcykg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lk
X3QgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9f
dWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
bGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9f
Z3JvdXApIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3QgY2hhciAqX19w
YXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2ZkKSB0aHJvdyAoKTsK
IyA0MTkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gY2hhciAqZ2V0Y3dkIChjaGFy
ICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldF9j
dXJyZW50X2Rpcl9uYW1lICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmdldHdk
IChjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGR1cCAoaW50IF9fZmQpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hhciAqKmVudmlyb247CgoKCgoK
ZXh0ZXJuIGludCBleGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9f
YXJndltdLCBjaGFyICpfX2NvbnN0IF9fZW52cFtdKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IGZleGVjdmUgKGludCBfX2ZkLCBjaGFyICpfX2NvbnN0IF9fYXJndltdLCBjaGFyICpfX2NvbnN0
IF9fZW52cFtdKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFy
ICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGV4ZWNsZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY2wgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2Nv
bnN0IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19j
b25zdCBjaGFyICpfX2ZpbGUsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBleGVjbHAgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9f
YXJnLCAuLi4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBuaWNlIChpbnQgX19pbmMpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX2V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIg
MSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1lLmgiIDMKZW51bQogIHsKICAgIF9Q
Q19MSU5LX01BWCwKCiAgICBfUENfTUFYX0NBTk9OLAoKICAgIF9QQ19NQVhfSU5QVVQsCgogICAg
X1BDX05BTUVfTUFYLAoKICAgIF9QQ19QQVRIX01BWCwKCiAgICBfUENfUElQRV9CVUYsCgogICAg
X1BDX0NIT1dOX1JFU1RSSUNURUQsCgogICAgX1BDX05PX1RSVU5DLAoKICAgIF9QQ19WRElTQUJM
RSwKCiAgICBfUENfU1lOQ19JTywKCiAgICBfUENfQVNZTkNfSU8sCgogICAgX1BDX1BSSU9fSU8s
CgogICAgX1BDX1NPQ0tfTUFYQlVGLAoKICAgIF9QQ19GSUxFU0laRUJJVFMKCiAgfTsKCgplbnVt
CiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RD
SywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJF
QU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBf
U0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklU
WV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywK
CiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBf
U0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBf
U0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01F
U1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9S
WV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAg
ICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBf
U0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoK
ICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1T
X01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAg
IF9TQ19USU1FUl9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1f
TUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAg
X1NDX0NPTExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0Nf
RVhQUl9ORVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgog
ICAgX1NDX0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0Nf
Ml9DX0JJTkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1ND
XzJfRk9SVF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgog
ICAgX1NDX1BJSSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBf
U0NfUElJX0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9T
Q19TRUxFQ1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX1BJSV9JTlRFUk5FVF9TVFJF
QU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBfU0NfUElJX09TSV9DT1RTLAoK
ICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lfTSwKCiAgICBfU0NfVF9JT1Zf
TUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUywK
CiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwKCiAg
ICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01BWCwKCiAgICBfU0NfVEhS
RUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoKICAg
IF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhSRUFEU19NQVgsCgogICAg
X1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpF
LAoKICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVEhSRUFEX1BS
SU9fSU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwKCiAgICBfU0NfVEhSRUFE
X1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNfQ09ORiwKCiAgICBfU0NfTlBS
T0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAgICBfU0NfQVZQSFlTX1BBR0VT
LAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01BWCwKCgogICAgX1NDX1hPUEVO
X1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9VTklY
LAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5fRU5IX0kxOE4sCgogICAgX1ND
X1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAgIF9TQ18yX0NfVkVSU0lPTiwK
CiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoKICAgIF9TQ19YT1BFTl9YUEcz
LAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9CSVQsCgogICAgX1NDX0NIQVJf
TUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01BWCwKCiAgICBfU0NfSU5UX01J
TiwKCiAgICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklULAoKICAgIF9TQ19NQl9MRU5f
TUFYLAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFYLAoKICAgIF9TQ19TQ0hBUl9N
QVgsCgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9NQVgsCgogICAgX1NDX1NIUlRf
TUlOLAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRfTUFYLAoKICAgIF9TQ19VTE9O
R19NQVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05MX0FSR01BWCwKCiAgICBfU0Nf
TkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19OTF9OTUFYLAoKICAgIF9T
Q19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9TQ19YQlM1X0lMUDMyX09G
RjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0NfWEJTNV9MUDY0X09GRjY0
LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hPUEVOX0xFR0FDWSwKCiAg
ICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMKCiAg
fTsKCgoKCgplbnVtCiAgewogICAgX0NTX1BBVEgKCgoKCiAgICAsCiAgICBfQ1NfTEZTX0NGTEFH
UyA9IDEwMDAsCgogICAgX0NTX0xGU19MREZMQUdTLAoKICAgIF9DU19MRlNfTElCUywKCiAgICBf
Q1NfTEZTX0xJTlRGTEFHUywKCiAgICBfQ1NfTEZTNjRfQ0ZMQUdTLAoKICAgIF9DU19MRlM2NF9M
REZMQUdTLAoKICAgIF9DU19MRlM2NF9MSUJTLAoKICAgIF9DU19MRlM2NF9MSU5URkxBR1MKCgoK
CiAgICAsCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTAwLAoKICAgIF9DU19Y
QlM1X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUywK
CiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJf
T0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBf
Q1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElO
VEZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQ
NjRfT0ZGNjRfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NT
X1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NG
TEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9M
UEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElOVEZMQUdTCgoK
ICB9OwojIDQ5OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgpleHRlcm4gbG9uZyBpbnQg
cGF0aGNvbmYgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpl
eHRlcm4gbG9uZyBpbnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgaW50IHN5c2NvbmYgKGludCBfX25hbWUpIHRocm93ICgpOwoKCgpleHRl
cm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgX19nZXRwaWQgKHZvaWQpIHRocm93ICgpOwpl
eHRlcm4gX19waWRfdCBnZXRwaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3BpZF90IGdl
dHBwaWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkg
dGhyb3cgKCk7CiMgNTM0ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3Qg
X19nZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCmV4dGVybiBfX3BpZF90IGdldHBn
aWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9fc2V0cGdpZCAo
X19waWRfdCBfX3BpZCwgX19waWRfdCBfX3BnaWQpIHRocm93ICgpOwpleHRlcm4gaW50IHNldHBn
aWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSB0aHJvdyAoKTsKIyA1NjEgIi91c3Iv
aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwoj
IDU3OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9p
ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBfX3BpZCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IF9fdWlkX3QgZ2V0ZXVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lk
ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lkICh2b2lkKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtd
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBzZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBfX3BpZF90IF9fZm9yayAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBfX3BpZF90
IGZvcmsgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAodm9pZCkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f
YnVmbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc2F0dHkgKGludCBfX2ZkKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgdHR5c2xvdCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IGxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHN5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNo
YXIgKl9fdG8pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19jb25zdCBjaGFy
ICpfX3BhdGgsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cm1kaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fcGlkX3Qg
dGNnZXRwZ3JwIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGlu
dCBfX2ZkLCBfX3BpZF90IF9fcGdycF9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRs
b2dpbiAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGdldGxvZ2luX3IgKGNoYXIgKl9f
bmFtZSwgc2l6ZV90IF9fbmFtZV9sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRsb2dp
biAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDcyNCAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs
dWRlL2dldG9wdC5oIiAzCmV4dGVybiAiQyIgewojIDM2ICIvdXNyL2luY2x1ZGUvZ2V0b3B0Lmgi
IDMKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKIyA1MCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4
dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVybiBpbnQgb3B0
b3B0OwojIDEzNCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgZ2V0b3B0IChp
bnQgX19hcmdjLCBjaGFyICpjb25zdCAqX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7
CiMgMTYzICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKfQojIDcyNSAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAyIDMKIyA3MzMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGdl
dGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgc2V0aG9zdG5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHNldGhvc3RpZCAobG9uZyBpbnQgX19pZCkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBnZXRkb21haW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xl
bikgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpfX25h
bWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnN5bmMgKGludCBfX2Zk
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZoYW5ndXAgKHZvaWQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcmV2b2tlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSkgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNp
emVfdCBfX3NpemUsIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBjaHJvb3QgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGNoYXIgKmdldHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lk
IGVuZHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIHNldHVzZXJzaGVsbCAo
dm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2V0cGFzcyAoX19jb25zdCBjaGFyICpf
X3Byb21wdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwg
aW50IF9fbm9jbG9zZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBpbnQgZ2V0aG9zdGlk
ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN5bmMgKHZvaWQpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBfX2dldHBhZ2VzaXplICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CmV4dGVybiBpbnQgZ2V0cGFnZXNpemUgKHZvaWQpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgdHJ1bmNhdGUgKF9fY29uc3Qg
Y2hhciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKIyA4MjkgIi91c3IvaW5j
bHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHRydW5jYXRlNjQgKF9fY29uc3QgY2hhciAqX19m
aWxlLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnRydW5j
YXRlIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZ0
cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgpIHRocm93ICgpOwojIDg0NSAiL3Vz
ci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBf
X29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6
ZSAodm9pZCkgdGhyb3cgKCk7CiMgODYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJu
IGludCBicmsgKHZvaWQgKiBfX2FkZHIpIHRocm93ICgpOwoKCiMgMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgODY0
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCmV4dGVybiB2b2lkICogX19zYnJrIChw
dHJkaWZmX3QgX19kZWx0YSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkICogc2JyayAocHRyZGlmZl90
IF9fZGVsdGEpIHRocm93ICgpOwojIDg4NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVy
biBsb25nIGludCBzeXNjYWxsIChsb25nIGludCBfX3N5c25vLCAuLi4pIHRocm93ICgpOwojIDkw
NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2ZkLCBp
bnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIHRocm93ICgpOwojIDkxNSAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2
NF90IF9fbGVuKSB0aHJvdyAoKTsKIyA5MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRl
cm4gaW50IF9fbGliY19lbmFibGVfc2VjdXJlOwoKCgoKCgpleHRlcm4gaW50IGZkYXRhc3luYyAo
aW50IF9fZmlsZGVzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjcnlwdCAoX19jb25z
dCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQpIHRocm93ICgpOwoKCmV4dGVybiB2
b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lk
IGVuY3J5cHQgKGNoYXIgKl9fYmxvY2ssIGludCBfX2VkZmxhZykgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiB2b2lkIHN3YWIgKF9fY29uc3Qgdm9pZCAqIF9fZnJvbSwgdm9pZCAqIF9fdG8sIHNzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3Mp
IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpf
X25ldykgdGhyb3cgKCk7CiMgOTk5ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLCB2b2lkICgqX19wYXJl
bnQpICh2b2lkKSwgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgp9CiMgMzkg
Ii4uLy4uL2FydHMvbWNvcC9pb21hbmFnZXIuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvbGlzdCIgMSAzCiMgNDAgIi4uLy4uL2FydHMvbWNvcC9pb21hbmFnZXIuaCIgMgojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3RhY2siIDEgMwojIDQxICIuLi8uLi9hcnRzL21j
b3AvaW9tYW5hZ2VyLmgiIDIKCm5hbWVzcGFjZSBBcnRzIHsKIyA4MCAiLi4vLi4vYXJ0cy9tY29w
L2lvbWFuYWdlci5oIgpzdHJ1Y3QgSU9UeXBlIHsKICAgICAgICBlbnVtIHsgcmVhZCA9IDEsIHdy
aXRlID0gMiwgZXhjZXB0ID0gNCwgcmVlbnRyYW50ID0gOCwgYWxsID0gMTUgfTsKfTsKIyA5MSAi
Li4vLi4vYXJ0cy9tY29wL2lvbWFuYWdlci5oIgpjbGFzcyBJT05vdGlmeSB7CnB1YmxpYzoKCgoK
CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUlPKGludCBmZCwgaW50IHR5cGUpID0gMDsK
fTsKCmNsYXNzIElPV2F0Y2hGRCB7CiAgICAgICAgaW50IF9mZCwgX3R5cGVzOwogICAgICAgIElP
Tm90aWZ5ICpfbm90aWZ5OwoKcHVibGljOgogICAgICAgIElPV2F0Y2hGRChpbnQgZmQsIGludCB0
eXBlcywgSU9Ob3RpZnkgKm5vdGlmeSk7CgogICAgICAgIGlubGluZSBpbnQgZmQoKSB7IHJldHVy
biBfZmQ7IH07CiAgICAgICAgaW5saW5lIGludCB0eXBlcygpIHsgcmV0dXJuIF90eXBlczsgfTsK
ICAgICAgICBpbmxpbmUgSU9Ob3RpZnkgKm5vdGlmeSgpIHsgcmV0dXJuIF9ub3RpZnk7IH07CiAg
ICAgICAgaW5saW5lIHZvaWQgcmVtb3ZlKGludCB0eXBlcykgeyBfdHlwZXMgJj0gfnR5cGVzOyB9
Cn07CiMgMTIzICIuLi8uLi9hcnRzL21jb3AvaW9tYW5hZ2VyLmgiCmNsYXNzIFRpbWVOb3RpZnkg
ewpwdWJsaWM6CgoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVRpbWUoKSA9IDA7Cn07
CgpjbGFzcyBUaW1lV2F0Y2hlciB7CiAgICAgICAgaW50IG1pbGxpc2Vjb25kczsKICAgICAgICBU
aW1lTm90aWZ5ICpfbm90aWZ5OwogICAgICAgIHRpbWV2YWwgbmV4dE5vdGlmeTsKICAgICAgICBi
b29sIGFjdGl2ZSwgZGVzdHJveWVkOwoKICAgICAgICBib29sIGVhcmxpZXIoY29uc3QgdGltZXZh
bCYgcmVmZXJlbmNlKTsKcHVibGljOgogICAgICAgIFRpbWVXYXRjaGVyKGludCBfbWlsbGlzZWNv
bmRzLCBUaW1lTm90aWZ5ICpub3RpZnkpOwoKICAgICAgICBpbmxpbmUgVGltZU5vdGlmeSAqbm90
aWZ5KCkgeyByZXR1cm4gX25vdGlmeTsgfTsKICAgICAgICB0aW1ldmFsIGFkdmFuY2UoY29uc3Qg
dGltZXZhbCYgY3VycmVudFRpbWUpOwogICAgICAgIHZvaWQgZGVzdHJveSgpOwp9OwoKCgoKCmNs
YXNzIElPTWFuYWdlciB7CnB1YmxpYzoKICAgICAgICB2aXJ0dWFsIH5JT01hbmFnZXIoKSB7fTsK
CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NPbmVFdmVudChib29sIGJsb2NraW5nKSA9
IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHJ1bigpID0gMDsKCgoKCiAgICAgICAgdmly
dHVhbCB2b2lkIHRlcm1pbmF0ZSgpID0gMDsKIyAxODMgIi4uLy4uL2FydHMvbWNvcC9pb21hbmFn
ZXIuaCIKICAgICAgICB2aXJ0dWFsIHZvaWQgd2F0Y2hGRChpbnQgZmQsIGludCB0eXBlcywgSU9O
b3RpZnkgKm5vdGlmeSkgPSAwOwoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKElPTm90
aWZ5ICpub3RpZnksIGludCB0eXBlcykgPSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBh
ZGRUaW1lcihpbnQgbWlsbGlzZWNvbmRzLCBUaW1lTm90aWZ5ICpub3RpZnkpID0gMDsKCgoKCiAg
ICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbWVyKFRpbWVOb3RpZnkgKm5vdGlmeSkgPSAwOwp9
OwoKY2xhc3MgU3RkSU9NYW5hZ2VyIDogcHVibGljIElPTWFuYWdlciB7CnByb3RlY3RlZDoKICAg
ICAgICBzdGQ6Omxpc3Q8SU9XYXRjaEZEICo+IGZkTGlzdDsKICAgICAgICBzdGQ6Omxpc3Q8VGlt
ZVdhdGNoZXIgKj4gdGltZUxpc3Q7CiAgICAgICAgc3RkOjpzdGFjazwgc3RkOjpwYWlyPElPV2F0
Y2hGRCAqLGludD4gPiBub3RpZnlTdGFjazsKCiAgICAgICAgYm9vbCB0ZXJtaW5hdGVkOwoKICAg
ICAgICBib29sIGZkTGlzdENoYW5nZWQ7CiAgICAgICAgYm9vbCB0aW1lTGlzdENoYW5nZWQ7CiAg
ICAgICAgZmRfc2V0IHJlYWRmZHMsIHdyaXRlZmRzLCBleGNlcHRmZHM7CiAgICAgICAgZmRfc2V0
IHJlZW50cmFudF9yZWFkZmRzLCByZWVudHJhbnRfd3JpdGVmZHMsIHJlZW50cmFudF9leGNlcHRm
ZHM7CiAgICAgICAgaW50IG1heGZkOwoKICAgICAgICBpbnQgbGV2ZWw7CgpwdWJsaWM6CiAgICAg
ICAgU3RkSU9NYW5hZ2VyKCk7CgogICAgICAgIHZvaWQgcHJvY2Vzc09uZUV2ZW50KGJvb2wgYmxv
Y2tpbmcpOwogICAgICAgIHZvaWQgcnVuKCk7CiAgICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKICAg
ICAgICB2b2lkIHdhdGNoRkQoaW50IGZkLCBpbnQgdHlwZXMsIElPTm90aWZ5ICpub3RpZnkpOwog
ICAgICAgIHZvaWQgcmVtb3ZlKElPTm90aWZ5ICpub3RpZnksIGludCB0eXBlcyk7CiAgICAgICAg
dm9pZCBhZGRUaW1lcihpbnQgbWlsbGlzZWNvbmRzLCBUaW1lTm90aWZ5ICpub3RpZnkpOwogICAg
ICAgIHZvaWQgcmVtb3ZlVGltZXIoVGltZU5vdGlmeSAqbm90aWZ5KTsKfTsKCn07CiMgMjkgIi4u
Ly4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgiIDIKIyAxICIuLi8uLi9hcnRzL21jb3AvdGNwc2Vy
dmVyLmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9tY29wL3RjcHNlcnZlci5oIgojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAxIDMKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL3RjcHNl
cnZlci5oIiAyCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2lvbWFuYWdlci5oIiAxCiMgMjggIi4uLy4u
L2FydHMvbWNvcC90Y3BzZXJ2ZXIuaCIgMgojIDM2ICIuLi8uLi9hcnRzL21jb3AvdGNwc2VydmVy
LmgiCm5hbWVzcGFjZSBBcnRzIHsKCmNsYXNzIERpc3BhdGNoZXI7CgpjbGFzcyBUQ1BTZXJ2ZXIg
OnB1YmxpYyBJT05vdGlmeSB7CnByb3RlY3RlZDoKICAgICAgICBEaXNwYXRjaGVyICpkaXNwYXRj
aGVyOwoKICAgICAgICBpbnQgdGhlU29ja2V0OwogICAgICAgIGludCB0aGVQb3J0OwogICAgICAg
IGJvb2wgc29ja2V0T2s7CiAgICAgICAgYm9vbCBpbml0U29ja2V0KCk7CgpwdWJsaWM6CiAgICAg
ICAgVENQU2VydmVyKERpc3BhdGNoZXIgKmRpc3BhdGNoZXIpOwogICAgICAgIHZpcnR1YWwgflRD
UFNlcnZlcigpOwogICAgICAgIGJvb2wgcnVubmluZygpOwogICAgICAgIHN0ZDo6c3RyaW5nIHVy
bCgpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldFBvcnQoaW50IHBvcnQpOwoKICAgICAgICB2b2lk
IG5vdGlmeUlPKGludCBmZCwgaW50IHR5cGVzKTsKfTsKCn07CiMgMzAgIi4uLy4uL2FydHMvbWNv
cC9kaXNwYXRjaGVyLmgiIDIKIyAxICIuLi8uLi9hcnRzL21jb3AvdW5peHNlcnZlci5oIiAxCiMg
MzMgIi4uLy4uL2FydHMvbWNvcC91bml4c2VydmVyLmgiCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9zdHJpbmciIDEgMwojIDM0ICIuLi8uLi9hcnRzL21jb3AvdW5peHNlcnZlci5oIiAy
CiMgMSAiLi4vLi4vYXJ0cy9tY29wL2lvbWFuYWdlci5oIiAxCiMgMzUgIi4uLy4uL2FydHMvbWNv
cC91bml4c2VydmVyLmgiIDIKCm5hbWVzcGFjZSBBcnRzIHsKCmNsYXNzIERpc3BhdGNoZXI7Cgpj
bGFzcyBVbml4U2VydmVyIDpwdWJsaWMgSU9Ob3RpZnkgewpwcm90ZWN0ZWQ6CiAgICAgICAgRGlz
cGF0Y2hlciAqZGlzcGF0Y2hlcjsKCiAgICAgICAgc3RkOjpzdHJpbmcgeHNlcnZlcnBhdGg7CiAg
ICAgICAgaW50IHRoZVNvY2tldDsKICAgICAgICBib29sIHNvY2tldE9rOwogICAgICAgIGJvb2wg
aW5pdFNvY2tldChzdGQ6OnN0cmluZyBzZXJ2ZXJJRCk7CgpwdWJsaWM6CiAgICAgICAgVW5peFNl
cnZlcihEaXNwYXRjaGVyICpkaXNwYXRjaGVyLCBzdGQ6OnN0cmluZyBzZXJ2ZXJJRCk7CiAgICAg
ICAgdmlydHVhbCB+VW5peFNlcnZlcigpOwogICAgICAgIGJvb2wgcnVubmluZygpOwogICAgICAg
IHN0ZDo6c3RyaW5nIHVybCgpOwoKICAgICAgICB2b2lkIG5vdGlmeUlPKGludCBmZCwgaW50IHR5
cGVzKTsKfTsKCn07CiMgMzEgIi4uLy4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgiIDIKIyAxICIu
Li8uLi9hcnRzL21jb3AvY29ubmVjdGlvbi5oIiAxCiMgMjYgIi4uLy4uL2FydHMvbWNvcC9jb25u
ZWN0aW9uLmgiCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2J1ZmZlci5oIiAxCiMgMjcgIi4uLy4uL2Fy
dHMvbWNvcC9jb25uZWN0aW9uLmgiIDIKIyAzOCAiLi4vLi4vYXJ0cy9tY29wL2Nvbm5lY3Rpb24u
aCIKbmFtZXNwYWNlIEFydHMgewoKY2xhc3MgQ29ubmVjdGlvblByaXZhdGU7CgpjbGFzcyBDb25u
ZWN0aW9uIHsKcHJpdmF0ZToKICAgICAgICBDb25uZWN0aW9uUHJpdmF0ZSAqZDsKcHVibGljOgog
ICAgICAgIGVudW0gQ29ubmVjdGlvblN0YXRlIHsKICAgICAgICAgICAgICAgIHVua25vd24gPSAw
LAogICAgICAgICAgICAgICAgZXhwZWN0U2VydmVySGVsbG8gPSAxLAogICAgICAgICAgICAgICAg
ZXhwZWN0Q2xpZW50SGVsbG8gPSAyLAogICAgICAgICAgICAgICAgZXhwZWN0QXV0aEFjY2VwdCA9
IDMsCiAgICAgICAgICAgICAgICBlc3RhYmxpc2hlZCA9IDQKICAgICAgICB9Owpwcm90ZWN0ZWQ6
CiAgICAgICAgQnVmZmVyICpyY2J1ZjsKICAgICAgICBib29sIHJlY2VpdmVIZWFkZXI7CiAgICAg
ICAgbG9uZyByZW1haW5pbmc7CiAgICAgICAgbG9uZyBtZXNzYWdlVHlwZTsKICAgICAgICBDb25u
ZWN0aW9uU3RhdGUgX2Nvbm5TdGF0ZTsKICAgICAgICBzdGQ6OnN0cmluZyBzZXJ2ZXJJRDsKICAg
ICAgICBzdGQ6OnN0cmluZyBfY29va2llOwoKICAgICAgICBsb25nIF9yZWZDbnQ7CiMgNzIgIi4u
Ly4uL2FydHMvbWNvcC9jb25uZWN0aW9uLmgiCiAgICAgICAgdm9pZCBpbml0UmVjZWl2ZSgpOwog
ICAgICAgIHZvaWQgcmVjZWl2ZSh1bnNpZ25lZCBjaGFyICpkYXRhLCBsb25nIGxlbik7CgogICAg
ICAgIHZpcnR1YWwgfkNvbm5lY3Rpb24oKTsKcHVibGljOgogICAgICAgIENvbm5lY3Rpb24oKTsK
CiAgICAgICAgaW5saW5lIHZvaWQgc2V0U2VydmVySUQoc3RkOjpzdHJpbmcgX3NlcnZlcklEKSB7
IHNlcnZlcklEID0gX3NlcnZlcklEOyB9CiAgICAgICAgaW5saW5lIGJvb2wgaXNDb25uZWN0ZWQo
c3RkOjpzdHJpbmcgcykgeyByZXR1cm4gKHNlcnZlcklEID09IHMpOyB9CiAgICAgICAgaW5saW5l
IHZvaWQgc2V0Q29ublN0YXRlKENvbm5lY3Rpb25TdGF0ZSBjcykgeyBfY29ublN0YXRlID0gY3M7
IH07CgogICAgICAgIGlubGluZSBzdGQ6OnN0cmluZyBjb29raWUoKSB7IHJldHVybiBfY29va2ll
OyB9CiAgICAgICAgdm9pZCBzZXRDb29raWUoc3RkOjpzdHJpbmcgYykgeyBfY29va2llID0gYzsg
fQogICAgICAgIHZvaWQgc2V0SGludHMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBo
aW50cyk7CiAgICAgICAgc3RkOjpzdHJpbmcgZmluZEhpbnQoY29uc3Qgc3RkOjpzdHJpbmcmIG5h
bWUpOwoKICAgICAgICBpbmxpbmUgQ29ubmVjdGlvblN0YXRlIGNvbm5TdGF0ZSgpIHsgcmV0dXJu
IF9jb25uU3RhdGU7IH07CiAgICAgICAgdmlydHVhbCB2b2lkIGRyb3AoKSA9IDA7CiAgICAgICAg
dmlydHVhbCBib29sIGJyb2tlbigpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcVNlbmRCdWZm
ZXIoQnVmZmVyICpidWZmZXIpID0gMDsKCiAgICAgICAgdm9pZCBfcmVsZWFzZSgpOwogICAgICAg
IHZvaWQgX2NvcHkoKTsKfTsKCn07CiMgMzIgIi4uLy4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgi
IDIKIyAxICIuLi8uLi9hcnRzL21jb3Avbm90aWZpY2F0aW9uLmgiIDEKIyAyNiAiLi4vLi4vYXJ0
cy9tY29wL25vdGlmaWNhdGlvbi5oIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvcXVl
dWUiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3F1ZXVlIiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9xdWV1ZS5oIiAxIDMKIyAzMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9xdWV1ZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAz
MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9xdWV1ZS5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDMzICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3F1ZXVlLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgMzQgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfcXVldWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfcXVldWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM2ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3F1ZXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX3F1ZXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9xdWV1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2RlcXVlLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2RlcXVlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2Vw
dF9jaGVjay5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9k
ZXF1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJh
dG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfZGVxdWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2RlcXVlLmgiIDIgMwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX3F1ZXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfQXJn
LCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBh
cmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlf
ZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVm
IF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlw
ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
X1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U
cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsg
fQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQo
cGx1czxfVHA+KSB7CiAgcmV0dXJuIF9UcCgwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxp
bmUgX1RwIGlkZW50aXR5X2VsZW1lbnQobXVsdGlwbGllczxfVHA+KSB7CiAgcmV0dXJuIF9UcCgx
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9U
cD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194
OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg
Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs
X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBi
b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl
dHVybiBfX3ggPCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVy
X2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggPj0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9f
eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJl
dHVybiAhX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlf
bmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJn
dW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJs
aWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9w
cmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6
YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJl
ZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFyeV9u
ZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+
CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg
X1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsK
cHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6
IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGlj
YXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5
cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewog
ICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1By
ZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJl
ZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3By
ZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMXN0CiAgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVz
dWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25z
dCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246
OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9
CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5
cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1
bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50
X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9P
cGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gp
CnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0Fy
ZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUo
X194KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVu
dF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl
c3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVy
YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNv
bnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv
bjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kp
IHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0
IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl
c3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVu
dF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxf
T3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194
KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBf
QXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlw
ZShfX3gpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRp
b24yPgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h
bWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPgp7CnByb3RlY3RlZDoKICBfT3BlcmF0
aW9uMSBfTV9mbjE7CiAgX09wZXJhdGlvbjIgX01fZm4yOwpwdWJsaWM6CiAgdW5hcnlfY29tcG9z
ZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195KQogICAgOiBf
TV9mbjEoX194KSwgX01fZm4yKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0
X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90
eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9mbjEoX01fZm4yKF9feCkpOwogIH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CmlubGluZSB1
bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPgpjb21wb3NlMShjb25zdCBfT3Bl
cmF0aW9uMSYgX19mbjEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX2ZuMikKewogIHJldHVybiB1bmFy
eV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX2ZuMSwgX19mbjIpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0
aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBl
bmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVy
YXRpb24xIF9NX2ZuMTsKICBfT3BlcmF0aW9uMiBfTV9mbjI7CiAgX09wZXJhdGlvbjMgX01fZm4z
OwpwdWJsaWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3Qg
X09wZXJhdGlvbjImIF9feSwKICAgICAgICAgICAgICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX196
KQogICAgOiBfTV9mbjEoX194KSwgX01fZm4yKF9feSksIF9NX2ZuMyhfX3opIHsgfQogIHR5cGVu
YW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUg
X09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX2Zu
MShfTV9mbjIoX194KSwgX01fZm4zKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3Bl
cmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgppbmxpbmUgYmlu
YXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRpb24yLCBfT3BlcmF0aW9uMz4KY29tcG9z
ZTIoY29uc3QgX09wZXJhdGlvbjEmIF9fZm4xLCBjb25zdCBfT3BlcmF0aW9uMiYgX19mbjIsCiAg
ICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX2ZuMykKewogIHJldHVybiBiaW5hcnlfY29tcG9z
ZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMixfT3BlcmF0aW9uMz4KICAgIChfX2ZuMSwgX19mbjIs
IF9fZm4zKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBv
aW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jl
c3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBw
b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5
X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3Vs
dCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX3Vu
YXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZykp
CnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PihfX3gp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0Pgpj
bGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIp
KF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkg
e30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gp
KF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0
b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9f
eCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNs
YXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJn
MixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1
cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsK
fQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X1RwLF9UcD4gewogIF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyBy
ZXR1cm4gX194OyB9CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25z
dCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBpZGVudGl0
eSA6IHB1YmxpYyBfSWRlbnRpdHk8X1RwPiB7fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0
cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBf
UGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRv
cigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0
IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Q
YWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlw
ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBl
JiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwog
IH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3Qg
X1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0MXN0IDogcHVibGljIF9TZWxlY3Qxc3Q8X1Bh
aXI+IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3QybmQgOiBwdWJsaWMg
X1NlbGVjdDJuZDxfUGFpcj4ge307CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJn
Mj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0Fy
ZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBjb25zdCBf
QXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBj
bGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
QXJnMSwgX0FyZzIsIF9BcmcyPiB7CiAgX0FyZzIgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNv
bnN0IF9BcmcyJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2plY3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qx
c3Q8X0FyZzEsIF9BcmcyPiB7fTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+
CnN0cnVjdCBwcm9qZWN0Mm5kIDogcHVibGljIF9Qcm9qZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBfQ29uc3RhbnRfdm9pZF9mdW4g
ewogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICByZXN1bHRfdHlwZSBfTV92YWw7Cgog
IF9Db25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3ZhbChfX3Yp
IHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiBfTV92
YWw7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQ+CnN0cnVj
dCBfQ29uc3RhbnRfdW5hcnlfZnVuIHsKICB0eXBlZGVmIF9Bcmd1bWVudCBhcmd1bWVudF90eXBl
OwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICByZXN1bHRfdHlwZSBfTV92YWw7Cgog
IF9Db25zdGFudF91bmFyeV9mdW4oY29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfTV92YWwoX192
KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9Bcmd1bWVudCYpIGNv
bnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNz
IF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Db25zdGFudF9iaW5hcnlfZnVuIHsKICB0eXBl
ZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJn
dW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgX1Jlc3VsdCBfTV92
YWw7CgogIF9Db25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwo
X192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29u
c3QgX0FyZzImKSBjb25zdCB7CiAgICByZXR1cm4gX01fdmFsOwogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfUmVzdWx0PgpzdHJ1Y3QgY29uc3RhbnRfdm9pZF9mdW4gOiBwdWJsaWMgX0NvbnN0YW50
X3ZvaWRfZnVuPF9SZXN1bHQ+IHsKICBjb25zdGFudF92b2lkX2Z1bihjb25zdCBfUmVzdWx0JiBf
X3YpIDogX0NvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdikge30KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1Jlc3VsdCwKICAgICAgICAgIGNsYXNzIF9Bcmd1bWVudCA9IF9SZXN1bHQ+CnN0cnVj
dCBjb25zdGFudF91bmFyeV9mdW4gOiBwdWJsaWMgX0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0
LCBfQXJndW1lbnQ+CnsKICBjb25zdGFudF91bmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KQog
ICAgOiBfQ29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsIF9Bcmd1bWVudD4oX192KSB7fQp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LAogICAgICAgICAgY2xhc3MgX0FyZzEgPSBfUmVzdWx0
LAogICAgICAgICAgY2xhc3MgX0FyZzIgPSBfQXJnMT4Kc3RydWN0IGNvbnN0YW50X2JpbmFyeV9m
dW4KICA6IHB1YmxpYyBfQ29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LCBfQXJnMSwgX0FyZzI+
CnsKICBjb25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikKICAgIDogX0NvbnN0
YW50X2JpbmFyeV9mdW48X1Jlc3VsdCwgX0FyZzEsIF9BcmcyPihfX3YpIHt9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+IGNvbnN0
YW50MChjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF92b2lkX2Z1bjxf
UmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3Rh
bnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4gY29uc3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9f
dmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFs
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF9iaW5hcnlfZnVu
PF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0Pgpjb25zdGFudDIoY29uc3QgX1Jlc3VsdCYgX192YWwp
CnsKICByZXR1cm4gY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4o
X192YWwpOwp9CgoKCmNsYXNzIHN1YnRyYWN0aXZlX3JuZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4gewpwcml2YXRlOgogIHVuc2lnbmVkIGludCBf
TV90YWJsZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4MTsKICBzaXplX3QgX01faW5kZXgyOwpwdWJs
aWM6CiAgdW5zaWduZWQgaW50IG9wZXJhdG9yKCkodW5zaWduZWQgaW50IF9fbGltaXQpIHsKICAg
IF9NX2luZGV4MSA9IChfTV9pbmRleDEgKyAxKSAlIDU1OwogICAgX01faW5kZXgyID0gKF9NX2lu
ZGV4MiArIDEpICUgNTU7CiAgICBfTV90YWJsZVtfTV9pbmRleDFdID0gX01fdGFibGVbX01faW5k
ZXgxXSAtIF9NX3RhYmxlW19NX2luZGV4Ml07CiAgICByZXR1cm4gX01fdGFibGVbX01faW5kZXgx
XSAlIF9fbGltaXQ7CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemUodW5zaWduZWQgaW50IF9fc2Vl
ZCkKICB7CiAgICB1bnNpZ25lZCBpbnQgX19rID0gMTsKICAgIF9NX3RhYmxlWzU0XSA9IF9fc2Vl
ZDsKICAgIHNpemVfdCBfX2k7CiAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU0OyBfX2krKykgewog
ICAgICAgIHNpemVfdCBfX2lpID0gKDIxICogKF9faSArIDEpICUgNTUpIC0gMTsKICAgICAgICBf
TV90YWJsZVtfX2lpXSA9IF9fazsKICAgICAgICBfX2sgPSBfX3NlZWQgLSBfX2s7CiAgICAgICAg
X19zZWVkID0gX01fdGFibGVbX19paV07CiAgICB9CiAgICBmb3IgKGludCBfX2xvb3AgPSAwOyBf
X2xvb3AgPCA0OyBfX2xvb3ArKykgewogICAgICAgIGZvciAoX19pID0gMDsgX19pIDwgNTU7IF9f
aSsrKQogICAgICAgICAgICBfTV90YWJsZVtfX2ldID0gX01fdGFibGVbX19pXSAtIF9NX3RhYmxl
WygxICsgX19pICsgMzApICUgNTVdOwogICAgfQogICAgX01faW5kZXgxID0gMDsKICAgIF9NX2lu
ZGV4MiA9IDMxOwogIH0KCiAgc3VidHJhY3RpdmVfcm5nKHVuc2lnbmVkIGludCBfX3NlZWQpIHsg
X01faW5pdGlhbGl6ZShfX3NlZWQpOyB9CiAgc3VidHJhY3RpdmVfcm5nKCkgeyBfTV9pbml0aWFs
aXplKDE2MTgwMzM5OHUpOyB9Cn07CiMgNTMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xh
c3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7
fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2Yp
KCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1
bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3Bl
cmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0K
cHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVu
Y3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAo
X1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19y
KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq
X01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0
X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGlj
OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25z
dCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25z
dCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko
KSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0
PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBj
b25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6
Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29u
c3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qo
X1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3Bl
cmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19w
LT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3Mg
bWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBj
b25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq
X01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBf
QXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qo
X1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90
KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShf
VHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6
Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8
dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0
KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0
IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBt
ZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAg
dm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0
X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9p
ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6Oipf
X3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N
X2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBt
ZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCos
X0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9f
cGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9B
cmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1Rw
OjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21l
bV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQog
IHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+
Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsK
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90
PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9p
ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZiko
X0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBf
X3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N
X2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29u
c3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9y
ZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p
ZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9m
KShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoK
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9S
ZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8
X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGlu
ZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNv
bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxh
dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+
IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90
PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxp
bmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoq
X19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9f
Zik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGlu
ZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJn
KSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVu
MV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkK
ICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9y
ZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQog
IHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVu
MV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9Bcmcp
IGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9f
Zik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGlu
ZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0Fy
ZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1
bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0
KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4x
X3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9Bcmcp
KQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1f
ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShf
QXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJn
PihfX2YpOyB9Cgp9CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfcXVl
dWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9xdWV1ZS5o
IiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9xdWV1ZS5oIiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAz
CiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcXVldWUuaCIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9T
ZXF1ZW5jZSA9IGRlcXVlPF9UcD4gPgpjbGFzcyBxdWV1ZTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9TZXE+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcXVldWU8X1RwLCBfU2Vx
PiYsIGNvbnN0IHF1ZXVlPF9UcCwgX1NlcT4mKTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9TZXE+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBxdWV1ZTxfVHAsIF9TZXE+JiwgY29u
c3QgcXVldWU8X1RwLCBfU2VxPiYpOwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9TZXF1
ZW5jZT4KY2xhc3MgcXVldWUKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHR5cGVkZWYg
dHlwZW5hbWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlIF9TZXF1ZW5jZV92YWx1ZV90eXBlOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxLCBjbGFzcyBfU2VxMT4KICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBxdWV1ZTxfVHAxLCBfU2VxMT4mLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXVlPF9UcDEsIF9TZXExPiYpOwogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxLCBjbGFzcyBfU2VxMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IHF1
ZXVlPF9UcDEsIF9TZXExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWV1ZTxf
VHAxLCBfU2VxMT4mKTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjp2YWx1
ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnNpemVfdHlw
ZSBzaXplX3R5cGU7CiAgdHlwZWRlZiBfU2VxdWVuY2UgY29udGFpbmVyX3R5cGU7CgogIHR5cGVk
ZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwpwcm90ZWN0
ZWQ6CiAgX1NlcXVlbmNlIGM7CnB1YmxpYzoKICBleHBsaWNpdCBxdWV1ZShjb25zdCBfU2VxdWVu
Y2UmIF9fYyA9IF9TZXF1ZW5jZSgpKSA6IGMoX19jKSB7fQoKICBib29sIGVtcHR5KCkgY29uc3Qg
eyByZXR1cm4gYy5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBj
LnNpemUoKTsgfQogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuIGMuZnJvbnQoKTsgfQogIGNv
bnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuIGMuZnJvbnQoKTsgfQogIHJlZmVy
ZW5jZSBiYWNrKCkgeyByZXR1cm4gYy5iYWNrKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygp
IGNvbnN0IHsgcmV0dXJuIGMuYmFjaygpOyB9CiAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUm
IF9feCkgeyBjLnB1c2hfYmFjayhfX3gpOyB9CiAgdm9pZCBwb3AoKSB7IGMucG9wX2Zyb250KCk7
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9TZXF1ZW5jZT4KYm9vbApvcGVyYXRv
cj09KGNvbnN0IHF1ZXVlPF9UcCwgX1NlcXVlbmNlPiYgX194LCBjb25zdCBxdWV1ZTxfVHAsIF9T
ZXF1ZW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYyA9PSBfX3kuYzsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX1NlcXVlbmNlPgpib29sCm9wZXJhdG9yPChjb25zdCBxdWV1ZTxfVHAs
IF9TZXF1ZW5jZT4mIF9feCwgY29uc3QgcXVldWU8X1RwLCBfU2VxdWVuY2U+JiBfX3kpCnsKICBy
ZXR1cm4gX194LmMgPCBfX3kuYzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcXVl
bmNlPgpib29sCm9wZXJhdG9yIT0oY29uc3QgcXVldWU8X1RwLCBfU2VxdWVuY2U+JiBfX3gsIGNv
bnN0IHF1ZXVlPF9UcCwgX1NlcXVlbmNlPiYgX195KQp7CiAgcmV0dXJuICEoX194ID09IF9feSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9TZXF1ZW5jZT4KYm9vbApvcGVyYXRvcj4o
Y29uc3QgcXVldWU8X1RwLCBfU2VxdWVuY2U+JiBfX3gsIGNvbnN0IHF1ZXVlPF9UcCwgX1NlcXVl
bmNlPiYgX195KQp7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX1NlcXVlbmNlPgpib29sCm9wZXJhdG9yPD0oY29uc3QgcXVldWU8X1RwLCBfU2VxdWVu
Y2U+JiBfX3gsIGNvbnN0IHF1ZXVlPF9UcCwgX1NlcXVlbmNlPiYgX195KQp7CiAgcmV0dXJuICEo
X195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcXVlbmNlPgpib29s
Cm9wZXJhdG9yPj0oY29uc3QgcXVldWU8X1RwLCBfU2VxdWVuY2U+JiBfX3gsIGNvbnN0IHF1ZXVl
PF9UcCwgX1NlcXVlbmNlPiYgX195KQp7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9TZXF1ZW5jZSA9IHZlY3RvcjxfVHA+LAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVf
dHlwZT4gPgpjbGFzcyBwcmlvcml0eV9xdWV1ZQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlIF9TZXF1ZW5jZV92YWx1ZV90eXBlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h
bWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
U2VxdWVuY2U6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiBfU2VxdWVuY2UgY29udGFp
bmVyX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpyZWZlcmVuY2UgcmVmZXJl
bmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3Rf
cmVmZXJlbmNlOwpwcm90ZWN0ZWQ6CiAgX1NlcXVlbmNlIGM7CiAgX0NvbXBhcmUgY29tcDsKcHVi
bGljOgogIGV4cGxpY2l0IHByaW9yaXR5X3F1ZXVlKGNvbnN0IF9Db21wYXJlJiBfX3ggPSBfQ29t
cGFyZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9TZXF1ZW5jZSYgX19zID0g
X1NlcXVlbmNlKCkpCiAgICA6IGMoX19zKSwgY29tcChfX3gpCiAgICB7IG1ha2VfaGVhcChjLmJl
Z2luKCksIGMuZW5kKCksIGNvbXApOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICBwcmlvcml0eV9xdWV1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9feCA9IF9Db21wYXJl
KCksCiAgICAgICAgICAgICAgICAgY29uc3QgX1NlcXVlbmNlJiBfX3MgPSBfU2VxdWVuY2UoKSkK
ICA6IGMoX19zKSwgY29tcChfX3gpCiAgewogICAgYy5pbnNlcnQoYy5lbmQoKSwgX19maXJzdCwg
X19sYXN0KTsKICAgIG1ha2VfaGVhcChjLmJlZ2luKCksIGMuZW5kKCksIGNvbXApOwogIH0KCiAg
Ym9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGMuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gYy5zaXplKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgdG9wKCkgY29u
c3QgeyByZXR1cm4gYy5mcm9udCgpOyB9CiAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmIF9f
eCkgewogICAgICAgICAgICAgIHsKICAgICAgYy5wdXNoX2JhY2soX194KTsKICAgICAgcHVzaF9o
ZWFwKGMuYmVnaW4oKSwgYy5lbmQoKSwgY29tcCk7CiAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICB9CiAgdm9pZCBwb3AoKSB7CiAgICAgICAgICAgICAgewogICAgICBwb3BfaGVh
cChjLmJlZ2luKCksIGMuZW5kKCksIGNvbXApOwogICAgICBjLnBvcF9iYWNrKCk7CiAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB9Cn07CgoKCn0KIyA0MSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9xdWV1ZS5oIiAyIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9xdWV1ZSIgMiAzCiMgMjcgIi4uLy4uL2FydHMvbWNvcC9ub3RpZmljYXRpb24u
aCIgMgoKbmFtZXNwYWNlIEFydHMgewojIDQxICIuLi8uLi9hcnRzL21jb3Avbm90aWZpY2F0aW9u
LmgiCnN0cnVjdCBOb3RpZmljYXRpb247CnR5cGVkZWYgdm9pZCAoKk5vdGlmaWNhdGlvbkRlc3Ry
b3lGdW5jdGlvbikoY29uc3QgTm90aWZpY2F0aW9uJiBuKTsKCnN0cnVjdCBOb3RpZmljYXRpb24g
ewogICAgICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNsaWVudCAqcmVjZWl2ZXI7CiAgICAgICAgaW50
IElEOwogICAgICAgIHZvaWQgKmRhdGE7CiAgICAgICAgdm9pZCAqaW50ZXJuYWw7CgogICAgICAg
IHZvaWQgc2V0RGVzdHJveShOb3RpZmljYXRpb25EZXN0cm95RnVuY3Rpb24gZGVzdHJveSk7Cn07
CgpjbGFzcyBOb3RpZmljYXRpb25DbGllbnQgewpwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lk
IG5vdGlmeShjb25zdCBOb3RpZmljYXRpb24mIHdtKTsKfTsKCmNsYXNzIE5vdGlmaWNhdGlvbk1h
bmFnZXJQcml2YXRlOwpjbGFzcyBOb3RpZmljYXRpb25NYW5hZ2VyIHsKcHJpdmF0ZToKICAgICAg
ICBOb3RpZmljYXRpb25NYW5hZ2VyUHJpdmF0ZSAqZDsKcHJvdGVjdGVkOgogICAgICAgIHN0ZDo6
cXVldWU8Tm90aWZpY2F0aW9uPiB0b2RvOwogICAgICAgIHN0YXRpYyBOb3RpZmljYXRpb25NYW5h
Z2VyICppbnN0YW5jZTsKCnB1YmxpYzoKICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyKCk7CiAg
ICAgICAgfk5vdGlmaWNhdGlvbk1hbmFnZXIoKTsKCiAgICAgICAgc3RhdGljIGlubGluZSBOb3Rp
ZmljYXRpb25NYW5hZ2VyICp0aGUoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgc2VuZChOb3RpZmljYXRpb24g
d20pCiAgICAgICAgewogICAgICAgICAgICAgICAgdG9kby5wdXNoKHdtKTsKICAgICAgICB9CiAg
ICAgICAgaW5saW5lIGJvb2wgcGVuZGluZygpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuICF0b2RvLmVtcHR5KCk7CiAgICAgICAgfQogICAgICAgIGJvb2wgcnVuKCk7CiAgICAgICAg
dm9pZCByZW1vdmVDbGllbnQoTm90aWZpY2F0aW9uQ2xpZW50ICpjbGllbnQpOwoKfTsKCn07CiMg
MzMgIi4uLy4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9kZXF1ZSIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZGVx
dWUiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2RlcXVlLmgiIDEg
MwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2RlcXVlLmgiIDMKCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAog
IF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9p
ZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJv
d19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5f
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVu
dChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
dW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3Nf
ZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfZGVxdWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9kZXF1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2FsbG9jLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2RlcXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29u
c3RydWN0LmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Rl
cXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0
aWFsaXplZC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9k
ZXF1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2RlcXVl
LmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2RlcXVlLmgi
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAx
IDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw
ZXMuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUu
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9i
YXNlX2Z1bmNzLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2RlcXVlLmgiIDIgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Rl
cXVlLmgiIDIgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2RlcXVlIiAyIDMKIyAz
NSAiLi4vLi4vYXJ0cy9tY29wL2Rpc3BhdGNoZXIuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvc3RhY2siIDEgMwojIDM2ICIuLi8uLi9hcnRzL21jb3AvZGlzcGF0Y2hlci5oIiAy
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDM3ICIuLi8uLi9h
cnRzL21jb3AvZGlzcGF0Y2hlci5oIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9s
aXN0IiAxIDMKIyAzOCAiLi4vLi4vYXJ0cy9tY29wL2Rpc3BhdGNoZXIuaCIgMgojIDQ2ICIuLi8u
Li9hcnRzL21jb3AvZGlzcGF0Y2hlci5oIgpuYW1lc3BhY2UgQXJ0cyB7CgpjbGFzcyBPYmplY3RS
ZWZlcmVuY2U7CmNsYXNzIEZsb3dTeXN0ZW1faW1wbDsKY2xhc3MgR2xvYmFsQ29tbTsKY2xhc3Mg
SW50ZXJmYWNlUmVwbzsKY2xhc3MgT2JqZWN0TWFuYWdlcjsKY2xhc3MgT2JqZWN0X3NrZWw7CmNs
YXNzIFJlZmVyZW5jZUNsZWFuOwpjbGFzcyBEZWxheWVkUmV0dXJuOwoKZXh0ZXJuICJDIiB7CiAg
dHlwZWRlZiB2b2lkICgqbWNvcF9zaWdoYW5kbGVyKShpbnQpOwp9CgpjbGFzcyBEaXNwYXRjaGVy
IHsKcHJpdmF0ZToKICAgICAgICBjbGFzcyBEaXNwYXRjaGVyUHJpdmF0ZSAqZDsKCnByb3RlY3Rl
ZDoKICAgICAgICBzdGF0aWMgRGlzcGF0Y2hlciAqX2luc3RhbmNlOwoKICAgICAgICBQb29sPEJ1
ZmZlcj4gcmVxdWVzdFJlc3VsdFBvb2w7CiAgICAgICAgUG9vbDxPYmplY3Rfc2tlbD4gb2JqZWN0
UG9vbDsKICAgICAgICBzdGQ6Omxpc3Q8Q29ubmVjdGlvbiAqPiBjb25uZWN0aW9uczsKCiAgICAg
ICAgc3RkOjpzdHJpbmcgc2VydmVySUQ7CiAgICAgICAgdm9pZCBnZW5lcmF0ZVNlcnZlcklEKCk7
CgogICAgICAgIGJvb2wgZGVsZXRlSU9NYW5hZ2VyT25FeGl0OwoKICAgICAgICBUQ1BTZXJ2ZXIg
KnRjcFNlcnZlcjsKICAgICAgICBVbml4U2VydmVyICp1bml4U2VydmVyOwogICAgICAgIElPTWFu
YWdlciAqX2lvTWFuYWdlcjsKICAgICAgICBGbG93U3lzdGVtX2ltcGwgKl9mbG93U3lzdGVtOwog
ICAgICAgIE9iamVjdE1hbmFnZXIgKm9iamVjdE1hbmFnZXI7CiAgICAgICAgUmVmZXJlbmNlQ2xl
YW4gKnJlZmVyZW5jZUNsZWFuOwogICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIgKm5vdGlmaWNh
dGlvbk1hbmFnZXI7CgogICAgICAgIG1jb3Bfc2lnaGFuZGxlciBvcmlnX3NpZ3BpcGU7CiAgICAg
ICAgQ29ubmVjdGlvbiAqX2FjdGl2ZUNvbm5lY3Rpb247CgoKCgoKCiAgICAgICAgQ29ubmVjdGlv
biAqY29ubmVjdFVybChjb25zdCBzdGQ6OnN0cmluZyYgdXJsKTsKCnB1YmxpYzoKICAgICAgICBl
bnVtIFN0YXJ0U2VydmVyIHsKICAgICAgICAgICAgICAgIG5vU2VydmVyID0gMCwKICAgICAgICAg
ICAgICAgIHN0YXJ0VW5peFNlcnZlciA9IDEsCiAgICAgICAgICAgICAgICBzdGFydFRDUFNlcnZl
ciA9IDIsCiAgICAgICAgICAgICAgICBub0F1dGhlbnRpY2F0aW9uID0gNAogICAgICAgIH07Cgog
ICAgICAgIERpc3BhdGNoZXIoSU9NYW5hZ2VyICppb01hbmFnZXIgPSAwLCBTdGFydFNlcnZlciBz
dGFydFNlcnZlciA9IG5vU2VydmVyKTsKICAgICAgICB+RGlzcGF0Y2hlcigpOwoKICAgICAgICBz
dGF0aWMgRGlzcGF0Y2hlciAqdGhlKCk7CiAgICAgICAgaW5saW5lIElPTWFuYWdlciAqaW9NYW5h
Z2VyKCkgeyByZXR1cm4gX2lvTWFuYWdlcjsgfTsKICAgICAgICBJbnRlcmZhY2VSZXBvIGludGVy
ZmFjZVJlcG8oKTsKICAgICAgICBGbG93U3lzdGVtX2ltcGwgKmZsb3dTeXN0ZW0oKTsKICAgICAg
ICBHbG9iYWxDb21tIGdsb2JhbENvbW0oKTsKICAgICAgICB2b2lkIHNldEZsb3dTeXN0ZW0oRmxv
d1N5c3RlbV9pbXBsICpmcyk7CgogICAgICAgIHZvaWQgcmVmaWxsUmVxdWVzdElEcygpOwoKCiAg
ICAgICAgQnVmZmVyICp3YWl0Rm9yUmVzdWx0KGxvbmcgcmVxdWVzdElELENvbm5lY3Rpb24gKmNv
bm5lY3Rpb24pOwoKCiAgICAgICAgQnVmZmVyICpjcmVhdGVSZXF1ZXN0KGxvbmcmIHJlcXVlc3RJ
RCwgbG9uZyBvYmplY3RJRCwgbG9uZyBtZXRob2RJRCk7CiAgICAgICAgQnVmZmVyICpjcmVhdGVP
bmV3YXlSZXF1ZXN0KGxvbmcgb2JqZWN0SUQsIGxvbmcgbWV0aG9kSUQpOwoKCiAgICAgICAgdm9p
ZCBoYW5kbGUoQ29ubmVjdGlvbiAqY29ubiwgQnVmZmVyICpidWZmZXIsIGxvbmcgbWVzc2FnZVR5
cGUpOwoKCgoKICAgICAgICB2b2lkIGhhbmRsZUNvcnJ1cHQoQ29ubmVjdGlvbiAqY29ubik7CgoK
CgoKCgogICAgICAgIGxvbmcgYWRkT2JqZWN0KE9iamVjdF9za2VsICpvYmplY3QpOwoKCgoKCgoK
ICAgICAgICB2b2lkIHJlbW92ZU9iamVjdChsb25nIG9iamVjdElEKTsKCgoKCgogICAgICAgIHZv
aWQgKmNvbm5lY3RPYmplY3RMb2NhbChPYmplY3RSZWZlcmVuY2UmIHJlZmVyZW5jZSwgc3RkOjpz
dHJpbmcgaW50ZXJmYWNlKTsKCgoKCgoKCiAgICAgICAgQ29ubmVjdGlvbiAqY29ubmVjdE9iamVj
dFJlbW90ZShPYmplY3RSZWZlcmVuY2UmIHJlZmVyZW5jZSk7CgoKCgoKICAgICAgICBzdGQ6OnN0
cmluZyBvYmplY3RUb1N0cmluZyhsb25nIG9iamVjdElEKTsKCgoKCgogICAgICAgIGJvb2wgc3Ry
aW5nVG9PYmplY3RSZWZlcmVuY2UoT2JqZWN0UmVmZXJlbmNlJiByLCBzdGQ6OnN0cmluZyBzKTsK
CgoKCiAgICAgICAgdm9pZCBydW4oKTsKCgoKCgogICAgICAgIHZvaWQgdGVybWluYXRlKCk7CgoK
CgoKICAgICAgICB2b2lkIGluaXRpYXRlQ29ubmVjdGlvbihDb25uZWN0aW9uICpjb25uZWN0aW9u
KTsKCgoKCgoKICAgICAgICB2b2lkIGhhbmRsZUNvbm5lY3Rpb25DbG9zZShDb25uZWN0aW9uICpj
b25uZWN0aW9uKTsKIyAyMTAgIi4uLy4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgiCiAgICAgICAg
c3RhdGljIHZvaWQgbG9jaygpOwoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKCk7CiMg
MjI1ICIuLi8uLi9hcnRzL21jb3AvZGlzcGF0Y2hlci5oIgogICAgICAgIHN0YXRpYyB2b2lkIHdh
a2VVcCgpOwoKCgoKCgogICAgICAgIENvbm5lY3Rpb24gKmFjdGl2ZUNvbm5lY3Rpb24oKTsKCgoK
CgoKICAgICAgICBDb25uZWN0aW9uICpsb29wYmFja0Nvbm5lY3Rpb24oKTsKCgoKCgoKCiAgICAg
ICAgRGVsYXllZFJldHVybiAqZGVsYXlSZXR1cm4oKTsKCgoKCgogICAgICAgIHZvaWQgcmVsb2Fk
VHJhZGVyRGF0YSgpOwp9Owp9OwojIDI5ICIuLi8uLi9hcnRzL21jb3AvY29tbW9uLmgiIDIKIyAx
ICIuLi8uLi9hcnRzL21jb3Avb2JqZWN0LmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9tY29wL29iamVj
dC5oIgojIDEgIi4uLy4uL2FydHMvbWNvcC9idWZmZXIuaCIgMQojIDI3ICIuLi8uLi9hcnRzL21j
b3Avb2JqZWN0LmgiIDIKIyAxICIuLi8uLi9hcnRzL21jb3AvY29ubmVjdGlvbi5oIiAxCiMgMjgg
Ii4uLy4uL2FydHMvbWNvcC9vYmplY3QuaCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9ub3RpZmlj
YXRpb24uaCIgMQojIDI5ICIuLi8uLi9hcnRzL21jb3Avb2JqZWN0LmgiIDIKCiMgMSAiL3Vzci9p
bmNsdWRlL2Fzc2VydC5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi
IDIgMwojIDMxICIuLi8uLi9hcnRzL21jb3Avb2JqZWN0LmgiIDIKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL21hcCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbWFw
IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMSAzCiMg
MzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDMKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAxIDMKIyA1NiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDU3ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA1OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF90cmVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF90cmVlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgp0eXBlZGVmIGJvb2wgX1JiX3RyZWVf
Q29sb3JfdHlwZTsKY29uc3QgX1JiX3RyZWVfQ29sb3JfdHlwZSBfU19yYl90cmVlX3JlZCA9IGZh
bHNlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVfYmxhY2sgPSB0cnVlOwoK
c3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQp7CiAgdHlwZWRlZiBfUmJfdHJlZV9Db2xvcl90eXBl
IF9Db2xvcl90eXBlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7Cgog
IF9Db2xvcl90eXBlIF9NX2NvbG9yOwogIF9CYXNlX3B0ciBfTV9wYXJlbnQ7CiAgX0Jhc2VfcHRy
IF9NX2xlZnQ7CiAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoKICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21p
bmltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAgICB3aGlsZSAoX194LT5fTV9sZWZ0ICE9IDApIF9f
eCA9IF9feC0+X01fbGVmdDsKICAgIHJldHVybiBfX3g7CiAgfQoKICBzdGF0aWMgX0Jhc2VfcHRy
IF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAgICB3aGlsZSAoX194LT5fTV9yaWdodCAh
PSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0OwogICAgcmV0dXJuIF9feDsKICB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1ZhbHVlPgpzdHJ1Y3QgX1JiX3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9u
b2RlX2Jhc2UKewogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+KiBfTGlua190eXBlOwog
IF9WYWx1ZSBfTV92YWx1ZV9maWVsZDsKfTsKCgpzdHJ1Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRv
cgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CiAg
dHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgX0Jhc2VfcHRyIF9NX25vZGU7Cgog
IHZvaWQgX01faW5jcmVtZW50KCkKICB7CiAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gMCkg
ewogICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7CiAgICAgIHdoaWxlIChfTV9ub2Rl
LT5fTV9sZWZ0ICE9IDApCiAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICB9
CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAg
ICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9yaWdodCkgewogICAgICAgIF9NX25vZGUgPSBf
X3k7CiAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgaWYgKF9NX25v
ZGUtPl9NX3JpZ2h0ICE9IF9feSkKICAgICAgICBfTV9ub2RlID0gX195OwogICAgfQogIH0KCiAg
dm9pZCBfTV9kZWNyZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5fTV9jb2xvciA9PSBfU19y
Yl90cmVlX3JlZCAmJgogICAgICAgIF9NX25vZGUtPl9NX3BhcmVudC0+X01fcGFyZW50ID09IF9N
X25vZGUpCiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgIGVsc2UgaWYgKF9N
X25vZGUtPl9NX2xlZnQgIT0gMCkgewogICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01f
bGVmdDsKICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQgIT0gMCkKICAgICAgICBfX3kgPSBfX3kt
Pl9NX3JpZ2h0OwogICAgICBfTV9ub2RlID0gX195OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9C
YXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09
IF9feS0+X01fbGVmdCkgewogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgX195ID0gX195
LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgX01fbm9kZSA9IF9feTsKICAgIH0KICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX1Ji
X3RyZWVfaXRlcmF0b3IgOiBwdWJsaWMgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRl
ZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYg
X1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUm
LCBfVmFsdWUqPgogICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs
dWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+CiAgICBjb25zdF9pdGVyYXRvcjsKICB0
eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1JlZiwgX1B0cj4KICAgIF9TZWxmOwog
IHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+KiBfTGlua190eXBlOwoKICBfUmJfdHJlZV9p
dGVyYXRvcigpIHt9CiAgX1JiX3RyZWVfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9k
ZSA9IF9feDsgfQogIF9SYl90cmVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSB7IF9N
X25vZGUgPSBfX2l0Ll9NX25vZGU7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgcG9pbnRlciBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9w
ZXJhdG9yKysoKSB7IF9NX2luY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVy
YXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2luY3JlbWVudCgp
OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3Jl
bWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1Nl
bGYgX190bXAgPSAqdGhpczsKICAgIF9NX2RlY3JlbWVudCgpOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+Cmlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVm
LCBfUHRyPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJh
dG9yPF9WYWx1ZSwgX1JlZiwgX1B0cj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSA9PSBf
X3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4KaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0
IF9WYWx1ZSo+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRl
cmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9u
b2RlID09IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1Zh
bHVlKj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRv
cjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4g
X194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNs
YXNzIF9SZWYsIGNsYXNzIF9QdHI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3Ry
ZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1JlZiwgX1B0cj4mIF9feSkgewog
IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9W
YWx1ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs
dWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+JiBfX3gsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYg
X195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJh
dG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9W
YWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7Cn0KCmlu
bGluZSB2b2lkCl9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBf
UmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9
IF9feC0+X01fcmlnaHQ7CiAgX194LT5fTV9yaWdodCA9IF9feS0+X01fbGVmdDsKICBpZiAoX195
LT5fTV9sZWZ0ICE9MCkKICAgIF9feS0+X01fbGVmdC0+X01fcGFyZW50ID0gX194OwogIF9feS0+
X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19y
b290ID0gX195OwogIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAg
IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogIGVsc2UKICAgIF9feC0+X01fcGFyZW50
LT5fTV9yaWdodCA9IF9feTsKICBfX3ktPl9NX2xlZnQgPSBfX3g7CiAgX194LT5fTV9wYXJlbnQg
PSBfX3k7Cn0KCmlubGluZSB2b2lkCl9SYl90cmVlX3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2Rl
X2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQp7CiAgX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAgX194LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdo
dDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAgX195LT5fTV9yaWdodC0+X01fcGFyZW50
ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0g
X19yb290KQogICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVu
dC0+X01fcmlnaHQpCiAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgZWxzZQog
ICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgX195LT5fTV9yaWdodCA9IF9feDsK
ICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5saW5lIHZvaWQKX1JiX3RyZWVfcmViYWxhbmNl
KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsK
ICBfX3gtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgd2hpbGUgKF9feCAhPSBfX3Jvb3Qg
JiYgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICBpZiAo
X194LT5fTV9wYXJlbnQgPT0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkgewog
ICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQt
Pl9NX3JpZ2h0OwogICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9y
ZWQpIHsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNr
OwogICAgICAgIF9feS0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+
X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAg
X194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAg
ICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkgewogICAgICAgICAgX194
ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9f
cm9vdCk7CiAgICAgICAgfQogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3Ji
X3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3Ig
PSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9w
YXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAg
IF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01f
bGVmdDsKICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7
CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAg
ICAgICBfX3ktPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3Bh
cmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9feCA9
IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAg
aWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkgewogICAgICAgICAgX194ID0gX194
LT5fTV9wYXJlbnQ7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LCBfX3Jvb3Qp
OwogICAgICAgIH0KICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVl
X2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1Nf
cmJfdHJlZV9yZWQ7CiAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194LT5fTV9wYXJlbnQt
Pl9NX3BhcmVudCwgX19yb290KTsKICAgICAgfQogICAgfQogIH0KICBfX3Jvb3QtPl9NX2NvbG9y
ID0gX1NfcmJfdHJlZV9ibGFjazsKfQoKaW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKX1JiX3Ry
ZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3JpZ2h0bW9z
dCkKewogIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX196OwogIF9SYl90cmVlX25vZGVfYmFz
ZSogX194ID0gMDsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feF9wYXJlbnQgPSAwOwogIGlmIChf
X3ktPl9NX2xlZnQgPT0gMCkKICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgZWxzZQogICAgaWYg
KF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgX194ID0gX195LT5fTV9sZWZ0OwogICAgZWxzZSB7
CiAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAgICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0g
MCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7CiAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7
CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsKICAgIF9fei0+X01fbGVmdC0+X01fcGFyZW50ID0g
X195OwogICAgX195LT5fTV9sZWZ0ID0gX196LT5fTV9sZWZ0OwogICAgaWYgKF9feSAhPSBfX3ot
Pl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgaWYg
KF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgX195LT5fTV9wYXJl
bnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgIF9feS0+X01fcmlnaHQgPSBfX3otPl9NX3JpZ2h0Owog
ICAgICBfX3otPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICB9CiAgICBlbHNlCiAgICAg
IF9feF9wYXJlbnQgPSBfX3k7CiAgICBpZiAoX19yb290ID09IF9feikKICAgICAgX19yb290ID0g
X195OwogICAgZWxzZSBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICBf
X3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAgIGVsc2UKICAgICAgX196LT5fTV9wYXJl
bnQtPl9NX3JpZ2h0ID0gX195OwogICAgX195LT5fTV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsK
ICAgIHN0ZDo6c3dhcChfX3ktPl9NX2NvbG9yLCBfX3otPl9NX2NvbG9yKTsKICAgIF9feSA9IF9f
ejsKCiAgfQogIGVsc2UgewogICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgaWYg
KF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgIGlmIChfX3Jvb3QgPT0g
X196KQogICAgICBfX3Jvb3QgPSBfX3g7CiAgICBlbHNlCiAgICAgIGlmIChfX3otPl9NX3BhcmVu
dC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7
CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7CiAgICBp
ZiAoX19sZWZ0bW9zdCA9PSBfX3opCiAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAg
ICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgZWxzZQogICAgICAgIF9fbGVm
dG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsKICAgIGlmIChfX3Jp
Z2h0bW9zdCA9PSBfX3opCiAgICAgIGlmIChfX3otPl9NX2xlZnQgPT0gMCkKICAgICAgICBfX3Jp
Z2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgZWxzZQogICAgICAgIF9fcmlnaHRtb3N0
ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgfQogIGlmIChfX3ktPl9N
X2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7CiAgICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAo
X194ID09IDAgfHwgX194LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSkKICAgICAgaWYg
KF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNl
KiBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9
PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf
YmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwog
ICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAg
ICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgIH0KICAgICAgICBpZiAoKF9f
dy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09
IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwK
ICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2sp
KSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBf
X3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3Bh
cmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQgPT0gMCB8
fAogICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxh
Y2spIHsKICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xv
ciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90
cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9fdywgX19yb290KTsK
ICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICB9CiAgICAg
ICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAgICBfX3hf
cGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBpZiAoX193LT5f
TV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAg
ICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAg
IGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jh
c2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgaWYgKF9fdy0+X01fY29sb3Ig
PT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVl
X2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsK
ICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAg
ICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICB9CiAgICAgICAgaWYgKChf
X3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9y
ID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAgICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8
fAogICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNr
KSkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAg
X194ID0gX194X3BhcmVudDsKICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9w
YXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQgPT0gMCB8
fAogICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFj
aykgewogICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29s
b3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJf
dHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsK
ICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgIH0KICAgICAg
ICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9w
YXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ctPl9N
X2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAg
ICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBi
cmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIGlmIChfX3gpIF9feC0+X01fY29sb3IgPSBfU19y
Yl90cmVlX2JsYWNrOwogIH0KICByZXR1cm4gX195Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2MsIGJvb2wgX1NfaW5zdGFuY2VsZXNzPgpjbGFzcyBfUmJfdHJlZV9h
bGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAs
IF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBl
IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICBf
UmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25v
ZGVfYWxsb2NhdG9yKF9fYSksIF9NX2hlYWRlcigwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVuYW1l
IF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlw
ZQogICAgICAgICAgIF9NX25vZGVfYWxsb2NhdG9yOwogIF9SYl90cmVlX25vZGU8X1RwPiogX01f
aGVhZGVyOwoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJu
IF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfUmJf
dHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgIHsgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShf
X3AsIDEpOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBf
UmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxv
Y2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1
cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9j
YXRvcl90eXBlJikgOiBfTV9oZWFkZXIoMCkge30KCnByb3RlY3RlZDoKICBfUmJfdHJlZV9ub2Rl
PF9UcD4qIF9NX2hlYWRlcjsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90
cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBl
OwoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9BbGxv
Y190eXBlOjphbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxf
VHA+KiBfX3ApCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9SYl90cmVlX2Jhc2UKICA6
IHB1YmxpYyBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVz
cz4KewogIHR5cGVkZWYgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3Rh
bmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9j
YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSkgeyBfTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgp
OyB9CiAgfl9SYl90cmVlX2Jhc2UoKSB7IF9NX3B1dF9ub2RlKF9NX2hlYWRlcik7IH0KCn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNs
YXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9WYWx1ZT4g
PgpjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9j
PiB7CiAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9jPiBfQmFzZTsKcHJvdGVj
dGVkOgogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CiAgdHlwZWRlZiBf
UmJfdHJlZV9ub2RlPF9WYWx1ZT4gX1JiX3RyZWVfbm9kZTsKICB0eXBlZGVmIF9SYl90cmVlX0Nv
bG9yX3R5cGUgX0NvbG9yX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAg
dHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFs
dWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVm
ZXJlbmNlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlwZTsKICB0eXBlZGVmIHNp
emVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0
eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBh
bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9h
bGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKICB1
c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2hlYWRlcjsKCnByb3Rl
Y3RlZDoKCiAgX0xpbmtfdHlwZSBfTV9jcmVhdGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gp
CiAgewogICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgICAgICAg
ewogICAgICBjb25zdHJ1Y3QoJl9fdG1wLT5fTV92YWx1ZV9maWVsZCwgX194KTsKICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJuIF9fdG1wOwogIH0K
CiAgX0xpbmtfdHlwZSBfTV9jbG9uZV9ub2RlKF9MaW5rX3R5cGUgX194KQogIHsKICAgIF9MaW5r
X3R5cGUgX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgIF9f
dG1wLT5fTV9jb2xvciA9IF9feC0+X01fY29sb3I7CiAgICBfX3RtcC0+X01fbGVmdCA9IDA7CiAg
ICBfX3RtcC0+X01fcmlnaHQgPSAwOwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgdm9pZCBkZXN0
cm95X25vZGUoX0xpbmtfdHlwZSBfX3ApCiAgewogICAgZGVzdHJveSgmX19wLT5fTV92YWx1ZV9m
aWVsZCk7CiAgICBfTV9wdXRfbm9kZShfX3ApOwogIH0KCnByb3RlY3RlZDoKICBzaXplX3R5cGUg
X01fbm9kZV9jb3VudDsKICBfQ29tcGFyZSBfTV9rZXlfY29tcGFyZTsKCiAgX0xpbmtfdHlwZSYg
X01fcm9vdCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01f
cGFyZW50OyB9CiAgX0xpbmtfdHlwZSYgX01fbGVmdG1vc3QoKSBjb25zdAogICAgeyByZXR1cm4g
KF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0KICBfTGlua190eXBlJiBfTV9yaWdo
dG1vc3QoKSBjb25zdAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3Jp
Z2h0OyB9CgogIHN0YXRpYyBfTGlua190eXBlJiBfU19sZWZ0KF9MaW5rX3R5cGUgX194KQogICAg
eyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5
cGUmIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShf
X3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19wYXJlbnQoX0xpbmtfdHlw
ZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0
YXRpYyByZWZlcmVuY2UgX1NfdmFsdWUoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfX3gt
Pl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShfTGlua190eXBl
IF9feCkKICAgIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KICBzdGF0
aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9yKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9D
b2xvcl90eXBlJikoX194LT5fTV9jb2xvcik7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xl
ZnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0
KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19yaWdodChfQmFzZV9wdHIgX194KQogICAgeyBy
ZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBl
JiBfU19wYXJlbnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194
LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGljIHJlZmVyZW5jZSBfU192YWx1ZShfQmFzZV9wdHIgX194
KQogICAgeyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3Rh
dGljIGNvbnN0IF9LZXkmIF9TX2tleShfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gX0tleU9m
VmFsdWUoKShfU192YWx1ZShfTGlua190eXBlKF9feCkpKTt9CiAgc3RhdGljIF9Db2xvcl90eXBl
JiBfU19jb2xvcihfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX0xp
bmtfdHlwZShfX3gpLT5fTV9jb2xvcik7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUgX1NfbWluaW11
bShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2Rl
X2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19tYXhpbXVt
KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVf
YmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CgpwdWJsaWM6CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVy
YXRvcjx2YWx1ZV90eXBlLCByZWZlcmVuY2UsIHBvaW50ZXI+IGl0ZXJhdG9yOwogIHR5cGVkZWYg
X1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9wb2lu
dGVyPgogICAgICAgICAgY29uc3RfaXRlcmF0b3I7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv
cjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVy
c2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcml2YXRlOgogIGl0ZXJh
dG9yIF9NX2luc2VydChfQmFzZV9wdHIgX194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90
eXBlJiBfX3YpOwogIF9MaW5rX3R5cGUgX01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlw
ZSBfX3ApOwogIHZvaWQgX01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpOwoKcHVibGljOgoKICBfUmJf
dHJlZSgpCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBf
TV9rZXlfY29tcGFyZSgpCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJl
ZShjb25zdCBfQ29tcGFyZSYgX19jb21wKQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwg
X01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgeyBfTV9lbXB0eV9p
bml0aWFsaXplKCk7IH0KCiAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwg
X01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAg
X1JiX3RyZWUoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYgX194KQogICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgX01f
bm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX194Ll9NX2tleV9jb21wYXJlKQogIHsKICAg
IGlmIChfX3guX01fcm9vdCgpID09IDApCiAgICAgIF9NX2VtcHR5X2luaXRpYWxpemUoKTsKICAg
IGVsc2UgewogICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAg
IF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgX01f
bGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgX01fcmlnaHRtb3N0KCkg
PSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICB9CiAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9N
X25vZGVfY291bnQ7CiAgfQogIH5fUmJfdHJlZSgpIHsgY2xlYXIoKTsgfQogIF9SYl90cmVlPF9L
ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0
IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCk7
Cgpwcml2YXRlOgogIHZvaWQgX01fZW1wdHlfaW5pdGlhbGl6ZSgpIHsKICAgIF9TX2NvbG9yKF9N
X2hlYWRlcikgPSBfU19yYl90cmVlX3JlZDsKCiAgICBfTV9yb290KCkgPSAwOwogICAgX01fbGVm
dG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogIH0K
CnB1YmxpYzoKCiAgX0NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29t
cGFyZTsgfQogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGNv
bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGl0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2hlYWRlcjsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIF9NX2hlYWRlcjsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yIHJiZWdpbigpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVu
ZCgpKTsKICB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVy
YXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsK
ICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogIH0KICBib29sIGVt
cHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9CiAgc2l6ZV90eXBlIHNp
emUoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2NvdW50OyB9CiAgc2l6ZV90eXBlIG1heF9zaXpl
KCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICB2b2lkIHN3YXAoX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190KSB7CiAgICBzdGQ6
OnN3YXAoX01faGVhZGVyLCBfX3QuX01faGVhZGVyKTsKICAgIHN0ZDo6c3dhcChfTV9ub2RlX2Nv
dW50LCBfX3QuX01fbm9kZV9jb3VudCk7CiAgICBzdGQ6OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9f
dC5fTV9rZXlfY29tcGFyZSk7CiAgfQoKcHVibGljOgoKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGlu
c2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1
YWwoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgaXRlcmF0b3IgaW5zZXJ0X3VuaXF1ZShpdGVy
YXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIGluc2Vy
dF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfdW5pcXVlKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19w
b3NpdGlvbik7CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIHZvaWQg
ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKICB2b2lkIGVyYXNlKGNv
bnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBrZXlfdHlwZSogX19sYXN0KTsKICB2b2lkIGNs
ZWFyKCkgewogICAgaWYgKF9NX25vZGVfY291bnQgIT0gMCkgewogICAgICBfTV9lcmFzZShfTV9y
b290KCkpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICBfTV9yb290KCkg
PSAwOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgX01fbm9kZV9jb3Vu
dCA9IDA7CiAgICB9CiAgfQoKcHVibGljOgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7
CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9y
IGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGxvd2Vy
X2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9yIHVwcGVyX2JvdW5k
KGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0
IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3Jh
bmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0
ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCnB1YmxpYzoK
CiAgYm9vbCBfX3JiX3ZlcmlmeSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXks
X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICBjb25z
dCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp
CnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9f
eC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9L
ZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
Y29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3gu
ZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3ku
ZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5
T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sCm9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBf
X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
Cm9wZXJhdG9yPihjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9y
PD0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShj
b25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQKc3dhcChfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgX194
LnN3YXAoX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNz
IF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6b3BlcmF0b3I9KGNv
bnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9f
eCkKewogIGlmICh0aGlzICE9ICZfX3gpIHsKCiAgICBjbGVhcigpOwogICAgX01fbm9kZV9jb3Vu
dCA9IDA7CiAgICBfTV9rZXlfY29tcGFyZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgIGlmIChf
X3guX01fcm9vdCgpID09IDApIHsKICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgX01fbGVmdG1v
c3QoKSA9IF9NX2hlYWRlcjsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICB9
CiAgICBlbHNlIHsKICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9o
ZWFkZXIpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAg
ICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgX01fbm9kZV9j
b3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgfQogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01faW5zZXJ0KF9C
YXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195XywgY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlu
a190eXBlIF9feCA9IChfTGlua190eXBlKSBfX3hfOwogIF9MaW5rX3R5cGUgX195ID0gKF9MaW5r
X3R5cGUpIF9feV87CiAgX0xpbmtfdHlwZSBfX3o7CgogIGlmIChfX3kgPT0gX01faGVhZGVyIHx8
IF9feCAhPSAwIHx8CiAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nf
a2V5KF9feSkpKSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfbGVmdChf
X3kpID0gX196OwoKICAgIGlmIChfX3kgPT0gX01faGVhZGVyKSB7CiAgICAgIF9NX3Jvb3QoKSA9
IF9fejsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICB9CiAgICBlbHNlIGlmIChfX3kg
PT0gX01fbGVmdG1vc3QoKSkKICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsKICB9CiAgZWxzZSB7
CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfcmlnaHQoX195KSA9IF9fejsK
ICAgIGlmIChfX3kgPT0gX01fcmlnaHRtb3N0KCkpCiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196
OwogIH0KICBfU19wYXJlbnQoX196KSA9IF9feTsKICBfU19sZWZ0KF9feikgPSAwOwogIF9TX3Jp
Z2h0KF9feikgPSAwOwogIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01fcGFy
ZW50KTsKICArK19NX25vZGVfY291bnQ7CiAgcmV0dXJuIGl0ZXJhdG9yKF9feik7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGNv
bnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtf
dHlwZSBfX3ggPSBfTV9yb290KCk7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfX3kgPSBfX3g7
CiAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gp
KSA/CiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgfQogIHJldHVy
biBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgYm9vbD4KX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShjb25z
dCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5
cGUgX194ID0gX01fcm9vdCgpOwogIGJvb2wgX19jb21wID0gdHJ1ZTsKICB3aGlsZSAoX194ICE9
IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9fY29tcCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZh
bHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gp
IDogX1NfcmlnaHQoX194KTsKICB9CiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICBp
ZiAoX19jb21wKQogICAgaWYgKF9faiA9PSBiZWdpbigpKQogICAgICByZXR1cm4gcGFpcjxpdGVy
YXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgZWxzZQogICAg
ICAtLV9fajsKICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9m
VmFsdWUoKShfX3YpKSkKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChf
X3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX19qLCBm
YWxzZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9m
VmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBf
UmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJh
dG9yCl9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPgog
IDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsK
ICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkgewogICAgaWYg
KHNpemUoKSA+IDAgJiYKICAgICAgIF9NX2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9N
X25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9z
aXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgIGVsc2UKICAgICAg
cmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24u
X01fbm9kZSA9PSBfTV9oZWFkZXIpIHsKICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX01f
cmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICByZXR1cm4gX01faW5zZXJ0
KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3Vu
aXF1ZShfX3YpLmZpcnN0OwogIH0gZWxzZSB7CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9z
aXRpb247CiAgICAtLV9fYmVmb3JlOwogICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2Jl
Zm9yZS5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKQogICAgICAgICYmIF9NX2tleV9jb21w
YXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKSB7CiAg
ICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBf
TV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgZWxzZQogICAgICAgIHJl
dHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9f
dik7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUs
CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF9lcXVh
bChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlv
bi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkgewogICAgaWYgKHNpemUoKSA+IDAgJiYK
ICAgICAgICAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlP
ZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2Rl
LCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0
X2VxdWFsKF9fdik7CiAgfSBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVy
KSB7CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9N
X3JpZ2h0bW9zdCgpKSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCks
IF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2Ug
ewogICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAg
IGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19iZWZvcmUu
X01fbm9kZSkpCiAgICAgICAgJiYgIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9N
X25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9y
ZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01f
bm9kZSwgX192KTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlv
bi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgfSBlbHNlCiAgICAgIHJl
dHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ21wLCBjbGFzcyBfQWxsb2M+CiAgdGVtcGxhdGU8
Y2xhc3MgX0lJPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPgogIDo6
aW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQp7CiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNs
YXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFs
LF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjppbnNlcnRfdW5pcXVlKF9JSSBfX2ZpcnN0LCBfSUkgX19s
YXN0KSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0
X3VuaXF1ZSgqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs
IGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIHZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKewogIF9MaW5rX3R5cGUgX195
ID0KICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9zaXRp
b24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9NX2hlYWRlci0+X01fcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX01faGVhZGVyLT5fTV9sZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9yaWdodCk7CiAgZGVzdHJveV9ub2Rl
KF9feSk7CiAgLS1fTV9ub2RlX2NvdW50Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFz
cyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz46OnNpemVfdHlwZQpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+OjplcmFzZShjb25zdCBfS2V5JiBfX3gpCnsKICBwYWlyPGl0ZXJhdG9y
LGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX3gpOwogIHNpemVfdHlwZSBfX24gPSAwOwog
IGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCwgX19uKTsKICBlcmFzZShfX3AuZmlyc3Qs
IF9fcC5zZWNvbmQpOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFt
ZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlw
ZQpfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9jb3B5KF9M
aW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCkKewoKICBfTGlua190eXBlIF9fdG9wID0gX01f
Y2xvbmVfbm9kZShfX3gpOwogIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CgogICAgICAgICAgICB7
CiAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgX190b3AtPl9NX3JpZ2h0ID0gX01fY29weShf
U19yaWdodChfX3gpLCBfX3RvcCk7CiAgICBfX3AgPSBfX3RvcDsKICAgIF9feCA9IF9TX2xlZnQo
X194KTsKCiAgICB3aGlsZSAoX194ICE9IDApIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9j
bG9uZV9ub2RlKF9feCk7CiAgICAgIF9fcC0+X01fbGVmdCA9IF9feTsKICAgICAgX195LT5fTV9w
YXJlbnQgPSBfX3A7CiAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICAgIF9feS0+X01fcmln
aHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9feSk7CiAgICAgIF9fcCA9IF9feTsKICAgICAg
X194ID0gX1NfbGVmdChfX3gpOwogICAgfQogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgcmV0dXJuIF9fdG9wOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPgogIDo6X01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpCnsKCiAgd2hpbGUgKF9feCAhPSAwKSB7
CiAgICBfTV9lcmFzZShfU19yaWdodChfX3gpKTsKICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVm
dChfX3gpOwogICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICBfX3ggPSBfX3k7CiAgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAg
ICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19maXJz
dCwgaXRlcmF0b3IgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3Qg
PT0gZW5kKCkpCiAgICBjbGVhcigpOwogIGVsc2UKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgZXJhc2UoX19maXJzdCsrKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1
ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4KICA6OmVyYXNlKGNvbnN0IF9LZXkqIF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKewog
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoKl9fZmlyc3QrKyk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2sp
CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jv
b3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKQogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXko
X194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNl
CiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9f
eSk7CiAgcmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXko
X19qLl9NX25vZGUpKSkgPwogICAgIGVuZCgpIDogX19qOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYgX19rKSBjb25z
dAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9y
b290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkgewogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19r
ZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBl
bHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIF9faiA9
IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgcmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2Nv
bXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwogICAgZW5kKCkgOiBfX2o7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCl9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmNvdW50KGNvbnN0
IF9LZXkmIF9faykgY29uc3QKewogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9y
PiBfX3AgPSBlcXVhbF9yYW5nZShfX2spOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNl
KF9fcC5maXJzdCwgX19wLnNlY29uZCwgX19uKTsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNs
YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1Zh
bHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omxvd2VyX2JvdW5kKGNvbnN0IF9L
ZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194
ID0gX01fcm9vdCgpOwoKICB3aGlsZSAoX194ICE9IDApCiAgICBpZiAoIV9NX2tleV9jb21wYXJl
KF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsK
ICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgcmV0dXJuIGl0ZXJhdG9yKF9f
eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZh
bHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRl
cmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgog
IDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kg
PSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3gg
IT0gMCkKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9f
eSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdo
dChfX3gpOwoKICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBf
X2spCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9N
X3Jvb3QoKTsKCiAgIHdoaWxlIChfX3ggIT0gMCkKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19r
LCBfU19rZXkoX194KSkpCiAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg
ICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgcmV0dXJuIGl0ZXJhdG9yKF9f
eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZh
bHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRl
cmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgog
IDo6dXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kg
PSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICB3aGlsZSAoX194
ICE9IDApCiAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAg
X195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgZWxzZQogICAgICAgX194ID0gX1Nf
cmlnaHQoX194KTsKCiAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNs
YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZQpwYWlyPHR5cGVuYW1lIF9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAg
IHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46Oml0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spCnsKICByZXR1cm4gcGFpcjxp
dGVyYXRvciwgaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksIHVwcGVyX2JvdW5kKF9faykpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS29WLCBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUKcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKICAgICB0
eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpj
b25zdF9pdGVyYXRvcj4KX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwgX0Fs
bG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgcmV0dXJuIHBh
aXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9faykp
Owp9CgppbmxpbmUgaW50Cl9fYmxhY2tfY291bnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX25vZGUs
IF9SYl90cmVlX25vZGVfYmFzZSogX19yb290KQp7CiAgaWYgKF9fbm9kZSA9PSAwKQogICAgcmV0
dXJuIDA7CiAgaW50IF9fc3VtID0gMDsKICBkbyB7CiAgICBpZiAoX19ub2RlLT5fTV9jb2xvciA9
PSBfU19yYl90cmVlX2JsYWNrKQogICAgICArK19fc3VtOwogICAgaWYgKF9fbm9kZSA9PSBfX3Jv
b3QpCiAgICAgIGJyZWFrOwogICAgX19ub2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgfSB3aGls
ZSAoMSk7CiAgcmV0dXJuIF9fc3VtOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CmJvb2wgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAp7CiAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBi
ZWdpbigpID09IGVuZCgpKQogICAgcmV0dXJuIF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigp
ID09IGVuZCgpICYmCiAgICAgIF9NX2hlYWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01f
aGVhZGVyLT5fTV9yaWdodCA9PSBfTV9oZWFkZXI7CgogIGludCBfX2xlbiA9IF9fYmxhY2tfY291
bnQoX01fbGVmdG1vc3QoKSwgX01fcm9vdCgpKTsKICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQg
PSBiZWdpbigpOyBfX2l0ICE9IGVuZCgpOyArK19faXQpIHsKICAgIF9MaW5rX3R5cGUgX194ID0g
KF9MaW5rX3R5cGUpIF9faXQuX01fbm9kZTsKICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChf
X3gpOwogICAgX0xpbmtfdHlwZSBfX1IgPSBfU19yaWdodChfX3gpOwoKICAgIGlmIChfX3gtPl9N
X2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKQogICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9y
ID09IF9TX3JiX3RyZWVfcmVkKSB8fAogICAgICAgICAgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09
IF9TX3JiX3RyZWVfcmVkKSkKICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgaWYgKF9fTCAmJiBf
TV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX1Nfa2V5KF9fTCkpKQogICAgICByZXR1cm4gZmFs
c2U7CiAgICBpZiAoX19SICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194
KSkpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoIV9fTCAmJiAhX19SICYmIF9fYmxhY2tf
Y291bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoK
ICBpZiAoX01fbGVmdG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX01f
cm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsKICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3Ry
ZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFsc2U7Cgog
IHJldHVybiB0cnVlOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBj
bGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfQWxsb2Mg
PSBhbGxvY2F0b3I8X1ZhbHVlPiA+CnN0cnVjdCByYl90cmVlIDogcHVibGljIF9SYl90cmVlPF9L
ZXksIF9WYWx1ZSwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+CnsKICB0eXBlZGVmIF9S
Yl90cmVlPF9LZXksIF9WYWx1ZSwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+IF9CYXNl
OwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl
OwoKICByYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAogICAgICAg
ICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9C
YXNlKF9fY29tcCwgX19hKSB7fQoKICB+cmJfdHJlZSgpIHt9Cn07Cgp9CiMgMzQgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX21hcC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9tYXAuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX21hcC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9L
ZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAgICAgY2xh
c3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KY2xhc3MgbWFw
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfS2V5IGtleV90
eXBlOwogIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsK
ICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Nv
bXBhcmUga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUKICAgIDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNs
YXNzIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZCA6CiAgICBfQ29t
cGFyZSBjb21wOwogICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29tcChfX2MpIHt9
CiAgcHVibGljOgogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUmIF9feCwgY29u
c3QgdmFsdWVfdHlwZSYgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKF9feC5maXJzdCwg
X195LmZpcnN0KTsKICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90
eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBl
Piwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJs
aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5
cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5
cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxs
b2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwK
ICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl
KCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3Qu
aW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90
Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQogIG1hcChjb25zdCBtYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CgogIG1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtYXA8X0tleSwgX1RwLCBf
Q29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVy
biAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBf
TV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJl
dHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBn
ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCiAg
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgp
IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBf
TV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7
IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1
cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7
IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90
LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgp
OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgp
OyB9CiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spIHsKICAgIGl0ZXJhdG9y
IF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBrZXlfY29t
cCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFsdWVfdHlw
ZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CiAgdm9pZCBzd2Fw
KG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90
KTsgfQoKCgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9f
eCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9CiAgaXRlcmF0b3IgaW5z
ZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJldHVy
biBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19s
YXN0KTsKICB9CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNl
KF9fcG9zaXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsg
cmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg
aXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICB2
b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtl
eV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3Ig
ZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsg
fQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAgOiAxOwogIH0KICBpdGVyYXRvciBs
b3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJfYm91bmQo
X194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9y
IHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3Vu
ZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CgogIHBhaXI8
aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAg
IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRlcmF0b3Is
Y29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJh
dG9yPT0gKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFz
cyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3I8IChjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs
b2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sIG9wZXJhdG9yPChjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj4oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp
IHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Rw
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVy
biAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194
IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh
cmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs
b2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgMzYgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfbXVsdGltYXAuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX211bHRpbWFwLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tl
eT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBf
VHA+ID4gPgpjbGFzcyBtdWx0aW1hcDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmNsYXNzIG11bHRpbWFwCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCgoKICB0eXBlZGVmIF9LZXkga2V5X3R5
cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwog
IHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29t
cGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZSA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBt
dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZDoKICAgIF9Db21w
YXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykge30K
ICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25z
dCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbXAoX194LmZpcnN0LCBf
X3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5
cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4s
IGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGlj
OgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBl
IHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBl
IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9y
X3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoKCiAgbXVsdGltYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwg
YWxsb2NhdG9yX3R5cGUoKSkgeyB9CiAgZXhwbGljaXQgbXVsdGltYXAoY29uc3QgX0NvbXBhcmUm
IF9fY29tcCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g
YWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9y
X3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJl
JiBfX2NvbXAsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19m
aXJzdCwgX19sYXN0KTsgfQogIG11bHRpbWFwKGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w
YXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7IH0KCiAgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX194KSB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01f
dC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1
cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0
X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0
ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgY29uc3RfaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSB7
IHJldHVybiBfTV90LmVuZCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01f
dC5yYmVnaW4oKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJu
IF9NX3QucmVuZCgpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5l
bXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsg
fQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsg
fQogIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsg
X01fdC5zd2FwKF9feC5fTV90KTsgfQoKCgogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90
eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KICBpdGVyYXRvciBp
bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICBy
ZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX19wb3NpdGlvbiwgX194KTsKICB9CiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJz
dCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3Qu
ZXJhc2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2Zp
cnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsg
fQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgogIGl0ZXJhdG9yIGZpbmQoY29u
c3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9pdGVy
YXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChf
X3gpOyB9CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0
dXJuIF9NX3QuY291bnQoX194KTsgfQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0
b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9N
X3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5
X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVy
YXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
X01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1
YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFu
Z2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxf
cmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxf
cmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3Mg
X0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGltYXA8
X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVs
dGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNz
IF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25z
dCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w
YXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXks
X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xh
c3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0
aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0g
X195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11bHRpbWFwPF9LZXks
X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBf
X3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8
IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9f
eCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG11bHRpbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyAzNyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMiAzCiMgMzIgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvbWFwIiAyIDMKIyAzMiAiLi4vLi4vYXJ0cy9tY29wL29iamVjdC5oIiAy
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9saXN0IiAxIDMKIyAzMyAiLi4vLi4vYXJ0
cy9tY29wL29iamVjdC5oIiAyCiMgNDQgIi4uLy4uL2FydHMvbWNvcC9vYmplY3QuaCIKbmFtZXNw
YWNlIEFydHMgewoKCnR5cGVkZWYgdm9pZCAoKkRpc3BhdGNoRnVuY3Rpb24pKHZvaWQgKm9iamVj
dCwgQnVmZmVyICpyZXF1ZXN0LCBCdWZmZXIgKnJlc3VsdCk7CnR5cGVkZWYgdm9pZCAoKk9uZXdh
eURpc3BhdGNoRnVuY3Rpb24pKHZvaWQgKm9iamVjdCwgQnVmZmVyICpyZXF1ZXN0KTsKdHlwZWRl
ZiB2b2lkICgqRHluYW1pY0Rpc3BhdGNoRnVuY3Rpb24pKHZvaWQgKm9iamVjdCwgbG9uZyBtZXRo
b2RJRCwgQnVmZmVyICpyZXF1ZXN0LCBCdWZmZXIgKnJlc3VsdCk7CgpjbGFzcyBTY2hlZHVsZU5v
ZGU7CmNsYXNzIE9iamVjdF9za2VsOwpjbGFzcyBPYmplY3Rfc3R1YjsKY2xhc3MgRmxvd1N5c3Rl
bTsKY2xhc3MgTWV0aG9kRGVmOwpjbGFzcyBPYmplY3RSZWZlcmVuY2U7CmNsYXNzIFdlYWtSZWZl
cmVuY2VCYXNlOwpjbGFzcyBPYmplY3Q7CmNsYXNzIE9iamVjdE1hbmFnZXI7CmNsYXNzIER5bmFt
aWNTa2VsZXRvbkRhdGE7CmNsYXNzIER5bmFtaWNTa2VsZXRvbkJhc2U7CgpjbGFzcyBPYmplY3Rf
YmFzZSA6IHB1YmxpYyBOb3RpZmljYXRpb25DbGllbnQgewpwcml2YXRlOgogICAgICAgIGZyaWVu
ZCBjbGFzcyBEeW5hbWljUmVxdWVzdDsKICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0TWFuYWdl
cjsKICAgICAgICBib29sIF9kZWxldGVPazsKCnByb3RlY3RlZDoKIyA3OSAiLi4vLi4vYXJ0cy9t
Y29wL29iamVjdC5oIgogICAgICAgIGNsYXNzIE9iamVjdEludGVybmFsRGF0YSAqX2ludGVybmFs
RGF0YTsKCiAgICAgICAgc3RydWN0IE9iamVjdFN0cmVhbUluZm87CgogICAgICAgIE9iamVjdF9i
YXNlKCk7CiAgICAgICAgdmlydHVhbCB+T2JqZWN0X2Jhc2UoKTsKCgoKCgoKICAgICAgICBsb25n
IF9nZXRPYmplY3RJRCgpIGNvbnN0OwogICAgICAgIENvbm5lY3Rpb24gKl9nZXRDb25uZWN0aW9u
KCkgY29uc3Q7CgoKCgogICAgICAgIFNjaGVkdWxlTm9kZSAqX3NjaGVkdWxlTm9kZTsKICAgICAg
ICBzdGQ6Omxpc3Q8T2JqZWN0U3RyZWFtSW5mbyAqPiBfc3RyZWFtTGlzdDsKCiAgICAgICAgdmly
dHVhbCBPYmplY3Rfc2tlbCAqX3NrZWwoKTsKICAgICAgICB2aXJ0dWFsIE9iamVjdF9zdHViICpf
c3R1YigpOwoKICAgICAgICBlbnVtIE9iamVjdExvY2F0aW9uIHsgb2JqZWN0SXNMb2NhbCwgb2Jq
ZWN0SXNSZW1vdGUgfTsKCiAgICAgICAgdmlydHVhbCBPYmplY3RMb2NhdGlvbiBfbG9jYXRpb24o
KTsKCiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVybmFsT2JqZWN0SUQ7CiAgICAgICAgbG9uZyBf
bmV4dE5vdGlmeUlEOwogICAgICAgIGxvbmcgX3JlZkNudDsKICAgICAgICBzdGF0aWMgbG9uZyBf
c3RhdGljT2JqZWN0Q291bnQ7CgogICAgICAgIHZvaWQgX2Rlc3Ryb3koKTsKCnB1YmxpYzoKICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwojIDEyNSAiLi4vLi4vYXJ0cy9tY29wL29i
amVjdC5oIgogICAgICAgIHZpcnR1YWwgQnVmZmVyICpfYWxsb2NDdXN0b21NZXNzYWdlKGxvbmcg
aGFuZGxlcklEKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgX3NlbmRDdXN0b21NZXNzYWdlKEJ1ZmZl
ciAqZGF0YSk7CgoKCgoKICAgICAgICB2aXJ0dWFsIGxvbmcgX2xvb2t1cE1ldGhvZChjb25zdCBB
cnRzOjpNZXRob2REZWYgJikgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgX2ludGVy
ZmFjZU5hbWUoKSA9IDA7CiAgICAgICAgdmlydHVhbCBjbGFzcyBJbnRlcmZhY2VEZWYgX3F1ZXJ5
SW50ZXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCBj
bGFzcyBUeXBlRGVmIF9xdWVyeVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpID0gMDsKICAg
ICAgICB2aXJ0dWFsIGNsYXNzIEVudW1EZWYgX3F1ZXJ5RW51bShjb25zdCBzdGQ6OnN0cmluZyYg
bmFtZSkgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgX3RvU3RyaW5nKCkgPSAwOwoK
CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlQmxvY2sodW5zaWduZWQgbG9uZyBjeWNs
ZXMpOwogICAgICAgIFNjaGVkdWxlTm9kZSAqX25vZGUoKTsKICAgICAgICB2aXJ0dWFsIEZsb3dT
eXN0ZW0gX2Zsb3dTeXN0ZW0oKSA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBfcmVsZWFz
ZSgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgX2NvcHlSZW1vdGUoKSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIF91c2VSZW1vdGUoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIF9yZWxl
YXNlUmVtb3RlKCkgPSAwOwoKCiAgICAgICAgdm9pZCBfY2FuY2VsQ29weVJlbW90ZSgpOwoKICAg
ICAgICB2b2lkIF9hZGRXZWFrUmVmZXJlbmNlKFdlYWtSZWZlcmVuY2VCYXNlICpyZWZlcmVuY2Up
OwogICAgICAgIHZvaWQgX3JlbW92ZVdlYWtSZWZlcmVuY2UoV2Vha1JlZmVyZW5jZUJhc2UgKnJl
ZmVyZW5jZSk7CgogICAgICAgIGlubGluZSBPYmplY3RfYmFzZSAqX2NvcHkoKSB7CiAgICAgICAg
ICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKCiAgICAg
ICAgdmlydHVhbCB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7CiAgICAgICAgdm9pZCAq
X2Nhc3Qoc3RkOjpzdHJpbmcgaW50ZXJmYWNlKTsKCgogICAgICAgIHZpcnR1YWwgYm9vbCBfaXND
b21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSkgPSAwOwoKCiAg
ICAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBfYWRkQ2hpbGQoQXJ0czo6T2JqZWN0IGNoaWxkLCBj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgPSAwOwogICAgICAgIHZpcnR1YWwgYm9vbCBfcmVtb3Zl
Q2hpbGQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIEFydHM6
Ok9iamVjdCBfZ2V0Q2hpbGQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpID0gMDsKICAgICAgICB2
aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIF9xdWVyeUNoaWxkcmVuKCkgPSAwOwoK
CgoKCgogICAgICAgIHZpcnR1YWwgYm9vbCBfZXJyb3IoKTsKCiAgICAgICAgaW5saW5lIHN0YXRp
YyBsb25nIF9vYmplY3RDb3VudCgpIHsgcmV0dXJuIF9zdGF0aWNPYmplY3RDb3VudDsgfQogICAg
ICAgIGlubGluZSBsb25nIF9ta05vdGlmeUlEKCkgeyByZXR1cm4gX25leHROb3RpZnlJRCsrOyB9
CgoKICAgICAgICBzdGF0aWMgT2JqZWN0X2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcm
IHN1YkNsYXNzID0gIk9iamVjdCIpOwoKCiAgICAgICAgYm9vbCBfaXNFcXVhbChPYmplY3RfYmFz
ZSAqb2JqZWN0KSBjb25zdDsKCgogICAgICAgIHN0YXRpYyBPYmplY3RfYmFzZSAqX2Zyb21TdHJp
bmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgT2JqZWN0X2Jhc2UgKl9m
cm9tUmVmZXJlbmNlKGNsYXNzIE9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwp9
OwoKCgoKCmNsYXNzIEJ1ZmZlcjsKY2xhc3MgTWV0aG9kRGVmOwoKCmNsYXNzIE9iamVjdF9za2Vs
X3ByaXZhdGU7CmNsYXNzIEFueUNvbnN0UmVmOwpjbGFzcyBBdHRyaWJ1dGVEZWY7CgpjbGFzcyBP
YmplY3Rfc2tlbCA6IHZpcnR1YWwgcHVibGljIE9iamVjdF9iYXNlIHsKcHJpdmF0ZToKICAgICAg
ICBmcmllbmQgY2xhc3MgT2JqZWN0X2Jhc2U7CiAgICAgICAgZnJpZW5kIGNsYXNzIER5bmFtaWNT
a2VsZXRvbkRhdGE7CiAgICAgICAgZnJpZW5kIGNsYXNzIER5bmFtaWNTa2VsZXRvbkJhc2U7Cgog
ICAgICAgIE9iamVjdF9za2VsX3ByaXZhdGUgKl9kX3NrZWw7CgogICAgICAgIGxvbmcgX29iamVj
dElEOwoKCgogICAgICAgIGxvbmcgX3JlbW90ZVNlbmRDb3VudDsKICAgICAgICBib29sIF9yZW1v
dGVTZW5kVXBkYXRlZDsKICAgICAgICBzdGQ6Omxpc3Q8Y2xhc3MgQ29ubmVjdGlvbiAqPiBfcmVt
b3RlVXNlcnM7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCBfYWRkTWV0aG9kKERpc3BhdGNoRnVu
Y3Rpb24gZGlzcCwgdm9pZCAqb2JqZWN0LCBjb25zdCBNZXRob2REZWYmIG1kKTsKICAgICAgICB2
b2lkIF9hZGRNZXRob2QoT25ld2F5RGlzcGF0Y2hGdW5jdGlvbiBkaXNwLCB2b2lkICpvYmplY3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBNZXRob2REZWYmIG1kKTsKICAgICAgICB2b2lkIF9hZGRNZXRob2QoRHluYW1pY0Rpc3Bh
dGNoRnVuY3Rpb24gZGlzcCwgdm9pZCAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWV0aG9kRGVmJiBtZCk7CiAgICAg
ICAgdm9pZCBfaW5pdFN0cmVhbShzdGQ6OnN0cmluZyBuYW1lLCB2b2lkICpwdHIsIGxvbmcgZmxh
Z3MpOwoKCiAgICAgICAgYm9vbCBfaW5pdEF0dHJpYnV0ZShjb25zdCBBcnRzOjpBdHRyaWJ1dGVE
ZWYmIGF0dHJpYnV0ZSk7CiAgICAgICAgc3RhdGljIGJvb2wgX1F1ZXJ5SW5pdFN0cmVhbUZ1bmMo
T2JqZWN0X3NrZWwgKnNrZWwsY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIGJvb2wg
X2dlbmVyYXRlU2xvdHMoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5n
JiBpbnRlcmZhY2UpOwoKCiAgICAgICAgY29uc3QgTWV0aG9kRGVmJiBfZHNHZXRNZXRob2REZWYo
bG9uZyBtZXRob2RJRCk7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCBfZGVmYXVsdE5vdGlmeShj
b25zdCBOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbik7CiAgICAgICAgdm9pZCBub3RpZnkoY29u
c3QgTm90aWZpY2F0aW9uJiBub3RpZmljYXRpb24pOwogICAgICAgIHZvaWQgX2VtaXRfY2hhbmdl
ZChjb25zdCBjaGFyICpzdHJlYW0sIGNvbnN0IEFueUNvbnN0UmVmJiB2YWx1ZSk7CgoKCgoKICAg
ICAgICBsb25nIF9hZGRDdXN0b21NZXNzYWdlSGFuZGxlcihPbmV3YXlEaXNwYXRjaEZ1bmN0aW9u
IGhhbmRsZXIsIHZvaWQgKm9iamVjdCk7CgogICAgICAgIE9iamVjdF9za2VsICpfc2tlbCgpOwog
ICAgICAgIE9iamVjdExvY2F0aW9uIF9sb2NhdGlvbigpOwoKcHVibGljOgogICAgICAgIE9iamVj
dF9za2VsKCk7CiAgICAgICAgdmlydHVhbCB+T2JqZWN0X3NrZWwoKTsKCgogICAgICAgIHZvaWQg
X2Rpc2Nvbm5lY3RSZW1vdGUoY2xhc3MgQ29ubmVjdGlvbiAqY29ubmVjdGlvbik7CiAgICAgICAg
dm9pZCBfcmVmZXJlbmNlQ2xlYW4oKTsKCgogICAgICAgIHZvaWQgX2Rpc3BhdGNoKEJ1ZmZlciAq
cmVxdWVzdCwgQnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7CiAgICAgICAgdm9pZCBfZGlz
cGF0Y2goQnVmZmVyICpyZXF1ZXN0LCBsb25nIG1ldGhvZElEKTsKICAgICAgICBsb25nIF9sb29r
dXBNZXRob2QoY29uc3QgTWV0aG9kRGVmICYpOwoKCgoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJp
bmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgdmlydHVhbCB2b2lkIF9idWlsZE1ldGhv
ZFRhYmxlKCk7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBfcmVsZWFzZSgpOwogICAgICAgIHZp
cnR1YWwgdm9pZCBfY29weVJlbW90ZSgpOwogICAgICAgIHZpcnR1YWwgdm9pZCBfdXNlUmVtb3Rl
KCk7CiAgICAgICAgdmlydHVhbCB2b2lkIF9yZWxlYXNlUmVtb3RlKCk7CgoKCgogICAgICAgIEZs
b3dTeXN0ZW0gX2Zsb3dTeXN0ZW0oKTsKCgoKCiAgICAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBf
aW50ZXJmYWNlTmFtZSgpOwogICAgICAgIEludGVyZmFjZURlZiBfcXVlcnlJbnRlcmZhY2UoY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIFR5cGVEZWYgX3F1ZXJ5VHlwZShjb25zdCBz
dGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgRW51bURlZiBfcXVlcnlFbnVtKGNvbnN0IHN0ZDo6
c3RyaW5nJiBuYW1lKTsKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIF90b1N0cmluZygpOwoK
CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJm
YWNlbmFtZSk7CgoKICAgICAgICBzdGQ6OnN0cmluZyBfYWRkQ2hpbGQoQXJ0czo6T2JqZWN0IGNo
aWxkLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgYm9vbCBfcmVtb3ZlQ2hpbGQo
Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIEFydHM6Ok9iamVjdCBfZ2V0Q2hpbGQo
Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
PiAqIF9xdWVyeUNoaWxkcmVuKCk7Cn07CgpjbGFzcyBPYmplY3Rfc3R1Yl9wcml2YXRlOwoKY2xh
c3MgT2JqZWN0X3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBPYmplY3RfYmFzZSB7CnByaXZhdGU6CiAg
ICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdF9iYXNlOwoKICAgICAgICBPYmplY3Rfc3R1Yl9wcml2
YXRlICpfZF9zdHViOwoKcHJvdGVjdGVkOgogICAgICAgIGxvbmcgX29iamVjdElELF9sb29rdXBD
YWNoZVJhbmRvbTsKICAgICAgICBDb25uZWN0aW9uICpfY29ubmVjdGlvbjsKCiAgICAgICAgT2Jq
ZWN0X3N0dWIoKTsKICAgICAgICBPYmplY3Rfc3R1YihDb25uZWN0aW9uICpjb25uZWN0aW9uLCBs
b25nIG9iamVjdElEKTsKICAgICAgICB2aXJ0dWFsIH5PYmplY3Rfc3R1YigpOwoKICAgICAgICB2
aXJ0dWFsIE9iamVjdF9zdHViICpfc3R1YigpOwogICAgICAgIE9iamVjdExvY2F0aW9uIF9sb2Nh
dGlvbigpOwoKICAgICAgICBlbnVtIHsgX2xvb2t1cE1ldGhvZENhY2hlU2l6ZSA9IDMzNyB9Owog
ICAgICAgIHN0YXRpYyBsb25nICpfbG9va3VwTWV0aG9kQ2FjaGU7CgogICAgICAgIGxvbmcgX2xv
b2t1cE1ldGhvZEZhc3QoY29uc3QgY2hhciAqbWV0aG9kKTsKICAgICAgICBsb25nIF9sb29rdXBN
ZXRob2QoY29uc3QgTWV0aG9kRGVmICYpOwoKcHVibGljOgoKCgoKICAgICAgICBCdWZmZXIgKl9h
bGxvY0N1c3RvbU1lc3NhZ2UobG9uZyBoYW5kbGVySUQpOwogICAgICAgIHZvaWQgX3NlbmRDdXN0
b21NZXNzYWdlKEJ1ZmZlciAqZGF0YSk7CgoKCgogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZh
Y2VOYW1lKCk7CiAgICAgICAgSW50ZXJmYWNlRGVmIF9xdWVyeUludGVyZmFjZShjb25zdCBzdGQ6
OnN0cmluZyYgbmFtZSk7CiAgICAgICAgVHlwZURlZiBfcXVlcnlUeXBlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lKTsKICAgICAgICBFbnVtRGVmIF9xdWVyeUVudW0oY29uc3Qgc3RkOjpzdHJpbmcm
IG5hbWUpOwogICAgICAgIHN0ZDo6c3RyaW5nIF90b1N0cmluZygpOwoKCgoKICAgICAgICBGbG93
U3lzdGVtIF9mbG93U3lzdGVtKCk7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBfcmVsZWFzZSgp
OwogICAgICAgIHZpcnR1YWwgdm9pZCBfY29weVJlbW90ZSgpOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBfdXNlUmVtb3RlKCk7CiAgICAgICAgdmlydHVhbCB2b2lkIF9yZWxlYXNlUmVtb3RlKCk7CgoK
ICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZh
Y2VuYW1lKTsKCgogICAgICAgIHN0ZDo6c3RyaW5nIF9hZGRDaGlsZChBcnRzOjpPYmplY3QgY2hp
bGQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgICAgICBib29sIF9yZW1vdmVDaGlsZChj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgQXJ0czo6T2JqZWN0IF9nZXRDaGlsZChj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
ICogX3F1ZXJ5Q2hpbGRyZW4oKTsKIyAzODQgIi4uLy4uL2FydHMvbWNvcC9vYmplY3QuaCIKICAg
ICAgICBib29sIF9lcnJvcigpOwoKCgoKICAgICAgICBzdGF0aWMgdm9pZCBfY2xlYW51cE1ldGhv
ZENhY2hlKCk7Cn07Cgp9OwojIDMwICIuLi8uLi9hcnRzL21jb3AvY29tbW9uLmgiIDIKIyAxICIu
Li8uLi9hcnRzL21jb3AvY29ubmVjdGlvbi5oIiAxCiMgMzEgIi4uLy4uL2FydHMvbWNvcC9jb21t
b24uaCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9vYmplY3RtYW5hZ2VyLmgiIDEKIyAyNiAiLi4v
Li4vYXJ0cy9tY29wL29iamVjdG1hbmFnZXIuaCIKIyAxICIuLi8uLi9hcnRzL21jb3Avb2JqZWN0
LmgiIDEKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL29iamVjdG1hbmFnZXIuaCIgMgojIDEgIi4uLy4u
L2FydHMvbWNvcC9mYWN0b3J5LmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9tY29wL2ZhY3RvcnkuaCIK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMSAzCiMgMjcgIi4uLy4uL2Fy
dHMvbWNvcC9mYWN0b3J5LmgiIDIKIyAxICIuLi8uLi9hcnRzL21jb3Avb2JqZWN0LmgiIDEKIyAy
OCAiLi4vLi4vYXJ0cy9tY29wL2ZhY3RvcnkuaCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9zdGFy
dHVwbWFuYWdlci5oIiAxCiMgMjYgIi4uLy4uL2FydHMvbWNvcC9zdGFydHVwbWFuYWdlci5oIgoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbGlzdCIgMSAzCiMgMjcgIi4uLy4uL2FydHMv
bWNvcC9zdGFydHVwbWFuYWdlci5oIiAyCiMgMzggIi4uLy4uL2FydHMvbWNvcC9zdGFydHVwbWFu
YWdlci5oIgpuYW1lc3BhY2UgQXJ0cyB7CgpjbGFzcyBTdGFydHVwQ2xhc3MgewpwdWJsaWM6CiAg
ICAgICAgU3RhcnR1cENsYXNzKCk7CiAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0dXAoKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIHNodXRkb3duKCk7Cn07CgpjbGFzcyBTdGFydHVwTWFuYWdl
ciB7CiAgICAgICAgc3RhdGljIHN0ZDo6bGlzdDxTdGFydHVwQ2xhc3MgKj4gKnN0YXJ0dXBDbGFz
c2VzOwogICAgICAgIHN0YXRpYyBjbGFzcyBFeHRlbnNpb25Mb2FkZXIgKmFjdGl2ZUV4dGVuc2lv
bkxvYWRlcjsKcHVibGljOgogICAgICAgIHN0YXRpYyB2b2lkIGFkZChTdGFydHVwQ2xhc3MgKnNj
KTsKICAgICAgICBzdGF0aWMgdm9pZCBzdGFydHVwKCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2h1
dGRvd24oKTsKIyA2MyAiLi4vLi4vYXJ0cy9tY29wL3N0YXJ0dXBtYW5hZ2VyLmgiCiAgICAgICAg
c3RhdGljIHZvaWQgc2V0RXh0ZW5zaW9uTG9hZGVyKGNsYXNzIEV4dGVuc2lvbkxvYWRlciAqZXh0
ZW5zaW9uKTsKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxGcmVlQWxsKCk7Cn07Cgp9
OwojIDI5ICIuLi8uLi9hcnRzL21jb3AvZmFjdG9yeS5oIiAyCiMgMzggIi4uLy4uL2FydHMvbWNv
cC9mYWN0b3J5LmgiCm5hbWVzcGFjZSBBcnRzIHsKCmNsYXNzIEZhY3RvcnlQcml2YXRlOwoKY2xh
c3MgRmFjdG9yeSA6IHB1YmxpYyBTdGFydHVwQ2xhc3Mgewpwcml2YXRlOgogICAgICAgIEZhY3Rv
cnlQcml2YXRlICpkOwpwdWJsaWM6CiAgICAgICAgdm9pZCBzdGFydHVwKCk7CiAgICAgICAgdm9p
ZCBzaHV0ZG93bigpOwogICAgICAgIHZpcnR1YWwgT2JqZWN0X3NrZWwgKmNyZWF0ZUluc3RhbmNl
KCkgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgaW50ZXJmYWNlTmFtZSgpID0gMDsK
fTsKIyA2NCAiLi4vLi4vYXJ0cy9tY29wL2ZhY3RvcnkuaCIKfTsKIyAyOCAiLi4vLi4vYXJ0cy9t
Y29wL29iamVjdG1hbmFnZXIuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbGlz
dCIgMSAzCiMgMjkgIi4uLy4uL2FydHMvbWNvcC9vYmplY3RtYW5hZ2VyLmgiIDIKIyAzNyAiLi4v
Li4vYXJ0cy9tY29wL29iamVjdG1hbmFnZXIuaCIKbmFtZXNwYWNlIEFydHMgewoKY2xhc3MgT2Jq
ZWN0OwpjbGFzcyBPYmplY3RNYW5hZ2VyUHJpdmF0ZTsKCmNsYXNzIE9iamVjdE1hbmFnZXIgewpw
cml2YXRlOgogICAgICAgIE9iamVjdE1hbmFnZXJQcml2YXRlICpkOwoKcHJvdGVjdGVkOgogICAg
ICAgIHN0YXRpYyBPYmplY3RNYW5hZ2VyICpfaW5zdGFuY2U7CiAgICAgICAgc3RkOjpsaXN0PEZh
Y3RvcnkgKj4gZmFjdG9yaWVzOwogICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gcmVmZXJl
bmNlTmFtZXM7CgpwdWJsaWM6CiAgICAgICAgT2JqZWN0TWFuYWdlcigpOwogICAgICAgIH5PYmpl
Y3RNYW5hZ2VyKCk7CgogICAgICAgIHN0YXRpYyBPYmplY3RNYW5hZ2VyICp0aGUoKTsKICAgICAg
ICBPYmplY3Rfc2tlbCAqY3JlYXRlKHN0ZDo6c3RyaW5nIG5hbWUpOwoKICAgICAgICBib29sIGFk
ZEdsb2JhbFJlZmVyZW5jZShPYmplY3Qgb2JqZWN0LCBzdGQ6OnN0cmluZyBuYW1lKTsKICAgICAg
ICBzdGQ6OnN0cmluZyBnZXRHbG9iYWxSZWZlcmVuY2Uoc3RkOjpzdHJpbmcgbmFtZSk7CiAgICAg
ICAgdm9pZCByZW1vdmVHbG9iYWxSZWZlcmVuY2VzKCk7CiAgICAgICAgdm9pZCByZW1vdmVFeHRl
bnNpb25zKCk7CiAgICAgICAgdm9pZCBzaHV0ZG93bkV4dGVuc2lvbnMoKTsKCiAgICAgICAgdm9p
ZCByZWdpc3RlckZhY3RvcnkoRmFjdG9yeSAqZmFjdG9yeSk7CiAgICAgICAgdm9pZCByZW1vdmVG
YWN0b3J5KEZhY3RvcnkgKmZhY3RvcnkpOwoKICAgICAgICB2b2lkIHByb3ZpZGVDYXBhYmlsaXR5
KGNvbnN0IHN0ZDo6c3RyaW5nJiBjYXBhYmlsaXR5KTsKICAgICAgICB2b2lkIHJlbW92ZUNhcGFi
aWxpdHkoY29uc3Qgc3RkOjpzdHJpbmcmIGNhcGFiaWxpdHkpOwp9OwoKfTsKIyAzMiAiLi4vLi4v
YXJ0cy9tY29wL2NvbW1vbi5oIiAyCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2lkbGZpbGVyZWcuaCIg
MQojIDI2ICIuLi8uLi9hcnRzL21jb3AvaWRsZmlsZXJlZy5oIgojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvc3RyaW5nIiAxIDMKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL2lkbGZpbGVyZWcu
aCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9zdGFydHVwbWFuYWdlci5oIiAxCiMgMjggIi4uLy4u
L2FydHMvbWNvcC9pZGxmaWxlcmVnLmgiIDIKIyAzNyAiLi4vLi4vYXJ0cy9tY29wL2lkbGZpbGVy
ZWcuaCIKbmFtZXNwYWNlIEFydHMgewoKY2xhc3MgSURMRmlsZVJlZyA6IHB1YmxpYyBTdGFydHVw
Q2xhc3MgewogICAgICAgIGxvbmcgbnI7CiAgICAgICAgY29uc3QgY2hhciAqX25hbWUsICpfY29u
dGVudHM7CnB1YmxpYzoKICAgICAgICBJRExGaWxlUmVnKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKmNvbnRlbnRzKTsKICAgICAgICB2b2lkIHN0YXJ0dXAoKTsKICAgICAgICB2b2lkIHNo
dXRkb3duKCk7Cn07Cn07CiMgMzMgIi4uLy4uL2FydHMvbWNvcC9jb21tb24uaCIgMgojIDEgIi4u
Ly4uL2FydHMvbWNvcC9hc3luY3N0cmVhbS5oIiAxCiMgMjYgIi4uLy4uL2FydHMvbWNvcC9hc3lu
Y3N0cmVhbS5oIgojIDEgIi4uLy4uL2FydHMvbWNvcC9idWZmZXIuaCIgMQojIDI3ICIuLi8uLi9h
cnRzL21jb3AvYXN5bmNzdHJlYW0uaCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9kYXRhcGFja2V0
LmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9tY29wL2RhdGFwYWNrZXQuaCIKIyAxICIuLi8uLi9hcnRz
L21jb3AvYnVmZmVyLmgiIDEKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL2RhdGFwYWNrZXQuaCIgMgoj
IDM2ICIuLi8uLi9hcnRzL21jb3AvZGF0YXBhY2tldC5oIgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNz
IEdlbmVyaWNEYXRhQ2hhbm5lbFByaXZhdGU7CgoKCmNsYXNzIEdlbmVyaWNEYXRhQ2hhbm5lbCB7
CnByaXZhdGU6CiAgICAgICAgR2VuZXJpY0RhdGFDaGFubmVsUHJpdmF0ZSAqZDsKCnByb3RlY3Rl
ZDoKICAgICAgICBmcmllbmQgY2xhc3MgR2VuZXJpY0RhdGFQYWNrZXQ7CgoKCgogICAgICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzZWRQYWNrZXQoR2VuZXJpY0RhdGFQYWNrZXQgKnBhY2tldCkgPSAw
OwoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgc2VuZFBhY2tldChHZW5lcmljRGF0YVBhY2tldCAq
cGFja2V0KSA9IDA7CgpwdWJsaWM6CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHNldFB1bGwoaW50
IHBhY2tldHMsIGludCBjYXBhY2l0eSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBlbmRQdWxs
KCkgPSAwOwoKICAgICAgICBHZW5lcmljRGF0YUNoYW5uZWwoKSA6IGQoMCkKICAgICAgICB7CiAg
ICAgICAgfQp9OwojIDg0ICIuLi8uLi9hcnRzL21jb3AvZGF0YXBhY2tldC5oIgpjbGFzcyBHZW5l
cmljRGF0YVBhY2tldFByaXZhdGU7CgpjbGFzcyBHZW5lcmljRGF0YVBhY2tldCB7CnByaXZhdGU6
CiAgICAgICAgR2VuZXJpY0RhdGFQYWNrZXRQcml2YXRlICpkOwogICAgICAgIHN0YXRpYyBsb25n
IF9zdGF0aWNEYXRhUGFja2V0Q291bnQ7CgpwdWJsaWM6CgoKCiAgICAgICAgc3RhdGljIGxvbmcg
X2RhdGFQYWNrZXRDb3VudCgpIHsgcmV0dXJuIF9zdGF0aWNEYXRhUGFja2V0Q291bnQ7IH0KCgoK
CiAgICAgICAgR2VuZXJpY0RhdGFDaGFubmVsICpjaGFubmVsOwoKCgoKCgoKICAgICAgICB2aXJ0
dWFsIHZvaWQgZW5zdXJlQ2FwYWNpdHkoaW50IGNhcGFjaXR5KSA9IDA7CgoKCgoKICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVhZChCdWZmZXImIHN0cmVhbSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZShCdWZmZXImIHN0cmVhbSkgPSAwOwoKCgoKCgogICAgICAgIGludCBzaXplOwoKCgoK
ICAgICAgICBpbnQgdXNlQ291bnQ7CgogICAgICAgIGlubGluZSB2b2lkIHNlbmQoKQogICAgICAg
IHsKICAgICAgICAgICAgICAgIGNoYW5uZWwtPnNlbmRQYWNrZXQodGhpcyk7CiAgICAgICAgfQog
ICAgICAgIGlubGluZSB2b2lkIHByb2Nlc3NlZCgpCiAgICAgICAgewogICAgICAgICAgICAgICAg
dXNlQ291bnQtLTsKICAgICAgICAgICAgICAgIGlmKHVzZUNvdW50ID09IDApCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoYW5uZWwpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbm5lbC0+cHJvY2Vzc2VkUGFja2V0KHRoaXMpOwogICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHRoaXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIH5H
ZW5lcmljRGF0YVBhY2tldCgpCiAgICAgICAgewogICAgICAgICAgICAgICAgX3N0YXRpY0RhdGFQ
YWNrZXRDb3VudC0tOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBHZW5lcmljRGF0YVBh
Y2tldChHZW5lcmljRGF0YUNoYW5uZWwgKmNoYW5uZWwpCiAgICAgICAgICAgICAgICA6ZCgwKSxj
aGFubmVsKGNoYW5uZWwpLHVzZUNvdW50KDApCiAgICAgICAgewogICAgICAgICAgICAgICAgX3N0
YXRpY0RhdGFQYWNrZXRDb3VudCsrOwogICAgICAgIH0KfTsKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBU
PgpjbGFzcyBEYXRhUGFja2V0IDogcHVibGljIEdlbmVyaWNEYXRhUGFja2V0IHsKcHVibGljOgog
ICAgICAgIFQgKmNvbnRlbnRzOwoKcHJvdGVjdGVkOgogICAgICAgIERhdGFQYWNrZXQoR2VuZXJp
Y0RhdGFDaGFubmVsICpjaGFubmVsKQogICAgICAgICAgICA6IEdlbmVyaWNEYXRhUGFja2V0KGNo
YW5uZWwpIHt9CiAgICAgICAgfkRhdGFQYWNrZXQoKSB7fQp9OwoKCgoKdGVtcGxhdGU8Y2xhc3Mg
VD4KY2xhc3MgUmF3RGF0YVBhY2tldCA6IHB1YmxpYyBEYXRhUGFja2V0PFQ+IHsKcHJvdGVjdGVk
OgogICAgICAgIGludCBjYXBhY2l0eTsKICAgICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5KGludCBu
ZXdDYXBhY2l0eSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihuZXdDYXBhY2l0eSA+IGNh
cGFjaXR5KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVb
XSBjb250ZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHkgPSBuZXdDYXBhY2l0
eTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgPSBuZXcgVFtjYXBhY2l0eV07CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIFJhd0RhdGFQYWNrZXQoaW50IGNhcGFj
aXR5LCBHZW5lcmljRGF0YUNoYW5uZWwgKmNoYW5uZWwpCiAgICAgICAgICAgICAgICA6RGF0YVBh
Y2tldDxUPihjaGFubmVsKSwgY2FwYWNpdHkoY2FwYWNpdHkpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgc2l6ZSA9IGNhcGFjaXR5OwogICAgICAgICAgICAgICAgY29udGVudHMgPSBuZXcgVFtj
YXBhY2l0eV07CiAgICAgICAgfQogICAgICAgIH5SYXdEYXRhUGFja2V0KCkKICAgICAgICB7CiAg
ICAgICAgICAgICAgICBkZWxldGVbXSBjb250ZW50czsKICAgICAgICB9Cn07CgoKCgoKY2xhc3Mg
RmxvYXREYXRhUGFja2V0IDogcHVibGljIFJhd0RhdGFQYWNrZXQ8ZmxvYXQ+IHsKcHVibGljOgog
ICAgICAgIEZsb2F0RGF0YVBhY2tldChpbnQgY2FwYWNpdHksIEdlbmVyaWNEYXRhQ2hhbm5lbCAq
Y2hhbm5lbCkKICAgICAgICAgICAgICAgICAgICAgICAgOiBSYXdEYXRhUGFja2V0PGZsb2F0Pihj
YXBhY2l0eSwgY2hhbm5lbCkKICAgICAgICB7CgogICAgICAgIH0KICAgICAgICB2b2lkIHJlYWQo
QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGUoQnVmZmVyJiBzdHJlYW0pOwp9OwoK
Y2xhc3MgQnl0ZURhdGFQYWNrZXQgOiBwdWJsaWMgUmF3RGF0YVBhY2tldDxtY29wYnl0ZT4gewpw
dWJsaWM6CiAgICAgICAgQnl0ZURhdGFQYWNrZXQoaW50IGNhcGFjaXR5LCBHZW5lcmljRGF0YUNo
YW5uZWwgKmNoYW5uZWwpCiAgICAgICAgICAgICAgICAgICAgICAgIDogUmF3RGF0YVBhY2tldDxt
Y29wYnl0ZT4oY2FwYWNpdHksIGNoYW5uZWwpCiAgICAgICAgewoKICAgICAgICB9CiAgICAgICAg
dm9pZCByZWFkKEJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdyaXRlKEJ1ZmZlciYgc3Ry
ZWFtKTsKfTsKCn07CiMgMjggIi4uLy4uL2FydHMvbWNvcC9hc3luY3N0cmVhbS5oIiAyCiMgMzkg
Ii4uLy4uL2FydHMvbWNvcC9hc3luY3N0cmVhbS5oIgpuYW1lc3BhY2UgQXJ0cyB7CgpjbGFzcyBH
ZW5lcmljQXN5bmNTdHJlYW1Qcml2YXRlOwoKY2xhc3MgR2VuZXJpY0FzeW5jU3RyZWFtIHsKcHJp
dmF0ZToKICAgICAgICBHZW5lcmljQXN5bmNTdHJlYW1Qcml2YXRlICpkOwpwdWJsaWM6CgoKCiAg
ICAgICAgdmlydHVhbCBHZW5lcmljRGF0YVBhY2tldCAqY3JlYXRlUGFja2V0KGludCBjYXBhY2l0
eSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBmcmVlUGFja2V0KEdlbmVyaWNEYXRhUGFja2V0
ICpwYWNrZXQpID0gMDsKCiAgICAgICAgdmlydHVhbCBHZW5lcmljQXN5bmNTdHJlYW0gKmNyZWF0
ZU5ld1N0cmVhbSgpID0gMDsKCiAgICAgICAgR2VuZXJpY0RhdGFDaGFubmVsICpjaGFubmVsOwog
ICAgICAgIGludCBfbm90aWZ5SUQ7CgogICAgICAgIGlubGluZSBpbnQgbm90aWZ5SUQoKSB7IHJl
dHVybiBfbm90aWZ5SUQ7IH0KfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIEFzeW5jU3RyZWFt
IDogcHVibGljIEdlbmVyaWNBc3luY1N0cmVhbSB7CnByb3RlY3RlZDoKICAgICAgICBHZW5lcmlj
RGF0YVBhY2tldCAqY3JlYXRlUGFja2V0KGludCBjYXBhY2l0eSkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gYWxsb2NQYWNrZXQoY2FwYWNpdHkpOwogICAgICAgIH0KICAgICAgICB2
b2lkIGZyZWVQYWNrZXQoR2VuZXJpY0RhdGFQYWNrZXQgKnBhY2tldCkKICAgICAgICB7CiAgICAg
ICAgICAgICAgICBkZWxldGUgcGFja2V0OwogICAgICAgIH0KcHVibGljOgoKICAgICAgICB2aXJ0
dWFsIERhdGFQYWNrZXQ8VD4gKmFsbG9jUGFja2V0KGludCBjYXBhY2l0eSkgPSAwOwoKICAgICAg
ICBpbmxpbmUgdm9pZCBzZXRQdWxsKGludCBwYWNrZXRzLCBpbnQgY2FwYWNpdHkpCiAgICAgICAg
ewogICAgICAgICAgICAgICAgY2hhbm5lbC0+c2V0UHVsbChwYWNrZXRzLGNhcGFjaXR5KTsKICAg
ICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgZW5kUHVsbCgpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgY2hhbm5lbC0+ZW5kUHVsbCgpOwogICAgICAgIH0KfTsKCmNsYXNzIEZsb2F0QXN5bmNT
dHJlYW0gOiBwdWJsaWMgQXN5bmNTdHJlYW08ZmxvYXQ+CnsKcHVibGljOgogICAgICAgIERhdGFQ
YWNrZXQ8ZmxvYXQ+ICphbGxvY1BhY2tldChpbnQgY2FwYWNpdHkpOwogICAgICAgIEdlbmVyaWNB
c3luY1N0cmVhbSAqY3JlYXRlTmV3U3RyZWFtKCk7Cn07CgpjbGFzcyBCeXRlQXN5bmNTdHJlYW0g
OiBwdWJsaWMgQXN5bmNTdHJlYW08bWNvcGJ5dGU+CnsKcHVibGljOgogICAgICAgIERhdGFQYWNr
ZXQ8bWNvcGJ5dGU+ICphbGxvY1BhY2tldChpbnQgY2FwYWNpdHkpOwogICAgICAgIEdlbmVyaWNB
c3luY1N0cmVhbSAqY3JlYXRlTmV3U3RyZWFtKCk7Cn07Cgp9OwojIDM0ICIuLi8uLi9hcnRzL21j
b3AvY29tbW9uLmgiIDIKIyAxICIuLi8uLi9hcnRzL21jb3AvbWNvcHV0aWxzLmgiIDEKIyAzMyAi
Li4vLi4vYXJ0cy9tY29wL21jb3B1dGlscy5oIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvc3RyaW5nIiAxIDMKIyAzNCAiLi4vLi4vYXJ0cy9tY29wL21jb3B1dGlscy5oIiAyCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDM1ICIuLi8uLi9hcnRzL21j
b3AvbWNvcHV0aWxzLmgiIDIKCm5hbWVzcGFjZSBBcnRzIHsKCmNsYXNzIE1DT1BVdGlscyB7CnB1
YmxpYzoKIyA0OCAiLi4vLi4vYXJ0cy9tY29wL21jb3B1dGlscy5oIgogICAgICAgIHN0YXRpYyBz
dGQ6OnN0cmluZyBjcmVhdGVGaWxlUGF0aChzdGQ6OnN0cmluZyBuYW1lKTsKCgoKCgoKCiAgICAg
ICAgc3RhdGljIHN0ZDo6c3RyaW5nIGdldEZ1bGxIb3N0bmFtZSgpOwoKCgoKICAgICAgICBzdGF0
aWMgc3RkOjpzdHJpbmcgcmVhZENvbmZpZ0VudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlZmF1bHRWYWx1ZSA9ICIi
KTsKCgoKCgoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWtlSUlEKGNvbnN0IHN0ZDo6
c3RyaW5nJiBpbnRlcmZhY2VOYW1lKTsKCgoKCiAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiAqdHJhZGVyUGF0aCgpOwoKCgoKICAgICAgICBzdGF0aWMgY29uc3Qg
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICpleHRlbnNpb25QYXRoKCk7CgoKCgoKICAgICAgICBz
dGF0aWMgYm9vbCB0b2tlbml6ZShjb25zdCBzdGQ6OnN0cmluZyYgbGluZSwgc3RkOjpzdHJpbmcm
IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+JiB2YWx1ZXMpOwp9OwoKfTsKIyAzNSAiLi4vLi4vYXJ0cy9tY29w
L2NvbW1vbi5oIiAyCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2FueXJlZi5oIiAxCiMgMjYgIi4uLy4u
L2FydHMvbWNvcC9hbnlyZWYuaCIKIyAxICIuLi8uLi9hcnRzL21jb3AvYnVmZmVyLmgiIDEKIyAy
NyAiLi4vLi4vYXJ0cy9tY29wL2FueXJlZi5oIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9zdHJpbmciIDEgMwojIDI4ICIuLi8uLi9hcnRzL21jb3AvYW55cmVmLmgiIDIKIyAzNiAi
Li4vLi4vYXJ0cy9tY29wL2FueXJlZi5oIgpuYW1lc3BhY2UgQXJ0cyB7CgpjbGFzcyBBbnk7CmNs
YXNzIEFueVJlZkJhc2Ugewpwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCAqZGF0YTsKCgoKCgoKICAg
ICAgICBzdGQ6OnN0cmluZyBfdHlwZTsKIyA2MCAiLi4vLi4vYXJ0cy9tY29wL2FueXJlZi5oIgog
ICAgICAgIGVudW0gUmVwcmVzZW50YXRpb24gewogICAgICAgICAgICAgICAgcmVwVm9pZCA9IDAs
CiAgICAgICAgICAgICAgICByZXBCeXRlID0gMTAsCiAgICAgICAgICAgICAgICByZXBMb25nID0g
MjAsIHJlcEludCA9IDIxICwKICAgICAgICAgICAgICAgIHJlcEZsb2F0ID0gMzAsIHJlcERvdWJs
ZSA9IDMxICwKICAgICAgICAgICAgICAgIHJlcFN0cmluZyA9IDQwLCByZXBDU3RyaW5nID0gNDEg
LAogICAgICAgICAgICAgICAgcmVwQm9vbCA9IDUwLAogICAgICAgICAgICAgICAgcmVwQnl0ZVNl
cSA9IDUxMCwKICAgICAgICAgICAgICAgIHJlcExvbmdTZXEgPSA1MjAsCiAgICAgICAgICAgICAg
ICByZXBGbG9hdFNlcSA9IDUzMCwKICAgICAgICAgICAgICAgIHJlcFN0cmluZ1NlcSA9IDU0MCwK
ICAgICAgICAgICAgICAgIHJlcEJvb2xTZXEgPSA1NTAsCiAgICAgICAgICAgICAgICByZXBBbnkg
PSAxMDAwCiAgICAgICAgfSByZXA7CgogICAgICAgIHZvaWQgX3dyaXRlKEJ1ZmZlciAqYikgY29u
c3Q7CiAgICAgICAgdm9pZCBfcmVhZChCdWZmZXIgKmIpIGNvbnN0OwoKICAgICAgICBBbnlSZWZC
YXNlKGNvbnN0IHZvaWQgKmRhdGEsIFJlcHJlc2VudGF0aW9uIHJlcCkKICAgICAgICAgICAgICAg
IDogZGF0YShjb25zdF9jYXN0PHZvaWQgKj4oZGF0YSkpLCByZXAocmVwKSB7IH07CiAgICAgICAg
QW55UmVmQmFzZShjb25zdCB2b2lkICpkYXRhLCBSZXByZXNlbnRhdGlvbiByZXAsIGNvbnN0IGNo
YXIgKnR5cGUpCiAgICAgICAgICAgICAgICA6IGRhdGEoY29uc3RfY2FzdDx2b2lkICo+KGRhdGEp
KSwgX3R5cGUodHlwZSksIHJlcChyZXApIHsgfTsKICAgICAgICBBbnlSZWZCYXNlKGNvbnN0IEFu
eVJlZkJhc2UgJmNvcHkpCiAgICAgICAgICAgICAgICA6IGRhdGEoY29weS5kYXRhKSwgX3R5cGUo
Y29weS5fdHlwZSksIHJlcChjb3B5LnJlcCkgeyB9CnB1YmxpYzoKICAgICAgICBzdGQ6OnN0cmlu
ZyB0eXBlKCkgY29uc3Q7Cn07CgpjbGFzcyBBbnlDb25zdFJlZiA6IHB1YmxpYyBBbnlSZWZCYXNl
IHsKcHVibGljOgogICAgICAgIEFueUNvbnN0UmVmKCkgOiBBbnlSZWZCYXNlKDAscmVwVm9pZCkg
eyB9OwogICAgICAgIEFueUNvbnN0UmVmKGNvbnN0IG1jb3BieXRlJiB2YWx1ZSkgOiBBbnlSZWZC
YXNlKCZ2YWx1ZSxyZXBCeXRlKSB7IH07CiAgICAgICAgQW55Q29uc3RSZWYoY29uc3QgaW50JiB2
YWx1ZSkgOiBBbnlSZWZCYXNlKCZ2YWx1ZSxyZXBJbnQpIHsgfTsKICAgICAgICBBbnlDb25zdFJl
Zihjb25zdCBsb25nJiB2YWx1ZSkgOiBBbnlSZWZCYXNlKCZ2YWx1ZSxyZXBMb25nKSB7IH07CiAg
ICAgICAgQW55Q29uc3RSZWYoY29uc3QgZmxvYXQmIHZhbHVlKSA6IEFueVJlZkJhc2UoJnZhbHVl
LHJlcEZsb2F0KSB7IH07CiAgICAgICAgQW55Q29uc3RSZWYoY29uc3QgZG91YmxlJiB2YWx1ZSkg
OiBBbnlSZWZCYXNlKCZ2YWx1ZSxyZXBEb3VibGUpIHsgfTsKICAgICAgICBBbnlDb25zdFJlZihj
b25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwU3RyaW5nKSB7
IH07CiAgICAgICAgQW55Q29uc3RSZWYoY29uc3QgY2hhciAqdmFsdWUpIDogQW55UmVmQmFzZSh2
YWx1ZSxyZXBDU3RyaW5nKSB7IH07CiAgICAgICAgQW55Q29uc3RSZWYoY29uc3QgYm9vbCYgdmFs
dWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwQm9vbCkgeyB9OwoKICAgICAgICBBbnlDb25zdFJl
Zihjb25zdCBzdGQ6OnZlY3RvcjxtY29wYnl0ZT4mIHYpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBBbnlSZWZCYXNlKCZ2LHJlcEJ5dGVTZXEpIHsgfTsKICAgICAgICBBbnlDb25zdFJlZihjb25z
dCBzdGQ6OnZlY3Rvcjxsb25nPiYgdikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFueVJlZkJh
c2UoJnYscmVwTG9uZ1NlcSkgeyB9OwogICAgICAgIEFueUNvbnN0UmVmKGNvbnN0IHN0ZDo6dmVj
dG9yPGZsb2F0PiYgdikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFueVJlZkJhc2UoJnYscmVw
RmxvYXRTZXEpIHsgfTsKICAgICAgICBBbnlDb25zdFJlZihjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4mIHYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBbnlSZWZCYXNlKCZ2LHJlcFN0
cmluZ1NlcSkgeyB9OwogICAgICAgIEFueUNvbnN0UmVmKGNvbnN0IHN0ZDo6dmVjdG9yPGJvb2w+
JiB2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQW55UmVmQmFzZSgmdixyZXBCb29sU2VxKSB7
IH07CgogICAgICAgIEFueUNvbnN0UmVmKGNvbnN0IEFueSYgdmFsdWUpIDogQW55UmVmQmFzZSgm
dmFsdWUscmVwQW55KSB7IH07CgogICAgICAgIEFueUNvbnN0UmVmKGNvbnN0IEFueUNvbnN0UmVm
JiByZWYpIDogQW55UmVmQmFzZShyZWYpIHsgfQogICAgICAgIHZvaWQgd3JpdGUoQnVmZmVyICpi
KSBjb25zdCB7IF93cml0ZShiKTsgfQp9OwoKY2xhc3MgQW55UmVmIDogcHVibGljIEFueVJlZkJh
c2UgewpwdWJsaWM6CiAgICAgICAgQW55UmVmKCkgOiBBbnlSZWZCYXNlKDAscmVwVm9pZCkgeyB9
OwoKCiAgICAgICAgQW55UmVmKG1jb3BieXRlJiB2YWx1ZSkgOiBBbnlSZWZCYXNlKCZ2YWx1ZSxy
ZXBCeXRlKSB7IH07CiAgICAgICAgQW55UmVmKGludCYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFs
dWUscmVwSW50KSB7IH07CiAgICAgICAgQW55UmVmKGxvbmcmIHZhbHVlKSA6IEFueVJlZkJhc2Uo
JnZhbHVlLHJlcExvbmcpIHsgfTsKICAgICAgICBBbnlSZWYoZmxvYXQmIHZhbHVlKSA6IEFueVJl
ZkJhc2UoJnZhbHVlLHJlcEZsb2F0KSB7IH07CiAgICAgICAgQW55UmVmKGRvdWJsZSYgdmFsdWUp
IDogQW55UmVmQmFzZSgmdmFsdWUscmVwRG91YmxlKSB7IH07CiAgICAgICAgQW55UmVmKHN0ZDo6
c3RyaW5nJiB2YWx1ZSkgOiBBbnlSZWZCYXNlKCZ2YWx1ZSxyZXBTdHJpbmcpIHsgfTsKICAgICAg
ICBBbnlSZWYoYm9vbCYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwQm9vbCkgeyB9OwoK
CiAgICAgICAgQW55UmVmKHN0ZDo6dmVjdG9yPG1jb3BieXRlPiYgdmFsdWUpIDogQW55UmVmQmFz
ZSgmdmFsdWUscmVwQnl0ZVNlcSkgeyB9OwogICAgICAgIEFueVJlZihzdGQ6OnZlY3Rvcjxsb25n
PiYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwTG9uZ1NlcSkgeyB9OwogICAgICAgIEFu
eVJlZihzdGQ6OnZlY3RvcjxmbG9hdD4mIHZhbHVlKSA6IEFueVJlZkJhc2UoJnZhbHVlLHJlcEZs
b2F0U2VxKSB7IH07CiAgICAgICAgQW55UmVmKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdmFs
dWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwU3RyaW5nU2VxKXt9OwogICAgICAgIEFueVJlZihz
dGQ6OnZlY3Rvcjxib29sPiYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwQm9vbFNlcSl7
fTsKCiAgICAgICAgQW55UmVmKEFueSYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwQW55
KSB7IH07CgogICAgICAgIEFueVJlZihjb25zdCBBbnlSZWYmIHJlZikgOiBBbnlSZWZCYXNlKHJl
ZikgeyB9CgogICAgICAgIHZvaWQgcmVhZChCdWZmZXIgKmIpIGNvbnN0IHsgX3JlYWQoYik7IH0K
ICAgICAgICB2b2lkIHdyaXRlKEJ1ZmZlciAqYikgY29uc3QgeyBfd3JpdGUoYik7IH0KfTsKCn07
CiMgMzYgIi4uLy4uL2FydHMvbWNvcC9jb21tb24uaCIgMgojIDUwICIuLi8uLi9hcnRzL21jb3Av
Y29tbW9uLmgiCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2NvcmUuaCIgMQoKCgoKCiMgMSAiLi4vLi4v
YXJ0cy9tY29wL2NvbW1vbi5oIiAxCiMgNyAiLi4vLi4vYXJ0cy9tY29wL2NvcmUuaCIgMgoKbmFt
ZXNwYWNlIEFydHMgewplbnVtIEhlYWRlck1hZ2ljIHtNQ09QX01BR0lDID0gMTI5NjI1Njg0OH07
CmVudW0gTWVzc2FnZVR5cGUge21jb3BNZXNzYWdlSW52YWxpZCA9IDAsIG1jb3BTZXJ2ZXJIZWxs
byA9IDEsIG1jb3BDbGllbnRIZWxsbyA9IDIsIG1jb3BBdXRoQWNjZXB0ID0gMywgbWNvcEludm9j
YXRpb24gPSA0LCBtY29wUmV0dXJuID0gNSwgbWNvcE9uZXdheUludm9jYXRpb24gPSA2fTsKZW51
bSBNZXRob2RUeXBlIHttZXRob2RPbmV3YXkgPSAxLCBtZXRob2RUd293YXkgPSAyfTsKZW51bSBB
dHRyaWJ1dGVUeXBlIHtzdHJlYW1JbiA9IDEsIHN0cmVhbU91dCA9IDIsIHN0cmVhbU11bHRpID0g
NCwgYXR0cmlidXRlU3RyZWFtID0gOCwgYXR0cmlidXRlQXR0cmlidXRlID0gMTYsIHN0cmVhbUFz
eW5jID0gMzIsIHN0cmVhbURlZmF1bHQgPSA2NH07CmVudW0gVHlwZUlkZW50aWZpY2F0aW9uIHt0
aVVua25vd24gPSAwLCB0aVZvaWQgPSAxLCB0aUxvbmcgPSAyLCB0aUJ5dGUgPSAzLCB0aVN0cmlu
ZyA9IDQsIHRpQm9vbGVhbiA9IDUsIHRpRmxvYXQgPSA2LCB0aUVudW0gPSAxMjgsIHRpVHlwZSA9
IDEyOSwgdGlJbnRlcmZhY2UgPSAxMzB9Owp9OwpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIEhlYWRl
ciA6IHB1YmxpYyBBcnRzOjpUeXBlIHsKcHVibGljOgogICAgICAgIEhlYWRlcigpOwogICAgICAg
IEhlYWRlcihBcnRzOjpIZWFkZXJNYWdpYyBfYV9tYWdpYywgbG9uZyBfYV9tZXNzYWdlTGVuZ3Ro
LCBBcnRzOjpNZXNzYWdlVHlwZSBfYV9tZXNzYWdlVHlwZSk7CiAgICAgICAgSGVhZGVyKEFydHM6
OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICBIZWFkZXIoY29uc3QgSGVhZGVyJiBjb3B5VHlwZSk7
CiAgICAgICAgSGVhZGVyJiBvcGVyYXRvcj0oY29uc3QgSGVhZGVyJiBhc3NpZ25UeXBlKTsKICAg
ICAgICBBcnRzOjpIZWFkZXJNYWdpYyBtYWdpYzsKICAgICAgICBsb25nIG1lc3NhZ2VMZW5ndGg7
CiAgICAgICAgQXJ0czo6TWVzc2FnZVR5cGUgbWVzc2FnZVR5cGU7CgoKICAgICAgICB2b2lkIHJl
YWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdyaXRlVHlwZShBcnRz
OjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07CgpjbGFzcyBJbnZvY2F0aW9uIDogcHVibGljIEFy
dHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgSW52b2NhdGlvbigpOwogICAgICAgIEludm9jYXRp
b24obG9uZyBfYV9vYmplY3RJRCwgbG9uZyBfYV9tZXRob2RJRCwgbG9uZyBfYV9yZXF1ZXN0SUQp
OwogICAgICAgIEludm9jYXRpb24oQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIEludm9j
YXRpb24oY29uc3QgSW52b2NhdGlvbiYgY29weVR5cGUpOwogICAgICAgIEludm9jYXRpb24mIG9w
ZXJhdG9yPShjb25zdCBJbnZvY2F0aW9uJiBhc3NpZ25UeXBlKTsKICAgICAgICBsb25nIG9iamVj
dElEOwogICAgICAgIGxvbmcgbWV0aG9kSUQ7CiAgICAgICAgbG9uZyByZXF1ZXN0SUQ7CgoKICAg
ICAgICB2b2lkIHJlYWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdy
aXRlVHlwZShBcnRzOjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07CgpjbGFzcyBPbmV3YXlJbnZv
Y2F0aW9uIDogcHVibGljIEFydHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgT25ld2F5SW52b2Nh
dGlvbigpOwogICAgICAgIE9uZXdheUludm9jYXRpb24obG9uZyBfYV9vYmplY3RJRCwgbG9uZyBf
YV9tZXRob2RJRCk7CiAgICAgICAgT25ld2F5SW52b2NhdGlvbihBcnRzOjpCdWZmZXImIHN0cmVh
bSk7CiAgICAgICAgT25ld2F5SW52b2NhdGlvbihjb25zdCBPbmV3YXlJbnZvY2F0aW9uJiBjb3B5
VHlwZSk7CiAgICAgICAgT25ld2F5SW52b2NhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IE9uZXdheUlu
dm9jYXRpb24mIGFzc2lnblR5cGUpOwogICAgICAgIGxvbmcgb2JqZWN0SUQ7CiAgICAgICAgbG9u
ZyBtZXRob2RJRDsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0p
OwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKSBjb25zdDsKfTsK
CmNsYXNzIFNlcnZlckhlbGxvIDogcHVibGljIEFydHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAg
U2VydmVySGVsbG8oKTsKICAgICAgICBTZXJ2ZXJIZWxsbyhjb25zdCBzdGQ6OnN0cmluZyYgX2Ff
bWNvcFZlcnNpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiBfYV9zZXJ2ZXJJRCwgY29uc3Qgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+JiBfYV9hdXRoUHJvdG9jb2xzLCBjb25zdCBzdGQ6OnN0cmluZyYg
X2FfYXV0aFNlZWQpOwogICAgICAgIFNlcnZlckhlbGxvKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsK
ICAgICAgICBTZXJ2ZXJIZWxsbyhjb25zdCBTZXJ2ZXJIZWxsbyYgY29weVR5cGUpOwogICAgICAg
IFNlcnZlckhlbGxvJiBvcGVyYXRvcj0oY29uc3QgU2VydmVySGVsbG8mIGFzc2lnblR5cGUpOwog
ICAgICAgIHN0ZDo6c3RyaW5nIG1jb3BWZXJzaW9uOwogICAgICAgIHN0ZDo6c3RyaW5nIHNlcnZl
cklEOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdXRoUHJvdG9jb2xzOwogICAg
ICAgIHN0ZDo6c3RyaW5nIGF1dGhTZWVkOwoKCiAgICAgICAgdm9pZCByZWFkVHlwZShBcnRzOjpC
dWZmZXImIHN0cmVhbSk7CiAgICAgICAgdm9pZCB3cml0ZVR5cGUoQXJ0czo6QnVmZmVyJiBzdHJl
YW0pIGNvbnN0Owp9OwoKY2xhc3MgQ2xpZW50SGVsbG8gOiBwdWJsaWMgQXJ0czo6VHlwZSB7CnB1
YmxpYzoKICAgICAgICBDbGllbnRIZWxsbygpOwogICAgICAgIENsaWVudEhlbGxvKGNvbnN0IHN0
ZDo6c3RyaW5nJiBfYV9zZXJ2ZXJJRCwgY29uc3Qgc3RkOjpzdHJpbmcmIF9hX2F1dGhQcm90b2Nv
bCwgY29uc3Qgc3RkOjpzdHJpbmcmIF9hX2F1dGhEYXRhKTsKICAgICAgICBDbGllbnRIZWxsbyhB
cnRzOjpCdWZmZXImIHN0cmVhbSk7CiAgICAgICAgQ2xpZW50SGVsbG8oY29uc3QgQ2xpZW50SGVs
bG8mIGNvcHlUeXBlKTsKICAgICAgICBDbGllbnRIZWxsbyYgb3BlcmF0b3I9KGNvbnN0IENsaWVu
dEhlbGxvJiBhc3NpZ25UeXBlKTsKICAgICAgICBzdGQ6OnN0cmluZyBzZXJ2ZXJJRDsKICAgICAg
ICBzdGQ6OnN0cmluZyBhdXRoUHJvdG9jb2w7CiAgICAgICAgc3RkOjpzdHJpbmcgYXV0aERhdGE7
CgoKICAgICAgICB2b2lkIHJlYWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2
b2lkIHdyaXRlVHlwZShBcnRzOjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07CgpjbGFzcyBBdXRo
QWNjZXB0IDogcHVibGljIEFydHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgQXV0aEFjY2VwdCgp
OwogICAgICAgIEF1dGhBY2NlcHQoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBfYV9o
aW50cyk7CiAgICAgICAgQXV0aEFjY2VwdChBcnRzOjpCdWZmZXImIHN0cmVhbSk7CiAgICAgICAg
QXV0aEFjY2VwdChjb25zdCBBdXRoQWNjZXB0JiBjb3B5VHlwZSk7CiAgICAgICAgQXV0aEFjY2Vw
dCYgb3BlcmF0b3I9KGNvbnN0IEF1dGhBY2NlcHQmIGFzc2lnblR5cGUpOwogICAgICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiBoaW50czsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6
QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3Ry
ZWFtKSBjb25zdDsKfTsKCmNsYXNzIE9iamVjdFJlZmVyZW5jZSA6IHB1YmxpYyBBcnRzOjpUeXBl
IHsKcHVibGljOgogICAgICAgIE9iamVjdFJlZmVyZW5jZSgpOwogICAgICAgIE9iamVjdFJlZmVy
ZW5jZShjb25zdCBzdGQ6OnN0cmluZyYgX2Ffc2VydmVySUQsIGxvbmcgX2Ffb2JqZWN0SUQsIGNv
bnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgX2FfdXJscyk7CiAgICAgICAgT2JqZWN0UmVm
ZXJlbmNlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICBPYmplY3RSZWZlcmVuY2UoY29u
c3QgT2JqZWN0UmVmZXJlbmNlJiBjb3B5VHlwZSk7CiAgICAgICAgT2JqZWN0UmVmZXJlbmNlJiBv
cGVyYXRvcj0oY29uc3QgT2JqZWN0UmVmZXJlbmNlJiBhc3NpZ25UeXBlKTsKICAgICAgICBzdGQ6
OnN0cmluZyBzZXJ2ZXJJRDsKICAgICAgICBsb25nIG9iamVjdElEOwogICAgICAgIHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiB1cmxzOwoKCiAgICAgICAgdm9pZCByZWFkVHlwZShBcnRzOjpCdWZm
ZXImIHN0cmVhbSk7CiAgICAgICAgdm9pZCB3cml0ZVR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0p
IGNvbnN0Owp9OwoKY2xhc3MgUGFyYW1EZWYgOiBwdWJsaWMgQXJ0czo6VHlwZSB7CnB1YmxpYzoK
ICAgICAgICBQYXJhbURlZigpOwogICAgICAgIFBhcmFtRGVmKGNvbnN0IHN0ZDo6c3RyaW5nJiBf
YV90eXBlLCBjb25zdCBzdGQ6OnN0cmluZyYgX2FfbmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+JiBfYV9oaW50cyk7CiAgICAgICAgUGFyYW1EZWYoQXJ0czo6QnVmZmVyJiBzdHJl
YW0pOwogICAgICAgIFBhcmFtRGVmKGNvbnN0IFBhcmFtRGVmJiBjb3B5VHlwZSk7CiAgICAgICAg
UGFyYW1EZWYmIG9wZXJhdG9yPShjb25zdCBQYXJhbURlZiYgYXNzaWduVHlwZSk7CiAgICAgICAg
c3RkOjpzdHJpbmcgdHlwZTsKICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiBoaW50czsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6
QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3Ry
ZWFtKSBjb25zdDsKfTsKCmNsYXNzIE1ldGhvZERlZiA6IHB1YmxpYyBBcnRzOjpUeXBlIHsKcHVi
bGljOgogICAgICAgIE1ldGhvZERlZigpOwogICAgICAgIE1ldGhvZERlZihjb25zdCBzdGQ6OnN0
cmluZyYgX2FfbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIF9hX3R5cGUsIEFydHM6Ok1ldGhvZFR5
cGUgX2FfZmxhZ3MsIGNvbnN0IHN0ZDo6dmVjdG9yPEFydHM6OlBhcmFtRGVmPiYgX2Ffc2lnbmF0
dXJlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIF9hX2hpbnRzKTsKICAgICAgICBN
ZXRob2REZWYoQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIE1ldGhvZERlZihjb25zdCBN
ZXRob2REZWYmIGNvcHlUeXBlKTsKICAgICAgICBNZXRob2REZWYmIG9wZXJhdG9yPShjb25zdCBN
ZXRob2REZWYmIGFzc2lnblR5cGUpOwogICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAgICAg
c3RkOjpzdHJpbmcgdHlwZTsKICAgICAgICBBcnRzOjpNZXRob2RUeXBlIGZsYWdzOwogICAgICAg
IHN0ZDo6dmVjdG9yPEFydHM6OlBhcmFtRGVmPiBzaWduYXR1cmU7CiAgICAgICAgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+IGhpbnRzOwoKCiAgICAgICAgdm9pZCByZWFkVHlwZShBcnRzOjpCdWZm
ZXImIHN0cmVhbSk7CiAgICAgICAgdm9pZCB3cml0ZVR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0p
IGNvbnN0Owp9OwoKY2xhc3MgQXR0cmlidXRlRGVmIDogcHVibGljIEFydHM6OlR5cGUgewpwdWJs
aWM6CiAgICAgICAgQXR0cmlidXRlRGVmKCk7CiAgICAgICAgQXR0cmlidXRlRGVmKGNvbnN0IHN0
ZDo6c3RyaW5nJiBfYV9uYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgX2FfdHlwZSwgQXJ0czo6QXR0
cmlidXRlVHlwZSBfYV9mbGFncywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBfYV9o
aW50cyk7CiAgICAgICAgQXR0cmlidXRlRGVmKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAg
ICBBdHRyaWJ1dGVEZWYoY29uc3QgQXR0cmlidXRlRGVmJiBjb3B5VHlwZSk7CiAgICAgICAgQXR0
cmlidXRlRGVmJiBvcGVyYXRvcj0oY29uc3QgQXR0cmlidXRlRGVmJiBhc3NpZ25UeXBlKTsKICAg
ICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CiAgICAgICAg
QXJ0czo6QXR0cmlidXRlVHlwZSBmbGFnczsKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gaGludHM7CgoKICAgICAgICB2b2lkIHJlYWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsK
ICAgICAgICB2b2lkIHdyaXRlVHlwZShBcnRzOjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07Cgpj
bGFzcyBJbnRlcmZhY2VEZWYgOiBwdWJsaWMgQXJ0czo6VHlwZSB7CnB1YmxpYzoKICAgICAgICBJ
bnRlcmZhY2VEZWYoKTsKICAgICAgICBJbnRlcmZhY2VEZWYoY29uc3Qgc3RkOjpzdHJpbmcmIF9h
X25hbWUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgX2FfaW5oZXJpdGVkSW50ZXJm
YWNlcywgY29uc3Qgc3RkOjp2ZWN0b3I8QXJ0czo6TWV0aG9kRGVmPiYgX2FfbWV0aG9kcywgY29u
c3Qgc3RkOjp2ZWN0b3I8QXJ0czo6QXR0cmlidXRlRGVmPiYgX2FfYXR0cmlidXRlcywgY29uc3Qg
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBfYV9kZWZhdWx0UG9ydHMsIGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiYgX2FfaGludHMpOwogICAgICAgIEludGVyZmFjZURlZihBcnRzOjpC
dWZmZXImIHN0cmVhbSk7CiAgICAgICAgSW50ZXJmYWNlRGVmKGNvbnN0IEludGVyZmFjZURlZiYg
Y29weVR5cGUpOwogICAgICAgIEludGVyZmFjZURlZiYgb3BlcmF0b3I9KGNvbnN0IEludGVyZmFj
ZURlZiYgYXNzaWduVHlwZSk7CiAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5oZXJpdGVkSW50ZXJmYWNlczsKICAgICAgICBzdGQ6OnZl
Y3RvcjxBcnRzOjpNZXRob2REZWY+IG1ldGhvZHM7CiAgICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6
QXR0cmlidXRlRGVmPiBhdHRyaWJ1dGVzOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
PiBkZWZhdWx0UG9ydHM7CiAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGhpbnRzOwoK
CiAgICAgICAgdm9pZCByZWFkVHlwZShBcnRzOjpCdWZmZXImIHN0cmVhbSk7CiAgICAgICAgdm9p
ZCB3cml0ZVR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0pIGNvbnN0Owp9OwoKY2xhc3MgVHlwZUNv
bXBvbmVudCA6IHB1YmxpYyBBcnRzOjpUeXBlIHsKcHVibGljOgogICAgICAgIFR5cGVDb21wb25l
bnQoKTsKICAgICAgICBUeXBlQ29tcG9uZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBfYV90eXBlLCBj
b25zdCBzdGQ6OnN0cmluZyYgX2FfbmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
JiBfYV9oaW50cyk7CiAgICAgICAgVHlwZUNvbXBvbmVudChBcnRzOjpCdWZmZXImIHN0cmVhbSk7
CiAgICAgICAgVHlwZUNvbXBvbmVudChjb25zdCBUeXBlQ29tcG9uZW50JiBjb3B5VHlwZSk7CiAg
ICAgICAgVHlwZUNvbXBvbmVudCYgb3BlcmF0b3I9KGNvbnN0IFR5cGVDb21wb25lbnQmIGFzc2ln
blR5cGUpOwogICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CiAgICAgICAgc3RkOjpzdHJpbmcgbmFt
ZTsKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaGludHM7CgoKICAgICAgICB2b2lk
IHJlYWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdyaXRlVHlwZShB
cnRzOjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07CgpjbGFzcyBUeXBlRGVmIDogcHVibGljIEFy
dHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgVHlwZURlZigpOwogICAgICAgIFR5cGVEZWYoY29u
c3Qgc3RkOjpzdHJpbmcmIF9hX25hbWUsIGNvbnN0IHN0ZDo6dmVjdG9yPEFydHM6OlR5cGVDb21w
b25lbnQ+JiBfYV9jb250ZW50cywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBfYV9o
aW50cyk7CiAgICAgICAgVHlwZURlZihBcnRzOjpCdWZmZXImIHN0cmVhbSk7CiAgICAgICAgVHlw
ZURlZihjb25zdCBUeXBlRGVmJiBjb3B5VHlwZSk7CiAgICAgICAgVHlwZURlZiYgb3BlcmF0b3I9
KGNvbnN0IFR5cGVEZWYmIGFzc2lnblR5cGUpOwogICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAg
ICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6VHlwZUNvbXBvbmVudD4gY29udGVudHM7CiAgICAgICAg
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGhpbnRzOwoKCiAgICAgICAgdm9pZCByZWFkVHlwZShB
cnRzOjpCdWZmZXImIHN0cmVhbSk7CiAgICAgICAgdm9pZCB3cml0ZVR5cGUoQXJ0czo6QnVmZmVy
JiBzdHJlYW0pIGNvbnN0Owp9OwoKY2xhc3MgRW51bUNvbXBvbmVudCA6IHB1YmxpYyBBcnRzOjpU
eXBlIHsKcHVibGljOgogICAgICAgIEVudW1Db21wb25lbnQoKTsKICAgICAgICBFbnVtQ29tcG9u
ZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBfYV9uYW1lLCBsb25nIF9hX3ZhbHVlLCBjb25zdCBzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4mIF9hX2hpbnRzKTsKICAgICAgICBFbnVtQ29tcG9uZW50KEFy
dHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICBFbnVtQ29tcG9uZW50KGNvbnN0IEVudW1Db21w
b25lbnQmIGNvcHlUeXBlKTsKICAgICAgICBFbnVtQ29tcG9uZW50JiBvcGVyYXRvcj0oY29uc3Qg
RW51bUNvbXBvbmVudCYgYXNzaWduVHlwZSk7CiAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAg
ICAgICBsb25nIHZhbHVlOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBoaW50czsK
CgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZv
aWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKSBjb25zdDsKfTsKCmNsYXNzIEVudW1E
ZWYgOiBwdWJsaWMgQXJ0czo6VHlwZSB7CnB1YmxpYzoKICAgICAgICBFbnVtRGVmKCk7CiAgICAg
ICAgRW51bURlZihjb25zdCBzdGQ6OnN0cmluZyYgX2FfbmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8
QXJ0czo6RW51bUNvbXBvbmVudD4mIF9hX2NvbnRlbnRzLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4mIF9hX2hpbnRzKTsKICAgICAgICBFbnVtRGVmKEFydHM6OkJ1ZmZlciYgc3RyZWFt
KTsKICAgICAgICBFbnVtRGVmKGNvbnN0IEVudW1EZWYmIGNvcHlUeXBlKTsKICAgICAgICBFbnVt
RGVmJiBvcGVyYXRvcj0oY29uc3QgRW51bURlZiYgYXNzaWduVHlwZSk7CiAgICAgICAgc3RkOjpz
dHJpbmcgbmFtZTsKICAgICAgICBzdGQ6OnZlY3RvcjxBcnRzOjpFbnVtQ29tcG9uZW50PiBjb250
ZW50czsKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaGludHM7CgoKICAgICAgICB2
b2lkIHJlYWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdyaXRlVHlw
ZShBcnRzOjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07CgpjbGFzcyBNb2R1bGVEZWYgOiBwdWJs
aWMgQXJ0czo6VHlwZSB7CnB1YmxpYzoKICAgICAgICBNb2R1bGVEZWYoKTsKICAgICAgICBNb2R1
bGVEZWYoY29uc3Qgc3RkOjpzdHJpbmcmIF9hX21vZHVsZU5hbWUsIGNvbnN0IHN0ZDo6dmVjdG9y
PEFydHM6OkVudW1EZWY+JiBfYV9lbnVtcywgY29uc3Qgc3RkOjp2ZWN0b3I8QXJ0czo6VHlwZURl
Zj4mIF9hX3R5cGVzLCBjb25zdCBzdGQ6OnZlY3RvcjxBcnRzOjpJbnRlcmZhY2VEZWY+JiBfYV9p
bnRlcmZhY2VzLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIF9hX2hpbnRzKTsKICAg
ICAgICBNb2R1bGVEZWYoQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIE1vZHVsZURlZihj
b25zdCBNb2R1bGVEZWYmIGNvcHlUeXBlKTsKICAgICAgICBNb2R1bGVEZWYmIG9wZXJhdG9yPShj
b25zdCBNb2R1bGVEZWYmIGFzc2lnblR5cGUpOwogICAgICAgIHN0ZDo6c3RyaW5nIG1vZHVsZU5h
bWU7CiAgICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6RW51bURlZj4gZW51bXM7CiAgICAgICAgc3Rk
Ojp2ZWN0b3I8QXJ0czo6VHlwZURlZj4gdHlwZXM7CiAgICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6
SW50ZXJmYWNlRGVmPiBpbnRlcmZhY2VzOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
PiBoaW50czsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwog
ICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKSBjb25zdDsKfTsKCmNs
YXNzIEFueSA6IHB1YmxpYyBBcnRzOjpUeXBlIHsKcHVibGljOgogICAgICAgIEFueSgpOwogICAg
ICAgIEFueShjb25zdCBzdGQ6OnN0cmluZyYgX2FfdHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8QXJ0
czo6bWNvcGJ5dGU+JiBfYV92YWx1ZSk7CiAgICAgICAgQW55KEFydHM6OkJ1ZmZlciYgc3RyZWFt
KTsKICAgICAgICBBbnkoY29uc3QgQW55JiBjb3B5VHlwZSk7CiAgICAgICAgQW55JiBvcGVyYXRv
cj0oY29uc3QgQW55JiBhc3NpZ25UeXBlKTsKICAgICAgICBzdGQ6OnN0cmluZyB0eXBlOwogICAg
ICAgIHN0ZDo6dmVjdG9yPEFydHM6Om1jb3BieXRlPiB2YWx1ZTsKCgogICAgICAgIHZvaWQgcmVh
ZFR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6
OkJ1ZmZlciYgc3RyZWFtKSBjb25zdDsKfTsKCmNsYXNzIFRyYWRlckVudHJ5IDogcHVibGljIEFy
dHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgVHJhZGVyRW50cnkoKTsKICAgICAgICBUcmFkZXJF
bnRyeShjb25zdCBzdGQ6OnN0cmluZyYgX2FfaW50ZXJmYWNlTmFtZSwgY29uc3Qgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+JiBfYV9saW5lcyk7CiAgICAgICAgVHJhZGVyRW50cnkoQXJ0czo6QnVm
ZmVyJiBzdHJlYW0pOwogICAgICAgIFRyYWRlckVudHJ5KGNvbnN0IFRyYWRlckVudHJ5JiBjb3B5
VHlwZSk7CiAgICAgICAgVHJhZGVyRW50cnkmIG9wZXJhdG9yPShjb25zdCBUcmFkZXJFbnRyeSYg
YXNzaWduVHlwZSk7CiAgICAgICAgc3RkOjpzdHJpbmcgaW50ZXJmYWNlTmFtZTsKICAgICAgICBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGluZXM7CgoKICAgICAgICB2b2lkIHJlYWRUeXBlKEFy
dHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdyaXRlVHlwZShBcnRzOjpCdWZmZXIm
IHN0cmVhbSkgY29uc3Q7Cn07Cgp9OwpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIEludGVyZmFjZVJl
cG87CmNsYXNzIEludGVyZmFjZVJlcG9WMjsKY2xhc3MgRmxvd1N5c3RlbVNlbmRlcjsKY2xhc3Mg
Rmxvd1N5c3RlbVJlY2VpdmVyOwpjbGFzcyBGbG93U3lzdGVtOwpjbGFzcyBHbG9iYWxDb21tOwpj
bGFzcyBUbXBHbG9iYWxDb21tOwpjbGFzcyBUcmFkZXJPZmZlcjsKY2xhc3MgVHJhZGVyUXVlcnk7
CmNsYXNzIExvYWRlcjsKCmNsYXNzIEludGVyZmFjZVJlcG9fYmFzZSA6IHZpcnR1YWwgcHVibGlj
IEFydHM6Ok9iamVjdF9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n
IF9JSUQ7CgogICAgICAgIHN0YXRpYyBJbnRlcmZhY2VSZXBvX2Jhc2UgKl9jcmVhdGUoY29uc3Qg
c3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OkludGVyZmFjZVJlcG8iKTsKICAgICAgICBz
dGF0aWMgSW50ZXJmYWNlUmVwb19iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3Ry
ZWYpOwogICAgICAgIHN0YXRpYyBJbnRlcmZhY2VSZXBvX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFy
dHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMg
SW50ZXJmYWNlUmVwb19iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYg
b2JqZWN0KTsKICAgICAgICBpbmxpbmUgSW50ZXJmYWNlUmVwb19iYXNlICpfY29weSgpIHsKICAg
ICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1
YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAg
ICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIGxv
bmcgaW5zZXJ0TW9kdWxlKGNvbnN0IEFydHM6Ok1vZHVsZURlZiYgbmV3TW9kdWxlKSA9IDA7CiAg
ICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZU1vZHVsZShsb25nIG1vZHVsZUlEKSA9IDA7CiAgICAg
ICAgdmlydHVhbCBBcnRzOjpJbnRlcmZhY2VEZWYgcXVlcnlJbnRlcmZhY2UoY29uc3Qgc3RkOjpz
dHJpbmcmIG5hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIEFydHM6OlR5cGVEZWYgcXVlcnlUeXBl
KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCBBcnRzOjpFbnVt
RGVmIHF1ZXJ5RW51bShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgPSAwOwogICAgICAgIHZpcnR1
YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogcXVlcnlDaGlsZHJlbihjb25zdCBzdGQ6OnN0
cmluZyYgbmFtZSkgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
ICogcXVlcnlJbnRlcmZhY2VzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+ICogcXVlcnlUeXBlcygpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9y
PHN0ZDo6c3RyaW5nPiAqIHF1ZXJ5RW51bXMoKSA9IDA7Cn07CgpjbGFzcyBJbnRlcmZhY2VSZXBv
X3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBJbnRlcmZhY2VSZXBvX2Jhc2UsIHZpcnR1YWwgcHVibGlj
IEFydHM6Ok9iamVjdF9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIEludGVyZmFjZVJlcG9fc3R1
YigpOwoKcHVibGljOgogICAgICAgIEludGVyZmFjZVJlcG9fc3R1YihBcnRzOjpDb25uZWN0aW9u
ICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgbG9uZyBpbnNlcnRNb2R1bGUo
Y29uc3QgQXJ0czo6TW9kdWxlRGVmJiBuZXdNb2R1bGUpOwogICAgICAgIHZvaWQgcmVtb3ZlTW9k
dWxlKGxvbmcgbW9kdWxlSUQpOwogICAgICAgIEFydHM6OkludGVyZmFjZURlZiBxdWVyeUludGVy
ZmFjZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgQXJ0czo6VHlwZURlZiBxdWVy
eVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIEFydHM6OkVudW1EZWYgcXVl
cnlFbnVtKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4gKiBxdWVyeUNoaWxkcmVuKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgICAg
ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKiBxdWVyeUludGVyZmFjZXMoKTsKICAgICAgICBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKiBxdWVyeVR5cGVzKCk7CiAgICAgICAgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+ICogcXVlcnlFbnVtcygpOwp9OwoKY2xhc3MgSW50ZXJmYWNlUmVwb19z
a2VsIDogdmlydHVhbCBwdWJsaWMgSW50ZXJmYWNlUmVwb19iYXNlLCB2aXJ0dWFsIHB1YmxpYyBB
cnRzOjpPYmplY3Rfc2tlbCB7CnB1YmxpYzoKICAgICAgICBJbnRlcmZhY2VSZXBvX3NrZWwoKTsK
CiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgpOwogICAgICAg
IHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxl
V2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9pZCBfYnVp
bGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1
ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07CiMgMSAiLi4v
Li4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMzIgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVu
Y2UuaCIKIyAxICIuLi8uLi9hcnRzL21jb3AvY29tbW9uLmgiIDEKIyAzMyAiLi4vLi4vYXJ0cy9t
Y29wL3JlZmVyZW5jZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdHJpbmci
IDEgMwojIDM0ICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDIKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMSAzCiMgMzUgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVu
Y2UuaCIgMgoKbmFtZXNwYWNlIEFydHMgewoKCmNsYXNzIFJlZmVyZW5jZSB7CnByaXZhdGU6CiAg
ICAgICAgT2JqZWN0UmVmZXJlbmNlIG15cmVmOwogICAgICAgIHN0ZDo6c3RyaW5nIG15czsKICAg
ICAgICBib29sIHN0ck1vZGU7CnB1YmxpYzoKCiAgICAgICAgaW5saW5lIGV4cGxpY2l0IFJlZmVy
ZW5jZShjb25zdCBPYmplY3RSZWZlcmVuY2UmIHJlZikgewogICAgICAgICAgICAgICAgbXlyZWY9
cmVmOwogICAgICAgICAgICAgICAgc3RyTW9kZT1mYWxzZTsKICAgICAgICB9CgogICAgICAgIGlu
bGluZSBleHBsaWNpdCBSZWZlcmVuY2UoY29uc3Qgc3RkOjpzdHJpbmcmIHMpIHsKICAgICAgICAg
ICAgICAgIG15cz1zOwogICAgICAgICAgICAgICAgc3RyTW9kZT10cnVlOwogICAgICAgIH0KCiAg
ICAgICAgaW5saW5lIGV4cGxpY2l0IFJlZmVyZW5jZShjb25zdCBjaGFyKiBjKSB7CiAgICAgICAg
ICAgICAgICBteXM9YzsKICAgICAgICAgICAgICAgIHN0ck1vZGU9dHJ1ZTsKICAgICAgICB9CiAg
ICAgICAgaW5saW5lIFJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IHN0ZDo6c3RyaW5nJiBzKSB7
CiAgICAgICAgICAgICAgICBteXM9czsKICAgICAgICAgICAgICAgIHN0ck1vZGU9dHJ1ZTsKICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIFJlZmVy
ZW5jZSYgb3BlcmF0b3I9KGNvbnN0IGNoYXIqYykgewogICAgICAgICAgICAgICAgbXlzPWM7CiAg
ICAgICAgICAgICAgICBzdHJNb2RlPXRydWU7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgICAgfQogICAgICAgIGlubGluZSBib29sIGlzU3RyaW5nKCkgY29uc3Qge3JldHVybiBz
dHJNb2RlO30KCiAgICAgICAgaW5saW5lIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmcoKSBjb25z
dCB7cmV0dXJuIG15czt9CgogICAgICAgIGlubGluZSBjb25zdCBPYmplY3RSZWZlcmVuY2UmIHJl
ZmVyZW5jZSgpIGNvbnN0IHtyZXR1cm4gbXlyZWY7fQp9OwoKCmNsYXNzIFN1YkNsYXNzIHsKcHJp
dmF0ZToKICAgICAgICBzdGQ6OnN0cmluZyBteXM7CnB1YmxpYzoKCiAgICAgICAgaW5saW5lIGV4
cGxpY2l0IFN1YkNsYXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKSA6IG15cyhzKSB7fQogICAgICAg
IGlubGluZSBleHBsaWNpdCBTdWJDbGFzcyhjb25zdCBjaGFyKiBjKSA6IG15cyhjKSB7fQogICAg
ICAgIGlubGluZSBTdWJDbGFzcyYgb3BlcmF0b3I9KGNvbnN0IHN0ZDo6c3RyaW5nJiBzKSB7bXlz
PXM7IHJldHVybiAqdGhpczt9CiAgICAgICAgaW5saW5lIFN1YkNsYXNzJiBvcGVyYXRvcj0oY29u
c3QgY2hhcipjKSB7bXlzPWM7IHJldHVybiAqdGhpczt9CgogICAgICAgIGlubGluZSBjb25zdCBz
dGQ6OnN0cmluZyYgc3RyaW5nKCkgY29uc3Qge3JldHVybiBteXM7fQp9OwoKCmNsYXNzIFNjaGVk
dWxlTm9kZTsKY2xhc3MgRmxvd1N5c3RlbTsKCgoKCgoKY2xhc3MgT2JqZWN0IHsKcHJvdGVjdGVk
OgoKICAgICAgICBjbGFzcyBQb29sIHsKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBPYmpl
Y3Q7CiAgICAgICAgICAgICAgICBPYmplY3RfYmFzZSogKCpjcmVhdG9yKSgpOwogICAgICAgICAg
ICAgICAgYm9vbCBjcmVhdGVkOwogICAgICAgICAgICAgICAgaW50IGNvdW50OwogICAgICAgIHB1
YmxpYzoKICAgICAgICAgICAgICAgIE9iamVjdF9iYXNlKiBiYXNlOwogICAgICAgICAgICAgICAg
aW5saW5lIFBvb2woT2JqZWN0X2Jhc2UqIGIpCiAgICAgICAgICAgICAgICAgICAgICAgIDogY3Jl
YXRvcigwKSwgY3JlYXRlZCh0cnVlKSwgY291bnQoMSksIGJhc2UoYikge30KICAgICAgICAgICAg
ICAgIGlubGluZSBQb29sKE9iamVjdF9iYXNlKiAoKmNvcikoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgOiBjcmVhdG9yKGNvciksIGNyZWF0ZWQoZmFsc2UpLCBjb3VudCgxKSwgYmFzZSgwKSB7
fQogICAgICAgICAgICAgICAgaW5saW5lIHZvaWQgSW5jKCkge2NvdW50Kys7fQogICAgICAgICAg
ICAgICAgaW5saW5lIHZvaWQgRGVjKCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1j
b3VudD09MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJhc2UpIGJhc2Ut
Pl9yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXM7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIGlubGluZSB2b2lkIGNoZWNrY3JlYXRlKCkgewogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNyZWF0ZWQpIHtiYXNlID0gY3JlYXRvcigpOyBjcmVhdGVkPXRydWU7fQogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0gKl9wb29sOwoKICAgICAgICBpbmxpbmUgT2JqZWN0KE9iamVjdF9i
YXNlKiAoKmNvcikoKSkgewogICAgICAgICAgICAgICAgX3Bvb2wgPSBuZXcgUG9vbChjb3IpOwog
ICAgICAgIH0KICAgICAgICBpbmxpbmUgT2JqZWN0KFBvb2wqIHApIDogX3Bvb2wocCkgewogICAg
ICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgT2JqZWN0
KFBvb2wmIHApIDogX3Bvb2woJnApIHsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAg
ICAgICB9CiAgICAgICAgaW5saW5lIE9iamVjdChPYmplY3RfYmFzZSogYikgewogICAgICAgICAg
ICAgICAgX3Bvb2wgPSBuZXcgUG9vbChiKTsKICAgICAgICB9CnB1YmxpYzoKICAgICAgICB0eXBl
ZGVmIE9iamVjdF9iYXNlIF9iYXNlX2NsYXNzOwoKCgogICAgICAgIGlubGluZSBQb29sKiBfZ2V0
X3Bvb2woKSBjb25zdCB7cmV0dXJuIF9wb29sO30KCiAgICAgICAgaW5saW5lIH5PYmplY3QoKSB7
CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgfQoKCgoKICAgICAgICBpbmxp
bmUgT2JqZWN0KGNvbnN0IFN1YkNsYXNzJiBzKSB7CiAgICAgICAgICAgICAgICBfcG9vbCA9IG5l
dyBQb29sKE9iamVjdF9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKTsKICAgICAgICB9CiAgICAg
ICAgaW5saW5lIE9iamVjdChjb25zdCBSZWZlcmVuY2UgJnIpIHsKICAgICAgICAgICAgICAgIF9w
b29sID0gbmV3IFBvb2woci5pc1N0cmluZygpPyhPYmplY3RfYmFzZTo6X2Zyb21TdHJpbmcoci5z
dHJpbmcoKSkpOihPYmplY3RfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVl
KSkpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgT2JqZWN0KGNvbnN0IE9iamVjdCYgdGFyZ2V0
KSA6IF9wb29sKHRhcmdldC5fcG9vbCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwog
ICAgICAgIH0KICAgICAgICBpbmxpbmUgT2JqZWN0KCkgewogICAgICAgICAgICAgICAgX3Bvb2wg
PSBuZXcgUG9vbCgoT2JqZWN0X2Jhc2UqKTApOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgT2Jq
ZWN0JiBvcGVyYXRvcj0oY29uc3QgT2JqZWN0JiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlm
IChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9w
b29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAg
ICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICAgIH0KCgogICAgICAgIGlubGluZSBPYmplY3RfYmFzZSogX2Jhc2UoKSBjb25zdCB7CiAgICAg
ICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIHJldHVybiBf
cG9vbC0+YmFzZTsKICAgICAgICB9CgoKICAgICAgICBpbmxpbmUgYm9vbCBpc051bGwoKSBjb25z
dCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAg
IHJldHVybiAhKF9wb29sLT5iYXNlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIGJvb2wgZXJy
b3IoKSBjb25zdCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAg
ICByZXR1cm4gX3Bvb2wtPmJhc2UgJiYgX3Bvb2wtPmJhc2UtPl9lcnJvcigpOwogICAgICAgIH0K
CgogICAgICAgIGlubGluZSBib29sIF9pc0VxdWFsKGNvbnN0IE9iamVjdCYgb3RoZXIpIGNvbnN0
IHsKICAgICAgICAgICAgICAgIGlmKGlzTnVsbCgpICE9IG90aGVyLmlzTnVsbCgpKSByZXR1cm4g
ZmFsc2U7CgoKCiAgICAgICAgICAgICAgICBpZighaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBfcG9vbC0+YmFzZS0+X2lzRXF1YWwob3RoZXIuX3Bvb2wtPmJhc2UpOwoK
CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgoKCgoKICAgICAgICBpbmxp
bmUgQnVmZmVyICpfYWxsb2NDdXN0b21NZXNzYWdlKGxvbmcgaGFuZGxlcklEKSBjb25zdCB7CiAg
ICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgICgodm9p
ZCkgMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gX3Bvb2wtPmJhc2UtPl9hbGxvY0N1c3RvbU1l
c3NhZ2UoaGFuZGxlcklEKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSB2b2lkIF9zZW5kQ3Vz
dG9tTWVzc2FnZShCdWZmZXIgKmRhdGEpIGNvbnN0IHsKICAgICAgICAgICAgICAgIF9wb29sLT5j
aGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAg
IF9wb29sLT5iYXNlLT5fc2VuZEN1c3RvbU1lc3NhZ2UoZGF0YSk7CiAgICAgICAgfQoKCgogICAg
ICAgIGlubGluZSBsb25nIF9sb29rdXBNZXRob2QoY29uc3QgTWV0aG9kRGVmJiBtZXRob2REZWYp
IGNvbnN0IHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAg
ICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIHJldHVybiBfcG9vbC0+YmFzZS0+X2xv
b2t1cE1ldGhvZChtZXRob2REZWYpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgc3RkOjpzdHJp
bmcgX2ludGVyZmFjZU5hbWUoKSBjb25zdCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tj
cmVhdGUoKTsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICByZXR1
cm4gX3Bvb2wtPmJhc2UtPl9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgfQogICAgICAgIGlubGlu
ZSBJbnRlcmZhY2VEZWYgX3F1ZXJ5SW50ZXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBj
b25zdCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAg
ICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gX3Bvb2wtPmJhc2UtPl9xdWVy
eUludGVyZmFjZShuYW1lKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIFR5cGVEZWYgX3F1ZXJ5
VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bv
b2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAg
ICAgICAgcmV0dXJuIF9wb29sLT5iYXNlLT5fcXVlcnlUeXBlKG5hbWUpOwogICAgICAgIH0KICAg
ICAgICBpbmxpbmUgRW51bURlZiBfcXVlcnlFbnVtKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBj
b25zdCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAg
ICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gX3Bvb2wtPmJhc2UtPl9xdWVy
eUVudW0obmFtZSk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgX3RvU3Ry
aW5nKCkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAg
ICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgcmV0dXJuIF9wb29sLT5iYXNl
LT5fdG9TdHJpbmcoKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3Qge3JldHVybiBfdG9TdHJpbmcoKTt9CgoKICAgICAgICBpbmxpbmUgdm9pZCBj
YWxjdWxhdGVCbG9jayh1bnNpZ25lZCBsb25nIGN5Y2xlcykgY29uc3QgewogICAgICAgICAgICAg
ICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAg
ICAgICAgICAgICAgX3Bvb2wtPmJhc2UtPmNhbGN1bGF0ZUJsb2NrKGN5Y2xlcyk7CiAgICAgICAg
fQoKICAgICAgICBpbmxpbmUgU2NoZWR1bGVOb2RlICpfbm9kZSgpIGNvbnN0IHsKICAgICAgICAg
ICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsK
ICAgICAgICAgICAgICAgIHJldHVybiBfcG9vbC0+YmFzZS0+X25vZGUoKTsKICAgICAgICB9CgoK
ICAgICAgICBGbG93U3lzdGVtIF9mbG93U3lzdGVtKCkgY29uc3Q7CgogICAgICAgIGlubGluZSB2
b2lkIF9jb3B5UmVtb3RlKCkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3Jl
YXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3Bvb2wt
PmJhc2UtPl9jb3B5UmVtb3RlKCk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIF91c2VS
ZW1vdGUoKSBjb25zdCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAg
ICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcG9vbC0+YmFzZS0+X3Vz
ZVJlbW90ZSgpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBfcmVsZWFzZVJlbW90ZSgp
IGNvbnN0IHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAg
ICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIF9wb29sLT5iYXNlLT5fcmVsZWFzZVJl
bW90ZSgpOwogICAgICAgIH0KCgogICAgICAgIGlubGluZSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gX2RlZmF1bHRQb3J0c0luKCkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNr
Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgcmV0
dXJuIF9wb29sLT5iYXNlLT5fZGVmYXVsdFBvcnRzSW4oKTsKICAgICAgICB9CiAgICAgICAgaW5s
aW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Qgewog
ICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICAoKHZv
aWQpIDApOwogICAgICAgICAgICAgICAgcmV0dXJuIF9wb29sLT5iYXNlLT5fZGVmYXVsdFBvcnRz
T3V0KCk7CiAgICAgICAgfQoKCiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIF9hZGRDaGlsZChB
cnRzOjpPYmplY3QgY2hpbGQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdCB7CiAgICAg
ICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgICgodm9pZCkg
MCk7CiAgICAgICAgICAgICAgICByZXR1cm4gX3Bvb2wtPmJhc2UtPl9hZGRDaGlsZChjaGlsZCwg
bmFtZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSBib29sIF9yZW1vdmVDaGlsZChjb25zdCBz
dGQ6OnN0cmluZyYgbmFtZSkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3Jl
YXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgcmV0dXJu
IF9wb29sLT5iYXNlLT5fcmVtb3ZlQ2hpbGQobmFtZSk7CiAgICAgICAgfQogICAgICAgIGlubGlu
ZSBBcnRzOjpPYmplY3QgX2dldENoaWxkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdCB7
CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgICgo
dm9pZCkgMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gX3Bvb2wtPmJhc2UtPl9nZXRDaGlsZChu
YW1lKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAq
IF9xdWVyeUNoaWxkcmVuKCkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3Jl
YXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgcmV0dXJu
IF9wb29sLT5iYXNlLT5fcXVlcnlDaGlsZHJlbigpOwogICAgICAgIH0KIyAzMzIgIi4uLy4uL2Fy
dHMvbWNvcC9yZWZlcmVuY2UuaCIKICAgICAgICBpbmxpbmUgc3RhdGljIE9iamVjdCBudWxsKCkg
e3JldHVybiBPYmplY3QoKE9iamVjdF9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBP
YmplY3QgX2Zyb21fYmFzZShPYmplY3RfYmFzZSogYikge3JldHVybiBPYmplY3QoYik7fQp9OwoK
CmNsYXNzIER5bmFtaWNDYXN0IHsKcHJpdmF0ZToKICAgICAgICBPYmplY3Qgb2JqOwpwdWJsaWM6
CiAgICAgICAgaW5saW5lIGV4cGxpY2l0IER5bmFtaWNDYXN0KGNvbnN0IE9iamVjdCYgbykgOiBv
Ymoobykge30KICAgICAgICBpbmxpbmUgY29uc3QgT2JqZWN0JiBvYmplY3QoKSBjb25zdCB7cmV0
dXJuIG9iajt9Cn07Cgp9OwojIDM4MyAiLi4vLi4vYXJ0cy9tY29wL2NvcmUuaCIgMgpuYW1lc3Bh
Y2UgQXJ0cyB7CmNsYXNzIEludGVyZmFjZVJlcG8gOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJp
dmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAg
ICAgSW50ZXJmYWNlUmVwb19iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIEludGVyZmFjZVJl
cG9fYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3Jl
YXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICBfY2FjaGU9KEludGVyZmFjZVJlcG9fYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChJ
bnRlcmZhY2VSZXBvX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQp
IDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAg
ICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIEludGVyZmFjZVJlcG8oSW50ZXJmYWNl
UmVwb19iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgog
ICAgICAgIHR5cGVkZWYgSW50ZXJmYWNlUmVwb19iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBp
bmxpbmUgSW50ZXJmYWNlUmVwbygpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDAp
IHt9CiAgICAgICAgaW5saW5lIEludGVyZmFjZVJlcG8oY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMp
IDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChJbnRlcmZhY2VSZXBvX2Jhc2U6Ol9jcmVh
dGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgSW50ZXJmYWNlUmVw
byhjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVj
dChyLmlzU3RyaW5nKCk/KEludGVyZmFjZVJlcG9fYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmco
KSkpOihJbnRlcmZhY2VSZXBvX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1
ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEludGVyZmFjZVJlcG8oY29uc3QgQXJ0
czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KEludGVyZmFjZVJlcG9fYmFzZTo6X2Zy
b21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBJ
bnRlcmZhY2VSZXBvKGNvbnN0IEludGVyZmFjZVJlcG8mIHRhcmdldCkgOiBBcnRzOjpPYmplY3Qo
dGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIElu
dGVyZmFjZVJlcG8oQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2Nh
Y2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBJbnRlcmZhY2VSZXBvIG51bGwoKSB7cmV0
dXJuIEludGVyZmFjZVJlcG8oKEludGVyZmFjZVJlcG9fYmFzZSopMCk7fQogICAgICAgIGlubGlu
ZSBzdGF0aWMgSW50ZXJmYWNlUmVwbyBfZnJvbV9iYXNlKEludGVyZmFjZVJlcG9fYmFzZSogYikg
e3JldHVybiBJbnRlcmZhY2VSZXBvKGIpO30KICAgICAgICBpbmxpbmUgSW50ZXJmYWNlUmVwbyYg
b3BlcmF0b3I9KGNvbnN0IEludGVyZmFjZVJlcG8mIHRhcmdldCkgewogICAgICAgICAgICAgICAg
aWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAg
X3Bvb2wtPkRlYygpOwogICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAg
ICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wt
PkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBp
bmxpbmUgSW50ZXJmYWNlUmVwb19iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpf
bWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBsb25nIGluc2VydE1vZHVsZShjb25zdCBB
cnRzOjpNb2R1bGVEZWYmIG5ld01vZHVsZSk7CiAgICAgICAgaW5saW5lIHZvaWQgcmVtb3ZlTW9k
dWxlKGxvbmcgbW9kdWxlSUQpOwogICAgICAgIGlubGluZSBBcnRzOjpJbnRlcmZhY2VEZWYgcXVl
cnlJbnRlcmZhY2UoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIGlubGluZSBBcnRz
OjpUeXBlRGVmIHF1ZXJ5VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5s
aW5lIEFydHM6OkVudW1EZWYgcXVlcnlFbnVtKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAg
ICAgICBpbmxpbmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogcXVlcnlDaGlsZHJlbihjb25z
dCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPiAqIHF1ZXJ5SW50ZXJmYWNlcygpOwogICAgICAgIGlubGluZSBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4gKiBxdWVyeVR5cGVzKCk7CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6
c3RyaW5nPiAqIHF1ZXJ5RW51bXMoKTsKfTsKCmNsYXNzIEludGVyZmFjZVJlcG9WMl9iYXNlIDog
dmlydHVhbCBwdWJsaWMgQXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlIHsKcHVibGljOgogICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBJbnRlcmZhY2VSZXBv
VjJfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6SW50
ZXJmYWNlUmVwb1YyIik7CiAgICAgICAgc3RhdGljIEludGVyZmFjZVJlcG9WMl9iYXNlICpfZnJv
bVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBJbnRlcmZhY2VS
ZXBvVjJfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9v
bCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBJbnRlcmZhY2VSZXBvVjJfYmFzZSAqX2Zyb21E
eW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5lIElu
dGVyZmFjZVJlcG9WMl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7
CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
ICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZh
dWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWdu
ZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIEFydHM6OlR5cGVJZGVudGlmaWNhdGlvbiBp
ZGVudGlmeVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpID0gMDsKfTsKCmNsYXNzIEludGVy
ZmFjZVJlcG9WMl9zdHViIDogdmlydHVhbCBwdWJsaWMgSW50ZXJmYWNlUmVwb1YyX2Jhc2UsIHZp
cnR1YWwgcHVibGljIEFydHM6OkludGVyZmFjZVJlcG9fc3R1YiB7CnByb3RlY3RlZDoKICAgICAg
ICBJbnRlcmZhY2VSZXBvVjJfc3R1YigpOwoKcHVibGljOgogICAgICAgIEludGVyZmFjZVJlcG9W
Ml9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAg
ICAgICBBcnRzOjpUeXBlSWRlbnRpZmljYXRpb24gaWRlbnRpZnlUeXBlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lKTsKfTsKCmNsYXNzIEludGVyZmFjZVJlcG9WMl9za2VsIDogdmlydHVhbCBwdWJs
aWMgSW50ZXJmYWNlUmVwb1YyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OkludGVyZmFjZVJl
cG9fc2tlbCB7CnB1YmxpYzoKICAgICAgICBJbnRlcmZhY2VSZXBvVjJfc2tlbCgpOwoKICAgICAg
ICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpz
dHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNv
bnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhv
ZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFy
dHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRz
L21jb3AvcmVmZXJlbmNlLmgiIDEKIyA0ODEgIi4uLy4uL2FydHMvbWNvcC9jb3JlLmgiIDIKbmFt
ZXNwYWNlIEFydHMgewpjbGFzcyBJbnRlcmZhY2VSZXBvVjIgOiBwdWJsaWMgQXJ0czo6T2JqZWN0
IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7
CiAgICAgICAgSW50ZXJmYWNlUmVwb1YyX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgSW50
ZXJmYWNlUmVwb1YyX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29s
LT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgX2NhY2hlPShJbnRlcmZhY2VSZXBvVjJfYmFzZSAqKV9wb29sLT5i
YXNlLT5fY2FzdChJbnRlcmZhY2VSZXBvVjJfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1
cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgSW50ZXJmYWNl
UmVwb1YyKEludGVyZmFjZVJlcG9WMl9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hl
KDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgSW50ZXJmYWNlUmVwb1YyX2Jhc2UgX2Jh
c2VfY2xhc3M7CgogICAgICAgIGlubGluZSBJbnRlcmZhY2VSZXBvVjIoKSA6IEFydHM6Ok9iamVj
dChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBJbnRlcmZhY2VSZXBvVjIo
Y29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChJ
bnRlcmZhY2VSZXBvVjJfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQog
ICAgICAgIGlubGluZSBJbnRlcmZhY2VSZXBvVjIoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6
CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhJbnRlcmZhY2VSZXBv
VjJfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihJbnRlcmZhY2VSZXBvVjJfYmFzZTo6
X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAg
ICBpbmxpbmUgSW50ZXJmYWNlUmVwb1YyKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFy
dHM6Ok9iamVjdChJbnRlcmZhY2VSZXBvVjJfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVj
dCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBJbnRlcmZhY2VSZXBvVjIoY29uc3Qg
SW50ZXJmYWNlUmVwb1YyJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9j
YWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBJbnRlcmZhY2VSZXBvVjIoQXJ0
czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAg
ICAgaW5saW5lIHN0YXRpYyBJbnRlcmZhY2VSZXBvVjIgbnVsbCgpIHtyZXR1cm4gSW50ZXJmYWNl
UmVwb1YyKChJbnRlcmZhY2VSZXBvVjJfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMg
SW50ZXJmYWNlUmVwb1YyIF9mcm9tX2Jhc2UoSW50ZXJmYWNlUmVwb1YyX2Jhc2UqIGIpIHtyZXR1
cm4gSW50ZXJmYWNlUmVwb1YyKGIpO30KICAgICAgICBpbmxpbmUgSW50ZXJmYWNlUmVwb1YyJiBv
cGVyYXRvcj0oY29uc3QgSW50ZXJmYWNlUmVwb1YyJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAg
IGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAg
IF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAg
ICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29s
LT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAg
aW5saW5lIG9wZXJhdG9yIEFydHM6OkludGVyZmFjZVJlcG8oKSBjb25zdCB7IHJldHVybiBBcnRz
OjpJbnRlcmZhY2VSZXBvKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgSW50ZXJmYWNlUmVwb1Yy
X2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAg
ICAgICAgaW5saW5lIGxvbmcgaW5zZXJ0TW9kdWxlKGNvbnN0IEFydHM6Ok1vZHVsZURlZiYgbmV3
TW9kdWxlKTsKICAgICAgICBpbmxpbmUgdm9pZCByZW1vdmVNb2R1bGUobG9uZyBtb2R1bGVJRCk7
CiAgICAgICAgaW5saW5lIEFydHM6OkludGVyZmFjZURlZiBxdWVyeUludGVyZmFjZShjb25zdCBz
dGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5saW5lIEFydHM6OlR5cGVEZWYgcXVlcnlUeXBl
KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgICAgICBpbmxpbmUgQXJ0czo6RW51bURlZiBx
dWVyeUVudW0oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIGlubGluZSBzdGQ6OnZl
Y3RvcjxzdGQ6OnN0cmluZz4gKiBxdWVyeUNoaWxkcmVuKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1l
KTsKICAgICAgICBpbmxpbmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogcXVlcnlJbnRlcmZh
Y2VzKCk7CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIHF1ZXJ5VHlw
ZXMoKTsKICAgICAgICBpbmxpbmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogcXVlcnlFbnVt
cygpOwogICAgICAgIGlubGluZSBBcnRzOjpUeXBlSWRlbnRpZmljYXRpb24gaWRlbnRpZnlUeXBl
KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKfTsKCmNsYXNzIEZsb3dTeXN0ZW1TZW5kZXJfYmFz
ZSA6IHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9iYXNlIHsKcHVibGljOgogICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBGbG93U3lzdGVtU2VuZGVy
X2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OkZsb3dT
eXN0ZW1TZW5kZXIiKTsKICAgICAgICBzdGF0aWMgRmxvd1N5c3RlbVNlbmRlcl9iYXNlICpfZnJv
bVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBGbG93U3lzdGVt
U2VuZGVyX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJv
b2wgbmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMgRmxvd1N5c3RlbVNlbmRlcl9iYXNlICpfZnJv
bUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUg
Rmxvd1N5c3RlbVNlbmRlcl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkg
MCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9k
ZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpz
dHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5z
aWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc2VkKCkgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCkgPSAwOwp9OwoKY2xhc3MgRmxvd1N5c3Rl
bVNlbmRlcl9zdHViIDogdmlydHVhbCBwdWJsaWMgRmxvd1N5c3RlbVNlbmRlcl9iYXNlLCB2aXJ0
dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBGbG93U3lz
dGVtU2VuZGVyX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBGbG93U3lzdGVtU2VuZGVyX3N0dWIo
QXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIHZv
aWQgcHJvY2Vzc2VkKCk7CiAgICAgICAgdm9pZCBkaXNjb25uZWN0KCk7Cn07CgpjbGFzcyBGbG93
U3lzdGVtU2VuZGVyX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBGbG93U3lzdGVtU2VuZGVyX2Jhc2Us
IHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9za2VsIHsKcHVibGljOgogICAgICAgIEZsb3dT
eXN0ZW1TZW5kZXJfc2tlbCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFj
ZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAg
ICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1l
KTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRj
aChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9k
SUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA1ODMgIi4u
Ly4uL2FydHMvbWNvcC9jb3JlLmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBGbG93U3lzdGVt
U2VuZGVyIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFy
dHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIEZsb3dTeXN0ZW1TZW5kZXJfYmFz
ZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBGbG93U3lzdGVtU2VuZGVyX2Jhc2UgKl9tZXRob2Rf
Y2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAg
ICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShG
bG93U3lzdGVtU2VuZGVyX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoRmxvd1N5c3RlbVNlbmRl
cl9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJv
dGVjdGVkOgogICAgICAgIGlubGluZSBGbG93U3lzdGVtU2VuZGVyKEZsb3dTeXN0ZW1TZW5kZXJf
YmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAg
ICB0eXBlZGVmIEZsb3dTeXN0ZW1TZW5kZXJfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5s
aW5lIEZsb3dTeXN0ZW1TZW5kZXIoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgw
KSB7fQogICAgICAgIGlubGluZSBGbG93U3lzdGVtU2VuZGVyKGNvbnN0IEFydHM6OlN1YkNsYXNz
JiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoRmxvd1N5c3RlbVNlbmRlcl9iYXNl
OjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEZsb3dT
eXN0ZW1TZW5kZXIoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBB
cnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhGbG93U3lzdGVtU2VuZGVyX2Jhc2U6Ol9mcm9tU3Ry
aW5nKHIuc3RyaW5nKCkpKTooRmxvd1N5c3RlbVNlbmRlcl9iYXNlOjpfZnJvbVJlZmVyZW5jZShy
LnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBGbG93U3lz
dGVtU2VuZGVyKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChGbG93
U3lzdGVtU2VuZGVyX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUo
MCkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbVNlbmRlcihjb25zdCBGbG93U3lzdGVtU2Vu
ZGVyJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQu
X2NhY2hlKSB7fQogICAgICAgIGlubGluZSBGbG93U3lzdGVtU2VuZGVyKEFydHM6Ok9iamVjdDo6
UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBz
dGF0aWMgRmxvd1N5c3RlbVNlbmRlciBudWxsKCkge3JldHVybiBGbG93U3lzdGVtU2VuZGVyKChG
bG93U3lzdGVtU2VuZGVyX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIEZsb3dTeXN0
ZW1TZW5kZXIgX2Zyb21fYmFzZShGbG93U3lzdGVtU2VuZGVyX2Jhc2UqIGIpIHtyZXR1cm4gRmxv
d1N5c3RlbVNlbmRlcihiKTt9CiAgICAgICAgaW5saW5lIEZsb3dTeXN0ZW1TZW5kZXImIG9wZXJh
dG9yPShjb25zdCBGbG93U3lzdGVtU2VuZGVyJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlm
IChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9w
b29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAg
ICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5J
bmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5s
aW5lIEZsb3dTeXN0ZW1TZW5kZXJfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6
X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgdm9pZCBwcm9jZXNzZWQoKTsKICAgICAg
ICBpbmxpbmUgdm9pZCBkaXNjb25uZWN0KCk7Cn07CgpjbGFzcyBGbG93U3lzdGVtUmVjZWl2ZXJf
YmFzZSA6IHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9iYXNlIHsKcHVibGljOgogICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBGbG93U3lzdGVtUmVj
ZWl2ZXJfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6
Rmxvd1N5c3RlbVJlY2VpdmVyIik7CiAgICAgICAgc3RhdGljIEZsb3dTeXN0ZW1SZWNlaXZlcl9i
YXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBG
bG93U3lzdGVtUmVjZWl2ZXJfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJl
bmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBGbG93U3lzdGVtUmVjZWl2
ZXJfYmFzZSAqX2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAg
ICAgICAgaW5saW5lIEZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNlICpfY29weSgpIHsKICAgICAgICAg
ICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAg
dm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIGxvbmcgcmVj
ZWl2ZUhhbmRsZXJJRCgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCgpID0g
MDsKfTsKCmNsYXNzIEZsb3dTeXN0ZW1SZWNlaXZlcl9zdHViIDogdmlydHVhbCBwdWJsaWMgRmxv
d1N5c3RlbVJlY2VpdmVyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9zdHViIHsK
cHJvdGVjdGVkOgogICAgICAgIEZsb3dTeXN0ZW1SZWNlaXZlcl9zdHViKCk7CgpwdWJsaWM6CiAg
ICAgICAgRmxvd1N5c3RlbVJlY2VpdmVyX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlv
biwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIGxvbmcgcmVjZWl2ZUhhbmRsZXJJRCgpOwogICAg
ICAgIHZvaWQgZGlzY29ubmVjdCgpOwp9OwoKY2xhc3MgRmxvd1N5c3RlbVJlY2VpdmVyX3NrZWwg
OiB2aXJ0dWFsIHB1YmxpYyBGbG93U3lzdGVtUmVjZWl2ZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMg
QXJ0czo6T2JqZWN0X3NrZWwgewpwcm90ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIHJlY2Vp
dmVIYW5kbGVySURfY2hhbmdlZChsb25nIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1p
dF9jaGFuZ2VkKCJyZWNlaXZlSGFuZGxlcklEX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9
CgpwdWJsaWM6CiAgICAgICAgRmxvd1N5c3RlbVJlY2VpdmVyX3NrZWwoKTsKCiAgICAgICAgc3Rh
dGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5n
IF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBz
dGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJs
ZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpC
dWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29w
L3JlZmVyZW5jZS5oIiAxCiMgNjgyICIuLi8uLi9hcnRzL21jb3AvY29yZS5oIiAyCm5hbWVzcGFj
ZSBBcnRzIHsKY2xhc3MgRmxvd1N5c3RlbVJlY2VpdmVyIDogcHVibGljIEFydHM6Ok9iamVjdCB7
CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwog
ICAgICAgIEZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIEZs
b3dTeXN0ZW1SZWNlaXZlcl9iYXNlICpfbWV0aG9kX2NhbGwoKSB7CiAgICAgICAgICAgICAgICBf
cG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIGlmKF9wb29sLT5iYXNlKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2UgKilf
cG9vbC0+YmFzZS0+X2Nhc3QoRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2U6Ol9JSUQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5l
IEZsb3dTeXN0ZW1SZWNlaXZlcihGbG93U3lzdGVtUmVjZWl2ZXJfYmFzZSogYikgOiBBcnRzOjpP
YmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIEZsb3dTeXN0
ZW1SZWNlaXZlcl9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbVJl
Y2VpdmVyKCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBp
bmxpbmUgRmxvd1N5c3RlbVJlY2VpdmVyKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAg
ICAgICAgICAgICBBcnRzOjpPYmplY3QoRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2U6Ol9jcmVhdGUo
cy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbVJlY2Vp
dmVyKGNvbnN0IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2Jq
ZWN0KHIuaXNTdHJpbmcoKT8oRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2U6Ol9mcm9tU3RyaW5nKHIu
c3RyaW5nKCkpKTooRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVm
ZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEZsb3dTeXN0ZW1S
ZWNlaXZlcihjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoRmxvd1N5
c3RlbVJlY2VpdmVyX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUo
MCkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbVJlY2VpdmVyKGNvbnN0IEZsb3dTeXN0ZW1S
ZWNlaXZlciYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFy
Z2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbVJlY2VpdmVyKEFydHM6Ok9i
amVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlu
bGluZSBzdGF0aWMgRmxvd1N5c3RlbVJlY2VpdmVyIG51bGwoKSB7cmV0dXJuIEZsb3dTeXN0ZW1S
ZWNlaXZlcigoRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3Rh
dGljIEZsb3dTeXN0ZW1SZWNlaXZlciBfZnJvbV9iYXNlKEZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNl
KiBiKSB7cmV0dXJuIEZsb3dTeXN0ZW1SZWNlaXZlcihiKTt9CiAgICAgICAgaW5saW5lIEZsb3dT
eXN0ZW1SZWNlaXZlciYgb3BlcmF0b3I9KGNvbnN0IEZsb3dTeXN0ZW1SZWNlaXZlciYgdGFyZ2V0
KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRo
aXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9
IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAg
ICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgICAgfQogICAgICAgIGlubGluZSBGbG93U3lzdGVtUmVjZWl2ZXJfYmFzZSogX2Jhc2Uo
KSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUg
bG9uZyByZWNlaXZlSGFuZGxlcklEKCk7CiAgICAgICAgaW5saW5lIHZvaWQgZGlzY29ubmVjdCgp
Owp9OwoKY2xhc3MgRmxvd1N5c3RlbV9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0
X2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAg
ICAgc3RhdGljIEZsb3dTeXN0ZW1fYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3Vi
Q2xhc3MgPSAiQXJ0czo6Rmxvd1N5c3RlbSIpOwogICAgICAgIHN0YXRpYyBGbG93U3lzdGVtX2Jh
c2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIEZs
b3dTeXN0ZW1fYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwg
Ym9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBGbG93U3lzdGVtX2Jhc2UgKl9mcm9tRHlu
YW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBGbG93
U3lzdGVtX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAg
ICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg
IH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0
c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2Rl
ZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25n
IGlpZCk7CgogICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydE9iamVjdChBcnRzOjpPYmplY3Qgbm9k
ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wT2JqZWN0KEFydHM6Ok9iamVjdCBub2Rl
KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNvbm5lY3RPYmplY3QoQXJ0czo6T2JqZWN0IHNv
dXJjZU9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZVBvcnQsIEFydHM6Ok9iamVjdCBk
ZXN0T2JqZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdFBvcnQpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlzY29ubmVjdE9iamVjdChBcnRzOjpPYmplY3Qgc291cmNlT2JqZWN0LCBjb25z
dCBzdGQ6OnN0cmluZyYgc291cmNlUG9ydCwgQXJ0czo6T2JqZWN0IGRlc3RPYmplY3QsIGNvbnN0
IHN0ZDo6c3RyaW5nJiBkZXN0UG9ydCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0czo6QXR0cmli
dXRlVHlwZSBxdWVyeUZsYWdzKEFydHM6Ok9iamVjdCBub2RlLCBjb25zdCBzdGQ6OnN0cmluZyYg
cG9ydCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGbG9hdFZhbHVlKEFydHM6Ok9iamVj
dCBub2RlLCBjb25zdCBzdGQ6OnN0cmluZyYgcG9ydCwgZmxvYXQgdmFsdWUpID0gMDsKICAgICAg
ICB2aXJ0dWFsIEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlciBjcmVhdGVSZWNlaXZlcihBcnRzOjpP
YmplY3QgZGVzdE9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlc3RQb3J0LCBBcnRzOjpGbG93
U3lzdGVtU2VuZGVyIHNlbmRlcikgPSAwOwp9OwoKY2xhc3MgRmxvd1N5c3RlbV9zdHViIDogdmly
dHVhbCBwdWJsaWMgRmxvd1N5c3RlbV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rf
c3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBGbG93U3lzdGVtX3N0dWIoKTsKCnB1YmxpYzoKICAg
ICAgICBGbG93U3lzdGVtX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBv
YmplY3RJRCk7CgogICAgICAgIHZvaWQgc3RhcnRPYmplY3QoQXJ0czo6T2JqZWN0IG5vZGUpOwog
ICAgICAgIHZvaWQgc3RvcE9iamVjdChBcnRzOjpPYmplY3Qgbm9kZSk7CiAgICAgICAgdm9pZCBj
b25uZWN0T2JqZWN0KEFydHM6Ok9iamVjdCBzb3VyY2VPYmplY3QsIGNvbnN0IHN0ZDo6c3RyaW5n
JiBzb3VyY2VQb3J0LCBBcnRzOjpPYmplY3QgZGVzdE9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcm
IGRlc3RQb3J0KTsKICAgICAgICB2b2lkIGRpc2Nvbm5lY3RPYmplY3QoQXJ0czo6T2JqZWN0IHNv
dXJjZU9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZVBvcnQsIEFydHM6Ok9iamVjdCBk
ZXN0T2JqZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdFBvcnQpOwogICAgICAgIEFydHM6OkF0
dHJpYnV0ZVR5cGUgcXVlcnlGbGFncyhBcnRzOjpPYmplY3Qgbm9kZSwgY29uc3Qgc3RkOjpzdHJp
bmcmIHBvcnQpOwogICAgICAgIHZvaWQgc2V0RmxvYXRWYWx1ZShBcnRzOjpPYmplY3Qgbm9kZSwg
Y29uc3Qgc3RkOjpzdHJpbmcmIHBvcnQsIGZsb2F0IHZhbHVlKTsKICAgICAgICBBcnRzOjpGbG93
U3lzdGVtUmVjZWl2ZXIgY3JlYXRlUmVjZWl2ZXIoQXJ0czo6T2JqZWN0IGRlc3RPYmplY3QsIGNv
bnN0IHN0ZDo6c3RyaW5nJiBkZXN0UG9ydCwgQXJ0czo6Rmxvd1N5c3RlbVNlbmRlciBzZW5kZXIp
Owp9OwoKY2xhc3MgRmxvd1N5c3RlbV9za2VsIDogdmlydHVhbCBwdWJsaWMgRmxvd1N5c3RlbV9i
YXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc2tlbCB7CnB1YmxpYzoKICAgICAgICBG
bG93U3lzdGVtX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VO
YW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAg
Ym9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7
CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2go
QXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElE
KTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgNzg1ICIuLi8u
Li9hcnRzL21jb3AvY29yZS5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgRmxvd1N5c3RlbSA6
IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmpl
Y3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBGbG93U3lzdGVtX2Jhc2UgKl9jYWNoZTsKICAg
ICAgICBpbmxpbmUgRmxvd1N5c3RlbV9iYXNlICpfbWV0aG9kX2NhbGwoKSB7CiAgICAgICAgICAg
ICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIGlmKF9wb29sLT5iYXNl
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oRmxvd1N5c3RlbV9iYXNlICopX3Bv
b2wtPmJhc2UtPl9jYXN0KEZsb3dTeXN0ZW1fYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1
cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgRmxvd1N5c3Rl
bShGbG93U3lzdGVtX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpw
dWJsaWM6CiAgICAgICAgdHlwZWRlZiBGbG93U3lzdGVtX2Jhc2UgX2Jhc2VfY2xhc3M7CgogICAg
ICAgIGlubGluZSBGbG93U3lzdGVtKCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUo
MCkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbShjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykg
OgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KEZsb3dTeXN0ZW1fYmFzZTo6X2NyZWF0ZShz
LnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBGbG93U3lzdGVtKGNvbnN0
IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNT
dHJpbmcoKT8oRmxvd1N5c3RlbV9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KEZsb3dT
eXN0ZW1fYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUo
MCkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbShjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYg
YykgOiBBcnRzOjpPYmplY3QoRmxvd1N5c3RlbV9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2Jq
ZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEZsb3dTeXN0ZW0oY29uc3QgRmxv
d1N5c3RlbSYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFy
Z2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbShBcnRzOjpPYmplY3Q6OlBv
b2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3Rh
dGljIEZsb3dTeXN0ZW0gbnVsbCgpIHtyZXR1cm4gRmxvd1N5c3RlbSgoRmxvd1N5c3RlbV9iYXNl
KikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBGbG93U3lzdGVtIF9mcm9tX2Jhc2UoRmxvd1N5
c3RlbV9iYXNlKiBiKSB7cmV0dXJuIEZsb3dTeXN0ZW0oYik7fQogICAgICAgIGlubGluZSBGbG93
U3lzdGVtJiBvcGVyYXRvcj0oY29uc3QgRmxvd1N5c3RlbSYgdGFyZ2V0KSB7CiAgICAgICAgICAg
ICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAgICAgICAgICAg
ICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdldC5fcG9vbDsK
ICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAgICAgICAgICBf
cG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAg
ICAgIGlubGluZSBGbG93U3lzdGVtX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hl
Ol9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnRPYmplY3QoQXJ0czo6
T2JqZWN0IG5vZGUpOwogICAgICAgIGlubGluZSB2b2lkIHN0b3BPYmplY3QoQXJ0czo6T2JqZWN0
IG5vZGUpOwogICAgICAgIGlubGluZSB2b2lkIGNvbm5lY3RPYmplY3QoQXJ0czo6T2JqZWN0IHNv
dXJjZU9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZVBvcnQsIEFydHM6Ok9iamVjdCBk
ZXN0T2JqZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdFBvcnQpOwogICAgICAgIGlubGluZSB2
b2lkIGRpc2Nvbm5lY3RPYmplY3QoQXJ0czo6T2JqZWN0IHNvdXJjZU9iamVjdCwgY29uc3Qgc3Rk
OjpzdHJpbmcmIHNvdXJjZVBvcnQsIEFydHM6Ok9iamVjdCBkZXN0T2JqZWN0LCBjb25zdCBzdGQ6
OnN0cmluZyYgZGVzdFBvcnQpOwogICAgICAgIGlubGluZSBBcnRzOjpBdHRyaWJ1dGVUeXBlIHF1
ZXJ5RmxhZ3MoQXJ0czo6T2JqZWN0IG5vZGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwb3J0KTsKICAg
ICAgICBpbmxpbmUgdm9pZCBzZXRGbG9hdFZhbHVlKEFydHM6Ok9iamVjdCBub2RlLCBjb25zdCBz
dGQ6OnN0cmluZyYgcG9ydCwgZmxvYXQgdmFsdWUpOwogICAgICAgIGlubGluZSBBcnRzOjpGbG93
U3lzdGVtUmVjZWl2ZXIgY3JlYXRlUmVjZWl2ZXIoQXJ0czo6T2JqZWN0IGRlc3RPYmplY3QsIGNv
bnN0IHN0ZDo6c3RyaW5nJiBkZXN0UG9ydCwgQXJ0czo6Rmxvd1N5c3RlbVNlbmRlciBzZW5kZXIp
Owp9OwoKY2xhc3MgR2xvYmFsQ29tbV9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0
X2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAg
ICAgc3RhdGljIEdsb2JhbENvbW1fYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3Vi
Q2xhc3MgPSAiQXJ0czo6R2xvYmFsQ29tbSIpOwogICAgICAgIHN0YXRpYyBHbG9iYWxDb21tX2Jh
c2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIEds
b2JhbENvbW1fYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwg
Ym9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBHbG9iYWxDb21tX2Jhc2UgKl9mcm9tRHlu
YW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBHbG9i
YWxDb21tX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAg
ICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg
IH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0
c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2Rl
ZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25n
IGlpZCk7CgogICAgICAgIHZpcnR1YWwgYm9vbCBwdXQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlh
YmxlLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6
c3RyaW5nIGdldChjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgZXJhc2UoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlKSA9IDA7Cn07CgpjbGFz
cyBHbG9iYWxDb21tX3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBHbG9iYWxDb21tX2Jhc2UsIHZpcnR1
YWwgcHVibGljIEFydHM6Ok9iamVjdF9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIEdsb2JhbENv
bW1fc3R1YigpOwoKcHVibGljOgogICAgICAgIEdsb2JhbENvbW1fc3R1YihBcnRzOjpDb25uZWN0
aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgYm9vbCBwdXQoY29uc3Qg
c3RkOjpzdHJpbmcmIHZhcmlhYmxlLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpOwogICAgICAg
IHN0ZDo6c3RyaW5nIGdldChjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUpOwogICAgICAgIHZv
aWQgZXJhc2UoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlKTsKfTsKCmNsYXNzIEdsb2JhbENv
bW1fc2tlbCA6IHZpcnR1YWwgcHVibGljIEdsb2JhbENvbW1fYmFzZSwgdmlydHVhbCBwdWJsaWMg
QXJ0czo6T2JqZWN0X3NrZWwgewpwdWJsaWM6CiAgICAgICAgR2xvYmFsQ29tbV9za2VsKCk7Cgog
ICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBz
dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdp
dGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxk
TWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVz
dCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4u
L2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDg4NSAiLi4vLi4vYXJ0cy9tY29wL2NvcmUuaCIg
MgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIEdsb2JhbENvbW0gOiBwdWJsaWMgQXJ0czo6T2JqZWN0
IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7
CiAgICAgICAgR2xvYmFsQ29tbV9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIEdsb2JhbENv
bW1fYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3Jl
YXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICBfY2FjaGU9KEdsb2JhbENvbW1fYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChHbG9i
YWxDb21tX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9
Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIEdsb2JhbENvbW0oR2xvYmFsQ29tbV9iYXNlKiBi
KSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVk
ZWYgR2xvYmFsQ29tbV9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgR2xvYmFsQ29t
bSgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l
IEdsb2JhbENvbW0oY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFy
dHM6Ok9iamVjdChHbG9iYWxDb21tX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUo
MCkge30KICAgICAgICBpbmxpbmUgR2xvYmFsQ29tbShjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIp
IDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KEdsb2JhbENvbW1f
YmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihHbG9iYWxDb21tX2Jhc2U6Ol9mcm9tUmVm
ZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l
IEdsb2JhbENvbW0oY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KEds
b2JhbENvbW1fYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7
fQogICAgICAgIGlubGluZSBHbG9iYWxDb21tKGNvbnN0IEdsb2JhbENvbW0mIHRhcmdldCkgOiBB
cnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAg
ICAgaW5saW5lIEdsb2JhbENvbW0oQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVj
dChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBHbG9iYWxDb21tIG51bGwo
KSB7cmV0dXJuIEdsb2JhbENvbW0oKEdsb2JhbENvbW1fYmFzZSopMCk7fQogICAgICAgIGlubGlu
ZSBzdGF0aWMgR2xvYmFsQ29tbSBfZnJvbV9iYXNlKEdsb2JhbENvbW1fYmFzZSogYikge3JldHVy
biBHbG9iYWxDb21tKGIpO30KICAgICAgICBpbmxpbmUgR2xvYmFsQ29tbSYgb3BlcmF0b3I9KGNv
bnN0IEdsb2JhbENvbW0mIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRh
cmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwog
ICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2Fj
aGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgR2xvYmFsQ29t
bV9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9Cgog
ICAgICAgIGlubGluZSBib29sIHB1dChjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUsIGNvbnN0
IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIGdldChjb25z
dCBzdGQ6OnN0cmluZyYgdmFyaWFibGUpOwogICAgICAgIGlubGluZSB2b2lkIGVyYXNlKGNvbnN0
IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSk7Cn07CgpjbGFzcyBUbXBHbG9iYWxDb21tX2Jhc2UgOiB2
aXJ0dWFsIHB1YmxpYyBBcnRzOjpHbG9iYWxDb21tX2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFRtcEdsb2JhbENvbW1fYmFz
ZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6VG1wR2xvYmFs
Q29tbSIpOwogICAgICAgIHN0YXRpYyBUbXBHbG9iYWxDb21tX2Jhc2UgKl9mcm9tU3RyaW5nKHN0
ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFRtcEdsb2JhbENvbW1fYmFzZSAq
X2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7
CgogICAgICAgIHN0YXRpYyBUbXBHbG9iYWxDb21tX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29u
c3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBUbXBHbG9iYWxDb21tX2Jh
c2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAg
IF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAg
ICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29u
c3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0
c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7Cgp9
OwoKY2xhc3MgVG1wR2xvYmFsQ29tbV9zdHViIDogdmlydHVhbCBwdWJsaWMgVG1wR2xvYmFsQ29t
bV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpHbG9iYWxDb21tX3N0dWIgewpwcm90ZWN0ZWQ6
CiAgICAgICAgVG1wR2xvYmFsQ29tbV9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgVG1wR2xvYmFs
Q29tbV9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoK
fTsKCmNsYXNzIFRtcEdsb2JhbENvbW1fc2tlbCA6IHZpcnR1YWwgcHVibGljIFRtcEdsb2JhbENv
bW1fYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6R2xvYmFsQ29tbV9za2VsIHsKcHVibGljOgog
ICAgICAgIFRtcEdsb2JhbENvbW1fc2tlbCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcg
X2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUo
KTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRl
cmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9p
ZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxv
bmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEK
IyA5NzUgIi4uLy4uL2FydHMvbWNvcC9jb3JlLmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBU
bXBHbG9iYWxDb21tIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3Rh
dGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFRtcEdsb2JhbENvbW1f
YmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBUbXBHbG9iYWxDb21tX2Jhc2UgKl9tZXRob2Rf
Y2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAg
ICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShU
bXBHbG9iYWxDb21tX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoVG1wR2xvYmFsQ29tbV9iYXNl
OjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVk
OgogICAgICAgIGlubGluZSBUbXBHbG9iYWxDb21tKFRtcEdsb2JhbENvbW1fYmFzZSogYikgOiBB
cnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIFRt
cEdsb2JhbENvbW1fYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFRtcEdsb2JhbENv
bW0oKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGlu
ZSBUbXBHbG9iYWxDb21tKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAg
ICBBcnRzOjpPYmplY3QoVG1wR2xvYmFsQ29tbV9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwg
X2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFRtcEdsb2JhbENvbW0oY29uc3QgQXJ0czo6UmVm
ZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhU
bXBHbG9iYWxDb21tX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooVG1wR2xvYmFsQ29t
bV9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7
fQogICAgICAgIGlubGluZSBUbXBHbG9iYWxDb21tKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBj
KSA6IEFydHM6Ok9iamVjdChUbXBHbG9iYWxDb21tX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5v
YmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgVG1wR2xvYmFsQ29tbShjb25z
dCBUbXBHbG9iYWxDb21tJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9j
YWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBUbXBHbG9iYWxDb21tKEFydHM6
Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAg
IGlubGluZSBzdGF0aWMgVG1wR2xvYmFsQ29tbSBudWxsKCkge3JldHVybiBUbXBHbG9iYWxDb21t
KChUbXBHbG9iYWxDb21tX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIFRtcEdsb2Jh
bENvbW0gX2Zyb21fYmFzZShUbXBHbG9iYWxDb21tX2Jhc2UqIGIpIHtyZXR1cm4gVG1wR2xvYmFs
Q29tbShiKTt9CiAgICAgICAgaW5saW5lIFRtcEdsb2JhbENvbW0mIG9wZXJhdG9yPShjb25zdCBU
bXBHbG9iYWxDb21tJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJn
ZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAg
ICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hl
ID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFy
dHM6Okdsb2JhbENvbW0oKSBjb25zdCB7IHJldHVybiBBcnRzOjpHbG9iYWxDb21tKCpfcG9vbCk7
IH0KICAgICAgICBpbmxpbmUgVG1wR2xvYmFsQ29tbV9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2Nh
Y2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBib29sIHB1dChjb25z
dCBzdGQ6OnN0cmluZyYgdmFyaWFibGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CiAgICAg
ICAgaW5saW5lIHN0ZDo6c3RyaW5nIGdldChjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUpOwog
ICAgICAgIGlubGluZSB2b2lkIGVyYXNlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSk7Cn07
CgpjbGFzcyBUcmFkZXJPZmZlcl9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X2Jh
c2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAg
c3RhdGljIFRyYWRlck9mZmVyX2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNs
YXNzID0gIkFydHM6OlRyYWRlck9mZmVyIik7CiAgICAgICAgc3RhdGljIFRyYWRlck9mZmVyX2Jh
c2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFRy
YWRlck9mZmVyX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYs
IGJvb2wgbmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMgVHJhZGVyT2ZmZXJfYmFzZSAqX2Zyb21E
eW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5lIFRy
YWRlck9mZmVyX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAg
ICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQ
b3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
X2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBs
b25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgaW50ZXJmYWNlTmFtZSgpID0g
MDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIGdldFByb3BlcnR5
KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSA9IDA7Cn07CgpjbGFzcyBUcmFkZXJPZmZlcl9zdHVi
IDogdmlydHVhbCBwdWJsaWMgVHJhZGVyT2ZmZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6
T2JqZWN0X3N0dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgVHJhZGVyT2ZmZXJfc3R1YigpOwoKcHVi
bGljOgogICAgICAgIFRyYWRlck9mZmVyX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlv
biwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIHN0ZDo6c3RyaW5nIGludGVyZmFjZU5hbWUoKTsK
ICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKiBnZXRQcm9wZXJ0eShjb25zdCBzdGQ6
OnN0cmluZyYgbmFtZSk7Cn07CgpjbGFzcyBUcmFkZXJPZmZlcl9za2VsIDogdmlydHVhbCBwdWJs
aWMgVHJhZGVyT2ZmZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X3NrZWwgewpw
cm90ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIGludGVyZmFjZU5hbWVfY2hhbmdlZChjb25z
dCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQo
ImludGVyZmFjZU5hbWVfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAg
ICAgICBUcmFkZXJPZmZlcl9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50
ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwog
ICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFj
ZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRp
c3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBt
ZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDEw
NzYgIi4uLy4uL2FydHMvbWNvcC9jb3JlLmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBUcmFk
ZXJPZmZlciA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBB
cnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBUcmFkZXJPZmZlcl9iYXNlICpf
Y2FjaGU7CiAgICAgICAgaW5saW5lIFRyYWRlck9mZmVyX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsK
ICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYo
X3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShUcmFkZXJPZmZl
cl9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFRyYWRlck9mZmVyX2Jhc2U6Ol9JSUQpOwogICAg
ICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5s
aW5lIFRyYWRlck9mZmVyKFRyYWRlck9mZmVyX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBf
Y2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBUcmFkZXJPZmZlcl9iYXNlIF9i
YXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgVHJhZGVyT2ZmZXIoKSA6IEFydHM6Ok9iamVjdChf
Q3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBUcmFkZXJPZmZlcihjb25zdCBB
cnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KFRyYWRlck9m
ZmVyX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxp
bmUgVHJhZGVyT2ZmZXIoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAg
ICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhUcmFkZXJPZmZlcl9iYXNlOjpfZnJvbVN0cmlu
ZyhyLnN0cmluZygpKSk6KFRyYWRlck9mZmVyX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJl
bmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFRyYWRlck9mZmVyKGNv
bnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChUcmFkZXJPZmZlcl9iYXNl
OjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5s
aW5lIFRyYWRlck9mZmVyKGNvbnN0IFRyYWRlck9mZmVyJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0
KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBU
cmFkZXJPZmZlcihBcnRzOjpPYmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2Fj
aGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIFRyYWRlck9mZmVyIG51bGwoKSB7cmV0dXJu
IFRyYWRlck9mZmVyKChUcmFkZXJPZmZlcl9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRp
YyBUcmFkZXJPZmZlciBfZnJvbV9iYXNlKFRyYWRlck9mZmVyX2Jhc2UqIGIpIHtyZXR1cm4gVHJh
ZGVyT2ZmZXIoYik7fQogICAgICAgIGlubGluZSBUcmFkZXJPZmZlciYgb3BlcmF0b3I9KGNvbnN0
IFRyYWRlck9mZmVyJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJn
ZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAg
ICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hl
ID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIFRyYWRlck9mZmVy
X2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAg
ICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIGludGVyZmFjZU5hbWUoKTsKICAgICAgICBpbmxpbmUg
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogZ2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcm
IG5hbWUpOwp9OwoKY2xhc3MgVHJhZGVyUXVlcnlfYmFzZSA6IHZpcnR1YWwgcHVibGljIEFydHM6
Ok9iamVjdF9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7
CgogICAgICAgIHN0YXRpYyBUcmFkZXJRdWVyeV9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpUcmFkZXJRdWVyeSIpOwogICAgICAgIHN0YXRpYyBUcmFk
ZXJRdWVyeV9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAg
IHN0YXRpYyBUcmFkZXJRdWVyeV9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZl
cmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFRyYWRlclF1ZXJ5X2Jh
c2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAg
IGlubGluZSBUcmFkZXJRdWVyeV9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9p
ZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3Qo
dW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQgc3VwcG9ydHMoY29uc3Qg
c3RkOjpzdHJpbmcmIHByb3BlcnR5LCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPEFydHM6OlRyYWRlck9mZmVyPiAqIHF1ZXJ5KCkgPSAw
Owp9OwoKY2xhc3MgVHJhZGVyUXVlcnlfc3R1YiA6IHZpcnR1YWwgcHVibGljIFRyYWRlclF1ZXJ5
X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9zdHViIHsKcHJvdGVjdGVkOgogICAg
ICAgIFRyYWRlclF1ZXJ5X3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBUcmFkZXJRdWVyeV9zdHVi
KEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICB2
b2lkIHN1cHBvcnRzKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwgY29uc3Qgc3RkOjpzdHJp
bmcmIHZhbHVlKTsKICAgICAgICBzdGQ6OnZlY3RvcjxBcnRzOjpUcmFkZXJPZmZlcj4gKiBxdWVy
eSgpOwp9OwoKY2xhc3MgVHJhZGVyUXVlcnlfc2tlbCA6IHZpcnR1YWwgcHVibGljIFRyYWRlclF1
ZXJ5X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9za2VsIHsKcHVibGljOgogICAg
ICAgIFRyYWRlclF1ZXJ5X3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRl
cmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAg
ICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNl
bmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlz
cGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1l
dGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMTE2
OSAiLi4vLi4vYXJ0cy9tY29wL2NvcmUuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFRyYWRl
clF1ZXJ5IDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFy
dHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFRyYWRlclF1ZXJ5X2Jhc2UgKl9j
YWNoZTsKICAgICAgICBpbmxpbmUgVHJhZGVyUXVlcnlfYmFzZSAqX21ldGhvZF9jYWxsKCkgewog
ICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihf
cG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFRyYWRlclF1ZXJ5
X2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoVHJhZGVyUXVlcnlfYmFzZTo6X0lJRCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxp
bmUgVHJhZGVyUXVlcnkoVHJhZGVyUXVlcnlfYmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9j
YWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIFRyYWRlclF1ZXJ5X2Jhc2UgX2Jh
c2VfY2xhc3M7CgogICAgICAgIGlubGluZSBUcmFkZXJRdWVyeSgpIDogQXJ0czo6T2JqZWN0KF9D
cmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFRyYWRlclF1ZXJ5KGNvbnN0IEFy
dHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoVHJhZGVyUXVl
cnlfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGlu
ZSBUcmFkZXJRdWVyeShjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAg
IEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFRyYWRlclF1ZXJ5X2Jhc2U6Ol9mcm9tU3RyaW5n
KHIuc3RyaW5nKCkpKTooVHJhZGVyUXVlcnlfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVu
Y2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgVHJhZGVyUXVlcnkoY29u
c3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KFRyYWRlclF1ZXJ5X2Jhc2U6
Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxp
bmUgVHJhZGVyUXVlcnkoY29uc3QgVHJhZGVyUXVlcnkmIHRhcmdldCkgOiBBcnRzOjpPYmplY3Qo
dGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFRy
YWRlclF1ZXJ5KEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNo
ZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgVHJhZGVyUXVlcnkgbnVsbCgpIHtyZXR1cm4g
VHJhZGVyUXVlcnkoKFRyYWRlclF1ZXJ5X2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGlj
IFRyYWRlclF1ZXJ5IF9mcm9tX2Jhc2UoVHJhZGVyUXVlcnlfYmFzZSogYikge3JldHVybiBUcmFk
ZXJRdWVyeShiKTt9CiAgICAgICAgaW5saW5lIFRyYWRlclF1ZXJ5JiBvcGVyYXRvcj0oY29uc3Qg
VHJhZGVyUXVlcnkmIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdl
dC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAg
ICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUg
PSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgVHJhZGVyUXVlcnlf
YmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAg
ICAgICBpbmxpbmUgdm9pZCBzdXBwb3J0cyhjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNv
bnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPEFydHM6
OlRyYWRlck9mZmVyPiAqIHF1ZXJ5KCk7Cn07CgpjbGFzcyBMb2FkZXJfYmFzZSA6IHZpcnR1YWwg
cHVibGljIEFydHM6Ok9iamVjdF9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBMb2FkZXJfYmFzZSAqX2NyZWF0ZShjb25zdCBz
dGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6TG9hZGVyIik7CiAgICAgICAgc3RhdGljIExv
YWRlcl9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0
YXRpYyBMb2FkZXJfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJl
ZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBMb2FkZXJfYmFzZSAqX2Zyb21EeW5h
bWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5lIExvYWRl
cl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAg
ICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9Cgog
ICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigp
IGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0
UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQp
OwoKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGRhdGFWZXJzaW9uKCkgPSAwOwogICAgICAg
IHZpcnR1YWwgc3RkOjp2ZWN0b3I8QXJ0czo6VHJhZGVyRW50cnk+ICogdHJhZGVyRW50cmllcygp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPEFydHM6Ok1vZHVsZURlZj4gKiBtb2R1
bGVzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0czo6T2JqZWN0IGxvYWRPYmplY3QoQXJ0czo6
VHJhZGVyT2ZmZXIgb2ZmZXIpID0gMDsKfTsKCmNsYXNzIExvYWRlcl9zdHViIDogdmlydHVhbCBw
dWJsaWMgTG9hZGVyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9zdHViIHsKcHJv
dGVjdGVkOgogICAgICAgIExvYWRlcl9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgTG9hZGVyX3N0
dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7CgogICAgICAg
IHN0ZDo6c3RyaW5nIGRhdGFWZXJzaW9uKCk7CiAgICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6VHJh
ZGVyRW50cnk+ICogdHJhZGVyRW50cmllcygpOwogICAgICAgIHN0ZDo6dmVjdG9yPEFydHM6Ok1v
ZHVsZURlZj4gKiBtb2R1bGVzKCk7CiAgICAgICAgQXJ0czo6T2JqZWN0IGxvYWRPYmplY3QoQXJ0
czo6VHJhZGVyT2ZmZXIgb2ZmZXIpOwp9OwoKY2xhc3MgTG9hZGVyX3NrZWwgOiB2aXJ0dWFsIHB1
YmxpYyBMb2FkZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X3NrZWwgewpwcm90
ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIGRhdGFWZXJzaW9uX2NoYW5nZWQoY29uc3Qgc3Rk
OjpzdHJpbmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJkYXRh
VmVyc2lvbl9jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQoKcHVibGljOgogICAgICAgIExv
YWRlcl9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNr
ZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wg
X2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAg
ICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6
OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07
Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDEyNzIgIi4uLy4uL2Fy
dHMvbWNvcC9jb3JlLmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBMb2FkZXIgOiBwdWJsaWMg
QXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2Uq
IF9DcmVhdG9yKCk7CiAgICAgICAgTG9hZGVyX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUg
TG9hZGVyX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVj
a2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgX2NhY2hlPShMb2FkZXJfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChMb2Fk
ZXJfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnBy
b3RlY3RlZDoKICAgICAgICBpbmxpbmUgTG9hZGVyKExvYWRlcl9iYXNlKiBiKSA6IEFydHM6Ok9i
amVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgTG9hZGVyX2Jh
c2UgX2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGluZSBMb2FkZXIoKSA6IEFydHM6Ok9iamVjdChf
Q3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBMb2FkZXIoY29uc3QgQXJ0czo6
U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChMb2FkZXJfYmFzZTo6
X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBMb2FkZXIo
Y29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qo
ci5pc1N0cmluZygpPyhMb2FkZXJfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihMb2Fk
ZXJfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkg
e30KICAgICAgICBpbmxpbmUgTG9hZGVyKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFy
dHM6Ok9iamVjdChMb2FkZXJfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9j
YWNoZSgwKSB7fQogICAgICAgIGlubGluZSBMb2FkZXIoY29uc3QgTG9hZGVyJiB0YXJnZXQpIDog
QXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAg
ICAgIGlubGluZSBMb2FkZXIoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChw
KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBMb2FkZXIgbnVsbCgpIHtyZXR1
cm4gTG9hZGVyKChMb2FkZXJfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgTG9hZGVy
IF9mcm9tX2Jhc2UoTG9hZGVyX2Jhc2UqIGIpIHtyZXR1cm4gTG9hZGVyKGIpO30KICAgICAgICBp
bmxpbmUgTG9hZGVyJiBvcGVyYXRvcj0oY29uc3QgTG9hZGVyJiB0YXJnZXQpIHsKICAgICAgICAg
ICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAg
ICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29s
OwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAg
IF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAg
ICAgICAgaW5saW5lIExvYWRlcl9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpf
bWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBzdGQ6OnN0cmluZyBkYXRhVmVyc2lvbigp
OwogICAgICAgIGlubGluZSBzdGQ6OnZlY3RvcjxBcnRzOjpUcmFkZXJFbnRyeT4gKiB0cmFkZXJF
bnRyaWVzKCk7CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPEFydHM6Ok1vZHVsZURlZj4gKiBt
b2R1bGVzKCk7CiAgICAgICAgaW5saW5lIEFydHM6Ok9iamVjdCBsb2FkT2JqZWN0KEFydHM6OlRy
YWRlck9mZmVyIG9mZmVyKTsKfTsKCgoKaW5saW5lIGxvbmcgQXJ0czo6SW50ZXJmYWNlUmVwbzo6
aW5zZXJ0TW9kdWxlKGNvbnN0IEFydHM6Ok1vZHVsZURlZiYgbmV3TW9kdWxlKQp7CiAgICAgICAg
cmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jhc2UqPihfY2Fj
aGUpLT5pbnNlcnRNb2R1bGUobmV3TW9kdWxlKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VS
ZXBvX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmluc2VydE1vZHVsZShuZXdNb2R1bGUpOwp9Cgpp
bmxpbmUgdm9pZCBBcnRzOjpJbnRlcmZhY2VSZXBvOjpyZW1vdmVNb2R1bGUobG9uZyBtb2R1bGVJ
RCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNl
Kj4oX2NhY2hlKS0+cmVtb3ZlTW9kdWxlKG1vZHVsZUlEKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRl
cmZhY2VSZXBvX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnJlbW92ZU1vZHVsZShtb2R1bGVJRCk7
Cn0KCmlubGluZSBBcnRzOjpJbnRlcmZhY2VEZWYgQXJ0czo6SW50ZXJmYWNlUmVwbzo6cXVlcnlJ
bnRlcmZhY2UoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hl
P3N0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+KF9jYWNoZSktPnF1ZXJ5SW50
ZXJmYWNlKG5hbWUpOnN0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+KF9tZXRo
b2RfY2FsbCgpKS0+cXVlcnlJbnRlcmZhY2UobmFtZSk7Cn0KCmlubGluZSBBcnRzOjpUeXBlRGVm
IEFydHM6OkludGVyZmFjZVJlcG86OnF1ZXJ5VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkK
ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19i
YXNlKj4oX2NhY2hlKS0+cXVlcnlUeXBlKG5hbWUpOnN0YXRpY19jYXN0PEFydHM6OkludGVyZmFj
ZVJlcG9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cXVlcnlUeXBlKG5hbWUpOwp9CgppbmxpbmUg
QXJ0czo6RW51bURlZiBBcnRzOjpJbnRlcmZhY2VSZXBvOjpxdWVyeUVudW0oY29uc3Qgc3RkOjpz
dHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6Oklu
dGVyZmFjZVJlcG9fYmFzZSo+KF9jYWNoZSktPnF1ZXJ5RW51bShuYW1lKTpzdGF0aWNfY2FzdDxB
cnRzOjpJbnRlcmZhY2VSZXBvX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnF1ZXJ5RW51bShuYW1l
KTsKfQoKaW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIEFydHM6OkludGVyZmFjZVJl
cG86OnF1ZXJ5Q2hpbGRyZW4oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1
cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+KF9jYWNoZSkt
PnF1ZXJ5Q2hpbGRyZW4obmFtZSk6c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeUNoaWxkcmVuKG5hbWUpOwp9CgppbmxpbmUgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+ICogQXJ0czo6SW50ZXJmYWNlUmVwbzo6cXVlcnlJbnRlcmZhY2Vz
KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVw
b19iYXNlKj4oX2NhY2hlKS0+cXVlcnlJbnRlcmZhY2VzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW50
ZXJmYWNlUmVwb19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeUludGVyZmFjZXMoKTsKfQoK
aW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIEFydHM6OkludGVyZmFjZVJlcG86OnF1
ZXJ5VHlwZXMoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnRl
cmZhY2VSZXBvX2Jhc2UqPihfY2FjaGUpLT5xdWVyeVR5cGVzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6
SW50ZXJmYWNlUmVwb19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeVR5cGVzKCk7Cn0KCmlu
bGluZSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKiBBcnRzOjpJbnRlcmZhY2VSZXBvOjpxdWVy
eUVudW1zKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJm
YWNlUmVwb19iYXNlKj4oX2NhY2hlKS0+cXVlcnlFbnVtcygpOnN0YXRpY19jYXN0PEFydHM6Oklu
dGVyZmFjZVJlcG9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cXVlcnlFbnVtcygpOwp9Cgppbmxp
bmUgbG9uZyBBcnRzOjpJbnRlcmZhY2VSZXBvVjI6Omluc2VydE1vZHVsZShjb25zdCBBcnRzOjpN
b2R1bGVEZWYmIG5ld01vZHVsZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlKj4oX2NhY2hlKS0+aW5zZXJ0TW9kdWxlKG5ld01vZHVs
ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlKj4oX21ldGhvZF9jYWxsKCkp
LT5pbnNlcnRNb2R1bGUobmV3TW9kdWxlKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6SW50ZXJmYWNl
UmVwb1YyOjpyZW1vdmVNb2R1bGUobG9uZyBtb2R1bGVJRCkKewogICAgICAgICBfY2FjaGU/c3Rh
dGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlKj4oX2NhY2hlKS0+cmVtb3ZlTW9kdWxl
KG1vZHVsZUlEKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jhc2UqPihfbWV0aG9k
X2NhbGwoKSktPnJlbW92ZU1vZHVsZShtb2R1bGVJRCk7Cn0KCmlubGluZSBBcnRzOjpJbnRlcmZh
Y2VEZWYgQXJ0czo6SW50ZXJmYWNlUmVwb1YyOjpxdWVyeUludGVyZmFjZShjb25zdCBzdGQ6OnN0
cmluZyYgbmFtZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW50
ZXJmYWNlUmVwb19iYXNlKj4oX2NhY2hlKS0+cXVlcnlJbnRlcmZhY2UobmFtZSk6c3RhdGljX2Nh
c3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeUludGVy
ZmFjZShuYW1lKTsKfQoKaW5saW5lIEFydHM6OlR5cGVEZWYgQXJ0czo6SW50ZXJmYWNlUmVwb1Yy
OjpxdWVyeVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1cm4gX2Nh
Y2hlP3N0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+KF9jYWNoZSktPnF1ZXJ5
VHlwZShuYW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jhc2UqPihfbWV0aG9k
X2NhbGwoKSktPnF1ZXJ5VHlwZShuYW1lKTsKfQoKaW5saW5lIEFydHM6OkVudW1EZWYgQXJ0czo6
SW50ZXJmYWNlUmVwb1YyOjpxdWVyeUVudW0oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAg
ICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+
KF9jYWNoZSktPnF1ZXJ5RW51bShuYW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBv
X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnF1ZXJ5RW51bShuYW1lKTsKfQoKaW5saW5lIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIEFydHM6OkludGVyZmFjZVJlcG9WMjo6cXVlcnlDaGlsZHJl
bihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGlj
X2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlKj4oX2NhY2hlKS0+cXVlcnlDaGlsZHJlbihu
YW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jhc2UqPihfbWV0aG9kX2NhbGwo
KSktPnF1ZXJ5Q2hpbGRyZW4obmFtZSk7Cn0KCmlubGluZSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gKiBBcnRzOjpJbnRlcmZhY2VSZXBvVjI6OnF1ZXJ5SW50ZXJmYWNlcygpCnsKICAgICAgICBy
ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+KF9jYWNo
ZSktPnF1ZXJ5SW50ZXJmYWNlcygpOnN0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFz
ZSo+KF9tZXRob2RfY2FsbCgpKS0+cXVlcnlJbnRlcmZhY2VzKCk7Cn0KCmlubGluZSBzdGQ6OnZl
Y3RvcjxzdGQ6OnN0cmluZz4gKiBBcnRzOjpJbnRlcmZhY2VSZXBvVjI6OnF1ZXJ5VHlwZXMoKQp7
CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jh
c2UqPihfY2FjaGUpLT5xdWVyeVR5cGVzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVw
b19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeVR5cGVzKCk7Cn0KCmlubGluZSBzdGQ6OnZl
Y3RvcjxzdGQ6OnN0cmluZz4gKiBBcnRzOjpJbnRlcmZhY2VSZXBvVjI6OnF1ZXJ5RW51bXMoKQp7
CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jh
c2UqPihfY2FjaGUpLT5xdWVyeUVudW1zKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVw
b19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeUVudW1zKCk7Cn0KCmlubGluZSBBcnRzOjpU
eXBlSWRlbnRpZmljYXRpb24gQXJ0czo6SW50ZXJmYWNlUmVwb1YyOjppZGVudGlmeVR5cGUoY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0
PEFydHM6OkludGVyZmFjZVJlcG9WMl9iYXNlKj4oX2NhY2hlKS0+aWRlbnRpZnlUeXBlKG5hbWUp
OnN0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9WMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkp
LT5pZGVudGlmeVR5cGUobmFtZSk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkZsb3dTeXN0ZW1TZW5k
ZXI6OnByb2Nlc3NlZCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkZsb3dT
eXN0ZW1TZW5kZXJfYmFzZSo+KF9jYWNoZSktPnByb2Nlc3NlZCgpOnN0YXRpY19jYXN0PEFydHM6
OkZsb3dTeXN0ZW1TZW5kZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cHJvY2Vzc2VkKCk7Cn0K
CmlubGluZSB2b2lkIEFydHM6OkZsb3dTeXN0ZW1TZW5kZXI6OmRpc2Nvbm5lY3QoKQp7CiAgICAg
ICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpGbG93U3lzdGVtU2VuZGVyX2Jhc2UqPihfY2Fj
aGUpLT5kaXNjb25uZWN0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbVNlbmRlcl9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5kaXNjb25uZWN0KCk7Cn0KCmlubGluZSBsb25nIEFydHM6OkZs
b3dTeXN0ZW1SZWNlaXZlcjo6cmVjZWl2ZUhhbmRsZXJJRCgpCnsKICAgICAgICByZXR1cm4gX2Nh
Y2hlP3N0YXRpY19jYXN0PEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNlKj4oX2NhY2hlKS0+
cmVjZWl2ZUhhbmRsZXJJRCgpOnN0YXRpY19jYXN0PEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlcl9i
YXNlKj4oX21ldGhvZF9jYWxsKCkpLT5yZWNlaXZlSGFuZGxlcklEKCk7Cn0KCmlubGluZSB2b2lk
IEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlcjo6ZGlzY29ubmVjdCgpCnsKICAgICAgICAgX2NhY2hl
P3N0YXRpY19jYXN0PEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNlKj4oX2NhY2hlKS0+ZGlz
Y29ubmVjdCgpOnN0YXRpY19jYXN0PEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNlKj4oX21l
dGhvZF9jYWxsKCkpLT5kaXNjb25uZWN0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkZsb3dTeXN0
ZW06OnN0YXJ0T2JqZWN0KEFydHM6Ok9iamVjdCBub2RlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0
aWNfY2FzdDxBcnRzOjpGbG93U3lzdGVtX2Jhc2UqPihfY2FjaGUpLT5zdGFydE9iamVjdChub2Rl
KTpzdGF0aWNfY2FzdDxBcnRzOjpGbG93U3lzdGVtX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0
YXJ0T2JqZWN0KG5vZGUpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpGbG93U3lzdGVtOjpzdG9wT2Jq
ZWN0KEFydHM6Ok9iamVjdCBub2RlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz
OjpGbG93U3lzdGVtX2Jhc2UqPihfY2FjaGUpLT5zdG9wT2JqZWN0KG5vZGUpOnN0YXRpY19jYXN0
PEFydHM6OkZsb3dTeXN0ZW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RvcE9iamVjdChub2Rl
KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6Rmxvd1N5c3RlbTo6Y29ubmVjdE9iamVjdChBcnRzOjpP
YmplY3Qgc291cmNlT2JqZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlUG9ydCwgQXJ0czo6
T2JqZWN0IGRlc3RPYmplY3QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXN0UG9ydCkKewogICAgICAg
ICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbV9iYXNlKj4oX2NhY2hlKS0+Y29u
bmVjdE9iamVjdChzb3VyY2VPYmplY3QsIHNvdXJjZVBvcnQsIGRlc3RPYmplY3QsIGRlc3RQb3J0
KTpzdGF0aWNfY2FzdDxBcnRzOjpGbG93U3lzdGVtX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNv
bm5lY3RPYmplY3Qoc291cmNlT2JqZWN0LCBzb3VyY2VQb3J0LCBkZXN0T2JqZWN0LCBkZXN0UG9y
dCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkZsb3dTeXN0ZW06OmRpc2Nvbm5lY3RPYmplY3QoQXJ0
czo6T2JqZWN0IHNvdXJjZU9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZVBvcnQsIEFy
dHM6Ok9iamVjdCBkZXN0T2JqZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdFBvcnQpCnsKICAg
ICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkZsb3dTeXN0ZW1fYmFzZSo+KF9jYWNoZSkt
PmRpc2Nvbm5lY3RPYmplY3Qoc291cmNlT2JqZWN0LCBzb3VyY2VQb3J0LCBkZXN0T2JqZWN0LCBk
ZXN0UG9ydCk6c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbV9iYXNlKj4oX21ldGhvZF9jYWxs
KCkpLT5kaXNjb25uZWN0T2JqZWN0KHNvdXJjZU9iamVjdCwgc291cmNlUG9ydCwgZGVzdE9iamVj
dCwgZGVzdFBvcnQpOwp9CgppbmxpbmUgQXJ0czo6QXR0cmlidXRlVHlwZSBBcnRzOjpGbG93U3lz
dGVtOjpxdWVyeUZsYWdzKEFydHM6Ok9iamVjdCBub2RlLCBjb25zdCBzdGQ6OnN0cmluZyYgcG9y
dCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbV9i
YXNlKj4oX2NhY2hlKS0+cXVlcnlGbGFncyhub2RlLCBwb3J0KTpzdGF0aWNfY2FzdDxBcnRzOjpG
bG93U3lzdGVtX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnF1ZXJ5RmxhZ3Mobm9kZSwgcG9ydCk7
Cn0KCmlubGluZSB2b2lkIEFydHM6OkZsb3dTeXN0ZW06OnNldEZsb2F0VmFsdWUoQXJ0czo6T2Jq
ZWN0IG5vZGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwb3J0LCBmbG9hdCB2YWx1ZSkKewogICAgICAg
ICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbV9iYXNlKj4oX2NhY2hlKS0+c2V0
RmxvYXRWYWx1ZShub2RlLCBwb3J0LCB2YWx1ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3Rl
bV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zZXRGbG9hdFZhbHVlKG5vZGUsIHBvcnQsIHZhbHVl
KTsKfQoKaW5saW5lIEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlciBBcnRzOjpGbG93U3lzdGVtOjpj
cmVhdGVSZWNlaXZlcihBcnRzOjpPYmplY3QgZGVzdE9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcm
IGRlc3RQb3J0LCBBcnRzOjpGbG93U3lzdGVtU2VuZGVyIHNlbmRlcikKewogICAgICAgIHJldHVy
biBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbV9iYXNlKj4oX2NhY2hlKS0+Y3Jl
YXRlUmVjZWl2ZXIoZGVzdE9iamVjdCwgZGVzdFBvcnQsIHNlbmRlcik6c3RhdGljX2Nhc3Q8QXJ0
czo6Rmxvd1N5c3RlbV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jcmVhdGVSZWNlaXZlcihkZXN0
T2JqZWN0LCBkZXN0UG9ydCwgc2VuZGVyKTsKfQoKaW5saW5lIGJvb2wgQXJ0czo6R2xvYmFsQ29t
bTo6cHV0KGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZh
bHVlKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpHbG9iYWxDb21t
X2Jhc2UqPihfY2FjaGUpLT5wdXQodmFyaWFibGUsIHZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpH
bG9iYWxDb21tX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnB1dCh2YXJpYWJsZSwgdmFsdWUpOwp9
CgppbmxpbmUgc3RkOjpzdHJpbmcgQXJ0czo6R2xvYmFsQ29tbTo6Z2V0KGNvbnN0IHN0ZDo6c3Ry
aW5nJiB2YXJpYWJsZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6
R2xvYmFsQ29tbV9iYXNlKj4oX2NhY2hlKS0+Z2V0KHZhcmlhYmxlKTpzdGF0aWNfY2FzdDxBcnRz
OjpHbG9iYWxDb21tX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmdldCh2YXJpYWJsZSk7Cn0KCmlu
bGluZSB2b2lkIEFydHM6Okdsb2JhbENvbW06OmVyYXNlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJp
YWJsZSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6R2xvYmFsQ29tbV9iYXNl
Kj4oX2NhY2hlKS0+ZXJhc2UodmFyaWFibGUpOnN0YXRpY19jYXN0PEFydHM6Okdsb2JhbENvbW1f
YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZXJhc2UodmFyaWFibGUpOwp9CgppbmxpbmUgYm9vbCBB
cnRzOjpUbXBHbG9iYWxDb21tOjpwdXQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlLCBjb25z
dCBzdGQ6OnN0cmluZyYgdmFsdWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0
PEFydHM6Okdsb2JhbENvbW1fYmFzZSo+KF9jYWNoZSktPnB1dCh2YXJpYWJsZSwgdmFsdWUpOnN0
YXRpY19jYXN0PEFydHM6Okdsb2JhbENvbW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cHV0KHZh
cmlhYmxlLCB2YWx1ZSk7Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBBcnRzOjpUbXBHbG9iYWxDb21t
OjpnZXQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlKQp7CiAgICAgICAgcmV0dXJuIF9jYWNo
ZT9zdGF0aWNfY2FzdDxBcnRzOjpHbG9iYWxDb21tX2Jhc2UqPihfY2FjaGUpLT5nZXQodmFyaWFi
bGUpOnN0YXRpY19jYXN0PEFydHM6Okdsb2JhbENvbW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+
Z2V0KHZhcmlhYmxlKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6VG1wR2xvYmFsQ29tbTo6ZXJhc2Uo
Y29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2Fz
dDxBcnRzOjpHbG9iYWxDb21tX2Jhc2UqPihfY2FjaGUpLT5lcmFzZSh2YXJpYWJsZSk6c3RhdGlj
X2Nhc3Q8QXJ0czo6R2xvYmFsQ29tbV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5lcmFzZSh2YXJp
YWJsZSk7Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBBcnRzOjpUcmFkZXJPZmZlcjo6aW50ZXJmYWNl
TmFtZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlRyYWRlck9m
ZmVyX2Jhc2UqPihfY2FjaGUpLT5pbnRlcmZhY2VOYW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6VHJh
ZGVyT2ZmZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+aW50ZXJmYWNlTmFtZSgpOwp9Cgppbmxp
bmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogQXJ0czo6VHJhZGVyT2ZmZXI6OmdldFByb3Bl
cnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0
aWNfY2FzdDxBcnRzOjpUcmFkZXJPZmZlcl9iYXNlKj4oX2NhY2hlKS0+Z2V0UHJvcGVydHkobmFt
ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6VHJhZGVyT2ZmZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+
Z2V0UHJvcGVydHkobmFtZSk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlRyYWRlclF1ZXJ5OjpzdXBw
b3J0cyhjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1
ZSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6VHJhZGVyUXVlcnlfYmFzZSo+
KF9jYWNoZSktPnN1cHBvcnRzKHByb3BlcnR5LCB2YWx1ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6VHJh
ZGVyUXVlcnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3VwcG9ydHMocHJvcGVydHksIHZhbHVl
KTsKfQoKaW5saW5lIHN0ZDo6dmVjdG9yPEFydHM6OlRyYWRlck9mZmVyPiAqIEFydHM6OlRyYWRl
clF1ZXJ5OjpxdWVyeSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6
OlRyYWRlclF1ZXJ5X2Jhc2UqPihfY2FjaGUpLT5xdWVyeSgpOnN0YXRpY19jYXN0PEFydHM6OlRy
YWRlclF1ZXJ5X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnF1ZXJ5KCk7Cn0KCmlubGluZSBzdGQ6
OnN0cmluZyBBcnRzOjpMb2FkZXI6OmRhdGFWZXJzaW9uKCkKewogICAgICAgIHJldHVybiBfY2Fj
aGU/c3RhdGljX2Nhc3Q8QXJ0czo6TG9hZGVyX2Jhc2UqPihfY2FjaGUpLT5kYXRhVmVyc2lvbigp
OnN0YXRpY19jYXN0PEFydHM6OkxvYWRlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5kYXRhVmVy
c2lvbigpOwp9CgppbmxpbmUgc3RkOjp2ZWN0b3I8QXJ0czo6VHJhZGVyRW50cnk+ICogQXJ0czo6
TG9hZGVyOjp0cmFkZXJFbnRyaWVzKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nh
c3Q8QXJ0czo6TG9hZGVyX2Jhc2UqPihfY2FjaGUpLT50cmFkZXJFbnRyaWVzKCk6c3RhdGljX2Nh
c3Q8QXJ0czo6TG9hZGVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnRyYWRlckVudHJpZXMoKTsK
fQoKaW5saW5lIHN0ZDo6dmVjdG9yPEFydHM6Ok1vZHVsZURlZj4gKiBBcnRzOjpMb2FkZXI6Om1v
ZHVsZXMoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpMb2FkZXJf
YmFzZSo+KF9jYWNoZSktPm1vZHVsZXMoKTpzdGF0aWNfY2FzdDxBcnRzOjpMb2FkZXJfYmFzZSo+
KF9tZXRob2RfY2FsbCgpKS0+bW9kdWxlcygpOwp9CgppbmxpbmUgQXJ0czo6T2JqZWN0IEFydHM6
OkxvYWRlcjo6bG9hZE9iamVjdChBcnRzOjpUcmFkZXJPZmZlciBvZmZlcikKewogICAgICAgIHJl
dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6TG9hZGVyX2Jhc2UqPihfY2FjaGUpLT5sb2Fk
T2JqZWN0KG9mZmVyKTpzdGF0aWNfY2FzdDxBcnRzOjpMb2FkZXJfYmFzZSo+KF9tZXRob2RfY2Fs
bCgpKS0+bG9hZE9iamVjdChvZmZlcik7Cn0KCn07CiMgNTEgIi4uLy4uL2FydHMvbWNvcC9jb21t
b24uaCIgMgoKbmFtZXNwYWNlIEFydHMgewoKCnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgcmVhZFR5
cGVTZXEoQnVmZmVyJiBzdHJlYW0sIHN0ZDo6dmVjdG9yPFQ+JiBzZXF1ZW5jZSkgewogICAgICAg
IHNlcXVlbmNlLmNsZWFyKCk7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgbCA9IHN0cmVhbS5yZWFk
TG9uZygpOwogICAgICAgIHdoaWxlKGwtLSkgc2VxdWVuY2UucHVzaF9iYWNrKFQoc3RyZWFtKSk7
Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgd3JpdGVUeXBlU2VxKEJ1ZmZlciYgc3RyZWFtLCBj
b25zdCBzdGQ6OnZlY3RvcjxUPiYgc2VxdWVuY2UpIHsKICAgICAgICBzdHJlYW0ud3JpdGVMb25n
KHNlcXVlbmNlLnNpemUoKSk7CiAgICAgICAgZm9yKHVuc2lnbmVkIGxvbmcgbD0wO2w8c2VxdWVu
Y2Uuc2l6ZSgpO2wrKykKICAgICAgICAgICAgICAgIHNlcXVlbmNlW2xdLndyaXRlVHlwZShzdHJl
YW0pOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIHdyaXRlT2JqZWN0KEJ1ZmZlciYgc3RyZWFt
LCBUKiBvYmplY3QpIHsKICAgICAgICBpZihvYmplY3QpCiAgICAgICAgewoKCgoKCiAgICAgICAg
ICAgICAgICBzdGQ6OnN0cmluZyBzID0gb2JqZWN0LT5fdG9TdHJpbmcoKTsKCiAgICAgICAgICAg
ICAgICBCdWZmZXIgYnVmZmVyOwogICAgICAgICAgICAgICAgYnVmZmVyLmZyb21TdHJpbmcocywi
TUNPUC1PYmplY3QiKTsKICAgICAgICAgICAgICAgIE9iamVjdFJlZmVyZW5jZSByZWZlcmVuY2Uo
YnVmZmVyKTsKCiAgICAgICAgICAgICAgICBvYmplY3QtPl9jb3B5UmVtb3RlKCk7CiAgICAgICAg
ICAgICAgICByZWZlcmVuY2Uud3JpdGVUeXBlKHN0cmVhbSk7CiAgICAgICAgfQogICAgICAgIGVs
c2UKICAgICAgICB7CiAgICAgICAgICAgICAgICBPYmplY3RSZWZlcmVuY2UgbnVsbF9yZWZlcmVu
Y2U7CgogICAgICAgICAgICAgICAgbnVsbF9yZWZlcmVuY2Uuc2VydmVySUQgPSAibnVsbCI7CiAg
ICAgICAgICAgICAgICBudWxsX3JlZmVyZW5jZS5vYmplY3RJRCA9IDA7CiAgICAgICAgICAgICAg
ICBudWxsX3JlZmVyZW5jZS53cml0ZVR5cGUoc3RyZWFtKTsKICAgICAgICB9Cn0KCnRlbXBsYXRl
PGNsYXNzIFQ+CnZvaWQgcmVhZE9iamVjdChCdWZmZXImIHN0cmVhbSwgVComIHJlc3VsdCkgewog
ICAgICAgIE9iamVjdFJlZmVyZW5jZSByZWZlcmVuY2Uoc3RyZWFtKTsKCiAgICAgICAgaWYocmVm
ZXJlbmNlLnNlcnZlcklEID09ICJudWxsIikKICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7CiAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmVzdWx0ID0gVDo6X2Zyb21SZWZlcmVuY2UocmVm
ZXJlbmNlLGZhbHNlKTsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCByZWFkT2JqZWN0U2VxKEJ1
ZmZlciYgc3RyZWFtLCBzdGQ6OnZlY3RvcjxUPiYgc2VxdWVuY2UpCnsKICAgICAgICBzZXF1ZW5j
ZS5jbGVhcigpOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGwgPSBzdHJlYW0ucmVhZExvbmcoKTsK
ICAgICAgICB3aGlsZShsLS0pCiAgICAgICAgewogICAgICAgICAgICAgICAgdHlwZW5hbWUgVDo6
X2Jhc2VfY2xhc3MgKnRlbXA7CiAgICAgICAgICAgICAgICByZWFkT2JqZWN0KHN0cmVhbSwgdGVt
cCk7CiAgICAgICAgICAgICAgICBzZXF1ZW5jZS5wdXNoX2JhY2soVDo6X2Zyb21fYmFzZSh0ZW1w
KSk7CiAgICAgICAgfQp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIHdyaXRlT2JqZWN0U2VxKEJ1
ZmZlciYgc3RyZWFtLCBjb25zdCBzdGQ6OnZlY3RvcjxUPiYgc2VxdWVuY2UpCnsKICAgICAgICBz
dHJlYW0ud3JpdGVMb25nKHNlcXVlbmNlLnNpemUoKSk7CgogICAgICAgIGZvcih1bnNpZ25lZCBs
b25nIGw9MDtsPHNlcXVlbmNlLnNpemUoKTtsKyspCiAgICAgICAgewogICAgICAgICAgICAgICAg
VCBvYmplY3QgPSBzZXF1ZW5jZVtsXTsKICAgICAgICAgICAgICAgIHdyaXRlT2JqZWN0KHN0cmVh
bSxvYmplY3QuX2Jhc2UoKSk7CiAgICAgICAgfQp9CgoKCgoKCn07CiMgNyAic291bmRzZXJ2ZXIu
aCIgMgoKCiMgMSAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDEKCgoKCgojIDEgIi4uLy4u
L2FydHMvbWNvcC9jb21tb24uaCIgMQojIDcgIi4uLy4uL2FydHMvZmxvdy9hcnRzZmxvdy5oIiAy
CgpuYW1lc3BhY2UgQXJ0cyB7CmVudW0gQXV0b1N1c3BlbmRTdGF0ZSB7YXNOb1N1c3BlbmQgPSAw
LCBhc1N1c3BlbmQgPSAxLCBhc1N1c3BlbmRTdG9wID0gMn07CmVudW0gQXVkaW9NYW5hZ2VyRGly
ZWN0aW9uIHthbVBsYXkgPSAwLCBhbVJlY29yZCA9IDF9Owp9OwpuYW1lc3BhY2UgQXJ0cyB7CmNs
YXNzIEF1ZGlvTWFuYWdlckluZm8gOiBwdWJsaWMgQXJ0czo6VHlwZSB7CnB1YmxpYzoKICAgICAg
ICBBdWRpb01hbmFnZXJJbmZvKCk7CiAgICAgICAgQXVkaW9NYW5hZ2VySW5mbyhsb25nIF9hX0lE
LCBjb25zdCBzdGQ6OnN0cmluZyYgX2FfZGVzdGluYXRpb24sIEFydHM6OkF1ZGlvTWFuYWdlckRp
cmVjdGlvbiBfYV9kaXJlY3Rpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiBfYV90aXRsZSwgY29uc3Qg
c3RkOjpzdHJpbmcmIF9hX2F1dG9SZXN0b3JlSUQpOwogICAgICAgIEF1ZGlvTWFuYWdlckluZm8o
QXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIEF1ZGlvTWFuYWdlckluZm8oY29uc3QgQXVk
aW9NYW5hZ2VySW5mbyYgY29weVR5cGUpOwogICAgICAgIEF1ZGlvTWFuYWdlckluZm8mIG9wZXJh
dG9yPShjb25zdCBBdWRpb01hbmFnZXJJbmZvJiBhc3NpZ25UeXBlKTsKICAgICAgICBsb25nIElE
OwogICAgICAgIHN0ZDo6c3RyaW5nIGRlc3RpbmF0aW9uOwogICAgICAgIEFydHM6OkF1ZGlvTWFu
YWdlckRpcmVjdGlvbiBkaXJlY3Rpb247CiAgICAgICAgc3RkOjpzdHJpbmcgdGl0bGU7CiAgICAg
ICAgc3RkOjpzdHJpbmcgYXV0b1Jlc3RvcmVJRDsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0
czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYg
c3RyZWFtKSBjb25zdDsKfTsKCn07Cm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3ludGhNb2R1bGU7
CmNsYXNzIFN5bnRoX1BMQVk7CmNsYXNzIFN5bnRoX1JFQ09SRDsKY2xhc3MgU3ludGhfRlJFUVVF
TkNZOwpjbGFzcyBTeW50aF9XQVZFX1NJTjsKY2xhc3MgU3ludGhfTVVMVElfQUREOwpjbGFzcyBT
eW50aF9BREQ7CmNsYXNzIFN5bnRoX01VTDsKY2xhc3MgU3ludGhfUExBWV9XQVY7CmNsYXNzIFN5
bnRoX0JVU19VUExJTks7CmNsYXNzIFN5bnRoX0JVU19ET1dOTElOSzsKY2xhc3MgQnl0ZVN0cmVh
bVRvQXVkaW87CmNsYXNzIFN0ZXJlb0VmZmVjdDsKY2xhc3MgU3RlcmVvVm9sdW1lQ29udHJvbDsK
Y2xhc3MgU3RlcmVvRkZUU2NvcGU7CmNsYXNzIFN0ZXJlb0VmZmVjdFN0YWNrOwpjbGFzcyBBdWRp
b01hbmFnZXJDbGllbnQ7CmNsYXNzIEF1ZGlvTWFuYWdlcjsKY2xhc3MgU3ludGhfQU1BTl9QTEFZ
OwpjbGFzcyBTeW50aF9BTUFOX1JFQ09SRDsKCmNsYXNzIFN5bnRoTW9kdWxlX2Jhc2UgOiB2aXJ0
dWFsIHB1YmxpYyBBcnRzOjpPYmplY3RfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5z
aWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3ludGhNb2R1bGVfYmFzZSAqX2NyZWF0
ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3ludGhNb2R1bGUiKTsKICAg
ICAgICBzdGF0aWMgU3ludGhNb2R1bGVfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2Jq
ZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3ludGhNb2R1bGVfYmFzZSAqX2Zyb21SZWZlcmVuY2Uo
QXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRp
YyBTeW50aE1vZHVsZV9iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYg
b2JqZWN0KTsKICAgICAgICBpbmxpbmUgU3ludGhNb2R1bGVfYmFzZSAqX2NvcHkoKSB7CiAgICAg
ICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFs
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAg
ICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVhbCBBcnRz
OjpBdXRvU3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBzdGFydCgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtSW5pdCgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
U3RhcnQoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbUVuZCgpID0gMDsKfTsKCmNs
YXNzIFN5bnRoTW9kdWxlX3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBTeW50aE1vZHVsZV9iYXNlLCB2
aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTeW50
aE1vZHVsZV9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgU3ludGhNb2R1bGVfc3R1YihBcnRzOjpD
b25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgQXJ0czo6QXV0
b1N1c3BlbmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwogICAgICAgIHZvaWQgc3RhcnQoKTsKICAgICAg
ICB2b2lkIHN0b3AoKTsKICAgICAgICB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICB2b2lkIHN0
cmVhbVN0YXJ0KCk7CiAgICAgICAgdm9pZCBzdHJlYW1FbmQoKTsKfTsKCmNsYXNzIFN5bnRoTW9k
dWxlX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTeW50aE1vZHVsZV9iYXNlLCB2aXJ0dWFsIHB1Ymxp
YyBBcnRzOjpPYmplY3Rfc2tlbCB7CnB1YmxpYzoKICAgICAgICBTeW50aE1vZHVsZV9za2VsKCk7
CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAg
ICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJs
ZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1
aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVx
dWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4u
Ly4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDExMCAiLi4vLi4vYXJ0cy9mbG93L2FydHNm
bG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTeW50aE1vZHVsZSA6IHB1YmxpYyBBcnRz
OjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0Ny
ZWF0b3IoKTsKICAgICAgICBTeW50aE1vZHVsZV9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5l
IFN5bnRoTW9kdWxlX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29s
LT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgX2NhY2hlPShTeW50aE1vZHVsZV9iYXNlICopX3Bvb2wtPmJhc2Ut
Pl9jYXN0KFN5bnRoTW9kdWxlX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAo
KHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNo
ZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFN5bnRoTW9kdWxlKFN5bnRo
TW9kdWxlX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6
CiAgICAgICAgdHlwZWRlZiBTeW50aE1vZHVsZV9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBp
bmxpbmUgU3ludGhNb2R1bGUoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7
fQogICAgICAgIGlubGluZSBTeW50aE1vZHVsZShjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgog
ICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KFN5bnRoTW9kdWxlX2Jhc2U6Ol9jcmVhdGUocy5z
dHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhNb2R1bGUoY29uc3Qg
QXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0
cmluZygpPyhTeW50aE1vZHVsZV9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN5bnRo
TW9kdWxlX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hl
KDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoTW9kdWxlKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0
JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aE1vZHVsZV9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMu
b2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoTW9kdWxlKGNvbnN0
IFN5bnRoTW9kdWxlJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNo
ZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBTeW50aE1vZHVsZShBcnRzOjpPYmpl
Y3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxp
bmUgc3RhdGljIFN5bnRoTW9kdWxlIG51bGwoKSB7cmV0dXJuIFN5bnRoTW9kdWxlKChTeW50aE1v
ZHVsZV9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTeW50aE1vZHVsZSBfZnJvbV9i
YXNlKFN5bnRoTW9kdWxlX2Jhc2UqIGIpIHtyZXR1cm4gU3ludGhNb2R1bGUoYik7fQogICAgICAg
IGlubGluZSBTeW50aE1vZHVsZSYgb3BlcmF0b3I9KGNvbnN0IFN5bnRoTW9kdWxlJiB0YXJnZXQp
IHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhp
czsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0g
dGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAg
ICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgICB9CiAgICAgICAgaW5saW5lIFN5bnRoTW9kdWxlX2Jhc2UqIF9iYXNlKCkge3JldHVy
biBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIEFydHM6OkF1
dG9TdXNwZW5kU3RhdGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgp
OwogICAgICAgIGlubGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1J
bml0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUg
dm9pZCBzdHJlYW1FbmQoKTsKfTsKCmNsYXNzIFN5bnRoX1BMQVlfYmFzZSA6IHZpcnR1YWwgcHVi
bGljIEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFN5bnRoX1BMQVlfYmFzZSAqX2NyZWF0ZShj
b25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3ludGhfUExBWSIpOwogICAgICAg
IHN0YXRpYyBTeW50aF9QTEFZX2Jhc2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJl
Zik7CiAgICAgICAgc3RhdGljIFN5bnRoX1BMQVlfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6
T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTeW50
aF9QTEFZX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3Qp
OwogICAgICAgIGlubGluZSBTeW50aF9QTEFZX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAg
ICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZl
Y3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lk
ICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7Cgp9OwoKY2xhc3MgU3ludGhfUExBWV9zdHViIDog
dmlydHVhbCBwdWJsaWMgU3ludGhfUExBWV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50
aE1vZHVsZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFN5bnRoX1BMQVlfc3R1YigpOwoKcHVi
bGljOgogICAgICAgIFN5bnRoX1BMQVlfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9u
LCBsb25nIG9iamVjdElEKTsKCn07CgpjbGFzcyBTeW50aF9QTEFZX3NrZWwgOiB2aXJ0dWFsIHB1
YmxpYyBTeW50aF9QTEFZX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9kdWxlX3Nr
ZWwgewpwcm90ZWN0ZWQ6CgogICAgICAgIGZsb2F0ICppbnZhbHVlX2xlZnQ7CiAgICAgICAgZmxv
YXQgKmludmFsdWVfcmlnaHQ7CgpwdWJsaWM6CiAgICAgICAgU3ludGhfUExBWV9za2VsKCk7Cgog
ICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBz
dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdp
dGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxk
TWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVz
dCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4u
L2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDIwOCAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93
LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTeW50aF9QTEFZIDogcHVibGljIEFydHM6Ok9i
amVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRv
cigpOwogICAgICAgIFN5bnRoX1BMQVlfYmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBTeW50
aF9QTEFZX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVj
a2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgX2NhY2hlPShTeW50aF9QTEFZX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3Qo
U3ludGhfUExBWV9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAw
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAg
ICAgfQoKcHJvdGVjdGVkOgogICAgICAgIGlubGluZSBTeW50aF9QTEFZKFN5bnRoX1BMQVlfYmFz
ZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0
eXBlZGVmIFN5bnRoX1BMQVlfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN5bnRo
X1BMQVkoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlu
bGluZSBTeW50aF9QTEFZKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAg
ICBBcnRzOjpPYmplY3QoU3ludGhfUExBWV9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwgX2Nh
Y2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX1BMQVkoY29uc3QgQXJ0czo6UmVmZXJlbmNl
ICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhTeW50aF9Q
TEFZX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooU3ludGhfUExBWV9iYXNlOjpfZnJv
bVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlu
bGluZSBTeW50aF9QTEFZKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVj
dChTeW50aF9QTEFZX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUo
MCkge30KICAgICAgICBpbmxpbmUgU3ludGhfUExBWShjb25zdCBTeW50aF9QTEFZJiB0YXJnZXQp
IDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQog
ICAgICAgIGlubGluZSBTeW50aF9QTEFZKEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpP
YmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgU3ludGhfUExBWSBu
dWxsKCkge3JldHVybiBTeW50aF9QTEFZKChTeW50aF9QTEFZX2Jhc2UqKTApO30KICAgICAgICBp
bmxpbmUgc3RhdGljIFN5bnRoX1BMQVkgX2Zyb21fYmFzZShTeW50aF9QTEFZX2Jhc2UqIGIpIHty
ZXR1cm4gU3ludGhfUExBWShiKTt9CiAgICAgICAgaW5saW5lIFN5bnRoX1BMQVkmIG9wZXJhdG9y
PShjb25zdCBTeW50aF9QTEFZJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9
PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMo
KTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAg
X2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJh
dG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3ludGhNb2R1bGUo
Kl9wb29sKTsgfQogICAgICAgIGlubGluZSBTeW50aF9QTEFZX2Jhc2UqIF9iYXNlKCkge3JldHVy
biBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIEFydHM6OkF1
dG9TdXNwZW5kU3RhdGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgp
OwogICAgICAgIGlubGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1J
bml0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUg
dm9pZCBzdHJlYW1FbmQoKTsKfTsKCmNsYXNzIFN5bnRoX1JFQ09SRF9iYXNlIDogdmlydHVhbCBw
dWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5z
aWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3ludGhfUkVDT1JEX2Jhc2UgKl9jcmVh
dGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OlN5bnRoX1JFQ09SRCIpOwog
ICAgICAgIHN0YXRpYyBTeW50aF9SRUNPUkRfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcg
b2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3ludGhfUkVDT1JEX2Jhc2UgKl9mcm9tUmVmZXJl
bmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwoKICAgICAgICBz
dGF0aWMgU3ludGhfUkVDT1JEX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2Jq
ZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTeW50aF9SRUNPUkRfYmFzZSAqX2NvcHkoKSB7
CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwog
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2
aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7
CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCn07CgpjbGFzcyBTeW50
aF9SRUNPUkRfc3R1YiA6IHZpcnR1YWwgcHVibGljIFN5bnRoX1JFQ09SRF9iYXNlLCB2aXJ0dWFs
IHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFN5bnRo
X1JFQ09SRF9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgU3ludGhfUkVDT1JEX3N0dWIoQXJ0czo6
Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7Cgp9OwoKY2xhc3MgU3ludGhf
UkVDT1JEX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTeW50aF9SRUNPUkRfYmFzZSwgdmlydHVhbCBw
dWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc2tlbCB7CnByb3RlY3RlZDoKCiAgICAgICAgZmxvYXQg
KmxlZnQ7CiAgICAgICAgZmxvYXQgKnJpZ2h0OwoKcHVibGljOgogICAgICAgIFN5bnRoX1JFQ09S
RF9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwo
KTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lz
Q29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAg
IHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1
ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9
OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDMwNyAiLi4vLi4vYXJ0cy9m
bG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTeW50aF9SRUNPUkQgOiBw
dWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0
X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3ludGhfUkVDT1JEX2Jhc2UgKl9jYWNoZTsKICAg
ICAgICBpbmxpbmUgU3ludGhfUkVDT1JEX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAg
ICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJh
c2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShTeW50aF9SRUNPUkRfYmFzZSAq
KV9wb29sLT5iYXNlLT5fY2FzdChTeW50aF9SRUNPUkRfYmFzZTo6X0lJRCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgU3lu
dGhfUkVDT1JEKFN5bnRoX1JFQ09SRF9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hl
KDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgU3ludGhfUkVDT1JEX2Jhc2UgX2Jhc2Vf
Y2xhc3M7CgogICAgICAgIGlubGluZSBTeW50aF9SRUNPUkQoKSA6IEFydHM6Ok9iamVjdChfQ3Jl
YXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9SRUNPUkQoY29uc3QgQXJ0
czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChTeW50aF9SRUNP
UkRfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGlu
ZSBTeW50aF9SRUNPUkQoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAg
ICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhTeW50aF9SRUNPUkRfYmFzZTo6X2Zyb21TdHJp
bmcoci5zdHJpbmcoKSkpOihTeW50aF9SRUNPUkRfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZl
cmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfUkVDT1JE
KGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aF9SRUNPUkRf
YmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAg
IGlubGluZSBTeW50aF9SRUNPUkQoY29uc3QgU3ludGhfUkVDT1JEJiB0YXJnZXQpIDogQXJ0czo6
T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlu
bGluZSBTeW50aF9SRUNPUkQoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChw
KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTeW50aF9SRUNPUkQgbnVsbCgp
IHtyZXR1cm4gU3ludGhfUkVDT1JEKChTeW50aF9SRUNPUkRfYmFzZSopMCk7fQogICAgICAgIGlu
bGluZSBzdGF0aWMgU3ludGhfUkVDT1JEIF9mcm9tX2Jhc2UoU3ludGhfUkVDT1JEX2Jhc2UqIGIp
IHtyZXR1cm4gU3ludGhfUkVDT1JEKGIpO30KICAgICAgICBpbmxpbmUgU3ludGhfUkVDT1JEJiBv
cGVyYXRvcj0oY29uc3QgU3ludGhfUkVDT1JEJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlm
IChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9w
b29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAg
ICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5J
bmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5s
aW5lIG9wZXJhdG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3lu
dGhNb2R1bGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTeW50aF9SRUNPUkRfYmFzZSogX2Jh
c2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxp
bmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwogICAgICAgIGlubGluZSB2
b2lkIHN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RvcCgpOwogICAgICAgIGlubGluZSB2
b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1TdGFydCgpOwogICAg
ICAgIGlubGluZSB2b2lkIHN0cmVhbUVuZCgpOwp9OwoKY2xhc3MgU3ludGhfRlJFUVVFTkNZX2Jh
c2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9iYXNlIHsKcHVibGljOgogICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBTeW50aF9GUkVR
VUVOQ1lfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6
U3ludGhfRlJFUVVFTkNZIik7CiAgICAgICAgc3RhdGljIFN5bnRoX0ZSRVFVRU5DWV9iYXNlICpf
ZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBTeW50aF9G
UkVRVUVOQ1lfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwg
Ym9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTeW50aF9GUkVRVUVOQ1lfYmFzZSAqX2Zy
b21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5l
IFN5bnRoX0ZSRVFVRU5DWV9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkg
MCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9k
ZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpz
dHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5z
aWduZWQgbG9uZyBpaWQpOwoKfTsKCmNsYXNzIFN5bnRoX0ZSRVFVRU5DWV9zdHViIDogdmlydHVh
bCBwdWJsaWMgU3ludGhfRlJFUVVFTkNZX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRo
TW9kdWxlX3N0dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgU3ludGhfRlJFUVVFTkNZX3N0dWIoKTsK
CnB1YmxpYzoKICAgICAgICBTeW50aF9GUkVRVUVOQ1lfc3R1YihBcnRzOjpDb25uZWN0aW9uICpj
b25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCn07CgpjbGFzcyBTeW50aF9GUkVRVUVOQ1lfc2tl
bCA6IHZpcnR1YWwgcHVibGljIFN5bnRoX0ZSRVFVRU5DWV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBB
cnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoKICAgICAgICBmbG9hdCAqZnJlcXVl
bmN5OwogICAgICAgIGZsb2F0ICpwb3M7CgpwdWJsaWM6CiAgICAgICAgU3ludGhfRlJFUVVFTkNZ
X3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgp
OwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXND
b21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAg
dm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVm
ZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07
CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgNDA2ICIuLi8uLi9hcnRzL2Zs
b3cvYXJ0c2Zsb3cuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFN5bnRoX0ZSRVFVRU5DWSA6
IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmpl
Y3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTeW50aF9GUkVRVUVOQ1lfYmFzZSAqX2NhY2hl
OwogICAgICAgIGlubGluZSBTeW50aF9GUkVRVUVOQ1lfYmFzZSAqX21ldGhvZF9jYWxsKCkgewog
ICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihf
cG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFN5bnRoX0ZSRVFV
RU5DWV9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN5bnRoX0ZSRVFVRU5DWV9iYXNlOjpfSUlE
KTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVkOgogICAg
ICAgIGlubGluZSBTeW50aF9GUkVRVUVOQ1koU3ludGhfRlJFUVVFTkNZX2Jhc2UqIGIpIDogQXJ0
czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBTeW50
aF9GUkVRVUVOQ1lfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN5bnRoX0ZSRVFV
RU5DWSgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5s
aW5lIFN5bnRoX0ZSRVFVRU5DWShjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAg
ICAgICAgQXJ0czo6T2JqZWN0KFN5bnRoX0ZSRVFVRU5DWV9iYXNlOjpfY3JlYXRlKHMuc3RyaW5n
KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX0ZSRVFVRU5DWShjb25zdCBB
cnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3Ry
aW5nKCk/KFN5bnRoX0ZSRVFVRU5DWV9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN5
bnRoX0ZSRVFVRU5DWV9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSks
IF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9GUkVRVUVOQ1koY29uc3QgQXJ0czo6
RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KFN5bnRoX0ZSRVFVRU5DWV9iYXNlOjpfZnJv
bUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5
bnRoX0ZSRVFVRU5DWShjb25zdCBTeW50aF9GUkVRVUVOQ1kmIHRhcmdldCkgOiBBcnRzOjpPYmpl
Y3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5l
IFN5bnRoX0ZSRVFVRU5DWShBcnRzOjpPYmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHAp
LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRoX0ZSRVFVRU5DWSBudWxs
KCkge3JldHVybiBTeW50aF9GUkVRVUVOQ1koKFN5bnRoX0ZSRVFVRU5DWV9iYXNlKikwKTt9CiAg
ICAgICAgaW5saW5lIHN0YXRpYyBTeW50aF9GUkVRVUVOQ1kgX2Zyb21fYmFzZShTeW50aF9GUkVR
VUVOQ1lfYmFzZSogYikge3JldHVybiBTeW50aF9GUkVRVUVOQ1koYik7fQogICAgICAgIGlubGlu
ZSBTeW50aF9GUkVRVUVOQ1kmIG9wZXJhdG9yPShjb25zdCBTeW50aF9GUkVRVUVOQ1kmIHRhcmdl
dCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0
aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAgICAgX3Bvb2wg
PSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQuX2NhY2hlOwog
ICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6U3ludGhNb2R1bGUoKSBj
b25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgqX3Bvb2wpOyB9CiAgICAgICAgaW5saW5l
IFN5bnRoX0ZSRVFVRU5DWV9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0
aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIGF1dG9T
dXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9p
ZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5pdCgpOwogICAgICAgIGlubGlu
ZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtRW5kKCk7Cn07
CgpjbGFzcyBTeW50aF9XQVZFX1NJTl9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhN
b2R1bGVfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoK
ICAgICAgICBzdGF0aWMgU3ludGhfV0FWRV9TSU5fYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0
cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3ludGhfV0FWRV9TSU4iKTsKICAgICAgICBzdGF0aWMg
U3ludGhfV0FWRV9TSU5fYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsK
ICAgICAgICBzdGF0aWMgU3ludGhfV0FWRV9TSU5fYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6
T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTeW50
aF9XQVZFX1NJTl9iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2Jq
ZWN0KTsKICAgICAgICBpbmxpbmUgU3ludGhfV0FWRV9TSU5fYmFzZSAqX2NvcHkoKSB7CiAgICAg
ICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFs
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAg
ICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCn07CgpjbGFzcyBTeW50aF9XQVZF
X1NJTl9zdHViIDogdmlydHVhbCBwdWJsaWMgU3ludGhfV0FWRV9TSU5fYmFzZSwgdmlydHVhbCBw
dWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTeW50aF9X
QVZFX1NJTl9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgU3ludGhfV0FWRV9TSU5fc3R1YihBcnRz
OjpDb25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCn07CgpjbGFzcyBTeW50
aF9XQVZFX1NJTl9za2VsIDogdmlydHVhbCBwdWJsaWMgU3ludGhfV0FWRV9TSU5fYmFzZSwgdmly
dHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc2tlbCB7CnByb3RlY3RlZDoKCiAgICAgICAg
ZmxvYXQgKnBvczsKICAgICAgICBmbG9hdCAqb3V0dmFsdWU7CgpwdWJsaWM6CiAgICAgICAgU3lu
dGhfV0FWRV9TSU5fc2tlbCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFj
ZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAg
ICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1l
KTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRj
aChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9k
SUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA1MDUgIi4u
Ly4uL2FydHMvZmxvdy9hcnRzZmxvdy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3ludGhf
V0FWRV9TSU4gOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMg
QXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3ludGhfV0FWRV9TSU5fYmFz
ZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBTeW50aF9XQVZFX1NJTl9iYXNlICpfbWV0aG9kX2Nh
bGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAg
ICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oU3lu
dGhfV0FWRV9TSU5fYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChTeW50aF9XQVZFX1NJTl9iYXNl
OjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVk
OgogICAgICAgIGlubGluZSBTeW50aF9XQVZFX1NJTihTeW50aF9XQVZFX1NJTl9iYXNlKiBiKSA6
IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYg
U3ludGhfV0FWRV9TSU5fYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN5bnRoX1dB
VkVfU0lOKCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBp
bmxpbmUgU3ludGhfV0FWRV9TSU4oY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAg
ICAgICAgIEFydHM6Ok9iamVjdChTeW50aF9XQVZFX1NJTl9iYXNlOjpfY3JlYXRlKHMuc3RyaW5n
KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX1dBVkVfU0lOKGNvbnN0IEFy
dHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJp
bmcoKT8oU3ludGhfV0FWRV9TSU5fYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTeW50
aF9XQVZFX1NJTl9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9j
YWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9XQVZFX1NJTihjb25zdCBBcnRzOjpEeW5h
bWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoU3ludGhfV0FWRV9TSU5fYmFzZTo6X2Zyb21EeW5h
bWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9X
QVZFX1NJTihjb25zdCBTeW50aF9XQVZFX1NJTiYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJn
ZXQuX3Bvb2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgU3ludGhf
V0FWRV9TSU4oQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hl
KDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTeW50aF9XQVZFX1NJTiBudWxsKCkge3JldHVy
biBTeW50aF9XQVZFX1NJTigoU3ludGhfV0FWRV9TSU5fYmFzZSopMCk7fQogICAgICAgIGlubGlu
ZSBzdGF0aWMgU3ludGhfV0FWRV9TSU4gX2Zyb21fYmFzZShTeW50aF9XQVZFX1NJTl9iYXNlKiBi
KSB7cmV0dXJuIFN5bnRoX1dBVkVfU0lOKGIpO30KICAgICAgICBpbmxpbmUgU3ludGhfV0FWRV9T
SU4mIG9wZXJhdG9yPShjb25zdCBTeW50aF9XQVZFX1NJTiYgdGFyZ2V0KSB7CiAgICAgICAgICAg
ICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAgICAgICAgICAg
ICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdldC5fcG9vbDsK
ICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAgICAgICAgICBf
cG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAg
ICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIEFy
dHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgU3ludGhfV0FWRV9TSU5f
YmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAg
ICAgICBpbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwogICAgICAg
IGlubGluZSB2b2lkIHN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RvcCgpOwogICAgICAg
IGlubGluZSB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1TdGFy
dCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUVuZCgpOwp9OwoKY2xhc3MgU3ludGhfTVVM
VElfQUREX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9iYXNlIHsKcHVi
bGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBT
eW50aF9NVUxUSV9BRERfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3Mg
PSAiQXJ0czo6U3ludGhfTVVMVElfQUREIik7CiAgICAgICAgc3RhdGljIFN5bnRoX01VTFRJX0FE
RF9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRp
YyBTeW50aF9NVUxUSV9BRERfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJl
bmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTeW50aF9NVUxUSV9BRERf
YmFzZSAqX2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAg
ICAgaW5saW5lIFN5bnRoX01VTFRJX0FERF9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAg
ICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpz
dHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAq
X2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKfTsKCmNsYXNzIFN5bnRoX01VTFRJX0FERF9zdHVi
IDogdmlydHVhbCBwdWJsaWMgU3ludGhfTVVMVElfQUREX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFy
dHM6OlN5bnRoTW9kdWxlX3N0dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgU3ludGhfTVVMVElfQURE
X3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBTeW50aF9NVUxUSV9BRERfc3R1YihBcnRzOjpDb25u
ZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCn07CgpjbGFzcyBTeW50aF9NVUxU
SV9BRERfc2tlbCA6IHZpcnR1YWwgcHVibGljIFN5bnRoX01VTFRJX0FERF9iYXNlLCB2aXJ0dWFs
IHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoKICAgICAgICBmbG9h
dCAqKmludmFsdWU7CiAgICAgICAgZmxvYXQgKm91dHZhbHVlOwoKcHVibGljOgogICAgICAgIFN5
bnRoX01VTFRJX0FERF9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJm
YWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAg
ICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5h
bWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3Bh
dGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRo
b2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDYwNCAi
Li4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTeW50
aF9NVUxUSV9BREQgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0
aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3ludGhfTVVMVElfQURE
X2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgU3ludGhfTVVMVElfQUREX2Jhc2UgKl9tZXRo
b2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAg
ICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hl
PShTeW50aF9NVUxUSV9BRERfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChTeW50aF9NVUxUSV9B
RERfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnBy
b3RlY3RlZDoKICAgICAgICBpbmxpbmUgU3ludGhfTVVMVElfQUREKFN5bnRoX01VTFRJX0FERF9i
YXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAg
IHR5cGVkZWYgU3ludGhfTVVMVElfQUREX2Jhc2UgX2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGlu
ZSBTeW50aF9NVUxUSV9BREQoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7
fQogICAgICAgIGlubGluZSBTeW50aF9NVUxUSV9BREQoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMp
IDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChTeW50aF9NVUxUSV9BRERfYmFzZTo6X2Ny
ZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9NVUxU
SV9BREQoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpP
YmplY3Qoci5pc1N0cmluZygpPyhTeW50aF9NVUxUSV9BRERfYmFzZTo6X2Zyb21TdHJpbmcoci5z
dHJpbmcoKSkpOihTeW50aF9NVUxUSV9BRERfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVu
Y2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfTVVMVElfQURE
KGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aF9NVUxUSV9B
RERfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAg
ICAgIGlubGluZSBTeW50aF9NVUxUSV9BREQoY29uc3QgU3ludGhfTVVMVElfQUREJiB0YXJnZXQp
IDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQog
ICAgICAgIGlubGluZSBTeW50aF9NVUxUSV9BREQoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFy
dHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTeW50aF9N
VUxUSV9BREQgbnVsbCgpIHtyZXR1cm4gU3ludGhfTVVMVElfQUREKChTeW50aF9NVUxUSV9BRERf
YmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgU3ludGhfTVVMVElfQUREIF9mcm9tX2Jh
c2UoU3ludGhfTVVMVElfQUREX2Jhc2UqIGIpIHtyZXR1cm4gU3ludGhfTVVMVElfQUREKGIpO30K
ICAgICAgICBpbmxpbmUgU3ludGhfTVVMVElfQUREJiBvcGVyYXRvcj0oY29uc3QgU3ludGhfTVVM
VElfQUREJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bv
b2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAg
ICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFy
Z2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlN5
bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3ludGhNb2R1bGUoKl9wb29sKTsgfQog
ICAgICAgIGlubGluZSBTeW50aF9NVUxUSV9BRERfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNo
ZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgQXJ0czo6QXV0b1N1c3Bl
bmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0YXJ0KCk7CiAgICAg
ICAgaW5saW5lIHZvaWQgc3RvcCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUluaXQoKTsK
ICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1TdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0
cmVhbUVuZCgpOwp9OwoKY2xhc3MgU3ludGhfQUREX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRz
OjpTeW50aE1vZHVsZV9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n
IF9JSUQ7CgogICAgICAgIHN0YXRpYyBTeW50aF9BRERfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6
OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3ludGhfQUREIik7CiAgICAgICAgc3RhdGljIFN5
bnRoX0FERF9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAg
IHN0YXRpYyBTeW50aF9BRERfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJl
bmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTeW50aF9BRERfYmFzZSAq
X2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5s
aW5lIFN5bnRoX0FERF9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7
CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
ICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZh
dWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWdu
ZWQgbG9uZyBpaWQpOwoKfTsKCmNsYXNzIFN5bnRoX0FERF9zdHViIDogdmlydHVhbCBwdWJsaWMg
U3ludGhfQUREX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9kdWxlX3N0dWIgewpw
cm90ZWN0ZWQ6CiAgICAgICAgU3ludGhfQUREX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBTeW50
aF9BRERfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsK
Cn07CgpjbGFzcyBTeW50aF9BRERfc2tlbCA6IHZpcnR1YWwgcHVibGljIFN5bnRoX0FERF9iYXNl
LCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoKICAg
ICAgICBmbG9hdCAqaW52YWx1ZTE7CiAgICAgICAgZmxvYXQgKmludmFsdWUyOwogICAgICAgIGZs
b2F0ICpvdXR2YWx1ZTsKCnB1YmxpYzoKICAgICAgICBTeW50aF9BRERfc2tlbCgpOwoKICAgICAg
ICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpz
dHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNv
bnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhv
ZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFy
dHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRz
L21jb3AvcmVmZXJlbmNlLmgiIDEKIyA3MDQgIi4uLy4uL2FydHMvZmxvdy9hcnRzZmxvdy5oIiAy
Cm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3ludGhfQUREIDogcHVibGljIEFydHM6Ok9iamVjdCB7
CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwog
ICAgICAgIFN5bnRoX0FERF9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFN5bnRoX0FERF9i
YXNlICpfbWV0aG9kX2NhbGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUo
KTsKICAgICAgICAgICAgICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIF9jYWNoZT0oU3ludGhfQUREX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoU3ludGhfQURE
X2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90
ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFN5bnRoX0FERChTeW50aF9BRERfYmFzZSogYikgOiBBcnRz
OjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIFN5bnRo
X0FERF9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgU3ludGhfQUREKCkgOiBBcnRz
OjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfQURE
KGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qo
U3ludGhfQUREX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAg
ICBpbmxpbmUgU3ludGhfQUREKGNvbnN0IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAg
ICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oU3ludGhfQUREX2Jhc2U6Ol9mcm9tU3Ry
aW5nKHIuc3RyaW5nKCkpKTooU3ludGhfQUREX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJl
bmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX0FERChjb25z
dCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoU3ludGhfQUREX2Jhc2U6Ol9m
cm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUg
U3ludGhfQUREKGNvbnN0IFN5bnRoX0FERCYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQu
X3Bvb2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgU3ludGhfQURE
KEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQog
ICAgICAgIGlubGluZSBzdGF0aWMgU3ludGhfQUREIG51bGwoKSB7cmV0dXJuIFN5bnRoX0FERCgo
U3ludGhfQUREX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRoX0FERCBfZnJv
bV9iYXNlKFN5bnRoX0FERF9iYXNlKiBiKSB7cmV0dXJuIFN5bnRoX0FERChiKTt9CiAgICAgICAg
aW5saW5lIFN5bnRoX0FERCYgb3BlcmF0b3I9KGNvbnN0IFN5bnRoX0FERCYgdGFyZ2V0KSB7CiAg
ICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAg
ICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdl
dC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAg
ICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
ICAgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNvbnN0IHsg
cmV0dXJuIEFydHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgU3ludGhf
QUREX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30K
CiAgICAgICAgaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgYXV0b1N1c3BlbmQoKTsKICAg
ICAgICBpbmxpbmUgdm9pZCBzdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0b3AoKTsKICAg
ICAgICBpbmxpbmUgdm9pZCBzdHJlYW1Jbml0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFt
U3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1FbmQoKTsKfTsKCmNsYXNzIFN5bnRo
X01VTF9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfYmFzZSB7CnB1Ymxp
YzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3lu
dGhfTVVMX2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6
OlN5bnRoX01VTCIpOwogICAgICAgIHN0YXRpYyBTeW50aF9NVUxfYmFzZSAqX2Zyb21TdHJpbmco
c3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3ludGhfTVVMX2Jhc2UgKl9m
cm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwoK
ICAgICAgICBzdGF0aWMgU3ludGhfTVVMX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0
czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTeW50aF9NVUxfYmFzZSAqX2NvcHko
KSB7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsr
OwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFs
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAg
ICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29u
c3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCn07CgpjbGFzcyBT
eW50aF9NVUxfc3R1YiA6IHZpcnR1YWwgcHVibGljIFN5bnRoX01VTF9iYXNlLCB2aXJ0dWFsIHB1
YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFN5bnRoX01V
TF9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgU3ludGhfTVVMX3N0dWIoQXJ0czo6Q29ubmVjdGlv
biAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7Cgp9OwoKY2xhc3MgU3ludGhfTVVMX3NrZWwg
OiB2aXJ0dWFsIHB1YmxpYyBTeW50aF9NVUxfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3lu
dGhNb2R1bGVfc2tlbCB7CnByb3RlY3RlZDoKCiAgICAgICAgZmxvYXQgKmludmFsdWUxOwogICAg
ICAgIGZsb2F0ICppbnZhbHVlMjsKICAgICAgICBmbG9hdCAqb3V0dmFsdWU7CgpwdWJsaWM6CiAg
ICAgICAgU3ludGhfTVVMX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRl
cmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAg
ICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNl
bmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlz
cGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1l
dGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgODA0
ICIuLi8uLi9hcnRzL2Zsb3cvYXJ0c2Zsb3cuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFN5
bnRoX01VTCA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBB
cnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTeW50aF9NVUxfYmFzZSAqX2Nh
Y2hlOwogICAgICAgIGlubGluZSBTeW50aF9NVUxfYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAg
ICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9v
bC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFN5bnRoX01VTF9iYXNl
ICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN5bnRoX01VTF9iYXNlOjpfSUlEKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVkOgogICAgICAgIGlubGluZSBTeW50
aF9NVUwoU3ludGhfTVVMX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30K
CgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBTeW50aF9NVUxfYmFzZSBfYmFzZV9jbGFzczsKCiAg
ICAgICAgaW5saW5lIFN5bnRoX01VTCgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hl
KDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX01VTChjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykg
OgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KFN5bnRoX01VTF9iYXNlOjpfY3JlYXRlKHMu
c3RyaW5nKCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX01VTChjb25zdCBB
cnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3Ry
aW5nKCk/KFN5bnRoX01VTF9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN5bnRoX01V
TF9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7
fQogICAgICAgIGlubGluZSBTeW50aF9NVUwoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDog
QXJ0czo6T2JqZWN0KFN5bnRoX01VTF9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkp
KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX01VTChjb25zdCBTeW50aF9NVUwm
IHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2Fj
aGUpIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX01VTChBcnRzOjpPYmplY3Q6OlBvb2wmIHApIDog
QXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRo
X01VTCBudWxsKCkge3JldHVybiBTeW50aF9NVUwoKFN5bnRoX01VTF9iYXNlKikwKTt9CiAgICAg
ICAgaW5saW5lIHN0YXRpYyBTeW50aF9NVUwgX2Zyb21fYmFzZShTeW50aF9NVUxfYmFzZSogYikg
e3JldHVybiBTeW50aF9NVUwoYik7fQogICAgICAgIGlubGluZSBTeW50aF9NVUwmIG9wZXJhdG9y
PShjb25zdCBTeW50aF9NVUwmIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09
IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygp
OwogICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBf
Y2FjaGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAg
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0
b3IgQXJ0czo6U3ludGhNb2R1bGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgq
X3Bvb2wpOyB9CiAgICAgICAgaW5saW5lIFN5bnRoX01VTF9iYXNlKiBfYmFzZSgpIHtyZXR1cm4g
X2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRv
U3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsK
ICAgICAgICBpbmxpbmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5p
dCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZv
aWQgc3RyZWFtRW5kKCk7Cn07CgpjbGFzcyBTeW50aF9QTEFZX1dBVl9iYXNlIDogdmlydHVhbCBw
dWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5z
aWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3ludGhfUExBWV9XQVZfYmFzZSAqX2Ny
ZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3ludGhfUExBWV9XQVYi
KTsKICAgICAgICBzdGF0aWMgU3ludGhfUExBWV9XQVZfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpz
dHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3ludGhfUExBWV9XQVZfYmFzZSAqX2Zy
b21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7Cgog
ICAgICAgIHN0YXRpYyBTeW50aF9QTEFZX1dBVl9iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0
IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUgU3ludGhfUExBWV9XQVZfYmFz
ZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAg
X3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAg
ICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25z
dDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRz
T3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAg
ICAgICAgdmlydHVhbCBmbG9hdCBzcGVlZCgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3Bl
ZWQoZmxvYXQgbmV3VmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGZpbGVu
YW1lKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBmaWxlbmFtZShjb25zdCBzdGQ6OnN0cmlu
ZyYgbmV3VmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIGJvb2wgZmluaXNoZWQoKSA9IDA7Cn07
CgpjbGFzcyBTeW50aF9QTEFZX1dBVl9zdHViIDogdmlydHVhbCBwdWJsaWMgU3ludGhfUExBWV9X
QVZfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc3R1YiB7CnByb3RlY3Rl
ZDoKICAgICAgICBTeW50aF9QTEFZX1dBVl9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgU3ludGhf
UExBWV9XQVZfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElE
KTsKCiAgICAgICAgZmxvYXQgc3BlZWQoKTsKICAgICAgICB2b2lkIHNwZWVkKGZsb2F0IG5ld1Zh
bHVlKTsKICAgICAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZSgpOwogICAgICAgIHZvaWQgZmlsZW5h
bWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKTsKICAgICAgICBib29sIGZpbmlzaGVkKCk7
Cn07CgpjbGFzcyBTeW50aF9QTEFZX1dBVl9za2VsIDogdmlydHVhbCBwdWJsaWMgU3ludGhfUExB
WV9XQVZfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc2tlbCB7CnByb3Rl
Y3RlZDoKCiAgICAgICAgZmxvYXQgKmxlZnQ7CiAgICAgICAgZmxvYXQgKnJpZ2h0OwoKcHJvdGVj
dGVkOgoKICAgICAgICBpbmxpbmUgdm9pZCBzcGVlZF9jaGFuZ2VkKGZsb2F0IG5ld1ZhbHVlKSB7
CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJzcGVlZF9jaGFuZ2VkIixuZXdWYWx1ZSk7
CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGZpbGVuYW1lX2NoYW5nZWQoY29uc3Qgc3Rk
OjpzdHJpbmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJmaWxl
bmFtZV9jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGZp
bmlzaGVkX2NoYW5nZWQoYm9vbCBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hh
bmdlZCgiZmluaXNoZWRfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAg
ICAgICBTeW50aF9QTEFZX1dBVl9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBf
aW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgp
OwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVy
ZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lk
IGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9u
ZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQoj
IDkyNSAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFz
cyBTeW50aF9QTEFZX1dBViA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAg
IHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTeW50aF9QTEFZ
X1dBVl9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFN5bnRoX1BMQVlfV0FWX2Jhc2UgKl9t
ZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAg
ICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2Nh
Y2hlPShTeW50aF9QTEFZX1dBVl9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN5bnRoX1BMQVlf
V0FWX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpw
cm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFN5bnRoX1BMQVlfV0FWKFN5bnRoX1BMQVlfV0FWX2Jh
c2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAg
dHlwZWRlZiBTeW50aF9QTEFZX1dBVl9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUg
U3ludGhfUExBWV9XQVYoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQog
ICAgICAgIGlubGluZSBTeW50aF9QTEFZX1dBVihjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgog
ICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KFN5bnRoX1BMQVlfV0FWX2Jhc2U6Ol9jcmVhdGUo
cy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfUExBWV9XQVYo
Y29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qo
ci5pc1N0cmluZygpPyhTeW50aF9QTEFZX1dBVl9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygp
KSk6KFN5bnRoX1BMQVlfV0FWX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1
ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX1BMQVlfV0FWKGNvbnN0IEFy
dHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aF9QTEFZX1dBVl9iYXNlOjpf
ZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l
IFN5bnRoX1BMQVlfV0FWKGNvbnN0IFN5bnRoX1BMQVlfV0FWJiB0YXJnZXQpIDogQXJ0czo6T2Jq
ZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGlu
ZSBTeW50aF9QTEFZX1dBVihBcnRzOjpPYmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHAp
LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRoX1BMQVlfV0FWIG51bGwo
KSB7cmV0dXJuIFN5bnRoX1BMQVlfV0FWKChTeW50aF9QTEFZX1dBVl9iYXNlKikwKTt9CiAgICAg
ICAgaW5saW5lIHN0YXRpYyBTeW50aF9QTEFZX1dBViBfZnJvbV9iYXNlKFN5bnRoX1BMQVlfV0FW
X2Jhc2UqIGIpIHtyZXR1cm4gU3ludGhfUExBWV9XQVYoYik7fQogICAgICAgIGlubGluZSBTeW50
aF9QTEFZX1dBViYgb3BlcmF0b3I9KGNvbnN0IFN5bnRoX1BMQVlfV0FWJiB0YXJnZXQpIHsKICAg
ICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAg
ICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0
Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAg
ICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyBy
ZXR1cm4gQXJ0czo6U3ludGhNb2R1bGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTeW50aF9Q
TEFZX1dBVl9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwo
KTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCk7
CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdG9wKCk7
CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5pdCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0
cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtRW5kKCk7CiAgICAgICAgaW5s
aW5lIGZsb2F0IHNwZWVkKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3BlZWQoZmxvYXQgX25ld1Zh
bHVlKTsKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgZmlsZW5hbWUoKTsKICAgICAgICBpbmxp
bmUgdm9pZCBmaWxlbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKTsKICAgICAgICBp
bmxpbmUgYm9vbCBmaW5pc2hlZCgpOwp9OwoKY2xhc3MgU3ludGhfQlVTX1VQTElOS19iYXNlIDog
dmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfYmFzZSB7CnB1YmxpYzoKICAgICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3ludGhfQlVTX1VQTElO
S19iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTeW50
aF9CVVNfVVBMSU5LIik7CiAgICAgICAgc3RhdGljIFN5bnRoX0JVU19VUExJTktfYmFzZSAqX2Zy
b21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3ludGhfQlVT
X1VQTElOS19iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBi
b29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFN5bnRoX0JVU19VUExJTktfYmFzZSAqX2Zy
b21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5l
IFN5bnRoX0JVU19VUExJTktfYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZvaWQp
IDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBf
ZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6
c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVu
c2lnbmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBidXNuYW1lKCkg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBidXNuYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdW
YWx1ZSkgPSAwOwp9OwoKY2xhc3MgU3ludGhfQlVTX1VQTElOS19zdHViIDogdmlydHVhbCBwdWJs
aWMgU3ludGhfQlVTX1VQTElOS19iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVs
ZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFN5bnRoX0JVU19VUExJTktfc3R1YigpOwoKcHVi
bGljOgogICAgICAgIFN5bnRoX0JVU19VUExJTktfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25u
ZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgc3RkOjpzdHJpbmcgYnVzbmFtZSgpOwog
ICAgICAgIHZvaWQgYnVzbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpOwp9OwoKY2xh
c3MgU3ludGhfQlVTX1VQTElOS19za2VsIDogdmlydHVhbCBwdWJsaWMgU3ludGhfQlVTX1VQTElO
S19iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVk
OgoKICAgICAgICBmbG9hdCAqbGVmdDsKICAgICAgICBmbG9hdCAqcmlnaHQ7Cgpwcm90ZWN0ZWQ6
CgogICAgICAgIGlubGluZSB2b2lkIGJ1c25hbWVfY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYg
bmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoImJ1c25hbWVfY2hhbmdl
ZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAgICAgICBTeW50aF9CVVNfVVBMSU5L
X3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgp
OwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXND
b21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAg
dm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVm
ZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07
CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMTAzOSAiLi4vLi4vYXJ0cy9m
bG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTeW50aF9CVVNfVVBMSU5L
IDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9i
amVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFN5bnRoX0JVU19VUExJTktfYmFzZSAqX2Nh
Y2hlOwogICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBMSU5LX2Jhc2UgKl9tZXRob2RfY2FsbCgp
IHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAg
aWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShTeW50aF9C
VVNfVVBMSU5LX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoU3ludGhfQlVTX1VQTElOS19iYXNl
OjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVk
OgogICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBMSU5LKFN5bnRoX0JVU19VUExJTktfYmFzZSog
YikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBl
ZGVmIFN5bnRoX0JVU19VUExJTktfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN5
bnRoX0JVU19VUExJTksoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQog
ICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBMSU5LKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6
CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoU3ludGhfQlVTX1VQTElOS19iYXNlOjpfY3Jl
YXRlKHMuc3RyaW5nKCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX0JVU19V
UExJTksoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpP
YmplY3Qoci5pc1N0cmluZygpPyhTeW50aF9CVVNfVVBMSU5LX2Jhc2U6Ol9mcm9tU3RyaW5nKHIu
c3RyaW5nKCkpKTooU3ludGhfQlVTX1VQTElOS19iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVy
ZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBM
SU5LKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aF9CVVNf
VVBMSU5LX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30K
ICAgICAgICBpbmxpbmUgU3ludGhfQlVTX1VQTElOSyhjb25zdCBTeW50aF9CVVNfVVBMSU5LJiB0
YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hl
KSB7fQogICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBMSU5LKEFydHM6Ok9iamVjdDo6UG9vbCYg
cCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMg
U3ludGhfQlVTX1VQTElOSyBudWxsKCkge3JldHVybiBTeW50aF9CVVNfVVBMSU5LKChTeW50aF9C
VVNfVVBMSU5LX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRoX0JVU19VUExJ
TksgX2Zyb21fYmFzZShTeW50aF9CVVNfVVBMSU5LX2Jhc2UqIGIpIHtyZXR1cm4gU3ludGhfQlVT
X1VQTElOSyhiKTt9CiAgICAgICAgaW5saW5lIFN5bnRoX0JVU19VUExJTksmIG9wZXJhdG9yPShj
b25zdCBTeW50aF9CVVNfVVBMSU5LJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9v
bCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5E
ZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAg
ICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsK
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9w
ZXJhdG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3ludGhNb2R1
bGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBMSU5LX2Jhc2UqIF9iYXNl
KCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5l
IEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9p
ZCBzdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9p
ZCBzdHJlYW1Jbml0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAg
ICBpbmxpbmUgdm9pZCBzdHJlYW1FbmQoKTsKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgYnVz
bmFtZSgpOwogICAgICAgIGlubGluZSB2b2lkIGJ1c25hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIF9u
ZXdWYWx1ZSk7Cn07CgpjbGFzcyBTeW50aF9CVVNfRE9XTkxJTktfYmFzZSA6IHZpcnR1YWwgcHVi
bGljIEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFN5bnRoX0JVU19ET1dOTElOS19iYXNlICpf
Y3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTeW50aF9CVVNfRE9X
TkxJTksiKTsKICAgICAgICBzdGF0aWMgU3ludGhfQlVTX0RPV05MSU5LX2Jhc2UgKl9mcm9tU3Ry
aW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFN5bnRoX0JVU19ET1dO
TElOS19iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29s
IG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFN5bnRoX0JVU19ET1dOTElOS19iYXNlICpfZnJv
bUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUg
U3ludGhfQlVTX0RPV05MSU5LX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lk
KSAwKTsKICAgICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
X2RlZmF1bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1
bnNpZ25lZCBsb25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgYnVzbmFtZSgp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgYnVzbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3
VmFsdWUpID0gMDsKfTsKCmNsYXNzIFN5bnRoX0JVU19ET1dOTElOS19zdHViIDogdmlydHVhbCBw
dWJsaWMgU3ludGhfQlVTX0RPV05MSU5LX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRo
TW9kdWxlX3N0dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgU3ludGhfQlVTX0RPV05MSU5LX3N0dWIo
KTsKCnB1YmxpYzoKICAgICAgICBTeW50aF9CVVNfRE9XTkxJTktfc3R1YihBcnRzOjpDb25uZWN0
aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgc3RkOjpzdHJpbmcgYnVz
bmFtZSgpOwogICAgICAgIHZvaWQgYnVzbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUp
Owp9OwoKY2xhc3MgU3ludGhfQlVTX0RPV05MSU5LX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTeW50
aF9CVVNfRE9XTkxJTktfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc2tl
bCB7CnByb3RlY3RlZDoKCiAgICAgICAgZmxvYXQgKmxlZnQ7CiAgICAgICAgZmxvYXQgKnJpZ2h0
OwoKcHJvdGVjdGVkOgoKICAgICAgICBpbmxpbmUgdm9pZCBidXNuYW1lX2NoYW5nZWQoY29uc3Qg
c3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJi
dXNuYW1lX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CgpwdWJsaWM6CiAgICAgICAgU3lu
dGhfQlVTX0RPV05MSU5LX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRl
cmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAg
ICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNl
bmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlz
cGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1l
dGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMTE1
MCAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBT
eW50aF9CVVNfRE9XTkxJTksgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAg
ICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3ludGhfQlVT
X0RPV05MSU5LX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgU3ludGhfQlVTX0RPV05MSU5L
X2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0
ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgX2NhY2hlPShTeW50aF9CVVNfRE9XTkxJTktfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2Fz
dChTeW50aF9CVVNfRE9XTkxJTktfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2Nh
Y2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgU3ludGhfQlVTX0RPV05M
SU5LKFN5bnRoX0JVU19ET1dOTElOS19iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hl
KDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgU3ludGhfQlVTX0RPV05MSU5LX2Jhc2Ug
X2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGluZSBTeW50aF9CVVNfRE9XTkxJTksoKSA6IEFydHM6
Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9CVVNf
RE9XTkxJTksoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6
Ok9iamVjdChTeW50aF9CVVNfRE9XTkxJTktfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9j
YWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9CVVNfRE9XTkxJTksoY29uc3QgQXJ0czo6
UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygp
PyhTeW50aF9CVVNfRE9XTkxJTktfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTeW50
aF9CVVNfRE9XTkxJTktfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkp
LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfQlVTX0RPV05MSU5LKGNvbnN0IEFy
dHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aF9CVVNfRE9XTkxJTktfYmFz
ZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlu
bGluZSBTeW50aF9CVVNfRE9XTkxJTksoY29uc3QgU3ludGhfQlVTX0RPV05MSU5LJiB0YXJnZXQp
IDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQog
ICAgICAgIGlubGluZSBTeW50aF9CVVNfRE9XTkxJTksoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6
IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTeW50
aF9CVVNfRE9XTkxJTksgbnVsbCgpIHtyZXR1cm4gU3ludGhfQlVTX0RPV05MSU5LKChTeW50aF9C
VVNfRE9XTkxJTktfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgU3ludGhfQlVTX0RP
V05MSU5LIF9mcm9tX2Jhc2UoU3ludGhfQlVTX0RPV05MSU5LX2Jhc2UqIGIpIHtyZXR1cm4gU3lu
dGhfQlVTX0RPV05MSU5LKGIpO30KICAgICAgICBpbmxpbmUgU3ludGhfQlVTX0RPV05MSU5LJiBv
cGVyYXRvcj0oY29uc3QgU3ludGhfQlVTX0RPV05MSU5LJiB0YXJnZXQpIHsKICAgICAgICAgICAg
ICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAg
ICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwog
ICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9w
b29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAg
ICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0
czo6U3ludGhNb2R1bGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTeW50aF9CVVNfRE9XTkxJ
TktfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoK
ICAgICAgICBpbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwogICAg
ICAgIGlubGluZSB2b2lkIHN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RvcCgpOwogICAg
ICAgIGlubGluZSB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1T
dGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUVuZCgpOwogICAgICAgIGlubGluZSBz
dGQ6OnN0cmluZyBidXNuYW1lKCk7CiAgICAgICAgaW5saW5lIHZvaWQgYnVzbmFtZShjb25zdCBz
dGQ6OnN0cmluZyYgX25ld1ZhbHVlKTsKfTsKCmNsYXNzIEJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2Ug
OiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9iYXNlIHsKcHVibGljOgogICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBCeXRlU3RyZWFtVG9B
dWRpb19iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpC
eXRlU3RyZWFtVG9BdWRpbyIpOwogICAgICAgIHN0YXRpYyBCeXRlU3RyZWFtVG9BdWRpb19iYXNl
ICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBCeXRl
U3RyZWFtVG9BdWRpb19iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2Ug
cmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIEJ5dGVTdHJlYW1Ub0F1ZGlvX2Jh
c2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAg
IGlubGluZSBCeXRlU3RyZWFtVG9BdWRpb19iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAg
ICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpz
dHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAq
X2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIGxvbmcgc2FtcGxpbmdS
YXRlKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzYW1wbGluZ1JhdGUobG9uZyBuZXdWYWx1
ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgbG9uZyBjaGFubmVscygpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgY2hhbm5lbHMobG9uZyBuZXdWYWx1ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgbG9u
ZyBiaXRzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBiaXRzKGxvbmcgbmV3VmFsdWUpID0g
MDsKICAgICAgICB2aXJ0dWFsIGJvb2wgcnVubmluZygpID0gMDsKfTsKCmNsYXNzIEJ5dGVTdHJl
YW1Ub0F1ZGlvX3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBCeXRlU3RyZWFtVG9BdWRpb19iYXNlLCB2
aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAg
IEJ5dGVTdHJlYW1Ub0F1ZGlvX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBCeXRlU3RyZWFtVG9B
dWRpb19zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoK
ICAgICAgICBsb25nIHNhbXBsaW5nUmF0ZSgpOwogICAgICAgIHZvaWQgc2FtcGxpbmdSYXRlKGxv
bmcgbmV3VmFsdWUpOwogICAgICAgIGxvbmcgY2hhbm5lbHMoKTsKICAgICAgICB2b2lkIGNoYW5u
ZWxzKGxvbmcgbmV3VmFsdWUpOwogICAgICAgIGxvbmcgYml0cygpOwogICAgICAgIHZvaWQgYml0
cyhsb25nIG5ld1ZhbHVlKTsKICAgICAgICBib29sIHJ1bm5pbmcoKTsKfTsKCmNsYXNzIEJ5dGVT
dHJlYW1Ub0F1ZGlvX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBCeXRlU3RyZWFtVG9BdWRpb19iYXNl
LCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoKICAg
ICAgICBBcnRzOjpCeXRlQXN5bmNTdHJlYW0gaW5kYXRhOwogICAgICAgIGZsb2F0ICpsZWZ0Owog
ICAgICAgIGZsb2F0ICpyaWdodDsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzX2luZGF0
YShBcnRzOjpEYXRhUGFja2V0PEFydHM6Om1jb3BieXRlPiAqKSA9IDA7Cgpwcm90ZWN0ZWQ6Cgog
ICAgICAgIGlubGluZSB2b2lkIHNhbXBsaW5nUmF0ZV9jaGFuZ2VkKGxvbmcgbmV3VmFsdWUpIHsK
ICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoInNhbXBsaW5nUmF0ZV9jaGFuZ2VkIixuZXdW
YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGNoYW5uZWxzX2NoYW5nZWQobG9u
ZyBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgiY2hhbm5lbHNfY2hh
bmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBiaXRzX2NoYW5n
ZWQobG9uZyBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgiYml0c19j
aGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIHJ1bm5pbmdf
Y2hhbmdlZChib29sIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJy
dW5uaW5nX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CgpwdWJsaWM6CiAgICAgICAgQnl0
ZVN0cmVhbVRvQXVkaW9fc2tlbCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVy
ZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAg
ICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2Vu
YW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNw
YXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0
aG9kSUQpOwogICAgICAgIHZvaWQgbm90aWZ5KGNvbnN0IEFydHM6Ok5vdGlmaWNhdGlvbiYgbm90
aWZpY2F0aW9uKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMg
MTI4NSAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFz
cyBCeXRlU3RyZWFtVG9BdWRpbyA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAg
ICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBCeXRlU3Ry
ZWFtVG9BdWRpb19iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIEJ5dGVTdHJlYW1Ub0F1ZGlv
X2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0
ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgX2NhY2hlPShCeXRlU3RyZWFtVG9BdWRpb19iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0
KEJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAo
KHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNo
ZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIEJ5dGVTdHJlYW1Ub0F1ZGlv
KEJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkg
e30KCgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBCeXRlU3RyZWFtVG9BdWRpb19iYXNlIF9iYXNl
X2NsYXNzOwoKICAgICAgICBpbmxpbmUgQnl0ZVN0cmVhbVRvQXVkaW8oKSA6IEFydHM6Ok9iamVj
dChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBCeXRlU3RyZWFtVG9BdWRp
byhjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0
KEJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkg
e30KICAgICAgICBpbmxpbmUgQnl0ZVN0cmVhbVRvQXVkaW8oY29uc3QgQXJ0czo6UmVmZXJlbmNl
ICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhCeXRlU3Ry
ZWFtVG9BdWRpb19iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KEJ5dGVTdHJlYW1Ub0F1
ZGlvX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDAp
IHt9CiAgICAgICAgaW5saW5lIEJ5dGVTdHJlYW1Ub0F1ZGlvKGNvbnN0IEFydHM6OkR5bmFtaWND
YXN0JiBjKSA6IEFydHM6Ok9iamVjdChCeXRlU3RyZWFtVG9BdWRpb19iYXNlOjpfZnJvbUR5bmFt
aWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEJ5dGVTdHJl
YW1Ub0F1ZGlvKGNvbnN0IEJ5dGVTdHJlYW1Ub0F1ZGlvJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0
KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBC
eXRlU3RyZWFtVG9BdWRpbyhBcnRzOjpPYmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHAp
LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIEJ5dGVTdHJlYW1Ub0F1ZGlvIG51
bGwoKSB7cmV0dXJuIEJ5dGVTdHJlYW1Ub0F1ZGlvKChCeXRlU3RyZWFtVG9BdWRpb19iYXNlKikw
KTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBCeXRlU3RyZWFtVG9BdWRpbyBfZnJvbV9iYXNlKEJ5
dGVTdHJlYW1Ub0F1ZGlvX2Jhc2UqIGIpIHtyZXR1cm4gQnl0ZVN0cmVhbVRvQXVkaW8oYik7fQog
ICAgICAgIGlubGluZSBCeXRlU3RyZWFtVG9BdWRpbyYgb3BlcmF0b3I9KGNvbnN0IEJ5dGVTdHJl
YW1Ub0F1ZGlvJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQu
X3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAg
ICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0g
dGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6
OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3ludGhNb2R1bGUoKl9wb29sKTsg
fQogICAgICAgIGlubGluZSBCeXRlU3RyZWFtVG9BdWRpb19iYXNlKiBfYmFzZSgpIHtyZXR1cm4g
X2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRv
U3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsK
ICAgICAgICBpbmxpbmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5p
dCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZv
aWQgc3RyZWFtRW5kKCk7CiAgICAgICAgaW5saW5lIGxvbmcgc2FtcGxpbmdSYXRlKCk7CiAgICAg
ICAgaW5saW5lIHZvaWQgc2FtcGxpbmdSYXRlKGxvbmcgX25ld1ZhbHVlKTsKICAgICAgICBpbmxp
bmUgbG9uZyBjaGFubmVscygpOwogICAgICAgIGlubGluZSB2b2lkIGNoYW5uZWxzKGxvbmcgX25l
d1ZhbHVlKTsKICAgICAgICBpbmxpbmUgbG9uZyBiaXRzKCk7CiAgICAgICAgaW5saW5lIHZvaWQg
Yml0cyhsb25nIF9uZXdWYWx1ZSk7CiAgICAgICAgaW5saW5lIGJvb2wgcnVubmluZygpOwp9OwoK
Y2xhc3MgU3RlcmVvRWZmZWN0X2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVs
ZV9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAg
ICAgIHN0YXRpYyBTdGVyZW9FZmZlY3RfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYg
c3ViQ2xhc3MgPSAiQXJ0czo6U3RlcmVvRWZmZWN0Iik7CiAgICAgICAgc3RhdGljIFN0ZXJlb0Vm
ZmVjdF9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0
YXRpYyBTdGVyZW9FZmZlY3RfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJl
bmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTdGVyZW9FZmZlY3RfYmFz
ZSAqX2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAg
aW5saW5lIFN0ZXJlb0VmZmVjdF9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9p
ZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3Qo
dW5zaWduZWQgbG9uZyBpaWQpOwoKfTsKCmNsYXNzIFN0ZXJlb0VmZmVjdF9zdHViIDogdmlydHVh
bCBwdWJsaWMgU3RlcmVvRWZmZWN0X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9k
dWxlX3N0dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgU3RlcmVvRWZmZWN0X3N0dWIoKTsKCnB1Ymxp
YzoKICAgICAgICBTdGVyZW9FZmZlY3Rfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9u
LCBsb25nIG9iamVjdElEKTsKCn07CgpjbGFzcyBTdGVyZW9FZmZlY3Rfc2tlbCA6IHZpcnR1YWwg
cHVibGljIFN0ZXJlb0VmZmVjdF9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVs
ZV9za2VsIHsKcHJvdGVjdGVkOgoKICAgICAgICBmbG9hdCAqaW5sZWZ0OwogICAgICAgIGZsb2F0
ICppbnJpZ2h0OwogICAgICAgIGZsb2F0ICpvdXRsZWZ0OwogICAgICAgIGZsb2F0ICpvdXRyaWdo
dDsKCnB1YmxpYzoKICAgICAgICBTdGVyZW9FZmZlY3Rfc2tlbCgpOwoKICAgICAgICBzdGF0aWMg
c3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2lu
dGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6
c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7
CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZl
ciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVm
ZXJlbmNlLmgiIDEKIyAxMzkzICIuLi8uLi9hcnRzL2Zsb3cvYXJ0c2Zsb3cuaCIgMgpuYW1lc3Bh
Y2UgQXJ0cyB7CmNsYXNzIFN0ZXJlb0VmZmVjdCA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2
YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAg
ICBTdGVyZW9FZmZlY3RfYmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3Rf
YmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRl
KCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICBfY2FjaGU9KFN0ZXJlb0VmZmVjdF9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN0ZXJl
b0VmZmVjdF9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAg
fQoKcHJvdGVjdGVkOgogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3QoU3RlcmVvRWZmZWN0X2Jh
c2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAg
dHlwZWRlZiBTdGVyZW9FZmZlY3RfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN0
ZXJlb0VmZmVjdCgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAg
ICAgaW5saW5lIFN0ZXJlb0VmZmVjdChjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAg
ICAgICAgICAgQXJ0czo6T2JqZWN0KFN0ZXJlb0VmZmVjdF9iYXNlOjpfY3JlYXRlKHMuc3RyaW5n
KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdChjb25zdCBBcnRz
OjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5n
KCk/KFN0ZXJlb0VmZmVjdF9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN0ZXJlb0Vm
ZmVjdF9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgw
KSB7fQogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3QoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3Qm
IGMpIDogQXJ0czo6T2JqZWN0KFN0ZXJlb0VmZmVjdF9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMu
b2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdChjb25z
dCBTdGVyZW9FZmZlY3QmIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2Nh
Y2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdChBcnRzOjpP
YmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBp
bmxpbmUgc3RhdGljIFN0ZXJlb0VmZmVjdCBudWxsKCkge3JldHVybiBTdGVyZW9FZmZlY3QoKFN0
ZXJlb0VmZmVjdF9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTdGVyZW9FZmZlY3Qg
X2Zyb21fYmFzZShTdGVyZW9FZmZlY3RfYmFzZSogYikge3JldHVybiBTdGVyZW9FZmZlY3QoYik7
fQogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3QmIG9wZXJhdG9yPShjb25zdCBTdGVyZW9FZmZl
Y3QmIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkg
cmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAg
ICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQu
X2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6U3ludGhN
b2R1bGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgqX3Bvb2wpOyB9CiAgICAg
ICAgaW5saW5lIFN0ZXJlb0VmZmVjdF9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNo
ZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRl
IGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsKICAgICAgICBpbmxp
bmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5pdCgpOwogICAgICAg
IGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtRW5k
KCk7Cn07CgpjbGFzcyBTdGVyZW9Wb2x1bWVDb250cm9sX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBB
cnRzOjpTdGVyZW9FZmZlY3RfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQg
bG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlICpfY3Jl
YXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTdGVyZW9Wb2x1bWVDb250
cm9sIik7CiAgICAgICAgc3RhdGljIFN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZSAqX2Zyb21TdHJp
bmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3RlcmVvVm9sdW1lQ29u
dHJvbF9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29s
IG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZSAqX2Zy
b21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5l
IFN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZv
aWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
PiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0
KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3Rvcigp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2NhbGVGYWN0b3IoZmxvYXQgbmV3VmFsdWUpID0g
MDsKICAgICAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRWb2x1bWVMZWZ0KCkgPSAwOwogICAgICAg
IHZpcnR1YWwgZmxvYXQgY3VycmVudFZvbHVtZVJpZ2h0KCkgPSAwOwp9OwoKY2xhc3MgU3RlcmVv
Vm9sdW1lQ29udHJvbF9zdHViIDogdmlydHVhbCBwdWJsaWMgU3RlcmVvVm9sdW1lQ29udHJvbF9i
YXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTdGVyZW9FZmZlY3Rfc3R1YiB7CnByb3RlY3RlZDoK
ICAgICAgICBTdGVyZW9Wb2x1bWVDb250cm9sX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBTdGVy
ZW9Wb2x1bWVDb250cm9sX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBv
YmplY3RJRCk7CgogICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yKCk7CiAgICAgICAgdm9pZCBzY2Fs
ZUZhY3RvcihmbG9hdCBuZXdWYWx1ZSk7CiAgICAgICAgZmxvYXQgY3VycmVudFZvbHVtZUxlZnQo
KTsKICAgICAgICBmbG9hdCBjdXJyZW50Vm9sdW1lUmlnaHQoKTsKfTsKCmNsYXNzIFN0ZXJlb1Zv
bHVtZUNvbnRyb2xfc2tlbCA6IHZpcnR1YWwgcHVibGljIFN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFz
ZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3RlcmVvRWZmZWN0X3NrZWwgewpwcm90ZWN0ZWQ6Cgog
ICAgICAgIGlubGluZSB2b2lkIHNjYWxlRmFjdG9yX2NoYW5nZWQoZmxvYXQgbmV3VmFsdWUpIHsK
ICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoInNjYWxlRmFjdG9yX2NoYW5nZWQiLG5ld1Zh
bHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgY3VycmVudFZvbHVtZUxlZnRfY2hh
bmdlZChmbG9hdCBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgiY3Vy
cmVudFZvbHVtZUxlZnRfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxp
bmUgdm9pZCBjdXJyZW50Vm9sdW1lUmlnaHRfY2hhbmdlZChmbG9hdCBuZXdWYWx1ZSkgewogICAg
ICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgiY3VycmVudFZvbHVtZVJpZ2h0X2NoYW5nZWQiLG5l
d1ZhbHVlKTsKICAgICAgICB9CgpwdWJsaWM6CiAgICAgICAgU3RlcmVvVm9sdW1lQ29udHJvbF9z
a2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsK
ICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29t
cGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZv
aWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZl
ciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9Owoj
IDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDE1MDcgIi4uLy4uL2FydHMvZmxv
dy9hcnRzZmxvdy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3RlcmVvVm9sdW1lQ29udHJv
bCA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpP
YmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTdGVyZW9Wb2x1bWVDb250cm9sX2Jhc2Ug
Kl9jYWNoZTsKICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlICpfbWV0aG9k
X2NhbGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAg
ICAgICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0o
U3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN0ZXJlb1ZvbHVt
ZUNvbnRyb2xfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAg
IH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJvbChTdGVyZW9W
b2x1bWVDb250cm9sX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpw
dWJsaWM6CiAgICAgICAgdHlwZWRlZiBTdGVyZW9Wb2x1bWVDb250cm9sX2Jhc2UgX2Jhc2VfY2xh
c3M7CgogICAgICAgIGlubGluZSBTdGVyZW9Wb2x1bWVDb250cm9sKCkgOiBBcnRzOjpPYmplY3Qo
X0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJv
bChjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0
KFN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgw
KSB7fQogICAgICAgIGlubGluZSBTdGVyZW9Wb2x1bWVDb250cm9sKGNvbnN0IEFydHM6OlJlZmVy
ZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oU3Rl
cmVvVm9sdW1lQ29udHJvbF9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN0ZXJlb1Zv
bHVtZUNvbnRyb2xfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBf
Y2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJvbChjb25zdCBBcnRz
OjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoU3RlcmVvVm9sdW1lQ29udHJvbF9iYXNl
OjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5s
aW5lIFN0ZXJlb1ZvbHVtZUNvbnRyb2woY29uc3QgU3RlcmVvVm9sdW1lQ29udHJvbCYgdGFyZ2V0
KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkge30K
ICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJvbChBcnRzOjpPYmplY3Q6OlBvb2wmIHAp
IDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIFN0
ZXJlb1ZvbHVtZUNvbnRyb2wgbnVsbCgpIHtyZXR1cm4gU3RlcmVvVm9sdW1lQ29udHJvbCgoU3Rl
cmVvVm9sdW1lQ29udHJvbF9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTdGVyZW9W
b2x1bWVDb250cm9sIF9mcm9tX2Jhc2UoU3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlKiBiKSB7cmV0
dXJuIFN0ZXJlb1ZvbHVtZUNvbnRyb2woYik7fQogICAgICAgIGlubGluZSBTdGVyZW9Wb2x1bWVD
b250cm9sJiBvcGVyYXRvcj0oY29uc3QgU3RlcmVvVm9sdW1lQ29udHJvbCYgdGFyZ2V0KSB7CiAg
ICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAg
ICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdl
dC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAg
ICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
ICAgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTdGVyZW9FZmZlY3QoKSBjb25zdCB7
IHJldHVybiBBcnRzOjpTdGVyZW9FZmZlY3QoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBvcGVy
YXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9kdWxl
KCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlKiBfYmFz
ZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGlu
ZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZv
aWQgc3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZv
aWQgc3RyZWFtSW5pdCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAg
ICAgaW5saW5lIHZvaWQgc3RyZWFtRW5kKCk7CiAgICAgICAgaW5saW5lIGZsb2F0IHNjYWxlRmFj
dG9yKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc2NhbGVGYWN0b3IoZmxvYXQgX25ld1ZhbHVlKTsK
ICAgICAgICBpbmxpbmUgZmxvYXQgY3VycmVudFZvbHVtZUxlZnQoKTsKICAgICAgICBpbmxpbmUg
ZmxvYXQgY3VycmVudFZvbHVtZVJpZ2h0KCk7Cn07CgpjbGFzcyBTdGVyZW9GRlRTY29wZV9iYXNl
IDogdmlydHVhbCBwdWJsaWMgQXJ0czo6U3RlcmVvRWZmZWN0X2Jhc2UgewpwdWJsaWM6CiAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFN0ZXJlb0ZGVFNj
b3BlX2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OlN0
ZXJlb0ZGVFNjb3BlIik7CiAgICAgICAgc3RhdGljIFN0ZXJlb0ZGVFNjb3BlX2Jhc2UgKl9mcm9t
U3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFN0ZXJlb0ZGVFNj
b3BlX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wg
bmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMgU3RlcmVvRkZUU2NvcGVfYmFzZSAqX2Zyb21EeW5h
bWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5lIFN0ZXJl
b0ZGVFNjb3BlX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAg
ICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQ
b3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
X2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBs
b25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8ZmxvYXQ+ICogc2NvcGUoKSA9
IDA7Cn07CgpjbGFzcyBTdGVyZW9GRlRTY29wZV9zdHViIDogdmlydHVhbCBwdWJsaWMgU3RlcmVv
RkZUU2NvcGVfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3RlcmVvRWZmZWN0X3N0dWIgewpw
cm90ZWN0ZWQ6CiAgICAgICAgU3RlcmVvRkZUU2NvcGVfc3R1YigpOwoKcHVibGljOgogICAgICAg
IFN0ZXJlb0ZGVFNjb3BlX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBv
YmplY3RJRCk7CgogICAgICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiAqIHNjb3BlKCk7Cn07CgpjbGFz
cyBTdGVyZW9GRlRTY29wZV9za2VsIDogdmlydHVhbCBwdWJsaWMgU3RlcmVvRkZUU2NvcGVfYmFz
ZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3RlcmVvRWZmZWN0X3NrZWwgewpwcm90ZWN0ZWQ6Cgog
ICAgICAgIGlubGluZSB2b2lkIHNjb3BlX2NoYW5nZWQoY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQ+
JiBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgic2NvcGVfY2hhbmdl
ZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAgICAgICBTdGVyZW9GRlRTY29wZV9z
a2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsK
ICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29t
cGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZv
aWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZl
ciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9Owoj
IDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDE2MTQgIi4uLy4uL2FydHMvZmxv
dy9hcnRzZmxvdy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3RlcmVvRkZUU2NvcGUgOiBw
dWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0
X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3RlcmVvRkZUU2NvcGVfYmFzZSAqX2NhY2hlOwog
ICAgICAgIGlubGluZSBTdGVyZW9GRlRTY29wZV9iYXNlICpfbWV0aG9kX2NhbGwoKSB7CiAgICAg
ICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIGlmKF9wb29s
LT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oU3RlcmVvRkZUU2NvcGVf
YmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChTdGVyZW9GRlRTY29wZV9iYXNlOjpfSUlEKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVkOgogICAgICAgIGlu
bGluZSBTdGVyZW9GRlRTY29wZShTdGVyZW9GRlRTY29wZV9iYXNlKiBiKSA6IEFydHM6Ok9iamVj
dChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgU3RlcmVvRkZUU2Nv
cGVfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN0ZXJlb0ZGVFNjb3BlKCkgOiBB
cnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3RlcmVv
RkZUU2NvcGUoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6
Ok9iamVjdChTdGVyZW9GRlRTY29wZV9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwgX2NhY2hl
KDApIHt9CiAgICAgICAgaW5saW5lIFN0ZXJlb0ZGVFNjb3BlKGNvbnN0IEFydHM6OlJlZmVyZW5j
ZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oU3RlcmVv
RkZUU2NvcGVfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTdGVyZW9GRlRTY29wZV9i
YXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQog
ICAgICAgIGlubGluZSBTdGVyZW9GRlRTY29wZShjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYgYykg
OiBBcnRzOjpPYmplY3QoU3RlcmVvRkZUU2NvcGVfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9i
amVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTdGVyZW9GRlRTY29wZShjb25z
dCBTdGVyZW9GRlRTY29wZSYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBf
Y2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgU3RlcmVvRkZUU2NvcGUoQXJ0
czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAg
ICAgaW5saW5lIHN0YXRpYyBTdGVyZW9GRlRTY29wZSBudWxsKCkge3JldHVybiBTdGVyZW9GRlRT
Y29wZSgoU3RlcmVvRkZUU2NvcGVfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgU3Rl
cmVvRkZUU2NvcGUgX2Zyb21fYmFzZShTdGVyZW9GRlRTY29wZV9iYXNlKiBiKSB7cmV0dXJuIFN0
ZXJlb0ZGVFNjb3BlKGIpO30KICAgICAgICBpbmxpbmUgU3RlcmVvRkZUU2NvcGUmIG9wZXJhdG9y
PShjb25zdCBTdGVyZW9GRlRTY29wZSYgdGFyZ2V0KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bv
b2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+
RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAg
ICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7
CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIGlubGluZSBv
cGVyYXRvciBBcnRzOjpTdGVyZW9FZmZlY3QoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTdGVyZW9F
ZmZlY3QoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1vZHVs
ZSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAgICBp
bmxpbmUgU3RlcmVvRkZUU2NvcGVfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6
X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBh
dXRvU3VzcGVuZCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0YXJ0KCk7CiAgICAgICAgaW5saW5l
IHZvaWQgc3RvcCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICBp
bmxpbmUgdm9pZCBzdHJlYW1TdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUVuZCgp
OwogICAgICAgIGlubGluZSBzdGQ6OnZlY3RvcjxmbG9hdD4gKiBzY29wZSgpOwp9OwoKY2xhc3Mg
U3RlcmVvRWZmZWN0U3RhY2tfYmFzZSA6IHZpcnR1YWwgcHVibGljIEFydHM6OlN0ZXJlb0VmZmVj
dF9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAg
ICAgIHN0YXRpYyBTdGVyZW9FZmZlY3RTdGFja19iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTdGVyZW9FZmZlY3RTdGFjayIpOwogICAgICAgIHN0YXRp
YyBTdGVyZW9FZmZlY3RTdGFja19iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3Ry
ZWYpOwogICAgICAgIHN0YXRpYyBTdGVyZW9FZmZlY3RTdGFja19iYXNlICpfZnJvbVJlZmVyZW5j
ZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3Rh
dGljIFN0ZXJlb0VmZmVjdFN0YWNrX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6
T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3RTdGFja19iYXNlICpf
Y29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVm
Q250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZp
cnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0Owog
ICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQo
KSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAg
ICB2aXJ0dWFsIGxvbmcgaW5zZXJ0VG9wKEFydHM6OlN0ZXJlb0VmZmVjdCBlZmZlY3QsIGNvbnN0
IHN0ZDo6c3RyaW5nJiBuYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCBsb25nIGluc2VydEJvdHRv
bShBcnRzOjpTdGVyZW9FZmZlY3QgZWZmZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmUobG9uZyBJRCkgPSAwOwp9OwoKY2xhc3MgU3Rl
cmVvRWZmZWN0U3RhY2tfc3R1YiA6IHZpcnR1YWwgcHVibGljIFN0ZXJlb0VmZmVjdFN0YWNrX2Jh
c2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN0ZXJlb0VmZmVjdF9zdHViIHsKcHJvdGVjdGVkOgog
ICAgICAgIFN0ZXJlb0VmZmVjdFN0YWNrX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBTdGVyZW9F
ZmZlY3RTdGFja19zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0
SUQpOwoKICAgICAgICBsb25nIGluc2VydFRvcChBcnRzOjpTdGVyZW9FZmZlY3QgZWZmZWN0LCBj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgbG9uZyBpbnNlcnRCb3R0b20oQXJ0czo6
U3RlcmVvRWZmZWN0IGVmZmVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIHZv
aWQgcmVtb3ZlKGxvbmcgSUQpOwp9OwoKY2xhc3MgU3RlcmVvRWZmZWN0U3RhY2tfc2tlbCA6IHZp
cnR1YWwgcHVibGljIFN0ZXJlb0VmZmVjdFN0YWNrX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6
OlN0ZXJlb0VmZmVjdF9za2VsIHsKcHVibGljOgogICAgICAgIFN0ZXJlb0VmZmVjdFN0YWNrX3Nr
ZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgpOwog
ICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXNDb21w
YXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9p
ZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVy
ICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07CiMg
MSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMTcxNiAiLi4vLi4vYXJ0cy9mbG93
L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTdGVyZW9FZmZlY3RTdGFjayA6
IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmpl
Y3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTdGVyZW9FZmZlY3RTdGFja19iYXNlICpfY2Fj
aGU7CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdFN0YWNrX2Jhc2UgKl9tZXRob2RfY2FsbCgp
IHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAg
aWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShTdGVyZW9F
ZmZlY3RTdGFja19iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN0ZXJlb0VmZmVjdFN0YWNrX2Jh
c2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0
ZWQ6CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdFN0YWNrKFN0ZXJlb0VmZmVjdFN0YWNrX2Jh
c2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAg
dHlwZWRlZiBTdGVyZW9FZmZlY3RTdGFja19iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxp
bmUgU3RlcmVvRWZmZWN0U3RhY2soKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgw
KSB7fQogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3RTdGFjayhjb25zdCBBcnRzOjpTdWJDbGFz
cyYgcykgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KFN0ZXJlb0VmZmVjdFN0YWNrX2Jh
c2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3Rl
cmVvRWZmZWN0U3RhY2soY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAg
ICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhTdGVyZW9FZmZlY3RTdGFja19iYXNlOjpfZnJv
bVN0cmluZyhyLnN0cmluZygpKSk6KFN0ZXJlb0VmZmVjdFN0YWNrX2Jhc2U6Ol9mcm9tUmVmZXJl
bmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0
ZXJlb0VmZmVjdFN0YWNrKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVj
dChTdGVyZW9FZmZlY3RTdGFja19iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwg
X2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdFN0YWNrKGNvbnN0IFN0ZXJl
b0VmZmVjdFN0YWNrJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNo
ZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3RTdGFjayhBcnRz
OjpPYmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAg
ICBpbmxpbmUgc3RhdGljIFN0ZXJlb0VmZmVjdFN0YWNrIG51bGwoKSB7cmV0dXJuIFN0ZXJlb0Vm
ZmVjdFN0YWNrKChTdGVyZW9FZmZlY3RTdGFja19iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0
YXRpYyBTdGVyZW9FZmZlY3RTdGFjayBfZnJvbV9iYXNlKFN0ZXJlb0VmZmVjdFN0YWNrX2Jhc2Uq
IGIpIHtyZXR1cm4gU3RlcmVvRWZmZWN0U3RhY2soYik7fQogICAgICAgIGlubGluZSBTdGVyZW9F
ZmZlY3RTdGFjayYgb3BlcmF0b3I9KGNvbnN0IFN0ZXJlb0VmZmVjdFN0YWNrJiB0YXJnZXQpIHsK
ICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsK
ICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFy
Z2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAg
ICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlN0ZXJlb0VmZmVjdCgpIGNvbnN0
IHsgcmV0dXJuIEFydHM6OlN0ZXJlb0VmZmVjdCgqX3Bvb2wpOyB9CiAgICAgICAgaW5saW5lIG9w
ZXJhdG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3ludGhNb2R1
bGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3RTdGFja19iYXNlKiBfYmFz
ZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGlu
ZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZv
aWQgc3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZv
aWQgc3RyZWFtSW5pdCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAg
ICAgaW5saW5lIHZvaWQgc3RyZWFtRW5kKCk7CiAgICAgICAgaW5saW5lIGxvbmcgaW5zZXJ0VG9w
KEFydHM6OlN0ZXJlb0VmZmVjdCBlZmZlY3QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAg
ICAgICBpbmxpbmUgbG9uZyBpbnNlcnRCb3R0b20oQXJ0czo6U3RlcmVvRWZmZWN0IGVmZmVjdCwg
Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIGlubGluZSB2b2lkIHJlbW92ZShsb25n
IElEKTsKfTsKCmNsYXNzIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlIDogdmlydHVhbCBwdWJsaWMg
QXJ0czo6T2JqZWN0X2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
X0lJRDsKCiAgICAgICAgc3RhdGljIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlICpfY3JlYXRlKGNv
bnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpBdWRpb01hbmFnZXJDbGllbnQiKTsK
ICAgICAgICBzdGF0aWMgQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UgKl9mcm9tU3RyaW5nKHN0ZDo6
c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNl
ICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRjb3B5
KTsKCiAgICAgICAgc3RhdGljIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlICpfZnJvbUR5bmFtaWND
YXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUgQXVkaW9NYW5h
Z2VyQ2xpZW50X2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAg
ICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQ
b3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
X2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBs
b25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgbG9uZyBJRCgpID0gMDsKICAgICAgICB2aXJ0dWFs
IEFydHM6OkF1ZGlvTWFuYWdlckRpcmVjdGlvbiBkaXJlY3Rpb24oKSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIGRpcmVjdGlvbihBcnRzOjpBdWRpb01hbmFnZXJEaXJlY3Rpb24gbmV3VmFsdWUp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIHRpdGxlKCkgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCB0aXRsZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpID0gMDsKICAgICAg
ICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGF1dG9SZXN0b3JlSUQoKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIGF1dG9SZXN0b3JlSUQoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSA9IDA7CiAg
ICAgICAgdmlydHVhbCB2b2lkIGNvbnN0cnVjdG9yKEFydHM6OkF1ZGlvTWFuYWdlckRpcmVjdGlv
biBkaXJlY3Rpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiB0aXRsZSwgY29uc3Qgc3RkOjpzdHJpbmcm
IGF1dG9SZXN0b3JlSUQpID0gMDsKfTsKCmNsYXNzIEF1ZGlvTWFuYWdlckNsaWVudF9zdHViIDog
dmlydHVhbCBwdWJsaWMgQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFy
dHM6Ok9iamVjdF9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIEF1ZGlvTWFuYWdlckNsaWVudF9z
dHViKCk7CgpwdWJsaWM6CiAgICAgICAgQXVkaW9NYW5hZ2VyQ2xpZW50X3N0dWIoQXJ0czo6Q29u
bmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIGxvbmcgSUQoKTsK
ICAgICAgICBBcnRzOjpBdWRpb01hbmFnZXJEaXJlY3Rpb24gZGlyZWN0aW9uKCk7CiAgICAgICAg
dm9pZCBkaXJlY3Rpb24oQXJ0czo6QXVkaW9NYW5hZ2VyRGlyZWN0aW9uIG5ld1ZhbHVlKTsKICAg
ICAgICBzdGQ6OnN0cmluZyB0aXRsZSgpOwogICAgICAgIHZvaWQgdGl0bGUoY29uc3Qgc3RkOjpz
dHJpbmcmIG5ld1ZhbHVlKTsKICAgICAgICBzdGQ6OnN0cmluZyBhdXRvUmVzdG9yZUlEKCk7CiAg
ICAgICAgdm9pZCBhdXRvUmVzdG9yZUlEKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSk7CiAg
ICAgICAgdm9pZCBjb25zdHJ1Y3RvcihBcnRzOjpBdWRpb01hbmFnZXJEaXJlY3Rpb24gZGlyZWN0
aW9uLCBjb25zdCBzdGQ6OnN0cmluZyYgdGl0bGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBhdXRvUmVz
dG9yZUlEKTsKfTsKCmNsYXNzIEF1ZGlvTWFuYWdlckNsaWVudF9za2VsIDogdmlydHVhbCBwdWJs
aWMgQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9z
a2VsIHsKcHJvdGVjdGVkOgoKICAgICAgICBpbmxpbmUgdm9pZCBJRF9jaGFuZ2VkKGxvbmcgbmV3
VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoIklEX2NoYW5nZWQiLG5ld1Zh
bHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgdGl0bGVfY2hhbmdlZChjb25zdCBz
dGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoInRp
dGxlX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgYXV0
b1Jlc3RvcmVJRF9jaGFuZ2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSkgewogICAgICAg
ICAgICAgICAgX2VtaXRfY2hhbmdlZCgiYXV0b1Jlc3RvcmVJRF9jaGFuZ2VkIixuZXdWYWx1ZSk7
CiAgICAgICAgfQoKcHVibGljOgogICAgICAgIEF1ZGlvTWFuYWdlckNsaWVudF9za2VsKCk7Cgog
ICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBz
dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdp
dGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxk
TWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVz
dCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4u
L2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDE4NDIgIi4uLy4uL2FydHMvZmxvdy9hcnRzZmxv
dy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgQXVkaW9NYW5hZ2VyQ2xpZW50IDogcHVibGlj
IEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNl
KiBfQ3JlYXRvcigpOwogICAgICAgIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlICpfY2FjaGU7CiAg
ICAgICAgaW5saW5lIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlICpfbWV0aG9kX2NhbGwoKSB7CiAg
ICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIGlmKF9w
b29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oQXVkaW9NYW5hZ2Vy
Q2xpZW50X2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2U6
Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6
CiAgICAgICAgaW5saW5lIEF1ZGlvTWFuYWdlckNsaWVudChBdWRpb01hbmFnZXJDbGllbnRfYmFz
ZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0
eXBlZGVmIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxp
bmUgQXVkaW9NYW5hZ2VyQ2xpZW50KCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUo
MCkge30KICAgICAgICBpbmxpbmUgQXVkaW9NYW5hZ2VyQ2xpZW50KGNvbnN0IEFydHM6OlN1YkNs
YXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoQXVkaW9NYW5hZ2VyQ2xpZW50
X2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUg
QXVkaW9NYW5hZ2VyQ2xpZW50KGNvbnN0IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAg
ICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2U6
Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2U6Ol9mcm9t
UmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5s
aW5lIEF1ZGlvTWFuYWdlckNsaWVudChjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRz
OjpPYmplY3QoQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmpl
Y3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgQXVkaW9NYW5hZ2VyQ2xpZW50KGNv
bnN0IEF1ZGlvTWFuYWdlckNsaWVudCYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bv
b2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgQXVkaW9NYW5hZ2Vy
Q2xpZW50KEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgw
KSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgQXVkaW9NYW5hZ2VyQ2xpZW50IG51bGwoKSB7cmV0
dXJuIEF1ZGlvTWFuYWdlckNsaWVudCgoQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UqKTApO30KICAg
ICAgICBpbmxpbmUgc3RhdGljIEF1ZGlvTWFuYWdlckNsaWVudCBfZnJvbV9iYXNlKEF1ZGlvTWFu
YWdlckNsaWVudF9iYXNlKiBiKSB7cmV0dXJuIEF1ZGlvTWFuYWdlckNsaWVudChiKTt9CiAgICAg
ICAgaW5saW5lIEF1ZGlvTWFuYWdlckNsaWVudCYgb3BlcmF0b3I9KGNvbnN0IEF1ZGlvTWFuYWdl
ckNsaWVudCYgdGFyZ2V0KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9w
b29sKSByZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAg
ICAgICAgICBfcG9vbCA9IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRh
cmdldC5fY2FjaGU7CiAgICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIGlubGluZSBBdWRpb01hbmFnZXJDbGll
bnRfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoK
ICAgICAgICBpbmxpbmUgbG9uZyBJRCgpOwogICAgICAgIGlubGluZSBBcnRzOjpBdWRpb01hbmFn
ZXJEaXJlY3Rpb24gZGlyZWN0aW9uKCk7CiAgICAgICAgaW5saW5lIHZvaWQgZGlyZWN0aW9uKEFy
dHM6OkF1ZGlvTWFuYWdlckRpcmVjdGlvbiBfbmV3VmFsdWUpOwogICAgICAgIGlubGluZSBzdGQ6
OnN0cmluZyB0aXRsZSgpOwogICAgICAgIGlubGluZSB2b2lkIHRpdGxlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBfbmV3VmFsdWUpOwogICAgICAgIGlubGluZSBzdGQ6OnN0cmluZyBhdXRvUmVzdG9yZUlE
KCk7CiAgICAgICAgaW5saW5lIHZvaWQgYXV0b1Jlc3RvcmVJRChjb25zdCBzdGQ6OnN0cmluZyYg
X25ld1ZhbHVlKTsKICAgICAgICBpbmxpbmUgQXVkaW9NYW5hZ2VyQ2xpZW50KEFydHM6OkF1ZGlv
TWFuYWdlckRpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiB0aXRsZSwgY29u
c3Qgc3RkOjpzdHJpbmcmIGF1dG9SZXN0b3JlSUQpOwp9OwoKY2xhc3MgQXVkaW9NYW5hZ2VyX2Jh
c2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3RfYmFzZSB7CnB1YmxpYzoKICAgICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgQXVkaW9NYW5hZ2VyX2Jh
c2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OkF1ZGlvTWFu
YWdlciIpOwogICAgICAgIHN0YXRpYyBBdWRpb01hbmFnZXJfYmFzZSAqX2Zyb21TdHJpbmcoc3Rk
OjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgQXVkaW9NYW5hZ2VyX2Jhc2UgKl9m
cm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwoK
ICAgICAgICBzdGF0aWMgQXVkaW9NYW5hZ2VyX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3Qg
QXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBBdWRpb01hbmFnZXJfYmFzZSAq
X2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3Jl
ZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2
aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsK
ICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0
KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAgICAg
ICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKiBkZXN0aW5hdGlvbnMoKSA9IDA7
CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxBcnRzOjpBdWRpb01hbmFnZXJJbmZvPiAqIGNs
aWVudHMoKSA9IDA7CiAgICAgICAgdmlydHVhbCBsb25nIGNoYW5nZXMoKSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIHNldERlc3RpbmF0aW9uKGxvbmcgSUQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBk
ZXN0aW5hdGlvbikgPSAwOwp9OwoKY2xhc3MgQXVkaW9NYW5hZ2VyX3N0dWIgOiB2aXJ0dWFsIHB1
YmxpYyBBdWRpb01hbmFnZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X3N0dWIg
ewpwcm90ZWN0ZWQ6CiAgICAgICAgQXVkaW9NYW5hZ2VyX3N0dWIoKTsKCnB1YmxpYzoKICAgICAg
ICBBdWRpb01hbmFnZXJfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9i
amVjdElEKTsKCiAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogZGVzdGluYXRpb25z
KCk7CiAgICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6QXVkaW9NYW5hZ2VySW5mbz4gKiBjbGllbnRz
KCk7CiAgICAgICAgbG9uZyBjaGFuZ2VzKCk7CiAgICAgICAgdm9pZCBzZXREZXN0aW5hdGlvbihs
b25nIElELCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdGluYXRpb24pOwp9OwoKY2xhc3MgQXVkaW9N
YW5hZ2VyX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBBdWRpb01hbmFnZXJfYmFzZSwgdmlydHVhbCBw
dWJsaWMgQXJ0czo6T2JqZWN0X3NrZWwgewpwcm90ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lk
IGRlc3RpbmF0aW9uc19jaGFuZ2VkKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbmV3
VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoImRlc3RpbmF0aW9uc19jaGFu
Z2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGNoYW5nZXNfY2hh
bmdlZChsb25nIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJjaGFu
Z2VzX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CgpwdWJsaWM6CiAgICAgICAgQXVkaW9N
YW5hZ2VyX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1l
U2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9v
bCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAg
ICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0
czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsK
fTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMTk1NCAiLi4vLi4v
YXJ0cy9mbG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBBdWRpb01hbmFn
ZXIgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6
T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgQXVkaW9NYW5hZ2VyX2Jhc2UgKl9jYWNo
ZTsKICAgICAgICBpbmxpbmUgQXVkaW9NYW5hZ2VyX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAg
ICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bv
b2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShBdWRpb01hbmFnZXJf
YmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChBdWRpb01hbmFnZXJfYmFzZTo6X0lJRCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxp
bmUgQXVkaW9NYW5hZ2VyKEF1ZGlvTWFuYWdlcl9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwg
X2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgQXVkaW9NYW5hZ2VyX2Jhc2Ug
X2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGluZSBBdWRpb01hbmFnZXIoKSA6IEFydHM6Ok9iamVj
dChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBBdWRpb01hbmFnZXIoY29u
c3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChBdWRp
b01hbmFnZXJfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAg
IGlubGluZSBBdWRpb01hbmFnZXIoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAg
ICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhBdWRpb01hbmFnZXJfYmFzZTo6X2Zy
b21TdHJpbmcoci5zdHJpbmcoKSkpOihBdWRpb01hbmFnZXJfYmFzZTo6X2Zyb21SZWZlcmVuY2Uo
ci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgQXVkaW9N
YW5hZ2VyKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChBdWRpb01h
bmFnZXJfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQog
ICAgICAgIGlubGluZSBBdWRpb01hbmFnZXIoY29uc3QgQXVkaW9NYW5hZ2VyJiB0YXJnZXQpIDog
QXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAg
ICAgIGlubGluZSBBdWRpb01hbmFnZXIoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9i
amVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBBdWRpb01hbmFnZXIg
bnVsbCgpIHtyZXR1cm4gQXVkaW9NYW5hZ2VyKChBdWRpb01hbmFnZXJfYmFzZSopMCk7fQogICAg
ICAgIGlubGluZSBzdGF0aWMgQXVkaW9NYW5hZ2VyIF9mcm9tX2Jhc2UoQXVkaW9NYW5hZ2VyX2Jh
c2UqIGIpIHtyZXR1cm4gQXVkaW9NYW5hZ2VyKGIpO30KICAgICAgICBpbmxpbmUgQXVkaW9NYW5h
Z2VyJiBvcGVyYXRvcj0oY29uc3QgQXVkaW9NYW5hZ2VyJiB0YXJnZXQpIHsKICAgICAgICAgICAg
ICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAg
ICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwog
ICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9w
b29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAg
ICAgaW5saW5lIEF1ZGlvTWFuYWdlcl9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNo
ZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gKiBkZXN0aW5hdGlvbnMoKTsKICAgICAgICBpbmxpbmUgc3RkOjp2ZWN0b3I8QXJ0czo6QXVk
aW9NYW5hZ2VySW5mbz4gKiBjbGllbnRzKCk7CiAgICAgICAgaW5saW5lIGxvbmcgY2hhbmdlcygp
OwogICAgICAgIGlubGluZSB2b2lkIHNldERlc3RpbmF0aW9uKGxvbmcgSUQsIGNvbnN0IHN0ZDo6
c3RyaW5nJiBkZXN0aW5hdGlvbik7Cn07CgpjbGFzcyBTeW50aF9BTUFOX1BMQVlfYmFzZSA6IHZp
cnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFN5bnRoX0FNQU5fUExBWV9i
YXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTeW50aF9B
TUFOX1BMQVkiKTsKICAgICAgICBzdGF0aWMgU3ludGhfQU1BTl9QTEFZX2Jhc2UgKl9mcm9tU3Ry
aW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFN5bnRoX0FNQU5fUExB
WV9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5l
ZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFN5bnRoX0FNQU5fUExBWV9iYXNlICpfZnJvbUR5bmFt
aWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUgU3ludGhf
QU1BTl9QTEFZX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAg
ICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQ
b3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
X2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBs
b25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgdGl0bGUoKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIHRpdGxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSkgPSAwOwog
ICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgYXV0b1Jlc3RvcmVJRCgpID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgYXV0b1Jlc3RvcmVJRChjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY29uc3RydWN0b3IoQXJ0czo6QXVkaW9NYW5hZ2VyQ2xp
ZW50IGNsaWVudCkgPSAwOwp9OwoKY2xhc3MgU3ludGhfQU1BTl9QTEFZX3N0dWIgOiB2aXJ0dWFs
IHB1YmxpYyBTeW50aF9BTUFOX1BMQVlfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhN
b2R1bGVfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTeW50aF9BTUFOX1BMQVlfc3R1YigpOwoK
cHVibGljOgogICAgICAgIFN5bnRoX0FNQU5fUExBWV9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNv
bm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICBzdGQ6OnN0cmluZyB0aXRsZSgpOwog
ICAgICAgIHZvaWQgdGl0bGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKTsKICAgICAgICBz
dGQ6OnN0cmluZyBhdXRvUmVzdG9yZUlEKCk7CiAgICAgICAgdm9pZCBhdXRvUmVzdG9yZUlEKGNv
bnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSk7CiAgICAgICAgdm9pZCBjb25zdHJ1Y3RvcihBcnRz
OjpBdWRpb01hbmFnZXJDbGllbnQgY2xpZW50KTsKfTsKCmNsYXNzIFN5bnRoX0FNQU5fUExBWV9z
a2VsIDogdmlydHVhbCBwdWJsaWMgU3ludGhfQU1BTl9QTEFZX2Jhc2UsIHZpcnR1YWwgcHVibGlj
IEFydHM6OlN5bnRoTW9kdWxlX3NrZWwgewpwcm90ZWN0ZWQ6CgogICAgICAgIGZsb2F0ICpsZWZ0
OwogICAgICAgIGZsb2F0ICpyaWdodDsKCnByb3RlY3RlZDoKCiAgICAgICAgaW5saW5lIHZvaWQg
dGl0bGVfY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAgICAgICAg
ICAgIF9lbWl0X2NoYW5nZWQoInRpdGxlX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CiAg
ICAgICAgaW5saW5lIHZvaWQgYXV0b1Jlc3RvcmVJRF9jaGFuZ2VkKGNvbnN0IHN0ZDo6c3RyaW5n
JiBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgiYXV0b1Jlc3RvcmVJ
RF9jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQoKcHVibGljOgogICAgICAgIFN5bnRoX0FN
QU5fUExBWV9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFt
ZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJv
b2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwog
ICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFy
dHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7
Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDIwNjkgIi4uLy4u
L2FydHMvZmxvdy9hcnRzZmxvdy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3ludGhfQU1B
Tl9QTEFZIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFy
dHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFN5bnRoX0FNQU5fUExBWV9iYXNl
ICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFN5bnRoX0FNQU5fUExBWV9iYXNlICpfbWV0aG9kX2Nh
bGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAg
ICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oU3lu
dGhfQU1BTl9QTEFZX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoU3ludGhfQU1BTl9QTEFZX2Jh
c2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0
ZWQ6CiAgICAgICAgaW5saW5lIFN5bnRoX0FNQU5fUExBWShTeW50aF9BTUFOX1BMQVlfYmFzZSog
YikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBl
ZGVmIFN5bnRoX0FNQU5fUExBWV9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgU3lu
dGhfQU1BTl9QTEFZKCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAg
ICAgICBpbmxpbmUgU3ludGhfQU1BTl9QTEFZKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAg
ICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoU3ludGhfQU1BTl9QTEFZX2Jhc2U6Ol9jcmVhdGUo
cy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfQU1BTl9QTEFZ
KGNvbnN0IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0
KHIuaXNTdHJpbmcoKT8oU3ludGhfQU1BTl9QTEFZX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5n
KCkpKTooU3ludGhfQU1BTl9QTEFZX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCks
dHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX0FNQU5fUExBWShjb25z
dCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoU3ludGhfQU1BTl9QTEFZX2Jh
c2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBp
bmxpbmUgU3ludGhfQU1BTl9QTEFZKGNvbnN0IFN5bnRoX0FNQU5fUExBWSYgdGFyZ2V0KSA6IEFy
dHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAg
ICBpbmxpbmUgU3ludGhfQU1BTl9QTEFZKEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpP
YmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgU3ludGhfQU1BTl9Q
TEFZIG51bGwoKSB7cmV0dXJuIFN5bnRoX0FNQU5fUExBWSgoU3ludGhfQU1BTl9QTEFZX2Jhc2Uq
KTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRoX0FNQU5fUExBWSBfZnJvbV9iYXNlKFN5
bnRoX0FNQU5fUExBWV9iYXNlKiBiKSB7cmV0dXJuIFN5bnRoX0FNQU5fUExBWShiKTt9CiAgICAg
ICAgaW5saW5lIFN5bnRoX0FNQU5fUExBWSYgb3BlcmF0b3I9KGNvbnN0IFN5bnRoX0FNQU5fUExB
WSYgdGFyZ2V0KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSBy
ZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAg
ICBfcG9vbCA9IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5f
Y2FjaGU7CiAgICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1v
ZHVsZSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAg
ICBpbmxpbmUgU3ludGhfQU1BTl9QTEFZX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2Nh
Y2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3Rh
dGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgpOwogICAgICAgIGlu
bGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1Jbml0KCk7CiAgICAg
ICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1F
bmQoKTsKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgdGl0bGUoKTsKICAgICAgICBpbmxpbmUg
dm9pZCB0aXRsZShjb25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKTsKICAgICAgICBpbmxpbmUg
c3RkOjpzdHJpbmcgYXV0b1Jlc3RvcmVJRCgpOwogICAgICAgIGlubGluZSB2b2lkIGF1dG9SZXN0
b3JlSUQoY29uc3Qgc3RkOjpzdHJpbmcmIF9uZXdWYWx1ZSk7CiAgICAgICAgaW5saW5lIFN5bnRo
X0FNQU5fUExBWShBcnRzOjpBdWRpb01hbmFnZXJDbGllbnQgY2xpZW50KTsKfTsKCmNsYXNzIFN5
bnRoX0FNQU5fUkVDT1JEX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9i
YXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAg
IHN0YXRpYyBTeW50aF9BTUFOX1JFQ09SRF9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5n
JiBzdWJDbGFzcyA9ICJBcnRzOjpTeW50aF9BTUFOX1JFQ09SRCIpOwogICAgICAgIHN0YXRpYyBT
eW50aF9BTUFOX1JFQ09SRF9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYp
OwogICAgICAgIHN0YXRpYyBTeW50aF9BTUFOX1JFQ09SRF9iYXNlICpfZnJvbVJlZmVyZW5jZShB
cnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGlj
IFN5bnRoX0FNQU5fUkVDT1JEX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2Jq
ZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTeW50aF9BTUFOX1JFQ09SRF9iYXNlICpfY29w
eSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250
Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1
YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAg
ICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBj
b25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2
aXJ0dWFsIHN0ZDo6c3RyaW5nIHRpdGxlKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCB0aXRs
ZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6
c3RyaW5nIGF1dG9SZXN0b3JlSUQoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGF1dG9SZXN0
b3JlSUQoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2
b2lkIGNvbnN0cnVjdG9yKEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudCBjbGllbnQpID0gMDsKfTsK
CmNsYXNzIFN5bnRoX0FNQU5fUkVDT1JEX3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBTeW50aF9BTUFO
X1JFQ09SRF9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHViIHsKcHJv
dGVjdGVkOgogICAgICAgIFN5bnRoX0FNQU5fUkVDT1JEX3N0dWIoKTsKCnB1YmxpYzoKICAgICAg
ICBTeW50aF9BTUFOX1JFQ09SRF9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxv
bmcgb2JqZWN0SUQpOwoKICAgICAgICBzdGQ6OnN0cmluZyB0aXRsZSgpOwogICAgICAgIHZvaWQg
dGl0bGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKTsKICAgICAgICBzdGQ6OnN0cmluZyBh
dXRvUmVzdG9yZUlEKCk7CiAgICAgICAgdm9pZCBhdXRvUmVzdG9yZUlEKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuZXdWYWx1ZSk7CiAgICAgICAgdm9pZCBjb25zdHJ1Y3RvcihBcnRzOjpBdWRpb01hbmFn
ZXJDbGllbnQgY2xpZW50KTsKfTsKCmNsYXNzIFN5bnRoX0FNQU5fUkVDT1JEX3NrZWwgOiB2aXJ0
dWFsIHB1YmxpYyBTeW50aF9BTUFOX1JFQ09SRF9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpT
eW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoKICAgICAgICBmbG9hdCAqbGVmdDsKICAgICAg
ICBmbG9hdCAqcmlnaHQ7Cgpwcm90ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIHRpdGxlX2No
YW5nZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1p
dF9jaGFuZ2VkKCJ0aXRsZV9jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlu
bGluZSB2b2lkIGF1dG9SZXN0b3JlSURfY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFs
dWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoImF1dG9SZXN0b3JlSURfY2hhbmdl
ZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAgICAgICBTeW50aF9BTUFOX1JFQ09S
RF9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwo
KTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lz
Q29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAg
IHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1
ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9
OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDIxOTIgIi4uLy4uL2FydHMv
Zmxvdy9hcnRzZmxvdy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3ludGhfQU1BTl9SRUNP
UkQgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6
T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3ludGhfQU1BTl9SRUNPUkRfYmFzZSAq
X2NhY2hlOwogICAgICAgIGlubGluZSBTeW50aF9BTUFOX1JFQ09SRF9iYXNlICpfbWV0aG9kX2Nh
bGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAg
ICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oU3lu
dGhfQU1BTl9SRUNPUkRfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChTeW50aF9BTUFOX1JFQ09S
RF9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJv
dGVjdGVkOgogICAgICAgIGlubGluZSBTeW50aF9BTUFOX1JFQ09SRChTeW50aF9BTUFOX1JFQ09S
RF9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAg
ICAgIHR5cGVkZWYgU3ludGhfQU1BTl9SRUNPUkRfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAg
aW5saW5lIFN5bnRoX0FNQU5fUkVDT1JEKCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2Fj
aGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfQU1BTl9SRUNPUkQoY29uc3QgQXJ0czo6U3Vi
Q2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChTeW50aF9BTUFOX1JFQ09S
RF9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l
IFN5bnRoX0FNQU5fUkVDT1JEKGNvbnN0IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAg
ICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oU3ludGhfQU1BTl9SRUNPUkRfYmFzZTo6
X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTeW50aF9BTUFOX1JFQ09SRF9iYXNlOjpfZnJvbVJl
ZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGlu
ZSBTeW50aF9BTUFOX1JFQ09SRChjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpP
YmplY3QoU3ludGhfQU1BTl9SRUNPUkRfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgp
KSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9BTUFOX1JFQ09SRChjb25zdCBT
eW50aF9BTUFOX1JFQ09SRCYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBf
Y2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgU3ludGhfQU1BTl9SRUNPUkQo
QXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAg
ICAgICAgaW5saW5lIHN0YXRpYyBTeW50aF9BTUFOX1JFQ09SRCBudWxsKCkge3JldHVybiBTeW50
aF9BTUFOX1JFQ09SRCgoU3ludGhfQU1BTl9SRUNPUkRfYmFzZSopMCk7fQogICAgICAgIGlubGlu
ZSBzdGF0aWMgU3ludGhfQU1BTl9SRUNPUkQgX2Zyb21fYmFzZShTeW50aF9BTUFOX1JFQ09SRF9i
YXNlKiBiKSB7cmV0dXJuIFN5bnRoX0FNQU5fUkVDT1JEKGIpO30KICAgICAgICBpbmxpbmUgU3lu
dGhfQU1BTl9SRUNPUkQmIG9wZXJhdG9yPShjb25zdCBTeW50aF9BTUFOX1JFQ09SRCYgdGFyZ2V0
KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRo
aXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9
IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAg
ICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgICAgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNv
bnN0IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUg
U3ludGhfQU1BTl9SRUNPUkRfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21l
dGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBhdXRv
U3VzcGVuZCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZv
aWQgc3RvcCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICBpbmxp
bmUgdm9pZCBzdHJlYW1TdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUVuZCgpOwog
ICAgICAgIGlubGluZSBzdGQ6OnN0cmluZyB0aXRsZSgpOwogICAgICAgIGlubGluZSB2b2lkIHRp
dGxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBfbmV3VmFsdWUpOwogICAgICAgIGlubGluZSBzdGQ6OnN0
cmluZyBhdXRvUmVzdG9yZUlEKCk7CiAgICAgICAgaW5saW5lIHZvaWQgYXV0b1Jlc3RvcmVJRChj
b25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKTsKICAgICAgICBpbmxpbmUgU3ludGhfQU1BTl9S
RUNPUkQoQXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50IGNsaWVudCk7Cn07CgoKCmlubGluZSBBcnRz
OjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoTW9kdWxlOjphdXRvU3VzcGVuZCgpCnsKICAg
ICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf
Y2FjaGUpLT5hdXRvU3VzcGVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2Uq
PihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5
bnRoTW9kdWxlOjpzdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5
bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRo
TW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFy
dHM6OlN5bnRoTW9kdWxlOjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0
czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lk
IEFydHM6OlN5bnRoTW9kdWxlOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGlj
X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpzdGF0
aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1J
bml0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoTW9kdWxlOjpzdHJlYW1TdGFydCgpCnsK
ICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2Fj
aGUpLT5zdHJlYW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf
bWV0aG9kX2NhbGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRo
TW9kdWxlOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6
U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGlu
ZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoX1BMQVk6OmF1dG9TdXNwZW5kKCkK
ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz
ZSo+KF9jYWNoZSktPmF1dG9TdXNwZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf
YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YXV0b1N1c3BlbmQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0
czo6U3ludGhfUExBWTo6c3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz
OjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdGFydCgpOwp9CgppbmxpbmUgdm9p
ZCBBcnRzOjpTeW50aF9QTEFZOjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRz
OjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2
b2lkIEFydHM6OlN5bnRoX1BMQVk6OnN0cmVhbUluaXQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0
aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtSW5pdCgpOnN0
YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVh
bUluaXQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfUExBWTo6c3RyZWFtU3RhcnQoKQp7
CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2Nh
Y2hlKS0+c3RyZWFtU3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o
X21ldGhvZF9jYWxsKCkpLT5zdHJlYW1TdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50
aF9QTEFZOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6
U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGlu
ZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoX1JFQ09SRDo6YXV0b1N1c3BlbmQo
KQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9i
YXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVs
ZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9CgppbmxpbmUgdm9pZCBB
cnRzOjpTeW50aF9SRUNPUkQ6OnN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0
czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5saW5l
IHZvaWQgQXJ0czo6U3ludGhfUkVDT1JEOjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGlj
X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2Fz
dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlu
bGluZSB2b2lkIEFydHM6OlN5bnRoX1JFQ09SRDo6c3RyZWFtSW5pdCgpCnsKICAgICAgICAgX2Nh
Y2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1J
bml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgp
KS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9SRUNPUkQ6OnN0cmVh
bVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf
YmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1
bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQoKTsKfQoKaW5saW5lIHZvaWQg
QXJ0czo6U3ludGhfUkVDT1JEOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNf
Y2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGlj
X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5k
KCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoX0ZSRVFVRU5D
WTo6YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz
OjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxB
cnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9
CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9GUkVRVUVOQ1k6OnN0YXJ0KCkKewogICAgICAgICBf
Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0
KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+
c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfRlJFUVVFTkNZOjpzdG9wKCkKewog
ICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNo
ZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9j
YWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0ZSRVFVRU5DWTo6c3Ry
ZWFtSW5pdCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxl
X2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1
bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBB
cnRzOjpTeW50aF9GUkVRVUVOQ1k6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3Rh
dGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6
c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3Ry
ZWFtU3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfRlJFUVVFTkNZOjpzdHJlYW1F
bmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl
Kj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz
ZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3Vz
cGVuZFN0YXRlIEFydHM6OlN5bnRoX1dBVkVfU0lOOjphdXRvU3VzcGVuZCgpCnsKICAgICAgICBy
ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUp
LT5hdXRvU3VzcGVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0
aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1dB
VkVfU0lOOjpzdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRo
TW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9k
dWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6
OlN5bnRoX1dBVkVfU0lOOjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0
czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lk
IEFydHM6OlN5bnRoX1dBVkVfU0lOOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3Rh
dGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpz
dGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJl
YW1Jbml0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1dBVkVfU0lOOjpzdHJlYW1TdGFy
dCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2Uq
PihfY2FjaGUpLT5zdHJlYW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jh
c2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6
OlN5bnRoX1dBVkVfU0lOOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2Fz
dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nh
c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7
Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoX01VTFRJX0FERDo6
YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRz
OjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9Cgpp
bmxpbmUgdm9pZCBBcnRzOjpTeW50aF9NVUxUSV9BREQ6OnN0YXJ0KCkKewogICAgICAgICBfY2Fj
aGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0KCk6
c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3Rh
cnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfTVVMVElfQUREOjpzdG9wKCkKewogICAg
ICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSkt
PnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxs
KCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX01VTFRJX0FERDo6c3RyZWFt
SW5pdCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jh
c2UqPihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf
YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRz
OjpTeW50aF9NVUxUSV9BREQ6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGlj
X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3Rh
dGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFt
U3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfTVVMVElfQUREOjpzdHJlYW1FbmQo
KQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o
X2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+
KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVu
ZFN0YXRlIEFydHM6OlN5bnRoX0FERDo6YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9j
YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1
c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxs
KCkpLT5hdXRvU3VzcGVuZCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9BREQ6OnN0YXJ0
KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+
KF9jYWNoZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9t
ZXRob2RfY2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQUREOjpz
dG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz
ZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o
X21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0FERDo6
c3RyZWFtSW5pdCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9k
dWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhN
b2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9p
ZCBBcnRzOjpTeW50aF9BREQ6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGlj
X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3Rh
dGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFt
U3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQUREOjpzdHJlYW1FbmQoKQp7CiAg
ICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hl
KS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRo
b2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRl
IEFydHM6OlN5bnRoX01VTDo6YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9z
dGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQo
KTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5h
dXRvU3VzcGVuZCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9NVUw6OnN0YXJ0KCkKewog
ICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNo
ZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2Rf
Y2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfTVVMOjpzdG9wKCkK
ewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9j
YWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhv
ZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX01VTDo6c3RyZWFt
SW5pdCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jh
c2UqPihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf
YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRz
OjpTeW50aF9NVUw6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nh
c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQo
KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfTVVMOjpzdHJlYW1FbmQoKQp7CiAgICAgICAg
IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3Ry
ZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2Fs
bCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6
OlN5bnRoX1BMQVlfV0FWOjphdXRvU3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0
YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRvU3VzcGVuZCgp
OnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1
dG9TdXNwZW5kKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1BMQVlfV0FWOjpzdGFydCgp
CnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf
Y2FjaGUpLT5zdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0
aG9kX2NhbGwoKSktPnN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1BMQVlfV0FW
OjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf
YmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1BM
QVlfV0FWOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6
U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2FzdDxBcnRz
OjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7Cn0KCmlu
bGluZSB2b2lkIEFydHM6OlN5bnRoX1BMQVlfV0FWOjpzdHJlYW1TdGFydCgpCnsKICAgICAgICAg
X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJl
YW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2Nh
bGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1BMQVlfV0FW
OjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v
ZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhN
b2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBmbG9h
dCBBcnRzOjpTeW50aF9QTEFZX1dBVjo6c3BlZWQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9z
dGF0aWNfY2FzdDxBcnRzOjpTeW50aF9QTEFZX1dBVl9iYXNlKj4oX2NhY2hlKS0+c3BlZWQoKTpz
dGF0aWNfY2FzdDxBcnRzOjpTeW50aF9QTEFZX1dBVl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5z
cGVlZCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9QTEFZX1dBVjo6c3BlZWQoZmxvYXQg
X25ld1ZhbHVlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aF9QTEFZ
X1dBVl9iYXNlKj4oX2NhY2hlKS0+c3BlZWQoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpT
eW50aF9QTEFZX1dBVl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zcGVlZChfbmV3VmFsdWUpOwp9
CgppbmxpbmUgc3RkOjpzdHJpbmcgQXJ0czo6U3ludGhfUExBWV9XQVY6OmZpbGVuYW1lKCkKewog
ICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhfUExBWV9XQVZfYmFz
ZSo+KF9jYWNoZSktPmZpbGVuYW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhfUExBWV9XQVZf
YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZmlsZW5hbWUoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6
U3ludGhfUExBWV9XQVY6OmZpbGVuYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBfbmV3VmFsdWUpCnsK
ICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoX1BMQVlfV0FWX2Jhc2UqPihf
Y2FjaGUpLT5maWxlbmFtZShfbmV3VmFsdWUpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoX1BMQVlf
V0FWX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmZpbGVuYW1lKF9uZXdWYWx1ZSk7Cn0KCmlubGlu
ZSBib29sIEFydHM6OlN5bnRoX1BMQVlfV0FWOjpmaW5pc2hlZCgpCnsKICAgICAgICByZXR1cm4g
X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoX1BMQVlfV0FWX2Jhc2UqPihfY2FjaGUpLT5m
aW5pc2hlZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoX1BMQVlfV0FWX2Jhc2UqPihfbWV0aG9k
X2NhbGwoKSktPmZpbmlzaGVkKCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFy
dHM6OlN5bnRoX0JVU19VUExJTks6OmF1dG9TdXNwZW5kKCkKewogICAgICAgIHJldHVybiBfY2Fj
aGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPmF1dG9TdXNw
ZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgp
KS0+YXV0b1N1c3BlbmQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQlVTX1VQTElOSzo6
c3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9i
YXNlKj4oX2NhY2hlKS0+c3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5zdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9C
VVNfVVBMSU5LOjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3lu
dGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v
ZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6
OlN5bnRoX0JVU19VUExJTks6OnN0cmVhbUluaXQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNf
Y2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtSW5pdCgpOnN0YXRp
Y19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbUlu
aXQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQlVTX1VQTElOSzo6c3RyZWFtU3RhcnQo
KQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o
X2NhY2hlKS0+c3RyZWFtU3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1TdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpT
eW50aF9CVVNfVVBMSU5LOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2Fz
dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nh
c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7
Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBBcnRzOjpTeW50aF9CVVNfVVBMSU5LOjpidXNuYW1lKCkK
ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhfQlVTX1VQTElO
S19iYXNlKj4oX2NhY2hlKS0+YnVzbmFtZSgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoX0JVU19V
UExJTktfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YnVzbmFtZSgpOwp9CgppbmxpbmUgdm9pZCBB
cnRzOjpTeW50aF9CVVNfVVBMSU5LOjpidXNuYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBfbmV3VmFs
dWUpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoX0JVU19VUExJTktf
YmFzZSo+KF9jYWNoZSktPmJ1c25hbWUoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50
aF9CVVNfVVBMSU5LX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmJ1c25hbWUoX25ld1ZhbHVlKTsK
fQoKaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgQXJ0czo6U3ludGhfQlVTX0RPV05MSU5L
OjphdXRvU3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6
OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRvU3VzcGVuZCgpOnN0YXRpY19jYXN0PEFy
dHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0K
CmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0JVU19ET1dOTElOSzo6c3RhcnQoKQp7CiAgICAgICAg
IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3Rh
cnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkp
LT5zdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9CVVNfRE9XTkxJTks6OnN0b3Ao
KQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o
X2NhY2hlKS0+c3RvcCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0
aG9kX2NhbGwoKSktPnN0b3AoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQlVTX0RPV05M
SU5LOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3lu
dGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7Cn0KCmlubGlu
ZSB2b2lkIEFydHM6OlN5bnRoX0JVU19ET1dOTElOSzo6c3RyZWFtU3RhcnQoKQp7CiAgICAgICAg
IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3Ry
ZWFtU3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9j
YWxsKCkpLT5zdHJlYW1TdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9CVVNfRE9X
TkxJTks6OnN0cmVhbUVuZCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5
bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1FbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1FbmQoKTsKfQoKaW5saW5l
IHN0ZDo6c3RyaW5nIEFydHM6OlN5bnRoX0JVU19ET1dOTElOSzo6YnVzbmFtZSgpCnsKICAgICAg
ICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoX0JVU19ET1dOTElOS19iYXNl
Kj4oX2NhY2hlKS0+YnVzbmFtZSgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoX0JVU19ET1dOTElO
S19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5idXNuYW1lKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6
OlN5bnRoX0JVU19ET1dOTElOSzo6YnVzbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVl
KQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aF9CVVNfRE9XTkxJTktf
YmFzZSo+KF9jYWNoZSktPmJ1c25hbWUoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50
aF9CVVNfRE9XTkxJTktfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YnVzbmFtZShfbmV3VmFsdWUp
Owp9CgppbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBBcnRzOjpCeXRlU3RyZWFtVG9BdWRp
bzo6YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz
OjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxB
cnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9
CgppbmxpbmUgdm9pZCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRpbzo6c3RhcnQoKQp7CiAgICAgICAg
IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3Rh
cnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkp
LT5zdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRpbzo6c3RvcCgp
CnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf
Y2FjaGUpLT5zdG9wKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRo
b2RfY2FsbCgpKS0+c3RvcCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRp
bzo6c3RyZWFtSW5pdCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRo
TW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3lu
dGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUg
dm9pZCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRpbzo6c3RyZWFtU3RhcnQoKQp7CiAgICAgICAgIF9j
YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFt
U3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxs
KCkpLT5zdHJlYW1TdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRp
bzo6c3RyZWFtRW5kKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhN
b2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRo
TW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbUVuZCgpOwp9CgppbmxpbmUgbG9u
ZyBBcnRzOjpCeXRlU3RyZWFtVG9BdWRpbzo6c2FtcGxpbmdSYXRlKCkKewogICAgICAgIHJldHVy
biBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVN0cmVhbVRvQXVkaW9fYmFzZSo+KF9jYWNo
ZSktPnNhbXBsaW5nUmF0ZSgpOnN0YXRpY19jYXN0PEFydHM6OkJ5dGVTdHJlYW1Ub0F1ZGlvX2Jh
c2UqPihfbWV0aG9kX2NhbGwoKSktPnNhbXBsaW5nUmF0ZSgpOwp9CgppbmxpbmUgdm9pZCBBcnRz
OjpCeXRlU3RyZWFtVG9BdWRpbzo6c2FtcGxpbmdSYXRlKGxvbmcgX25ld1ZhbHVlKQp7CiAgICAg
ICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpCeXRlU3RyZWFtVG9BdWRpb19iYXNlKj4oX2Nh
Y2hlKS0+c2FtcGxpbmdSYXRlKF9uZXdWYWx1ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVN0cmVh
bVRvQXVkaW9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2FtcGxpbmdSYXRlKF9uZXdWYWx1ZSk7
Cn0KCmlubGluZSBsb25nIEFydHM6OkJ5dGVTdHJlYW1Ub0F1ZGlvOjpjaGFubmVscygpCnsKICAg
ICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkJ5dGVTdHJlYW1Ub0F1ZGlvX2Jh
c2UqPihfY2FjaGUpLT5jaGFubmVscygpOnN0YXRpY19jYXN0PEFydHM6OkJ5dGVTdHJlYW1Ub0F1
ZGlvX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNoYW5uZWxzKCk7Cn0KCmlubGluZSB2b2lkIEFy
dHM6OkJ5dGVTdHJlYW1Ub0F1ZGlvOjpjaGFubmVscyhsb25nIF9uZXdWYWx1ZSkKewogICAgICAg
ICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVN0cmVhbVRvQXVkaW9fYmFzZSo+KF9jYWNo
ZSktPmNoYW5uZWxzKF9uZXdWYWx1ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVN0cmVhbVRvQXVk
aW9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y2hhbm5lbHMoX25ld1ZhbHVlKTsKfQoKaW5saW5l
IGxvbmcgQXJ0czo6Qnl0ZVN0cmVhbVRvQXVkaW86OmJpdHMoKQp7CiAgICAgICAgcmV0dXJuIF9j
YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpCeXRlU3RyZWFtVG9BdWRpb19iYXNlKj4oX2NhY2hlKS0+
Yml0cygpOnN0YXRpY19jYXN0PEFydHM6OkJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2UqPihfbWV0aG9k
X2NhbGwoKSktPmJpdHMoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6Qnl0ZVN0cmVhbVRvQXVkaW86
OmJpdHMobG9uZyBfbmV3VmFsdWUpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6
OkJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2UqPihfY2FjaGUpLT5iaXRzKF9uZXdWYWx1ZSk6c3RhdGlj
X2Nhc3Q8QXJ0czo6Qnl0ZVN0cmVhbVRvQXVkaW9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Yml0
cyhfbmV3VmFsdWUpOwp9CgppbmxpbmUgYm9vbCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRpbzo6cnVu
bmluZygpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkJ5dGVTdHJl
YW1Ub0F1ZGlvX2Jhc2UqPihfY2FjaGUpLT5ydW5uaW5nKCk6c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0
ZVN0cmVhbVRvQXVkaW9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cnVubmluZygpOwp9Cgppbmxp
bmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBBcnRzOjpTdGVyZW9FZmZlY3Q6OmF1dG9TdXNwZW5k
KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf
YmFzZSo+KF9jYWNoZSktPmF1dG9TdXNwZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1
bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YXV0b1N1c3BlbmQoKTsKfQoKaW5saW5lIHZvaWQg
QXJ0czo6U3RlcmVvRWZmZWN0OjpzdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0
PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdGFydCgpOnN0YXRpY19jYXN0PEFy
dHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXJ0KCk7Cn0KCmlubGlu
ZSB2b2lkIEFydHM6OlN0ZXJlb0VmZmVjdDo6c3RvcCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRp
Y19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdG9wKCk6c3RhdGljX2Nh
c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RvcCgpOwp9Cgpp
bmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9FZmZlY3Q6OnN0cmVhbUluaXQoKQp7CiAgICAgICAgIF9j
YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFt
SW5pdCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwo
KSktPnN0cmVhbUluaXQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0OjpzdHJl
YW1TdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxl
X2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9k
dWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlubGluZSB2b2lk
IEFydHM6OlN0ZXJlb0VmZmVjdDo6c3RyZWFtRW5kKCkKewogICAgICAgICBfY2FjaGU/c3RhdGlj
X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUVuZCgpOnN0YXRp
Y19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbUVu
ZCgpOwp9CgppbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBBcnRzOjpTdGVyZW9Wb2x1bWVD
b250cm9sOjphdXRvU3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0
PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRvU3VzcGVuZCgpOnN0YXRpY19j
YXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5k
KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN0ZXJlb1ZvbHVtZUNvbnRyb2w6OnN0YXJ0KCkKewog
ICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNo
ZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2Rf
Y2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvVm9sdW1lQ29udHJv
bDo6c3RvcCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxl
X2Jhc2UqPihfY2FjaGUpLT5zdG9wKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz
ZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RvcCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9W
b2x1bWVDb250cm9sOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2Fz
dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7
Cn0KCmlubGluZSB2b2lkIEFydHM6OlN0ZXJlb1ZvbHVtZUNvbnRyb2w6OnN0cmVhbVN0YXJ0KCkK
ewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9j
YWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+
KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3Rl
cmVvVm9sdW1lQ29udHJvbDo6c3RyZWFtRW5kKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nh
c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUVuZCgpOnN0YXRpY19j
YXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbUVuZCgp
Owp9CgppbmxpbmUgZmxvYXQgQXJ0czo6U3RlcmVvVm9sdW1lQ29udHJvbDo6c2NhbGVGYWN0b3Io
KQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9Wb2x1bWVD
b250cm9sX2Jhc2UqPihfY2FjaGUpLT5zY2FsZUZhY3RvcigpOnN0YXRpY19jYXN0PEFydHM6OlN0
ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2NhbGVGYWN0b3IoKTsK
fQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvVm9sdW1lQ29udHJvbDo6c2NhbGVGYWN0b3IoZmxv
YXQgX25ld1ZhbHVlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9W
b2x1bWVDb250cm9sX2Jhc2UqPihfY2FjaGUpLT5zY2FsZUZhY3RvcihfbmV3VmFsdWUpOnN0YXRp
Y19jYXN0PEFydHM6OlN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+
c2NhbGVGYWN0b3IoX25ld1ZhbHVlKTsKfQoKaW5saW5lIGZsb2F0IEFydHM6OlN0ZXJlb1ZvbHVt
ZUNvbnRyb2w6OmN1cnJlbnRWb2x1bWVMZWZ0KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3Rh
dGljX2Nhc3Q8QXJ0czo6U3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlKj4oX2NhY2hlKS0+Y3VycmVu
dFZvbHVtZUxlZnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9Wb2x1bWVDb250cm9sX2Jhc2Uq
PihfbWV0aG9kX2NhbGwoKSktPmN1cnJlbnRWb2x1bWVMZWZ0KCk7Cn0KCmlubGluZSBmbG9hdCBB
cnRzOjpTdGVyZW9Wb2x1bWVDb250cm9sOjpjdXJyZW50Vm9sdW1lUmlnaHQoKQp7CiAgICAgICAg
cmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9Wb2x1bWVDb250cm9sX2Jhc2Uq
PihfY2FjaGUpLT5jdXJyZW50Vm9sdW1lUmlnaHQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9W
b2x1bWVDb250cm9sX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmN1cnJlbnRWb2x1bWVSaWdodCgp
Owp9CgppbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBBcnRzOjpTdGVyZW9GRlRTY29wZTo6
YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRz
OjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9Cgpp
bmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9GRlRTY29wZTo6c3RhcnQoKQp7CiAgICAgICAgIF9jYWNo
ZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RhcnQoKTpz
dGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdGFy
dCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9GRlRTY29wZTo6c3RvcCgpCnsKICAgICAg
ICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5z
dG9wKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgp
KS0+c3RvcCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9GRlRTY29wZTo6c3RyZWFtSW5p
dCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2Uq
PihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz
ZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpT
dGVyZW9GRlRTY29wZTo6c3RyZWFtU3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2Fz
dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtU3RhcnQoKTpzdGF0aWNf
Y2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1TdGFy
dCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9GRlRTY29wZTo6c3RyZWFtRW5kKCkKewog
ICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNo
ZSktPnN0cmVhbUVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0
aG9kX2NhbGwoKSktPnN0cmVhbUVuZCgpOwp9CgppbmxpbmUgc3RkOjp2ZWN0b3I8ZmxvYXQ+ICog
QXJ0czo6U3RlcmVvRkZUU2NvcGU6OnNjb3BlKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3Rh
dGljX2Nhc3Q8QXJ0czo6U3RlcmVvRkZUU2NvcGVfYmFzZSo+KF9jYWNoZSktPnNjb3BlKCk6c3Rh
dGljX2Nhc3Q8QXJ0czo6U3RlcmVvRkZUU2NvcGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2Nv
cGUoKTsKfQoKaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgQXJ0czo6U3RlcmVvRWZmZWN0
U3RhY2s6OmF1dG9TdXNwZW5kKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPmF1dG9TdXNwZW5kKCk6c3RhdGljX2Nh
c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YXV0b1N1c3BlbmQo
KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2s6OnN0YXJ0KCkKewogICAg
ICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSkt
PnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2Fs
bCgpKS0+c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2s6OnN0
b3AoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl
Kj4oX2NhY2hlKS0+c3RvcCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf
bWV0aG9kX2NhbGwoKSktPnN0b3AoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0
U3RhY2s6OnN0cmVhbUluaXQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtSW5pdCgpOnN0YXRpY19jYXN0PEFydHM6
OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbUluaXQoKTsKfQoKaW5s
aW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2s6OnN0cmVhbVN0YXJ0KCkKewogICAgICAg
ICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0
cmVhbVN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2Rf
Y2FsbCgpKS0+c3RyZWFtU3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0
U3RhY2s6OnN0cmVhbUVuZCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5
bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1FbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpT
eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1FbmQoKTsKfQoKaW5saW5l
IGxvbmcgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2s6Omluc2VydFRvcChBcnRzOjpTdGVyZW9FZmZl
Y3QgZWZmZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKewogICAgICAgIHJldHVybiBfY2Fj
aGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3RlcmVvRWZmZWN0U3RhY2tfYmFzZSo+KF9jYWNoZSktPmlu
c2VydFRvcChlZmZlY3QsIG5hbWUpOnN0YXRpY19jYXN0PEFydHM6OlN0ZXJlb0VmZmVjdFN0YWNr
X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmluc2VydFRvcChlZmZlY3QsIG5hbWUpOwp9Cgppbmxp
bmUgbG9uZyBBcnRzOjpTdGVyZW9FZmZlY3RTdGFjazo6aW5zZXJ0Qm90dG9tKEFydHM6OlN0ZXJl
b0VmZmVjdCBlZmZlY3QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQp7CiAgICAgICAgcmV0dXJu
IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9FZmZlY3RTdGFja19iYXNlKj4oX2NhY2hl
KS0+aW5zZXJ0Qm90dG9tKGVmZmVjdCwgbmFtZSk6c3RhdGljX2Nhc3Q8QXJ0czo6U3RlcmVvRWZm
ZWN0U3RhY2tfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+aW5zZXJ0Qm90dG9tKGVmZmVjdCwgbmFt
ZSk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN0ZXJlb0VmZmVjdFN0YWNrOjpyZW1vdmUobG9uZyBJ
RCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3RlcmVvRWZmZWN0U3RhY2tf
YmFzZSo+KF9jYWNoZSktPnJlbW92ZShJRCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3RlcmVvRWZmZWN0
U3RhY2tfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cmVtb3ZlKElEKTsKfQoKaW5saW5lIGxvbmcg
QXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50OjpJRCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0
YXRpY19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudF9iYXNlKj4oX2NhY2hlKS0+SUQoKTpz
dGF0aWNfY2FzdDxBcnRzOjpBdWRpb01hbmFnZXJDbGllbnRfYmFzZSo+KF9tZXRob2RfY2FsbCgp
KS0+SUQoKTsKfQoKaW5saW5lIEFydHM6OkF1ZGlvTWFuYWdlckRpcmVjdGlvbiBBcnRzOjpBdWRp
b01hbmFnZXJDbGllbnQ6OmRpcmVjdGlvbigpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRp
Y19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudF9iYXNlKj4oX2NhY2hlKS0+ZGlyZWN0aW9u
KCk6c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UqPihfbWV0aG9kX2Nh
bGwoKSktPmRpcmVjdGlvbigpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpBdWRpb01hbmFnZXJDbGll
bnQ6OmRpcmVjdGlvbihBcnRzOjpBdWRpb01hbmFnZXJEaXJlY3Rpb24gX25ld1ZhbHVlKQp7CiAg
ICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpBdWRpb01hbmFnZXJDbGllbnRfYmFzZSo+
KF9jYWNoZSktPmRpcmVjdGlvbihfbmV3VmFsdWUpOnN0YXRpY19jYXN0PEFydHM6OkF1ZGlvTWFu
YWdlckNsaWVudF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5kaXJlY3Rpb24oX25ld1ZhbHVlKTsK
fQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudDo6dGl0bGUoKQp7
CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpBdWRpb01hbmFnZXJDbGll
bnRfYmFzZSo+KF9jYWNoZSktPnRpdGxlKCk6c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5hZ2Vy
Q2xpZW50X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnRpdGxlKCk7Cn0KCmlubGluZSB2b2lkIEFy
dHM6OkF1ZGlvTWFuYWdlckNsaWVudDo6dGl0bGUoY29uc3Qgc3RkOjpzdHJpbmcmIF9uZXdWYWx1
ZSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50
X2Jhc2UqPihfY2FjaGUpLT50aXRsZShfbmV3VmFsdWUpOnN0YXRpY19jYXN0PEFydHM6OkF1ZGlv
TWFuYWdlckNsaWVudF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT50aXRsZShfbmV3VmFsdWUpOwp9
CgppbmxpbmUgc3RkOjpzdHJpbmcgQXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50OjphdXRvUmVzdG9y
ZUlEKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5h
Z2VyQ2xpZW50X2Jhc2UqPihfY2FjaGUpLT5hdXRvUmVzdG9yZUlEKCk6c3RhdGljX2Nhc3Q8QXJ0
czo6QXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9SZXN0b3Jl
SUQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50OjphdXRvUmVzdG9y
ZUlEKGNvbnN0IHN0ZDo6c3RyaW5nJiBfbmV3VmFsdWUpCnsKICAgICAgICAgX2NhY2hlP3N0YXRp
Y19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudF9iYXNlKj4oX2NhY2hlKS0+YXV0b1Jlc3Rv
cmVJRChfbmV3VmFsdWUpOnN0YXRpY19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudF9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvUmVzdG9yZUlEKF9uZXdWYWx1ZSk7Cn0KCmlubGluZSBB
cnRzOjpBdWRpb01hbmFnZXJDbGllbnQ6OkF1ZGlvTWFuYWdlckNsaWVudChBcnRzOjpBdWRpb01h
bmFnZXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyYgdGl0bGUsIGNvbnN0
IHN0ZDo6c3RyaW5nJiBhdXRvUmVzdG9yZUlEKQogICAgICAgICAgICAgICAgOiBBcnRzOjpPYmpl
Y3QoQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2U6Ol9jcmVhdGUoKSkKewogICAgICAgIHN0YXRpY19j
YXN0PEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jb25z
dHJ1Y3RvcihkaXJlY3Rpb24sIHRpdGxlLCBhdXRvUmVzdG9yZUlEKTsKfQoKaW5saW5lIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIEFydHM6OkF1ZGlvTWFuYWdlcjo6ZGVzdGluYXRpb25zKCkK
ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5hZ2VyX2Jh
c2UqPihfY2FjaGUpLT5kZXN0aW5hdGlvbnMoKTpzdGF0aWNfY2FzdDxBcnRzOjpBdWRpb01hbmFn
ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZGVzdGluYXRpb25zKCk7Cn0KCmlubGluZSBzdGQ6
OnZlY3RvcjxBcnRzOjpBdWRpb01hbmFnZXJJbmZvPiAqIEFydHM6OkF1ZGlvTWFuYWdlcjo6Y2xp
ZW50cygpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkF1ZGlvTWFu
YWdlcl9iYXNlKj4oX2NhY2hlKS0+Y2xpZW50cygpOnN0YXRpY19jYXN0PEFydHM6OkF1ZGlvTWFu
YWdlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jbGllbnRzKCk7Cn0KCmlubGluZSBsb25nIEFy
dHM6OkF1ZGlvTWFuYWdlcjo6Y2hhbmdlcygpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRp
Y19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlcl9iYXNlKj4oX2NhY2hlKS0+Y2hhbmdlcygpOnN0YXRp
Y19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jaGFuZ2Vz
KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkF1ZGlvTWFuYWdlcjo6c2V0RGVzdGluYXRpb24obG9u
ZyBJRCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlc3RpbmF0aW9uKQp7CiAgICAgICAgIF9jYWNoZT9z
dGF0aWNfY2FzdDxBcnRzOjpBdWRpb01hbmFnZXJfYmFzZSo+KF9jYWNoZSktPnNldERlc3RpbmF0
aW9uKElELCBkZXN0aW5hdGlvbik6c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5hZ2VyX2Jhc2Uq
PihfbWV0aG9kX2NhbGwoKSktPnNldERlc3RpbmF0aW9uKElELCBkZXN0aW5hdGlvbik7Cn0KCmlu
bGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoX0FNQU5fUExBWTo6YXV0b1N1
c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v
ZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50
aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9CgppbmxpbmUg
dm9pZCBBcnRzOjpTeW50aF9BTUFOX1BMQVk6OnN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3Rh
dGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0KCk6c3RhdGlj
X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RhcnQoKTsK
fQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9QTEFZOjpzdG9wKCkKewogICAgICAgICBf
Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3Ao
KTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5z
dG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0FNQU5fUExBWTo6c3RyZWFtSW5pdCgp
CnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf
Y2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+
KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50
aF9BTUFOX1BMQVk6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nh
c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQo
KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9QTEFZOjpzdHJlYW1FbmQoKQp7CiAg
ICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hl
KS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRo
b2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBBcnRzOjpTeW50
aF9BTUFOX1BMQVk6OnRpdGxlKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6U3ludGhfQU1BTl9QTEFZX2Jhc2UqPihfY2FjaGUpLT50aXRsZSgpOnN0YXRpY19jYXN0
PEFydHM6OlN5bnRoX0FNQU5fUExBWV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT50aXRsZSgpOwp9
CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9BTUFOX1BMQVk6OnRpdGxlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBfbmV3VmFsdWUpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRo
X0FNQU5fUExBWV9iYXNlKj4oX2NhY2hlKS0+dGl0bGUoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxB
cnRzOjpTeW50aF9BTUFOX1BMQVlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+dGl0bGUoX25ld1Zh
bHVlKTsKfQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6OlN5bnRoX0FNQU5fUExBWTo6YXV0b1Jl
c3RvcmVJRCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRo
X0FNQU5fUExBWV9iYXNlKj4oX2NhY2hlKS0+YXV0b1Jlc3RvcmVJRCgpOnN0YXRpY19jYXN0PEFy
dHM6OlN5bnRoX0FNQU5fUExBWV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvUmVzdG9yZUlE
KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0FNQU5fUExBWTo6YXV0b1Jlc3RvcmVJRChj
b25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2Fz
dDxBcnRzOjpTeW50aF9BTUFOX1BMQVlfYmFzZSo+KF9jYWNoZSktPmF1dG9SZXN0b3JlSUQoX25l
d1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aF9BTUFOX1BMQVlfYmFzZSo+KF9tZXRob2Rf
Y2FsbCgpKS0+YXV0b1Jlc3RvcmVJRChfbmV3VmFsdWUpOwp9CgppbmxpbmUgQXJ0czo6U3ludGhf
QU1BTl9QTEFZOjpTeW50aF9BTUFOX1BMQVkoQXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50IGNsaWVu
dCkKICAgICAgICAgICAgICAgIDogQXJ0czo6T2JqZWN0KFN5bnRoX0FNQU5fUExBWV9iYXNlOjpf
Y3JlYXRlKCkpCnsKICAgICAgICBzdGF0aWNfY2FzdDxBcnRzOjpTeW50aF9BTUFOX1BMQVlfYmFz
ZSo+KF9tZXRob2RfY2FsbCgpKS0+Y29uc3RydWN0b3IoY2xpZW50KTsKfQoKaW5saW5lIEFydHM6
OkF1dG9TdXNwZW5kU3RhdGUgQXJ0czo6U3ludGhfQU1BTl9SRUNPUkQ6OmF1dG9TdXNwZW5kKCkK
ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz
ZSo+KF9jYWNoZSktPmF1dG9TdXNwZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf
YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YXV0b1N1c3BlbmQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0
czo6U3ludGhfQU1BTl9SRUNPUkQ6OnN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nh
c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8
QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5s
aW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9SRUNPUkQ6OnN0b3AoKQp7CiAgICAgICAgIF9jYWNo
ZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RvcCgpOnN0
YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0b3Ao
KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9SRUNPUkQ6OnN0cmVhbUluaXQoKQp7
CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2Nh
Y2hlKS0+c3RyZWFtSW5pdCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf
bWV0aG9kX2NhbGwoKSktPnN0cmVhbUluaXQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhf
QU1BTl9SRUNPUkQ6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nh
c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQo
KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9SRUNPUkQ6OnN0cmVhbUVuZCgpCnsK
ICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2Fj
aGUpLT5zdHJlYW1FbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21l
dGhvZF9jYWxsKCkpLT5zdHJlYW1FbmQoKTsKfQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6OlN5
bnRoX0FNQU5fUkVDT1JEOjp0aXRsZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19j
YXN0PEFydHM6OlN5bnRoX0FNQU5fUkVDT1JEX2Jhc2UqPihfY2FjaGUpLT50aXRsZSgpOnN0YXRp
Y19jYXN0PEFydHM6OlN5bnRoX0FNQU5fUkVDT1JEX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnRp
dGxlKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0FNQU5fUkVDT1JEOjp0aXRsZShjb25z
dCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxB
cnRzOjpTeW50aF9BTUFOX1JFQ09SRF9iYXNlKj4oX2NhY2hlKS0+dGl0bGUoX25ld1ZhbHVlKTpz
dGF0aWNfY2FzdDxBcnRzOjpTeW50aF9BTUFOX1JFQ09SRF9iYXNlKj4oX21ldGhvZF9jYWxsKCkp
LT50aXRsZShfbmV3VmFsdWUpOwp9CgppbmxpbmUgc3RkOjpzdHJpbmcgQXJ0czo6U3ludGhfQU1B
Tl9SRUNPUkQ6OmF1dG9SZXN0b3JlSUQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNf
Y2FzdDxBcnRzOjpTeW50aF9BTUFOX1JFQ09SRF9iYXNlKj4oX2NhY2hlKS0+YXV0b1Jlc3RvcmVJ
RCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoX0FNQU5fUkVDT1JEX2Jhc2UqPihfbWV0aG9kX2Nh
bGwoKSktPmF1dG9SZXN0b3JlSUQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9S
RUNPUkQ6OmF1dG9SZXN0b3JlSUQoY29uc3Qgc3RkOjpzdHJpbmcmIF9uZXdWYWx1ZSkKewogICAg
ICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhfQU1BTl9SRUNPUkRfYmFzZSo+KF9j
YWNoZSktPmF1dG9SZXN0b3JlSUQoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aF9B
TUFOX1JFQ09SRF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvUmVzdG9yZUlEKF9uZXdWYWx1
ZSk7Cn0KCmlubGluZSBBcnRzOjpTeW50aF9BTUFOX1JFQ09SRDo6U3ludGhfQU1BTl9SRUNPUkQo
QXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50IGNsaWVudCkKICAgICAgICAgICAgICAgIDogQXJ0czo6
T2JqZWN0KFN5bnRoX0FNQU5fUkVDT1JEX2Jhc2U6Ol9jcmVhdGUoKSkKewogICAgICAgIHN0YXRp
Y19jYXN0PEFydHM6OlN5bnRoX0FNQU5fUkVDT1JEX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNv
bnN0cnVjdG9yKGNsaWVudCk7Cn0KCn07CiMgMTAgInNvdW5kc2VydmVyLmgiIDIKIyAxICJrbWVk
aWEyLmgiIDEKCgoKCgojIDEgIi4uLy4uL2FydHMvbWNvcC9jb21tb24uaCIgMQojIDcgImttZWRp
YTIuaCIgMgoKCiMgMSAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDEKIyAxMCAia21lZGlh
Mi5oIiAyCgpuYW1lc3BhY2UgQXJ0cyB7CmVudW0gcG9TdGF0ZSB7cG9zSWRsZSA9IDAsIHBvc1Bs
YXlpbmcgPSAxLCBwb3NQYXVzZWQgPSAyfTsKZW51bSBwb0NhcGFiaWxpdGllcyB7Y2FwU2VlayA9
IDEsIGNhcFBhdXNlID0gMn07Cn07Cm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgcG9UaW1lIDogcHVi
bGljIEFydHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgcG9UaW1lKCk7CiAgICAgICAgcG9UaW1l
KGxvbmcgX2Ffc2Vjb25kcywgbG9uZyBfYV9tcywgZmxvYXQgX2FfY3VzdG9tLCBjb25zdCBzdGQ6
OnN0cmluZyYgX2FfY3VzdG9tVW5pdCk7CiAgICAgICAgcG9UaW1lKEFydHM6OkJ1ZmZlciYgc3Ry
ZWFtKTsKICAgICAgICBwb1RpbWUoY29uc3QgcG9UaW1lJiBjb3B5VHlwZSk7CiAgICAgICAgcG9U
aW1lJiBvcGVyYXRvcj0oY29uc3QgcG9UaW1lJiBhc3NpZ25UeXBlKTsKICAgICAgICBsb25nIHNl
Y29uZHM7CiAgICAgICAgbG9uZyBtczsKICAgICAgICBmbG9hdCBjdXN0b207CiAgICAgICAgc3Rk
OjpzdHJpbmcgY3VzdG9tVW5pdDsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6QnVmZmVy
JiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKSBj
b25zdDsKfTsKCn07Cm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgUGxheU9iamVjdF9wcml2YXRlOwpj
bGFzcyBQbGF5T2JqZWN0OwpjbGFzcyBQbGF5T2JqZWN0RmFjdG9yeTsKY2xhc3MgSW5wdXRTdHJl
YW07CmNsYXNzIEZpbGVJbnB1dFN0cmVhbTsKY2xhc3MgU3Rkb3V0V3JpdGVyOwpjbGFzcyBTdHJl
YW1QbGF5T2JqZWN0OwpjbGFzcyBQbGF5T2JqZWN0RmFjdG9yeVYyOwoKY2xhc3MgUGxheU9iamVj
dF9wcml2YXRlX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3RfYmFzZSB7CnB1Ymxp
YzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgUGxh
eU9iamVjdF9wcml2YXRlX2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNz
ID0gIkFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZSIpOwogICAgICAgIHN0YXRpYyBQbGF5T2JqZWN0
X3ByaXZhdGVfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAg
ICBzdGF0aWMgUGxheU9iamVjdF9wcml2YXRlX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9i
amVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMgUGxheU9i
amVjdF9wcml2YXRlX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBv
YmplY3QpOwogICAgICAgIGlubGluZSBQbGF5T2JqZWN0X3ByaXZhdGVfYmFzZSAqX2NvcHkoKSB7
CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwog
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2
aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7
CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVh
bCBib29sIGxvYWRNZWRpYShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpID0gMDsKfTsKCmNs
YXNzIFBsYXlPYmplY3RfcHJpdmF0ZV9zdHViIDogdmlydHVhbCBwdWJsaWMgUGxheU9iamVjdF9w
cml2YXRlX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9zdHViIHsKcHJvdGVjdGVk
OgogICAgICAgIFBsYXlPYmplY3RfcHJpdmF0ZV9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgUGxh
eU9iamVjdF9wcml2YXRlX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBv
YmplY3RJRCk7CgogICAgICAgIGJvb2wgbG9hZE1lZGlhKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxl
bmFtZSk7Cn07CgpjbGFzcyBQbGF5T2JqZWN0X3ByaXZhdGVfc2tlbCA6IHZpcnR1YWwgcHVibGlj
IFBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc2tl
bCB7CnB1YmxpYzoKICAgICAgICBQbGF5T2JqZWN0X3ByaXZhdGVfc2tlbCgpOwoKICAgICAgICBz
dGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJp
bmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0
IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRh
YmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6
OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21j
b3AvcmVmZXJlbmNlLmgiIDEKIyA5MCAia21lZGlhMi5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xh
c3MgUGxheU9iamVjdF9wcml2YXRlIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAg
ICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFBsYXlP
YmplY3RfcHJpdmF0ZV9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RfcHJp
dmF0ZV9iYXNlICpfbWV0aG9kX2NhbGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tj
cmVhdGUoKTsKICAgICAgICAgICAgICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIF9jYWNoZT0oUGxheU9iamVjdF9wcml2YXRlX2Jhc2UgKilfcG9vbC0+YmFzZS0+
X2Nhc3QoUGxheU9iamVjdF9wcml2YXRlX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJu
IF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3Rf
cHJpdmF0ZShQbGF5T2JqZWN0X3ByaXZhdGVfYmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9j
YWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIFBsYXlPYmplY3RfcHJpdmF0ZV9i
YXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgUGxheU9iamVjdF9wcml2YXRlKCkgOiBB
cnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgUGxheU9i
amVjdF9wcml2YXRlKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBB
cnRzOjpPYmplY3QoUGxheU9iamVjdF9wcml2YXRlX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkp
LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgUGxheU9iamVjdF9wcml2YXRlKGNvbnN0IEFy
dHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJp
bmcoKT8oUGxheU9iamVjdF9wcml2YXRlX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKToo
UGxheU9iamVjdF9wcml2YXRlX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1
ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RfcHJpdmF0ZShjb25z
dCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoUGxheU9iamVjdF9wcml2YXRl
X2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAg
ICBpbmxpbmUgUGxheU9iamVjdF9wcml2YXRlKGNvbnN0IFBsYXlPYmplY3RfcHJpdmF0ZSYgdGFy
Z2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkg
e30KICAgICAgICBpbmxpbmUgUGxheU9iamVjdF9wcml2YXRlKEFydHM6Ok9iamVjdDo6UG9vbCYg
cCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMg
UGxheU9iamVjdF9wcml2YXRlIG51bGwoKSB7cmV0dXJuIFBsYXlPYmplY3RfcHJpdmF0ZSgoUGxh
eU9iamVjdF9wcml2YXRlX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIFBsYXlPYmpl
Y3RfcHJpdmF0ZSBfZnJvbV9iYXNlKFBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlKiBiKSB7cmV0dXJu
IFBsYXlPYmplY3RfcHJpdmF0ZShiKTt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RfcHJpdmF0
ZSYgb3BlcmF0b3I9KGNvbnN0IFBsYXlPYmplY3RfcHJpdmF0ZSYgdGFyZ2V0KSB7CiAgICAgICAg
ICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAgICAgICAg
ICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdldC5fcG9v
bDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAgICAgICAg
ICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQog
ICAgICAgIGlubGluZSBQbGF5T2JqZWN0X3ByaXZhdGVfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9j
YWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgYm9vbCBsb2FkTWVk
aWEoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKTsKfTsKCmNsYXNzIFBsYXlPYmplY3RfYmFz
ZSA6IHZpcnR1YWwgcHVibGljIEFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlIHsKcHVibGlj
OgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBQbGF5
T2JqZWN0X2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6
OlBsYXlPYmplY3QiKTsKICAgICAgICBzdGF0aWMgUGxheU9iamVjdF9iYXNlICpfZnJvbVN0cmlu
ZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBQbGF5T2JqZWN0X2Jhc2Ug
Kl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkp
OwoKICAgICAgICBzdGF0aWMgUGxheU9iamVjdF9iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0
IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUgUGxheU9iamVjdF9iYXNlICpf
Y29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVm
Q250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZp
cnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0Owog
ICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQo
KSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAg
ICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGRlc2NyaXB0aW9uKCkgPSAwOwogICAgICAgIHZpcnR1YWwg
QXJ0czo6cG9UaW1lIGN1cnJlbnRUaW1lKCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0czo6cG9U
aW1lIG92ZXJhbGxUaW1lKCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0czo6cG9DYXBhYmlsaXRp
ZXMgY2FwYWJpbGl0aWVzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgbWVkaWFO
YW1lKCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0czo6cG9TdGF0ZSBzdGF0ZSgpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vlayhj
b25zdCBBcnRzOjpwb1RpbWUmIG5ld1RpbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcGF1
c2UoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGhhbHQoKSA9IDA7Cn07CgpjbGFzcyBQbGF5
T2JqZWN0X3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBQbGF5T2JqZWN0X2Jhc2UsIHZpcnR1YWwgcHVi
bGljIEFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFBs
YXlPYmplY3Rfc3R1YigpOwoKcHVibGljOgogICAgICAgIFBsYXlPYmplY3Rfc3R1YihBcnRzOjpD
b25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgc3RkOjpzdHJp
bmcgZGVzY3JpcHRpb24oKTsKICAgICAgICBBcnRzOjpwb1RpbWUgY3VycmVudFRpbWUoKTsKICAg
ICAgICBBcnRzOjpwb1RpbWUgb3ZlcmFsbFRpbWUoKTsKICAgICAgICBBcnRzOjpwb0NhcGFiaWxp
dGllcyBjYXBhYmlsaXRpZXMoKTsKICAgICAgICBzdGQ6OnN0cmluZyBtZWRpYU5hbWUoKTsKICAg
ICAgICBBcnRzOjpwb1N0YXRlIHN0YXRlKCk7CiAgICAgICAgdm9pZCBwbGF5KCk7CiAgICAgICAg
dm9pZCBzZWVrKGNvbnN0IEFydHM6OnBvVGltZSYgbmV3VGltZSk7CiAgICAgICAgdm9pZCBwYXVz
ZSgpOwogICAgICAgIHZvaWQgaGFsdCgpOwp9OwoKY2xhc3MgUGxheU9iamVjdF9za2VsIDogdmly
dHVhbCBwdWJsaWMgUGxheU9iamVjdF9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQbGF5T2Jq
ZWN0X3ByaXZhdGVfc2tlbCB7CnByb3RlY3RlZDoKCiAgICAgICAgaW5saW5lIHZvaWQgZGVzY3Jp
cHRpb25fY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAgICAgICAg
ICAgIF9lbWl0X2NoYW5nZWQoImRlc2NyaXB0aW9uX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAg
ICB9CiAgICAgICAgaW5saW5lIHZvaWQgbWVkaWFOYW1lX2NoYW5nZWQoY29uc3Qgc3RkOjpzdHJp
bmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJtZWRpYU5hbWVf
Y2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAgICAgICBQbGF5T2JqZWN0
X3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgp
OwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXND
b21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAg
dm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVm
ZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07
CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMjA3ICJrbWVkaWEyLmgiIDIK
bmFtZXNwYWNlIEFydHMgewpjbGFzcyBQbGF5T2JqZWN0IDogcHVibGljIEFydHM6Ok9iamVjdCB7
CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwog
ICAgICAgIFBsYXlPYmplY3RfYmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBQbGF5T2JqZWN0
X2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0
ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgX2NhY2hlPShQbGF5T2JqZWN0X2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoUGxheU9i
amVjdF9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoK
cHJvdGVjdGVkOgogICAgICAgIGlubGluZSBQbGF5T2JqZWN0KFBsYXlPYmplY3RfYmFzZSogYikg
OiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVm
IFBsYXlPYmplY3RfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFBsYXlPYmplY3Qo
KSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBQ
bGF5T2JqZWN0KGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRz
OjpPYmplY3QoUGxheU9iamVjdF9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwgX2NhY2hlKDAp
IHt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3QoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6
CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhQbGF5T2JqZWN0X2Jh
c2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooUGxheU9iamVjdF9iYXNlOjpfZnJvbVJlZmVy
ZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBQ
bGF5T2JqZWN0KGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChQbGF5
T2JqZWN0X2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30K
ICAgICAgICBpbmxpbmUgUGxheU9iamVjdChjb25zdCBQbGF5T2JqZWN0JiB0YXJnZXQpIDogQXJ0
czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAg
IGlubGluZSBQbGF5T2JqZWN0KEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3Qo
cCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgUGxheU9iamVjdCBudWxsKCkg
e3JldHVybiBQbGF5T2JqZWN0KChQbGF5T2JqZWN0X2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUg
c3RhdGljIFBsYXlPYmplY3QgX2Zyb21fYmFzZShQbGF5T2JqZWN0X2Jhc2UqIGIpIHtyZXR1cm4g
UGxheU9iamVjdChiKTt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3QmIG9wZXJhdG9yPShjb25z
dCBQbGF5T2JqZWN0JiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJn
ZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAg
ICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hl
ID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFy
dHM6OlBsYXlPYmplY3RfcHJpdmF0ZSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlBsYXlPYmplY3Rf
cHJpdmF0ZSgqX3Bvb2wpOyB9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RfYmFzZSogX2Jhc2Uo
KSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUg
Ym9vbCBsb2FkTWVkaWEoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKTsKICAgICAgICBpbmxp
bmUgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb24oKTsKICAgICAgICBpbmxpbmUgQXJ0czo6cG9UaW1l
IGN1cnJlbnRUaW1lKCk7CiAgICAgICAgaW5saW5lIEFydHM6OnBvVGltZSBvdmVyYWxsVGltZSgp
OwogICAgICAgIGlubGluZSBBcnRzOjpwb0NhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMoKTsKICAg
ICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgbWVkaWFOYW1lKCk7CiAgICAgICAgaW5saW5lIEFydHM6
OnBvU3RhdGUgc3RhdGUoKTsKICAgICAgICBpbmxpbmUgdm9pZCBwbGF5KCk7CiAgICAgICAgaW5s
aW5lIHZvaWQgc2Vlayhjb25zdCBBcnRzOjpwb1RpbWUmIG5ld1RpbWUpOwogICAgICAgIGlubGlu
ZSB2b2lkIHBhdXNlKCk7CiAgICAgICAgaW5saW5lIHZvaWQgaGFsdCgpOwp9OwoKY2xhc3MgUGxh
eU9iamVjdEZhY3RvcnlfYmFzZSA6IHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9iYXNlIHsK
cHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRp
YyBQbGF5T2JqZWN0RmFjdG9yeV9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJD
bGFzcyA9ICJBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeSIpOwogICAgICAgIHN0YXRpYyBQbGF5T2Jq
ZWN0RmFjdG9yeV9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAg
ICAgIHN0YXRpYyBQbGF5T2JqZWN0RmFjdG9yeV9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpP
YmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFBsYXlP
YmplY3RGYWN0b3J5X2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBv
YmplY3QpOwogICAgICAgIGlubGluZSBQbGF5T2JqZWN0RmFjdG9yeV9iYXNlICpfY29weSgpIHsK
ICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZp
cnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsK
CiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFs
IEFydHM6OlBsYXlPYmplY3QgY3JlYXRlUGxheU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgZmls
ZW5hbWUpID0gMDsKfTsKCmNsYXNzIFBsYXlPYmplY3RGYWN0b3J5X3N0dWIgOiB2aXJ0dWFsIHB1
YmxpYyBQbGF5T2JqZWN0RmFjdG9yeV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rf
c3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBQbGF5T2JqZWN0RmFjdG9yeV9zdHViKCk7CgpwdWJs
aWM6CiAgICAgICAgUGxheU9iamVjdEZhY3Rvcnlfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25u
ZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgQXJ0czo6UGxheU9iamVjdCBjcmVhdGVQ
bGF5T2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7Cn07CgpjbGFzcyBQbGF5T2Jq
ZWN0RmFjdG9yeV9za2VsIDogdmlydHVhbCBwdWJsaWMgUGxheU9iamVjdEZhY3RvcnlfYmFzZSwg
dmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X3NrZWwgewpwdWJsaWM6CiAgICAgICAgUGxheU9i
amVjdEZhY3Rvcnlfc2tlbCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFj
ZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAg
ICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1l
KTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRj
aChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9k
SUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyAzMDggImtt
ZWRpYTIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFBsYXlPYmplY3RGYWN0b3J5IDogcHVi
bGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9i
YXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFBsYXlPYmplY3RGYWN0b3J5X2Jhc2UgKl9jYWNoZTsK
ICAgICAgICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnlfYmFzZSAqX21ldGhvZF9jYWxsKCkgewog
ICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihf
cG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFBsYXlPYmplY3RG
YWN0b3J5X2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoUGxheU9iamVjdEZhY3RvcnlfYmFzZTo6
X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoK
ICAgICAgICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnkoUGxheU9iamVjdEZhY3RvcnlfYmFzZSog
YikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBl
ZGVmIFBsYXlPYmplY3RGYWN0b3J5X2Jhc2UgX2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGluZSBQ
bGF5T2JqZWN0RmFjdG9yeSgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9
CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RGYWN0b3J5KGNvbnN0IEFydHM6OlN1YkNsYXNzJiBz
KSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoUGxheU9iamVjdEZhY3RvcnlfYmFzZTo6
X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBQbGF5T2Jq
ZWN0RmFjdG9yeShjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFy
dHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFBsYXlPYmplY3RGYWN0b3J5X2Jhc2U6Ol9mcm9tU3Ry
aW5nKHIuc3RyaW5nKCkpKTooUGxheU9iamVjdEZhY3RvcnlfYmFzZTo6X2Zyb21SZWZlcmVuY2Uo
ci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgUGxheU9i
amVjdEZhY3RvcnkoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KFBs
YXlPYmplY3RGYWN0b3J5X2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2Fj
aGUoMCkge30KICAgICAgICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnkoY29uc3QgUGxheU9iamVj
dEZhY3RvcnkmIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRh
cmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RGYWN0b3J5KEFydHM6Ok9i
amVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlu
bGluZSBzdGF0aWMgUGxheU9iamVjdEZhY3RvcnkgbnVsbCgpIHtyZXR1cm4gUGxheU9iamVjdEZh
Y3RvcnkoKFBsYXlPYmplY3RGYWN0b3J5X2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGlj
IFBsYXlPYmplY3RGYWN0b3J5IF9mcm9tX2Jhc2UoUGxheU9iamVjdEZhY3RvcnlfYmFzZSogYikg
e3JldHVybiBQbGF5T2JqZWN0RmFjdG9yeShiKTt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RG
YWN0b3J5JiBvcGVyYXRvcj0oY29uc3QgUGxheU9iamVjdEZhY3RvcnkmIHRhcmdldCkgewogICAg
ICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAg
ICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQu
X3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAg
ICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAg
IH0KICAgICAgICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnlfYmFzZSogX2Jhc2UoKSB7cmV0dXJu
IF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgQXJ0czo6UGxh
eU9iamVjdCBjcmVhdGVQbGF5T2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7Cn07
CgpjbGFzcyBJbnB1dFN0cmVhbV9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1
bGVfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAg
ICAgICBzdGF0aWMgSW5wdXRTdHJlYW1fYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYg
c3ViQ2xhc3MgPSAiQXJ0czo6SW5wdXRTdHJlYW0iKTsKICAgICAgICBzdGF0aWMgSW5wdXRTdHJl
YW1fYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0
aWMgSW5wdXRTdHJlYW1fYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNl
IHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBJbnB1dFN0cmVhbV9iYXNlICpf
ZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxp
bmUgSW5wdXRTdHJlYW1fYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDAp
OwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVm
YXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2ln
bmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVhbCBib29sIGVvZigpID0gMDsKICAgICAgICB2
aXJ0dWFsIGxvbmcgc2l6ZSgpID0gMDsKICAgICAgICB2aXJ0dWFsIGJvb2wgc2Vla09rKCkgPSAw
OwogICAgICAgIHZpcnR1YWwgbG9uZyBzZWVrKGxvbmcgcG9zaXRpb24pID0gMDsKfTsKCmNsYXNz
IElucHV0U3RyZWFtX3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBJbnB1dFN0cmVhbV9iYXNlLCB2aXJ0
dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIElu
cHV0U3RyZWFtX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBJbnB1dFN0cmVhbV9zdHViKEFydHM6
OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICBib29sIGVv
ZigpOwogICAgICAgIGxvbmcgc2l6ZSgpOwogICAgICAgIGJvb2wgc2Vla09rKCk7CiAgICAgICAg
bG9uZyBzZWVrKGxvbmcgcG9zaXRpb24pOwp9OwoKY2xhc3MgSW5wdXRTdHJlYW1fc2tlbCA6IHZp
cnR1YWwgcHVibGljIElucHV0U3RyZWFtX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRo
TW9kdWxlX3NrZWwgewpwcm90ZWN0ZWQ6CgogICAgICAgIEFydHM6OkJ5dGVBc3luY1N0cmVhbSBv
dXRkYXRhOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3Rfb3V0ZGF0YShBcnRzOjpEYXRh
UGFja2V0PEFydHM6Om1jb3BieXRlPiAqKTsKCnByb3RlY3RlZDoKCiAgICAgICAgaW5saW5lIHZv
aWQgZW9mX2NoYW5nZWQoYm9vbCBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hh
bmdlZCgiZW9mX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZv
aWQgc2l6ZV9jaGFuZ2VkKGxvbmcgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2No
YW5nZWQoInNpemVfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUg
dm9pZCBzZWVrT2tfY2hhbmdlZChib29sIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1p
dF9jaGFuZ2VkKCJzZWVrT2tfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoK
ICAgICAgICBJbnB1dFN0cmVhbV9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBf
aW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgp
OwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVy
ZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lk
IGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9u
ZyBtZXRob2RJRCk7CiAgICAgICAgdm9pZCBub3RpZnkoY29uc3QgQXJ0czo6Tm90aWZpY2F0aW9u
JiBub3RpZmljYXRpb24pOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgi
IDEKIyA0MjQgImttZWRpYTIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIElucHV0U3RyZWFt
IDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9i
amVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIElucHV0U3RyZWFtX2Jhc2UgKl9jYWNoZTsK
ICAgICAgICBpbmxpbmUgSW5wdXRTdHJlYW1fYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAg
ICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+
YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KElucHV0U3RyZWFtX2Jhc2Ug
KilfcG9vbC0+YmFzZS0+X2Nhc3QoSW5wdXRTdHJlYW1fYmFzZTo6X0lJRCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgSW5w
dXRTdHJlYW0oSW5wdXRTdHJlYW1fYmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgw
KSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIElucHV0U3RyZWFtX2Jhc2UgX2Jhc2VfY2xh
c3M7CgogICAgICAgIGlubGluZSBJbnB1dFN0cmVhbSgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9y
KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIElucHV0U3RyZWFtKGNvbnN0IEFydHM6OlN1
YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoSW5wdXRTdHJlYW1fYmFz
ZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBJbnB1
dFN0cmVhbShjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6
Ok9iamVjdChyLmlzU3RyaW5nKCk/KElucHV0U3RyZWFtX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3Ry
aW5nKCkpKTooSW5wdXRTdHJlYW1fYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0
cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgSW5wdXRTdHJlYW0oY29uc3QgQXJ0
czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KElucHV0U3RyZWFtX2Jhc2U6Ol9mcm9t
RHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgSW5w
dXRTdHJlYW0oY29uc3QgSW5wdXRTdHJlYW0mIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0
Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIElucHV0U3Ry
ZWFtKEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7
fQogICAgICAgIGlubGluZSBzdGF0aWMgSW5wdXRTdHJlYW0gbnVsbCgpIHtyZXR1cm4gSW5wdXRT
dHJlYW0oKElucHV0U3RyZWFtX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIElucHV0
U3RyZWFtIF9mcm9tX2Jhc2UoSW5wdXRTdHJlYW1fYmFzZSogYikge3JldHVybiBJbnB1dFN0cmVh
bShiKTt9CiAgICAgICAgaW5saW5lIElucHV0U3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgSW5wdXRT
dHJlYW0mIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9v
bCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAg
ICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJn
ZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6U3lu
dGhNb2R1bGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgqX3Bvb2wpOyB9CiAg
ICAgICAgaW5saW5lIElucHV0U3RyZWFtX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2Nh
Y2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3Rh
dGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgpOwogICAgICAgIGlu
bGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1Jbml0KCk7CiAgICAg
ICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1F
bmQoKTsKICAgICAgICBpbmxpbmUgYm9vbCBlb2YoKTsKICAgICAgICBpbmxpbmUgbG9uZyBzaXpl
KCk7CiAgICAgICAgaW5saW5lIGJvb2wgc2Vla09rKCk7CiAgICAgICAgaW5saW5lIGxvbmcgc2Vl
ayhsb25nIHBvc2l0aW9uKTsKfTsKCmNsYXNzIEZpbGVJbnB1dFN0cmVhbV9iYXNlIDogdmlydHVh
bCBwdWJsaWMgQXJ0czo6SW5wdXRTdHJlYW1fYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMg
dW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgRmlsZUlucHV0U3RyZWFtX2Jhc2Ug
Kl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OkZpbGVJbnB1dFN0
cmVhbSIpOwogICAgICAgIHN0YXRpYyBGaWxlSW5wdXRTdHJlYW1fYmFzZSAqX2Zyb21TdHJpbmco
c3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgRmlsZUlucHV0U3RyZWFtX2Jh
c2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNv
cHkpOwoKICAgICAgICBzdGF0aWMgRmlsZUlucHV0U3RyZWFtX2Jhc2UgKl9mcm9tRHluYW1pY0Nh
c3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBGaWxlSW5wdXRT
dHJlYW1fYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAg
ICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAg
fQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRz
SW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVm
YXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcg
aWlkKTsKCiAgICAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBmaWxlbmFtZSgpID0gMDsKICAgICAg
ICB2aXJ0dWFsIHZvaWQgZmlsZW5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSA9IDA7
CiAgICAgICAgdmlydHVhbCBib29sIG9wZW4oY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKSA9
IDA7Cn07CgpjbGFzcyBGaWxlSW5wdXRTdHJlYW1fc3R1YiA6IHZpcnR1YWwgcHVibGljIEZpbGVJ
bnB1dFN0cmVhbV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpJbnB1dFN0cmVhbV9zdHViIHsK
cHJvdGVjdGVkOgogICAgICAgIEZpbGVJbnB1dFN0cmVhbV9zdHViKCk7CgpwdWJsaWM6CiAgICAg
ICAgRmlsZUlucHV0U3RyZWFtX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9u
ZyBvYmplY3RJRCk7CgogICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lKCk7CiAgICAgICAgdm9p
ZCBmaWxlbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpOwogICAgICAgIGJvb2wgb3Bl
bihjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpOwp9OwoKY2xhc3MgRmlsZUlucHV0U3RyZWFt
X3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBGaWxlSW5wdXRTdHJlYW1fYmFzZSwgdmlydHVhbCBwdWJs
aWMgQXJ0czo6SW5wdXRTdHJlYW1fc2tlbCB7CnByb3RlY3RlZDoKCiAgICAgICAgaW5saW5lIHZv
aWQgZmlsZW5hbWVfY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAg
ICAgICAgICAgIF9lbWl0X2NoYW5nZWQoImZpbGVuYW1lX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAg
ICAgICB9CgpwdWJsaWM6CiAgICAgICAgRmlsZUlucHV0U3RyZWFtX3NrZWwoKTsKCiAgICAgICAg
c3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3Ry
aW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25z
dCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RU
YWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRz
OjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9t
Y29wL3JlZmVyZW5jZS5oIiAxCiMgNTM0ICJrbWVkaWEyLmgiIDIKbmFtZXNwYWNlIEFydHMgewpj
bGFzcyBGaWxlSW5wdXRTdHJlYW0gOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAg
ICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgRmlsZUlu
cHV0U3RyZWFtX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgRmlsZUlucHV0U3RyZWFtX2Jh
c2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgp
OwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgX2NhY2hlPShGaWxlSW5wdXRTdHJlYW1fYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChGaWxl
SW5wdXRTdHJlYW1fYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkg
MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAg
ICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgRmlsZUlucHV0U3RyZWFtKEZpbGVJbnB1
dFN0cmVhbV9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGlj
OgogICAgICAgIHR5cGVkZWYgRmlsZUlucHV0U3RyZWFtX2Jhc2UgX2Jhc2VfY2xhc3M7CgogICAg
ICAgIGlubGluZSBGaWxlSW5wdXRTdHJlYW0oKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9j
YWNoZSgwKSB7fQogICAgICAgIGlubGluZSBGaWxlSW5wdXRTdHJlYW0oY29uc3QgQXJ0czo6U3Vi
Q2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChGaWxlSW5wdXRTdHJlYW1f
YmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBG
aWxlSW5wdXRTdHJlYW0oY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAg
ICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhGaWxlSW5wdXRTdHJlYW1fYmFzZTo6X2Zyb21T
dHJpbmcoci5zdHJpbmcoKSkpOihGaWxlSW5wdXRTdHJlYW1fYmFzZTo6X2Zyb21SZWZlcmVuY2Uo
ci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgRmlsZUlu
cHV0U3RyZWFtKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChGaWxl
SW5wdXRTdHJlYW1fYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgw
KSB7fQogICAgICAgIGlubGluZSBGaWxlSW5wdXRTdHJlYW0oY29uc3QgRmlsZUlucHV0U3RyZWFt
JiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2Nh
Y2hlKSB7fQogICAgICAgIGlubGluZSBGaWxlSW5wdXRTdHJlYW0oQXJ0czo6T2JqZWN0OjpQb29s
JiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRp
YyBGaWxlSW5wdXRTdHJlYW0gbnVsbCgpIHtyZXR1cm4gRmlsZUlucHV0U3RyZWFtKChGaWxlSW5w
dXRTdHJlYW1fYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgRmlsZUlucHV0U3RyZWFt
IF9mcm9tX2Jhc2UoRmlsZUlucHV0U3RyZWFtX2Jhc2UqIGIpIHtyZXR1cm4gRmlsZUlucHV0U3Ry
ZWFtKGIpO30KICAgICAgICBpbmxpbmUgRmlsZUlucHV0U3RyZWFtJiBvcGVyYXRvcj0oY29uc3Qg
RmlsZUlucHV0U3RyZWFtJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0
YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsK
ICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2Nh
Y2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9y
IEFydHM6OklucHV0U3RyZWFtKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6SW5wdXRTdHJlYW0oKl9w
b29sKTsgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNvbnN0
IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgRmls
ZUlucHV0U3RyZWFtX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2Rf
Y2FsbCgpO30KCiAgICAgICAgaW5saW5lIGJvb2wgZW9mKCk7CiAgICAgICAgaW5saW5lIGxvbmcg
c2l6ZSgpOwogICAgICAgIGlubGluZSBib29sIHNlZWtPaygpOwogICAgICAgIGlubGluZSBsb25n
IHNlZWsobG9uZyBwb3NpdGlvbik7CiAgICAgICAgaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3Rh
dGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgpOwogICAgICAgIGlu
bGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1Jbml0KCk7CiAgICAg
ICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1F
bmQoKTsKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgZmlsZW5hbWUoKTsKICAgICAgICBpbmxp
bmUgdm9pZCBmaWxlbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKTsKICAgICAgICBp
bmxpbmUgYm9vbCBvcGVuKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7Cn07CgpjbGFzcyBT
dGRvdXRXcml0ZXJfYmFzZSA6IHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9kdWxlX2Jhc2Ug
ewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3Rh
dGljIFN0ZG91dFdyaXRlcl9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFz
cyA9ICJBcnRzOjpTdGRvdXRXcml0ZXIiKTsKICAgICAgICBzdGF0aWMgU3Rkb3V0V3JpdGVyX2Jh
c2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFN0
ZG91dFdyaXRlcl9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVm
LCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFN0ZG91dFdyaXRlcl9iYXNlICpfZnJv
bUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUg
U3Rkb3V0V3JpdGVyX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsK
ICAgICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1
bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25l
ZCBsb25nIGlpZCk7Cgp9OwoKY2xhc3MgU3Rkb3V0V3JpdGVyX3N0dWIgOiB2aXJ0dWFsIHB1Ymxp
YyBTdGRvdXRXcml0ZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc3R1
YiB7CnByb3RlY3RlZDoKICAgICAgICBTdGRvdXRXcml0ZXJfc3R1YigpOwoKcHVibGljOgogICAg
ICAgIFN0ZG91dFdyaXRlcl9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcg
b2JqZWN0SUQpOwoKfTsKCmNsYXNzIFN0ZG91dFdyaXRlcl9za2VsIDogdmlydHVhbCBwdWJsaWMg
U3Rkb3V0V3JpdGVyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9kdWxlX3NrZWwg
ewpwcm90ZWN0ZWQ6CgogICAgICAgIEFydHM6OkJ5dGVBc3luY1N0cmVhbSBpbmRhdGE7CgoKICAg
ICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc19pbmRhdGEoQXJ0czo6RGF0YVBhY2tldDxBcnRzOjpt
Y29wYnl0ZT4gKikgPSAwOwoKcHVibGljOgogICAgICAgIFN0ZG91dFdyaXRlcl9za2VsKCk7Cgog
ICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBz
dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdp
dGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxk
TWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVz
dCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7CiAgICAgICAgdm9pZCBub3Rp
ZnkoY29uc3QgQXJ0czo6Tm90aWZpY2F0aW9uJiBub3RpZmljYXRpb24pOwp9OwoKfTsKIyAxICIu
Li8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA2NDQgImttZWRpYTIuaCIgMgpuYW1lc3Bh
Y2UgQXJ0cyB7CmNsYXNzIFN0ZG91dFdyaXRlciA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2
YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAg
ICBTdGRvdXRXcml0ZXJfYmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBTdGRvdXRXcml0ZXJf
YmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRl
KCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICBfY2FjaGU9KFN0ZG91dFdyaXRlcl9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN0ZG91
dFdyaXRlcl9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAg
fQoKcHJvdGVjdGVkOgogICAgICAgIGlubGluZSBTdGRvdXRXcml0ZXIoU3Rkb3V0V3JpdGVyX2Jh
c2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAg
dHlwZWRlZiBTdGRvdXRXcml0ZXJfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN0
ZG91dFdyaXRlcigpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAg
ICAgaW5saW5lIFN0ZG91dFdyaXRlcihjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAg
ICAgICAgICAgQXJ0czo6T2JqZWN0KFN0ZG91dFdyaXRlcl9iYXNlOjpfY3JlYXRlKHMuc3RyaW5n
KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0ZG91dFdyaXRlcihjb25zdCBBcnRz
OjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5n
KCk/KFN0ZG91dFdyaXRlcl9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN0ZG91dFdy
aXRlcl9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgw
KSB7fQogICAgICAgIGlubGluZSBTdGRvdXRXcml0ZXIoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3Qm
IGMpIDogQXJ0czo6T2JqZWN0KFN0ZG91dFdyaXRlcl9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMu
b2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0ZG91dFdyaXRlcihjb25z
dCBTdGRvdXRXcml0ZXImIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2Nh
Y2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFN0ZG91dFdyaXRlcihBcnRzOjpP
YmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBp
bmxpbmUgc3RhdGljIFN0ZG91dFdyaXRlciBudWxsKCkge3JldHVybiBTdGRvdXRXcml0ZXIoKFN0
ZG91dFdyaXRlcl9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTdGRvdXRXcml0ZXIg
X2Zyb21fYmFzZShTdGRvdXRXcml0ZXJfYmFzZSogYikge3JldHVybiBTdGRvdXRXcml0ZXIoYik7
fQogICAgICAgIGlubGluZSBTdGRvdXRXcml0ZXImIG9wZXJhdG9yPShjb25zdCBTdGRvdXRXcml0
ZXImIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkg
cmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAg
ICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQu
X2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6U3ludGhN
b2R1bGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgqX3Bvb2wpOyB9CiAgICAg
ICAgaW5saW5lIFN0ZG91dFdyaXRlcl9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNo
ZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRl
IGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsKICAgICAgICBpbmxp
bmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5pdCgpOwogICAgICAg
IGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtRW5k
KCk7Cn07CgpjbGFzcyBTdHJlYW1QbGF5T2JqZWN0X2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRz
OjpQbGF5T2JqZWN0X2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
X0lJRDsKCiAgICAgICAgc3RhdGljIFN0cmVhbVBsYXlPYmplY3RfYmFzZSAqX2NyZWF0ZShjb25z
dCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3RyZWFtUGxheU9iamVjdCIpOwogICAg
ICAgIHN0YXRpYyBTdHJlYW1QbGF5T2JqZWN0X2Jhc2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5n
IG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFN0cmVhbVBsYXlPYmplY3RfYmFzZSAqX2Zyb21S
ZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAg
ICAgIHN0YXRpYyBTdHJlYW1QbGF5T2JqZWN0X2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3Qg
QXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTdHJlYW1QbGF5T2JqZWN0X2Jh
c2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAg
IF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAg
ICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29u
c3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0
c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7Cgog
ICAgICAgIHZpcnR1YWwgYm9vbCBzdHJlYW1NZWRpYShBcnRzOjpJbnB1dFN0cmVhbSBpbnN0cmVh
bSkgPSAwOwp9OwoKY2xhc3MgU3RyZWFtUGxheU9iamVjdF9zdHViIDogdmlydHVhbCBwdWJsaWMg
U3RyZWFtUGxheU9iamVjdF9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQbGF5T2JqZWN0X3N0
dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgU3RyZWFtUGxheU9iamVjdF9zdHViKCk7CgpwdWJsaWM6
CiAgICAgICAgU3RyZWFtUGxheU9iamVjdF9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rp
b24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICBib29sIHN0cmVhbU1lZGlhKEFydHM6OklucHV0
U3RyZWFtIGluc3RyZWFtKTsKfTsKCmNsYXNzIFN0cmVhbVBsYXlPYmplY3Rfc2tlbCA6IHZpcnR1
YWwgcHVibGljIFN0cmVhbVBsYXlPYmplY3RfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6UGxh
eU9iamVjdF9za2VsIHsKcHVibGljOgogICAgICAgIFN0cmVhbVBsYXlPYmplY3Rfc2tlbCgpOwoK
ICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAg
c3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVX
aXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWls
ZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVl
c3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8u
Li9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA3NDAgImttZWRpYTIuaCIgMgpuYW1lc3BhY2Ug
QXJ0cyB7CmNsYXNzIFN0cmVhbVBsYXlPYmplY3QgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJp
dmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAg
ICAgU3RyZWFtUGxheU9iamVjdF9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFN0cmVhbVBs
YXlPYmplY3RfYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNo
ZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAg
ICAgICAgICAgICAgICBfY2FjaGU9KFN0cmVhbVBsYXlPYmplY3RfYmFzZSAqKV9wb29sLT5iYXNl
LT5fY2FzdChTdHJlYW1QbGF5T2JqZWN0X2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJu
IF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFN0cmVhbVBsYXlP
YmplY3QoU3RyZWFtUGxheU9iamVjdF9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hl
KDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgU3RyZWFtUGxheU9iamVjdF9iYXNlIF9i
YXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgU3RyZWFtUGxheU9iamVjdCgpIDogQXJ0czo6T2Jq
ZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0cmVhbVBsYXlPYmpl
Y3QoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVj
dChTdHJlYW1QbGF5T2JqZWN0X2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkg
e30KICAgICAgICBpbmxpbmUgU3RyZWFtUGxheU9iamVjdChjb25zdCBBcnRzOjpSZWZlcmVuY2Ug
JnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFN0cmVhbVBs
YXlPYmplY3RfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTdHJlYW1QbGF5T2JqZWN0
X2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9
CiAgICAgICAgaW5saW5lIFN0cmVhbVBsYXlPYmplY3QoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3Qm
IGMpIDogQXJ0czo6T2JqZWN0KFN0cmVhbVBsYXlPYmplY3RfYmFzZTo6X2Zyb21EeW5hbWljQ2Fz
dChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTdHJlYW1QbGF5T2Jq
ZWN0KGNvbnN0IFN0cmVhbVBsYXlPYmplY3QmIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0
Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFN0cmVhbVBs
YXlPYmplY3QoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hl
KDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTdHJlYW1QbGF5T2JqZWN0IG51bGwoKSB7cmV0
dXJuIFN0cmVhbVBsYXlPYmplY3QoKFN0cmVhbVBsYXlPYmplY3RfYmFzZSopMCk7fQogICAgICAg
IGlubGluZSBzdGF0aWMgU3RyZWFtUGxheU9iamVjdCBfZnJvbV9iYXNlKFN0cmVhbVBsYXlPYmpl
Y3RfYmFzZSogYikge3JldHVybiBTdHJlYW1QbGF5T2JqZWN0KGIpO30KICAgICAgICBpbmxpbmUg
U3RyZWFtUGxheU9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IFN0cmVhbVBsYXlPYmplY3QmIHRhcmdl
dCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0
aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAgICAgX3Bvb2wg
PSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQuX2NhY2hlOwog
ICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6UGxheU9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIEFydHM6OlBsYXlPYmplY3QoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBv
cGVyYXRvciBBcnRzOjpQbGF5T2JqZWN0X3ByaXZhdGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpQ
bGF5T2JqZWN0X3ByaXZhdGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTdHJlYW1QbGF5T2Jq
ZWN0X2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30K
CiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIGRlc2NyaXB0aW9uKCk7CiAgICAgICAgaW5saW5l
IEFydHM6OnBvVGltZSBjdXJyZW50VGltZSgpOwogICAgICAgIGlubGluZSBBcnRzOjpwb1RpbWUg
b3ZlcmFsbFRpbWUoKTsKICAgICAgICBpbmxpbmUgQXJ0czo6cG9DYXBhYmlsaXRpZXMgY2FwYWJp
bGl0aWVzKCk7CiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIG1lZGlhTmFtZSgpOwogICAgICAg
IGlubGluZSBBcnRzOjpwb1N0YXRlIHN0YXRlKCk7CiAgICAgICAgaW5saW5lIHZvaWQgcGxheSgp
OwogICAgICAgIGlubGluZSB2b2lkIHNlZWsoY29uc3QgQXJ0czo6cG9UaW1lJiBuZXdUaW1lKTsK
ICAgICAgICBpbmxpbmUgdm9pZCBwYXVzZSgpOwogICAgICAgIGlubGluZSB2b2lkIGhhbHQoKTsK
ICAgICAgICBpbmxpbmUgYm9vbCBsb2FkTWVkaWEoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1l
KTsKICAgICAgICBpbmxpbmUgYm9vbCBzdHJlYW1NZWRpYShBcnRzOjpJbnB1dFN0cmVhbSBpbnN0
cmVhbSk7Cn07CgpjbGFzcyBQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2UgOiB2aXJ0dWFsIHB1Ymxp
YyBBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeV9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBQbGF5T2JqZWN0RmFjdG9yeVYyX2Jh
c2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OlBsYXlPYmpl
Y3RGYWN0b3J5VjIiKTsKICAgICAgICBzdGF0aWMgUGxheU9iamVjdEZhY3RvcnlWMl9iYXNlICpf
ZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBQbGF5T2Jq
ZWN0RmFjdG9yeVYyX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSBy
ZWYsIGJvb2wgbmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMgUGxheU9iamVjdEZhY3RvcnlWMl9i
YXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAg
ICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnlWMl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAg
ICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9p
ZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIEFydHM6OlBsYXlP
YmplY3QgY3JlYXRlUGxheU9iamVjdEZvclVSTChjb25zdCBzdGQ6OnN0cmluZyYgdXJsLCBjb25z
dCBzdGQ6OnN0cmluZyYgbWltZXR5cGUsIGJvb2wgY3JlYXRlQlVTKSA9IDA7CiAgICAgICAgdmly
dHVhbCBBcnRzOjpQbGF5T2JqZWN0IGNyZWF0ZVBsYXlPYmplY3RGb3JTdHJlYW0oQXJ0czo6SW5w
dXRTdHJlYW0gaW5zdHJlYW0sIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1ldHlwZSwgYm9vbCBjcmVh
dGVCVVMpID0gMDsKfTsKCmNsYXNzIFBsYXlPYmplY3RGYWN0b3J5VjJfc3R1YiA6IHZpcnR1YWwg
cHVibGljIFBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6UGxh
eU9iamVjdEZhY3Rvcnlfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBQbGF5T2JqZWN0RmFjdG9y
eVYyX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBQbGF5T2JqZWN0RmFjdG9yeVYyX3N0dWIoQXJ0
czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIEFydHM6
OlBsYXlPYmplY3QgY3JlYXRlUGxheU9iamVjdEZvclVSTChjb25zdCBzdGQ6OnN0cmluZyYgdXJs
LCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZXR5cGUsIGJvb2wgY3JlYXRlQlVTKTsKICAgICAgICBB
cnRzOjpQbGF5T2JqZWN0IGNyZWF0ZVBsYXlPYmplY3RGb3JTdHJlYW0oQXJ0czo6SW5wdXRTdHJl
YW0gaW5zdHJlYW0sIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1ldHlwZSwgYm9vbCBjcmVhdGVCVVMp
Owp9OwoKY2xhc3MgUGxheU9iamVjdEZhY3RvcnlWMl9za2VsIDogdmlydHVhbCBwdWJsaWMgUGxh
eU9iamVjdEZhY3RvcnlWMl9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQbGF5T2JqZWN0RmFj
dG9yeV9za2VsIHsKcHVibGljOgogICAgICAgIFBsYXlPYmplY3RGYWN0b3J5VjJfc2tlbCgpOwoK
ICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAg
c3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVX
aXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWls
ZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVl
c3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8u
Li9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA4NDUgImttZWRpYTIuaCIgMgpuYW1lc3BhY2Ug
QXJ0cyB7CmNsYXNzIFBsYXlPYmplY3RGYWN0b3J5VjIgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsK
cHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAg
ICAgICAgUGxheU9iamVjdEZhY3RvcnlWMl9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFBs
YXlPYmplY3RGYWN0b3J5VjJfYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAg
X3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZSAq
KV9wb29sLT5iYXNlLT5fY2FzdChQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2U6Ol9JSUQpOwogICAg
ICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5s
aW5lIFBsYXlPYmplY3RGYWN0b3J5VjIoUGxheU9iamVjdEZhY3RvcnlWMl9iYXNlKiBiKSA6IEFy
dHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgUGxh
eU9iamVjdEZhY3RvcnlWMl9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgUGxheU9i
amVjdEZhY3RvcnlWMigpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAg
ICAgICAgaW5saW5lIFBsYXlPYmplY3RGYWN0b3J5VjIoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMp
IDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2U6
Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgUGxheU9i
amVjdEZhY3RvcnlWMihjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAg
IEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZTo6X2Zy
b21TdHJpbmcoci5zdHJpbmcoKSkpOihQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2U6Ol9mcm9tUmVm
ZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l
IFBsYXlPYmplY3RGYWN0b3J5VjIoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6
T2JqZWN0KFBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVj
dCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBQbGF5T2JqZWN0RmFjdG9yeVYyKGNv
bnN0IFBsYXlPYmplY3RGYWN0b3J5VjImIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9w
b29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RG
YWN0b3J5VjIoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hl
KDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBQbGF5T2JqZWN0RmFjdG9yeVYyIG51bGwoKSB7
cmV0dXJuIFBsYXlPYmplY3RGYWN0b3J5VjIoKFBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZSopMCk7
fQogICAgICAgIGlubGluZSBzdGF0aWMgUGxheU9iamVjdEZhY3RvcnlWMiBfZnJvbV9iYXNlKFBs
YXlPYmplY3RGYWN0b3J5VjJfYmFzZSogYikge3JldHVybiBQbGF5T2JqZWN0RmFjdG9yeVYyKGIp
O30KICAgICAgICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnlWMiYgb3BlcmF0b3I9KGNvbnN0IFBs
YXlPYmplY3RGYWN0b3J5VjImIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09
IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygp
OwogICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBf
Y2FjaGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAg
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0
b3IgQXJ0czo6UGxheU9iamVjdEZhY3RvcnkoKSBjb25zdCB7IHJldHVybiBBcnRzOjpQbGF5T2Jq
ZWN0RmFjdG9yeSgqX3Bvb2wpOyB9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RGYWN0b3J5VjJf
YmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAg
ICAgICBpbmxpbmUgQXJ0czo6UGxheU9iamVjdCBjcmVhdGVQbGF5T2JqZWN0KGNvbnN0IHN0ZDo6
c3RyaW5nJiBmaWxlbmFtZSk7CiAgICAgICAgaW5saW5lIEFydHM6OlBsYXlPYmplY3QgY3JlYXRl
UGxheU9iamVjdEZvclVSTChjb25zdCBzdGQ6OnN0cmluZyYgdXJsLCBjb25zdCBzdGQ6OnN0cmlu
ZyYgbWltZXR5cGUsIGJvb2wgY3JlYXRlQlVTKTsKICAgICAgICBpbmxpbmUgQXJ0czo6UGxheU9i
amVjdCBjcmVhdGVQbGF5T2JqZWN0Rm9yU3RyZWFtKEFydHM6OklucHV0U3RyZWFtIGluc3RyZWFt
LCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZXR5cGUsIGJvb2wgY3JlYXRlQlVTKTsKfTsKCgoKaW5s
aW5lIGJvb2wgQXJ0czo6UGxheU9iamVjdF9wcml2YXRlOjpsb2FkTWVkaWEoY29uc3Qgc3RkOjpz
dHJpbmcmIGZpbGVuYW1lKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz
OjpQbGF5T2JqZWN0X3ByaXZhdGVfYmFzZSo+KF9jYWNoZSktPmxvYWRNZWRpYShmaWxlbmFtZSk6
c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9wcml2YXRlX2Jhc2UqPihfbWV0aG9kX2NhbGwo
KSktPmxvYWRNZWRpYShmaWxlbmFtZSk7Cn0KCmlubGluZSBib29sIEFydHM6OlBsYXlPYmplY3Q6
OmxvYWRNZWRpYShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpCnsKICAgICAgICByZXR1cm4g
X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlKj4oX2NhY2hl
KS0+bG9hZE1lZGlhKGZpbGVuYW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X3ByaXZh
dGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+bG9hZE1lZGlhKGZpbGVuYW1lKTsKfQoKaW5saW5l
IHN0ZDo6c3RyaW5nIEFydHM6OlBsYXlPYmplY3Q6OmRlc2NyaXB0aW9uKCkKewogICAgICAgIHJl
dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+
ZGVzY3JpcHRpb24oKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9k
X2NhbGwoKSktPmRlc2NyaXB0aW9uKCk7Cn0KCmlubGluZSBBcnRzOjpwb1RpbWUgQXJ0czo6UGxh
eU9iamVjdDo6Y3VycmVudFRpbWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2Fz
dDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5jdXJyZW50VGltZSgpOnN0YXRpY19j
YXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3VycmVudFRpbWUo
KTsKfQoKaW5saW5lIEFydHM6OnBvVGltZSBBcnRzOjpQbGF5T2JqZWN0OjpvdmVyYWxsVGltZSgp
CnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFz
ZSo+KF9jYWNoZSktPm92ZXJhbGxUaW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9i
YXNlKj4oX21ldGhvZF9jYWxsKCkpLT5vdmVyYWxsVGltZSgpOwp9CgppbmxpbmUgQXJ0czo6cG9D
YXBhYmlsaXRpZXMgQXJ0czo6UGxheU9iamVjdDo6Y2FwYWJpbGl0aWVzKCkKewogICAgICAgIHJl
dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+
Y2FwYWJpbGl0aWVzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX21ldGhv
ZF9jYWxsKCkpLT5jYXBhYmlsaXRpZXMoKTsKfQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6OlBs
YXlPYmplY3Q6Om1lZGlhTmFtZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0
PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9jYWNoZSktPm1lZGlhTmFtZSgpOnN0YXRpY19jYXN0
PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+bWVkaWFOYW1lKCk7Cn0K
CmlubGluZSBBcnRzOjpwb1N0YXRlIEFydHM6OlBsYXlPYmplY3Q6OnN0YXRlKCkKewogICAgICAg
IHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hl
KS0+c3RhdGUoKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2Nh
bGwoKSktPnN0YXRlKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlBsYXlPYmplY3Q6OnBsYXkoKQp7
CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2Fj
aGUpLT5wbGF5KCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX21ldGhvZF9j
YWxsKCkpLT5wbGF5KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlBsYXlPYmplY3Q6OnNlZWsoY29u
c3QgQXJ0czo6cG9UaW1lJiBuZXdUaW1lKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxB
cnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5zZWVrKG5ld1RpbWUpOnN0YXRpY19jYXN0
PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2VlayhuZXdUaW1lKTsK
fQoKaW5saW5lIHZvaWQgQXJ0czo6UGxheU9iamVjdDo6cGF1c2UoKQp7CiAgICAgICAgIF9jYWNo
ZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5wYXVzZSgpOnN0
YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cGF1c2Uo
KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6UGxheU9iamVjdDo6aGFsdCgpCnsKICAgICAgICAgX2Nh
Y2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9jYWNoZSktPmhhbHQoKTpz
dGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmhhbHQo
KTsKfQoKaW5saW5lIEFydHM6OlBsYXlPYmplY3QgQXJ0czo6UGxheU9iamVjdEZhY3Rvcnk6OmNy
ZWF0ZVBsYXlPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQp7CiAgICAgICAgcmV0
dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeV9iYXNlKj4oX2Nh
Y2hlKS0+Y3JlYXRlUGxheU9iamVjdChmaWxlbmFtZSk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9i
amVjdEZhY3RvcnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlUGxheU9iamVjdChmaWxl
bmFtZSk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OklucHV0U3RyZWFt
OjphdXRvU3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6
OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRvU3VzcGVuZCgpOnN0YXRpY19jYXN0PEFy
dHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0K
CmlubGluZSB2b2lkIEFydHM6OklucHV0U3RyZWFtOjpzdGFydCgpCnsKICAgICAgICAgX2NhY2hl
P3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdGFydCgpOnN0
YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXJ0
KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OklucHV0U3RyZWFtOjpzdG9wKCkKewogICAgICAgICBf
Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3Ao
KTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5z
dG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OklucHV0U3RyZWFtOjpzdHJlYW1Jbml0KCkKewog
ICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNo
ZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21l
dGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OklucHV0U3Ry
ZWFtOjpzdHJlYW1TdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5
bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6
OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlu
bGluZSB2b2lkIEFydHM6OklucHV0U3RyZWFtOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNo
ZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5k
KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+
c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBib29sIEFydHM6OklucHV0U3RyZWFtOjplb2YoKQp7CiAg
ICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnB1dFN0cmVhbV9iYXNlKj4o
X2NhY2hlKS0+ZW9mKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW5wdXRTdHJlYW1fYmFzZSo+KF9tZXRo
b2RfY2FsbCgpKS0+ZW9mKCk7Cn0KCmlubGluZSBsb25nIEFydHM6OklucHV0U3RyZWFtOjpzaXpl
KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW5wdXRTdHJlYW1f
YmFzZSo+KF9jYWNoZSktPnNpemUoKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnB1dFN0cmVhbV9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5zaXplKCk7Cn0KCmlubGluZSBib29sIEFydHM6OklucHV0U3Ry
ZWFtOjpzZWVrT2soKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJ
bnB1dFN0cmVhbV9iYXNlKj4oX2NhY2hlKS0+c2Vla09rKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW5w
dXRTdHJlYW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2Vla09rKCk7Cn0KCmlubGluZSBsb25n
IEFydHM6OklucHV0U3RyZWFtOjpzZWVrKGxvbmcgcG9zaXRpb24pCnsKICAgICAgICByZXR1cm4g
X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OklucHV0U3RyZWFtX2Jhc2UqPihfY2FjaGUpLT5zZWVr
KHBvc2l0aW9uKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnB1dFN0cmVhbV9iYXNlKj4oX21ldGhvZF9j
YWxsKCkpLT5zZWVrKHBvc2l0aW9uKTsKfQoKaW5saW5lIGJvb2wgQXJ0czo6RmlsZUlucHV0U3Ry
ZWFtOjplb2YoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnB1
dFN0cmVhbV9iYXNlKj4oX2NhY2hlKS0+ZW9mKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW5wdXRTdHJl
YW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZW9mKCk7Cn0KCmlubGluZSBsb25nIEFydHM6OkZp
bGVJbnB1dFN0cmVhbTo6c2l6ZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0
PEFydHM6OklucHV0U3RyZWFtX2Jhc2UqPihfY2FjaGUpLT5zaXplKCk6c3RhdGljX2Nhc3Q8QXJ0
czo6SW5wdXRTdHJlYW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2l6ZSgpOwp9CgppbmxpbmUg
Ym9vbCBBcnRzOjpGaWxlSW5wdXRTdHJlYW06OnNlZWtPaygpCnsKICAgICAgICByZXR1cm4gX2Nh
Y2hlP3N0YXRpY19jYXN0PEFydHM6OklucHV0U3RyZWFtX2Jhc2UqPihfY2FjaGUpLT5zZWVrT2so
KTpzdGF0aWNfY2FzdDxBcnRzOjpJbnB1dFN0cmVhbV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5z
ZWVrT2soKTsKfQoKaW5saW5lIGxvbmcgQXJ0czo6RmlsZUlucHV0U3RyZWFtOjpzZWVrKGxvbmcg
cG9zaXRpb24pCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OklucHV0
U3RyZWFtX2Jhc2UqPihfY2FjaGUpLT5zZWVrKHBvc2l0aW9uKTpzdGF0aWNfY2FzdDxBcnRzOjpJ
bnB1dFN0cmVhbV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zZWVrKHBvc2l0aW9uKTsKfQoKaW5s
aW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgQXJ0czo6RmlsZUlucHV0U3RyZWFtOjphdXRvU3Vz
cGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9k
dWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRvU3VzcGVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRo
TW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0KCmlubGluZSB2
b2lkIEFydHM6OkZpbGVJbnB1dFN0cmVhbTo6c3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0
aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RhcnQoKTpzdGF0aWNf
Y2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdGFydCgpOwp9
CgppbmxpbmUgdm9pZCBBcnRzOjpGaWxlSW5wdXRTdHJlYW06OnN0b3AoKQp7CiAgICAgICAgIF9j
YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RvcCgp
OnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0
b3AoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6RmlsZUlucHV0U3RyZWFtOjpzdHJlYW1Jbml0KCkK
ewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9j
YWNoZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o
X21ldGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkZpbGVJ
bnB1dFN0cmVhbTo6c3RyZWFtU3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxB
cnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtU3RhcnQoKTpzdGF0aWNfY2Fz
dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1TdGFydCgp
Owp9CgppbmxpbmUgdm9pZCBBcnRzOjpGaWxlSW5wdXRTdHJlYW06OnN0cmVhbUVuZCgpCnsKICAg
ICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUp
LT5zdHJlYW1FbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhv
ZF9jYWxsKCkpLT5zdHJlYW1FbmQoKTsKfQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6OkZpbGVJ
bnB1dFN0cmVhbTo6ZmlsZW5hbWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2Fz
dDxBcnRzOjpGaWxlSW5wdXRTdHJlYW1fYmFzZSo+KF9jYWNoZSktPmZpbGVuYW1lKCk6c3RhdGlj
X2Nhc3Q8QXJ0czo6RmlsZUlucHV0U3RyZWFtX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmZpbGVu
YW1lKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkZpbGVJbnB1dFN0cmVhbTo6ZmlsZW5hbWUoY29u
c3Qgc3RkOjpzdHJpbmcmIF9uZXdWYWx1ZSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6RmlsZUlucHV0U3RyZWFtX2Jhc2UqPihfY2FjaGUpLT5maWxlbmFtZShfbmV3VmFsdWUp
OnN0YXRpY19jYXN0PEFydHM6OkZpbGVJbnB1dFN0cmVhbV9iYXNlKj4oX21ldGhvZF9jYWxsKCkp
LT5maWxlbmFtZShfbmV3VmFsdWUpOwp9CgppbmxpbmUgYm9vbCBBcnRzOjpGaWxlSW5wdXRTdHJl
YW06Om9wZW4oY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQp7CiAgICAgICAgcmV0dXJuIF9j
YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpGaWxlSW5wdXRTdHJlYW1fYmFzZSo+KF9jYWNoZSktPm9w
ZW4oZmlsZW5hbWUpOnN0YXRpY19jYXN0PEFydHM6OkZpbGVJbnB1dFN0cmVhbV9iYXNlKj4oX21l
dGhvZF9jYWxsKCkpLT5vcGVuKGZpbGVuYW1lKTsKfQoKaW5saW5lIEFydHM6OkF1dG9TdXNwZW5k
U3RhdGUgQXJ0czo6U3Rkb3V0V3JpdGVyOjphdXRvU3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4g
X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRv
U3VzcGVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2Nh
bGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN0ZG91dFdyaXRlcjo6
c3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9i
YXNlKj4oX2NhY2hlKS0+c3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5zdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGRvdXRX
cml0ZXI6OnN0b3AoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v
ZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RvcCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxl
X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0b3AoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3Rk
b3V0V3JpdGVyOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0
czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2FzdDxB
cnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7Cn0K
CmlubGluZSB2b2lkIEFydHM6OlN0ZG91dFdyaXRlcjo6c3RyZWFtU3RhcnQoKQp7CiAgICAgICAg
IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3Ry
ZWFtU3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9j
YWxsKCkpLT5zdHJlYW1TdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGRvdXRXcml0ZXI6
OnN0cmVhbUVuZCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9k
dWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1FbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v
ZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1FbmQoKTsKfQoKaW5saW5lIHN0ZDo6
c3RyaW5nIEFydHM6OlN0cmVhbVBsYXlPYmplY3Q6OmRlc2NyaXB0aW9uKCkKewogICAgICAgIHJl
dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+
ZGVzY3JpcHRpb24oKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9k
X2NhbGwoKSktPmRlc2NyaXB0aW9uKCk7Cn0KCmlubGluZSBBcnRzOjpwb1RpbWUgQXJ0czo6U3Ry
ZWFtUGxheU9iamVjdDo6Y3VycmVudFRpbWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0
aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5jdXJyZW50VGltZSgpOnN0
YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3VycmVu
dFRpbWUoKTsKfQoKaW5saW5lIEFydHM6OnBvVGltZSBBcnRzOjpTdHJlYW1QbGF5T2JqZWN0Ojpv
dmVyYWxsVGltZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBs
YXlPYmplY3RfYmFzZSo+KF9jYWNoZSktPm92ZXJhbGxUaW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6
UGxheU9iamVjdF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5vdmVyYWxsVGltZSgpOwp9Cgppbmxp
bmUgQXJ0czo6cG9DYXBhYmlsaXRpZXMgQXJ0czo6U3RyZWFtUGxheU9iamVjdDo6Y2FwYWJpbGl0
aWVzKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVj
dF9iYXNlKj4oX2NhY2hlKS0+Y2FwYWJpbGl0aWVzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9i
amVjdF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jYXBhYmlsaXRpZXMoKTsKfQoKaW5saW5lIHN0
ZDo6c3RyaW5nIEFydHM6OlN0cmVhbVBsYXlPYmplY3Q6Om1lZGlhTmFtZSgpCnsKICAgICAgICBy
ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9jYWNoZSkt
Pm1lZGlhTmFtZSgpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2Rf
Y2FsbCgpKS0+bWVkaWFOYW1lKCk7Cn0KCmlubGluZSBBcnRzOjpwb1N0YXRlIEFydHM6OlN0cmVh
bVBsYXlPYmplY3Q6OnN0YXRlKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+c3RhdGUoKTpzdGF0aWNfY2FzdDxBcnRz
OjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXRlKCk7Cn0KCmlubGluZSB2
b2lkIEFydHM6OlN0cmVhbVBsYXlPYmplY3Q6OnBsYXkoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0
aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5wbGF5KCk6c3RhdGljX2Nh
c3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5wbGF5KCk7Cn0KCmlu
bGluZSB2b2lkIEFydHM6OlN0cmVhbVBsYXlPYmplY3Q6OnNlZWsoY29uc3QgQXJ0czo6cG9UaW1l
JiBuZXdUaW1lKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0
X2Jhc2UqPihfY2FjaGUpLT5zZWVrKG5ld1RpbWUpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmpl
Y3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2VlayhuZXdUaW1lKTsKfQoKaW5saW5lIHZvaWQg
QXJ0czo6U3RyZWFtUGxheU9iamVjdDo6cGF1c2UoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNf
Y2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5wYXVzZSgpOnN0YXRpY19jYXN0
PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cGF1c2UoKTsKfQoKaW5s
aW5lIHZvaWQgQXJ0czo6U3RyZWFtUGxheU9iamVjdDo6aGFsdCgpCnsKICAgICAgICAgX2NhY2hl
P3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9jYWNoZSktPmhhbHQoKTpzdGF0
aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmhhbHQoKTsK
fQoKaW5saW5lIGJvb2wgQXJ0czo6U3RyZWFtUGxheU9iamVjdDo6bG9hZE1lZGlhKGNvbnN0IHN0
ZDo6c3RyaW5nJiBmaWxlbmFtZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8
QXJ0czo6UGxheU9iamVjdF9wcml2YXRlX2Jhc2UqPihfY2FjaGUpLT5sb2FkTWVkaWEoZmlsZW5h
bWUpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlKj4oX21ldGhvZF9j
YWxsKCkpLT5sb2FkTWVkaWEoZmlsZW5hbWUpOwp9CgppbmxpbmUgYm9vbCBBcnRzOjpTdHJlYW1Q
bGF5T2JqZWN0OjpzdHJlYW1NZWRpYShBcnRzOjpJbnB1dFN0cmVhbSBpbnN0cmVhbSkKewogICAg
ICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3RyZWFtUGxheU9iamVjdF9iYXNl
Kj4oX2NhY2hlKS0+c3RyZWFtTWVkaWEoaW5zdHJlYW0pOnN0YXRpY19jYXN0PEFydHM6OlN0cmVh
bVBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtTWVkaWEoaW5zdHJlYW0p
Owp9CgppbmxpbmUgQXJ0czo6UGxheU9iamVjdCBBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeVYyOjpj
cmVhdGVQbGF5T2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkKewogICAgICAgIHJl
dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdEZhY3RvcnlfYmFzZSo+KF9j
YWNoZSktPmNyZWF0ZVBsYXlPYmplY3QoZmlsZW5hbWUpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlP
YmplY3RGYWN0b3J5X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNyZWF0ZVBsYXlPYmplY3QoZmls
ZW5hbWUpOwp9CgppbmxpbmUgQXJ0czo6UGxheU9iamVjdCBBcnRzOjpQbGF5T2JqZWN0RmFjdG9y
eVYyOjpjcmVhdGVQbGF5T2JqZWN0Rm9yVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwsIGNvbnN0
IHN0ZDo6c3RyaW5nJiBtaW1ldHlwZSwgYm9vbCBjcmVhdGVCVVMpCnsKICAgICAgICByZXR1cm4g
X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZSo+KF9jYWNo
ZSktPmNyZWF0ZVBsYXlPYmplY3RGb3JVUkwodXJsLCBtaW1ldHlwZSwgY3JlYXRlQlVTKTpzdGF0
aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSkt
PmNyZWF0ZVBsYXlPYmplY3RGb3JVUkwodXJsLCBtaW1ldHlwZSwgY3JlYXRlQlVTKTsKfQoKaW5s
aW5lIEFydHM6OlBsYXlPYmplY3QgQXJ0czo6UGxheU9iamVjdEZhY3RvcnlWMjo6Y3JlYXRlUGxh
eU9iamVjdEZvclN0cmVhbShBcnRzOjpJbnB1dFN0cmVhbSBpbnN0cmVhbSwgY29uc3Qgc3RkOjpz
dHJpbmcmIG1pbWV0eXBlLCBib29sIGNyZWF0ZUJVUykKewogICAgICAgIHJldHVybiBfY2FjaGU/
c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdEZhY3RvcnlWMl9iYXNlKj4oX2NhY2hlKS0+Y3Jl
YXRlUGxheU9iamVjdEZvclN0cmVhbShpbnN0cmVhbSwgbWltZXR5cGUsIGNyZWF0ZUJVUyk6c3Rh
dGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdEZhY3RvcnlWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkp
LT5jcmVhdGVQbGF5T2JqZWN0Rm9yU3RyZWFtKGluc3RyZWFtLCBtaW1ldHlwZSwgY3JlYXRlQlVT
KTsKfQoKfTsKIyAxMSAic291bmRzZXJ2ZXIuaCIgMgoKbmFtZXNwYWNlIEFydHMgewplbnVtIFJl
YWx0aW1lU3RhdHVzIHtydFJlYWx0aW1lID0gMCwgcnROb1N1cHBvcnQgPSAxLCBydE5vV3JhcHBl
ciA9IDIsIHJ0Tm9SZWFsdGltZSA9IDN9Owp9OwpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFNhbXBs
ZVN0b3JhZ2VFbnRyeTsKY2xhc3MgU2FtcGxlU3RvcmFnZTsKY2xhc3MgQnl0ZVNvdW5kUHJvZHVj
ZXI7CmNsYXNzIFNpbXBsZVNvdW5kU2VydmVyOwpjbGFzcyBTb3VuZFNlcnZlcjsKY2xhc3MgU291
bmRTZXJ2ZXJWMjsKY2xhc3MgV2F2UGxheU9iamVjdDsKCmNsYXNzIFNhbXBsZVN0b3JhZ2VFbnRy
eV9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X2Jhc2UgewpwdWJsaWM6CiAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFNhbXBsZVN0b3Jh
Z2VFbnRyeV9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRz
OjpTYW1wbGVTdG9yYWdlRW50cnkiKTsKICAgICAgICBzdGF0aWMgU2FtcGxlU3RvcmFnZUVudHJ5
X2Jhc2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGlj
IFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZl
cmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFNhbXBsZVN0b3JhZ2VF
bnRyeV9iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsK
ICAgICAgICBpbmxpbmUgU2FtcGxlU3RvcmFnZUVudHJ5X2Jhc2UgKl9jb3B5KCkgewogICAgICAg
ICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAg
ICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgc3RkOjpz
dHJpbmcgbmFtZSgpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGZpbGVuYW1lKCkg
PSAwOwogICAgICAgIHZpcnR1YWwgYm9vbCBjb21wbGV0ZWQoKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIHdyaXRlKGNvbnN0IHN0ZDo6dmVjdG9yPEFydHM6Om1jb3BieXRlPiYgZGF0YSkgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7Cn07CgpjbGFzcyBTYW1wbGVTdG9y
YWdlRW50cnlfc3R1YiA6IHZpcnR1YWwgcHVibGljIFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlLCB2
aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTYW1w
bGVTdG9yYWdlRW50cnlfc3R1YigpOwoKcHVibGljOgogICAgICAgIFNhbXBsZVN0b3JhZ2VFbnRy
eV9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAg
ICAgICBzdGQ6OnN0cmluZyBuYW1lKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgZmlsZW5hbWUoKTsK
ICAgICAgICBib29sIGNvbXBsZXRlZCgpOwogICAgICAgIHZvaWQgd3JpdGUoY29uc3Qgc3RkOjp2
ZWN0b3I8QXJ0czo6bWNvcGJ5dGU+JiBkYXRhKTsKICAgICAgICB2b2lkIGZpbmlzaCgpOwp9OwoK
Y2xhc3MgU2FtcGxlU3RvcmFnZUVudHJ5X3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTYW1wbGVTdG9y
YWdlRW50cnlfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X3NrZWwgewpwcm90ZWN0
ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIG5hbWVfY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYg
bmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoIm5hbWVfY2hhbmdlZCIs
bmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBmaWxlbmFtZV9jaGFuZ2Vk
KGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hh
bmdlZCgiZmlsZW5hbWVfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxp
bmUgdm9pZCBjb21wbGV0ZWRfY2hhbmdlZChib29sIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAg
ICBfZW1pdF9jaGFuZ2VkKCJjb21wbGV0ZWRfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0K
CnB1YmxpYzoKICAgICAgICBTYW1wbGVTdG9yYWdlRW50cnlfc2tlbCgpOwoKICAgICAgICBzdGF0
aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcg
X2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0
ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxl
KCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1
ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3Av
cmVmZXJlbmNlLmgiIDEKIyA5MCAic291bmRzZXJ2ZXIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNs
YXNzIFNhbXBsZVN0b3JhZ2VFbnRyeSA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgog
ICAgICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTYW1w
bGVTdG9yYWdlRW50cnlfYmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdl
RW50cnlfYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNr
Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICBfY2FjaGU9KFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlICopX3Bvb2wtPmJhc2Ut
Pl9jYXN0KFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVy
biBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVkOgogICAgICAgIGlubGluZSBTYW1wbGVTdG9y
YWdlRW50cnkoU2FtcGxlU3RvcmFnZUVudHJ5X2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBf
Y2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBTYW1wbGVTdG9yYWdlRW50cnlf
YmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFNhbXBsZVN0b3JhZ2VFbnRyeSgpIDog
QXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFNhbXBs
ZVN0b3JhZ2VFbnRyeShjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAgICAgICAg
QXJ0czo6T2JqZWN0KFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkp
KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFNhbXBsZVN0b3JhZ2VFbnRyeShjb25zdCBB
cnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3Ry
aW5nKCk/KFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6
KFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRy
dWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlRW50cnkoY29u
c3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KFNhbXBsZVN0b3JhZ2VFbnRy
eV9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAg
ICAgaW5saW5lIFNhbXBsZVN0b3JhZ2VFbnRyeShjb25zdCBTYW1wbGVTdG9yYWdlRW50cnkmIHRh
cmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUp
IHt9CiAgICAgICAgaW5saW5lIFNhbXBsZVN0b3JhZ2VFbnRyeShBcnRzOjpPYmplY3Q6OlBvb2wm
IHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGlj
IFNhbXBsZVN0b3JhZ2VFbnRyeSBudWxsKCkge3JldHVybiBTYW1wbGVTdG9yYWdlRW50cnkoKFNh
bXBsZVN0b3JhZ2VFbnRyeV9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTYW1wbGVT
dG9yYWdlRW50cnkgX2Zyb21fYmFzZShTYW1wbGVTdG9yYWdlRW50cnlfYmFzZSogYikge3JldHVy
biBTYW1wbGVTdG9yYWdlRW50cnkoYik7fQogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlRW50
cnkmIG9wZXJhdG9yPShjb25zdCBTYW1wbGVTdG9yYWdlRW50cnkmIHRhcmdldCkgewogICAgICAg
ICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAg
ICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bv
b2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAg
ICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0K
ICAgICAgICBpbmxpbmUgU2FtcGxlU3RvcmFnZUVudHJ5X2Jhc2UqIF9iYXNlKCkge3JldHVybiBf
Y2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5n
IG5hbWUoKTsKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgZmlsZW5hbWUoKTsKICAgICAgICBp
bmxpbmUgYm9vbCBjb21wbGV0ZWQoKTsKICAgICAgICBpbmxpbmUgdm9pZCB3cml0ZShjb25zdCBz
dGQ6OnZlY3RvcjxBcnRzOjptY29wYnl0ZT4mIGRhdGEpOwogICAgICAgIGlubGluZSB2b2lkIGZp
bmlzaCgpOwp9OwoKY2xhc3MgU2FtcGxlU3RvcmFnZV9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0
czo6T2JqZWN0X2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJ
RDsKCiAgICAgICAgc3RhdGljIFNhbXBsZVN0b3JhZ2VfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6
OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U2FtcGxlU3RvcmFnZSIpOwogICAgICAgIHN0YXRp
YyBTYW1wbGVTdG9yYWdlX2Jhc2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7
CiAgICAgICAgc3RhdGljIFNhbXBsZVN0b3JhZ2VfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6
T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTYW1w
bGVTdG9yYWdlX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmpl
Y3QpOwogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlX2Jhc2UgKl9jb3B5KCkgewogICAgICAg
ICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAg
ICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgdm9pZCBj
b25zdHJ1Y3Rvcihjb25zdCBzdGQ6OnN0cmluZyYgZGlyZWN0b3J5LCBib29sIGNsZWFyT25Jbml0
KSA9IDA7CiAgICAgICAgdmlydHVhbCBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnkgY3JlYXRlRW50
cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgYWRk
RW50cnkoQXJ0czo6U2FtcGxlU3RvcmFnZUVudHJ5IGVudHJ5KSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUVudHJ5KEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBlbnRyeSkgPSAwOwog
ICAgICAgIHZpcnR1YWwgQXJ0czo6U2FtcGxlU3RvcmFnZUVudHJ5IGZpbmRFbnRyeShjb25zdCBz
dGQ6OnN0cmluZyYgbmFtZSkgPSAwOwp9OwoKY2xhc3MgU2FtcGxlU3RvcmFnZV9zdHViIDogdmly
dHVhbCBwdWJsaWMgU2FtcGxlU3RvcmFnZV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmpl
Y3Rfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTYW1wbGVTdG9yYWdlX3N0dWIoKTsKCnB1Ymxp
YzoKICAgICAgICBTYW1wbGVTdG9yYWdlX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlv
biwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIHZvaWQgY29uc3RydWN0b3IoY29uc3Qgc3RkOjpz
dHJpbmcmIGRpcmVjdG9yeSwgYm9vbCBjbGVhck9uSW5pdCk7CiAgICAgICAgQXJ0czo6U2FtcGxl
U3RvcmFnZUVudHJ5IGNyZWF0ZUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgICAg
ICB2b2lkIGFkZEVudHJ5KEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBlbnRyeSk7CiAgICAgICAg
dm9pZCByZW1vdmVFbnRyeShBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnkgZW50cnkpOwogICAgICAg
IEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBmaW5kRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5h
bWUpOwp9OwoKY2xhc3MgU2FtcGxlU3RvcmFnZV9za2VsIDogdmlydHVhbCBwdWJsaWMgU2FtcGxl
U3RvcmFnZV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc2tlbCB7CnB1YmxpYzoK
ICAgICAgICBTYW1wbGVTdG9yYWdlX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5n
IF9pbnRlcmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1l
KCk7CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50
ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZv
aWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxs
b25nIG1ldGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAx
CiMgMTkyICJzb3VuZHNlcnZlci5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU2FtcGxlU3Rv
cmFnZSA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRz
OjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTYW1wbGVTdG9yYWdlX2Jhc2UgKl9j
YWNoZTsKICAgICAgICBpbmxpbmUgU2FtcGxlU3RvcmFnZV9iYXNlICpfbWV0aG9kX2NhbGwoKSB7
CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIGlm
KF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oU2FtcGxlU3Rv
cmFnZV9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFNhbXBsZVN0b3JhZ2VfYmFzZTo6X0lJRCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAg
ICBpbmxpbmUgU2FtcGxlU3RvcmFnZShTYW1wbGVTdG9yYWdlX2Jhc2UqIGIpIDogQXJ0czo6T2Jq
ZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBTYW1wbGVTdG9y
YWdlX2Jhc2UgX2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlKCkgOiBB
cnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU2FtcGxl
U3RvcmFnZShjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAgICAgICAgQXJ0czo6
T2JqZWN0KFNhbXBsZVN0b3JhZ2VfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgw
KSB7fQogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlKGNvbnN0IEFydHM6OlJlZmVyZW5jZSAm
cikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oU2FtcGxlU3Rv
cmFnZV9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFNhbXBsZVN0b3JhZ2VfYmFzZTo6
X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAg
ICBpbmxpbmUgU2FtcGxlU3RvcmFnZShjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRz
OjpPYmplY3QoU2FtcGxlU3RvcmFnZV9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkp
KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFNhbXBsZVN0b3JhZ2UoY29uc3QgU2FtcGxl
U3RvcmFnZSYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFy
Z2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgU2FtcGxlU3RvcmFnZShBcnRzOjpPYmplY3Q6
OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUg
c3RhdGljIFNhbXBsZVN0b3JhZ2UgbnVsbCgpIHtyZXR1cm4gU2FtcGxlU3RvcmFnZSgoU2FtcGxl
U3RvcmFnZV9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTYW1wbGVTdG9yYWdlIF9m
cm9tX2Jhc2UoU2FtcGxlU3RvcmFnZV9iYXNlKiBiKSB7cmV0dXJuIFNhbXBsZVN0b3JhZ2UoYik7
fQogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlJiBvcGVyYXRvcj0oY29uc3QgU2FtcGxlU3Rv
cmFnZSYgdGFyZ2V0KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29s
KSByZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAg
ICAgICBfcG9vbCA9IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdl
dC5fY2FjaGU7CiAgICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlX2Jhc2Uq
IF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAg
aW5saW5lIFNhbXBsZVN0b3JhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcmVjdG9yeSwgYm9vbCBj
bGVhck9uSW5pdCk7CiAgICAgICAgaW5saW5lIEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBjcmVh
dGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5saW5lIHZvaWQgYWRk
RW50cnkoQXJ0czo6U2FtcGxlU3RvcmFnZUVudHJ5IGVudHJ5KTsKICAgICAgICBpbmxpbmUgdm9p
ZCByZW1vdmVFbnRyeShBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnkgZW50cnkpOwogICAgICAgIGlu
bGluZSBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnkgZmluZEVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lKTsKfTsKCmNsYXNzIEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UgOiB2aXJ0dWFsIHB1Ymxp
YyBBcnRzOjpTeW50aE1vZHVsZV9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBCeXRlU291bmRQcm9kdWNlcl9iYXNlICpfY3Jl
YXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpCeXRlU291bmRQcm9kdWNl
ciIpOwogICAgICAgIHN0YXRpYyBCeXRlU291bmRQcm9kdWNlcl9iYXNlICpfZnJvbVN0cmluZyhz
dGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBCeXRlU291bmRQcm9kdWNlcl9i
YXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRj
b3B5KTsKCiAgICAgICAgc3RhdGljIEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UgKl9mcm9tRHluYW1p
Y0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBCeXRlU291
bmRQcm9kdWNlcl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAg
ICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAg
ICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0
UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQg
bG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIGxvbmcgc2FtcGxpbmdSYXRlKCkgPSAwOwogICAg
ICAgIHZpcnR1YWwgbG9uZyBjaGFubmVscygpID0gMDsKICAgICAgICB2aXJ0dWFsIGxvbmcgYml0
cygpID0gMDsKfTsKCmNsYXNzIEJ5dGVTb3VuZFByb2R1Y2VyX3N0dWIgOiB2aXJ0dWFsIHB1Ymxp
YyBCeXRlU291bmRQcm9kdWNlcl9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVs
ZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIEJ5dGVTb3VuZFByb2R1Y2VyX3N0dWIoKTsKCnB1
YmxpYzoKICAgICAgICBCeXRlU291bmRQcm9kdWNlcl9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNv
bm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICBsb25nIHNhbXBsaW5nUmF0ZSgpOwog
ICAgICAgIGxvbmcgY2hhbm5lbHMoKTsKICAgICAgICBsb25nIGJpdHMoKTsKfTsKCmNsYXNzIEJ5
dGVTb3VuZFByb2R1Y2VyX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBCeXRlU291bmRQcm9kdWNlcl9i
YXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoK
ICAgICAgICBBcnRzOjpCeXRlQXN5bmNTdHJlYW0gb3V0ZGF0YTsKCgogICAgICAgIHZpcnR1YWwg
dm9pZCByZXF1ZXN0X291dGRhdGEoQXJ0czo6RGF0YVBhY2tldDxBcnRzOjptY29wYnl0ZT4gKik7
Cgpwcm90ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIHNhbXBsaW5nUmF0ZV9jaGFuZ2VkKGxv
bmcgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoInNhbXBsaW5nUmF0
ZV9jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGNoYW5u
ZWxzX2NoYW5nZWQobG9uZyBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdl
ZCgiY2hhbm5lbHNfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUg
dm9pZCBiaXRzX2NoYW5nZWQobG9uZyBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRf
Y2hhbmdlZCgiYml0c19jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQoKcHVibGljOgogICAg
ICAgIEJ5dGVTb3VuZFByb2R1Y2VyX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5n
IF9pbnRlcmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1l
KCk7CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50
ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZv
aWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxs
b25nIG1ldGhvZElEKTsKICAgICAgICB2b2lkIG5vdGlmeShjb25zdCBBcnRzOjpOb3RpZmljYXRp
b24mIG5vdGlmaWNhdGlvbik7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2Uu
aCIgMQojIDMxMCAic291bmRzZXJ2ZXIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIEJ5dGVT
b3VuZFByb2R1Y2VyIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3Rh
dGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIEJ5dGVTb3VuZFByb2R1
Y2VyX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgQnl0ZVNvdW5kUHJvZHVjZXJfYmFzZSAq
X21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAg
ICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBf
Y2FjaGU9KEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoQnl0ZVNv
dW5kUHJvZHVjZXJfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkg
MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAg
ICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgQnl0ZVNvdW5kUHJvZHVjZXIoQnl0ZVNv
dW5kUHJvZHVjZXJfYmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1
YmxpYzoKICAgICAgICB0eXBlZGVmIEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UgX2Jhc2VfY2xhc3M7
CgogICAgICAgIGlubGluZSBCeXRlU291bmRQcm9kdWNlcigpIDogQXJ0czo6T2JqZWN0KF9DcmVh
dG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEJ5dGVTb3VuZFByb2R1Y2VyKGNvbnN0
IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoQnl0ZVNv
dW5kUHJvZHVjZXJfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAg
ICAgIGlubGluZSBCeXRlU291bmRQcm9kdWNlcihjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoK
ICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KEJ5dGVTb3VuZFByb2R1
Y2VyX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooQnl0ZVNvdW5kUHJvZHVjZXJfYmFz
ZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAg
ICAgICBpbmxpbmUgQnl0ZVNvdW5kUHJvZHVjZXIoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMp
IDogQXJ0czo6T2JqZWN0KEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3Qo
Yy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgQnl0ZVNvdW5kUHJvZHVj
ZXIoY29uc3QgQnl0ZVNvdW5kUHJvZHVjZXImIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0
Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIEJ5dGVTb3Vu
ZFByb2R1Y2VyKEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNo
ZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgQnl0ZVNvdW5kUHJvZHVjZXIgbnVsbCgpIHty
ZXR1cm4gQnl0ZVNvdW5kUHJvZHVjZXIoKEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UqKTApO30KICAg
ICAgICBpbmxpbmUgc3RhdGljIEJ5dGVTb3VuZFByb2R1Y2VyIF9mcm9tX2Jhc2UoQnl0ZVNvdW5k
UHJvZHVjZXJfYmFzZSogYikge3JldHVybiBCeXRlU291bmRQcm9kdWNlcihiKTt9CiAgICAgICAg
aW5saW5lIEJ5dGVTb3VuZFByb2R1Y2VyJiBvcGVyYXRvcj0oY29uc3QgQnl0ZVNvdW5kUHJvZHVj
ZXImIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkg
cmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAg
ICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQu
X2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6U3ludGhN
b2R1bGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgqX3Bvb2wpOyB9CiAgICAg
ICAgaW5saW5lIEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/
X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIEFydHM6OkF1dG9TdXNwZW5k
U3RhdGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgpOwogICAgICAg
IGlubGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1Jbml0KCk7CiAg
ICAgICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJl
YW1FbmQoKTsKICAgICAgICBpbmxpbmUgbG9uZyBzYW1wbGluZ1JhdGUoKTsKICAgICAgICBpbmxp
bmUgbG9uZyBjaGFubmVscygpOwogICAgICAgIGlubGluZSBsb25nIGJpdHMoKTsKfTsKCmNsYXNz
IFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQbGF5T2JqZWN0
RmFjdG9yeV9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7
CgogICAgICAgIHN0YXRpYyBTaW1wbGVTb3VuZFNlcnZlcl9iYXNlICpfY3JlYXRlKGNvbnN0IHN0
ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTaW1wbGVTb3VuZFNlcnZlciIpOwogICAgICAg
IHN0YXRpYyBTaW1wbGVTb3VuZFNlcnZlcl9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBv
YmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBTaW1wbGVTb3VuZFNlcnZlcl9iYXNlICpfZnJvbVJl
ZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAg
ICAgc3RhdGljIFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3Qg
QXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTaW1wbGVTb3VuZFNlcnZlcl9i
YXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAg
ICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAg
ICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNv
bnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9y
dHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoK
ICAgICAgICB2aXJ0dWFsIEFydHM6OlN0ZXJlb0VmZmVjdFN0YWNrIG91dHN0YWNrKCkgPSAwOwog
ICAgICAgIHZpcnR1YWwgZmxvYXQgbWluU3RyZWFtQnVmZmVyVGltZSgpID0gMDsKICAgICAgICB2
aXJ0dWFsIGZsb2F0IHNlcnZlckJ1ZmZlclRpbWUoKSA9IDA7CiAgICAgICAgdmlydHVhbCBsb25n
IHBsYXkoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaChBcnRzOjpCeXRlU291bmRQcm9kdWNlciBwcm9kdWNlcikgPSAwOwogICAgICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2goQXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXIgcHJvZHVjZXIpID0g
MDsKICAgICAgICB2aXJ0dWFsIEFydHM6Ok9iamVjdCBjcmVhdGVPYmplY3QoY29uc3Qgc3RkOjpz
dHJpbmcmIG5hbWUpID0gMDsKfTsKCmNsYXNzIFNpbXBsZVNvdW5kU2VydmVyX3N0dWIgOiB2aXJ0
dWFsIHB1YmxpYyBTaW1wbGVTb3VuZFNlcnZlcl9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQ
bGF5T2JqZWN0RmFjdG9yeV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFNpbXBsZVNvdW5kU2Vy
dmVyX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBTaW1wbGVTb3VuZFNlcnZlcl9zdHViKEFydHM6
OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICBBcnRzOjpT
dGVyZW9FZmZlY3RTdGFjayBvdXRzdGFjaygpOwogICAgICAgIGZsb2F0IG1pblN0cmVhbUJ1ZmZl
clRpbWUoKTsKICAgICAgICBmbG9hdCBzZXJ2ZXJCdWZmZXJUaW1lKCk7CiAgICAgICAgbG9uZyBw
bGF5KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7CiAgICAgICAgdm9pZCBhdHRhY2goQXJ0
czo6Qnl0ZVNvdW5kUHJvZHVjZXIgcHJvZHVjZXIpOwogICAgICAgIHZvaWQgZGV0YWNoKEFydHM6
OkJ5dGVTb3VuZFByb2R1Y2VyIHByb2R1Y2VyKTsKICAgICAgICBBcnRzOjpPYmplY3QgY3JlYXRl
T2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKfTsKCmNsYXNzIFNpbXBsZVNvdW5kU2Vy
dmVyX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTaW1wbGVTb3VuZFNlcnZlcl9iYXNlLCB2aXJ0dWFs
IHB1YmxpYyBBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeV9za2VsIHsKcHJvdGVjdGVkOgoKICAgICAg
ICBpbmxpbmUgdm9pZCBtaW5TdHJlYW1CdWZmZXJUaW1lX2NoYW5nZWQoZmxvYXQgbmV3VmFsdWUp
IHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoIm1pblN0cmVhbUJ1ZmZlclRpbWVfY2hh
bmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBzZXJ2ZXJCdWZm
ZXJUaW1lX2NoYW5nZWQoZmxvYXQgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2No
YW5nZWQoInNlcnZlckJ1ZmZlclRpbWVfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1
YmxpYzoKICAgICAgICBTaW1wbGVTb3VuZFNlcnZlcl9za2VsKCk7CgogICAgICAgIHN0YXRpYyBz
dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50
ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpz
dHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsK
ICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVy
ICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZl
cmVuY2UuaCIgMQojIDQzMCAic291bmRzZXJ2ZXIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNz
IFNpbXBsZVNvdW5kU2VydmVyIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAg
ICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFNpbXBsZVNv
dW5kU2VydmVyX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgU2ltcGxlU291bmRTZXJ2ZXJf
YmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRl
KCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICBfY2FjaGU9KFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3Qo
U2ltcGxlU291bmRTZXJ2ZXJfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgo
dm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hl
OwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgU2ltcGxlU291bmRTZXJ2ZXIo
U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7
fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UgX2Jhc2Vf
Y2xhc3M7CgogICAgICAgIGlubGluZSBTaW1wbGVTb3VuZFNlcnZlcigpIDogQXJ0czo6T2JqZWN0
KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFNpbXBsZVNvdW5kU2VydmVy
KGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qo
U2ltcGxlU291bmRTZXJ2ZXJfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7
fQogICAgICAgIGlubGluZSBTaW1wbGVTb3VuZFNlcnZlcihjb25zdCBBcnRzOjpSZWZlcmVuY2Ug
JnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFNpbXBsZVNv
dW5kU2VydmVyX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooU2ltcGxlU291bmRTZXJ2
ZXJfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkg
e30KICAgICAgICBpbmxpbmUgU2ltcGxlU291bmRTZXJ2ZXIoY29uc3QgQXJ0czo6RHluYW1pY0Nh
c3QmIGMpIDogQXJ0czo6T2JqZWN0KFNpbXBsZVNvdW5kU2VydmVyX2Jhc2U6Ol9mcm9tRHluYW1p
Y0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU2ltcGxlU291
bmRTZXJ2ZXIoY29uc3QgU2ltcGxlU291bmRTZXJ2ZXImIHRhcmdldCkgOiBBcnRzOjpPYmplY3Qo
dGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFNp
bXBsZVNvdW5kU2VydmVyKEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCks
IF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgU2ltcGxlU291bmRTZXJ2ZXIgbnVs
bCgpIHtyZXR1cm4gU2ltcGxlU291bmRTZXJ2ZXIoKFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqKTAp
O30KICAgICAgICBpbmxpbmUgc3RhdGljIFNpbXBsZVNvdW5kU2VydmVyIF9mcm9tX2Jhc2UoU2lt
cGxlU291bmRTZXJ2ZXJfYmFzZSogYikge3JldHVybiBTaW1wbGVTb3VuZFNlcnZlcihiKTt9CiAg
ICAgICAgaW5saW5lIFNpbXBsZVNvdW5kU2VydmVyJiBvcGVyYXRvcj0oY29uc3QgU2ltcGxlU291
bmRTZXJ2ZXImIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5f
cG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAg
ICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0
YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6
UGxheU9iamVjdEZhY3RvcnkoKSBjb25zdCB7IHJldHVybiBBcnRzOjpQbGF5T2JqZWN0RmFjdG9y
eSgqX3Bvb2wpOyB9CiAgICAgICAgaW5saW5lIFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqIF9iYXNl
KCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5l
IEFydHM6OlBsYXlPYmplY3QgY3JlYXRlUGxheU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgZmls
ZW5hbWUpOwogICAgICAgIGlubGluZSBBcnRzOjpTdGVyZW9FZmZlY3RTdGFjayBvdXRzdGFjaygp
OwogICAgICAgIGlubGluZSBmbG9hdCBtaW5TdHJlYW1CdWZmZXJUaW1lKCk7CiAgICAgICAgaW5s
aW5lIGZsb2F0IHNlcnZlckJ1ZmZlclRpbWUoKTsKICAgICAgICBpbmxpbmUgbG9uZyBwbGF5KGNv
bnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7CiAgICAgICAgaW5saW5lIHZvaWQgYXR0YWNoKEFy
dHM6OkJ5dGVTb3VuZFByb2R1Y2VyIHByb2R1Y2VyKTsKICAgICAgICBpbmxpbmUgdm9pZCBkZXRh
Y2goQXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXIgcHJvZHVjZXIpOwogICAgICAgIGlubGluZSBBcnRz
OjpPYmplY3QgY3JlYXRlT2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKfTsKCmNsYXNz
IFNvdW5kU2VydmVyX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTaW1wbGVTb3VuZFNlcnZl
cl9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAg
ICAgIHN0YXRpYyBTb3VuZFNlcnZlcl9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBz
dWJDbGFzcyA9ICJBcnRzOjpTb3VuZFNlcnZlciIpOwogICAgICAgIHN0YXRpYyBTb3VuZFNlcnZl
cl9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRp
YyBTb3VuZFNlcnZlcl9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2Ug
cmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFNvdW5kU2VydmVyX2Jhc2UgKl9m
cm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGlu
ZSBTb3VuZFNlcnZlcl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7
CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
ICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZh
dWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWdu
ZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIEFydHM6OlJlYWx0aW1lU3RhdHVzIHJlYWx0
aW1lU3RhdHVzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgbG9uZyBzZWNvbmRzVW50aWxTdXNwZW5k
KCkgPSAwOwogICAgICAgIHZpcnR1YWwgYm9vbCBzdXNwZW5kKCkgPSAwOwogICAgICAgIHZpcnR1
YWwgYm9vbCB0ZXJtaW5hdGUoKSA9IDA7Cn07CgpjbGFzcyBTb3VuZFNlcnZlcl9zdHViIDogdmly
dHVhbCBwdWJsaWMgU291bmRTZXJ2ZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U2ltcGxl
U291bmRTZXJ2ZXJfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTb3VuZFNlcnZlcl9zdHViKCk7
CgpwdWJsaWM6CiAgICAgICAgU291bmRTZXJ2ZXJfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25u
ZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgQXJ0czo6UmVhbHRpbWVTdGF0dXMgcmVh
bHRpbWVTdGF0dXMoKTsKICAgICAgICBsb25nIHNlY29uZHNVbnRpbFN1c3BlbmQoKTsKICAgICAg
ICBib29sIHN1c3BlbmQoKTsKICAgICAgICBib29sIHRlcm1pbmF0ZSgpOwp9OwoKY2xhc3MgU291
bmRTZXJ2ZXJfc2tlbCA6IHZpcnR1YWwgcHVibGljIFNvdW5kU2VydmVyX2Jhc2UsIHZpcnR1YWwg
cHVibGljIEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX3NrZWwgewpwcm90ZWN0ZWQ6CgogICAgICAg
IGlubGluZSB2b2lkIHNlY29uZHNVbnRpbFN1c3BlbmRfY2hhbmdlZChsb25nIG5ld1ZhbHVlKSB7
CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJzZWNvbmRzVW50aWxTdXNwZW5kX2NoYW5n
ZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CgpwdWJsaWM6CiAgICAgICAgU291bmRTZXJ2ZXJfc2tl
bCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAg
ICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBh
dGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lk
IF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIg
KnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAx
ICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA1NDAgInNvdW5kc2VydmVyLmgiIDIK
bmFtZXNwYWNlIEFydHMgewpjbGFzcyBTb3VuZFNlcnZlciA6IHB1YmxpYyBBcnRzOjpPYmplY3Qg
ewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsK
ICAgICAgICBTb3VuZFNlcnZlcl9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFNvdW5kU2Vy
dmVyX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2Ny
ZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgX2NhY2hlPShTb3VuZFNlcnZlcl9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFNv
dW5kU2VydmVyX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAg
ICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyKFNvdW5kU2VydmVyX2Jh
c2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAg
dHlwZWRlZiBTb3VuZFNlcnZlcl9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgU291
bmRTZXJ2ZXIoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAg
IGlubGluZSBTb3VuZFNlcnZlcihjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAg
ICAgICAgQXJ0czo6T2JqZWN0KFNvdW5kU2VydmVyX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkp
LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU291bmRTZXJ2ZXIoY29uc3QgQXJ0czo6UmVm
ZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhT
b3VuZFNlcnZlcl9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFNvdW5kU2VydmVyX2Jh
c2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAg
ICAgICAgaW5saW5lIFNvdW5kU2VydmVyKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFy
dHM6Ok9iamVjdChTb3VuZFNlcnZlcl9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkp
KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyKGNvbnN0IFNvdW5kU2Vy
dmVyJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQu
X2NhY2hlKSB7fQogICAgICAgIGlubGluZSBTb3VuZFNlcnZlcihBcnRzOjpPYmplY3Q6OlBvb2wm
IHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGlj
IFNvdW5kU2VydmVyIG51bGwoKSB7cmV0dXJuIFNvdW5kU2VydmVyKChTb3VuZFNlcnZlcl9iYXNl
KikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTb3VuZFNlcnZlciBfZnJvbV9iYXNlKFNvdW5k
U2VydmVyX2Jhc2UqIGIpIHtyZXR1cm4gU291bmRTZXJ2ZXIoYik7fQogICAgICAgIGlubGluZSBT
b3VuZFNlcnZlciYgb3BlcmF0b3I9KGNvbnN0IFNvdW5kU2VydmVyJiB0YXJnZXQpIHsKICAgICAg
ICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAg
ICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9w
b29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAg
ICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9
CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlNpbXBsZVNvdW5kU2VydmVyKCkgY29uc3Qg
eyByZXR1cm4gQXJ0czo6U2ltcGxlU291bmRTZXJ2ZXIoKl9wb29sKTsgfQogICAgICAgIGlubGlu
ZSBvcGVyYXRvciBBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6
OlBsYXlPYmplY3RGYWN0b3J5KCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgU291bmRTZXJ2ZXJf
YmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAg
ICAgICBpbmxpbmUgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2sgb3V0c3RhY2soKTsKICAgICAgICBp
bmxpbmUgZmxvYXQgbWluU3RyZWFtQnVmZmVyVGltZSgpOwogICAgICAgIGlubGluZSBmbG9hdCBz
ZXJ2ZXJCdWZmZXJUaW1lKCk7CiAgICAgICAgaW5saW5lIGxvbmcgcGxheShjb25zdCBzdGQ6OnN0
cmluZyYgZmlsZW5hbWUpOwogICAgICAgIGlubGluZSB2b2lkIGF0dGFjaChBcnRzOjpCeXRlU291
bmRQcm9kdWNlciBwcm9kdWNlcik7CiAgICAgICAgaW5saW5lIHZvaWQgZGV0YWNoKEFydHM6OkJ5
dGVTb3VuZFByb2R1Y2VyIHByb2R1Y2VyKTsKICAgICAgICBpbmxpbmUgQXJ0czo6T2JqZWN0IGNy
ZWF0ZU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5saW5lIEFydHM6
OlBsYXlPYmplY3QgY3JlYXRlUGxheU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUp
OwogICAgICAgIGlubGluZSBBcnRzOjpSZWFsdGltZVN0YXR1cyByZWFsdGltZVN0YXR1cygpOwog
ICAgICAgIGlubGluZSBsb25nIHNlY29uZHNVbnRpbFN1c3BlbmQoKTsKICAgICAgICBpbmxpbmUg
Ym9vbCBzdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIGJvb2wgdGVybWluYXRlKCk7Cn07CgpjbGFz
cyBTb3VuZFNlcnZlclYyX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTb3VuZFNlcnZlcl9i
YXNlLAogICAgICAgIHZpcnR1YWwgcHVibGljIEFydHM6OlBsYXlPYmplY3RGYWN0b3J5VjJfYmFz
ZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBz
dGF0aWMgU291bmRTZXJ2ZXJWMl9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJD
bGFzcyA9ICJBcnRzOjpTb3VuZFNlcnZlclYyIik7CiAgICAgICAgc3RhdGljIFNvdW5kU2VydmVy
VjJfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0
aWMgU291bmRTZXJ2ZXJWMl9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVu
Y2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFNvdW5kU2VydmVyVjJfYmFz
ZSAqX2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAg
aW5saW5lIFNvdW5kU2VydmVyVjJfYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZv
aWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
PiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0
KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVhbCBsb25nIGF1dG9TdXNwZW5kU2Vj
b25kcygpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgYXV0b1N1c3BlbmRTZWNvbmRzKGxvbmcg
bmV3VmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIGxvbmcgYnVmZmVyU2l6ZU11bHRpcGxpZXIo
KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGJ1ZmZlclNpemVNdWx0aXBsaWVyKGxvbmcgbmV3
VmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGF1ZGlvTWV0aG9kKCkgPSAw
OwogICAgICAgIHZpcnR1YWwgbG9uZyBzYW1wbGluZ1JhdGUoKSA9IDA7CiAgICAgICAgdmlydHVh
bCBsb25nIGNoYW5uZWxzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgbG9uZyBiaXRzKCkgPSAwOwog
ICAgICAgIHZpcnR1YWwgYm9vbCBmdWxsRHVwbGV4KCkgPSAwOwogICAgICAgIHZpcnR1YWwgc3Rk
OjpzdHJpbmcgYXVkaW9EZXZpY2UoKSA9IDA7CiAgICAgICAgdmlydHVhbCBsb25nIGZyYWdtZW50
cygpID0gMDsKICAgICAgICB2aXJ0dWFsIGxvbmcgZnJhZ21lbnRTaXplKCkgPSAwOwogICAgICAg
IHZpcnR1YWwgc3RkOjpzdHJpbmcgdmVyc2lvbigpID0gMDsKICAgICAgICB2aXJ0dWFsIEFydHM6
OlN0ZXJlb1ZvbHVtZUNvbnRyb2wgb3V0Vm9sdW1lKCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0
czo6U2FtcGxlU3RvcmFnZSBzYW1wbGVTdG9yYWdlKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBjaGVja05ld09iamVjdHMoKSA9IDA7Cn07CgpjbGFzcyBTb3VuZFNlcnZlclYyX3N0dWIgOiB2
aXJ0dWFsIHB1YmxpYyBTb3VuZFNlcnZlclYyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlNv
dW5kU2VydmVyX3N0dWIsCiAgICAgICAgdmlydHVhbCBwdWJsaWMgQXJ0czo6UGxheU9iamVjdEZh
Y3RvcnlWMl9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFNvdW5kU2VydmVyVjJfc3R1YigpOwoK
cHVibGljOgogICAgICAgIFNvdW5kU2VydmVyVjJfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25u
ZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgbG9uZyBhdXRvU3VzcGVuZFNlY29uZHMo
KTsKICAgICAgICB2b2lkIGF1dG9TdXNwZW5kU2Vjb25kcyhsb25nIG5ld1ZhbHVlKTsKICAgICAg
ICBsb25nIGJ1ZmZlclNpemVNdWx0aXBsaWVyKCk7CiAgICAgICAgdm9pZCBidWZmZXJTaXplTXVs
dGlwbGllcihsb25nIG5ld1ZhbHVlKTsKICAgICAgICBzdGQ6OnN0cmluZyBhdWRpb01ldGhvZCgp
OwogICAgICAgIGxvbmcgc2FtcGxpbmdSYXRlKCk7CiAgICAgICAgbG9uZyBjaGFubmVscygpOwog
ICAgICAgIGxvbmcgYml0cygpOwogICAgICAgIGJvb2wgZnVsbER1cGxleCgpOwogICAgICAgIHN0
ZDo6c3RyaW5nIGF1ZGlvRGV2aWNlKCk7CiAgICAgICAgbG9uZyBmcmFnbWVudHMoKTsKICAgICAg
ICBsb25nIGZyYWdtZW50U2l6ZSgpOwogICAgICAgIHN0ZDo6c3RyaW5nIHZlcnNpb24oKTsKICAg
ICAgICBBcnRzOjpTdGVyZW9Wb2x1bWVDb250cm9sIG91dFZvbHVtZSgpOwogICAgICAgIEFydHM6
OlNhbXBsZVN0b3JhZ2Ugc2FtcGxlU3RvcmFnZSgpOwogICAgICAgIHZvaWQgY2hlY2tOZXdPYmpl
Y3RzKCk7Cn07CgpjbGFzcyBTb3VuZFNlcnZlclYyX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTb3Vu
ZFNlcnZlclYyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlNvdW5kU2VydmVyX3NrZWwsCiAg
ICAgICAgdmlydHVhbCBwdWJsaWMgQXJ0czo6UGxheU9iamVjdEZhY3RvcnlWMl9za2VsIHsKcHJv
dGVjdGVkOgoKICAgICAgICBpbmxpbmUgdm9pZCBhdXRvU3VzcGVuZFNlY29uZHNfY2hhbmdlZChs
b25nIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJhdXRvU3VzcGVu
ZFNlY29uZHNfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9p
ZCBidWZmZXJTaXplTXVsdGlwbGllcl9jaGFuZ2VkKGxvbmcgbmV3VmFsdWUpIHsKICAgICAgICAg
ICAgICAgIF9lbWl0X2NoYW5nZWQoImJ1ZmZlclNpemVNdWx0aXBsaWVyX2NoYW5nZWQiLG5ld1Zh
bHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgYXVkaW9NZXRob2RfY2hhbmdlZChj
b25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5n
ZWQoImF1ZGlvTWV0aG9kX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaW5s
aW5lIHZvaWQgc2FtcGxpbmdSYXRlX2NoYW5nZWQobG9uZyBuZXdWYWx1ZSkgewogICAgICAgICAg
ICAgICAgX2VtaXRfY2hhbmdlZCgic2FtcGxpbmdSYXRlX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAg
ICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgY2hhbm5lbHNfY2hhbmdlZChsb25nIG5ld1ZhbHVl
KSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJjaGFubmVsc19jaGFuZ2VkIixuZXdW
YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGJpdHNfY2hhbmdlZChsb25nIG5l
d1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJiaXRzX2NoYW5nZWQiLG5l
d1ZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgZnVsbER1cGxleF9jaGFuZ2Vk
KGJvb2wgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoImZ1bGxEdXBs
ZXhfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBhdWRp
b0RldmljZV9jaGFuZ2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSkgewogICAgICAgICAg
ICAgICAgX2VtaXRfY2hhbmdlZCgiYXVkaW9EZXZpY2VfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAg
ICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBmcmFnbWVudHNfY2hhbmdlZChsb25nIG5ld1ZhbHVl
KSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJmcmFnbWVudHNfY2hhbmdlZCIsbmV3
VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBmcmFnbWVudFNpemVfY2hhbmdl
ZChsb25nIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJmcmFnbWVu
dFNpemVfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCB2
ZXJzaW9uX2NoYW5nZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAg
ICAgICBfZW1pdF9jaGFuZ2VkKCJ2ZXJzaW9uX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9
CgpwdWJsaWM6CiAgICAgICAgU291bmRTZXJ2ZXJWMl9za2VsKCk7CgogICAgICAgIHN0YXRpYyBz
dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50
ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpz
dHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsK
ICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVy
ICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZl
cmVuY2UuaCIgMQojIDcxMiAic291bmRzZXJ2ZXIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNz
IFNvdW5kU2VydmVyVjIgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBz
dGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU291bmRTZXJ2ZXJW
Ml9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyVjJfYmFzZSAqX21ldGhv
ZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAg
ICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9
KFNvdW5kU2VydmVyVjJfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChTb3VuZFNlcnZlclYyX2Jh
c2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0
ZWQ6CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyVjIoU291bmRTZXJ2ZXJWMl9iYXNlKiBiKSA6
IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYg
U291bmRTZXJ2ZXJWMl9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgU291bmRTZXJ2
ZXJWMigpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5s
aW5lIFNvdW5kU2VydmVyVjIoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAg
ICAgIEFydHM6Ok9iamVjdChTb3VuZFNlcnZlclYyX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkp
LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU291bmRTZXJ2ZXJWMihjb25zdCBBcnRzOjpS
ZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/
KFNvdW5kU2VydmVyVjJfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTb3VuZFNlcnZl
clYyX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDAp
IHt9CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyVjIoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3Qm
IGMpIDogQXJ0czo6T2JqZWN0KFNvdW5kU2VydmVyVjJfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChj
Lm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTb3VuZFNlcnZlclYyKGNv
bnN0IFNvdW5kU2VydmVyVjImIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwg
X2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyVjIoQXJ0
czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAg
ICAgaW5saW5lIHN0YXRpYyBTb3VuZFNlcnZlclYyIG51bGwoKSB7cmV0dXJuIFNvdW5kU2VydmVy
VjIoKFNvdW5kU2VydmVyVjJfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgU291bmRT
ZXJ2ZXJWMiBfZnJvbV9iYXNlKFNvdW5kU2VydmVyVjJfYmFzZSogYikge3JldHVybiBTb3VuZFNl
cnZlclYyKGIpO30KICAgICAgICBpbmxpbmUgU291bmRTZXJ2ZXJWMiYgb3BlcmF0b3I9KGNvbnN0
IFNvdW5kU2VydmVyVjImIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRh
cmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwog
ICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2Fj
aGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3Ig
QXJ0czo6U291bmRTZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTb3VuZFNlcnZlcigqX3Bv
b2wpOyB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlNpbXBsZVNvdW5kU2VydmVyKCkg
Y29uc3QgeyByZXR1cm4gQXJ0czo6U2ltcGxlU291bmRTZXJ2ZXIoKl9wb29sKTsgfQogICAgICAg
IGlubGluZSBvcGVyYXRvciBBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeSgpIGNvbnN0IHsgcmV0dXJu
IEFydHM6OlBsYXlPYmplY3RGYWN0b3J5KCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgb3BlcmF0
b3IgQXJ0czo6UGxheU9iamVjdEZhY3RvcnlWMigpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlBsYXlP
YmplY3RGYWN0b3J5VjIoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTb3VuZFNlcnZlclYyX2Jh
c2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAg
ICAgaW5saW5lIEFydHM6OlJlYWx0aW1lU3RhdHVzIHJlYWx0aW1lU3RhdHVzKCk7CiAgICAgICAg
aW5saW5lIGxvbmcgc2Vjb25kc1VudGlsU3VzcGVuZCgpOwogICAgICAgIGlubGluZSBib29sIHN1
c3BlbmQoKTsKICAgICAgICBpbmxpbmUgYm9vbCB0ZXJtaW5hdGUoKTsKICAgICAgICBpbmxpbmUg
QXJ0czo6U3RlcmVvRWZmZWN0U3RhY2sgb3V0c3RhY2soKTsKICAgICAgICBpbmxpbmUgZmxvYXQg
bWluU3RyZWFtQnVmZmVyVGltZSgpOwogICAgICAgIGlubGluZSBmbG9hdCBzZXJ2ZXJCdWZmZXJU
aW1lKCk7CiAgICAgICAgaW5saW5lIGxvbmcgcGxheShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5h
bWUpOwogICAgICAgIGlubGluZSB2b2lkIGF0dGFjaChBcnRzOjpCeXRlU291bmRQcm9kdWNlciBw
cm9kdWNlcik7CiAgICAgICAgaW5saW5lIHZvaWQgZGV0YWNoKEFydHM6OkJ5dGVTb3VuZFByb2R1
Y2VyIHByb2R1Y2VyKTsKICAgICAgICBpbmxpbmUgQXJ0czo6T2JqZWN0IGNyZWF0ZU9iamVjdChj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5saW5lIEFydHM6OlBsYXlPYmplY3Qg
Y3JlYXRlUGxheU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpOwogICAgICAgIGlu
bGluZSBBcnRzOjpQbGF5T2JqZWN0IGNyZWF0ZVBsYXlPYmplY3RGb3JVUkwoY29uc3Qgc3RkOjpz
dHJpbmcmIHVybCwgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWV0eXBlLCBib29sIGNyZWF0ZUJVUyk7
CiAgICAgICAgaW5saW5lIEFydHM6OlBsYXlPYmplY3QgY3JlYXRlUGxheU9iamVjdEZvclN0cmVh
bShBcnRzOjpJbnB1dFN0cmVhbSBpbnN0cmVhbSwgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWV0eXBl
LCBib29sIGNyZWF0ZUJVUyk7CiAgICAgICAgaW5saW5lIGxvbmcgYXV0b1N1c3BlbmRTZWNvbmRz
KCk7CiAgICAgICAgaW5saW5lIHZvaWQgYXV0b1N1c3BlbmRTZWNvbmRzKGxvbmcgX25ld1ZhbHVl
KTsKICAgICAgICBpbmxpbmUgbG9uZyBidWZmZXJTaXplTXVsdGlwbGllcigpOwogICAgICAgIGlu
bGluZSB2b2lkIGJ1ZmZlclNpemVNdWx0aXBsaWVyKGxvbmcgX25ld1ZhbHVlKTsKICAgICAgICBp
bmxpbmUgc3RkOjpzdHJpbmcgYXVkaW9NZXRob2QoKTsKICAgICAgICBpbmxpbmUgbG9uZyBzYW1w
bGluZ1JhdGUoKTsKICAgICAgICBpbmxpbmUgbG9uZyBjaGFubmVscygpOwogICAgICAgIGlubGlu
ZSBsb25nIGJpdHMoKTsKICAgICAgICBpbmxpbmUgYm9vbCBmdWxsRHVwbGV4KCk7CiAgICAgICAg
aW5saW5lIHN0ZDo6c3RyaW5nIGF1ZGlvRGV2aWNlKCk7CiAgICAgICAgaW5saW5lIGxvbmcgZnJh
Z21lbnRzKCk7CiAgICAgICAgaW5saW5lIGxvbmcgZnJhZ21lbnRTaXplKCk7CiAgICAgICAgaW5s
aW5lIHN0ZDo6c3RyaW5nIHZlcnNpb24oKTsKICAgICAgICBpbmxpbmUgQXJ0czo6U3RlcmVvVm9s
dW1lQ29udHJvbCBvdXRWb2x1bWUoKTsKICAgICAgICBpbmxpbmUgQXJ0czo6U2FtcGxlU3RvcmFn
ZSBzYW1wbGVTdG9yYWdlKCk7CiAgICAgICAgaW5saW5lIHZvaWQgY2hlY2tOZXdPYmplY3RzKCk7
Cn07CgpjbGFzcyBXYXZQbGF5T2JqZWN0X2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQbGF5
T2JqZWN0X2Jhc2UsCiAgICAgICAgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfYmFz
ZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBz
dGF0aWMgV2F2UGxheU9iamVjdF9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJD
bGFzcyA9ICJBcnRzOjpXYXZQbGF5T2JqZWN0Iik7CiAgICAgICAgc3RhdGljIFdhdlBsYXlPYmpl
Y3RfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0
aWMgV2F2UGxheU9iamVjdF9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVu
Y2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFdhdlBsYXlPYmplY3RfYmFz
ZSAqX2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAg
aW5saW5lIFdhdlBsYXlPYmplY3RfYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZv
aWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
PiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0
KHVuc2lnbmVkIGxvbmcgaWlkKTsKCn07CgpjbGFzcyBXYXZQbGF5T2JqZWN0X3N0dWIgOiB2aXJ0
dWFsIHB1YmxpYyBXYXZQbGF5T2JqZWN0X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlBsYXlP
YmplY3Rfc3R1YiwKICAgICAgICB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHVi
IHsKcHJvdGVjdGVkOgogICAgICAgIFdhdlBsYXlPYmplY3Rfc3R1YigpOwoKcHVibGljOgogICAg
ICAgIFdhdlBsYXlPYmplY3Rfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25n
IG9iamVjdElEKTsKCn07CgpjbGFzcyBXYXZQbGF5T2JqZWN0X3NrZWwgOiB2aXJ0dWFsIHB1Ymxp
YyBXYXZQbGF5T2JqZWN0X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlBsYXlPYmplY3Rfc2tl
bCwKICAgICAgICB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVj
dGVkOgoKICAgICAgICBmbG9hdCAqbGVmdDsKICAgICAgICBmbG9hdCAqcmlnaHQ7CgpwdWJsaWM6
CiAgICAgICAgV2F2UGxheU9iamVjdF9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmlu
ZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFt
ZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGlu
dGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2
b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQs
bG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIg
MQojIDg0MSAic291bmRzZXJ2ZXIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFdhdlBsYXlP
YmplY3QgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0
czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgV2F2UGxheU9iamVjdF9iYXNlICpf
Y2FjaGU7CiAgICAgICAgaW5saW5lIFdhdlBsYXlPYmplY3RfYmFzZSAqX21ldGhvZF9jYWxsKCkg
ewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBp
ZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFdhdlBsYXlP
YmplY3RfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChXYXZQbGF5T2JqZWN0X2Jhc2U6Ol9JSUQp
OwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAg
ICAgaW5saW5lIFdhdlBsYXlPYmplY3QoV2F2UGxheU9iamVjdF9iYXNlKiBiKSA6IEFydHM6Ok9i
amVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgV2F2UGxheU9i
amVjdF9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgV2F2UGxheU9iamVjdCgpIDog
QXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFdhdlBs
YXlPYmplY3QoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6
Ok9iamVjdChXYXZQbGF5T2JqZWN0X2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUo
MCkge30KICAgICAgICBpbmxpbmUgV2F2UGxheU9iamVjdChjb25zdCBBcnRzOjpSZWZlcmVuY2Ug
JnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFdhdlBsYXlP
YmplY3RfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihXYXZQbGF5T2JqZWN0X2Jhc2U6
Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAg
ICAgaW5saW5lIFdhdlBsYXlPYmplY3QoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0
czo6T2JqZWN0KFdhdlBsYXlPYmplY3RfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgp
KSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBXYXZQbGF5T2JqZWN0KGNvbnN0IFdhdlBs
YXlPYmplY3QmIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRh
cmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFdhdlBsYXlPYmplY3QoQXJ0czo6T2JqZWN0
OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l
IHN0YXRpYyBXYXZQbGF5T2JqZWN0IG51bGwoKSB7cmV0dXJuIFdhdlBsYXlPYmplY3QoKFdhdlBs
YXlPYmplY3RfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgV2F2UGxheU9iamVjdCBf
ZnJvbV9iYXNlKFdhdlBsYXlPYmplY3RfYmFzZSogYikge3JldHVybiBXYXZQbGF5T2JqZWN0KGIp
O30KICAgICAgICBpbmxpbmUgV2F2UGxheU9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IFdhdlBsYXlP
YmplY3QmIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9v
bCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAg
ICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJn
ZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6UGxh
eU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlBsYXlPYmplY3QoKl9wb29sKTsgfQogICAg
ICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpQbGF5T2JqZWN0X3ByaXZhdGUoKSBjb25zdCB7IHJl
dHVybiBBcnRzOjpQbGF5T2JqZWN0X3ByaXZhdGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBv
cGVyYXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9k
dWxlKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgV2F2UGxheU9iamVjdF9iYXNlKiBfYmFzZSgp
IHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBz
dGQ6OnN0cmluZyBkZXNjcmlwdGlvbigpOwogICAgICAgIGlubGluZSBBcnRzOjpwb1RpbWUgY3Vy
cmVudFRpbWUoKTsKICAgICAgICBpbmxpbmUgQXJ0czo6cG9UaW1lIG92ZXJhbGxUaW1lKCk7CiAg
ICAgICAgaW5saW5lIEFydHM6OnBvQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllcygpOwogICAgICAg
IGlubGluZSBzdGQ6OnN0cmluZyBtZWRpYU5hbWUoKTsKICAgICAgICBpbmxpbmUgQXJ0czo6cG9T
dGF0ZSBzdGF0ZSgpOwogICAgICAgIGlubGluZSB2b2lkIHBsYXkoKTsKICAgICAgICBpbmxpbmUg
dm9pZCBzZWVrKGNvbnN0IEFydHM6OnBvVGltZSYgbmV3VGltZSk7CiAgICAgICAgaW5saW5lIHZv
aWQgcGF1c2UoKTsKICAgICAgICBpbmxpbmUgdm9pZCBoYWx0KCk7CiAgICAgICAgaW5saW5lIGJv
b2wgbG9hZE1lZGlhKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7CiAgICAgICAgaW5saW5l
IEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9p
ZCBzdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9p
ZCBzdHJlYW1Jbml0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAg
ICBpbmxpbmUgdm9pZCBzdHJlYW1FbmQoKTsKfTsKCgoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6
OlNhbXBsZVN0b3JhZ2VFbnRyeTo6bmFtZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRp
Y19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlKj4oX2NhY2hlKS0+bmFtZSgpOnN0
YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlKj4oX21ldGhvZF9jYWxsKCkp
LT5uYW1lKCk7Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnk6
OmZpbGVuYW1lKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2Ft
cGxlU3RvcmFnZUVudHJ5X2Jhc2UqPihfY2FjaGUpLT5maWxlbmFtZSgpOnN0YXRpY19jYXN0PEFy
dHM6OlNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5maWxlbmFtZSgp
Owp9CgppbmxpbmUgYm9vbCBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnk6OmNvbXBsZXRlZCgpCnsK
ICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRy
eV9iYXNlKj4oX2NhY2hlKS0+Y29tcGxldGVkKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U2FtcGxlU3Rv
cmFnZUVudHJ5X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNvbXBsZXRlZCgpOwp9CgppbmxpbmUg
dm9pZCBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnk6OndyaXRlKGNvbnN0IHN0ZDo6dmVjdG9yPEFy
dHM6Om1jb3BieXRlPiYgZGF0YSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6
U2FtcGxlU3RvcmFnZUVudHJ5X2Jhc2UqPihfY2FjaGUpLT53cml0ZShkYXRhKTpzdGF0aWNfY2Fz
dDxBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+d3JpdGUo
ZGF0YSk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeTo6ZmluaXNoKCkK
ewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2FtcGxlU3RvcmFnZUVudHJ5X2Jh
c2UqPihfY2FjaGUpLT5maW5pc2goKTpzdGF0aWNfY2FzdDxBcnRzOjpTYW1wbGVTdG9yYWdlRW50
cnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZmluaXNoKCk7Cn0KCmlubGluZSBBcnRzOjpTYW1w
bGVTdG9yYWdlOjpTYW1wbGVTdG9yYWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXJlY3RvcnksIGJv
b2wgY2xlYXJPbkluaXQpCiAgICAgICAgICAgICAgICA6IEFydHM6Ok9iamVjdChTYW1wbGVTdG9y
YWdlX2Jhc2U6Ol9jcmVhdGUoKSkKewogICAgICAgIHN0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0
b3JhZ2VfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y29uc3RydWN0b3IoZGlyZWN0b3J5LCBjbGVh
ck9uSW5pdCk7Cn0KCmlubGluZSBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnkgQXJ0czo6U2FtcGxl
U3RvcmFnZTo6Y3JlYXRlRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICBy
ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VfYmFzZSo+KF9jYWNo
ZSktPmNyZWF0ZUVudHJ5KG5hbWUpOnN0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VfYmFz
ZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlRW50cnkobmFtZSk7Cn0KCmlubGluZSB2b2lkIEFy
dHM6OlNhbXBsZVN0b3JhZ2U6OmFkZEVudHJ5KEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBlbnRy
eSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2FtcGxlU3RvcmFnZV9iYXNl
Kj4oX2NhY2hlKS0+YWRkRW50cnkoZW50cnkpOnN0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3Jh
Z2VfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YWRkRW50cnkoZW50cnkpOwp9CgppbmxpbmUgdm9p
ZCBBcnRzOjpTYW1wbGVTdG9yYWdlOjpyZW1vdmVFbnRyeShBcnRzOjpTYW1wbGVTdG9yYWdlRW50
cnkgZW50cnkpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3Jh
Z2VfYmFzZSo+KF9jYWNoZSktPnJlbW92ZUVudHJ5KGVudHJ5KTpzdGF0aWNfY2FzdDxBcnRzOjpT
YW1wbGVTdG9yYWdlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnJlbW92ZUVudHJ5KGVudHJ5KTsK
fQoKaW5saW5lIEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBBcnRzOjpTYW1wbGVTdG9yYWdlOjpm
aW5kRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hl
P3N0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VfYmFzZSo+KF9jYWNoZSktPmZpbmRFbnRy
eShuYW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpTYW1wbGVTdG9yYWdlX2Jhc2UqPihfbWV0aG9kX2Nh
bGwoKSktPmZpbmRFbnRyeShuYW1lKTsKfQoKaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUg
QXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OmF1dG9TdXNwZW5kKCkKewogICAgICAgIHJldHVybiBf
Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPmF1dG9T
dXNwZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2Fs
bCgpKS0+YXV0b1N1c3BlbmQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6Qnl0ZVNvdW5kUHJvZHVj
ZXI6OnN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1
bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf
YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6Qnl0
ZVNvdW5kUHJvZHVjZXI6OnN0b3AoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz
OjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RvcCgpOnN0YXRpY19jYXN0PEFydHM6OlN5
bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0b3AoKTsKfQoKaW5saW5lIHZvaWQg
QXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OnN0cmVhbUluaXQoKQp7CiAgICAgICAgIF9jYWNoZT9z
dGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtSW5pdCgp
OnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0
cmVhbUluaXQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OnN0cmVh
bVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf
YmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1
bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQoKTsKfQoKaW5saW5lIHZvaWQg
QXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OnN0cmVhbUVuZCgpCnsKICAgICAgICAgX2NhY2hlP3N0
YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1FbmQoKTpz
dGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJl
YW1FbmQoKTsKfQoKaW5saW5lIGxvbmcgQXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OnNhbXBsaW5n
UmF0ZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkJ5dGVTb3Vu
ZFByb2R1Y2VyX2Jhc2UqPihfY2FjaGUpLT5zYW1wbGluZ1JhdGUoKTpzdGF0aWNfY2FzdDxBcnRz
OjpCeXRlU291bmRQcm9kdWNlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zYW1wbGluZ1JhdGUo
KTsKfQoKaW5saW5lIGxvbmcgQXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OmNoYW5uZWxzKCkKewog
ICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXJf
YmFzZSo+KF9jYWNoZSktPmNoYW5uZWxzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVNvdW5kUHJv
ZHVjZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y2hhbm5lbHMoKTsKfQoKaW5saW5lIGxvbmcg
QXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OmJpdHMoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9z
dGF0aWNfY2FzdDxBcnRzOjpCeXRlU291bmRQcm9kdWNlcl9iYXNlKj4oX2NhY2hlKS0+Yml0cygp
OnN0YXRpY19jYXN0PEFydHM6OkJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UqPihfbWV0aG9kX2NhbGwo
KSktPmJpdHMoKTsKfQoKaW5saW5lIEFydHM6OlBsYXlPYmplY3QgQXJ0czo6U2ltcGxlU291bmRT
ZXJ2ZXI6OmNyZWF0ZVBsYXlPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQp7CiAg
ICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeV9i
YXNlKj4oX2NhY2hlKS0+Y3JlYXRlUGxheU9iamVjdChmaWxlbmFtZSk6c3RhdGljX2Nhc3Q8QXJ0
czo6UGxheU9iamVjdEZhY3RvcnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlUGxheU9i
amVjdChmaWxlbmFtZSk7Cn0KCmlubGluZSBBcnRzOjpTdGVyZW9FZmZlY3RTdGFjayBBcnRzOjpT
aW1wbGVTb3VuZFNlcnZlcjo6b3V0c3RhY2soKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0
aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+b3V0c3RhY2so
KTpzdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxs
KCkpLT5vdXRzdGFjaygpOwp9CgppbmxpbmUgZmxvYXQgQXJ0czo6U2ltcGxlU291bmRTZXJ2ZXI6
Om1pblN0cmVhbUJ1ZmZlclRpbWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2Fz
dDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+bWluU3RyZWFtQnVmZmVy
VGltZSgpOnN0YXRpY19jYXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9k
X2NhbGwoKSktPm1pblN0cmVhbUJ1ZmZlclRpbWUoKTsKfQoKaW5saW5lIGZsb2F0IEFydHM6OlNp
bXBsZVNvdW5kU2VydmVyOjpzZXJ2ZXJCdWZmZXJUaW1lKCkKewogICAgICAgIHJldHVybiBfY2Fj
aGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPnNl
cnZlckJ1ZmZlclRpbWUoKTpzdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5zZXJ2ZXJCdWZmZXJUaW1lKCk7Cn0KCmlubGluZSBsb25nIEFy
dHM6OlNpbXBsZVNvdW5kU2VydmVyOjpwbGF5KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkK
ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2
ZXJfYmFzZSo+KF9jYWNoZSktPnBsYXkoZmlsZW5hbWUpOnN0YXRpY19jYXN0PEFydHM6OlNpbXBs
ZVNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnBsYXkoZmlsZW5hbWUpOwp9Cgpp
bmxpbmUgdm9pZCBBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcjo6YXR0YWNoKEFydHM6OkJ5dGVTb3Vu
ZFByb2R1Y2VyIHByb2R1Y2VyKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT
aW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+YXR0YWNoKHByb2R1Y2VyKTpzdGF0aWNf
Y2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdHRh
Y2gocHJvZHVjZXIpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcjo6ZGV0
YWNoKEFydHM6OkJ5dGVTb3VuZFByb2R1Y2VyIHByb2R1Y2VyKQp7CiAgICAgICAgIF9jYWNoZT9z
dGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+ZGV0YWNo
KHByb2R1Y2VyKTpzdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX21l
dGhvZF9jYWxsKCkpLT5kZXRhY2gocHJvZHVjZXIpOwp9CgppbmxpbmUgQXJ0czo6T2JqZWN0IEFy
dHM6OlNpbXBsZVNvdW5kU2VydmVyOjpjcmVhdGVPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIG5h
bWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNpbXBsZVNvdW5k
U2VydmVyX2Jhc2UqPihfY2FjaGUpLT5jcmVhdGVPYmplY3QobmFtZSk6c3RhdGljX2Nhc3Q8QXJ0
czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlT2JqZWN0
KG5hbWUpOwp9CgppbmxpbmUgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2sgQXJ0czo6U291bmRTZXJ2
ZXI6Om91dHN0YWNrKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6
U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPm91dHN0YWNrKCk6c3RhdGljX2Nhc3Q8
QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+b3V0c3RhY2so
KTsKfQoKaW5saW5lIGZsb2F0IEFydHM6OlNvdW5kU2VydmVyOjptaW5TdHJlYW1CdWZmZXJUaW1l
KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRT
ZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPm1pblN0cmVhbUJ1ZmZlclRpbWUoKTpzdGF0aWNfY2FzdDxB
cnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5taW5TdHJlYW1C
dWZmZXJUaW1lKCk7Cn0KCmlubGluZSBmbG9hdCBBcnRzOjpTb3VuZFNlcnZlcjo6c2VydmVyQnVm
ZmVyVGltZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNpbXBs
ZVNvdW5kU2VydmVyX2Jhc2UqPihfY2FjaGUpLT5zZXJ2ZXJCdWZmZXJUaW1lKCk6c3RhdGljX2Nh
c3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2VydmVy
QnVmZmVyVGltZSgpOwp9CgppbmxpbmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlcjo6cGxheShjb25z
dCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19j
YXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfY2FjaGUpLT5wbGF5KGZpbGVuYW1l
KTpzdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxs
KCkpLT5wbGF5KGZpbGVuYW1lKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U291bmRTZXJ2ZXI6OmF0
dGFjaChBcnRzOjpCeXRlU291bmRQcm9kdWNlciBwcm9kdWNlcikKewogICAgICAgICBfY2FjaGU/
c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPmF0dGFj
aChwcm9kdWNlcik6c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9t
ZXRob2RfY2FsbCgpKS0+YXR0YWNoKHByb2R1Y2VyKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U291
bmRTZXJ2ZXI6OmRldGFjaChBcnRzOjpCeXRlU291bmRQcm9kdWNlciBwcm9kdWNlcikKewogICAg
ICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9j
YWNoZSktPmRldGFjaChwcm9kdWNlcik6c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2
ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZGV0YWNoKHByb2R1Y2VyKTsKfQoKaW5saW5lIEFy
dHM6Ok9iamVjdCBBcnRzOjpTb3VuZFNlcnZlcjo6Y3JlYXRlT2JqZWN0KGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTaW1w
bGVTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+Y3JlYXRlT2JqZWN0KG5hbWUpOnN0YXRpY19j
YXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNyZWF0
ZU9iamVjdChuYW1lKTsKfQoKaW5saW5lIEFydHM6OlBsYXlPYmplY3QgQXJ0czo6U291bmRTZXJ2
ZXI6OmNyZWF0ZVBsYXlPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQp7CiAgICAg
ICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeV9iYXNl
Kj4oX2NhY2hlKS0+Y3JlYXRlUGxheU9iamVjdChmaWxlbmFtZSk6c3RhdGljX2Nhc3Q8QXJ0czo6
UGxheU9iamVjdEZhY3RvcnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlUGxheU9iamVj
dChmaWxlbmFtZSk7Cn0KCmlubGluZSBBcnRzOjpSZWFsdGltZVN0YXR1cyBBcnRzOjpTb3VuZFNl
cnZlcjo6cmVhbHRpbWVTdGF0dXMoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2Fz
dDxBcnRzOjpTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+cmVhbHRpbWVTdGF0dXMoKTpzdGF0
aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5yZWFsdGlt
ZVN0YXR1cygpOwp9CgppbmxpbmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlcjo6c2Vjb25kc1VudGls
U3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNvdW5k
U2VydmVyX2Jhc2UqPihfY2FjaGUpLT5zZWNvbmRzVW50aWxTdXNwZW5kKCk6c3RhdGljX2Nhc3Q8
QXJ0czo6U291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2Vjb25kc1VudGlsU3Vz
cGVuZCgpOwp9CgppbmxpbmUgYm9vbCBBcnRzOjpTb3VuZFNlcnZlcjo6c3VzcGVuZCgpCnsKICAg
ICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyX2Jhc2UqPihf
Y2FjaGUpLT5zdXNwZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJfYmFzZSo+KF9t
ZXRob2RfY2FsbCgpKS0+c3VzcGVuZCgpOwp9CgppbmxpbmUgYm9vbCBBcnRzOjpTb3VuZFNlcnZl
cjo6dGVybWluYXRlKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6
U291bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPnRlcm1pbmF0ZSgpOnN0YXRpY19jYXN0PEFydHM6
OlNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnRlcm1pbmF0ZSgpOwp9Cgppbmxp
bmUgQXJ0czo6UmVhbHRpbWVTdGF0dXMgQXJ0czo6U291bmRTZXJ2ZXJWMjo6cmVhbHRpbWVTdGF0
dXMoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZl
cl9iYXNlKj4oX2NhY2hlKS0+cmVhbHRpbWVTdGF0dXMoKTpzdGF0aWNfY2FzdDxBcnRzOjpTb3Vu
ZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5yZWFsdGltZVN0YXR1cygpOwp9Cgppbmxp
bmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlclYyOjpzZWNvbmRzVW50aWxTdXNwZW5kKCkKewogICAg
ICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJfYmFzZSo+KF9j
YWNoZSktPnNlY29uZHNVbnRpbFN1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZl
cl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zZWNvbmRzVW50aWxTdXNwZW5kKCk7Cn0KCmlubGlu
ZSBib29sIEFydHM6OlNvdW5kU2VydmVyVjI6OnN1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9j
YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+c3VzcGVu
ZCgpOnN0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSkt
PnN1c3BlbmQoKTsKfQoKaW5saW5lIGJvb2wgQXJ0czo6U291bmRTZXJ2ZXJWMjo6dGVybWluYXRl
KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJf
YmFzZSo+KF9jYWNoZSktPnRlcm1pbmF0ZSgpOnN0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVy
X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnRlcm1pbmF0ZSgpOwp9CgppbmxpbmUgQXJ0czo6U3Rl
cmVvRWZmZWN0U3RhY2sgQXJ0czo6U291bmRTZXJ2ZXJWMjo6b3V0c3RhY2soKQp7CiAgICAgICAg
cmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4o
X2NhY2hlKS0+b3V0c3RhY2soKTpzdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9i
YXNlKj4oX21ldGhvZF9jYWxsKCkpLT5vdXRzdGFjaygpOwp9CgppbmxpbmUgZmxvYXQgQXJ0czo6
U291bmRTZXJ2ZXJWMjo6bWluU3RyZWFtQnVmZmVyVGltZSgpCnsKICAgICAgICByZXR1cm4gX2Nh
Y2hlP3N0YXRpY19jYXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfY2FjaGUpLT5t
aW5TdHJlYW1CdWZmZXJUaW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJf
YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+bWluU3RyZWFtQnVmZmVyVGltZSgpOwp9CgppbmxpbmUg
ZmxvYXQgQXJ0czo6U291bmRTZXJ2ZXJWMjo6c2VydmVyQnVmZmVyVGltZSgpCnsKICAgICAgICBy
ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihf
Y2FjaGUpLT5zZXJ2ZXJCdWZmZXJUaW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRT
ZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2VydmVyQnVmZmVyVGltZSgpOwp9Cgppbmxp
bmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlclYyOjpwbGF5KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxl
bmFtZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291
bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPnBsYXkoZmlsZW5hbWUpOnN0YXRpY19jYXN0PEFydHM6
OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnBsYXkoZmlsZW5hbWUp
Owp9CgppbmxpbmUgdm9pZCBBcnRzOjpTb3VuZFNlcnZlclYyOjphdHRhY2goQXJ0czo6Qnl0ZVNv
dW5kUHJvZHVjZXIgcHJvZHVjZXIpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6
OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfY2FjaGUpLT5hdHRhY2gocHJvZHVjZXIpOnN0YXRp
Y19jYXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF0
dGFjaChwcm9kdWNlcik7Cn0KCmlubGluZSB2b2lkIEFydHM6OlNvdW5kU2VydmVyVjI6OmRldGFj
aChBcnRzOjpCeXRlU291bmRQcm9kdWNlciBwcm9kdWNlcikKewogICAgICAgICBfY2FjaGU/c3Rh
dGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPmRldGFjaChw
cm9kdWNlcik6c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRo
b2RfY2FsbCgpKS0+ZGV0YWNoKHByb2R1Y2VyKTsKfQoKaW5saW5lIEFydHM6Ok9iamVjdCBBcnRz
OjpTb3VuZFNlcnZlclYyOjpjcmVhdGVPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsK
ICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVy
X2Jhc2UqPihfY2FjaGUpLT5jcmVhdGVPYmplY3QobmFtZSk6c3RhdGljX2Nhc3Q8QXJ0czo6U2lt
cGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlT2JqZWN0KG5hbWUp
Owp9CgppbmxpbmUgQXJ0czo6UGxheU9iamVjdCBBcnRzOjpTb3VuZFNlcnZlclYyOjpjcmVhdGVQ
bGF5T2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkKewogICAgICAgIHJldHVybiBf
Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdEZhY3RvcnlfYmFzZSo+KF9jYWNoZSkt
PmNyZWF0ZVBsYXlPYmplY3QoZmlsZW5hbWUpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RG
YWN0b3J5X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNyZWF0ZVBsYXlPYmplY3QoZmlsZW5hbWUp
Owp9CgppbmxpbmUgQXJ0czo6UGxheU9iamVjdCBBcnRzOjpTb3VuZFNlcnZlclYyOjpjcmVhdGVQ
bGF5T2JqZWN0Rm9yVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwsIGNvbnN0IHN0ZDo6c3RyaW5n
JiBtaW1ldHlwZSwgYm9vbCBjcmVhdGVCVVMpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRp
Y19jYXN0PEFydHM6OlBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZSo+KF9jYWNoZSktPmNyZWF0ZVBs
YXlPYmplY3RGb3JVUkwodXJsLCBtaW1ldHlwZSwgY3JlYXRlQlVTKTpzdGF0aWNfY2FzdDxBcnRz
OjpQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNyZWF0ZVBsYXlP
YmplY3RGb3JVUkwodXJsLCBtaW1ldHlwZSwgY3JlYXRlQlVTKTsKfQoKaW5saW5lIEFydHM6OlBs
YXlPYmplY3QgQXJ0czo6U291bmRTZXJ2ZXJWMjo6Y3JlYXRlUGxheU9iamVjdEZvclN0cmVhbShB
cnRzOjpJbnB1dFN0cmVhbSBpbnN0cmVhbSwgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWV0eXBlLCBi
b29sIGNyZWF0ZUJVUykKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6
UGxheU9iamVjdEZhY3RvcnlWMl9iYXNlKj4oX2NhY2hlKS0+Y3JlYXRlUGxheU9iamVjdEZvclN0
cmVhbShpbnN0cmVhbSwgbWltZXR5cGUsIGNyZWF0ZUJVUyk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxh
eU9iamVjdEZhY3RvcnlWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jcmVhdGVQbGF5T2JqZWN0
Rm9yU3RyZWFtKGluc3RyZWFtLCBtaW1ldHlwZSwgY3JlYXRlQlVTKTsKfQoKaW5saW5lIGxvbmcg
QXJ0czo6U291bmRTZXJ2ZXJWMjo6YXV0b1N1c3BlbmRTZWNvbmRzKCkKewogICAgICAgIHJldHVy
biBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX2NhY2hlKS0+
YXV0b1N1c3BlbmRTZWNvbmRzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZFNlY29uZHMoKTsKfQoKaW5saW5lIHZvaWQg
QXJ0czo6U291bmRTZXJ2ZXJWMjo6YXV0b1N1c3BlbmRTZWNvbmRzKGxvbmcgX25ld1ZhbHVlKQp7
CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihf
Y2FjaGUpLT5hdXRvU3VzcGVuZFNlY29uZHMoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpT
b3VuZFNlcnZlclYyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kU2Vjb25kcyhf
bmV3VmFsdWUpOwp9CgppbmxpbmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlclYyOjpidWZmZXJTaXpl
TXVsdGlwbGllcigpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNv
dW5kU2VydmVyVjJfYmFzZSo+KF9jYWNoZSktPmJ1ZmZlclNpemVNdWx0aXBsaWVyKCk6c3RhdGlj
X2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5idWZmZXJT
aXplTXVsdGlwbGllcigpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTb3VuZFNlcnZlclYyOjpidWZm
ZXJTaXplTXVsdGlwbGllcihsb25nIF9uZXdWYWx1ZSkKewogICAgICAgICBfY2FjaGU/c3RhdGlj
X2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX2NhY2hlKS0+YnVmZmVyU2l6ZU11bHRp
cGxpZXIoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihf
bWV0aG9kX2NhbGwoKSktPmJ1ZmZlclNpemVNdWx0aXBsaWVyKF9uZXdWYWx1ZSk7Cn0KCmlubGlu
ZSBzdGQ6OnN0cmluZyBBcnRzOjpTb3VuZFNlcnZlclYyOjphdWRpb01ldGhvZCgpCnsKICAgICAg
ICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9j
YWNoZSktPmF1ZGlvTWV0aG9kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5hdWRpb01ldGhvZCgpOwp9CgppbmxpbmUgbG9uZyBBcnRzOjpT
b3VuZFNlcnZlclYyOjpzYW1wbGluZ1JhdGUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0
aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihfY2FjaGUpLT5zYW1wbGluZ1JhdGUo
KTpzdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSkt
PnNhbXBsaW5nUmF0ZSgpOwp9CgppbmxpbmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlclYyOjpjaGFu
bmVscygpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNvdW5kU2Vy
dmVyVjJfYmFzZSo+KF9jYWNoZSktPmNoYW5uZWxzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRT
ZXJ2ZXJWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jaGFubmVscygpOwp9CgppbmxpbmUgbG9u
ZyBBcnRzOjpTb3VuZFNlcnZlclYyOjpiaXRzKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3Rh
dGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX2NhY2hlKS0+Yml0cygpOnN0YXRp
Y19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Yml0cygp
Owp9CgppbmxpbmUgYm9vbCBBcnRzOjpTb3VuZFNlcnZlclYyOjpmdWxsRHVwbGV4KCkKewogICAg
ICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4o
X2NhY2hlKS0+ZnVsbER1cGxleCgpOnN0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJfYmFz
ZSo+KF9tZXRob2RfY2FsbCgpKS0+ZnVsbER1cGxleCgpOwp9CgppbmxpbmUgc3RkOjpzdHJpbmcg
QXJ0czo6U291bmRTZXJ2ZXJWMjo6YXVkaW9EZXZpY2UoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNo
ZT9zdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihfY2FjaGUpLT5hdWRpb0Rl
dmljZSgpOnN0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9tZXRob2RfY2Fs
bCgpKS0+YXVkaW9EZXZpY2UoKTsKfQoKaW5saW5lIGxvbmcgQXJ0czo6U291bmRTZXJ2ZXJWMjo6
ZnJhZ21lbnRzKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291
bmRTZXJ2ZXJWMl9iYXNlKj4oX2NhY2hlKS0+ZnJhZ21lbnRzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6
U291bmRTZXJ2ZXJWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5mcmFnbWVudHMoKTsKfQoKaW5s
aW5lIGxvbmcgQXJ0czo6U291bmRTZXJ2ZXJWMjo6ZnJhZ21lbnRTaXplKCkKewogICAgICAgIHJl
dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX2NhY2hl
KS0+ZnJhZ21lbnRTaXplKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4o
X21ldGhvZF9jYWxsKCkpLT5mcmFnbWVudFNpemUoKTsKfQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFy
dHM6OlNvdW5kU2VydmVyVjI6OnZlcnNpb24oKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0
aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihfY2FjaGUpLT52ZXJzaW9uKCk6c3Rh
dGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT52ZXJz
aW9uKCk7Cn0KCmlubGluZSBBcnRzOjpTdGVyZW9Wb2x1bWVDb250cm9sIEFydHM6OlNvdW5kU2Vy
dmVyVjI6Om91dFZvbHVtZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFy
dHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9jYWNoZSktPm91dFZvbHVtZSgpOnN0YXRpY19jYXN0
PEFydHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+b3V0Vm9sdW1lKCk7
Cn0KCmlubGluZSBBcnRzOjpTYW1wbGVTdG9yYWdlIEFydHM6OlNvdW5kU2VydmVyVjI6OnNhbXBs
ZVN0b3JhZ2UoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTb3Vu
ZFNlcnZlclYyX2Jhc2UqPihfY2FjaGUpLT5zYW1wbGVTdG9yYWdlKCk6c3RhdGljX2Nhc3Q8QXJ0
czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zYW1wbGVTdG9yYWdlKCk7
Cn0KCmlubGluZSB2b2lkIEFydHM6OlNvdW5kU2VydmVyVjI6OmNoZWNrTmV3T2JqZWN0cygpCnsK
ICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9j
YWNoZSktPmNoZWNrTmV3T2JqZWN0cygpOnN0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJf
YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y2hlY2tOZXdPYmplY3RzKCk7Cn0KCmlubGluZSBzdGQ6
OnN0cmluZyBBcnRzOjpXYXZQbGF5T2JqZWN0OjpkZXNjcmlwdGlvbigpCnsKICAgICAgICByZXR1
cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9jYWNoZSktPmRl
c2NyaXB0aW9uKCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX21ldGhvZF9j
YWxsKCkpLT5kZXNjcmlwdGlvbigpOwp9CgppbmxpbmUgQXJ0czo6cG9UaW1lIEFydHM6OldhdlBs
YXlPYmplY3Q6OmN1cnJlbnRUaW1lKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nh
c3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+Y3VycmVudFRpbWUoKTpzdGF0aWNf
Y2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmN1cnJlbnRUaW1l
KCk7Cn0KCmlubGluZSBBcnRzOjpwb1RpbWUgQXJ0czo6V2F2UGxheU9iamVjdDo6b3ZlcmFsbFRp
bWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0
X2Jhc2UqPihfY2FjaGUpLT5vdmVyYWxsVGltZSgpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmpl
Y3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+b3ZlcmFsbFRpbWUoKTsKfQoKaW5saW5lIEFydHM6
OnBvQ2FwYWJpbGl0aWVzIEFydHM6OldhdlBsYXlPYmplY3Q6OmNhcGFiaWxpdGllcygpCnsKICAg
ICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9j
YWNoZSktPmNhcGFiaWxpdGllcygpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+
KF9tZXRob2RfY2FsbCgpKS0+Y2FwYWJpbGl0aWVzKCk7Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBB
cnRzOjpXYXZQbGF5T2JqZWN0OjptZWRpYU5hbWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9z
dGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5tZWRpYU5hbWUoKTpz
dGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPm1lZGlh
TmFtZSgpOwp9CgppbmxpbmUgQXJ0czo6cG9TdGF0ZSBBcnRzOjpXYXZQbGF5T2JqZWN0OjpzdGF0
ZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3Rf
YmFzZSo+KF9jYWNoZSktPnN0YXRlKCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5zdGF0ZSgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpXYXZQbGF5
T2JqZWN0OjpwbGF5KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9i
amVjdF9iYXNlKj4oX2NhY2hlKS0+cGxheSgpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3Rf
YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cGxheSgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpXYXZQ
bGF5T2JqZWN0OjpzZWVrKGNvbnN0IEFydHM6OnBvVGltZSYgbmV3VGltZSkKewogICAgICAgICBf
Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+c2Vlayhu
ZXdUaW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwo
KSktPnNlZWsobmV3VGltZSk7Cn0KCmlubGluZSB2b2lkIEFydHM6OldhdlBsYXlPYmplY3Q6OnBh
dXNlKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNl
Kj4oX2NhY2hlKS0+cGF1c2UoKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihf
bWV0aG9kX2NhbGwoKSktPnBhdXNlKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OldhdlBsYXlPYmpl
Y3Q6OmhhbHQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0
X2Jhc2UqPihfY2FjaGUpLT5oYWx0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNl
Kj4oX21ldGhvZF9jYWxsKCkpLT5oYWx0KCk7Cn0KCmlubGluZSBib29sIEFydHM6OldhdlBsYXlP
YmplY3Q6OmxvYWRNZWRpYShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpCnsKICAgICAgICBy
ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlKj4o
X2NhY2hlKS0+bG9hZE1lZGlhKGZpbGVuYW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0
X3ByaXZhdGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+bG9hZE1lZGlhKGZpbGVuYW1lKTsKfQoK
aW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgQXJ0czo6V2F2UGxheU9iamVjdDo6YXV0b1N1
c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v
ZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50
aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9CgppbmxpbmUg
dm9pZCBBcnRzOjpXYXZQbGF5T2JqZWN0OjpzdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRp
Y19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdGFydCgpOnN0YXRpY19j
YXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXJ0KCk7Cn0K
CmlubGluZSB2b2lkIEFydHM6OldhdlBsYXlPYmplY3Q6OnN0b3AoKQp7CiAgICAgICAgIF9jYWNo
ZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RvcCgpOnN0
YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0b3Ao
KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6V2F2UGxheU9iamVjdDo6c3RyZWFtSW5pdCgpCnsKICAg
ICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUp
LT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRo
b2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpXYXZQbGF5T2Jq
ZWN0OjpzdHJlYW1TdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5
bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6
OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlu
bGluZSB2b2lkIEFydHM6OldhdlBsYXlPYmplY3Q6OnN0cmVhbUVuZCgpCnsKICAgICAgICAgX2Nh
Y2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1F
bmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkp
LT5zdHJlYW1FbmQoKTsKfQoKfTsKIyA2ICJ3YXZwbGF5b2JqZWN0X2ltcGwuY2MiIDIKIyAxICIu
Li8uLi9hcnRzL2Zsb3cvY2FjaGVkd2F2LmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9mbG93L2NhY2hl
ZHdhdi5oIgojIDEgIi4uLy4uL2NvbmZpZy5oIiAxCiMgNjAyICIuLi8uLi9jb25maWcuaCIKIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDYwMyAiLi4vLi4vY29uZmlnLmgiIDIK
IyA3NTYgIi4uLy4uL2NvbmZpZy5oIgpleHRlcm4gIkMiCgppbnQgbWtzdGVtcHMgKGNoYXIqIF90
ZW1wbGF0ZSwgaW50IHN1ZmZpeF9sZW4pOwojIDI3ICIuLi8uLi9hcnRzL2Zsb3cvY2FjaGVkd2F2
LmgiIDIKCiMgMSAiLi4vLi4vYXJ0cy9mbG93L2NhY2hlLmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9m
bG93L2NhY2hlLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMjcgIi4uLy4uL2Fy
dHMvZmxvdy9jYWNoZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9saXN0IiAx
IDMKIyAyOCAiLi4vLi4vYXJ0cy9mbG93L2NhY2hlLmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL3N0cmluZyIgMSAzCiMgMjkgIi4uLy4uL2FydHMvZmxvdy9jYWNoZS5oIiAyCiMg
MSAiLi4vLi4vYXJ0cy9tY29wL3N0YXJ0dXBtYW5hZ2VyLmgiIDEKIyAzMCAiLi4vLi4vYXJ0cy9m
bG93L2NhY2hlLmgiIDIKIyAzOSAiLi4vLi4vYXJ0cy9mbG93L2NhY2hlLmgiCm5hbWVzcGFjZSBB
cnRzIHsKY2xhc3MgQ2FjaGU7CgpjbGFzcyBDYWNoZWRPYmplY3QKewpwcml2YXRlOgogICAgICAg
IHN0ZDo6c3RyaW5nIF9vYmplY3Rfa2V5OwogICAgICAgIGludCBfcmVmX2NudDsKICAgICAgICB0
aW1lX3QgX2xhc3RBY2Nlc3M7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCBzZXRLZXkoc3RkOjpz
dHJpbmcga2V5KTsKCnB1YmxpYzoKICAgICAgICBzdGQ6OnN0cmluZyBnZXRLZXkoKTsKCiAgICAg
ICAgdGltZV90IGxhc3RBY2Nlc3MoKTsKCiAgICAgICAgdm9pZCBkZWNSZWYoKTsKICAgICAgICB2
b2lkIGluY1JlZigpOwogICAgICAgIGludCByZWZDbnQoKTsKCiAgICAgICAgdmlydHVhbCBib29s
IGlzVmFsaWQoKTsKICAgICAgICB2aXJ0dWFsIGludCBtZW1vcnlVc2FnZSgpID0gMDsKCiAgICAg
ICAgQ2FjaGVkT2JqZWN0KENhY2hlICpjYWNoZSk7CiAgICAgICAgdmlydHVhbCB+Q2FjaGVkT2Jq
ZWN0KCk7Cn07CgpjbGFzcyBDYWNoZQp7CnByb3RlY3RlZDoKICAgICAgICBzdGQ6Omxpc3Q8Q2Fj
aGVkT2JqZWN0ICo+IG9iamVjdHM7CiAgICAgICAgQ2FjaGUoKTsKICAgICAgICB+Q2FjaGUoKTsK
CiAgICAgICAgc3RhdGljIENhY2hlICpfaW5zdGFuY2U7CgpwdWJsaWM6CiAgICAgICAgc3RhdGlj
IENhY2hlICp0aGUoKTsKICAgICAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOwoKICAgICAgICBz
dGF0aWMgbG9uZyBtZW11c2VkOwoKICAgICAgICBDYWNoZWRPYmplY3QgKmdldChzdGQ6OnN0cmlu
ZyBrZXkpOwogICAgICAgIHZvaWQgYWRkKENhY2hlZE9iamVjdCAqb2JqZWN0KTsKCgogICAgICAg
IGxvbmcgY2xlYW5VcChsb25nIGNhY2hlTGltaXQpOwp9OwoKfTsKIyAyOSAiLi4vLi4vYXJ0cy9m
bG93L2NhY2hlZHdhdi5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDEgMwojIDI2
ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwoK
CgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3lzL3N0
YXQuaCIgMiAzCiMgODcgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiAiQyIgewoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGF0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0
cy9zdGF0LmgiIDMKc3RydWN0IHN0YXQKICB7CiAgICBfX2Rldl90IHN0X2RldjsKICAgIHVuc2ln
bmVkIHNob3J0IGludCBfX3BhZDE7CgogICAgX19pbm9fdCBzdF9pbm87CgoKCiAgICBfX21vZGVf
dCBzdF9tb2RlOwogICAgX19ubGlua190IHN0X25saW5rOwogICAgX191aWRfdCBzdF91aWQ7CiAg
ICBfX2dpZF90IHN0X2dpZDsKICAgIF9fZGV2X3Qgc3RfcmRldjsKICAgIHVuc2lnbmVkIHNob3J0
IGludCBfX3BhZDI7CgogICAgX19vZmZfdCBzdF9zaXplOwoKCgogICAgdW5zaWduZWQgbG9uZyBp
bnQgc3RfYmxrc2l6ZTsKCgogICAgX19ibGtjbnRfdCBzdF9ibG9ja3M7CgoKCiAgICBfX3RpbWVf
dCBzdF9hdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKICAgIF9fdGltZV90
IHN0X210aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQyOwogICAgX190aW1lX3Qg
c3RfY3RpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDM7CiAgICB1bnNpZ25lZCBs
b25nIGludCBfX3VudXNlZDQ7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDU7CiAgfTsK
CgpzdHJ1Y3Qgc3RhdDY0CiAgewogICAgX19kZXZfdCBzdF9kZXY7CiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgX19wYWQxOwoKICAgIF9faW5vNjRfdCBzdF9pbm87CiAgICBfX21vZGVfdCBzdF9tb2Rl
OwogICAgX19ubGlua190IHN0X25saW5rOwogICAgX191aWRfdCBzdF91aWQ7CiAgICBfX2dpZF90
IHN0X2dpZDsKICAgIF9fZGV2X3Qgc3RfcmRldjsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3Bh
ZDI7CiAgICBfX29mZjY0X3Qgc3Rfc2l6ZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IHN0X2Jsa3Np
emU7CgogICAgX19ibGtjbnQ2NF90IHN0X2Jsb2NrczsKICAgIF9fdGltZV90IHN0X2F0aW1lOwog
ICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwogICAgX190aW1lX3Qgc3RfbXRpbWU7CiAg
ICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDI7CiAgICBfX3RpbWVfdCBzdF9jdGltZTsKICAg
IHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMzsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51
c2VkNDsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNTsKICB9OwojIDkwICIvdXNyL2lu
Y2x1ZGUvc3lzL3N0YXQuaCIgMiAzCiMgMTgxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpl
eHRlcm4gaW50IHN0YXQgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3Qgc3RhdCAqX19idWYp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZzdGF0IChpbnQgX19mZCwgc3RydWN0IHN0YXQgKl9f
YnVmKSB0aHJvdyAoKTsKIyAxOTcgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBp
bnQgc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgc3RydWN0IHN0YXQ2NCAqX19idWYpIHRo
cm93ICgpOwpleHRlcm4gaW50IGZzdGF0NjQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdDY0ICpfX2J1
ZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19maWxl
LCBzdHJ1Y3Qgc3RhdCAqX19idWYpIHRocm93ICgpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy9z
dGF0LmgiIDMKZXh0ZXJuIGludCBsc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgc3RydWN0
IHN0YXQ2NCAqX19idWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNobW9kIChfX2NvbnN0
IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBm
Y2htb2QgKGludCBfX2ZkLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBf
X21vZGVfdCB1bWFzayAoX19tb2RlX3QgX19tYXNrKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX21v
ZGVfdCBnZXR1bWFzayAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWtkaXIgKF9fY29u
c3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUsIF9fZGV2X3Qg
X19kZXYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgbWtmaWZvIChfX2NvbnN0IGNoYXIgKl9f
cGF0aCwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAoKTsKIyAyNzkgIi91c3IvaW5jbHVkZS9zeXMv
c3RhdC5oIiAzCmV4dGVybiBpbnQgX19meHN0YXQgKGludCBfX3ZlciwgaW50IF9fZmlsZGVzLCBz
dHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9feHN0YXQgKGlu
dCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1
ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fbHhzdGF0IChpbnQgX192ZXIsIF9fY29uc3QgY2hh
ciAqX19maWxlbmFtZSwgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpIHRocm93ICgpOwojIDMwMiAi
L3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBfX2Z4c3RhdDY0IChpbnQgX192
ZXIsIGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXQ2NCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IF9feHN0YXQ2NCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUs
IHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2x4c3Rh
dDY0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwgc3RydWN0IHN0YXQ2NCAq
X19zdGF0X2J1ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3hta25vZCAoaW50IF9fdmVyLCBf
X2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLCBfX2Rldl90ICpfX2RldikgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIF9faW5saW5lX18gaW50IHN0YXQgKF9fY29uc3QgY2hhciAqX19w
YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdGJ1Zikg
dGhyb3cgKCkKewogIHJldHVybiBfX3hzdGF0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpl
eHRlcm4gX19pbmxpbmVfXyBpbnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19wYXRoLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpIHRocm93ICgpCnsK
ICByZXR1cm4gX19seHN0YXQgKDMsIF9fcGF0aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lu
bGluZV9fIGludCBmc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpIHRocm93
ICgpCnsKICByZXR1cm4gX19meHN0YXQgKDMsIF9fZmQsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4g
X19pbmxpbmVfXyBpbnQgbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21v
ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXZfdCBfX2RldikgdGhyb3cgKCkK
ewogIHJldHVybiBfX3hta25vZCAoMSwgX19wYXRoLCBfX21vZGUsICZfX2Rldik7Cn0KCgoKZXh0
ZXJuIF9faW5saW5lX18gaW50IHN0YXQ2NCAoX19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkK
ewogIHJldHVybiBfX3hzdGF0NjQgKDMsIF9fcGF0aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBf
X2lubGluZV9fIGludCBsc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkKewog
IHJldHVybiBfX2x4c3RhdDY0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19p
bmxpbmVfXyBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1Zikg
dGhyb3cgKCkKewogIHJldHVybiBfX2Z4c3RhdDY0ICgzLCBfX2ZkLCBfX3N0YXRidWYpOwp9CgoK
Cgp9CiMgMzAgIi4uLy4uL2FydHMvZmxvdy9jYWNoZWR3YXYuaCIgMgojIDEgIi91c3IvaW5jbHVk
ZS91bmlzdGQuaCIgMSAzCiMgMzEgIi4uLy4uL2FydHMvZmxvdy9jYWNoZWR3YXYuaCIgMgojIDQx
ICIuLi8uLi9hcnRzL2Zsb3cvY2FjaGVkd2F2LmgiCm5hbWVzcGFjZSBBcnRzIHsKCmNsYXNzIENh
Y2hlZFdhdiA6IHB1YmxpYyBDYWNoZWRPYmplY3QKewpwcm90ZWN0ZWQ6CiAgICAgICAgc3RydWN0
IHN0YXQgb2xkc3RhdDsKICAgICAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZTsKICAgICAgICBib29s
IGluaXRPazsKCiAgICAgICAgQ2FjaGVkV2F2KENhY2hlICpjYWNoZSwgc3RkOjpzdHJpbmcgZmls
ZW5hbWUpOwogICAgICAgIH5DYWNoZWRXYXYoKTsKCiAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIHVjaGFyOwpwdWJsaWM6CiAgICAgICAgZG91YmxlIHNhbXBsaW5nUmF0ZTsKICAgICAgICBs
b25nIGJ1ZmZlclNpemU7CiAgICAgICAgaW50IGNoYW5uZWxDb3VudDsKICAgICAgICBpbnQgc2Ft
cGxlV2lkdGg7CiAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyOwoKICAgICAgICBzdGF0aWMg
Q2FjaGVkV2F2ICpsb2FkKENhY2hlICpjYWNoZSwgc3RkOjpzdHJpbmcgZmlsZW5hbWUpOwoKCgoK
CgogICAgICAgIGJvb2wgaXNWYWxpZCgpOwoKCgogICAgICAgIGludCBtZW1vcnlVc2FnZSgpOwp9
OwoKfTsKIyA3ICJ3YXZwbGF5b2JqZWN0X2ltcGwuY2MiIDIKIyAxICIuLi8uLi9hcnRzL2Zsb3cv
c3Rkc3ludGhtb2R1bGUuaCIgMQojIDI2ICIuLi8uLi9hcnRzL2Zsb3cvc3Rkc3ludGhtb2R1bGUu
aCIKIyAxICIuLi8uLi9hcnRzL2Zsb3cvYXJ0c2Zsb3cuaCIgMQojIDI3ICIuLi8uLi9hcnRzL2Zs
b3cvc3Rkc3ludGhtb2R1bGUuaCIgMgojIDM1ICIuLi8uLi9hcnRzL2Zsb3cvc3Rkc3ludGhtb2R1
bGUuaCIKbmFtZXNwYWNlIEFydHMgewoKY2xhc3MgU3RkU3ludGhNb2R1bGVQcml2YXRlOwoKY2xh
c3MgU3RkU3ludGhNb2R1bGUgOiB2aXJ0dWFsIHB1YmxpYyBTeW50aE1vZHVsZV9iYXNlIHsKcHJp
dmF0ZToKICAgICAgICBTdGRTeW50aE1vZHVsZVByaXZhdGUgKmQ7Cgpwcm90ZWN0ZWQ6CiAgICAg
ICAgbG9uZyBzYW1wbGluZ1JhdGU7CiAgICAgICAgZmxvYXQgc2FtcGxpbmdSYXRlRmxvYXQ7Cgpw
dWJsaWM6CiAgICAgICAgU3RkU3ludGhNb2R1bGUoKTsKCiAgICAgICAgdm9pZCBzdGFydCgpOwog
ICAgICAgIHZvaWQgc3RvcCgpOwoKICAgICAgICB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICB2
b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgdm9pZCBzdHJlYW1FbmQoKTsKCiAgICAgICAgQXV0
b1N1c3BlbmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwp9Owp9OwojIDggIndhdnBsYXlvYmplY3RfaW1w
bC5jYyIgMgojIDEgIi4uLy4uL2FydHMvZmxvdy9jb252ZXJ0LmgiIDEKIyAzNCAiLi4vLi4vYXJ0
cy9mbG93L2NvbnZlcnQuaCIKbmFtZXNwYWNlIEFydHMgewojIDU3ICIuLi8uLi9hcnRzL2Zsb3cv
Y29udmVydC5oIgp2b2lkIGNvbnZlcnRfbW9ub184X2Zsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxl
cywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZnJvbSwgZmxvYXQgKnRv
KTsKCnZvaWQgaW50ZXJwb2xhdGVfbW9ub184X2Zsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxlcywK
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRvdWJsZSBzcGVlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZnJvbSwgZmxvYXQgKnRvKTsKCnZvaWQg
Y29udmVydF9tb25vXzE2bGVfZmxvYXQodW5zaWduZWQgbG9uZyBzYW1wbGVzLAogICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpmcm9tLCBmbG9hdCAqdG8pOwoKdm9pZCBpbnRl
cnBvbGF0ZV9tb25vXzE2bGVfZmxvYXQodW5zaWduZWQgbG9uZyBzYW1wbGVzLAogICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBzdGFydHBvcywgZG91YmxlIHNwZWVkLAogICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyICpmcm9tLCBmbG9hdCAqdG8pOwoKdm9pZCBjb252ZXJ0X21v
bm9fMTZiZV9mbG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgKmZyb20sIGZsb2F0ICp0byk7Cgp2b2lkIGludGVycG9sYXRlX21v
bm9fMTZiZV9mbG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAg
ZG91YmxlIHN0YXJ0cG9zLCBkb3VibGUgc3BlZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKmZyb20sIGZsb2F0ICp0byk7Cgp2b2lkIGNvbnZlcnRfc3RlcmVvX2k4XzJm
bG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgKmZyb20sIGZsb2F0ICpsZWZ0LCBmbG9hdCAqcmlnaHQpOwoKdm9pZCBpbnRlcnBv
bGF0ZV9zdGVyZW9faThfMmZsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxlcywKICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRvdWJsZSBzcGVlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciAqZnJvbSwgZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCk7Cgp2
b2lkIGNvbnZlcnRfc3RlcmVvX2kxNmxlXzJmbG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmZyb20sIGZsb2F0ICpsZWZ0LCBm
bG9hdCAqcmlnaHQpOwoKdm9pZCBpbnRlcnBvbGF0ZV9zdGVyZW9faTE2bGVfMmZsb2F0KHVuc2ln
bmVkIGxvbmcgc2FtcGxlcywKICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRv
dWJsZSBzcGVlZCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZnJvbSwg
ZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCk7Cgp2b2lkIGNvbnZlcnRfc3RlcmVvX2kxNmJlXzJm
bG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgKmZyb20sIGZsb2F0ICpsZWZ0LCBmbG9hdCAqcmlnaHQpOwoKdm9pZCBpbnRlcnBv
bGF0ZV9zdGVyZW9faTE2YmVfMmZsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxlcywKICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRvdWJsZSBzcGVlZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqZnJvbSwgZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCk7
Cgp2b2lkIGNvbnZlcnRfbW9ub19mbG9hdF9mbG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpmcm9tLCBmbG9hdCAqdG8pOwoKdm9pZCBpbnRl
cnBvbGF0ZV9tb25vX2Zsb2F0X2Zsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxlcywKICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRvdWJsZSBzcGVlZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgKmZyb20sIGZsb2F0ICp0byk7Cgp2b2lkIGNvbnZlcnRfc3RlcmVvX2lm
bG9hdF8yZmxvYXQodW5zaWduZWQgbG9uZyBzYW1wbGVzLAogICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCAqZnJvbSwgZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCk7Cgp2b2lkIGludGVycG9s
YXRlX3N0ZXJlb19pZmxvYXRfMmZsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxlcywKICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRvdWJsZSBzcGVlZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgKmZyb20sIGZsb2F0ICpsZWZ0LCBmbG9hdCAqcmlnaHQpOwoKCnZvaWQg
Y29udmVydF9tb25vX2Zsb2F0XzE2bGUodW5zaWduZWQgbG9uZyBzYW1wbGVzLAogICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8pOwoKdm9pZCBjb252
ZXJ0X3N0ZXJlb18yZmxvYXRfaTE2bGUodW5zaWduZWQgbG9uZyBzYW1wbGVzLAogICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCAqbGVmdCwgZmxvYXQgKnJpZ2h0LCB1bnNpZ25lZCBjaGFyICp0
byk7Cgp2b2lkIGNvbnZlcnRfbW9ub19mbG9hdF8xNmJlKHVuc2lnbmVkIGxvbmcgc2FtcGxlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvKTsK
CnZvaWQgY29udmVydF9zdGVyZW9fMmZsb2F0X2kxNmJlKHVuc2lnbmVkIGxvbmcgc2FtcGxlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCwgdW5zaWdu
ZWQgY2hhciAqdG8pOwoKdm9pZCBjb252ZXJ0X21vbm9fZmxvYXRfOCh1bnNpZ25lZCBsb25nIHNh
bXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpmcm9tLCB1bnNpZ25lZCBjaGFy
ICp0byk7Cgp2b2lkIGNvbnZlcnRfc3RlcmVvXzJmbG9hdF9pOCh1bnNpZ25lZCBsb25nIHNhbXBs
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpsZWZ0LCBmbG9hdCAqcmlnaHQsIHVu
c2lnbmVkIGNoYXIgKnRvKTsKIyAxNDEgIi4uLy4uL2FydHMvZmxvdy9jb252ZXJ0LmgiCmVudW0g
ewogIHVuaV9jb252ZXJ0X3U4ID0gOCwKICB1bmlfY29udmVydF9zMTZfbGUgPSAxNiwKICB1bmlf
Y29udmVydF9zMTZfYmUgPSAxNywKICB1bmlfY29udmVydF9mbG9hdF9uZSA9IDB4MTAwCn07Cgp1
bnNpZ25lZCBsb25nIHVuaV9jb252ZXJ0X3N0ZXJlb18yZmxvYXQoCiAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpmcm9t
LAogICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmcm9tTGVuLAogICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZnJvbUNoYW5uZWxzLAogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZyb21C
aXRzLAoKICAgICAgICAgICAgZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCwKICAgICAgICAgICAg
ICAgIGRvdWJsZSBzcGVlZCwKICAgICAgICAgICAgICAgIGRvdWJsZSBzdGFydHBvc2l0aW9uCiAg
ICAgICAgKTsKCn07CiMgOSAid2F2cGxheW9iamVjdF9pbXBsLmNjIiAyCiMgMSAiLi4vLi4vYXJ0
cy9tY29wL2RlYnVnLmgiIDEKIyA5NSAiLi4vLi4vYXJ0cy9tY29wL2RlYnVnLmgiCm5hbWVzcGFj
ZSBBcnRzIHsKICAgICAgICBjbGFzcyBEZWJ1ZyB7CiAgICAgICAgcHVibGljOgogICAgICAgICAg
ICAgICAgZW51bSBMZXZlbCB7IGxGYXRhbCA9IDMsIGxXYXJuaW5nID0gMiwgbEluZm8gPSAxLCBs
RGVidWcgPSAwIH07CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgaW5pdChjb25zdCBjaGFy
ICpwcmVmaXgsIExldmVsIGxldmVsKTsKCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBmYXRh
bChjb25zdCBjaGFyICpmbXQsLi4uKTsKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHdhcm5p
bmcoY29uc3QgY2hhciAqZm10LC4uLik7CiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBpbmZv
KGNvbnN0IGNoYXIgKmZtdCwuLi4pOwogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgZGVidWco
Y29uc3QgY2hhciAqZm10LC4uLik7CgoKCgoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1l
c3NhZ2VBcHAoY29uc3QgY2hhciAqYXBwTmFtZSk7CiAgICAgICAgfTsKfTsKIyAxMCAid2F2cGxh
eW9iamVjdF9pbXBsLmNjIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pb3N0cmVh
bSIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDEgMwojIDM4ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDMKCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5o
IiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIg
MSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAz
CgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEgMwojIDM4
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAzCgojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDQwICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RkaW8uaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9z
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIg
MSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMwoK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr
Y29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl
ZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9jKytsb2NhbGUuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0
eXBlZGVmIGludCogX19jX2xvY2FsZTsKfQojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X3N0cmluZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlw
ZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2N0
eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5j
bHVkZS9jdHlwZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAy
OCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNDAgIi91c3IvaW5j
bHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA0MSAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4
ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAo
KDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2Fs
cGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwK
ICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+
PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8
PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkg
OiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikp
IDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEg
PDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4
ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAo
KDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1
bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgp
KSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAo
MTEpKSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29u
c3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJf
dCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91
cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChp
bnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgaXNjbnRybCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93
ICgpOwpleHRlcm4gaW50IGlzbG93ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFw
aCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRl
cm4gaW50IGlzcHVuY3QgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz
eGRpZ2l0IChpbnQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXNibGFuayAoaW50KSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChp
bnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
dG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAyMTMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjE0ICIvdXNyL2luY2x1ZGUvY3R5cGUu
aCIgMiAzCiMgMjI5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51
bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChp
bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9f
bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxl
X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRo
cm93ICgpOwpleHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp
OwpleHRlcm4gaW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl
cm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50
IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1
cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRf
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBf
X2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChp
bnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc1ICIvdXNyL2luY2x1ZGUvY3R5
cGUuaCIgMwp9CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBl
LmgiIDIgMwojIDU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5o
IiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7
CiAgdXNpbmcgOjppc2NudHJsOwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7
CiAgdXNpbmcgOjppc2xvd2VyOwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7
CiAgdXNpbmcgOjppc3NwYWNlOwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0
OwogIHVzaW5nIDo6dG9sb3dlcjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0NCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQK
ICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxs
b2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9f
dGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y
YW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNo
YXIqIF9fcyk7Cn0KIyA0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3
ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDU2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvbG9jYWxlZndkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGNsYXNzIHZlY3RvcjsKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxv
Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg
aXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihf
Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2Fs
ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4
ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0No
YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCwg
Y29uc3QgbG9jYWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+
OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZTsK
CgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRl
bXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRl
VD4KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIG51bV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
ciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fcHV0OwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xh
c3MKICAgIGNvbGxhdGVfYnluYW1lOwoKCiAgY2xhc3MgdGltZV9iYXNlOwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3Mg
dGltZV9nZXRfYnluYW1lOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXQ7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWU7CgoKICBjbGFz
cyBtb25leV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
ciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9nZXQ7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0OwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9u
ZXlwdW5jdF9ieW5hbWU7CgoKICBjbGFzcyBtZXNzYWdlc19iYXNlOwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTsKCgogIGNsYXNzIGxvY2FsZQogIHsKICBwdWJs
aWM6CgogICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZhY2V0
OwogICAgY2xhc3MgaWQ7CiAgICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7
CiAgICBmcmllbmQgY2xhc3MgX0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog
ICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBo
YXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBjb25zdCBjYXRl
Z29yeSBub25lID0gMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8IDA7
CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFMIDw8IDE7CiAgICBzdGF0aWMg
Y29uc3QgY2F0ZWdvcnkgY29sbGF0ZSA9IDFMIDw8IDI7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdv
cnkgdGltZSA9IDFMIDw8IDM7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkgPSAx
TCA8PCA0OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1lc3NhZ2VzID0gMUwgPDwgNTsKICAg
IHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY29sbGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkg
fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyB8IHRp
bWUgfCBtZXNzYWdlcyk7CgoKICAgIGxvY2FsZSgpIHRocm93KCk7CgogICAgbG9jYWxlKGNvbnN0
IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKGNvbnN0
IGNoYXIqIF9fc3RkX25hbWUpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29u
c3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYg
X19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBf
RmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgog
ICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2Fs
ZSYgX19vdGhlcik7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAg
IG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRo
cm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwg
X1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMgbG9j
YWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxvY2FsZSYK
ICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgogICAgc3Rh
dGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsKCiAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9jYXRlZ29yaWVzID0gNjsKICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgX1NfbnVtX2ZhY2V0cyA9IDEzOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUo
X0ltcGwqKSB0aHJvdygpOwoKICAgIHN0YXRpYyBpbmxpbmUgdm9pZAogICAgX1NfaW5pdGlhbGl6
ZSgpCiAgICB7IGlmICghX1NfY2xhc3NpYykgY2xhc3NpYygpOyB9CgogICAgc3RhdGljIGNhdGVn
b3J5CiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9N
X2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRl
Z29yeSBfX2NhdCk7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6Ol9JbXBsCiAgewogIHB1YmxpYzoK
CiAgICB0eXBlZGVmIHZlY3RvcjxmYWNldCosIGFsbG9jYXRvcjxmYWNldCo+ID4gX192ZWNfZmFj
ZXQ7CgoKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpm
YWNldDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBf
RmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2Nh
bGUmKSB0aHJvdygpOwoKICBwcml2YXRlOgoKICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOwogICAg
X192ZWNfZmFjZXQqIF9NX2ZhY2V0czsKICAgIHN0cmluZyBfTV9uYW1lc1tfU19udW1fY2F0ZWdv
cmllc107CiAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlOwogICAgc3RhdGljIGNvbnN0IGxvY2Fs
ZTo6aWQqIGNvbnN0IF9TX2lkX2N0eXBlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCog
Y29uc3QgX1NfaWRfbnVtZXJpY1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0
IF9TX2lkX2NvbGxhdGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19p
ZF90aW1lW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbW9uZXRh
cnlbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNzYWdlc1td
OwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBfU19mYWNldF9jYXRl
Z29yaWVzW107CgogICAgaW5saW5lIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygp
CiAgICB7ICsrX01fcmVmZXJlbmNlczsgfQoKICAgIGlubGluZSB2b2lkCiAgICBfTV9yZW1vdmVf
cmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX01fcmVmZXJlbmNlcy0tID09IDAp
CiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsgZGVsZXRlIHRoaXM7
IH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgeyB9CiAgICAgICAgfQogICAgfQoK
ICAgIF9JbXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKHN0cmluZyBfX25hbWUs
IHNpemVfdCk7CiAgIH5fSW1wbCgpIHRocm93KCk7CgogICAgYm9vbAogICAgX01fY2hlY2tfc2Ft
ZV9uYW1lKCkKICAgIHsKICAgICAgYm9vbCBfX3JldCA9IHRydWU7CiAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgX1NfbnVtX2NhdGVnb3JpZXMgLSAxOyArK2kpCiAgICAgICAgX19yZXQgJj0g
X01fbmFtZXNbaV0gPT0gX01fbmFtZXNbaSArIDFdOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9
CiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29y
eSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0
IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25z
dCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2Zh
Y2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G
YWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFj
ZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBs
b2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9J
bXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0
KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19u
dW1fY2F0ZWdvcmllczsgKytfX2kpCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIq
IjsKICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgICBmcmllbmQgY2xhc3MgbG9j
YWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogIHByb3RlY3RlZDoKICAgIGV4
cGxpY2l0CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFs
CiAgICB+ZmFjZXQoKSB7IH07CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9jX2xvY2Fs
ZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcyk7CgogICAgc3RhdGljIHZvaWQK
ICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgcHJpdmF0ZToK
ICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOwoKICAgIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2Uo
KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOwoK
ICAgIGZhY2V0KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGZh
Y2V0Jik7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZhdGU6CiAgICBmcmll
bmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVz
ZV9mYWNldChjb25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
ICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93ICgpOwoK
CgoKICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMgc2l6ZV90IF9TX2hp
Z2h3YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsKCiAgICBpZChjb25z
dCBpZCYpOwoKICBwdWJsaWM6CgoKCiAgICBpZCgpIHsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUm
IF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2Zh
Y2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0NCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvaW9zX2Jhc2UuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIGVudW0gX0lvc19GbXRm
bGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19G
bXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2Ip
CiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf
Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9J
b3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZs
YWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAg
aW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3Nf
Rm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50Pihf
X2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwog
IG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJl
dHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRv
ciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19h
ID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JePShfSW9z
X0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBe
IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdz
IF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9
CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwgMTYg
fTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2Es
IF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8
aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVu
bW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAg
eyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2Fz
dDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3Nf
T3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2Rl
KHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s
aW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19P
cGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9z
X09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUg
X19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9k
ZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7
IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVy
YXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGlj
X2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0
ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9J
b3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRl
KHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s
aW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3Rh
dGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBz
dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRv
cl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lv
c3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoK
ICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lv
c19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9J
b3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBf
X2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUK
ICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0
dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+
KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxp
bnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01faW9zX3NlZWtkaXJfZW5kID0g
MUwgPDwgMTYgfTsKCgogIGNsYXNzIGlvc19iYXNlCiAgewogIHB1YmxpYzoKCgogICAgY2xhc3Mg
ZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBleHBs
aWNpdAogICAgICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7CgogICAgICB2
aXJ0dWFsCiAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7CgogICAgcHJpdmF0ZToKICAgICAgZW51bSB7
IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAgY2hhciBfTV9uYW1lW19NX2J1ZnNpemVdOwoKICAg
IH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRmbGFnczsKCiAgICBzdGF0aWMgY29u
c3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBo
YSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfZml4ZWQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGhleCA9IGZtdGZs
YWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVy
bmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsKICAgIHN0YXRpYyBjb25z
dCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xlZnQpOwogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOwog
ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T
X3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmljID0gZm10ZmxhZ3Mo
X19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNo
b3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bv
aW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0gZm10ZmxhZ3MoX19pb3Nf
ZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lwd3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz
IHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7CiAgICBzdGF0aWMg
Y29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VwcGVy
Y2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJh
c2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19iYXNlZmllbGQpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZmxv
YXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7CiAgICBzdGF0aWMg
Y29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19iYWRiaXQpOwog
ICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1Nf
ZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9z
X2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGdvb2RiaXQgPSBp
b3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1vZGUgb3Blbm1vZGU7CiAgICBzdGF0
aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CiAg
ICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRlID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0
ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Blbm1vZGUoX19pb3NfZmxh
Z3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lv
c19mbGFnczo6X1NfaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2Rl
KF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIHRydW5jID0g
b3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsKCgogICAgdHlwZWRlZiBfSW9zX1NlZWtk
aXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7CiAg
ICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPSBzZWVrZGlyKDEpOwogICAgc3RhdGljIGNvbnN0
IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsKIyAyMTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBlbnVtIGV2ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2
ZW50LAogICAgICBpbWJ1ZV9ldmVudCwKICAgICAgY29weWZtdF9ldmVudAogICAgfTsKCiAgICB0
eXBlZGVmIHZvaWQgKCpldmVudF9jYWxsYmFjaykgKGV2ZW50LCBpb3NfYmFzZSYsIGludCk7Cgog
ICAgdm9pZAogICAgcmVnaXN0ZXJfY2FsbGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9f
aW5kZXgpOwoKICBwcm90ZWN0ZWQ6CgogICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247CiAgICBz
dHJlYW1zaXplIF9NX3dpZHRoOwogICAgZm10ZmxhZ3MgX01fZmxhZ3M7CgoKCiAgICBzdHJ1Y3Qg
X0NhbGxiYWNrX2xpc3QKICAgIHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAg
ICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAg
ICAgaW50IF9NX3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jhc2U6OmV2ZW50
X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJh
Y2tfbGlzdCogX19jYikKICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwgX01faW5k
ZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAgICBfTV9hZGRf
cmVmZXJlbmNlKCkgeyArK19NX3JlZmNvdW50OyB9CgogICAgICBpbnQKICAgICAgX01fcmVtb3Zl
X3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9NX3JlZmNvdW50LS07IH0KICAgIH07CgogICAgIF9DYWxs
YmFja19saXN0KiBfTV9jYWxsYmFja3M7CgogICAgdm9pZAogICAgX01fY2FsbF9jYWxsYmFja3Mo
ZXZlbnQgX19ldikgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2
b2lkKTsKCgogICAgc3RydWN0IF9Xb3JkcwogICAgewogICAgICB2b2lkKiBfTV9wd29yZDsKICAg
ICAgbG9uZyBfTV9pd29yZDsKICAgIH07CgogICAgc3RhdGljIGNvbnN0IGludCBfU19sb2NhbF93
b3JkcyA9IDg7CiAgICBfV29yZHMgX01fd29yZF9hcnJheVtfU19sb2NhbF93b3Jkc107CiAgICBf
V29yZHMgX01fZHVtbXk7CiAgICBfV29yZHMqIF9NX3dvcmRzOwogICAgaW50IF9NX3dvcmRfbGlt
aXQ7CgogICAgX1dvcmRzJgogICAgX01fZ3Jvd193b3JkcyhpbnQgX19pbmRleCk7CgoKICAgIGxv
Y2FsZSBfTV9pb3NfbG9jYWxlOwoKICAgIHZvaWQKICAgIF9NX2luaXQoKTsKCiAgcHVibGljOgoK
CgoKCiAgICBjbGFzcyBJbml0CiAgICB7CiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsKICAg
IHB1YmxpYzoKICAgICAgSW5pdCgpOwogICAgICB+SW5pdCgpOwoKICAgICAgc3RhdGljIHZvaWQK
ICAgICAgX1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7CgogICAgICBzdGF0aWMgdm9pZAogICAg
ICBfU19pb3NfZGVzdHJveSgpOwoKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9z
X2Jhc2VfaW5pdDsKICAgICAgc3RhdGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87CiAgICB9
OwoKCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxh
Z3M7IH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpCiAg
ICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzID0gX19m
bXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAg
c2V0ZihmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2Zs
YWdzOwogICAgICBfTV9mbGFncyB8PSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9
CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwsIGZtdGZsYWdz
IF9fbWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01f
ZmxhZ3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBfX21hc2spOwog
ICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQKICAgIHVuc2V0ZihmbXRm
bGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsgfQoKICAgIGlubGluZSBzdHJlYW1z
aXplCiAgICBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0KCiAgICBp
bmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19wcmVjKQogICAgewog
ICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9uOwogICAgICBfTV9wcmVjaXNpb24g
PSBfX3ByZWM7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6
ZQogICAgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQoKICAgIGlubGluZSBzdHJl
YW1zaXplCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6
ZSBfX29sZCA9IF9NX3dpZHRoOwogICAgICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJu
IF9fb2xkOwogICAgfQoKICAgIHN0YXRpYyBib29sCiAgICBzeW5jX3dpdGhfc3RkaW8oYm9vbCBf
X3N5bmMgPSB0cnVlKTsKCgogICAgbG9jYWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9j
KTsKCiAgICBpbmxpbmUgbG9jYWxlCiAgICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3Nf
bG9jYWxlOyB9CgoKICAgIHN0YXRpYyBpbnQKICAgIHhhbGxvYygpIHRocm93KCk7CgogICAgaW5s
aW5lIGxvbmcmCiAgICBpd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQg
PSAoX19peCA8IF9NX3dvcmRfbGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29y
ZHNbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3
b3JkOwogICAgfQoKICAgIGlubGluZSB2b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewog
ICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9saW1pdCkKICAgICAgICAgICAg
ICAgICAgICAgICAgPyBfTV93b3Jkc1tfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAg
IHJldHVybiBfX3dvcmQuX01fcHdvcmQ7CiAgICB9CgoKICAgIH5pb3NfYmFzZSgpOwoKICBwcm90
ZWN0ZWQ6CiAgICBpb3NfYmFzZSgpOwoKCiAgcHJpdmF0ZToKICAgIGlvc19iYXNlKGNvbnN0IGlv
c19iYXNlJik7CgogICAgaW9zX2Jhc2UmCiAgICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jhc2UmKTsK
CiAgfTsKCgogIGlubGluZSBpb3NfYmFzZSYKICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9ib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJu
IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93YmFzZShpb3NfYmFzZSYgX19i
YXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4g
X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9f
YmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb2ludChpb3NfYmFzZSYg
X19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0
dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb2ludChpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAg
ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb3MoaW9zX2Jh
c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICBy
ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3Bvcyhpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBza2lwd3MoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9f
YmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJu
IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9f
YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICBy
ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdW5pdGJ1Zihpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAg
ICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBpbnRlcm5hbChpb3Nf
YmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlv
c19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp
b3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHJpZ2h0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2Vm
aWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGhleChp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19i
YXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz
ZSYKICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6
b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5s
aW5lIGlvc19iYXNlJgogIGZpeGVkKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl
dGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZs
b2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgp9CiMgNDUgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDQxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyA0MiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK
ICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfaW9zLAog
ICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f
c2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoK
ICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlw
ZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47
CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+
OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBl
PjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFp
dHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlw
ZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0cmVhbXNpemUKICAgICAgX19jb3B5X3N0
cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4mIF9faW9zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1
Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6CgoKCgoKCiAgICAgIGNoYXJfdHlwZSog
X01fYnVmOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplOwoKCiAgICAgIGludF90eXBlIF9N
X2J1Zl9zaXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsKCgoKCgoKICAgICAg
Y2hhcl90eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01faW5fY3VyOwogICAgICBj
aGFyX3R5cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOwogICAgICBj
aGFyX3R5cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsKCgogICAg
ICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2Fs
ZTsKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsKCgoKCgoKICAgICAgaW50X3R5cGUg
X01fcGJhY2tfc2l6ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFjazsKICAgICAgY2hhcl90eXBl
KiBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsK
ICAgICAgYm9vbCBfTV9wYmFja19pbml0OwoKCgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19j
cmVhdGUoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9wYmFja19pbml0KQogICAgICAgICAgewog
ICAgICAgICAgICBpbnRfdHlwZSBfX2Rpc3QgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAg
ICAgICAgIGludF90eXBlIF9fbGVuID0gbWluKF9NX3BiYWNrX3NpemUsIF9fZGlzdCk7CiAgICAg
ICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX3BiYWNrLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAg
ICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7CiAgICAgICAgICAgIF9NX3Bi
YWNrX2VuZF9zYXZlID0gX01faW5fZW5kOwogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX3BiYWNr
LCBfTV9wYmFjaywgX01fcGJhY2sgKyBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQg
PSB0cnVlOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNr
X2Rlc3Ryb3koKQogICAgICB7CiAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7
CgogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsK
CgogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9lbmQgPSAwOwogICAgICAgICAgICBpbnRfdHlw
ZSBfX3BiYWNrX2xlbiA9IF9NX2luX2VuZCAtIF9NX3BiYWNrOwogICAgICAgICAgICBpbnRfdHlw
ZSBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9idWY7CiAgICAgICAgICAgIGlm
IChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAgICAgICAgICAgX19vZmZfZW5kID0gX19w
YmFja19sZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9N
X3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICAgICAgICAgICAgICAgIF9NX3Bi
YWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUg
PSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX19udWxsOwogICAgICAg
ICAgICBfTV9wYmFja19pbml0ID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgIH0KCgoKICAgICAg
dm9pZAogICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBi
b29sIF9fdGVzdG91dCA9IF9NX291dF9jdXI7CiAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAg
ICAgICBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01fb3V0X2N1
ciArPSBfX247CiAgICAgIH0KIyAxOTMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfc3RyZWFtYnVmLmgiIDMKICAgICAgdm9pZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5
cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAg
ICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlm
aWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+
IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRf
Y3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCAr
PSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291
dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAg
aWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9
PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUg
LSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01f
b3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgICB9CiMgMjM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1
Zi5oIiAzCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAg
ewogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQogICAgICAgICAgdGhpcy0+c2V0
ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVmKTsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNl
OjpvdXQpCiAgICAgICAgICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmKTsKICAgICAgfQoKICAg
ICAgdm9pZAogICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUob2ZmX3R5cGUgX19vZmYpCiAgICAgIHsK
ICAgICAgICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgICBi
b29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICAgIGlmIChfX3Rl
c3RpbikKICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1ZiArIF9fb2Zm
KTsKICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYsIF9N
X2J1ZiArIF9fb2ZmKTsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBfTV9pc19pbmRldGVybWlu
YXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBib29sIF9fcmV0ID0gZmFsc2U7CgogICAgICAgIGlm
IChfTV9idWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6
OmluKQogICAgICAgICAgICAgIF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAmJiBfTV9p
bl9jdXIgPT0gX01faW5fZW5kOwogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpv
dXQpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnID09IF9NX291dF9jdXIgJiYgX01f
b3V0X2N1ciA9PSBfTV9vdXRfZW5kOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsK
ICAgICAgfQoKICBwdWJsaWM6CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1Zigp
CiAgICAgIHsKICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNlOwogICAgICAgIF9NX2J1Zl9z
aXplID0gMDsKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICAgIF9NX21vZGUgPSBp
b3NfYmFzZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gZmFsc2U7
CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgcHViaW1idWUoY29uc3QgbG9jYWxlICZfX2xv
YykKICAgICAgewogICAgICAgIGxvY2FsZSBfX3RtcCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgICAg
dGhpcy0+aW1idWUoX19sb2MpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAg
bG9jYWxlCiAgICAgIGdldGxvYygpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX01fYnVmX2xv
Y2FsZV9pbml0KQogICAgICAgICAgcmV0dXJuIF9NX2J1Zl9sb2NhbGU7CiAgICAgICAgZWxzZQog
ICAgICAgICAgcmV0dXJuIGxvY2FsZSgpOwogICAgICB9CgoKICAgICAgX19zdHJlYW1idWZfdHlw
ZSoKICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAg
eyByZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAg
cHVic2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlv
c19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtvZmYoX19vZmYsIF9fd2F5LCBf
X21vZGUpOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrcG9zKHBvc190eXBlIF9fc3As
CiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpp
biB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19zcCwgX19t
b2RlKTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5zeW5jKCk7
IH0KCgoKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9hdmFpbCgpCiAgICAgIHsKICAgICAgICBz
dHJlYW1zaXplIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01f
aW5fZW5kKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0gX01fcGJhY2tf
ZW5kX3NhdmUgLSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgICAgICAgICAgIGludF90eXBlIF9f
cGJhY2tfbGVuID0gX01faW5fY3VyIC0gX01fcGJhY2s7CiAgICAgICAgICAgICAgICBfX3JldCA9
IF9fc2F2ZV9sZW4gLSBfX3BiYWNrX2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7CiAg
ICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT5zaG93bWFueWMo
KTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAgICAgIHNu
ZXh0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2Yo
KTsKICAgICAgICByZXR1cm4gKHRoaXMtPnNidW1wYygpID09IF9fZW9mID8gX19lb2YgOiB0aGlz
LT5zZ2V0YygpKTsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc2J1bXBjKCk7CgogICAg
ICBpbnRfdHlwZQogICAgICBzZ2V0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldDsK
ICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAg
IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CiAgICAg
ICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT51bmRlcmZsb3coKTsKICAgICAgICByZXR1
cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBl
KiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBf
X24pOyB9CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpOwoK
ICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0YygpOwoKCiAgICAgIGludF90eXBlCiAgICAgIHNw
dXRjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0
bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAg
ICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1Zl9zaXplKDApLAogICAgICBfTV9idWZfc2l6ZV9v
cHQoc3RhdGljX2Nhc3Q8aW50X3R5cGU+KDgxOTIpKSwgX01fYnVmX3VuaWZpZWQoZmFsc2UpLAog
ICAgICBfTV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwgX01faW5fZW5kKDApLCBfTV9vdXRfYmVn
KDApLCBfTV9vdXRfY3VyKDApLAogICAgICBfTV9vdXRfZW5kKDApLCBfTV9tb2RlKGlvc19iYXNl
OjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkpLAogICAgICBfTV9idWZfbG9j
YWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19zaXplKDEpLCBfTV9wYmFjayhfX251bGwpLAogICAg
ICBfTV9wYmFja19jdXJfc2F2ZShfX251bGwpLCBfTV9wYmFja19lbmRfc2F2ZShfX251bGwpLCBf
TV9wYmFja19pbml0KGZhbHNlKQogICAgICB7IH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVi
YWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAg
IGdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAg
ICAgZWdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAg
Z2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNl
dGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dl
bmQpCiAgICAgIHsKICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7CiAgICAgICAgX01faW5fY3Vy
ID0gX19nbmV4dDsKICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7CiAgICAgICAgaWYgKCEoX01f
bW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5kKQogICAg
ICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47CiAgICAgIH0KCgogICAgICBj
aGFyX3R5cGUqCiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAg
ICAgY2hhcl90eXBlKgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoK
ICAgICAgY2hhcl90eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7
IH0KCiAgICAgIHZvaWQKICAgICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsg
fQoKICAgICAgdm9pZAogICAgICBzZXRwKGNoYXJfdHlwZSogX19wYmVnLCBjaGFyX3R5cGUqIF9f
cGVuZCkKICAgICAgewogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOwog
ICAgICAgIF9NX291dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19i
YXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9k
ZSB8IGlvc19iYXNlOjpvdXQ7CiAgICAgIH0KCgoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGlt
YnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICAgIHsKICAgICAgICBfTV9idWZfbG9jYWxlX2lu
aXQgPSB0cnVlOwogICAgICAgIGlmIChfTV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAgICAgICAg
X01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICB9CgoKICAgICAgdmlydHVhbCBiYXNpY19zdHJl
YW1idWY8Y2hhcl90eXBlLF9UcmFpdHM+KgogICAgICBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFt
c2l6ZSkKICAgICAgeyByZXR1cm4gdGhpczsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAg
ICBzZWVrb2ZmKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAgICBpb3Nf
YmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJl
dHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAg
ICAgIHNlZWtwb3MocG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0g
aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2Zm
X3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpIHsgcmV0dXJuIDA7
IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4g
MDsgfQoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9f
cywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZs
b3coKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICAgIHZpcnR1YWwg
aW50X3R5cGUKICAgICAgdWZsb3coKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0
cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0aGlzLT51bmRlcmZs
b3coKSA9PSBfX3JldDsKICAgICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYg
X01faW5fY3VyIDwgX01faW5fZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBl
bmRpbmcpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2lu
dF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAg
aWYgKF9NX2J1Zl91bmlmaWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAg
ICAgICsrX01fb3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAg
IH0KCgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRy
YWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgoK
ICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9f
cywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxv
dyhpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5
cGU6OmVvZigpOyB9CiMgNTE2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0
cmVhbWJ1Zi5oIiAzCiAgICBwcml2YXRlOgogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19z
dHJlYW1idWZfdHlwZSYpOwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0b3I9
KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKTsKCiAgICB9OwoKfQoKCgoKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzcgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdHJlYW1idWYudGNjIiAzCm5hbWVzcGFjZSBzdGQgewoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIHNidW1wYygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0Owog
ICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICB7CiAg
ICAgICAgICBjaGFyX3R5cGUgX19jID0gKmdwdHIoKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3Zl
KDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAg
ICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFja2MoY2hhcl90
eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wgX190ZXN0cG9z
ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9vbCBfX3Rlc3Ru
ZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0xXSk7
CiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0ID0gcGJhY2tm
YWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5
cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9f
cmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdldGMoKQogICAgewogICAgICBp
bnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9j
dXIpCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19y
ZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgfQogICAg
ICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsKICAgICAgcmV0dXJuIF9f
cmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9f
YykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUo
KSkKICAgICAgICB7CiAgICAgICAgICAqX01fb3V0X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291
dF9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxv
dyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIHJldHVybiBfX3JldDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry
ZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRu
KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBf
X3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBz
aXplX3QgX19idWZfbGVuID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgaWYgKF9f
YnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19yZW1haW5p
bmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZf
bGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBf
TV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAg
ICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01faW5fY3VyX21vdmUoX19sZW4pOwog
ICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsKICAgICAgICAgICAgICBp
ZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19zKyssIHRyYWl0c190eXBlOjp0b19jaGFy
X3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBf
X3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAg
ICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAgICAgIG9mZl90eXBlIF9fYnVm
X2xlbiA9IF9NX291dF9idWZfc2l6ZSgpOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9f
cmV0OwogICAgICAgICAgICAgIG9mZl90eXBlIF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1h
aW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX291dF9jdXIsIF9fcywg
X19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyAr
PSBfX2xlbjsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19sZW4pOwogICAgICAgICAg
ICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KCpfX3MpKTsKICAgICAgICAgICAgICBpZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAgICAg
ICAgKytfX3M7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsK
ICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9U
cmFpdHM+JiBfX2lvcywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCkKICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsK
ICAgICAgc3RyZWFtc2l6ZSBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgIHN0
cmVhbXNpemUgX194dHJjdDsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfX3Nib3V0LT5fTV9tb2Rl
ICYgaW9zX2Jhc2U6Om91dDsKICAgICAgaWYgKHRydWUpIHsKICAgICAgICB3aGlsZSAoX190ZXN0
cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgIHsKICAgICAgICAgICAgX194dHJjdCA9
IF9fc2JvdXQtPnNwdXRuKF9fc2Jpbi0+Z3B0cigpLCBfX2J1ZnNpemUpOwogICAgICAgICAgICBf
X3JldCArPSBfX3h0cmN0OwogICAgICAgICAgICBfX3NiaW4tPl9NX2luX2N1cl9tb3ZlKF9feHRy
Y3QpOwogICAgICAgICAgICBpZiAoX194dHJjdCA9PSBfX2J1ZnNpemUpCiAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYmluLT5zZ2V0YygpOwogICAgICAg
ICAgICAgICAgaWYgKF9fYyA9PSBfVHJhaXRzOjplb2YoKSkKICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgfQogICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAg
aWYgKGZhbHNlKSB7CiAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICB9
CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDUzMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9iYXNpY19pb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1
Zl9pdGVyLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9p
dGVyLmgiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGlj
IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0
cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6
CiAgICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19z
KSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3Ni
dWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0
aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAg
ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAg
ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJh
dG9yKysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFt
YnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAq
dGhpczsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf
VHJhaXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0
b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBf
VHJhaXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLF9UcmFpdHM6OmVvZigpKSkK
ICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJl
YW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
IF9DaGFyVCosIF9DaGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgICAg
dHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVm
aXRlcl90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBzdHJlYW1idWZfdHlwZSogX01f
c2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZf
aXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7IH0K
CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkKICAg
ICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFtYnVm
X2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9f
cyksIF9NX2MoLTIpIHsgfQoKCgoKICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNv
bnN0CiAgICAgIHsKCiAgICAgICAgY2hhcl90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9zYnVm
ICYmIF9NX2MgIT0gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0yKSkKICAgICAgICAgIF9fcmV0ID0g
X01fYzsKICAgICAgICBlbHNlIGlmIChfTV9zYnVmKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNf
dHlwZTo6dG9fY2hhcl90eXBlKF9NX3NidWYtPnNnZXRjKCkpOwogICAgICAgIGVsc2UKICAgICAg
ICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPih0cmFpdHNfdHlwZTo6ZW9mKCkpOwog
ICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBl
JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9zYnVmKQogICAgICAg
ICAgX01fc2J1Zi0+c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlCiAgICAgIG9wZXJhdG9y
KysoaW50KQogICAgICB7CiAgICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlIF9fb2xkID0gKnRo
aXM7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICBfX29sZC5fTV9jID0gX01fc2J1Zi0+
c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAg
fQoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9f
YikKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICAgIGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBf
X2VvZjsKICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAgICAg
ICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJuIChf
X3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoK
CgoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9f
YikgY29uc3QKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMo
KSA9PSBfX2VvZjsKICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAg
ICAgICAgICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0
dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAg
ICAgfQoKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVm
X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVhbChf
X2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsg
fQp9CiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAz
CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMK
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAxIDMKIyAz
NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDIgMwojIDQwICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGlt
ZS5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5o
IiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsK
ICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNp
bmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6
OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6
c3RyZnRpbWU7Cn0KIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m
YWNldHMuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Mu
aCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRz
LmgiIDIgMwoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDEgMwojIDUwICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5o
IiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBjb25zdCBpbnQqIF9fdG9f
dHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWFzazsKICAgIHN0YXRpYyBjb25z
dCBtYXNrIHVwcGVyID0gX0lTdXBwZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9IF9J
U2xvd2VyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNhbHBoYTsKICAgIHN0YXRp
YyBjb25zdCBtYXNrIGRpZ2l0ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGln
aXQgPSBfSVN4ZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IF9JU3NwYWNlOwog
ICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSBfSVNwcmludDsKICAgIHN0YXRpYyBjb25zdCBt
YXNrIGdyYXBoID0gX0lTZ3JhcGg7CiAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IF9JU2Nu
dHJsOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5jdDsKICAgIHN0YXRpYyBj
b25zdCBtYXNrIGFsbnVtID0gX0lTYWxudW07CiAgfTsKIyA1NCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlw
ZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAg
ICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0
IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAg
ICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8s
IF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19t
LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAg
Y2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJf
dHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xv
d2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUK
ICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVu
KF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8s
IGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFy
cm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgog
ICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGks
CiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAg
IHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNp
emVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVh
bAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wK
ICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0g
MDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sg
X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xv
LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90
eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg
ICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgog
ICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAg
ICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFy
CiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90
eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBf
X2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9i
YXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgZXhw
bGljaXQKICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApIDogX19jdHlwZV9hYnN0cmFjdF9i
YXNlPF9DaGFyVD4oX19yZWZzKSB7IH0KCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpIHsgfQoKICAgICAgdmlydHVh
bCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7
IHJldHVybiBmYWxzZTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBf
X3ZlYykgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9Cgog
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20s
IGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBl
KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNoYXJf
dHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9fYzsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIo
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hh
cl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gX19jOyB9CgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IGNoYXJfdHlwZSgpOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVu
KGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBj
b25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9f
bmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19k
ZmF1bHQ7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3co
Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAg
ICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9f
aGk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQg
Y3R5cGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTxjaGFyPiA6
IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8Y2hhcj4KICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogICAgcHJpdmF0ZToKCiAgICAgIGJvb2wgX01f
ZGVsOwogICAgICBfX3RvX3R5cGUgY29uc3QmIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBj
b25zdCYgX01fdG9sb3dlcjsKICAgICAgY29uc3QgbWFzayogY29uc3QmIF9NX2N0YWJsZTsKICAg
ICAgY29uc3QgbWFzayogX01fdGFibGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxl
OjppZCBpZDsKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KC0xKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKGNv
bnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVfdCBfX3JlZnMg
PSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29u
c3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywg
Y29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0
IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo
YXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90
KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICBjb25zdCBt
YXNrKgogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fdGFibGU7
IH0KCiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIF9NX2N0YWJsZTsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1h
c2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog
ICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj
aGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25z
dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNo
YXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3co
Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAg
ICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBs
YXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4o
Y29uc3QgbG9jYWxlJiBfX2xvYyk7CiMgMzkyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5oIiAzCiAg
Ym9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0CiAgeyBy
ZXR1cm4gX01fdGFibGVbX19jXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+
OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3Zl
YykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAgICpfX3ZlYysrID0g
X01fdGFibGVbKl9fbG93KytdOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIq
CiAgY3R5cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBj
b25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoICYm
ICEoX01fdGFibGVbKl9fbG93XSAmIF9fbSkpCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19s
b3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX25vdChtYXNrIF9f
bSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3
aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAoX01fdGFibGVbKl9fbG93XSAmIF9f
bSkgIT0gMCkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CiMgMzkzICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlw
ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90
IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGVf
YnluYW1lKCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+
OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgoKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwojIDE3MyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwogIGNsYXNzIGNvZGVjdnRfYmFzZQogIHsKICBwdWJs
aWM6CiAgICBlbnVtIHJlc3VsdAogICAgewogICAgICBvaywKICAgICAgcGFydGlhbCwKICAgICAg
ZXJyb3IsCiAgICAgIG5vY29udgogICAgfTsKICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3Mg
X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UKICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1Ymxp
YyBjb2RlY3Z0X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9i
YXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwog
ICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQg
c3RhdGVfdHlwZTsKCgogICAgICByZXN1bHQKICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSog
X19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGV4
dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICBleHRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19v
dXQoX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAg
ICByZXN1bHQKICAgICAgdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSog
X190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYg
X190b19uZXh0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb191bnNoaWZ0KF9fc3RhdGUs
IF9fdG8sX190b19lbmQsX190b19uZXh0KTsgfQoKICAgICAgcmVzdWx0CiAgICAgIGluKHN0YXRl
X3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgIGNvbnN0
IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0
LAogICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg
ICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVy
biB0aGlzLT5kb19pbihfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAg
ICAgfQoKICAgICAgaW50CiAgICAgIGVuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJl
dHVybiB0aGlzLT5kb19lbmNvZGluZygpOyB9CgogICAgICBib29sCiAgICAgIGFsd2F5c19ub2Nv
bnYoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2NvbnYo
KTsgfQoKICAgICAgaW50CiAgICAgIGxlbmd0aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBj
b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2xlbmd0
aChfX3N0YXRlLCBfX2Zyb20sIF9fZW5kLCBfX21heCk7IH0KCiAgICAgIGludAogICAgICBtYXhf
bGVuZ3RoKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3Ro
KCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fY29kZWN2dF9hYnN0
cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0K
CiAgICAgIHZpcnR1YWwKICAgICAgfl9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAg
ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3Qg
aW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zy
b21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVy
bl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAg
ICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAg
ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25l
eHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5
cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0
IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0
LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAog
ICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmly
dHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZp
cnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0
IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSog
X19lbmQsIHNpemVfdCBfX21heCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAg
ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkgPSAwOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAg
ICBjbGFzcyBjb2RlY3Z0CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50
ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm
IGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRl
ZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg
ICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29k
ZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULF9FeHRlcm5ULF9TdGF0ZVQ+IChfX3JlZnMpIHsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQogICAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBl
bmFtZSBfU3RhdGVUPgogICAgbG9jYWxlOjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg
X1N0YXRlVD46OmlkOwojIDU5NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVj
dnQuaCIgMwogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0
ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJz
dGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGludGVybl90eXBl
OwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90
IHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp
dAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRv
X291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBl
KiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5
cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0
YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190
b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVz
dWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBf
X2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBl
eHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywg
aW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4
dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRo
cm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0
IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVf
dHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBl
eHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGlu
dAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICB9OwojIDcwMCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNz
IGNvZGVjdnRfYnluYW1lIDogcHVibGljIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3Rh
dGVUPgogICAgewogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0X2J5bmFt
ZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29kZWN2dDxfSW50ZXJu
VCwgX0V4dGVyblQsIF9TdGF0ZVQ+KF9fcmVmcykgeyB9CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp
cnR1YWwKICAgICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CiAgICB9OwojIDQxNiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIF9OdW1lcmljX2dldDsK
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfRm9ybWF0X2NhY2hl
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBz
dHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCgogICAgICBmcmllbmQgY2xhc3MgbG9j
YWxlOwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlcj4KICAg
ICAgICBmcmllbmQgY2xhc3MgX051bWVyaWNfZ2V0OwogICAgICBmcmllbmQgY2xhc3MgbnVtX2dl
dDxfQ2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgbnVtX3B1dDxfQ2hhclQ+OwogICAgICBmcmll
bmQgY2xhc3MgdGltZV9nZXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5X2dldDxf
Q2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgdGltZV9wdXQ8X0NoYXJUPjsKICAgICAgZnJpZW5k
IGNsYXNzIG1vbmV5X3B1dDxfQ2hhclQ+OwoKCgoKICAgICAgc3RhdGljIGludCBfU19wd29yZF9p
eDsKCgoKICAgICAgYm9vbCBfTV92YWxpZDsKCgoKICAgICAgc3RhdGljIGNvbnN0IGNoYXIgX1Nf
bGl0ZXJhbHNbXTsKCgoKCiAgICAgIGVudW0KICAgICAgewogICAgICAgIF9TX21pbnVzLAogICAg
ICAgIF9TX3BsdXMsCiAgICAgICAgX1NfeCwKICAgICAgICBfU19YLAogICAgICAgIF9TX2RpZ2l0
cywKICAgICAgICBfU19kaWdpdHNfZW5kID0gX1NfZGlnaXRzICsgMTYsCiAgICAgICAgX1NfdWRp
Z2l0cyA9IF9TX2RpZ2l0c19lbmQsCiAgICAgICAgX1NfdWRpZ2l0c19lbmQgPSBfU191ZGlnaXRz
ICsgMTYsCiAgICAgICAgX1NfZWUgPSBfU19kaWdpdHMgKyAxNCwKICAgICAgICBfU19FZSA9IF9T
X3VkaWdpdHMgKyAxNAogICAgICB9OwoKCgoKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9p
bnQ7CgoKCgoKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CgoKCiAgICAgIHN0cmlu
Z190eXBlIF9NX3RydWVuYW1lOwogICAgICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5hbWU7CgoKCiAg
ICAgIGJvb2wgX01fdXNlX2dyb3VwaW5nOwoKCgogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7Cgog
ICAgICBfRm9ybWF0X2NhY2hlKCk7CgogICAgICB+X0Zvcm1hdF9jYWNoZSgpIHRocm93KCkgeyB9
CgoKCgogICAgICBzdGF0aWMgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KgogICAgICBfU19nZXQoaW9z
X2Jhc2UmIF9faW9zKTsKCiAgICAgIHZvaWQKICAgICAgX01fcG9wdWxhdGUoaW9zX2Jhc2UmKTsK
CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NhbGxiYWNrKGlvc19iYXNlOjpldmVudCBfX2V2
ZW50LCBpb3NfYmFzZSYgX19pb3MsIGludCBfX2l4KSB0aHJvdygpOwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW50IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfcHdv
cmRfaXg7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNvbnN0IGNoYXIgX0Zvcm1h
dF9jYWNoZTxfQ2hhclQ+OjoKICAgIF9TX2xpdGVyYWxzW10gPSAiLSt4WDAxMjM0NTY3ODlhYmNk
ZWYwMTIzNDU2Nzg5QUJDREVGIjsKCiAgIHRlbXBsYXRlPD4gX0Zvcm1hdF9jYWNoZTxjaGFyPjo6
X0Zvcm1hdF9jYWNoZSgpOwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIGNsYXNzIF9OdW1lcmljX2dldAogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90
eXBlOwoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4K
ICAgICAgZnJpZW5kIGNsYXNzIG51bV9nZXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
LCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0OwogICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBj
bGFzcyBtb25leV9nZXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBf
SW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfcHV0
OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAg
IGZyaWVuZCBjbGFzcyBtb25leV9wdXQ7CgogICAgcHJpdmF0ZToKICAgICAgZXhwbGljaXQKICAg
ICAgX051bWVyaWNfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fTnVtZXJpY19nZXQo
KSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9nZXRfZGlnaXRzKGl0ZXJfdHlwZSBfX2lu
LCBpdGVyX3R5cGUgX19lbmQpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFp
dHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog
ICAgICBleHBsaWNpdAogICAgICBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6
ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9f
aW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBj
b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv
X2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192
KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4s
IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChp
dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAg
ICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu
ZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBk
b19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u
ZyBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBf
X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0
KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbCB+bnVtX2dldCgpIHsgfQoKCgoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdChp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsCiAgICAgICAg
ICAgICAgICAgaW50JiBfX2Jhc2UsIGJvb2wgX19mcCA9IHRydWUpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz
ZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3Nf
YmFzZTo6aW9zdGF0ZSYsIHNob3J0JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg
ICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9z
dGF0ZSYsIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0
IChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGxv
bmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5
cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAg
ICAgICAgICBsb25nIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsCiAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz
ZSYsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQm
KSBjb25zdDsKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwg
aXRlcl90eXBlLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB1bnNpZ25lZCBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv
c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg
ICBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp
dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6Omlk
IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAg
ICBudW1fZ2V0PGNoYXIsIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPjo6CiAgICBfTV9leHRy
YWN0KGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gX19iZWcsCiAgICAgICAgICAgICAgIGlzdHJl
YW1idWZfaXRlcmF0b3I8Y2hhcj4gX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGNoYXIqIF9feHRyYywKICAgICAgICAgICAgICAg
aW50JiBfX2Jhc2UsIGJvb2wgX19mcCkgY29uc3Q7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIF9OdW1lcmljX3B1dAogICAgewogICAg
cHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091
dEl0ZXIgaXRlcl90eXBlOwogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfTnVt
ZXJpY19wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9OdW1lcmljX3B1dCgpIHsgfQog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg
IGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0
ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAg
ICAgbnVtX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2Ys
IGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQo
X19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29u
c3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAg
IGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90
eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgICB7IHJl
dHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwg
bG9uZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2Zp
bGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp
OyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg
X19mLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiBk
b19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg
ICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2Ys
IF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3Qgdm9pZCog
X192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg
Y2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBs
b25nIF9fdikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25z
dDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90
eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2Zp
bGwsIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBf
X3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0Owog
ICAgfTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBsb2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMg
bG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9w
b2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIHN0cmluZyBfTV9n
cm91cGluZzsKICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1ZW5hbWU7CiAgICAgIHN0cmluZ190eXBl
IF9NX2ZhbHNlbmFtZTsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0
KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2lu
aXRpYWxpemVfbnVtcHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3QoX19j
X2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz
KQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hhcl90
eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBkb19kZWNpbWFs
X3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAg
Z3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBkb19ncm91cGluZygpOyB9CgogICAgICBz
dHJpbmdfdHlwZQogICAgICB0cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3RydWVu
YW1lKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs
CiAgICAgIH5udW1wdW5jdCgpIHsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
ZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0K
CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwog
ICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9Cgog
ICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fdHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAg
ZG9fZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmFsc2VuYW1lOyB9CgoKICAg
ICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0g
X19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6
aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IHZvaWQKICAgIG51bXB1bmN0PF9DaGFyVD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xv
Y2FsZSApCiAgICB7CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDxj
aGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1
YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVf
bnVtcHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMg
PSAwKQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1Nf
Y3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2lu
aXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQogICAgICB7IF9T
X2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz
dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90
IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaW50CiAgICAg
IGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGky
KTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19s
bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFu
c2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQq
IF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
aGFzaChfX2xvLCBfX2hpKTsgfQoKICBwcm90ZWN0ZWQ6CiAgICAgIH5jb2xsYXRlKCkgeyB9Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv
bnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwg
Y29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAg
ICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9f
bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0
ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46OmRvX2NvbXBhcmUoY29uc3QgY2hhciogX19s
bzEsIGNvbnN0IGNoYXIqIF9faGkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBfX2xvMiwgY29uc3QgY2hhciogX19oaTIpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAg
ICBzdHJpbmcKICAgIGNvbGxhdGU8Y2hhcj46OmRvX3RyYW5zZm9ybShjb25zdCBjaGFyKiBfX2xv
LCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgbG9uZwogICAgY29s
bGF0ZTxjaGFyPjo6ZG9faGFzaChjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBj
b25zdDsKIyAxMDE0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0
cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5h
bWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
c3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlX2J5bmFtZShjb25zdCBj
aGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog
ICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbGxh
dGVfYnluYW1lPGNoYXI+Ojpjb2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVm
cyk7CgoKCgoKICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3Jk
ZXIgeyBub19vcmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXQgOiBwdWJs
aWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90
eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0
aW1lX2dldChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMp
LCBfTV9kYXluYW1lcygwKSwgX01fbW9udGhuYW1lcygwKSB7IH0KCiAgICAgIGRhdGVvcmRlcgog
ICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZGF0ZV9vcmRlcigpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF90aW1lKF9fcywgX19l
bmQsIF9fZiwgX19lcnIsIF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfZGF0ZShp
dGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyByZXR1
cm4gZG9fZ2V0X2RhdGUoX19zLCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsgfQoKICAgICAgaXRl
cl90eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfd2Vla2RheShfX3MsX19lbmQs
X19mLF9fZXJyLF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0
ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIGRvX2dldF9tb250aG5hbWUoX19zLF9fZW5kLF9fZixfX2VycixfX3QpOyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF95ZWFyKF9fcyxfX2VuZCxfX2Ys
X19lcnIsX190KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9n
ZXQoKQogICAgICB7CiAgICAgICAgZGVsZXRlIFtdIF9NX21vbnRobmFtZXM7CiAgICAgICAgZGVs
ZXRlIFtdIF9NX2RheW5hbWVzOwogICAgICB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAg
ICBkb19kYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGltZV9iYXNlOjp5bWQ7IH0K
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX3Ms
IGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmICwgdG0qICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3Nf
YmFzZSYsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAg
ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJf
dHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg
LCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSog
KSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIG11dGFibGUgYmFzaWNfc3RyaW5n
PF9DaGFyVD4qIF9NX2RheW5hbWVzOwogICAgICBtdXRhYmxlIGJhc2ljX3N0cmluZzxfQ2hhclQ+
KiBfTV9tb250aG5hbWVzOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpp
ZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xh
c3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4KICAg
IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnlu
YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2Fs
ZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAg
ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXQo
c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiAsIGNoYXJfdHlwZSAs
CiAgICAgICAgICBjb25zdCB0bSogLCBjb25zdCBfQ2hhclQqICwKICAgICAgICAgIGNvbnN0IF9D
aGFyVCogKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAg
ICAgICAgIGNvbnN0IHRtKiBfX3RtYiwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZGlmaWVyID0g
MCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdG1iLCBf
X2Zvcm1hdCwgX19tb2RpZmllcik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfnRpbWVfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiAsCiAgICAgICAg
ICAgICBjaGFyICwgY2hhciApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6
aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDogcHVi
bGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7
CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVf
dCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+IChfX3JlZnMp
IHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9wdXRfYnluYW1l
KCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAg
IHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J
bkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu
Z190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAg
ICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l
bmQsIGJvb2wgX19pbnRsLAogICAgICAgICAgaW9zX2Jhc2UmIF9fZiwgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9f
Z2V0KF9fcywgX19lbmQsIF9faW50bCwgX19mLCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9f
aW50bCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywg
X19lbmQsIF9faW50bCwgX19mLCBfX2VyciwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgog
ICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBib29sICwKICAgICAg
ICAgICAgIGlvc19iYXNlJiAsIGlvc19iYXNlOjppb3N0YXRlJiAsCiAgICAgICAgICAgICBsb25n
IGRvdWJsZSYgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBib29sICwKICAg
ICAgICAgICAgIGlvc19iYXNlJiAsIGlvc19iYXNlOjppb3N0YXRlJiAsCiAgICAgICAgICAgICBz
dHJpbmdfdHlwZSYgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbW9u
ZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6
ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg
ICAgZXhwbGljaXQKICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6
ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f
cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxs
LCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBf
X2ludGwsIF9fZiwgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1
dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgIGNo
YXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAg
eyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2YsIF9fZmlsbCwgX19kaWdpdHMpOyB9Cgog
ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sLCBpb3Nf
YmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgICAgbG9uZyBkb3VibGUgKSBjb25zdAogICAg
ICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp
dGVyX3R5cGUgX19zLCBib29sLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgICAg
Y29uc3Qgc3RyaW5nX3R5cGUmICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxl
OjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICBzdHJ1Y3QgbW9uZXlfYmFz
ZQogIHsKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07
CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0
IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9T
X2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWVkcywgY2hhciBfX3NwYWNlLCBjaGFyIF9f
cG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAg
Y2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg
ICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90
eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKICAgICAgc3Ry
aW5nX3R5cGUgX01fY3Vycl9zeW1ib2w7CiAgICAgIHN0cmluZ190eXBlIF9NX3Bvc2l0aXZlX3Np
Z247CiAgICAgIHN0cmluZ190eXBlIF9NX25lZ2F0aXZlX3NpZ247CiAgICAgIGludCBfTV9mcmFj
X2RpZ2l0czsKICAgICAgcGF0dGVybiBfTV9wb3NfZm9ybWF0OwogICAgICBwYXR0ZXJuIF9NX25l
Z19mb3JtYXQ7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KHNp
emVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRp
YWxpemVfbW9uZXlwdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KF9f
Y19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hh
cl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2Vw
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAg
ICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n
cm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190
eXBlCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19w
b3NpdGl2ZV9zaWduKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24o
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAg
IGludAogICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Zy
YWNfZGlnaXRzKCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAg
ICBuZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgp
OyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCkgeyB9
CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5
cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3Vz
YW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29u
c3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5
cGUKICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5
bWJvbDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWdu
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVh
bCBzdHJpbmdfdHlwZQogICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fbmVnYXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19k
aWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmly
dHVhbCBwYXR0ZXJuCiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9wb3NfZm9ybWF0OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1h
dCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICB2b2lkCiAg
ICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2Nh
bGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBf
SW50bD46OmludGw7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAg
IHZvaWQKICAgIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46Ol9NX2luaXRpYWxpemVfbW9uZXlw
dW5jdChfX2NfbG9jYWxlICkKICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAg
IG1vbmV5cHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9f
Y2xvYyk7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAg
Y2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRs
PgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7CiAgICBwdWJs
aWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwg
PSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNo
YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9J
bnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2Nh
bGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01f
Y19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxl
KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFy
VCwgX0ludGw+OjppbnRsOwoKCiAgc3RydWN0IG1lc3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVm
IGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz
IG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAg
ICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2Nh
bGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9
IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgY2F0YWxvZwogICAgICBvcGVu
KGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25z
dAogICAgICB7IHJldHVybiBkb19vcGVuKF9fcywgX19sb2MpOyB9CgogICAgICBzdHJpbmdfdHlw
ZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0
cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2MsX19zZXQsX19t
c2dpZCxfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAog
ICAgICB7IHJldHVybiBkb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5tZXNzYWdlcygpIHsgfQoKCgogICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAg
ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAog
ICAgICB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2dl
dChjYXRhbG9nLCBpbnQsIGludCAsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0KCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBkb19j
bG9zZShjYXRhbG9nKSBjb25zdCB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxf
Q2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9
IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXNfYnluYW1l
KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBtZXNzYWdlc19ieW5hbWU8Y2hhcj46Om1l
c3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CiMgMTUzMiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCBfX2MsIGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+
KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQgX19jLCBjb25zdCBs
b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
YykuaXMoY3R5cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxl
JiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
KGN0eXBlX2Jhc2U6OmNudHJsLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
ZV9iYXNlOjp1cHBlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbCBpc2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7
IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjps
b3dlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXNhbHBoYShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1
cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxwaGEs
IF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg
IGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2Mp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3B1
bmN0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19jKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQo
X0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxj
dHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnhkaWdpdCwgX19jKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbG51bShfQ2hh
clQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBl
PF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxudW0sIF9fYyk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJUIF9f
YywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hh
clQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmdyYXBoLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJUIF9fYywg
Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpLnRvdXBwZXIoX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b2xvd2Vy
KF9fYyk7IH0KfQojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9z
LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAg
dHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVm
X2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBf
X251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf
VHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwg
X19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByaXZhdGU6CiAgICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBjaGFyX3R5cGUgX01f
ZmlsbDsKICAgICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CgogICAgcHJvdGVjdGVkOgogICAgICBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwogICAgICBpb3N0
YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2lv
c19mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAg
Y29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIGlubGlu
ZSBjb25zdCBfX2N0eXBlX3R5cGUqCiAgICAgIF9NX2dldF9mY3R5cGVfaW9zKHZvaWQpCiAgICAg
IHsgcmV0dXJuIF9NX2lvc19mY3R5cGU7IH0KCiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4o
dGhpcyk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsgfQoKICAgICAgaW5saW5lIGlvc3RhdGUKICAgICAgcmRz
dGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsgfQoKICAgICAg
aW5saW5lIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCkKICAgICAg
ewogICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRl
ID0gX19zdGF0ZTsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBf
X3N0YXRlIHwgYmFkYml0OwogICAgICAgIGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhpcy0+ZXhj
ZXB0aW9ucygpKSkKICAgICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6Y2xl
YXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICB9CgogICAgICBpbmxpbmUgdm9p
ZAogICAgICBzZXRzdGF0ZShpb3N0YXRlIF9fc3RhdGUpCiAgICAgIHsgdGhpcy0+Y2xlYXIodGhp
cy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGdvb2Qo
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKICAgICAgaW5s
aW5lIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUo
KSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgaW5saW5lIGJvb2wKICAgICAgZmFpbCgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJpdCkpICE9
IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu
ICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBpb3N0YXRl
CiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRpb247IH0K
CiAgICAgIGlubGluZSB2b2lkCiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkKICAg
ICAgewogICAgICAgIF9NX2V4Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMtPmNsZWFy
KF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNpdAogICAgICBiYXNp
Y19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jhc2Uo
KQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2lj
X2lvcygpIHsgfQoKCiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4q
CiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoKICAgICAgaW5saW5l
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9IF9fdGll
c3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgaW5saW5lIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9NX3N0cmVhbWJ1ZjsgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz4qCiAgICAgIHJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsK
CiAgICAgIGJhc2ljX2lvcyYKICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKTsK
CiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX2ZpbGw7IH0KCiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5cGUg
X19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IF9NX2ZpbGw7CiAgICAgICAg
X01fZmlsbCA9IF9fY2g7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKICAgICAgbG9j
YWxlCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgY2hhcgogICAgICBu
YXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICBjaGFyX3R5
cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCiAgICAgIGJh
c2ljX2lvcygpIDogaW9zX2Jhc2UoKQogICAgICB7IH0KCiAgICAgIHZvaWQKICAgICAgaW5pdChi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBib29sCiAgICAg
IF9NX2NoZWNrX2ZhY2V0KGNvbnN0IGxvY2FsZTo6ZmFjZXQqIF9fZikKICAgICAgewogICAgICAg
IGJvb2wgX19yZXQgPSBmYWxzZTsKICAgICAgICBpZiAoX19mKQogICAgICAgICAgX19yZXQgPSB0
cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgICBy
ZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFjZXRzKGNv
bnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz4qCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6cmRidWYoYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CiAgICAgIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3N0cmVhbWJ1ZjsKICAgICAgX01fc3Ry
ZWFtYnVmID0gX19zYjsKICAgICAgdGhpcy0+Y2xlYXIoKTsKICAgICAgcmV0dXJuIF9fb2xkOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpCiAgICB7CgoKCgogICAgICBfV29yZHMq
IF9fd29yZHMgPSAoX19yaHMuX01fd29yZF9saW1pdCA8PSBfU19sb2NhbF93b3JkcykgPwogICAg
ICAgIF9NX3dvcmRfYXJyYXkgOiBuZXcgX1dvcmRzW19fcmhzLl9NX3dvcmRfbGltaXRdOwojIDYz
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBf
Q2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhzLl9NX2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2Ip
CiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNr
cyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAg
ICAgIGRlbGV0ZSBbXSBfTV93b3JkczsKICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAg
ICAgIF9NX2NhbGxiYWNrcyA9IF9fY2I7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9f
cmhzLl9NX3dvcmRfbGltaXQ7ICsrX19pKQogICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhzLl9N
X3dvcmRzW19faV07CiAgICAgIGlmIChfTV93b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAgICAg
IGRlbGV0ZSBbXSBfTV93b3JkczsKICAgICAgX01fd29yZHMgPSBfX3dvcmRzOwogICAgICBfTV93
b3JkX2xpbWl0ID0gX19yaHMuX01fd29yZF9saW1pdDsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhz
LmZsYWdzKCkpOwogICAgICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+
cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgp
KTsKICAgICAgdGhpcy0+ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9u
cyhfX3Jocy5leGNlcHRpb25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9l
dmVudCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1Ry
YWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgeyBy
ZXR1cm4gX01faW9zX2ZjdHlwZS0+bmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNf
aW9zPF9DaGFyVCwgX1RyYWl0cz46OndpZGVuKGNoYXIgX19jKSBjb25zdAogICAgeyByZXR1cm4g
X01faW9zX2ZjdHlwZS0+d2lkZW4oX19jKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxlCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJh
aXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgbG9jYWxlIF9fb2xk
KHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jhc2U6OmltYnVlKF9fbG9jKTsKICAgICAgX01f
Y2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkKICAgICAg
ICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xvYyk7CiAgICAgIHJldHVybiBfX29sZDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9p
ZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CgogICAgICBpb3NfYmFzZTo6X01faW5pdCgpOwog
ICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7CiAgICAgIF9NX3RpZSA9IDA7CiAg
ICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcpOwogICAgICBfTV9leGNlcHRpb24gPSBnb29k
Yml0OwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICBfTV9zdHJlYW1idWZfc3RhdGUg
PSBfX3NiID8gZ29vZGJpdCA6IGJhZGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1Ry
YWl0cz46Ol9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBp
ZiAoaGFzX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2lvc19mY3R5cGUg
PSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpOwoKICAgICAgaWYgKGhhc19mYWNldDxf
X251bXB1dF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bXB1dCA9ICZ1c2VfZmFjZXQ8X19u
dW1wdXRfdHlwZT4oX19sb2MpOwogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9f
bG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251bWdldF90eXBlPihfX2xv
Yyk7CiAgICB9Cn0KIyAyMTQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19p
b3MuaCIgMiAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgi
IDIgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2lj
X2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBl
IGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwog
ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVm
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVm
IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsK
ICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0
X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAg
ZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAg
ICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJl
YW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7
CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBl
JiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNl
JikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsK
CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19u
KTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAg
ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewog
ICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFz
ZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQg
JiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAg
IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9
CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBf
X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGlu
dCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5m
bGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFz
ZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5v
cGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAg
ZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4o
X19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVu
c2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8
KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog
ICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVs
bHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGly
KTsKCiAgICBwcml2YXRlOgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj0o
Y29uc3QgX19vc3RyZWFtX3R5cGUmKTsKCiAgICAgIGJhc2ljX29zdHJlYW0oY29uc3QgX19vc3Ry
ZWFtX3R5cGUmKTsKCiAgICB9OwoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vu
dHJ5CiAgICB7CgogICAgICBib29sIF9NX29rOwogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxf
VHJhaXRzPiYgX01fb3M7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBzZW50cnko
YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpOwoKICAgICAgfnNlbnRyeSgpCiAg
ICAgIHsKCiAgICAgICAgaWYgKF9NX29zLmZsYWdzKCkgJiBpb3NfYmFzZTo6dW5pdGJ1ZiAmJiAh
dW5jYXVnaHRfZXhjZXB0aW9uKCkpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3Mu
cmRidWYoKSAmJiBfTV9vcy5yZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgICAg
X01fb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICB9CiAgICAgIH0KCiAg
ICAgIG9wZXJhdG9yIGJvb2woKQogICAgICB7IHJldHVybiBfTV9vazsgfQogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjaGFy
IF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBfX291dC53aWRlbihfX2MpKTsgfQoKCiAgdGVt
cGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBf
X2MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9f
b3V0LCBzaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8
Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBz
dGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9D
aGFyVCogX19zKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgog
IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29u
c3QgY2hhciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9U
cmFpdHM+JiBfX291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291
dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxj
bGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiAmCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVuZGwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gZmx1c2goX19v
cy5wdXQoX19vcy53aWRlbignXG4nKSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGVuZHMoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4g
X19vcy5wdXQoX0NoYXJUKCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGZsdXNo
KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3Mu
Zmx1c2goKTsgfQoKfQoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0
cmVhbS50Y2MiIDEgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVh
bS50Y2MiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5o
IiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIg
MwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwoj
IDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAxIDMKIyAz
NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8uaCIgMSAzCiMgMzgg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvZXJybm8uaCIg
MiAzCgoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMSAz
CiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGlu
dXgvZXJybm8uaCIgMSAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIiAxIDMKIyA1
ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRz
L2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCmV4dGVybiBp
bnQgZXJybm87CgoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIg
MiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFtX2lu
dm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9CiMgNjkg
Ii91c3IvaW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgMzkgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAxIDMKIyAzOCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvbG9jYWxlLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAz
CgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVy
biAiQyIgewojIDQ1ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252CnsKCgog
IGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgogIGNoYXIg
Kmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5
X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhvdXNhbmRz
X3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICBjaGFy
ICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJhY19kaWdp
dHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hh
ciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9z
aWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKfTsKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2Fs
ZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4
dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRocm93ICgpOwojIDEwOSAiL3Vz
ci9pbmNsdWRlL2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMg
MTEwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIF9fbG9jYWxlX3Qg
X19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUs
IF9fbG9jYWxlX3QgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gX19sb2NhbGVfdCBfX2R1
cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBf
X2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMgMzkgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAyIDMKCgoKCgpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5n
IDo6bG9jYWxlY29udjsKfQojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j
YWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3N0ZGxpYi5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xv
Y2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL3N0ZF9saW1pdHMuaCIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcu
aCIgMSAzCiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9zdGRfbGltaXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2Zsb2F0LmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NmbG9hdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMiAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9zdGRfbGltaXRzLmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZCB7CgogICAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZSB7CiAgICAgICAgcm91bmRfaW5kZXRlcm1p
bmF0ZSA9IC0xLAogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgICAgICByb3VuZF90
b19uZWFyZXN0ID0gMSwKICAgICAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLAogICAgICAg
IHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAzCiAgICB9OwoKICAgIGVudW0gZmxvYXRfZGVu
b3JtX3N0eWxlIHsKICAgICAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgICAgIGRl
bm9ybV9hYnNlbnQgPSAwLAogICAgICAgIGRlbm9ybV9wcmVzZW50ID0gMQogICAgfTsKCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBudW1lcmljX2xpbWl0cyB7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIF9U
cCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBz
dGF0aWMgX1RwIG1heCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDA7CgogICAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgcm91bmRf
ZXJyb3IoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIF9U
cCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAg
ICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxf
VHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBkZW5vcm1fbWlu
KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2JvdW5kZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsKICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfaW5maW5p
dHkoKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX3F1aWV0X05hTigp
OwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfc2lnbmFsaW5nX05hTigp
OwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfZGVub3JtX21pbigpOwoK
ICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGJvb2w+IHsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBib29s
IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICAgIHN0YXRpYyBi
b29sIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw
ID0gMjsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9
IDI7CiAgICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAwOyB9CiAgICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v
cm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQogICAgICAgIHN0YXRpYyBib29sIHF1aWV0X05h
TigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQogICAg
ICAgIHN0YXRpYyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KICAgICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CgogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96
ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyPiB7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg
ICBzdGF0aWMgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0xMjgpOyB9CiAg
ICAgICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMxMCA9IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp
ZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v
cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY2hhciBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBj
aGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFy
PigwKTsgfQogICAgICAgIHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgY2hhciBk
ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDAp
OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNf
bGltaXRzPHNpZ25lZCBjaGFyPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuICgtMTI4KTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgo
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg
ICBzdGF0aWMgc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAw
OyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0
YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNp
Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVk
IGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CgogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93
YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVu
c2lnbmVkIGNoYXI+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIDI1NTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
cyA9IDg7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQog
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu
aXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm
YWxzZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBz
dGF0aWMgdW5zaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQg
Y2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVy
aWNfbGltaXRzPHNob3J0PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuICgtMzI3NjctMSk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIDMyNzY3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gMTU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGlj
IHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0
YXRpYyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9
IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0
YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxzaG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyBz
aG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBm
YWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9y
dD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiA2NTUzNTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgdW5z
aWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt
X2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxz
ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGRl
bm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv
cmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHM8aW50PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAoLTIxNDc0ODM2NDctMSk7IH0KICAgICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gMzE7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg
ICAgc3RhdGljIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAg
ICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7
IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg
ICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KDApOyB9CiAgICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQg
c2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KDApOyB9CiAgICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y
b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBz
dGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAoMjE0NzQ4
MzY0NyAqIDJVICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
bnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBz
dGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu
dDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmFsaW5n
X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1
bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl
cm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmc+IHsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAg
IHN0YXRpYyBsb25nIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdM
LTEpOyB9CiAgICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IDIxNDc0ODM2NDdMOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGxvbmcgZXBz
aWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGxvbmcg
cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg
PSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgbG9uZyBp
bmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsg
fQogICAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGluZ19O
YU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAg
ICAgICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGxvbmc+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1
OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55
bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5
bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4gewogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMg
dW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKDIxNDc0ODM2NDdM
ICogMlVMICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv
d2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxs
b25nIGxvbmc+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7CgogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMLTEpOyB9CiAgICAgICAgc3RhdGljIGxvbmcgbG9u
ZyBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gOTIyMzM3MjAzNjg1NDc3NTgwN0xMOyB9
CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjM7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l
ZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgZXBzaWxvbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGxvbmcgbG9uZyByb3Vu
ZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v
cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBsb25nIGxvbmcg
aW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMg
bG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21p
bigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9
CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g
dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1p
dHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4
MDdMTCAqIDJVTEwgKyAxKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy
dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0K
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv
c3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbmZpbml0eSgp
IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsg
fQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9
CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93
YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGZs
b2F0PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMTc1
NDk0MzVlLTM4RjsgfQogICAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzID0gMjQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDc7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
Y3QgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBz
dGF0aWMgZmxvYXQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjE5MjA5Mjkw
ZS0wN0Y7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gMS4wZjsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dCA9IC0xMjU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zNzsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7CgogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x
dWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0
aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PigwKTsgfQogICAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQogICAgICAgIHN0YXRp
YyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19i
ZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91
bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICAgIHN0YXRp
YyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1
N2UrMzA4OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE1OwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGRvdWJsZSBlcHNp
bG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEzMWUtMTY7IH0K
ICAgICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIDEuMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMDIx
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3OwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudDEwID0gMzA4OwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMg
ZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxk
b3VibGU+KDApOyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0
aWMgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8ZG91YmxlPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBm
YWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+IHsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBt
aW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkz
Mkw7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDE5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9
IDI7CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlMOyB9CiAgICAgICAgc3RhdGljIGxv
bmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMEw7IH0K
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTYzODE7CiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDQ5MzI7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp
bml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm
YWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g
ZmFsc2U7CgogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0
aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91
YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t
b2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsKICAgIH07Cgp9CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9s
b2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9tZW1vcnkuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9s
b2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3NidWZfaXRlci5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xv
Y2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NjdHlwZS5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xv
Y2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3R5cGVp
bmZvIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyAzNCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNl
IF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTAgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3MgdHlw
ZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJp
dmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5
cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAq
X19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAq
X19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCiAgICBjb25zdCBjaGFyKiBuYW1lKCkg
Y29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQojIDg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL3R5cGVpbmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBj
b25zdAogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9
PSBfX2FyZy5fX25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBf
X2FyZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGlj
OgoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwg
Ym9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19k
b19jYXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAg
dmlydHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9p
bmZvICpfX3RhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpf
cHRyKSBjb25zdDsKICB9OwoKICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7
CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2Nh
c3QoKSB0aHJvdygpOwogIH07CgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9u
CiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwg
fmJhZF90eXBlaWQgKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDMgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlCiAgICBsb2NhbGU6OmNvbWJpbmUo
Y29uc3QgbG9jYWxlJiBfX290aGVyKQogICAgewogICAgICBsb2NhbGUgX19jb3B5KCp0aGlzKTsK
ICAgICAgX19jb3B5Ll9NX2ltcGwtPl9NX3JlcGxhY2VfZmFjZXQoX19vdGhlci5fTV9pbXBsLCAm
X0ZhY2V0OjppZCk7CiAgICAgIHJldHVybiBfX2NvcHk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAog
ICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsKICAgICAgdHlwZWRl
ZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAgY29uc3QgX19jb2xs
YXRlX3R5cGUqIF9fZmNvbGwgPSAmdXNlX2ZhY2V0PF9fY29sbGF0ZV90eXBlPigqdGhpcyk7CiAg
ICAgIHJldHVybiAoX19mY29sbC0+Y29tcGFyZShfX3MxLmRhdGEoKSwgX19zMS5kYXRhKCkgKyBf
X3MxLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCks
IF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYgX19sb2MpCiAgICB7CiAgICAgIHR5cGVkZWYgbG9jYWxlOjpfSW1wbDo6X192ZWNfZmFjZXQg
X192ZWNfZmFjZXQ7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2luZGV4OwogICAg
ICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAg
Y29uc3QgbG9jYWxlOjpmYWNldCogX19mcCA9ICgqX19mYWNldClbX19pXTsKICAgICAgaWYgKF9f
ZnAgPT0gMCB8fCBfX2kgPj0gX19mYWNldC0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfYmFkX2Nh
c3QoKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9GYWNldCY+KCpfX2ZwKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNv
bnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkKICAgIHsKICAgICAgdHlwZWRlZiBsb2NhbGU6Ol9J
bXBsOjpfX3ZlY19mYWNldCBfX3ZlY19mYWNldDsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6
aWQuX01faW5kZXg7CiAgICAgIF9fdmVjX2ZhY2V0KiBfX2ZhY2V0ID0gX19sb2MuX01faW1wbC0+
X01fZmFjZXRzOwogICAgICByZXR1cm4gKF9faSA8IF9fZmFjZXQtPnNpemUoKSAmJiAoKl9fZmFj
ZXQpW19faV0gIT0gMCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIs
IHR5cGVuYW1lIF9DaGFyVD4KICAgIF9Jbkl0ZXIKICAgIF9fbWF0Y2hfcGFyYWxsZWwoX0luSXRl
ciBfX3MsIF9Jbkl0ZXIgX19lbmQsIGludCBfX250YXJncywKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9fdGFyZ2V0cywKICAgICAgICAgICAgICAgICAg
ICAgaW50KiBfX21hdGNoZXMsIGludCYgX19yZW1haW4sIGJvb2wmIF9fZW9mKQogICAgewogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CiAgICAgIF9fZW9m
ID0gZmFsc2U7CiAgICAgIGZvciAoaW50IF9fdGkgPSAwOyBfX3RpIDwgX19udGFyZ3M7ICsrX190
aSkKICAgICAgICBfX21hdGNoZXNbX190aV0gPSBfX3RpOwogICAgICBfX3JlbWFpbiA9IF9fbnRh
cmdzOwogICAgICBzaXplX3QgX19wb3MgPSAwOwogICAgICBkbwogICAgICAgIHsKICAgICAgICAg
IGludCBfX3RpID0gMDsKICAgICAgICAgIHdoaWxlIChfX3RpIDwgX19yZW1haW4gJiYgX19wb3Mg
PT0gX190YXJnZXRzW19fbWF0Y2hlc1tfX3RpXV0uc2l6ZSgpKQogICAgICAgICAgICArK19fdGk7
CiAgICAgICAgICBpZiAoX190aSA9PSBfX3JlbWFpbikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlmIChfX3BvcyA9PSAwKSBfX3JlbWFpbiA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIF9f
czsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fcyA9PSBfX2VuZCkKICAgICAgICAgICAg
X19lb2YgPSB0cnVlOwogICAgICAgICAgYm9vbCBfX21hdGNoZWQgPSBmYWxzZTsKICAgICAgICAg
IGZvciAoaW50IF9fdGkyID0gMDsgX190aTIgPCBfX3JlbWFpbjsgKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSYgX190YXJnZXQgPSBfX3RhcmdldHNbX19t
YXRjaGVzW19fdGkyXV07CiAgICAgICAgICAgICAgaWYgKF9fcG9zIDwgX190YXJnZXQuc2l6ZSgp
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX19lb2YgfHwgX190YXJn
ZXRbX19wb3NdICE9ICpfX3MpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgX19tYXRjaGVzW19fdGkyXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgX19tYXRjaGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAr
K19fdGkyOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19tYXRjaGVkKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAg
ICAgfQogICAgICAgICAgZm9yIChpbnQgX190aTMgPSAwOyBfX3RpMyA8IF9fcmVtYWluOykKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX3BvcyA+IF9fdGFyZ2V0c1tfX21hdGNoZXNb
X190aTNdXS5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbWF0
Y2hlc1tfX3RpM10gPSBfX21hdGNoZXNbLS1fX3JlbWFpbl07CiAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICsrX190aTM7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHdoaWxlIChfX3JlbWFpbik7CiAgICAgIHJldHVybiBfX3M7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9Gb3JtYXRfY2FjaGU8X0No
YXJUPjo6X0Zvcm1hdF9jYWNoZSgpCiAgICA6IF9NX3ZhbGlkKHRydWUpLCBfTV91c2VfZ3JvdXBp
bmcoZmFsc2UpCiAgICB7IH0KCiAgdGVtcGxhdGU8PgogICAgX0Zvcm1hdF9jYWNoZTxjaGFyPjo6
X0Zvcm1hdF9jYWNoZSgpOwoKICB0ZW1wbGF0ZTw+CiAgICBfRm9ybWF0X2NhY2hlPHdjaGFyX3Q+
OjpfRm9ybWF0X2NhY2hlKCk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQK
ICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X01fcG9wdWxhdGUoaW9zX2Jhc2UmIF9faW8pCiAg
ICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jICgpOwogICAgICBudW1wdW5jdDxf
Q2hhclQ+IGNvbnN0JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7
CiAgICAgIF9NX3RydWVuYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICBfTV9mYWxzZW5hbWUg
PSBfX25wLmZhbHNlbmFtZSgpOwogICAgICBfTV90aG91c2FuZHNfc2VwID0gX19ucC50aG91c2Fu
ZHNfc2VwKCk7CiAgICAgIF9NX2RlY2ltYWxfcG9pbnQgPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsK
ICAgICAgX01fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIF9NX3VzZV9ncm91cGlu
ZyA9IF9NX2dyb3VwaW5nLnNpemUoKSAhPSAwICYmIF9NX2dyb3VwaW5nLmRhdGEoKVswXSAhPSAw
OwogICAgICBfTV92YWxpZCA9IHRydWU7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgdm9pZAogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjoKICAgIF9TX2NhbGxiYWNr
KGlvc19iYXNlOjpldmVudCBfX2V2LCBpb3NfYmFzZSYgX19pb3MsIGludCBfX2l4KSB0aHJvdygp
CiAgICB7CiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfX2l4KTsKICAgICAgc3dpdGNo
IChfX2V2KQogICAgICAgIHsKICAgICAgICBjYXNlIGlvc19iYXNlOjplcmFzZV9ldmVudDoKICAg
ICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFyVD4qPihfX3ApOwog
ICAgICAgICAgX19wID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgaW9zX2Jhc2U6
OmNvcHlmbXRfZXZlbnQ6CgogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsgX19wID0g
bmV3IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjsgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAg
ICAgICB7IH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgaW9zX2Jhc2U6OmltYnVlX2V2
ZW50OgogICAgICAgICAgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKS0+
X01fdmFsaWQgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KgogICAgX0Zv
cm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19nZXQoaW9zX2Jhc2UmIF9faW9zKQogICAgewogICAgICBp
ZiAoIV9TX3B3b3JkX2l4KQogICAgICAgIF9TX3B3b3JkX2l4ID0gaW9zX2Jhc2U6OnhhbGxvYygp
OwogICAgICB2b2lkKiYgX19wID0gX19pb3MucHdvcmQoX1NfcHdvcmRfaXgpOwoKCiAgICAgIGlm
IChfX3AgPT0gMCkKICAgICAgICB7CiAgICAgICAgICBhdXRvX3B0cjxfRm9ybWF0X2NhY2hlPF9D
aGFyVD4gPiBfX2FwKG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4pOwogICAgICAgICAgX19pb3Mu
cmVnaXN0ZXJfY2FsbGJhY2soJl9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfY2FsbGJhY2ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19wd29yZF9peCk7CiAgICAgICAgICBf
X3AgPSBfX2FwLnJlbGVhc2UoKTsKICAgICAgICB9CiAgICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJU
PiogX19uY3AgPSBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFyVD4qPihfX3ApOwogICAg
ICBpZiAoIV9fbmNwLT5fTV92YWxpZCkKICAgICAgICBfX25jcC0+X01fcG9wdWxhdGUoX19pb3Mp
OwoKICAgICAgcmV0dXJuIF9fbmNwOwogICAgfQojIDI1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYgLAogICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCBjaGFyKiAsCiAgICAgICAgICAgICAgIGludCYg
LCBib29sICkgY29uc3QKICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51
bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3Qo
aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2JlZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwKICAgICAg
ICAgICAgICAgYm9vbCBfX2ZwKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikg
Y29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxw
aGEpKQogICAgICAgIHsKCgoKCgoKICAgICAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsK
ICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwg
X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgICAgIGNoYXIqIF9f
c2FuaXR5OwogICAgICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgICAgICBs
b25nIF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgJiYgX19sIDw9IDEK
ICAgICAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcg
JiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgICAgICBfX3YgPSBfX2w7CiAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
ICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBfRm9ybWF0X2Nh
Y2hlPGNoYXJfdHlwZT4gX19mY2FjaGVfdHlwZTsKICAgICAgICAgIF9fZmNhY2hlX3R5cGUqIF9f
Zm10ID0gX19mY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW8pOwogICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0
IGNoYXJfdHlwZSogX19mYWxzZSA9IF9fZm10LT5fTV9mYWxzZW5hbWUuY19zdHIoKTsKICAgICAg
ICAgIGNvbnN0IHNpemVfdCBfX3RydWVsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX190cnVl
KSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6
Omxlbmd0aChfX2ZhbHNlKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19wb3MgPSAwOyBf
X2JlZyAhPSBfX2VuZDsgKytfX3BvcykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJf
dHlwZSBfX2MgPSAqX19iZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX2MgPT0g
X19mYWxzZVtfX3Bvc107CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1
ZVtfX3Bvc107CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IGVsc2UgaWYgKF9fdGVzdGYgJiYgX19wb3MgPT0gX19mYWxzZWxlbikKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX3BvcyA9
PSBfX3RydWVsZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjplb2ZiaXQ7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg
IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2Vyciwgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNb
MzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBf
X3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgX19s
ID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAm
IGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpf
X3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAg
JiYgX19sID49ICgtMzI3NjctMSkgJiYgX19sIDw9IDMyNzY3KQogICAgICAgIF9fdiA9IHN0YXRp
Y19jYXN0PHNob3J0PihfX2wpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgaW50
JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsKICAg
ICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAo
Kl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJj
LCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi
aXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcg
JiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX2wgPj0gKC0yMTQ3
NDgzNjQ3IC0xKSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICBfX3YgPSBzdGF0aWNfY2Fz
dDxpbnQ+KF9fbCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192
KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50
IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0
cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19z
YW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAg
ICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpf
X2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fbDsKICAgICAgZWxzZQog
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5
cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAg
ICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4
dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsK
CgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7
CiAgICAgIGxvbmcgbG9uZyBfX2xsID0gc3RydG9sbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNl
KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9f
c2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID09IDApCiAgICAgICAgX192ID0gX19sbDsKICAgICAgZWxzZQogICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFy
IF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAg
IGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAg
dW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsK
ICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2Fu
aXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24g
KCkpID09IDAKICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUpCiAgICAgICAgX192ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0g
aW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJj
WzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciog
X19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25l
ZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBp
ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0g
X194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0g
MAogICAgICAgICAgJiYgX191bCA8PSAoMjE0NzQ4MzY0NyAqIDJVICsgMSkpCiAgICAgICAgX192
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAg
ICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywg
aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hh
ciBfX3h0cmNbMzJdID0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0
KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAg
ICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAg
ICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2Up
OwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19z
YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlv
biAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX3VsOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu
dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewoKCgogICAgICBj
aGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAg
ICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdWxsID0gc3RydG91bGwoX194dHJjLCAmX19zYW5pdHks
IF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg
ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v
X2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdWxsOwogICAgICBlbHNlCiAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIg
X194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9f
YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBj
aGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CgogICAgICBm
bG9hdCBfX2YgPSBzdHJ0b2YoX194dHJjLCAmX19zYW5pdHkpOwoKCgogICAgICBpZiAoIShfX2Vy
ciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm
ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAg
ICBfX3YgPSBfX2Y7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9f
dikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGlu
dCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194
dHJjLCBfX2Jhc2UsIHRydWUpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgZG91YmxlIF9fZCA9IHN0cnRvZChfX3h0cmMsICZf
X3Nhbml0eSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg
ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v
X2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fZDsKICAgICAgZWxzZQogICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl
cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewoKCgogICAgICBj
aGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAg
ICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAg
ICBsb25nIGRvdWJsZSBfX2xkID0gc3RydG9sZChfX3h0cmMsICZfX3Nhbml0eSk7CiAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBf
X3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAw
KQogICAgICAgIF9fdiA9IF9fbGQ7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KIyA2NzggIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
dm9pZComIF9fdikgY29uc3QKICAgIHsKCiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdz
IGZtdGZsYWdzOwogICAgICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsKICAgICAgZm10
ZmxhZ3MgX19mbXRtYXNrID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlvc19iYXNlOjpiYXNlZmll
bGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBp
b3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwg
KGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKCgoKCiAgICAgIGNoYXIgX194
dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hh
ciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB2b2lk
KiBfX3ZwID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RydG91bChfX3h0cmMsICZfX3Nhbml0
eSwgX19iYXNlKSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAg
ICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vy
cm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdnA7CiAgICAgIGVsc2UKICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10
KTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFkKF9PdXRJ
dGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZyk7CgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+CiAgICBfUmFJdGVyCiAgICBfX3BhZChfUmFJ
dGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywKICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmaWxsX24oX19zLCBfX2ZpbGwpOwogICAg
ICByZXR1cm4gX19zICsgX19wYWRkaW5nOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlciwgdHlwZW5hbWUgX1RhZz4KICAgIF9PdXRJdGVyCiAgICBf
X3BhZChfT3V0SXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcsIF9UYWcpCiAg
ICB7CiAgICAgIHdoaWxlICgtLV9fcGFkZGluZyA+PSAwKSB7ICpfX3MgPSBfX2ZpbGw7ICsrX19z
OyB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgaW5saW5lIF9PdXRJdGVyCiAgICBfX3BhZChfT3V0SXRl
ciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpCiAgICB7CiAgICAgIHJldHVybiBf
X3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nLAogICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9PdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7CiAgICB9Cgog
IHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0
ZXIKICAgIF9fcGFkX251bWVyaWMoX091dEl0ZXIgX19zLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgLAog
ICAgICAgICAgICAgICAgICBfQ2hhclQgLCBpbnQgLAogICAgICAgICAgICAgICAgICBfQ2hhclQg
Y29uc3QqICwgX0NoYXJUIGNvbnN0KiAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCog
KQogIHsKCiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No
YXJUPgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+CiAgICBfX3BhZF9udW1lcmljKG9z
dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdz
LAogICAgICAgICAgICAgICAgICBfQ2hhclQgX19maWxsLCBpbnQgX193aWR0aCwgX0NoYXJUIGNv
bnN0KiBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQ2hhclQgY29uc3QqIF9fbWlkZGxlLCBf
Q2hhclQgY29uc3QqIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVD4gX19vdXRfaXRlcjsKICAgICAgaW50IF9fcGFkZGluZyA9IF9fd2lkdGggLSAo
X19sYXN0IC0gX19maXJzdCk7CiAgICAgIGlmIChfX3BhZGRpbmcgPCAwKQogICAgICAgIF9fcGFk
ZGluZyA9IDA7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FmbGFncyA9IF9fZmxhZ3MgJiBp
b3NfYmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgIGJvb2wgX190ZXN0ZmllbGQgPSBfX3BhZGRpbmcg
PT0gMCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6bGVmdAogICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgX19hZmxhZ3MgPT0gaW9zX2Jhc2U6OmludGVybmFsOwoKCiAgICAgIGlmIChfX2ZpcnN0
ICE9IF9fbWlkZGxlKQogICAgICAgIHsKICAgICAgICAgIGlmICghX190ZXN0ZmllbGQpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAg
ICAgICAgICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICBjb3B5KF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX3MpOwogICAgICAgIH0KICAgICAgX19vdXRfaXRlciBfX3MyID0g
X19zOwoKICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2FmbGFncyAhPSBpb3NfYmFzZTo6bGVmdCkK
ICAgICAgICB7CiAgICAgICAgICBfX3BhZChfX3MyLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAg
ICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgIH0KICAgICAgX19vdXRfaXRlciBfX3MzID0gY29w
eShfX21pZGRsZSwgX19sYXN0LCBfX3MyKTsKICAgICAgaWYgKF9fcGFkZGluZykKICAgICAgICBf
X3BhZChfX3MzLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAgIHJldHVybiBfX3MzOwogICAgfQoK
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJ
dGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg
X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAg
ICB7CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2Nh
Y2hlPF9DaGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxh
Z3MgPSBfX2lvLmZsYWdzKCk7CgogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFs
cGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsK
ICAgICAgICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxsLCBmYWxz
ZSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX2ZpcnN0OwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7CiAg
ICAgICAgICBpZiAoX192KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9f
Zm10LT5fTV90cnVlbmFtZS5kYXRhKCk7CiAgICAgICAgICAgICAgX19sYXN0ID0gX19maXJzdCAr
IF9fZm10LT5fTV90cnVlbmFtZS5zaXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZmlyc3QgPSBfX2ZtdC0+X01fZmFsc2VuYW1l
LmRhdGEoKTsKICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQtPl9NX2ZhbHNl
bmFtZS5zaXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0
LCBfX3MpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBfX2dyb3VwX2RpZ2l0cyhfQ2hhclQq
IF9fcywgX0NoYXJUIF9fZ3JzZXAsIGNoYXIgY29uc3QqIF9fZ3JvdXBpbmcsCiAgICAgICAgICAg
ICAgICAgICAgY2hhciBjb25zdCogX19ncmVuZCwgX0NoYXJUIGNvbnN0KiBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQogICAgewogICAgICBpZiAoX19s
YXN0IC0gX19maXJzdCA+ICpfX2dyb3VwaW5nKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9f
Z3JvdXBfZGlnaXRzKF9fcywgX19ncnNlcCwKICAgICAgICAgICAgICAoX19ncm91cGluZyArIDEg
PT0gX19ncmVuZCA/IF9fZ3JvdXBpbmcgOiBfX2dyb3VwaW5nICsgMSksCiAgICAgICAgICAgICAg
X19ncmVuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3JvdXBpbmcpOwogICAgICAgICAgX19maXJz
dCA9IF9fbGFzdCAtICpfX2dyb3VwaW5nOwogICAgICAgICAgKl9fcysrID0gX19ncnNlcDsKICAg
ICAgICB9CiAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsK
ICAgICAgICB9CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBf
X3M7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
LCB0eXBlbmFtZSBfVmFsdWVUPgogICAgX091dEl0ZXIKICAgIF9fb3V0cHV0X2ludGVnZXIoX091
dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgYm9vbCBfX25lZywKICAg
ICAgICAgICAgICBfVmFsdWVUIF9fdikKICAgIHsKCiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9
IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0OwogICAgICBfQ2hhclQg
X19kaWdpdHNbX01fcm9vbV07CiAgICAgIF9DaGFyVCogX19mcm9udCA9IF9fZGlnaXRzICsgX01f
cm9vbTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAg
ICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hlPF9D
aGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgY2hhciBjb25zdCogX190YWJsZSA9IF9fZm10LT5f
U19saXRlcmFscyArIF9fZm10LT5fU19kaWdpdHM7CgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
X19iYXNlZmllbGQgPSAoX19mbGFncyAmIF9faW8uYmFzZWZpZWxkKTsKICAgICAgX0NoYXJUKiBf
X3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpo
ZXgpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6dXBwZXJjYXNl
KQogICAgICAgICAgICBfX3RhYmxlICs9IDE2OwogICAgICAgICAgZG8KICAgICAgICAgICAgKi0t
X19mcm9udCA9IF9fdGFibGVbX192ICYgMTVdOwogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDQp
ICE9IDApOwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgICAgICBpZiAoX19m
bGFncyAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICot
LV9fZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQtPl9TX3ggKwogICAgICAgICAgICAg
ICAgICAgICAgICgoX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2UpID8gMSA6IDApXTsKICAg
ICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICB7
CiAgICAgICAgICBkbwogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiA3XTsK
ICAgICAgICAgIHdoaWxlICgoX192ID4+PSAzKSAhPSAwKTsKICAgICAgICAgIGlmIChfX2ZsYWdz
ICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4o
Kl9fZnJvbnQpICE9IF9fdGFibGVbMF0pCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxl
WzBdOwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgICAgfQogICAgICBlbHNl
CiAgICAgICAgewoKICAgICAgICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxl
W19fdiAlIDEwXTsKICAgICAgICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsKICAgICAgICAg
IF9fc2lnbl9lbmQgPSBfX2Zyb250OwoKICAgICAgICAgIGlmIChfX25lZyB8fCAoX19mbGFncyAm
IGlvc19iYXNlOjpzaG93cG9zKSkKICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fZm10LT5fU19s
aXRlcmFsc1tfX2ZtdC0+X1NfcGx1cyAtIF9fbmVnXTsKICAgICAgICB9CgoKICAgICAgaWYgKCFf
X2ZtdC0+X01fdXNlX2dyb3VwaW5nICYmICFfX2lvLndpZHRoKCkpCiAgICAgICAgcmV0dXJuIGNv
cHkoX19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29tLCBfX3MpOwoKICAgICAgaWYgKCFfX2ZtdC0+
X01fdXNlX2dyb3VwaW5nKQogICAgICAgIHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFn
cywgX19maWxsLCBfX2lvLndpZHRoKDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZnJvbnQsIF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CgogICAgICBfQ2hhclQqIF9f
cCA9IF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19mcm9udCA8IF9fc2lnbl9lbmQpCiAgICAgICAg
Kl9fcCsrID0gKl9fZnJvbnQrKzsKICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10LT5fTV9n
cm91cGluZy5kYXRhKCk7CiAgICAgIF9fZnJvbnQgPSBfX2dyb3VwX2RpZ2l0cyhfX3AsIF9fZm10
LT5fTV90aG91c2FuZHNfc2VwLCBfX2dyLAogICAgICAgIF9fZ3IgKyBfX2ZtdC0+X01fZ3JvdXBp
bmcuc2l6ZSgpLCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jvb20pOwogICAgICByZXR1cm4g
X19wYWRfbnVtZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0aCgwKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19kaWdpdHMsIF9fcCwgX19mcm9udCk7CiAgICB9CgogIHRl
bXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIK
ICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms
IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsK
ICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192OwogICAgICBib29sIF9fbmVnID0gZmFsc2U7
CiAgICAgIGlmIChfX3YgPCAwKQogICAgICAgIHsKICAgICAgICAgIF9fbmVnID0gdHJ1ZTsKICAg
ICAgICAgIF9fdXYgPSAtX191djsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dHB1dF9pbnRl
Z2VyKF9fcywgX19pbywgX19maWxsLCBfX25lZywgX191dik7CiAgICB9CgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9w
dXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl
JiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBj
b25zdAogICAgeyByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFs
c2UsIF9fdik7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ
dGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f
cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcg
bG9uZyBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3V2ID0gX192
OwogICAgICBib29sIF9fbmVnID0gZmFsc2U7CiAgICAgIGlmIChfX3YgPCAwKQogICAgICAgIHsK
ICAgICAgICAgIF9fbmVnID0gdHJ1ZTsKICAgICAgICAgIF9fdXYgPSAtX191djsKICAgICAgICB9
CiAgICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19iLCBfX2ZpbGwsIF9fbmVnLCBf
X3V2KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19w
dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9fb3V0cHV0
X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIGZhbHNlLCBfX3YpOyB9CgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg
IF9PdXRJdGVyCiAgICBfX291dHB1dF9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lv
LCBfQ2hhclQgX19maWxsLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fc3B0ciwg
c2l6ZV90IF9fc2xlbikKICAgIHsKCiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBvc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVCwgX1RyYWl0cz4KICAgIF9fb3V0cHV0X2Zsb2F0KG9zdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJULCBfVHJhaXRzPiBfX3MsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAg
ICAgX0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3QgX19zbGVuKQogICAg
ewogICAgICBzaXplX3QgX19wYWRkaW5nID0gX19pby53aWR0aCgpID4gc3RyZWFtc2l6ZShfX3Ns
ZW4pID8KICAgICAgICAgICAgICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDogMDsK
ICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBj
b25zdCYgX19jdCA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19hZGpmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1
c3RmaWVsZDsKICAgICAgY29uc3QgY2hhciogY29uc3QgX19lcHRyID0gX19zcHRyICsgX19zbGVu
OwoKICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jhc2U6OmludGVybmFsKQogICAgICAgewoK
ICAgICAgICAgaWYgKF9fc3B0ciA8IF9fZXB0ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0
ciA9PSAnLScpKQogICAgICAgICAgIHsKICAgICAgICAgICAgIF9fcyA9IF9fY3Qud2lkZW4oKl9f
c3B0cik7CiAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICsrX19zcHRyOwogICAgICAg
ICAgIH0KICAgICAgICAgX19zID0gX19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAg
ICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYWRqZmllbGQgIT0g
aW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewogICAgICAgICAgX19zID0gX19wYWQoX19zLCBfX2Zp
bGwsIF9fcGFkZGluZyk7CiAgICAgICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgIH0KCiAgICAg
IGNoYXIgX19kZWNpbWFsX3BvaW50ID0gKihsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQpOwog
ICAgICBjb25zdCBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxf
Q2hhclQ+OjpfU19nZXQoX19pbyk7CiAgICAgIGZvciAoOyBfX3NwdHIgIT0gX19lcHRyOyArK19f
cywgKytfX3NwdHIpCiAgICAgICB7CgogICAgICAgICBpZiAoKl9fc3B0ciA9PSBfX2RlY2ltYWxf
cG9pbnQpCiAgICAgICAgICAgX19zID0gX19mbXQtPl9NX2RlY2ltYWxfcG9pbnQ7CgogICAgICAg
ICBlbHNlCiAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19zcHRyKTsKICAgICAgIH0KCiAg
ICAgIGlmIChfX3BhZGRpbmcpCiAgICAgICAgX19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7
CiAgICAgIF9faW8ud2lkdGgoMCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIGJvb2wKICBf
X2J1aWxkX2Zsb2F0X2Zvcm1hdChpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9f
bW9kaWZpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy
CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAg
IHsKICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX21heF9wcmVjID0gbnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lz
aW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhfcHJlYykKICAgICAgICBfX3ByZWMgPSBf
X21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOwogICAgICBzaXpl
X3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZdOwogICAgICBpZiAoX19idWlsZF9mbG9h
dF9mb3JtYXQoX19pbywgX19mYnVmLCAwLCBfX3ByZWMpKQogICAgICAgIF9fc2xlbiA9IHNwcmlu
dGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fc2xl
biA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7CgogICAgICByZXR1cm4gX19vdXRwdXRf
ZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1ZiwgX19zbGVuKTsKICAgIH0KCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg
bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgbG9uZyBkb3VibGUgX192
KSBjb25zdAogICAgewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmlj
X2xpbWl0czxsb25nIGRvdWJsZT46OmRpZ2l0czEwICsgMzsKICAgICAgc3RyZWFtc2l6ZSBfX3By
ZWMgPSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgaWYgKF9fcHJlYyA+IF9fbWF4X3ByZWMpCiAg
ICAgICAgX19wcmVjID0gX19tYXhfcHJlYzsKCiAgICAgIGNoYXIgX19zYnVmW19fbWF4X3ByZWMg
KiAyXTsKICAgICAgc2l6ZV90IF9fc2xlbjsKCiAgICAgIGNoYXIgX19mYnVmWzE2XTsKCiAgICAg
IGlmIChfX2J1aWxkX2Zsb2F0X2Zvcm1hdChfX2lvLCBfX2ZidWYsICdMJywgX19wcmVjKSkKICAg
ICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3ByZWMsIF9fdik7CiAgICAg
IGVsc2UKICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOwoKICAg
ICAgcmV0dXJuIF9fb3V0cHV0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBfX3NidWYsIF9fc2xl
bik7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg
ICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6
Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwog
ICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6
OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVy
Y2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2Zt
dG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICBpZiAo
dHJ1ZSkgewogICAgICAgIF9PdXRJdGVyIF9fczIgPSBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19p
bywgX19maWxsLCBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX192KSk7CiAgICAgICAgX19pby5mbGFncyhfX2Zt
dCk7CiAgICAgICAgcmV0dXJuIF9fczI7CiAgICAgIH0KICAgICAgaWYgKGZhbHNlKSB7CiAgICAg
ICAgX19pby5mbGFncyhfX2ZtdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgIH0KICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1
bW15ID0gaW50PgogICAgc3RydWN0IF9XZWVrZGF5bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9EdW1teT4KICAgIHN0cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4KICAgIHsgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IF9TX25hbWVzWzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0R1bW15PgogICAgY29uc3QgY2hhciogY29uc3QKICAgIF9XZWVrZGF5bmFtZXM8Y2hhciwg
X0R1bW15Pjo6X1NfbmFtZXNbMTRdID0KICAgIHsKICAgICAgIlN1biIsICJTdW5kYXkiLAogICAg
ICAiTW9uIiwgIk1vbmRheSIsICJUdWUiLCAiVHVlc2RheSIsICJXZWQiLCAiV2VkbmVzZGF5IiwK
ICAgICAgIlRodSIsICJUaHVyc2RheSIsICJGcmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRh
eSIKICAgIH07CiMgMTEzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m
YWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfRHVtbXkg
PSBpbnQ+CiAgICBzdHJ1Y3QgX01vbnRobmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1t
eT4KICAgIHN0cnVjdCBfTW9udGhuYW1lczxjaGFyLF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IF9TX25hbWVzWzI0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15
PgogICAgY29uc3QgY2hhciogY29uc3QKICAgIF9Nb250aG5hbWVzPGNoYXIsX0R1bW15Pjo6X1Nf
bmFtZXNbMjRdID0KICAgIHsKICAgICAgIkphbiIsICJKYW51YXJ5IiwgIkZlYiIsICJGZWJydWFy
eSIsICJNYXIiLCAiTWFyY2giLAogICAgICAiQXByIiwgIkFwcmlsIiwgIk1heSIsICJNYXkiLCAi
SnVuIiwgIkp1bmUiLAogICAgICAiSnVsIiwgIkp1bHkiLCAiQXVnIiwgIkF1Z3VzdCIsICJTZXAi
LCAiU2VwdGVtYmVyIiwKICAgICAgIk9jdCIsICJPY3RvYmVyIiwgIk5vdiIsICJOb3ZlbWJlciIs
ICJEZWMiLCAiRGVjZW1iZXIiCiAgICB9OwojIDExNjggIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLAog
ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdG0qIF9fdCkgY29uc3QKICAgIHsKICAgICAgaWYgKCFfTV9kYXluYW1lcykKICAgICAgICB7
CiAgICAgICAgICBfTV9kYXluYW1lcyA9IG5ldyBiYXNpY19zdHJpbmc8X0NoYXJUPlsxNF07CiAg
ICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAxNDsgKytfX2kpCiAgICAgICAgICAgIF9N
X2RheW5hbWVzW19faV0gPSBfV2Vla2RheW5hbWVzPF9DaGFyVD46Ol9TX25hbWVzW19faV07CiAg
ICAgICAgfQogICAgICBib29sIF9fYXRfZW9mID0gZmFsc2U7CiAgICAgIGludCBfX3JlbWFpbiA9
IDA7CiAgICAgIGludCBfX21hdGNoZXNbMTRdOwogICAgICBpdGVyX3R5cGUgX19vdXQgPSBfX21h
dGNoX3BhcmFsbGVsKF9fcywgX19lbmQsIDE0LCBfTV9kYXluYW1lcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXMsIF9fcmVtYWluLCBfX2F0X2VvZik7
CiAgICAgIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoMCk7CiAgICAgIGlmIChfX2F0X2VvZikg
X19lcnIgfD0gX19pby5lb2ZiaXQ7CiAgICAgIGlmIChfX3JlbWFpbiA9PSAxIHx8CiAgICAgICAg
ICBfX3JlbWFpbiA9PSAyICYmIChfX21hdGNoZXNbMF0+PjEpID09IChfX21hdGNoZXNbMV0+PjEp
KQogICAgICAgIF9fdC0+dG1fd2RheSA9IChfX21hdGNoZXNbMF0+PjEpOwogICAgICBlbHNlCiAg
ICAgICAgX19lcnIgfD0gX19pby5mYWlsYml0OwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK
ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVy
X3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNl
JiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICB7CiAg
ICAgIGlmICghX01fbW9udGhuYW1lcykKICAgICAgICB7CiAgICAgICAgICBfTV9tb250aG5hbWVz
ID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+WzI0XTsKICAgICAgICAgIGZvciAoaW50IF9faSA9
IDA7IF9faSA8IDI0OyArK19faSkKICAgICAgICAgICAgX01fbW9udGhuYW1lc1tfX2ldID0gX01v
bnRobmFtZXM8X0NoYXJUPjo6X1NfbmFtZXNbX19pXTsKICAgICAgICB9CiAgICAgIGJvb2wgX19h
dF9lb2YgPSBmYWxzZTsKICAgICAgaW50IF9fcmVtYWluID0gMDsKICAgICAgaW50IF9fbWF0Y2hl
c1syNF07CiAgICAgIGl0ZXJfdHlwZSBfX291dCA9IF9fbWF0Y2hfcGFyYWxsZWwoIF9fcywgX19l
bmQsIDI0LCBfTV9tb250aG5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX21hdGNoZXMsIF9fcmVtYWluLCBfX2F0X2VvZik7CiAgICAgIF9fZXJyID0gaW9z
X2Jhc2U6Omlvc3RhdGUoMCk7CiAgICAgIGlmIChfX2F0X2VvZikgX19lcnIgfD0gX19pby5lb2Zi
aXQ7CiAgICAgIGlmIChfX3JlbWFpbiA9PSAxIHx8CiAgICAgICAgICBfX3JlbWFpbiA9PSAyICYm
IChfX21hdGNoZXNbMF0+PjEpID09IChfX21hdGNoZXNbMV0+PjEpKQogICAgICAgIF9fdC0+dG1f
bW9uID0gKF9fbWF0Y2hlc1swXT4+MSk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBfX2lv
LmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KfQojIDQyICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFy
VCxfVHJhaXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQog
ICAgewoKICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+
Zmx1c2goKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19w
ZikoX19vc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAg
IHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19pb3Nf
dHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAg
ICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8
KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQog
ICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChi
b29sIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAo
X01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgp
KQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBfX24pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9f
YyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQg
PSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAo
X01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmIChfX2ZtdCAmIGlv
c19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX19sID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1w
dXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2IgPSBf
TV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAgICAg
ICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAg
IGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAo
dHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlz
LCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFs
c2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
Om9wZXJhdG9yPDwobG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAg
ICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3Nf
YmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt
cHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAm
IGlvc19iYXNlOjpoZXgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAg
IF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFp
bGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1w
dXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICBpZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMs
ICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBp
ZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVl
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w
dXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo
aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy
YXRvcjw8KGNvbnN0IHZvaWQqIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAg
ICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgp
LCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19z
dHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAw
OwogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX3NiaW4gJiYgX19jZXJiKQogICAgICAg
IF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAg
ICAgaWYgKCFfX3NiaW4gfHwgIV9feHRyY3QpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlw
ZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19j
KTsKICAgICAgICAgIGlmIChfX3B1dCAhPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSkK
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0
cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRi
dWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pCiAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRoaXMt
PnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBv
c190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+
ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAgX19yZXQgPSB0aGlz
LT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAg
ewogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAo
X190ZXN0b2spCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJk
YnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAo
X19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAg
ICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYgKF9fdGVz
dG9rKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1Zigp
LT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2Vy
ciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShm
YWlsYml0KTsKICAgICAgICB9CgogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgNDU3ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZF9jaGFyKGJh
c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywKICAgICAgICAgICAgICAgX0NoYXJUKiBf
X25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgICAgICBjb25zdCBzdHJlYW1z
aXplIF9fbmV3bGVuLCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuKQogICAgewogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7Cgog
ICAgICBpbnRfdHlwZSBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19v
bGRsZW4pOwogICAgICBjaGFyX3R5cGUqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+
KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX3BsZW4pKTsKICAgICAgdHJh
aXRzX3R5cGU6OmFzc2lnbihfX3BhZHMsIF9fcGxlbiwgX19pb3MuZmlsbCgpKTsKCiAgICAgIGNo
YXJfdHlwZSogX19iZWc7CiAgICAgIGNoYXJfdHlwZSogX19lbmQ7CiAgICAgIHNpemVfdCBfX21v
ZCA9IDA7CiAgICAgIHNpemVfdCBfX2JlZ2xlbjsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9f
Zm10ID0gX19pb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChf
X2ZtdCA9PSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25z
dF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVu
OwogICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2Zt
dCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCiAgICAgICAgewoKCgogICAgICAgICAgdHlwZWRlZiBf
Rm9ybWF0X2NhY2hlPF9DaGFyVD4gX19jYWNoZV90eXBlOwogICAgICAgICAgX19jYWNoZV90eXBl
IGNvbnN0KiBfX2ZtdCA9IF9fY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW9zKTsKICAgICAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX19taW51cyA9IHRyYWl0c190eXBlOjpmaW5kKF9fb2xkcywgX19vbGRs
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2ZtdC0+X1NfbWludXMpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3BsdXMgPSB0
cmFpdHNfdHlwZTo6ZmluZChfX29sZHMsIF9fb2xkbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZtdC0+X1NfcGx1cyk7CiAgICAgICAg
ICBib29sIF9fdGVzdHNpZ24gPSBfX21pbnVzIHx8IF9fcGx1czsKICAgICAgICAgIGJvb2wgX190
ZXN0aGV4ID0gX19vbGRzWzBdID09ICcwJwogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAo
X19vbGRzWzFdID09ICd4JyB8fCBfX29sZHNbMV0gPT0gJ1gnKTsKCiAgICAgICAgICBpZiAoX190
ZXN0aGV4KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdzWzBdID0gX19vbGRzWzBd
OwogICAgICAgICAgICAgIF9fbmV3c1sxXSA9IF9fb2xkc1sxXTsKICAgICAgICAgICAgICBfX21v
ZCArPSAyOwogICAgICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29s
ZHMgKyBfX21vZCk7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX29sZGxlbiAtIF9fbW9kOwog
ICAgICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl
IGlmIChfX3Rlc3RzaWduKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19tb2QgKz0gX19w
bGVuOwogICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19zaWduID0gX19taW51cyA/IF9f
bWludXMgKyAxOiBfX3BsdXMgKyAxOwogICAgICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxj
aGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19zaWduIC0gX19v
bGRzOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX3NpZ24g
KyBfX3BsZW4pOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fbmV3cyArIF9fYmVn
bGVuLCBfX3BhZHMsIF9fcGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgewoKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2Jl
Z2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBl
Kj4oX19vbGRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsK
CiAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwog
ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAg
fQoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAg
ICB0cmFpdHNfdHlwZTo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsIF9fbmV3bGVuIC0g
X19iZWdsZW4gLSBfX21vZCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9f
YykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19v
c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi
KF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAodHJ1ZSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgo
KTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f
YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgICAgICBfX3Bh
ZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAg
ICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsICZfX2MsIF9fdywgX19sZW4pOwogICAgICAgICAg
ICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291
dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUg
X19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
c3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFk
cyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdyArIDEpKTsKICAgICAg
ICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9
IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsICZfX2MsIF9fdywgX19sZW4p
OwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53
aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0
LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90
eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUg
X193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsK
ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4o
X1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRz
LCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAg
ICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwog
ICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hh
ciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBfX29zdHJlYW1fdHlwZTsKCgogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9fY3Ry
YWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo
X19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2Ns
ZW4gPSBfX2N0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgICAgICBfQ2hhclQqIF9fd3Mg
PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog
KF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPD0gX19j
bGVuOyArK19faSkKICAgICAgICAgICAgX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19faV0p
OwogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7CgogICAgICAgICAgaWYgKHRydWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8
c3RyZWFtc2l6ZT4oX19jbGVuKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0
LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hh
clQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CgogICAgICAgICAg
ICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
X19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3dzLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAg
ICAgICAgX19zdHIgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fc3RyLCBfX2xlbik7CiAg
ICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChm
YWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgog
IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29u
c3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50
cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBp
ZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19v
dXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oX19idWlsdGluX2FsbG9jYShfX3cpKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVu
ID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAg
ICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAg
ICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAg
ICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFs
c2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAg
IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog
ICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0
ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAg
ICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxv
Y2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBz
dGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9f
dyA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwg
X19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAg
ICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgfQogICAgICAgICAgc3RyZWFtc2l6
ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4pOwogICAgICAgICAgX19v
dXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMgIT0gX19sZW4pCiAgICAgICAgICAgIF9f
b3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiBf
X291dDsKICAgIH0KfQojIDI3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9v
c3RyZWFtLmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
c3RyZWFtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0
cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3Ry
ZWFtLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIg
MSAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv
c3RkX2xpbWl0cy5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFs
IHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp
dHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBv
c190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBl
IG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwog
ICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl
YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0
ZXI+IF9fbnVtZ2V0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5
cGU7CgogICAgcHJvdGVjdGVkOgoKICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7CgogICAgcHVi
bGljOgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBl
KiBfX3NiKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdChfX3NiKTsKICAgICAgICBfTV9nY291
bnQgPSBzdHJlYW1zaXplKDApOwogICAgICB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19p
c3RyZWFtKCkKICAgICAgeyBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOyB9CgoKICAgICAgY2xh
c3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoKCgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1f
dHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faW9zX3R5
cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpOwoKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4oaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX2YpOwoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I+Pih2b2lkKiYgX19wKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIGlubGlu
ZSBzdHJlYW1zaXplCiAgICAgIGdjb3VudCh2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBfTV9n
Y291bnQ7IH0KCiAgICAgIGludF90eXBlCiAgICAgIGdldCh2b2lkKTsKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2Rl
bGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gZ2V0KF9fcywgX19uLCB0aGlzLT53
aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1i
dWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVh
bV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikKICAgICAgeyByZXR1cm4g
Z2V0KF9fc2IsIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19k
ZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiBnZXRsaW5lKF9fcywgX19u
LCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBpZ25v
cmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6OmVv
ZigpKTsKCiAgICAgIGludF90eXBlCiAgICAgIHBlZWsodm9pZCk7CgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAg
c3RyZWFtc2l6ZQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p
OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYyk7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgdW5nZXQodm9pZCk7CgogICAgICBpbnQKICAgICAg
c3luYyh2b2lkKTsKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxnKHZvaWQpOwoKICAgICAgX19p
c3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKHBvc190eXBlKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBzZWVrZyhvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwoKICAgIHByaXZhdGU6
CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX2lzdHJlYW1f
dHlwZSYpOwoKICAgICAgYmFzaWNfaXN0cmVhbShjb25zdCBfX2lzdHJlYW1fdHlwZSYpOwoKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNs
YXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJs
aWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg
dHlwZWRlZiBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhw
bGljaXQKICAgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywg
Ym9vbCBfX25vc2tpcHdzID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJu
IF9NX29rOyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0
cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1
cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8
Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBf
X2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi
YXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAg
IHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRl
bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNo
YXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9f
cykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjbGFzcyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0
cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lz
dHJlYW1fdHlwZShfX3NiKSwgX19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2
aXJ0dWFsCiAgICAgIH5iYXNpY19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7
Cn0KCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAx
IDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzCiMgMzMg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9pc3RyZWFtLnRjYyIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDEgMwojIDM0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdzKQogICAgewogICAg
ICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9faW4udGllKCkpCiAg
ICAgICAgICAgIF9faW4udGllKCktPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lwd3Mg
JiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lwd3MpKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAg
ICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5
cGVfaW9zKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRi
dWYoKTsKICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg
ICAgICAgICAgIHdoaWxlIChfX2MgIT0gX19lb2YgJiYgX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6
c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKCgoKICAg
ICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0
ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAo
X19pbi5nb29kKCkpCiAgICAgICAgX01fb2sgPSB0cnVlOwogICAgICBlbHNlCiAgICAgICAgewog
ICAgICAgICAgX01fb2sgPSBmYWxzZTsKICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFt
X3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlw
ZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYp
KGlvc19iYXNlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01f
Zm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2Up
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAodHJ1ZSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z
X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1
bnNpZ25lZCBzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNl
Ojppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs
IDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy
cik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW50JiBf
X24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jh
c2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0
KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJy
LCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAg
fQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAg
ICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01f
Zm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2Up
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlm
ICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l
cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl
dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg
ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf
YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0
aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNp
Z25lZCBsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs
c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz
LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l
cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihmbG9h
dCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv
c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf
X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24pCiAgICB7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri
aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg
ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg
ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg
ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChm
YWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIG9wZXJhdG9yPj4odm9pZComIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0
cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+
Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv
cj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX194
dHJjdCA9IDA7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fc2JvdXQgJiYg
X19jZXJiKQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmlu
LCBfX3Nib3V0KTsKICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAg
ICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAg
ICAgaWYgKF9fYyAhPSBfX2VvZikKICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVv
ZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZh
bHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRf
dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBf
X2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAoX19i
dWZ2YWwgIT0gX19lb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2dj
b3VudCA9IDE7CiAgICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5
cGUoX19idWZ2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFp
bGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n
Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f
Y2VyYiAmJiBfX24gPiAxKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6
dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2Yg
PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19z
YiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1
bXBjKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsK
ICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICAg
ICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVs
aW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190
eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAg
ICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICBf
X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGRlbGltID0g
X19jID09IF9faWRlbGltOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfX3Rl
c3RkZWxpbSB8fCBfTV9nY291bnQgPT0gX19uIC0gMSkKICAgICAgICAgICAgICAgIF9fc2ItPnNw
dXRiYWNrYyhfX2MpOwogICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlw
ZShfX251bGwpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdl
dChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAg
X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19jOwogICAgICAgICAgX19z
dHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgIGlmICh0
cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0g
PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3Qg
aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19jID0g
X190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19j
ID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9m
OwogICAgICAgICAgICAgIGJvb2wgX190ZXN0cHV0ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgd2hp
bGUgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltCiAgICAgICAgICAgICAgICAgICAgJiYgKF9f
dGVzdHB1dCA9IF9fc2Iuc3B1dGModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX190aGlzX3Ni
LT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwog
ICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0gfHwgIV9fdGVzdHB1dCkKICAg
ICAgICAgICAgICAgIF9fdGhpc19zYi0+c3B1dGJhY2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5
cGUoX19jKSk7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBp
ZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX190aGlzX3NiLT5zcHV0YmFj
a2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXRsaW5lKGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAg
ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAg
ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAg
KytfTV9nY291bnQ7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5
cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rk
ZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9f
YyA9PSBfX2VvZjsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAmJiAhX190
ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAg
ICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7
CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAg
ICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIC0tX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmICgh
X190ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01fZ2Nv
dW50OwogICAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2No
YXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBpZiAo
ZmFsc2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKF9fbnVs
bCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgaWdub3JlKHN0
cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAw
OwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYiAmJiBf
X24gPiAwKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5
cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf
dHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMt
PnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAg
ICAgICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAg
ICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICAgICAgX19uID0g
bWluKF9fbiwgbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpKTsKICAgICAgICAgICAg
ICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxp
bSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAg
ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICBfX3Rl
c3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX19j
ID09IF9faWRlbGltOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICgoX01fZ2Nv
dW50ID09IF9fbiAtIDEgJiYgIV9fdGVzdGVvZikgfHwgX190ZXN0ZGVsaW0pCiAgICAgICAgICAg
ICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAgaW50X3R5
cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0
YygpOyB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24g
PiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
OmVvZigpOwogICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+
cmRidWYoKTsKICAgICAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7
CiAgICAgICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAg
ICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZikKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNf
dHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3Vu
dDsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAg
ICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg
ICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAg
ICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1z
aXplCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZHNvbWUoY2hh
cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBf
X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgaWYgKF9fbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJ1ZSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IHRo
aXMtPnJkYnVmKCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX251bSAhPSBz
dGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2VvZikpCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7CiAgICAgICAgICAgICAg
ICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0
c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhp
cy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19zYi0+c3B1dGJhY2tjKF9f
YykgPT0gX19lb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkKICAgIHsK
ICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2Yo
KTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsK
ICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19lb2YgPT0gX19zYi0+c3VuZ2V0YygpKQogICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgaW50CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2
b2lkKQogICAgewogICAgICBpbnQgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9N
X2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg
ICAgICAgaWYgKCFfX3NiIHx8IF9fcmV0ID09IF9fc2ItPnB1YnN5bmMoKSkKICAgICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZh
bHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgdGVsbGcodm9pZCkKICAgIHsKICAgICAgcG9zX3R5cGUg
X19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVm
KCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9zKQogICAgewog
ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVr
cG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBv
c190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWls
Yml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKG9mZl90eXBl
IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAgX01fZ2NvdW50ID0g
MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2Zm
X3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwoKICAg
ICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19j
KQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lz
dHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo
X19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0
cnVlKQogICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGlmIChmYWxzZSkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg
X19pbiwgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0
cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsK
ICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJl
YW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg
c3RyZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19udW0g
PT0gMCkKICAgICAgICAgICAgICAgIF9fbnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46
Om1heCgpOwoKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1
ZigpOwogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4uX01f
Z2V0X2ZjdHlwZV9pb3MoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVt
cGMoKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp
OwogICAgICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpz
cGFjZSwgX19jKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsK
CiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rl
b2YgJiYgIV9fdGVzdHNwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19z
KysgPSBfX2M7CiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAg
ICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBf
X2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5
cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlm
ICghX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
Yml0KTsKCgoKICAgICAgICAgICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAg
IF9faW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9f
aW4pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f
aXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0
cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p
c3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJfdHlwZSBfX2NoYXJfdHlwZTsKCiAgICAgIF9f
c3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgIGNvbnN0IF9fY3R5cGVf
dHlwZSogX19jdHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsKICAgICAgY29uc3QgX19p
bnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICBfX2ludF90eXBlIF9fYzsKICAg
ICAgYm9vbCBfX3Rlc3Rlb2Y7CiAgICAgIGJvb2wgX190ZXN0c3A7CgogICAgICBkbwogICAgICAg
IHsKICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgX190ZXN0ZW9mID0g
X19jID09IF9fZW9mOwogICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNl
OjpzcGFjZSwgX19jKTsKICAgICAgICB9CiAgICAgIHdoaWxlICghX190ZXN0ZW9mICYmIF9fdGVz
dHNwKTsKCiAgICAgIGlmICghX190ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICBfX3NiLT5z
cHV0YmFja2MoX19jKTsKICAgICAgZWxzZQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6
OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4g
X19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXpl
X3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAg
ICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAg
ICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlw
ZSBfX247CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+
KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUg
PSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9f
c2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6
OmVvZigpOwogICAgICAgICAgYm9vbCBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6
OnNwYWNlLCBfX2MpOwogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7Cgog
ICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz
dHNwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hh
cl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBf
X2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19l
b2Y7CiAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFj
ZSwgX19jKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAg
ICAgIF9fc2ItPnNwdXRiYWNrYyhfX2MpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2lu
LnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgX19pbi53aWR0aCgwKTsKICAg
ICAgICB9CgoKICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlIChp
b3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0
cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0
eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBf
X2V4dHJhY3RlZCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9f
c2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19pbnRfdHlwZSBf
X2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgX19zdHJl
YW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19j
ID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1Ry
YWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAg
ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgIHdoaWxlIChf
X2V4dHJhY3RlZCA8PSBfX24gJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsK
ICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi
dW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAg
ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgfQogICAgICAg
ICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
Yml0KTsKICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRlbGltKQog
ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19p
bjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBf
QWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRs
aW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fc3RyKQogICAgeyByZXR1cm4gZ2V0
bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRlbignXG4nKSk7IH0KfQojIDI5MSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIgMwojIDQyICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CiAgZXh0ZXJuIGlzdHJlYW0gY2luOwogIGV4dGVybiBvc3RyZWFtIGNvdXQ7CiAgZXh0ZXJuIG9z
dHJlYW0gY2VycjsKICBleHRlcm4gb3N0cmVhbSBjbG9nOwojIDU3ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDMKICBzdGF0aWMgaW9zX2Jhc2U6OkluaXQg
X19pb2luaXQ7Cn0KIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIgMiAz
CiMgMTEgIndhdnBsYXlvYmplY3RfaW1wbC5jYyIgMgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgi
IDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCmV4dGVybiAiQyIgewoK
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1
ZGUvYml0cy9odWdlX3ZhbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj
IDI2ICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAyIDMKIyAzNCAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMwojIDM4ICIv
dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYu
aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBlZGVmIGxvbmcg
ZG91YmxlIGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90OwojIDQxICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KTsgZXh0ZXJuIGRv
dWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBhc2luIChkb3VibGUgX194
KTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBhdGFu
IChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpOwoKZXh0ZXJu
IGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19h
dGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJs
ZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUg
c2luIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCk7CgpleHRl
cm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBf
X3gpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBk
b3VibGUgKl9fY29zeCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUg
Kl9fc2lueCwgZG91YmxlICpfX2Nvc3gpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJs
ZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91Ymxl
IHNpbmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCk7Cgpl
eHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91
YmxlIF9feCk7CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91
YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91YmxlIF9f
eCk7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0
YW5oIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUgX194KTsKCgoK
CgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRv
dWJsZSBfX3gpOwoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KTsgZXh0ZXJuIGRv
dWJsZSBfX2V4cDEwIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgcG93MTAgKGRvdWJsZSBf
X3gpOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gZG91Ymxl
IGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpOyBleHRlcm4gZG91YmxlIF9fZnJl
eHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAo
ZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJs
ZSBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCk7
IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgbG9nMTAg
KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpOwoKCmV4dGVy
biBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpOyBleHRlcm4gZG91Ymxl
IF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpOwoKCgpleHRlcm4gZG91YmxlIGV4
cG0xIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChkb3VibGUgX194KTsKCgpl
eHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChk
b3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91
YmxlIF9fbG9nYiAoZG91YmxlIF9feCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRvdWJsZSBf
X3gpOyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBs
b2cyIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpOwoKCgoK
CgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3Vi
bGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBkb3VibGUgc3FydCAo
ZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KTsKCgoKZXh0ZXJu
IGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19o
eXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKGRv
dWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9feCk7CgoKCgoKCmV4dGVy
biBkb3VibGUgY2VpbCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19jZWlsIChkb3VibGUg
X194KTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUgX194KTsgZXh0
ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGZtb2QgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSk7CgoKCgpleHRlcm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91YmxlIF9f
dmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmYg
KGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu
dCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CgoKCgpleHRlcm4gZG91YmxlIGluZm5hbiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2luZm5hbiAoaW50IF9fZXJyb3IpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7
CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl
IF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgbmFuIChfX2NvbnN0IGNoYXIgKl9f
dGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChf
X2NvbnN0IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0
ZXJuIGludCBfX2lzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgajAgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUg
X19qMCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBf
X2oxIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSk7IGV4dGVybiBkb3Vi
bGUgX19qbiAoaW50LCBkb3VibGUpOwpleHRlcm4gZG91YmxlIHkwIChkb3VibGUpOyBleHRlcm4g
ZG91YmxlIF9feTAgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgeTEgKGRvdWJsZSk7IGV4dGVybiBk
b3VibGUgX195MSAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpOyBleHRl
cm4gZG91YmxlIF9feW4gKGludCwgZG91YmxlKTsKCgoKCgpleHRlcm4gZG91YmxlIGVyZiAoZG91
YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBlcmZjIChk
b3VibGUpOyBleHRlcm4gZG91YmxlIF9fZXJmYyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBsZ2Ft
bWEgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSk7CmV4dGVybiBkb3Vi
bGUgdGdhbW1hIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fdGdhbW1hIChkb3VibGUpOwoKCgoK
ZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3Vi
bGUpOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2Ft
cCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOwoK
CgoKCgpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fcmlu
dCAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25l
eHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKZXh0ZXJuIGRvdWJsZSBuZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHR0b3dh
cmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7
IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCgpl
eHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKTsgZXh0ZXJuIGRvdWJs
ZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2Fs
Ym4gKGRvdWJsZSBfX3gsIGludCBfX24pOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUg
X194LCBpbnQgX19uKTsKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KTsgZXh0ZXJuIGlu
dCBfX2lsb2diIChkb3VibGUgX194KTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJsbiAoZG91Ymxl
IF9feCwgbG9uZyBpbnQgX19uKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibG4gKGRvdWJsZSBfX3gs
IGxvbmcgaW50IF9fbik7CgoKCmV4dGVybiBkb3VibGUgbmVhcmJ5aW50IChkb3VibGUgX194KTsg
ZXh0ZXJuIGRvdWJsZSBfX25lYXJieWludCAoZG91YmxlIF9feCk7CgoKCmV4dGVybiBkb3VibGUg
cm91bmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpOwoK
CgpleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBkb3VibGUgX190cnVuYyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSByZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3ksIGludCAqX19xdW8pOyBleHRlcm4gZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBk
b3VibGUgX195LCBpbnQgKl9fcXVvKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50IChkb3Vi
bGUgX194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gpOwpleHRlcm4gbG9u
ZyBsb25nIGludCBsbHJpbnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xs
cmludCAoZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSBfX3gp
OyBleHRlcm4gbG9uZyBpbnQgX19scm91bmQgKGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25n
IGludCBsbHJvdW5kIChkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5k
IChkb3VibGUgX194KTsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUg
X195KTsgZXh0ZXJuIGRvdWJsZSBfX2ZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCmV4
dGVybiBkb3VibGUgZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUg
X19mbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KTsKCgpleHRlcm4gZG91YmxlIGZtaW4gKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkK
ICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXQg
KGRvdWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0
ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opOyBleHRl
cm4gZG91YmxlIF9fZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KTsKIyA2
NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KTsgZXh0
ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0
IF9feCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGF0
YW5mIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KTsKCmV4dGVy
biBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXRh
bjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9f
eCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgc2luZiAo
ZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9h
dCB0YW5mIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpOwoKCgpl
eHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nv
c3gpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxv
YXQgKl9fY29zeCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KTsgZXh0ZXJu
IGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9f
eCk7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHRhbmhm
IChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KTsKCgoKZXh0ZXJu
IGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9hdCBf
X3gpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXNp
bmhmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KTsgZXh0ZXJu
IGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gpOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9h
dCBfX3gpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gZmxvYXQg
ZXhwMTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCk7Cgpl
eHRlcm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZs
b2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9u
ZW50KTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCk7
CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCk7IGV4dGVy
biBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCk7CgoKZXh0ZXJuIGZs
b2F0IGxvZ2YgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCk7CgoK
ZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBmIChm
bG9hdCBfX3gpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRy
KTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cik7CgoKCmV4
dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxv
YXQgX194KTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQg
X19sb2cxcGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpOyBl
eHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KTsKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAo
ZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZs
b2F0IGxvZzJmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KTsK
CgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZs
b2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAo
ZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBm
bG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9faHlwb3Rm
IChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0IF9f
eCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpOwoKCgoKCgpleHRlcm4gZmxvYXQg
Y2VpbGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpOwoKCmV4
dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19m
bG9vcmYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0
IF9feSk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKCgpl
eHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCBf
X3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZmxvYXQg
aW5mbmFuZiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu
IGZsb2F0IF9faW5mbmFuZiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZs
b2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25p
ZmljYW5kZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fc2lnbmlmaWNhbmRmIChmbG9hdCBf
X3gpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJu
IGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3Zh
bHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChm
bG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0
IGowZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGox
ZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGpuZiAo
aW50LCBmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCk7CmV4dGVybiBmbG9h
dCB5MGYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCk7CmV4dGVybiBmbG9hdCB5
MWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCk7CmV4dGVybiBmbG9hdCB5bmYg
KGludCwgZmxvYXQpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpOwoKCgoKCmV4dGVy
biBmbG9hdCBlcmZmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZsb2F0KTsKZXh0ZXJu
IGZsb2F0IGVyZmNmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCk7CmV4dGVy
biBmbG9hdCBsZ2FtbWFmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZsb2F0KTsK
ZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxv
YXQpOwoKCgoKZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX19nYW1t
YWYgKGZsb2F0KTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19z
aWduZ2FtcCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2Ft
cCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9f
cmludGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwg
ZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25l
eHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0b3dhcmRm
IChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRl
cm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKCmV4dGVybiBm
bG9hdCBzY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJm
IChmbG9hdCBfX3gsIGZsb2F0IF9fbik7CgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBf
X3gsIGludCBfX24pOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24p
OwoKCmV4dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBfX3gpOyBleHRlcm4gaW50IF9faWxvZ2JmIChm
bG9hdCBfX3gpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50
IF9fbik7IGV4dGVybiBmbG9hdCBfX3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbik7
CgoKCmV4dGVybiBmbG9hdCBuZWFyYnlpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19u
ZWFyYnlpbnRmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChmbG9hdCBfX3gp
OyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCB0cnVu
Y2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQg
X190cnVuY2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0
ZXJuIGZsb2F0IHJlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKTsgZXh0
ZXJuIGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pOwoK
CgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4gbG9uZyBpbnQg
X19scmludGYgKGZsb2F0IF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGYgKGZsb2F0
IF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50ZiAoZmxvYXQgX194KTsKCgoKZXh0
ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGludCBfX2xyb3Vu
ZGYgKGZsb2F0IF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBfX3gp
OyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4g
ZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9fZmRpbWYg
KGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgpleHRlcm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwg
ZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsK
CgpleHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0
IF9fZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3Np
ZnlmIChmbG9hdCBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gaW50IF9fc2lnbmJpdGYgKGZsb2F0IF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ks
IGZsb2F0IF9feik7IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBm
bG9hdCBfX3opOwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1
NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFj
b3NsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zbCAobG9uZyBk
b3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0
YW5sIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBk
b3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuMmwg
KGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUg
Y29zbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBk
b3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rhbmwg
KGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiB2b2lkIHNpbmNvc2wgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCk7IGV4dGVybiB2b2lk
IF9fc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRv
dWJsZSAqX19jb3N4KTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJs
ZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUgX194KTsKCmV4
dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFuaGwg
KGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsIChsb25nIGRvdWJs
ZSBfX3gpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19hY29zaGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19h
c2luaGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmhsIChsb25n
IGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxvbmcgZG91YmxlIF9f
eCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGRv
dWJsZSBleHAxMGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDEw
bCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBwb3cxMGwgKGxvbmcgZG91
YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3BvdzEwbCAobG9uZyBkb3VibGUgX194KTsK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhw
b25lbnQpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50
ICpfX2V4cG9uZW50KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBf
X3gsIGludCBfX2V4cG9uZW50KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25nIGRv
dWJsZSBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAobG9u
ZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUgX194
KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19sb2cxMGwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIG1vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRy
KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFw
bCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91
YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJsZSBfX3gpOwoK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUg
bG9nMmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzJsIChsb25n
IGRvdWJsZSBfX3gpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3dsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNxcnRsIChs
b25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUg
X194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBk
b3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCk7
CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91Ymxl
IF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zsb29ybCAobG9uZyBkb3VibGUgX194KTsKCgpl
eHRlcm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlbCAobG9uZyBk
b3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGlu
dCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBpbmZuYW5sIChpbnQg
X19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19pbmZuYW5sIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBf
X3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCk7
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFubCAoX19jb25z
dCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91
YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgajBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBk
b3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgam5sIChpbnQs
IGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91Ymxl
KTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkwbCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX195MGwgKGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3Vi
bGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcg
ZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAo
aW50LCBsb25nIGRvdWJsZSk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91
YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9u
ZyBkb3VibGUgZXJmY2wgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wg
KGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBk
b3VibGUgdGdhbW1hbCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFs
IChsb25nIGRvdWJsZSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJs
ZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpOwoKCgoKCgpleHRl
cm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25n
YW1wKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dGFmdGVy
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1h
aW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX3JlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X24pOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX19uKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9f
eCwgaW50IF9fbik7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9f
eCwgaW50IF9fbik7CgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy
biBpbnQgX19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUg
c2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKTsKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGRvdWJs
ZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAo
bG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3Vi
bGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3RydW5jbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3ksIGludCAqX19xdW8pOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9sIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1byk7CgoKCgoKCmV4dGVybiBsb25n
IGludCBscmludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAo
bG9uZyBkb3VibGUgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3Vi
bGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gp
OwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxv
bmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
bGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3Vu
ZGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGltbCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBm
bWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19mbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
OwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpCiAgICAg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9u
ZyBkb3VibGUgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwg
bG9uZyBkb3VibGUgX196KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feik7CiMgMTAwICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBz
aWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewogICAgRlBfTkFO
LAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoKICAg
IEZQX05PUk1BTAoKICB9OwojIDIzNiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVmIGVu
dW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lT
T0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJ
Ql9WRVJTSU9OOwojIDI1OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNlcHRp
b24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsK
ICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0
aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMjg5ICIvdXNyL2lu
Y2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAyOTAgIi91c3IvaW5jbHVkZS9tYXRoLmgi
IDIgMwojIDM0OCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L21hdGhpbmxpbmUuaCIgMSAzCiMgMTE3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi
IDMKX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZsb2F0IF9feCkKewogIF9fZXh0ZW5zaW9uX18g
dW5pb24geyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVy
biBfX3UuX19pIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0IChkb3VibGUgX194KQp7CiAg
X19leHRlbnNpb25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0geyBf
X2Q6IF9feCB9OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWdu
Yml0bCAobG9uZyBkb3VibGUgX194KQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcgZG91
YmxlIF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAgcmV0dXJuIChfX3Uu
X19pWzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjM0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s
aW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUg
X19zZ24gKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4w
ID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCk7IF9faW5saW5l
IGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9f
eCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9u
ZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkg
eyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQoK
Cl9faW5saW5lIGRvdWJsZSBfX3BvdzIgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBfX3BvdzIg
KGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChs
b25nIGxvbmcgaW50KSBfX3g7IGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBfX3ApIHsgX19hc20g
X192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiICgxLjApLCAidSIg
KF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQJJSVzdCgw
KVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeClcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJ
CSMgZnJhY3QoeClcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFcblx0IiA6ICI9dCIg
KF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4w
OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f
dmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxv
YXQgX19wb3cyZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBfX3BvdzJmIChmbG9hdCBfX3gpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBv
bmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBf
X3g7IGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBfX3ApIHsgX19hc20gX192b2xhdGlsZV9fICgi
ZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiICgxLjApLCAidSIgKF9feCkpOyByZXR1cm4g
X192YWx1ZTsgfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQJJSVzdCgwKVxuXHQiICJmcm5kaW50
CQkJIyBpbnQoeClcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeClcblx0
IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUi
IChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0
aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9f
ZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19wb3cy
bCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3BvdzJsIChsb25nIGRvdWJs
ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxv
bmcgaW50KSBfX3g7IGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBfX3ApIHsgX19hc20gX192b2xh
dGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiICgxLjApLCAidSIgKF9feCkp
OyByZXR1cm4gX192YWx1ZTsgfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQJJSVzdCgwKVxuXHQi
ICJmcm5kaW50CQkJIyBpbnQoeClcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJh
Y3QoeClcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFs
dWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2Fz
bSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUp
LCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyAyODMgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSB2b2lkIF9fc2luY29zIChkb3VibGUgX194
LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpOwpfX2lubGluZSB2b2lkCl9fc2luY29z
IChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpCnsKICByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX2Nvc3I7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fc2lucjsgX19hc20g
X192b2xhdGlsZV9fICgiZnNpbmNvc1xuXHQiICJmbnN0c3cJJSVheFxuXHQiICJ0ZXN0bAkkMHg0
MDAsICUlZWF4XG5cdCIgImp6CTFmXG5cdCIgImZsZHBpXG5cdCIgImZhZGQJJSVzdCgwKVxuXHQi
ICJmeGNoCSUlc3QoMSlcblx0IiAiMjogZnByZW0xXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInRl
c3RsCSQweDQwMCwgJSVlYXhcblx0IiAiam56CTJiXG5cdCIgImZzdHAJJSVzdCgxKVxuXHQiICJm
c2luY29zXG5cdCIgIjE6IiA6ICI9dCIgKF9fY29zciksICI9dSIgKF9fc2lucikgOiAiMCIgKF9f
eCkpOyAqX19zaW54ID0gX19zaW5yOyAqX19jb3N4ID0gX19jb3NyOwp9CgpfX2lubGluZSB2b2lk
IF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KTsKX19p
bmxpbmUgdm9pZApfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9f
Y29zeCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fY29zcjsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX19zaW5yOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2luY29zXG5cdCIgImZuc3RzdwklJWF4
XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAianoJMWZcblx0IiAiZmxkcGlcblx0IiAi
ZmFkZAklJXN0KDApXG5cdCIgImZ4Y2gJJSVzdCgxKVxuXHQiICIyOiBmcHJlbTFcblx0IiAiZm5z
dHN3CSUlYXhcblx0IiAidGVzdGwJJDB4NDAwLCAlJWVheFxuXHQiICJqbnoJMmJcblx0IiAiZnN0
cAklJXN0KDEpXG5cdCIgImZzaW5jb3Ncblx0IiAiMToiIDogIj10IiAoX19jb3NyKSwgIj11IiAo
X19zaW5yKSA6ICIwIiAoX194KSk7ICpfX3NpbnggPSBfX3NpbnI7ICpfX2Nvc3ggPSBfX2Nvc3I7
Cn0KCl9faW5saW5lIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
ICpfX3NpbngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlICpfX2Nv
c3gpOwpfX2lubGluZSB2b2lkCl9fc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X19jb3NyOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3NpbnI7IF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZzaW5jb3Ncblx0IiAiZm5zdHN3CSUlYXhcblx0IiAidGVzdGwJJDB4NDAwLCAlJWVheFxuXHQi
ICJqegkxZlxuXHQiICJmbGRwaVxuXHQiICJmYWRkCSUlc3QoMClcblx0IiAiZnhjaAklJXN0KDEp
XG5cdCIgIjI6IGZwcmVtMVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJ0ZXN0bAkkMHg0MDAsICUl
ZWF4XG5cdCIgImpuegkyYlxuXHQiICJmc3RwCSUlc3QoMSlcblx0IiAiZnNpbmNvc1xuXHQiICIx
OiIgOiAiPXQiIChfX2Nvc3IpLCAiPXUiIChfX3NpbnIpIDogIjAiIChfX3gpKTsgKl9fc2lueCA9
IF9fc2lucjsgKl9fY29zeCA9IF9fY29zcjsKfQojIDMyOCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0
aGlubGluZS5oIiAzCl9faW5saW5lIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSk7
IF9faW5saW5lIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJ
CQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4
ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxv
ZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUp
KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxl
CQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAo
X192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls
ZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0IiA6ICI9dCIgKF9fdGVtcCkg
OiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3RlbXAgLT0gMS4wOyByZXR1cm4gX190
ZW1wICsgX192YWx1ZTsgfQojIDM0OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAz
Cl9faW5saW5lIGRvdWJsZSBleHAgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBleHAgKGRvdWJs
ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXnggPSAyXih4
ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAkl
JXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQi
ICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihm
cmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhw
b25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVu
dCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBleHBmIChmbG9hdCk7IF9faW5s
aW5lIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl
OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm
bGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAq
IGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cy
KGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlc
blx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgOiAiPXQiIChf
X3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsg
X19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3Zh
bHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcg
ZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgZXhwbCAobG9u
ZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54
ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQi
ICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4
Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJ
CSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUi
IChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0
aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9f
ZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19leHBs
IChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUg
X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fZXhwb25lbnQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAq
IGxvZzIoZSkpXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVz
dCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAi
ZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJh
Y3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9u
ZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm
c2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQp
KTsgcmV0dXJuIF9fdmFsdWU7IH0KCgpfX2lubGluZSBkb3VibGUgdGFuIChkb3VibGUpOyBfX2lu
bGluZSBkb3VibGUgdGFuIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs
dWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRlX18gKChfX3VudXNl
ZF9fKSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6ICI9dCIgKF9fdmFsdWUyKSwgIj11
IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9h
dCB0YW5mIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlMiBfX2F0
dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcHRhbiIgOiAi
PXQiIChfX3ZhbHVlMiksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFs
dWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBs
b25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9f
dW51c2VkX18pKTsgX19hc20gX192b2xhdGlsZV9fICgiZnB0YW4iIDogIj10IiAoX192YWx1ZTIp
LCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgMzY3ICIv
dXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGF0YW4yIChk
b3VibGUsIGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91Ymxl
IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18g
KCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgx
KSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0LCBmbG9h
dCk7IF9faW5saW5lIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9
dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9f
dmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSwgbG9uZyBk
b3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9u
ZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kp
IDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fYXRh
bjJsIChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX2F0
YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk
b3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFs
dWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0K
CgpfX2lubGluZSBkb3VibGUgZm1vZCAoZG91YmxlLCBkb3VibGUpOyBfX2lubGluZSBkb3VibGUg
Zm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh
bHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQi
ICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9f
eSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgZm1vZGYg
KGZsb2F0LCBmbG9hdCk7IF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIx
OglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIg
KF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9f
dmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlLCBsb25nIGRv
dWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0
aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFi
IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsg
cmV0dXJuIF9fdmFsdWU7IH0KIyAzODIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg
MwpfX2lubGluZSBkb3VibGUgcG93IChkb3VibGUsIGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBw
b3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxv
bmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3k7IGlmIChfX3ggPT0gMC4wICYmIF9feSA+
IDAuMCkgcmV0dXJuIDAuMDsgaWYgKF9feSA9PSAoZG91YmxlKSBfX3ApIHsgbG9uZyBkb3VibGUg
X19yID0gMS4wOyBpZiAoX19wID09IDApIHJldHVybiAxLjA7IGlmIChfX3AgPCAwKSB7IF9fcCA9
IC1fX3A7IF9feCA9IDEuMCAvIF9feDsgfSB3aGlsZSAoMSkgeyBpZiAoX19wICYgMSkgX19yICo9
IF9feDsgX19wID4+PSAxOyBpZiAoX19wID09IDApIHJldHVybiBfX3I7IF9feCAqPSBfX3g7IH0g
fSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeWwyeCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194
KSwgInUiICgxLjApIDogInN0KDEpIik7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZtdWwJJSVzdCgx
KQkJIyB5ICogbG9nMih4KVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQo
eSAqIGxvZzIoeCkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHkgKiBs
b2cyKHgpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeSAqIGxvZzIoeCkpKSAtIDFcblx0IiA6
ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX195KSwgIjEiIChfX3Zh
bHVlKSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10
IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9f
dmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgcG93ZiAoZmxvYXQsIGZsb2F0KTsgX19pbmxpbmUgZmxv
YXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25n
IGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3k7IGlmIChfX3ggPT0gMC4wICYmIF9f
eSA+IDAuMCkgcmV0dXJuIDAuMDsgaWYgKF9feSA9PSAoZG91YmxlKSBfX3ApIHsgbG9uZyBkb3Vi
bGUgX19yID0gMS4wOyBpZiAoX19wID09IDApIHJldHVybiAxLjA7IGlmIChfX3AgPCAwKSB7IF9f
cCA9IC1fX3A7IF9feCA9IDEuMCAvIF9feDsgfSB3aGlsZSAoMSkgeyBpZiAoX19wICYgMSkgX19y
ICo9IF9feDsgX19wID4+PSAxOyBpZiAoX19wID09IDApIHJldHVybiBfX3I7IF9feCAqPSBfX3g7
IH0gfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeWwyeCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo
X194KSwgInUiICgxLjApIDogInN0KDEpIik7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZtdWwJJSVz
dCgxKQkJIyB5ICogbG9nMih4KVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBp
bnQoeSAqIGxvZzIoeCkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHkg
KiBsb2cyKHgpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeSAqIGxvZzIoeCkpKSAtIDFcblx0
IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX195KSwgIjEiIChf
X3ZhbHVlKSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDog
Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJu
IF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUsIGxvbmcg
ZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChs
b25nIGxvbmcgaW50KSBfX3k7IGlmIChfX3ggPT0gMC4wICYmIF9feSA+IDAuMCkgcmV0dXJuIDAu
MDsgaWYgKF9feSA9PSAoZG91YmxlKSBfX3ApIHsgbG9uZyBkb3VibGUgX19yID0gMS4wOyBpZiAo
X19wID09IDApIHJldHVybiAxLjA7IGlmIChfX3AgPCAwKSB7IF9fcCA9IC1fX3A7IF9feCA9IDEu
MCAvIF9feDsgfSB3aGlsZSAoMSkgeyBpZiAoX19wICYgMSkgX19yICo9IF9feDsgX19wID4+PSAx
OyBpZiAoX19wID09IDApIHJldHVybiBfX3I7IF9feCAqPSBfX3g7IH0gfSBfX2FzbSBfX3ZvbGF0
aWxlX18gKCJmeWwyeCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgxLjApIDog
InN0KDEpIik7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZtdWwJJSVzdCgxKQkJIyB5ICogbG9nMih4
KVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeSAqIGxvZzIoeCkpXG5c
dCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHkgKiBsb2cyKHgpKVxuXHQiICJm
MnhtMQkJCSMgMl4oZnJhY3QoeSAqIGxvZzIoeCkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUp
LCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX195KSwgIjEiIChfX3ZhbHVlKSk7IF9fdmFsdWUg
Kz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0MjYg
Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgc3FydCAo
ZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91
YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3Vs
dCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgc3FydGYg
KGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBmbG9h
dCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQp
IDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHNx
cnRsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJs
ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3Vs
dDsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSk7IF9faW5saW5l
IGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1
bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgoKX19pbmxpbmUgZG91YmxlIGZh
YnMgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB7IHJldHVybiBf
X2J1aWx0aW5fZmFicyAoX194KTsgfQpfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQpOyBfX2lu
bGluZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9f
eCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUg
bG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2Zh
YnNsIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlKTsg
X19pbmxpbmUgbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBf
X2J1aWx0aW5fZmFic2wgKF9feCk7IH0KCgoKCgoKX19pbmxpbmUgZG91YmxlIHNpbiAoZG91Ymxl
KTsgX19pbmxpbmUgZG91YmxlIHNpbiAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19y
ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAi
IChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IHNpbmYgKGZsb2F0KTsg
X19pbmxpbmUgZmxvYXQgc2luZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0
OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2luIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194
KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRv
dWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNpbiIgOiAi
PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5l
IGRvdWJsZSBjb3MgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHsg
cmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmY29zIiA6ICI9
dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBm
bG9hdCBjb3NmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGNvc2YgKGZsb2F0IF9feCkgeyByZWdp
c3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmNvcyIgOiAiPXQiIChf
X3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBk
b3VibGUgY29zbCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBjb3NsIChsb25n
IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9f
cmVzdWx0OyB9CgpfX2lubGluZSBkb3VibGUgYXRhbiAoZG91YmxlKTsgX19pbmxpbmUgZG91Ymxl
IGF0YW4gKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDog
InN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQp
OyBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVz
dWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQp
IDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25n
IGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFubCAo
bG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gp
IDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQpfX2lubGluZSBkb3VibGUgbG9nIChkb3Vi
bGUpOyBfX2lubGluZSBkb3VibGUgbG9nIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGRvdWJsZSBf
X3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yOyBmeGNoOyBmeWwyeCIgOiAiPXQi
IChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9f
aW5saW5lIGZsb2F0IGxvZ2YgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgbG9nZiAoZmxvYXQgX194
KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjI7
IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyBy
ZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUp
OyBfX2lubGluZSBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMjsgZnhjaDsg
ZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBf
X3Jlc3VsdDsgfQpfX2lubGluZSBkb3VibGUgbG9nMTAgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJs
ZSBsb2cxMCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9f
dm9sYXRpbGVfXyAoImZsZGxnMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAi
IChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBsb2cx
MGYgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIg
ZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxnMjsgZnhjaDsgZnlsMngi
IDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3Vs
dDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUg
bG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxnMjsgZnhjaDsgZnlsMngiIDog
Ij10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsg
fQoKX19pbmxpbmUgZG91YmxlIGFzaW4gKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBhc2luIChk
b3VibGUgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAgLSBfX3ggKiBf
X3gpKTsgfSBfX2lubGluZSBmbG9hdCBhc2luZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBhc2lu
ZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAgLSBfX3gg
KiBfX3gpKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUpOyBfX2lu
bGluZSBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX2F0YW4y
bCAoX194LCBfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpKTsgfQpfX2lubGluZSBkb3VibGUgYWNv
cyAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9f
YXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpOyB9IF9faW5saW5lIGZsb2F0
IGFjb3NmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIHsgcmV0dXJu
IF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpOyB9IF9faW5saW5lIGxv
bmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3Ns
IChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3gg
KiBfX3gpLCBfX3gpOyB9CgpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbjFsIChsb25nIGRvdWJs
ZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1
cm4gX194ID49IDAuMCA/IDEuMCA6IC0xLjA7IH0KCgoKX19pbmxpbmUgZG91YmxlIHNpbmggKGRv
dWJsZSk7IF9faW5saW5lIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChf
X2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXhtMSkgKiBfX3NnbjFsIChfX3gpOyB9IF9faW5s
aW5lIGZsb2F0IHNpbmhmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkp
OyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsgX19leG0xKSAqIF9fc2du
MWwgKF9feCk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlKTsgX19p
bmxpbmUgbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAo
X19leG0xIC8gKF9fZXhtMSArIDEuMCkgKyBfX2V4bTEpICogX19zZ24xbCAoX194KTsgfQoKCgpf
X2lubGluZSBkb3VibGUgY29zaCAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGNvc2ggKGRvdWJs
ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leCA9IF9fZXhwbCAoX194KTsgcmV0dXJu
IDAuNSAqIChfX2V4ICsgMS4wIC8gX19leCk7IH0gX19pbmxpbmUgZmxvYXQgY29zaGYgKGZsb2F0
KTsgX19pbmxpbmUgZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX2V4ID0gX19leHBsIChfX3gpOyByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsg
fSBfX2lubGluZSBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25n
IGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
ZXggPSBfX2V4cGwgKF9feCk7IHJldHVybiAwLjUgKiAoX19leCArIDEuMCAvIF9fZXgpOyB9CgoK
Cl9faW5saW5lIGRvdWJsZSB0YW5oIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUgdGFuaCAoZG91
YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoLV9fZmFi
c2wgKF9feCArIF9feCkpOyByZXR1cm4gX19leG0xIC8gKF9fZXhtMSArIDIuMCkgKiBfX3NnbjFs
ICgtX194KTsgfSBfX2lubGluZSBmbG9hdCB0YW5oZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCB0
YW5oZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFs
ICgtX19mYWJzbCAoX194ICsgX194KSk7IHJldHVybiBfX2V4bTEgLyAoX19leG0xICsgMi4wKSAq
IF9fc2duMWwgKC1fX3gpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJs
ZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBfX3gpKTsg
cmV0dXJuIF9fZXhtMSAvIChfX2V4bTEgKyAyLjApICogX19zZ24xbCAoLV9feCk7IH0KCgoKCl9f
aW5saW5lIGRvdWJsZSBmbG9vciAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGZsb29yIChkb3Vi
bGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7
IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0g
KF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDog
OiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIg
KF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgZmxvb3JmIChmbG9hdCk7
IF9faW5saW5lIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi
IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh
dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p
bmxpbmUgbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91
YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs
dWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1t
IiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAo
ImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl
ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0NzkgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgY2VpbCAoZG91
YmxlKTsgX19pbmxpbmUgZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk
b3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xh
dGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3Rj
dyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7
IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNt
IF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsg
fSBfX2lubGluZSBmbG9hdCBjZWlsZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBjZWlsZiAoZmxv
YXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7
IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0g
KF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDog
OiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIg
KF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgY2VpbGwgKGxv
bmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYg
MHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChf
X2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7
IHJldHVybiBfX3ZhbHVlOyB9CiMgNDk3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi
IDMKX19pbmxpbmUgZG91YmxlIGxkZXhwIChkb3VibGUgX194LCBpbnQgX195KTsKX19pbmxpbmUg
ZG91YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUp
IDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9
CgoKCgoKX19pbmxpbmUgZG91YmxlIGV4cG0xIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUgZXhw
bTEgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2Fz
bSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAx
XG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQi
ICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0
KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxv
ZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAq
IGxvZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAi
IChfX3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihl
KSlcblx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBf
X3RlbXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBl
eHBtMWYgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJ
CQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4
ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxv
ZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUp
KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxl
CQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAo
X192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls
ZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0IiA6ICI9dCIgKF9fdGVtcCkg
OiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3RlbXAgLT0gMS4wOyByZXR1cm4gX190
ZW1wICsgX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91Ymxl
KTsgX19pbmxpbmUgbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJ
CQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4
ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxv
ZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUp
KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxl
CQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAo
X192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls
ZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0IiA6ICI9dCIgKF9fdGVtcCkg
OiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3RlbXAgLT0gMS4wOyByZXR1cm4gX190
ZW1wICsgX192YWx1ZTsgfQoKCgoKCl9faW5saW5lIGRvdWJsZSBsb2cxcCAoZG91YmxlKTsgX19p
bmxpbmUgZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
dmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1
MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGxv
ZzFwZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAx
LjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2Ug
X19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAi
PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBf
X2lubGluZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBk
b3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUw
NDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MjggIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSk7IF9f
aW5saW5lIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwg
KF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5s
aW5lIGZsb2F0IGFzaW5oZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0IF9f
eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxv
ZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195
KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBk
b3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAo
X195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9f
c2duMWwgKF9feCkpOyB9CgoKCgpfX2lubGluZSBkb3VibGUgYWNvc2ggKGRvdWJsZSk7IF9faW5s
aW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0
bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IF9faW5saW5lIGZsb2F0IGFj
b3NoZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgeyByZXR1cm4g
bG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9
IF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25n
IGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19z
cXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9CgoKX19pbmxpbmUgZG91
YmxlIGF0YW5oIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBs
b2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gX19p
bmxpbmUgZmxvYXQgYXRhbmhmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGF0YW5oZiAoZmxvYXQg
X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAt
MC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gp
OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBs
b25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kp
IC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGh5
cG90IChkb3VibGUsIGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBf
X2lubGluZSBmbG9hdCBoeXBvdGYgKGZsb2F0LCBmbG9hdCk7IF9faW5saW5lIGZsb2F0IGh5cG90
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9f
eSAqIF9feSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSwgbG9u
ZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kp
OyB9CgpfX2lubGluZSBkb3VibGUgbG9nYiAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGxvZ2Ig
KGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQi
IChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9
IF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9h
dCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1
bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5s
aW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91Ymxl
IGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0
XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVy
biBfX3ZhbHVlOyB9CiMgNTU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19p
bmxpbmUgZG91YmxlIGxvZzIgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBsb2cyIChkb3VibGUg
X194KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxk
MTsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7
IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBsb2cyZiAoZmxvYXQpOyBfX2lubGlu
ZSBmbG9hdCBsb2cyZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2Fz
bSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmeGNoOyBmeWwyeCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAi
MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91
YmxlIGxvZzJsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzJsIChsb25n
IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZsZDE7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194
KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGZsb2F0IGxkZXhwZiAo
ZmxvYXQgX194LCBpbnQgX195KTsKX19pbmxpbmUgZmxvYXQKbGRleHBmIChmbG9hdCBfX3gsIGlu
dCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91
YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5saW5lIGxvbmcgZG91YmxlIGxkZXhw
bCAobG9uZyBkb3VibGUgX194LCBpbnQgX195KTsKX19pbmxpbmUgbG9uZyBkb3VibGUKbGRleHBs
IChsb25nIGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh
bHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg
KF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5s
aW5lIGRvdWJsZSBmbWEgKGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOyBfX2lubGluZSBkb3VibGUg
Zm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB7IHJldHVybiAoX194ICog
X195KSArIF9fejsgfSBfX2lubGluZSBmbG9hdCBmbWFmIChmbG9hdCwgZmxvYXQsIGZsb2F0KTsg
X19pbmxpbmUgZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgeyBy
ZXR1cm4gKF9feCAqIF9feSkgKyBfX3o7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1hbCAobG9u
ZyBkb3VibGUsIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91Ymxl
IGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3op
IHsgcmV0dXJuIChfX3ggKiBfX3kpICsgX196OyB9CgpfX2lubGluZSBkb3VibGUgcmludCAoZG91
YmxlKTsgX19pbmxpbmUgZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91Ymxl
IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcm5kaW50IiA6ICI9dCIgKF9fcmVzdWx0
KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCByaW50ZiAo
ZmxvYXQpOyBfX2lubGluZSBmbG9hdCByaW50ZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0
IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcm5kaW50IiA6ICI9dCIgKF9fcmVzdWx0
KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBy
aW50bCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSByaW50bCAobG9uZyBkb3Vi
bGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmcm5kaW50IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jl
c3VsdDsgfQoKCgoKCgoKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gpCnsKICBs
b25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIgOiAi
PW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJlczsK
fQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkKewogIGxvbmcgaW50IF9fbHJp
bnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRy
ZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9Cl9faW5saW5lIGxv
bmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KQp7CiAgbG9uZyBpbnQgX19scmludHJlczsg
X19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAi
dCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7Cn0KIyA2MDMgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGYgKGZs
b2F0IF9feCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGls
ZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3Qi
KTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChk
b3VibGUgX194KQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0
aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJz
dCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRs
IChsb25nIGRvdWJsZSBfX3gpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9f
IF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChf
X3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91Ymxl
IGRyZW0gKGRvdWJsZSwgZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gs
IGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Ns
b2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhc
blx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJl
cmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9f
aW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCwgZmxvYXQpOyBfX2lubGluZSBmbG9hdCBkcmVtZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVy
IGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZz
dHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIg
KF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3Zh
bHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSwgbG9uZyBkb3Vi
bGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2Ji
ZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0
IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVk
KSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNjM4
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50IF9fZmluaXRl
IChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7Cl9faW5saW5lIGludApf
X2Zpbml0ZSAoZG91YmxlIF9feCkKewogIHJldHVybiAoX19leHRlbnNpb25fXwogICAgICAgICAg
KCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtfX2Q6IF9feH0pLl9faVsx
XQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkpOwp9CgoKCl9faW5saW5l
IGRvdWJsZSBfX2Nvc2htMSAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIF9fY29zaG0xIChkb3Vi
bGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNs
IChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkgKiBfX2V4bTE7
IH0gX19pbmxpbmUgZmxvYXQgX19jb3NobTFmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IF9fY29z
aG0xZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFs
IChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkg
KiBfX2V4bTE7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19jb3NobTFsIChsb25nIGRvdWJsZSk7
IF9faW5saW5lIGxvbmcgZG91YmxlIF9fY29zaG0xbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJu
IDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkgKiBfX2V4bTE7IH0KCgoKX19pbmxpbmUg
ZG91YmxlIF9fYWNvc2gxcCAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIF9fYWNvc2gxcCAoZG91
YmxlIF9feCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0bCAo
X194ICsgMi4wKSk7IH0gX19pbmxpbmUgZmxvYXQgX19hY29zaDFwZiAoZmxvYXQpOyBfX2lubGlu
ZSBmbG9hdCBfX2Fjb3NoMXBmIChmbG9hdCBfX3gpIHsgcmV0dXJuIGxvZzFwbCAoX194ICsgX19z
cXJ0bCAoX194KSAqIF9fc3FydGwgKF9feCArIDIuMCkpOyB9IF9faW5saW5lIGxvbmcgZG91Ymxl
IF9fYWNvc2gxcGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19hY29zaDFw
bCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2cxcGwgKF9feCArIF9fc3FydGwgKF9feCkg
KiBfX3NxcnRsIChfX3ggKyAyLjApKTsgfQojIDM0OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAz
CiMgNDA5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0KIyAxMiAid2F2cGxheW9iamVjdF9pbXBs
LmNjIiAyCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgQXJ0czsKCmNsYXNz
IFdhdlBsYXlPYmplY3RfaW1wbCA6cHVibGljIFdhdlBsYXlPYmplY3Rfc2tlbCwgcHVibGljIFN0
ZFN5bnRoTW9kdWxlIHsKcHJvdGVjdGVkOgogICAgICAgIENhY2hlZFdhdiAqd2F2OwogICAgICAg
IGRvdWJsZSBmbHBvczsKICAgICAgICBwb1N0YXRlIF9zdGF0ZTsKCiAgICAgICAgaW50IHNhbXBs
ZUNvdW50KCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZighd2F2KSByZXR1cm4gMDsKICAg
ICAgICAgICAgICAgIHJldHVybiB3YXYtPmJ1ZmZlclNpemUgLyB3YXYtPmNoYW5uZWxDb3VudCAv
ICh3YXYtPnNhbXBsZVdpZHRoLzgpOwogICAgICAgIH0KcHVibGljOgoKCgogICAgICAgIFdhdlBs
YXlPYmplY3RfaW1wbCgpIDp3YXYoMCksIGZscG9zKDAuMCksIF9zdGF0ZShwb3NJZGxlKQogICAg
ICAgIHsKICAgICAgICAgICAgICAgIDo6QXJ0czo6RGVidWc6OmRlYnVnKCJXYXZQbGF5T2JqZWN0
X2ltcGwiKTsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgfldhdlBsYXlPYmplY3RfaW1wbCgp
CiAgICAgICAgewogICAgICAgICAgICAgICAgOjpBcnRzOjpEZWJ1Zzo6ZGVidWcoIn5XYXZQbGF5
T2JqZWN0X2ltcGwiKTsKICAgICAgICAgICAgICAgIGlmKHdhdikgd2F2LT5kZWNSZWYoKTsKICAg
ICAgICB9CgoKCgoKICAgICAgICBib29sIGxvYWRNZWRpYShjb25zdCBzdHJpbmcgJmZpbGVuYW1l
KSB7CiAgICAgICAgICAgICAgICA6OkFydHM6OkRlYnVnOjpkZWJ1ZygiV2F2OiBsb2FkTWVkaWEg
JXMiLCBmaWxlbmFtZS5jX3N0cigpKTsKICAgICAgICAgICAgICAgIHdhdiA9IENhY2hlZFdhdjo6
bG9hZChDYWNoZTo6dGhlKCksIGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiAod2F2
ICE9IDApOwogICAgICAgIH0KCgoKCiAgICAgICAgc3RyaW5nIGRlc2NyaXB0aW9uKCkgewogICAg
ICAgICAgICAgICAgcmV0dXJuICJubyBkZXNjcmlwdGlvbiAoc2VlIHdhdnBsYXlvYmplY3RfaW1w
bC5jYykiOwogICAgICAgIH0KCiAgICAgICAgcG9UaW1lIGN1cnJlbnRUaW1lKCkgewogICAgICAg
ICAgICAgICAgaWYoIXdhdikgcmV0dXJuIHBvVGltZSgwLDAsMCwic2FtcGxlcyIpOwoKICAgICAg
ICAgICAgICAgIGZsb2F0IHRpbWVzZWMgPSBmbHBvcyAvIChmbG9hdCl3YXYtPnNhbXBsaW5nUmF0
ZTsKICAgICAgICAgICAgICAgIGZsb2F0IHRpbWVtcyA9ICh0aW1lc2VjIC0gZmxvb3IodGltZXNl
YykpICogMTAwMC4wOwoKICAgICAgICAgICAgICAgIHJldHVybiBwb1RpbWUodGltZXNlYywgdGlt
ZW1zLCAoaW50KWZscG9zLCAic2FtcGxlcyIpOwogICAgICAgIH0KCiAgICBwb1RpbWUgb3ZlcmFs
bFRpbWUoKSB7CiAgICAgICAgICAgICAgICBmbG9hdCB0aW1lc2VjID0gKGZsb2F0KXNhbXBsZUNv
dW50KCkgLyAoZmxvYXQpd2F2LT5zYW1wbGluZ1JhdGU7CiAgICAgICAgICAgICAgICBmbG9hdCB0
aW1lbXMgPSAodGltZXNlYyAtIGZsb29yKHRpbWVzZWMpKSAqIDEwMDAuMDsKCiAgICAgICAgICAg
ICAgICByZXR1cm4gcG9UaW1lKHRpbWVzZWMsIHRpbWVtcywgKGludClmbHBvcywgInNhbXBsZXMi
KTsKICAgICAgICB9CgogICAgICAgIHBvQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllcygpIHsKICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxwb0NhcGFiaWxpdGllcz4oY2FwUGF1c2Ur
Y2FwU2Vlayk7CiAgICAgICAgfQoKICAgICAgICBzdHJpbmcgbWVkaWFOYW1lKCkgewogICAgICAg
ICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KCiAgICAgICAgcG9TdGF0ZSBzdGF0ZSgpIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBfc3RhdGU7CiAgICAgICAgfQoKICAgICAgICB2b2lkIHBs
YXkoKSB7CiAgICAgICAgICAgICAgICA6OkFydHM6OkRlYnVnOjpkZWJ1ZygicGxheSIpOwogICAg
ICAgICAgICAgICAgX3N0YXRlID0gcG9zUGxheWluZzsKICAgICAgICB9CgogICAgICAgIHZvaWQg
aGFsdCgpIHsKICAgICAgICAgICAgICAgIDo6QXJ0czo6RGVidWc6OmRlYnVnKCJzdG9wIik7CiAg
ICAgICAgICAgICAgICBfc3RhdGUgPSBwb3NJZGxlOwogICAgICAgICAgICAgICAgZmxwb3MgPSAw
LjA7CiAgICAgICAgfQoKICAgICAgICB2b2lkIHNlZWsoY29uc3QgY2xhc3MgcG9UaW1lICZuZXdU
aW1lKSB7CiAgICAgICAgICAgICAgICBpZighd2F2KSByZXR1cm47CgogICAgICAgICAgICAgICAg
ZmxvYXQgZm5ld3NhbXBsZXMgPSAtMTsKICAgICAgICAgICAgICAgIGlmKG5ld1RpbWUuc2Vjb25k
cyAhPSAtMSAmJiBuZXdUaW1lLm1zICE9IC0xKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBmbG5ld3RpbWUgPSAoZmxvYXQpbmV3VGltZS5zZWNvbmRzKygo
ZmxvYXQpbmV3VGltZS5tcy8xMDAwLjApOwogICAgICAgICAgICAgICAgICAgICAgICBmbmV3c2Ft
cGxlcyA9IGZsbmV3dGltZSAqIChmbG9hdCl3YXYtPnNhbXBsaW5nUmF0ZTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYobmV3VGltZS5jdXN0b20gPj0gMCAmJiBuZXdU
aW1lLmN1c3RvbVVuaXQgPT0gInNhbXBsZXMiKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBmbmV3c2FtcGxlcyA9IG5ld1RpbWUuY3VzdG9tOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIGlmKGZuZXdzYW1wbGVzID4gKGZsb2F0KXNhbXBsZUNvdW50
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGZuZXdzYW1wbGVzID0gKGZsb2F0KXNhbXBsZUNv
dW50KCk7CgogICAgICAgICAgICAgICAgaWYoZm5ld3NhbXBsZXMgPj0gMCkgZmxwb3MgPSBmbmV3
c2FtcGxlczsKICAgICAgICB9CgogICAgICAgIHZvaWQgcGF1c2UoKSB7CiAgICAgICAgICAgICAg
ICA6OkFydHM6OkRlYnVnOjpkZWJ1ZygicGF1c2UiKTsKICAgICAgICAgICAgICAgIF9zdGF0ZSA9
IHBvc1BhdXNlZDsKICAgICAgICB9CgoKCgoKCiAgICAgICAgdm9pZCBzdHJlYW1Jbml0KCkgewog
ICAgICAgICAgICAgICAgOjpBcnRzOjpEZWJ1Zzo6ZGVidWcoInN0cmVhbUluaXQiKTsKICAgICAg
ICB9CgogICAgICAgIHZvaWQgc3RyZWFtU3RhcnQoKSB7CiAgICAgICAgICAgICAgICA6OkFydHM6
OkRlYnVnOjpkZWJ1Zygic3RyZWFtU3RhcnQiKTsKICAgICAgICB9CgogICAgICAgIHZvaWQgY2Fs
Y3VsYXRlQmxvY2sodW5zaWduZWQgbG9uZyBzYW1wbGVzKSB7CiAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGhhdmVTYW1wbGVzID0gMDsKCiAgICAgICAgICAgICAgICBpZih3YXYgJiYgX3N0
YXRlID09IHBvc1BsYXlpbmcpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBzcGVlZCA9IHdhdi0+c2FtcGxpbmdSYXRlIC8gc2FtcGxpbmdSYXRlRmxvYXQ7
CgogICAgICAgICAgICAgICAgICAgICAgICBoYXZlU2FtcGxlcyA9IHVuaV9jb252ZXJ0X3N0ZXJl
b18yZmxvYXQoc2FtcGxlcywgd2F2LT5idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2F2LT5idWZmZXJTaXplLHdhdi0+Y2hhbm5lbENvdW50LHdhdi0+c2FtcGxlV2lkdGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCxyaWdodCxzcGVlZCxmbHBvcyk7
CgogICAgICAgICAgICAgICAgICAgICAgICBmbHBvcyArPSAoZG91YmxlKWhhdmVTYW1wbGVzICog
c3BlZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYoaGF2ZVNhbXBsZXMg
IT0gc2FtcGxlcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyBpOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9aGF2ZVNhbXBsZXM7
aTxzYW1wbGVzO2krKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0W2ldID0g
cmlnaHRbaV0gPSAwLjA7CgogICAgICAgICAgICAgICAgICAgICAgICBpZihfc3RhdGUgPT0gcG9z
UGxheWluZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zdGF0ZSA9IHBvc0lk
bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxwb3MgPSAwLjA7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZv
aWQgc3RyZWFtRW5kKCkgewogICAgICAgICAgICAgICAgOjpBcnRzOjpEZWJ1Zzo6ZGVidWcoInN0
cmVhbUVuZCIpOwogICAgICAgIH0KfTsKCmNsYXNzIFdhdlBsYXlPYmplY3RfaW1wbF9GYWN0b3J5
IDogdmlydHVhbCBwdWJsaWMgQXJ0czo6RmFjdG9yeSB7IHB1YmxpYzogc3RkOjpzdHJpbmcgaW50
ZXJmYWNlTmFtZSgpIHsgcmV0dXJuIFdhdlBsYXlPYmplY3RfaW1wbDo6X2ludGVyZmFjZU5hbWVT
a2VsKCk7IH0gQXJ0czo6T2JqZWN0X3NrZWwgKmNyZWF0ZUluc3RhbmNlKCkgeyByZXR1cm4gbmV3
IFdhdlBsYXlPYmplY3RfaW1wbCA7IH0gfSBUaGVfV2F2UGxheU9iamVjdF9pbXBsX0ZhY3Rvcnk7
Cg==


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2001-06-12 10:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-12  9:33 c++/3135: internal compiler error on kdelibs/arts/soundserver/wavplayobject_impl.cc nathan
  -- strict thread matches above, loose matches on Subject: below --
2001-06-12 10:18 nathan
2001-06-12  4:06 gerald.roth

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