public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/2914: gcc 3.0 crashes on xalan DoubleSupport.cpp
@ 2001-06-07  9:18 nathan
  0 siblings, 0 replies; 2+ messages in thread
From: nathan @ 2001-06-07  9:18 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nathan, tot

Synopsis: gcc 3.0 crashes on xalan DoubleSupport.cpp

State-Changed-From-To: analyzed->closed
State-Changed-By: nathan
State-Changed-When: Thu Jun  7 09:18:57 2001
State-Changed-Why:
    2001-06-07  Nathan Sidwell  <nathan@codesourcery.com>
    
    	PR c++/2914
    	* decl.c (pushtag): Don't push into a complete type's scope.
    
    2001-06-07  Nathan Sidwell  <nathan@codesourcery.com>
    
    	* g++.old-deja/g++.ext/anon3.C: New test.

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


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

* c++/2914: gcc 3.0 crashes on xalan DoubleSupport.cpp
@ 2001-05-23  8:26 tot
  0 siblings, 0 replies; 2+ messages in thread
From: tot @ 2001-05-23  8:26 UTC (permalink / raw)
  To: gcc-gnats

>Number:         2914
>Category:       c++
>Synopsis:       gcc 3.0 crashes on xalan DoubleSupport.cpp
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Wed May 23 08:26:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Teemu Torma
>Release:        gcc-3.0-20010523
>Organization:
>Environment:
RedHat Linux i686
>Description:
gcc crashes whilst compiling xalan source.
This is regression from 2.95.2.
>How-To-Repeat:
Reading specs from /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs
Configured with: ../gcc-3.0-branch/configure --with-gcc-version-trigger=/work/tot/gcc/3.0/gcc-3.0-branch/gcc/version.c --host=i686-pc-linux-gnu --prefix=/usr/local/gcc3 --enable-version-specific-runtime-libs --enable-long-long
Thread model: single
gcc version 3.0 20010523 (prerelease)
 /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/cc1plus -fpreprocessed bug-1.i -quiet -dumpbase bug-1.i -version -o /tmp/ccagZkzI.s
GNU CPP version 3.0 20010523 (prerelease) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.0 20010523 (prerelease) (i686-pc-linux-gnu)
	compiled by GNU C version 3.0 20010523 (prerelease).
PlatformSupport/DoubleSupport.cpp:686: Internal error: Segmentation fault
Please submit a full bug report, with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
>Fix:

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

IyA1NyAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuY3BwIgojIDEgIlBsYXRmb3JtU3Vw
cG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIgMQojIDYzICJQbGF0Zm9ybVN1cHBvcnQvRG91YmxlU3Vw
cG9ydC5ocHAiCiMgMSAiUGxhdGZvcm1TdXBwb3J0L1BsYXRmb3JtU3VwcG9ydERlZmluaXRpb25z
LmhwcCIgMQojIDYyICJQbGF0Zm9ybVN1cHBvcnQvUGxhdGZvcm1TdXBwb3J0RGVmaW5pdGlvbnMu
aHBwIgojIDEgIkluY2x1ZGUvUGxhdGZvcm1EZWZpbml0aW9ucy5ocHAiIDEKIyA2MyAiSW5jbHVk
ZS9QbGF0Zm9ybURlZmluaXRpb25zLmhwcCIKIyAxICJJbmNsdWRlL0dDQ0RlZmluaXRpb25zLmhw
cCIgMQojIDY0ICJJbmNsdWRlL1BsYXRmb3JtRGVmaW5pdGlvbnMuaHBwIiAyCiMgNjMgIlBsYXRm
b3JtU3VwcG9ydC9QbGF0Zm9ybVN1cHBvcnREZWZpbml0aW9ucy5ocHAiIDIKIyA2NCAiUGxhdGZv
cm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9mdW5jdGlvbmFsIiAx
IDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDEgMwojIDE5ICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2Z1bmN0aW9uYWwuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytj
b25maWcuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcu
aCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwoj
IDM3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI1MCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDI1MSAiL3Vzci9pbmNsdWRl
L2ZlYXR1cmVzLmgiIDIgMwojIDI3OCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwojIDI3OSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDIgMwojIDM4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAy
IDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL2crKy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyAy
MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0
ZGRlZi5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMKIyAxICIvdXNyL2xv
Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwojIDE0NyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAxOTkg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDEgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGRfY3N0ZGRlZi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90
OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgMjEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfZnVuY3Rpb25hbC5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2dj
YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xh
c3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1l
bnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0
aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJn
MiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3Qg
X1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4g
ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg
eyByZXR1cm4gX194IC0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbXVs
dGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCAqIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsK
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KHBsdXM8
X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9U
cCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJldHVybiBfVHAoMSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgbmVnYXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+CnsK
ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0
IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g
X194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVh
bCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49
IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs
Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4g
IV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0
ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50
X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog
IGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChf
X3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0
ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRl
PF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFz
cyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVk
aWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1Ymxp
YzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9w
cmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6
Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFt
ZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBjb25zdAogIHsKICAgIHJl
dHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNh
dGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0
ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90
eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246
OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09w
ZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJz
dF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5
cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gb3AodmFsdWUsIF9feCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNs
YXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVy
YXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0
aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxf
T3BlcmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09w
ZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09w
ZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2
YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAg
ICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kp
CiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl
c3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9h
cmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVy
Mm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1Rw
JiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90
eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJn
Ml90eXBlKF9feCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09w
ZXJhdGlvbjI+CmNsYXNzIHVuYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0
eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+CnsKcHJvdGVjdGVkOgogIF9P
cGVyYXRpb24xIF9NX2ZuMTsKICBfT3BlcmF0aW9uMiBfTV9mbjI7CnB1YmxpYzoKICB1bmFyeV9j
b21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpCiAg
ICA6IF9NX2ZuMShfX3gpLCBfTV9mbjIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpy
ZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX2ZuMShfTV9mbjIoX194KSk7CiAg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5s
aW5lIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+CmNvbXBvc2UxKGNvbnN0
IF9PcGVyYXRpb24xJiBfX2ZuMSwgY29uc3QgX09wZXJhdGlvbjImIF9fZm4yKQp7CiAgcmV0dXJu
IHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+KF9fZm4xLCBfX2ZuMik7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9P
cGVyYXRpb24zPgpjbGFzcyBiaW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAg
X09wZXJhdGlvbjEgX01fZm4xOwogIF9PcGVyYXRpb24yIF9NX2ZuMjsKICBfT3BlcmF0aW9uMyBf
TV9mbjM7CnB1YmxpYzoKICBiaW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBj
b25zdCBfT3BlcmF0aW9uMiYgX195LAogICAgICAgICAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24z
JiBfX3opCiAgICA6IF9NX2ZuMShfX3gpLCBfTV9mbjIoX195KSwgX01fZm4zKF9feikgeyB9CiAg
dHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBl
bmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
X01fZm4xKF9NX2ZuMihfX3gpLCBfTV9mbjMoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGlu
ZSBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPgpj
b21wb3NlMihjb25zdCBfT3BlcmF0aW9uMSYgX19mbjEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX2Zu
MiwKICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9fZm4zKQp7CiAgcmV0dXJuIGJpbmFyeV9j
b21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yLF9PcGVyYXRpb24zPgogICAgKF9fZm4xLCBf
X2ZuMiwgX19mbjMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xh
c3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJn
LCBfUmVzdWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGlj
OgogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9f
dW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBf
UmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJf
dG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShf
QXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+
KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1
bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9N
X3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rp
b24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAo
Kl9feCkoX0FyZzEsIF9BcmcyKSkKICAgICAgOiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBv
cGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9w
dHIoX194LCBfX3kpOwogICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJn
MiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9Bcmcx
LF9BcmcyLF9SZXN1bHQ+CnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewog
IHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0Pihf
X3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25z
dCB7IHJldHVybiBfX3g7IH0KICBjb25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gp
IGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IGlk
ZW50aXR5IDogcHVibGljIF9JZGVudGl0eTxfVHA+IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUGFp
cj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVu
YW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9w
ZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAg
Y29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXIm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWly
LCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25k
X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNv
bmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShj
b25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFz
dDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1
YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz
IF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3Qxc3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9Bcmcx
LCBfQXJnMiwgX0FyZzE+IHsKICBfQXJnMSBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiBfX3gsIGNv
bnN0IF9BcmcyJikgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy
ZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+IHsKICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9Bcmcx
JiwgY29uc3QgX0FyZzImIF9feSkgY29uc3QgeyByZXR1cm4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJv
amVjdDFzdDxfQXJnMSwgX0FyZzI+IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBf
QXJnMj4Kc3RydWN0IHByb2plY3QybmQgOiBwdWJsaWMgX1Byb2plY3QybmQ8X0FyZzEsIF9Bcmcy
PiB7fTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IF9Db25zdGFudF92b2lk
X2Z1biB7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3Zh
bDsKCiAgX0NvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX01fdmFs
KF9fdikge30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJu
IF9NX3ZhbDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9Bcmd1bWVudD4K
c3RydWN0IF9Db25zdGFudF91bmFyeV9mdW4gewogIHR5cGVkZWYgX0FyZ3VtZW50IGFyZ3VtZW50
X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3Zh
bDsKCiAgX0NvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3Zh
bChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50
JikgY29uc3QgeyByZXR1cm4gX01fdmFsOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwg
Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX0NvbnN0YW50X2JpbmFyeV9mdW4gewog
IHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29u
ZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICBfUmVzdWx0
IF9NX3ZhbDsKCiAgX0NvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9N
X3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEm
LCBjb25zdCBfQXJnMiYpIGNvbnN0IHsKICAgIHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF92b2lkX2Z1biA6IHB1YmxpYyBfQ29u
c3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4gewogIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IF9SZXN1
bHQmIF9fdikgOiBfQ29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4oX192KSB7fQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfUmVzdWx0LAogICAgICAgICAgY2xhc3MgX0FyZ3VtZW50ID0gX1Jlc3VsdD4K
c3RydWN0IGNvbnN0YW50X3VuYXJ5X2Z1biA6IHB1YmxpYyBfQ29uc3RhbnRfdW5hcnlfZnVuPF9S
ZXN1bHQsIF9Bcmd1bWVudD4KewogIGNvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBf
X3YpCiAgICA6IF9Db25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCwgX0FyZ3VtZW50PihfX3YpIHt9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJnMSA9IF9S
ZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJnMiA9IF9BcmcxPgpzdHJ1Y3QgY29uc3RhbnRfYmlu
YXJ5X2Z1bgogIDogcHVibGljIF9Db25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBf
QXJnMj4KewogIGNvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KQogICAgOiBf
Q29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LCBfQXJnMSwgX0FyZzI+KF9fdikge30KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4g
Y29uc3RhbnQwKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3ZvaWRf
ZnVuPF9SZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBj
b25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PiBjb25zdGFudDEoY29uc3QgX1Jlc3Vs
dCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4o
X192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X2JpbmFy
eV9mdW48X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+CmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBf
X3ZhbCkKewogIHJldHVybiBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVz
dWx0PihfX3ZhbCk7Cn0KCgoKY2xhc3Mgc3VidHJhY3RpdmVfcm5nIDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50PiB7CnByaXZhdGU6CiAgdW5zaWduZWQg
aW50IF9NX3RhYmxlWzU1XTsKICBzaXplX3QgX01faW5kZXgxOwogIHNpemVfdCBfTV9pbmRleDI7
CnB1YmxpYzoKICB1bnNpZ25lZCBpbnQgb3BlcmF0b3IoKSh1bnNpZ25lZCBpbnQgX19saW1pdCkg
ewogICAgX01faW5kZXgxID0gKF9NX2luZGV4MSArIDEpICUgNTU7CiAgICBfTV9pbmRleDIgPSAo
X01faW5kZXgyICsgMSkgJSA1NTsKICAgIF9NX3RhYmxlW19NX2luZGV4MV0gPSBfTV90YWJsZVtf
TV9pbmRleDFdIC0gX01fdGFibGVbX01faW5kZXgyXTsKICAgIHJldHVybiBfTV90YWJsZVtfTV9p
bmRleDFdICUgX19saW1pdDsKICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQg
X19zZWVkKQogIHsKICAgIHVuc2lnbmVkIGludCBfX2sgPSAxOwogICAgX01fdGFibGVbNTRdID0g
X19zZWVkOwogICAgc2l6ZV90IF9faTsKICAgIGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsr
KSB7CiAgICAgICAgc2l6ZV90IF9faWkgPSAoMjEgKiAoX19pICsgMSkgJSA1NSkgLSAxOwogICAg
ICAgIF9NX3RhYmxlW19faWldID0gX19rOwogICAgICAgIF9fayA9IF9fc2VlZCAtIF9fazsKICAg
ICAgICBfX3NlZWQgPSBfTV90YWJsZVtfX2lpXTsKICAgIH0KICAgIGZvciAoaW50IF9fbG9vcCA9
IDA7IF9fbG9vcCA8IDQ7IF9fbG9vcCsrKSB7CiAgICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1
NTsgX19pKyspCiAgICAgICAgICAgIF9NX3RhYmxlW19faV0gPSBfTV90YWJsZVtfX2ldIC0gX01f
dGFibGVbKDEgKyBfX2kgKyAzMCkgJSA1NV07CiAgICB9CiAgICBfTV9pbmRleDEgPSAwOwogICAg
X01faW5kZXgyID0gMzE7CiAgfQoKICBzdWJ0cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IF9fc2Vl
ZCkgeyBfTV9pbml0aWFsaXplKF9fc2VlZCk7IH0KICBzdWJ0cmFjdGl2ZV9ybmcoKSB7IF9NX2lu
aXRpYWxpemUoMTYxODAzMzk4dSk7IH0KfTsKIyA1MTkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfZnVuY3Rpb24u
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1f
ZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRv
cigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgog
IF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw
PgpjbGFzcyBjb25zdF9tZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw
KixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3QoX1JldCAoX1RwOjoq
X19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9U
cCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQg
KF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cD4KY2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKSA6
IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJu
IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikg
e30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3Iu
Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFf
dCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4
cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7
fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChf
X3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25z
dF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1Jl
dD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3Bm
KShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9U
cCogX19wLCBfQXJnIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9
CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7
fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChf
X3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0
X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7
CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3Bm
KShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2
YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19w
ZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7
IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZiko
KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9p
ZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYg
X19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9m
KSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2
b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog
X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAo
X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwg
X1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01f
ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsg
KF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsK
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4x
X3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAq
LF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChf
VHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigp
KGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpw
cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJn
PgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9f
cGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19y
LipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZf
dDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZv
aWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6
Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0
ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4o
X1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsg
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5f
dDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4g
Y29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1Jl
dCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVu
X3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAg
eyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1Jl
dCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1l
bV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0Fy
Zz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0
X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B
cmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1
bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1Rw
LF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1
cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1Jl
dCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBt
ZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9B
cmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29u
c3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAs
X0FyZz4gbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVt
X2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQs
X1RwLF9Bcmc+Cm1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsg
cmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCn0KIyAy
MiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIgMwojIDMgIi91c3IvbG9jYWwvZ2NjMy9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZnVuY3Rpb25hbCIg
MiAzCiMgNjggIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIgMgoKCgojIDEgIlhh
bGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIgMQojIDYyICJYYWxhbkRPTS9YYWxhbkRPTVN0cmlu
Zy5ocHAiCiMgMSAiWGFsYW5ET00vWGFsYW5ET01EZWZpbml0aW9ucy5ocHAiIDEKCgoKCgojIDEg
IkluY2x1ZGUvUGxhdGZvcm1EZWZpbml0aW9ucy5ocHAiIDEKIyA3ICJYYWxhbkRPTS9YYWxhbkRP
TURlZmluaXRpb25zLmhwcCIgMgojIDYzICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiIDIK
CgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL3ZlY3RvciIgMSAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9yLmgiIDEg
MwojIDMxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4
Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xv
Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2V4
Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFs
aWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9f
dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDMzICIvdXNyL2xvY2FsL2dj
YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk
X3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDM1ICIv
dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
ZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvYysrY29uZmlnLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoK
IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX3BhaXIuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfcGFpci5o
IiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1
Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRf
dHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CiAgcGFpcigpIDogZmlyc3QoX1QxKCkp
LCBzZWNvbmQoX1QyKCkpIHt9CiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2Ip
IDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xh
c3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmly
c3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBj
b25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmly
c3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194
LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5m
aXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQg
PCBfX3kuc2Vjb25kKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1Qx
LCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8
PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7
CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFp
cihjb25zdCBfVDEgX194LCBjb25zdCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBf
VDI+KF9feCwgX195KTsKfQoKfQojIDM4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoK
CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL2crKy9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90
cmFpdHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgi
IDEgMwojIDIxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMiAzCiMgNTcgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy90
eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlIDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Owp0
eXBlZGVmIF9Cb29sPHRydWU+IF9fdHJ1ZV90eXBlOwp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2Zh
bHNlX3R5cGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyA4
MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVk
IGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
X3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
X3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07CiMgMTk5ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMwp0ZW1wbGF0ZTw+
IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90
cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxj
aGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln
bmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190
cnVlX3R5cGUgX0ludGVncmFsOwp9OwojIDI5NiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3R5cGVfdHJhaXRzLmgiIDMK
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5
cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNlIHN0ZCB7CiAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3Jt
YWxfaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9D
b250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBzdGQ6Ol9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05v
cm1hbDsKfTsKIyA0MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9s
b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIg
MSAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyA1MSAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9jc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI2ICIvdXNy
L2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vz
ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZv
aWQgKiBtZW1jcHkgKHZvaWQgKiBfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICogX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICogbWVt
bW92ZSAodm9pZCAqIF9fZGVzdCwgX19jb25zdCB2b2lkICogX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqIG1lbWNjcHkgKHZvaWQgKiBfX2Rlc3QsIF9fY29u
c3Qgdm9pZCAqIF9fc3JjLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gdm9pZCAqIG1lbXNldCAodm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9p
ZCAqIF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqIF9fZ2xpYmNw
cF9tZW1jaHIgKF9fY29uc3Qgdm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gdm9pZCAqIHJhd21lbWNociAoX19jb25zdCB2b2lkICogX19zLCBpbnQg
X19jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4dGVy
biBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0
cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo
YXIgKl9fczIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9f
czEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cg
KCk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2Fs
ZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CiAgc3RydWN0IGxvY2FsZV9k
YXRhICpfX2xvY2FsZXNbNl07CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVf
YjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91
cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxMDAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoK
ZXh0ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IF9fc3RyeGZy
bV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sIF9fbG9j
YWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3Qg
Y2hhciAqX19zKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpf
X3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpf
X3N0cmluZywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgMTQ2ICIvdXNyL2luY2x1ZGUvc3RyaW5n
LmgiIDMKZXh0ZXJuIGNoYXIgKl9fZ2xpYmNwcF9zdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBp
bnQgX19jKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpfX2dsaWJjcHBfc3RycmNociAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51
bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVf
dCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0
IGNoYXIgKl9fYWNjZXB0KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpfX2dsaWJjcHBfc3RycGJy
ayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpIHRocm93ICgpOwoK
ZXh0ZXJuIGNoYXIgKl9fZ2xpYmNwcF9zdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywg
X19jb25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cmNh
c2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkg
dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0
YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpz
dHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k
ZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0
cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLCBjaGFyICoqX19yZXN0
cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIg
KipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwojIDE5NCAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAzCmV4dGVybiB2b2lkICogbWVtbWVtIChfX2NvbnN0IHZvaWQgKiBfX2hheXN0YWNr
LCBzaXplX3QgX19oYXlzdGFja2xlbiwgX19jb25zdCB2b2lkICogX19uZWVkbGUsIHNpemVfdCBf
X25lZWRsZWxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqIF9fbWVtcGNweSAodm9pZCAq
IF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogbWVtcGNweSAodm9pZCAqIF9fcmVzdHJp
Y3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5n
LCBzaXplX3QgX19tYXhsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChp
bnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJlcnJvcl9yIChpbnQg
X19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwpleHRlcm4g
Y2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVm
bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKiBfX3MsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICogX19z
cmMsIHZvaWQgKiBfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6
ZXJvICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAg
KF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9pZCAqIF9fczIsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp
IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQg
X19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19s
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu
IGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRl
X18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzdHJjYXNlY21w
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9s
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19z
dHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJv
dyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0
cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2
b2lkICogbWVtZnJvYiAodm9pZCAqIF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsK
IyAzNTAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNTIgIi91c3IvbG9jYWwvZ2NjMy9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0
cmluZy5oIiAyIDMKIyA3NyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKbmFtZXNwYWNlIHN0
ZAp7CiAgZXh0ZXJuICJDIiB2b2lkKiBtZW1jcHkodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3Qp
OwogIGV4dGVybiAiQyIgdm9pZCogbWVtbW92ZSh2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7
CiAgZXh0ZXJuICJDIiBjaGFyKiBzdHJjcHkoY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4g
IkMiIGNoYXIqIHN0cm5jcHkoY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAi
QyIgY2hhciogc3RyY2F0KGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBjaGFyKiBz
dHJuY2F0KGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGludCBtZW1j
bXAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgaW50IHN0
cmNtcChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHN0cmNvbGwo
Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBzdHJuY21wKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHNpemVfdCBzdHJ4ZnJt
KGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGNvbnN0IHZvaWQqIG1l
bWNocihjb25zdCB2b2lkKiwgaW50LCBzaXplX3QpOwogIGlubGluZSB2b2lkKgogIG1lbWNocih2
b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
dm9pZCo+KG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbikpOwog
IH0KICBleHRlcm4gIkMiIGNvbnN0IGNoYXIqIHN0cmNocihjb25zdCBjaGFyKiwgaW50KTsKICBp
bmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7CiAgICByZXR1cm4g
Y29uc3RfY2FzdDxjaGFyKj4oc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBf
X24pKTsKICB9CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyKiwgY29uc3Qg
Y2hhciopOwogIGV4dGVybiAiQyIgY29uc3QgY2hhciogc3RycGJyayhjb25zdCBjaGFyKiwgY29u
c3QgY2hhciopOwogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hh
ciogX19zMikKICB7CiAgICByZXR1cm4gY29uc3RfY2FzdDxjaGFyKj4oc3RycGJyayhjb25zdF9j
YXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMikpOwogIH0KICBleHRlcm4gIkMiIGNvbnN0IGNo
YXIqIHN0cnJjaHIoY29uc3QgY2hhciosIGludCk7CiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihj
aGFyKiBfX3MxLCBpbnQgX19uKQogIHsKICAgIHJldHVybiBjb25zdF9jYXN0PGNoYXIqPihzdHJy
Y2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pKTsKICB9CiAgZXh0ZXJuICJD
IiBzaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBj
b25zdCBjaGFyKiBzdHJzdHIoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBpbmxpbmUgY2hh
cioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7CiAgICByZXR1cm4g
Y29uc3RfY2FzdDxjaGFyKj4oc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBf
X3MyKSk7CiAgfQogIGV4dGVybiAiQyIgY2hhciogc3RydG9rKGNoYXIqLCBjb25zdCBjaGFyKik7
CiAgZXh0ZXJuICJDIiB2b2lkKiBtZW1zZXQodm9pZCosIGludCwgc2l6ZV90KTsKICBleHRlcm4g
IkMiIGNoYXIqIHN0cmVycm9yKGludCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3RybGVuKGNvbnN0
IGNoYXIqKTsKfQojIDQzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbGltaXRzLmgiIDMK
IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2dj
YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgi
IDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMwICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9saW1p
dHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAx
MjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1
ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFf
bGltLmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9saW1pdHMu
aCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDEgMwojIDM0ICIv
dXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0
ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwoj
IDM5ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMSAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDQxICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2NsaW1pdHMuaCIgMiAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRs
aWIuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAz
CiMgNDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz
dGRkZWYuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMKIyA0MyAiL3Vz
ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2cr
Ky9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwoj
IDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsK
CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRp
dl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGlu
dCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZf
dDsKIyA4MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9n
ZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19j
b25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNo
YXIgKl9fbnB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy
ICpfX25wdHIpIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50
IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUg
c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgpleHRlcm4gdW5z
aWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz
dHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDE1NyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMg
MTU4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0
b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRl
cm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2Fs
ZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGlu
dCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp
OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91
bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykg
dGhyb3cgKCk7CiMgMTk2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJsZSBf
X3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv
YXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4g
bG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Us
IGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19z
dHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK
CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVy
bmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAo
X19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKiogX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDMzMyAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcg
bG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlw
ZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhf
dDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQg
bG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0
eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVk
ZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191
X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGlu
dCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90
Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19ybGltX3Q7CnR5cGVk
ZWYgX19xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYg
c3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQg
X19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3Rp
bWVfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xv
Y2tfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fZmRfbWFzazsKIyAxMDAgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21h
c2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IF9f
ZmRfc2V0OwoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp
bnQgX19pcGNfcGlkX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVm
IF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsK
dHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19m
c2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBf
X3VfbG9uZyBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRl
ZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3Vz
Y2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3Iv
aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQg
c2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7
CiAgaW50IF9fc3BpbmxvY2s7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0
cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2RldGFj
aHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2No
ZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9f
Z3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAg
c2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9f
Y193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f
ZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJl
YWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50
IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwog
IHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoK
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJf
dDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo
cmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBp
bnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFk
X2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2Fp
dGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xv
Y2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFy
ZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50
IHB0aHJlYWRfdDsKIyAxNTEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDMxICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0
eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYg
X191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVh
ZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90
IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRf
dCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90
IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtf
dCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZf
dCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX19w
aWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90
IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJf
dCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMSAzCiMgNTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoK
dHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMSAzCiMgNjkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190
aW1lX3QgdGltZV90OwojIDEyMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTY5ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50
IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkp
OwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29y
ZF9fKSkpOwojIDE5MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIg
MwojIDM1ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9l
bmRpYW4uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMTkyICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu
aCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwoj
IDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlw
ZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2ln
bmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50
KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg
MwoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDgzICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcg
aW50IHR2X25zZWM7CiAgfTsKIyAzOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgpl
eHRlcm4gIkMiIHsKCgoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21h
c2s7CgoKdHlwZWRlZiBfX2ZkX3NldCBmZF9zZXQ7CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDMKZXh0ZXJuIGludCBfX3NlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVh
ZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0
IHRpbWV2YWwgKl9fdGltZW91dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBf
X25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3Nl
dCAqX19leGNlcHRmZHMsIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpIHRocm93ICgpOwojIDg3
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9f
bmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0
ICpfX2V4Y2VwdGZkcywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0IF9f
c2lnc2V0X3QgKl9fc2lnbWFzaykgdGhyb3cgKCk7CgoKCgoKfQojIDE5NSAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEg
MwojIDE5OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCgp0eXBlZGVmIF9fYmxr
Y250X3QgYmxrY250X3Q7CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYg
X19mc2ZpbGNudF90IGZzZmlsY250X3Q7CgoKCgoKCgp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtj
bnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2Zz
ZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAyIDMKCgoKCgoKZXh0ZXJuIGludDMyX3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gdm9pZCAqIGluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqIF9fc3RhdGVi
dWYsIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICogc2V0c3Rh
dGUgKHZvaWQgKiBfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0
YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAq
c3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRf
c2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3Ry
dWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQzMl90ICpfX3Jlc3RyaWN0IF9f
cmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9f
c2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGlu
aXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogX19yZXN0cmljdCBfX3N0YXRl
YnVmLCBzaXplX3QgX19zdGF0ZWxlbiwgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAodm9pZCAqIF9fcmVzdHJp
Y3QgX19zdGF0ZWJ1Ziwgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lk
IHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5k
X3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUg
ZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQg
c2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4
ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9p
ZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19z
ZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNp
Z25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0
OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCnN0cnVjdCBkcmFu
ZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgeFszXTsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCBhWzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGM7CiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgb2xkX3hbM107CiAgICBpbnQgaW5pdDsKICB9OwoKCgpleHRlcm4gaW50IGRyYW5kNDhf
ciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgZG91YmxlICpfX3Jl
c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf
X2J1ZmZlciwgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy
LCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IG5y
YW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4X2Rh
dGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg
KCk7CgpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10s
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jl
c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25n
IGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxjb25n
NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA0NzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl
cm4gdm9pZCAqIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCAq
IGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCmV4
dGVybiB2b2lkICogcmVhbGxvYyAodm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAo
KTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2
b2lkIGNmcmVlICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9h
bGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgoj
IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRl
cm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqIGFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cg
KCk7CgoKCgoKfQojIDQ5MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2
b2lkICogdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGFi
b3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4
dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiBf
X2FyZyksIHZvaWQgKiBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQg
KCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiBfX2FyZyksIHZvaWQgKiBfX2FyZykgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBf
X3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0
ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRl
cm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192
YWx1ZSwgaW50IF9fcmVwbGFjZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIHVuc2V0ZW52IChf
X2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYg
KHZvaWQpIHRocm93ICgpOwojIDU2NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj
aGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0
ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIg
KmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsK
IyA1OTUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZl
ZCkgdGhyb3cgKCk7CgoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0
IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJp
c29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKiBic2VhcmNoIChfX2NvbnN0IHZvaWQgKiBfX2tl
eSwgX19jb25zdCB2b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwg
X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKiBf
X2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29t
cGFyKTsKCgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KSB0aHJvdyAoKQogICAgIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVt
ZXIsIGludCBfX2Rlbm9tKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4
dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkgdGhy
b3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4
dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgbG9uZyBpbnQg
X19kZW5vbSkgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDY1
MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpx
ZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAq
cWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIg
KnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBf
X2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz
aXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y
ZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwojIDY5NSAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19z
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX3B3YywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hh
cikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19wd2NzLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMg
NzE4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0
IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDcyOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsIF9f
Y29uc3QgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywgY2hhciAqKl9fcmVzdHJp
Y3QgX192YWx1ZXApIHRocm93ICgpOwojIDczOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxv
Y2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBf
X2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFy
ICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHB0ICh2
b2lkKSB0aHJvdyAoKTsKCgoKCgp9CiMgNDQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMK
IyA4MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg
OjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgZXh0ZXJuICJDIiBkb3VibGUgYXRvZihjb25z
dCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgYXRvaShjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJD
IiBsb25nIGludCBhdG9sKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGRvdWJsZSBzdHJ0b2Qo
Y29uc3QgY2hhciosIGNoYXIqKik7CiAgZXh0ZXJuICJDIiBmbG9hdCBzdHJ0b2YoY29uc3QgY2hh
ciosIGNoYXIqKik7CiAgZXh0ZXJuICJDIiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hhciosIGNo
YXIqKiwgaW50KTsKICBleHRlcm4gIkMiIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3Qg
Y2hhciosIGNoYXIqKiwgaW50KTsKICBleHRlcm4gIkMiIGludCByYW5kKHZvaWQpOwogIGV4dGVy
biAiQyIgdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwogIGV4dGVybiAiQyIgdm9pZCogY2FsbG9j
KHNpemVfdCwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHZvaWQgZnJlZSh2b2lkKik7CiAgZXh0ZXJu
ICJDIiB2b2lkKiBtYWxsb2Moc2l6ZV90KTsKICBleHRlcm4gIkMiIHZvaWQqIHJlYWxsb2Modm9p
ZCosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2b2lkIGFib3J0KHZvaWQpOwogIGV4dGVybiAiQyIg
aW50IGF0ZXhpdCh2b2lkICgqZnVuYykodm9pZCkpOwogIGV4dGVybiAiQyIgdm9pZCBleGl0KGlu
dCk7CiAgZXh0ZXJuICJDIiB2b2lkIF9FeGl0KGludCk7CiAgZXh0ZXJuICJDIiBjaGFyKmdldGVu
dihjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIqKTsKICBl
eHRlcm4gIkMiIHZvaWQqIGJzZWFyY2goY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3Qs
IHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqY29tcCkoY29uc3Qgdm9p
ZCAqLCBjb25zdCB2b2lkICopKTsKICBleHRlcm4gIkMiIHZvaWQgcXNvcnQodm9pZCosIHNpemVf
dCwgc2l6ZV90LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpjb21wKShjb25zdCB2b2lk
ICosIGNvbnN0IHZvaWQgKikpOwogIGV4dGVybiAiQyIgaW50IGFicyhpbnQpOwogIGV4dGVybiAi
QyIgbG9uZyBpbnQgbGFicyhsb25nIGludCk7CiAgZXh0ZXJuICJDIiBkaXZfdCBkaXYoaW50LCBp
bnQpOwogIGV4dGVybiAiQyIgbGRpdl90IGxkaXYobG9uZyBpbnQsIGxvbmcgaW50KTsKICBleHRl
cm4gIkMiIGludCBtYmxlbihjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGludCBt
YnRvd2Mod2NoYXJfdCosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgaW50IHdj
dG9tYihjaGFyKiwgd2NoYXJfdCk7CiAgZXh0ZXJuICJDIiBzaXplX3QgbWJzdG93Y3Mod2NoYXJf
dCosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgc2l6ZV90IHdjc3RvbWJzKGNo
YXIqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBf
X2kpIHsgcmV0dXJuIDo6bGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBf
X2ksIGxvbmcgX19qKSB7IHJldHVybiA6OmxkaXYoX19pLCBfX2opOyB9Cn0KIyA0NSAiL3Vzci9s
b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAz
CiMgNDYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mz
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9uZXciIDEgMwoj
IDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL25ldyIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvY3N0ZGRlZiIgMSAzCiMgMzUgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvbmV3IiAy
IDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL2V4Y2VwdGlvbiIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZXhjZXB0aW9uIiAzCmV4dGVy
biAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGlj
OgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRo
cm93KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpOwogIH07
CgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoK
ICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv
bigpIHRocm93KCk7CiAgfTsKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgp
OwogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgogIHRlcm1pbmF0ZV9o
YW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CiAgdm9pZCB0
ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogIHVuZXhwZWN0ZWRf
aGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CiAgdm9p
ZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICBib29sIHVu
Y2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyAzNiAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9uZXciIDIgMwoKZXh0
ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBl
eGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KICAgIHZp
cnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07
CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19o
YW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7Cn0K
Cgp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7
CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp
Owp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs
ZXRlW10odm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNv
bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpz
aXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlW10odm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5l
IHZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyBy
ZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2
b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9CiMgNDcgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDM4
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdHJpbmdmd2Qu
aCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwoj
IDQwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RyaW5nZndkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxh
dGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTw+IGNs
YXNzIGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPHdj
aGFyX3Q+OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9y
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hh
cj4gc3RyaW5nOwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQoj
IDQxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAx
IDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL2crKy9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytp
by5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOCAiL3Vzci9p
bmNsdWRlL3N0ZGlvLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2Mz
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwoj
IDQzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlz
dDsKIyAxMTAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMg
MzkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgoKCnR5cGVkZWYg
c3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNTcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgOSAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTAgIi91c3Iv
aW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIv
dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
c3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1
ZGUvX0dfY29uZmlnLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKdHlw
ZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK
dHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp
KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg
MiAzCiMgNDggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0
OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvc3RkaW8tbG9jay5oIiAxIDMKIyAyMCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8t
bG9jay5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMSAzCiMgMTggIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMTkg
Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg
MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoK
CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5o
IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDQ3ICIvdXNyL2lu
Y2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hl
ZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAo
Kl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssIGludCBfX2ZsYWdzLCB2
b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKCn0KIyAzMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIg
MwoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3NldHBhcmFtIChfX3BpZF90IF9f
cGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hl
ZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRwYXJh
bSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3Bh
cmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfc2V0c2NoZWR1bGVy
IChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt
ICpfX3BhcmFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChfX3Bp
ZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Bh
cmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3NjaGVkX2dldHNjaGVkdWxlciAoX19waWRf
dCBfX3BpZCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90
IF9fcGlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfeWllbGQgKHZvaWQpIHRocm93
ICgpOwpleHRlcm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0p
IHRocm93ICgpOwpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29y
aXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19w
aWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwpleHRlcm4gaW50IHNj
aGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3Qp
IHRocm93ICgpOwoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAz
CgpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0
MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgOTUgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
c3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAg
aW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsK
ICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAg
X19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBf
X3RpbWUwKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
c2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2NvbnN0IHN0cnVjdCB0bSAqX19y
ZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChfX2Nv
bnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2ZtdCwgc3RydWN0IHRtICpfX3RwKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190
aW1lcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19jb25zdCB0
aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqX19nbXRpbWVf
ciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwgc3RydWN0IHRtICpfX3Jlc3Ry
aWN0IF9fdHApIHRocm93ICgpOwoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29uc3Qg
dGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVf
dCAqX19yZXN0cmljdCBfX3RpbWVyLCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSB0
aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0g
Kl9fcmVzdHJpY3QgX190cCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4
dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqX190em5h
bWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7
CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9u
ZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0aHJvdyAo
KTsKIyAyMjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0
cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVj
dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3Bl
YyAqX19yZXF1ZXN0ZWRfdGltZSwgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cg
KCk7CiMgMjU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7
CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykg
dGhyb3cgKCk7CiMgMjcyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0
ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsIHN0cnVjdCB0bSAqX19yZXN0
cmljdCBfX3Jlc2J1ZnApIHRocm93ICgpOwoKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMjkgIi91c3IvaW5j
bHVkZS9zaWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAi
L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCiMg
NDkgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7
CiMgMzYyICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKfQojIDI1ICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMg
MjYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQ5ICIvdXNy
L2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoK
ICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfSU5IRVJJVF9T
Q0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfU0NP
UEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKCn07CgplbnVtCnsKICBQVEhSRUFE
X01VVEVYX0ZBU1RfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9N
VVRFWF9FUlJPUkNIRUNLX05QCgogICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJFQURf
TVVURVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhf
UkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhf
RVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05P
Uk1BTAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BS
T0NFU1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJf
TlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19Q
UkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05Q
ID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUAp9OwoKCgoKCgpzdHJ1Y3QgX3B0aHJl
YWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwogIHZvaWQg
Kl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVm
ZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRI
UkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQs
CgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNDEgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90ICpfX3RocmVh
ZCwgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICooKl9fc3RhcnRfcm91dGlu
ZSkgKHZvaWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gcHRocmVhZF90
IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFs
IChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRo
cmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpf
X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRl
IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRf
YXR0cl90ICpfX2F0dHIsIGludCAqX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIF9f
Y29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19h
dHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50
IF9fcG9saWN5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRw
b2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50ICpfX3BvbGljeSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVh
ZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9faW5oZXJpdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19h
dHRyLCBpbnQgKl9faW5oZXJpdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwgaW50ICpfX3Njb3BlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90IF9fZ3Vh
cmRzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXpl
IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCAqX19ndWFyZHNpemUpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChwdGhy
ZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19hdHRyLCB2b2lkICoqX19zdGFja2FkZHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90IF9f
c3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tz
aXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCAqX19zdGFja3NpemUp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVh
ZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9w
YXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBh
cmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgKl9fcG9saWN5LCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRj
b25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1
cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFk
X211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgX19jb25zdCBwdGhyZWFkX211
dGV4YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgX19jb25zdCBwdGhyZWFkX211dGV4
YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9t
dXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4g
aW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4
X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAo
cHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVh
ZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4g
aW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq
X19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJl
YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFk
X211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwpl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9f
YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kg
KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9t
dXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQg
X19raW5kKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBl
IChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50ICpfX2tpbmQpIHRocm93
ICgpOwojIDMyMyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kLCBfX2NvbnN0IHB0aHJlYWRfY29uZGF0
dHJfdCAqX19jb25kX2F0dHIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9k
ZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90
ICpfX2NvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCwgcHRo
cmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19hYnN0aW1l
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJl
YWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u
ZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3J3
bG9jaywgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3
bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJl
YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j
aykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJl
YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpf
X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kg
KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3Qg
Kl9fYXR0ciwgaW50ICpfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50
IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dl
dGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50ICpfX3By
ZWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9u
cCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50IF9fcHJlZikgdGhyb3cgKCk7CiMg
NDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgX19wdGhyZWFkX2tleV9j
cmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZv
aWQgKikpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRf
a2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5
X3QgX19rZXksIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
cHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwgX19jb25zdCB2b2lkICpf
X3BvaW50ZXIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqX19wdGhyZWFkX2dldHNwZWNpZmlj
IChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0
c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwojIDQ0NSAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IF9fcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2Vf
dCAqX19vbmNlX2NvbnRyb2wsIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRy
b2wsIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190
eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNl
bCAocHRocmVhZF90IF9fdGhyZWFkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRf
dGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNDgxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o
IiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2Ns
ZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksIHZvaWQg
Kl9fYXJnKSB0aHJvdyAoKTsKIyA0OTEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJu
IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZl
ciAqX19idWZmZXIsIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDUwMiAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0
cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIHZvaWQgKCpfX3JvdXRpbmUp
ICh2b2lkICopLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNTEzICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIGludCBfX2V4ZWN1dGUpIHRocm93
ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91
c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNr
IChpbnQgX19ob3csIF9fY29uc3QgX19zaWdzZXRfdCAqX19uZXdtYXNrLCBfX3NpZ3NldF90ICpf
X29sZG1hc2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90
IF9fdGhyZWFkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMgNTE5ICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAyIDMKIyA1MzQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBf
X3B0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksIHZvaWQgKCpfX3BhcmVu
dCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksIHZvaWQgKCpfX3BhcmVu
dCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRocm93ICgpOwoKCgpl
eHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAodm9pZCkgdGhyb3cgKCk7Cgp9CiMgMjEg
Ii91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLWxvY2suaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfbXV0
ZXhfdCBfSU9fbG9ja190OwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE3MCAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9f
bWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwoj
IDE4NyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50
IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsK
ICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9J
T193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7
CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lP
X2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIg
Kl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAg
aW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQg
X2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRi
dWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMjMzICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKICBpbnQgX3VudXNlZDJbMTZdOwoKfTsKCgoKCgpz
dHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFf
c3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRl
cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDI2MiAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICogX19j
b29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwojIDI3MSAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqIF9fY29v
a2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLCBzaXplX3QgX19uKTsKIyAyODAgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqIF9fY29va2llLCBf
X29mZl90IF9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lk
ICogX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rp
b25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBl
ZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xv
c2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9f
cmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNl
ZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsK
dHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsK
CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEUgX19maWxlOwogIGNv
bnN0IHZvaWQgKl9fdnRhYmxlOwogIHZvaWQgKl9fY29va2llOwogIF9JT19jb29raWVfaW9fZnVu
Y3Rpb25zX3QgX19pb19mdW5jdGlvbnM7Cn07CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50
IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBp
bnQpIHRocm93ICgpOwojIDMzNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBf
SU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChp
bnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAq
X19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpf
X2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
IyAzNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9J
T19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fZ251Y192YV9s
aXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fdmZwcmludGYg
KF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFf
bGlzdCkgdGhyb3cgKCk7CgpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBp
bnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklM
RSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVr
b2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9f
b2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgp
OwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgp
OwoKCn0KIyA1OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgp0eXBlZGVmIF9fb2ZmX3Qg
ZnBvc190OwoKCgoKdHlwZWRlZiBfX29mZjY0X3QgZnBvczY0X3Q7CiMgMTEwICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAx
MTEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRl
cm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgoKZXh0ZXJuIGludCBy
ZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJl
bmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTQwICIvdXNyL2lu
Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsK
CgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE2MCAiL3Vzci9pbmNsdWRlL3N0
ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29u
c3QgY2hhciAqX19wZngpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpm
cmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwojIDIwMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k
ZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklM
RSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29r
aWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBfSU9fY29va2llX2lvX2Z1bmN0
aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1z
dHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLCBzaXplX3QgKl9fcmVzdHJpY3QgX19z
aXplbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmLCBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv
aWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1
ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAq
X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdnNw
cmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNu
cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IF9fdnNucHJp
bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CmV4dGVy
biBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0
aHJvdyAoKQoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMs
IDApKSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRy
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhy
b3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDAp
KSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50
ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt
dCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu
dGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVy
biBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwg
Li4uKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f
LCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg
dGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCgogICAg
IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJu
IGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgX19hcmcpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
c2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgX19hcmcpIHRocm93ICgpCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo
X19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRj
X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91
bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQg
X19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24s
IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZn
ZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9f
cykgdGhyb3cgKCk7CiMgNDEzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6
ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jl
c3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0
aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBf
X2xpbmVwdHIsIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19zc2l6ZV90IGdldGxp
bmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwg
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZnB1
dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6
ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNp
emVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6
ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f
c2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7Cgpl
eHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9f
cHRyLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcg
aW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxs
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKIyA0OTMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp
bnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0
aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3Nf
dCAqX19yZXN0cmljdCBfX3BvcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxF
ICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MjcgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBf
X29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3Qg
ZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmdldHBvczY0
IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3Bvcykg
dGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3Qg
ZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsK
CgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lz
X2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwg
X19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpf
X3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93
ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3Ry
dWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAo
c3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cgKCk7CiMgNjE0ICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwojIDYzOCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKfQojIDM2ICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNyAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9jKyt0aHJlYWRzLmgiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvYysrdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQgewoKICBzdHJ1Y3QgX19u
dWxsX211dGV4dCB7IH07CiAgdHlwZWRlZiBfX251bGxfbXV0ZXh0IF9fbXV0ZXh0X3R5cGU7Cgp9
CiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0
cmVhbXNpemU7CgogIHR5cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZw
b3NfdCBfX2Nfc3RyZWFtcG9zOwoKCgoKICB0eXBlZGVmIGludCBfX2NfbG9jazsKCgoKCgogIHR5
cGVkZWYgRklMRSBfX2NfZmlsZV90eXBlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAg
dHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9
IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0Owog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
b2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAw
ODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
dW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2Fz
ZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0g
MHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
YmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWls
Yml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDAg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9nKysvYml0cy9mcG9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDEgMwoj
IDM5ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3
Y2hhci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9s
b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF9jc3RkaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytj
b25maWcuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGRfY3N0ZGFyZy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkYXJnLmgiIDMK
IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRhcmcuaCIgMiAzCgoK
CgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6dmFfbGlzdDsKfQojIDQxICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2NzdGRpby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNDIg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDQ0ICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDQ1ICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz
dGRpby5oIiAyIDMKIyA5NCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkaW8uaCIgMwpuYW1lc3BhY2Ugc3Rk
CnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIGV4dGVybiAiQyIgaW50IHJl
bW92ZShjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIqLCBj
b25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBGSUxFKiB0bXBmaWxlKHZvaWQpOwogIGV4dGVybiAi
QyIgY2hhciogdG1wbmFtKGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBmY2xvc2UoRklMRSopOwog
IGV4dGVybiAiQyIgaW50IGZmbHVzaChGSUxFKik7CiAgZXh0ZXJuICJDIiBGSUxFKiBmb3Blbihj
b25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgRklMRSogZnJlb3Blbihjb25z
dCBjaGFyKiwgY29uc3QgY2hhciosIEZJTEUqKTsKICBleHRlcm4gIkMiIHZvaWQgc2V0YnVmKEZJ
TEUqLCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgc2V0dmJ1ZihGSUxFKiwgY2hhciosIGludCwg
c2l6ZV90KTsKICBleHRlcm4gIkMiIGludCBmcHJpbnRmKEZJTEUqLCBjb25zdCBjaGFyKiwgLi4u
KTsKICBleHRlcm4gIkMiIGludCBmc2NhbmYoRklMRSosIGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4
dGVybiAiQyIgaW50IHByaW50Zihjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBz
Y2FuZihjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBzbnByaW50ZihjaGFyICos
IHNpemVfdCwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgc3ByaW50ZihjaGFy
ICosIGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNzY2FuZihjb25zdCBjaGFy
KiwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgdmZwcmludGYoRklMRSosIGNv
bnN0IGNoYXIqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2ZnNjYW5mKEZJTEUqLCBjb25z
dCBjaGFyKiwgdmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnByaW50Zihjb25zdCBjaGFyKiwg
dmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnNjYW5mKGNvbnN0IGNoYXIqLCB2YV9saXN0KTsK
ICBleHRlcm4gIkMiIGludCB2c25wcmludGYoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIHZh
X2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZzcHJpbnRmKGNoYXIqLCBjb25zdCBjaGFyKiwgdmFf
bGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnNzY2FuZihjb25zdCBjaGFyKiwgY29uc3QgY2hhcios
IHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IGZnZXRjKEZJTEUgKik7CiAgZXh0ZXJuICJDIiBj
aGFyICpmZ2V0cyhjaGFyKiwgaW50LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dGMoaW50
LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dHMoY29uc3QgY2hhciosIEZJTEUqKTsKICBl
eHRlcm4gIkMiIGludCBnZXRjKEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBnZXRjaGFyKHZvaWQp
OwogIGV4dGVybiAiQyIgY2hhciAqZ2V0cyhjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgcHV0Yyhp
bnQsIEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBwdXRjaGFyKGludCk7CiAgZXh0ZXJuICJDIiBp
bnQgcHV0cyhjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgdW5nZXRjKGludCwgRklMRSop
OwogIGV4dGVybiAiQyIgc2l6ZV90IGZyZWFkKHZvaWQqLCBzaXplX3QsIHNpemVfdCwgRklMRSop
OwogIGV4dGVybiAiQyIgc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkKiwgc2l6ZV90LCBzaXplX3Qs
IEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmZ2V0cG9zKEZJTEUqLCBmcG9zX3QqKTsKICBleHRl
cm4gIkMiIGludCBmc2VlayhGSUxFKiwgbG9uZyBpbnQsIGludCk7CiAgZXh0ZXJuICJDIiBpbnQg
ZnNldHBvcyhGSUxFKiwgY29uc3QgZnBvc190Kik7CiAgZXh0ZXJuICJDIiBsb25nIGludCBmdGVs
bChGSUxFKik7CiAgZXh0ZXJuICJDIiB2b2lkIHJld2luZChGSUxFKik7CiAgZXh0ZXJuICJDIiB2
b2lkIGNsZWFyZXJyKEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmZW9mKEZJTEUqKTsKICBleHRl
cm4gIkMiIGludCBmZXJyb3IoRklMRSopOwogIGV4dGVybiAiQyIgdm9pZCBwZXJyb3IoY29uc3Qg
Y2hhciopOwp9CiMgNDIgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGRfY3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMg
NTMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MSAzCiMgMjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL3N0ZGlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCgoK
CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDUz
ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IGNvdW50Owog
IHdpbnRfdCB2YWx1ZTsKfSBtYnN0YXRlX3Q7CiMgNzcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CnN0cnVjdCB0bTsKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3Jj
KSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4
dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCB3Y3NjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf
X3MyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Mx
LCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq
X19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90
ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoK
IyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAxMTMgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAyIDMKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19z
MSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0
IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj
aGFyX3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVf
dCBfX24pIHRocm93ICgpOwojIDEzNiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIGlu
dCBfX3djc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9f
czIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hm
cm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uLCBf
X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19j
b25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqX19nbGliY3Bw
X3djc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKSB0aHJvdyAoKTsK
CmV4dGVybiB3Y2hhcl90ICpfX2dsaWJjcHBfd2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3dj
cywgd2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2Nv
bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qg
d2NoYXJfdCAqX19hY2NlcHQpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9f
Y29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpIHRocm93ICgp
OwoKCmV4dGVybiB3Y2hhcl90ICpfX2dsaWJjcHBfd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9f
aGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpIHRocm93ICgpOwojIDE3NCAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLCB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IF9fd2NzbGVu
IChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCk7CmV4dGVybiBzaXplX3Qgd2NzbGVuIChf
X2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAo
X19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX21heGxlbikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gd2NoYXJfdCAqX19nbGliY3BwX3dtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hh
cl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3bWVtY21wIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNweSAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z
Miwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUgKHdj
aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCk7CgoKCmV4
dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJf
dCBfX3djLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBz
aXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24s
IG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgbWJy
bGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLCBtYnN0YXRlX3Qg
Kl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwgX19j
b25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9f
cmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMgKGNo
YXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LCBf
X2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsIHNpemVfdCBfX2xl
biwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXpl
X3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAq
X19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
d2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZs
b2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3Rv
bGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50
IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0
aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
d2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDM1NSAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAzNTYg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25n
IGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9j
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIF9f
d2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVybmFs
IChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQg
X193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAo
X19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKiogX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29u
c3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9f
Y29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqIF9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA0ODIgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVz
dCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3
Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBf
X24pIHRocm93ICgpOwojIDUwMiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDU0ICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyA2OCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIuaCIgMwpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDEyMCAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9jd2NoYXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgZXh0ZXJu
ICJDIiB3aW50X3QgYnRvd2MoaW50KTsKICBleHRlcm4gIkMiIGludCB3Y3RvYih3aW50X3QpOwog
IGV4dGVybiAiQyIgd2ludF90IGZnZXR3YyhGSUxFKik7CiAgZXh0ZXJuICJDIiB3Y2hhcl90KiBm
Z2V0d3Mod2NoYXJfdCosIGludCwgRklMRSopOwogIGV4dGVybiAiQyIgd2ludF90IGZwdXR3Yyh3
Y2hhcl90LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dHdzKGNvbnN0IHdjaGFyX3QqLCBG
SUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZndpZGUoRklMRSosIGludCk7CiAgZXh0ZXJuICJDIiBp
bnQgZndwcmludGYoRklMRSosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50
IGZ3c2NhbmYoRklMRSosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHN3
cHJpbnRmKHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4dGVybiAi
QyIgaW50IHN3c2NhbmYoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4
dGVybiAiQyIgaW50IHZmd3ByaW50ZihGSUxFKiwgY29uc3Qgd2NoYXJfdCosIHZhX2xpc3QpOwog
IGV4dGVybiAiQyIgaW50IHZmd3NjYW5mKEZJTEUqLCBjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7
CiAgZXh0ZXJuICJDIiBpbnQgdnN3cHJpbnRmKHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFy
X3QqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2c3dzY2FuZihjb25zdCB3Y2hhcl90Kiwg
Y29uc3Qgd2NoYXJfdCosIHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZ3cHJpbnRmKGNvbnN0
IHdjaGFyX3QqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2d3NjYW5mKGNvbnN0IHdjaGFy
X3QqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QqLCAu
Li4pOwogIGV4dGVybiAiQyIgaW50IHdzY2FuZihjb25zdCB3Y2hhcl90KiwgLi4uKTsKICBleHRl
cm4gIkMiIHdpbnRfdCBnZXR3YyhGSUxFKiBzdHJlYW0pOwogIGV4dGVybiAiQyIgd2ludF90IGdl
dHdjaGFyKHZvaWQpOwogIGV4dGVybiAiQyIgaW50IG1ic2luaXQoY29uc3QgbWJzdGF0ZV90Kik7
CiAgZXh0ZXJuICJDIiBzaXplX3QgbWJybGVuKGNvbnN0IGNoYXIqLCBzaXplX3QsIG1ic3RhdGVf
dCopOwogIGV4dGVybiAiQyIgc2l6ZV90IG1icnRvd2Mod2NoYXJfdCosIGNvbnN0IGNoYXIqLCBz
aXplX3QsIG1ic3RhdGVfdCopOwogIGV4dGVybiAiQyIgc2l6ZV90IG1ic3J0b3djcyh3Y2hhcl90
KiwgY29uc3QgY2hhcioqLCBzaXplX3QsIG1ic3RhdGVfdCopOwogIGV4dGVybiAiQyIgc2l6ZV90
IHdjc3J0b21icyhjaGFyKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QqKTsK
ICBleHRlcm4gIkMiIHdpbnRfdCBwdXR3Yyh3Y2hhcl90LCBGSUxFKik7CiAgZXh0ZXJuICJDIiB3
aW50X3QgcHV0d2NoYXIod2NoYXJfdCk7CiAgZXh0ZXJuICJDIiB3aW50X3QgdW5nZXR3Yyh3aW50
X3QsIEZJTEUqKTsKICBleHRlcm4gIkMiIHNpemVfdCB3Y3J0b21iKGNoYXIqLCB3Y2hhcl90LCBt
YnN0YXRlX3QqKTsKICBleHRlcm4gIkMiIGRvdWJsZSB3Y3N0b2QoY29uc3Qgd2NoYXJfdCosIHdj
aGFyX3QqKik7CiAgZXh0ZXJuICJDIiBmbG9hdCB3Y3N0b2YoY29uc3Qgd2NoYXJfdCosIHdjaGFy
X3QqKik7CiAgZXh0ZXJuICJDIiBsb25nIGludCB3Y3N0b2woY29uc3Qgd2NoYXJfdCosIHdjaGFy
X3QqKiwgaW50KTsKICBleHRlcm4gIkMiIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwoY29uc3Qg
d2NoYXJfdCosIHdjaGFyX3QqKiwgaW50KTsKICBleHRlcm4gIkMiIHdjaGFyX3QqIHdjc2NweSh3
Y2hhcl90KiBzMSwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiAiQyIgd2NoYXJfdCogd2NzbmNw
eSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiB3Y2hhcl90
KiB3Y3NjYXQod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKICBleHRlcm4gIkMiIHdjaGFyX3Qq
IHdjc25jYXQod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpOwogIGV4dGVybiAiQyIg
aW50IHdjc2NtcChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiAiQyIg
aW50IHdjc2NvbGwoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKICBleHRlcm4gIkMi
IGludCB3Y3NuY21wKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKICBl
eHRlcm4gIkMiIHNpemVfdCB3Y3N4ZnJtKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90
KTsKICBleHRlcm4gIkMiIGNvbnN0IHdjaGFyX3QqIHdjc2Nocihjb25zdCB3Y2hhcl90Kiwgd2No
YXJfdCk7CiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBf
X2MpCiAgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8d2NoYXJfdCo+KHdjc2Nocihjb25zdF9jYXN0
PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpKTsKICB9CiAgZXh0ZXJuICJDIiBzaXplX3Qgd2Nz
Y3Nwbihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiAiQyIgc2l6ZV90
IHdjc2xlbihjb25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuICJDIiBjb25zdCB3Y2hhcl90KiB3Y3Nw
YnJrKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7CiAgaW5saW5lIHdjaGFyX3QqCiAg
d2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsKICAgIHJldHVybiBjb25z
dF9jYXN0PHdjaGFyX3QqPih3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEp
LCBfX3MyKSk7CiAgfQogIGV4dGVybiAiQyIgY29uc3Qgd2NoYXJfdCogd2NzcmNocihjb25zdCB3
Y2hhcl90Kiwgd2NoYXJfdCk7CiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90KiBf
X3AsIHdjaGFyX3QgX19jKQogIHsKICAgIHJldHVybiBjb25zdF9jYXN0PHdjaGFyX3QqPih3Y3Ny
Y2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYykpOwogIH0KICBleHRlcm4g
IkMiIHNpemVfdCB3Y3NzcG4oY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKICBleHRl
cm4gIkMiIGNvbnN0IHdjaGFyX3QqIHdjc3N0cihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJf
dCopOwogIGlubGluZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBf
X3MyKQogIHsKICAgIHJldHVybiBjb25zdF9jYXN0PHdjaGFyX3QqPih3Y3NzdHIoY29uc3RfY2Fz
dDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpKTsKICB9CiAgZXh0ZXJuICJDIiB3Y2hhcl90
KiB3Y3N0b2sod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KiopOwogIGV4dGVybiAi
QyIgY29uc3Qgd2NoYXJfdCogd21lbWNocihjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCwgc2l6ZV90
KTsKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2Ms
IHNpemVfdCBfX24pCiAgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8d2NoYXJfdCo+KHdtZW1jaHIo
Y29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pKTsKICB9CiAgZXh0ZXJu
ICJDIiBpbnQgd21lbWNtcChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7
CiAgZXh0ZXJuICJDIiB3Y2hhcl90KiB3bWVtY3B5KHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwg
c2l6ZV90KTsKICBleHRlcm4gIkMiIHdjaGFyX3QqIHdtZW1tb3ZlKHdjaGFyX3QqLCBjb25zdCB3
Y2hhcl90Kiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHdjaGFyX3QqIHdtZW1zZXQod2NoYXJfdCos
IHdjaGFyX3QsIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgd2NzZnRpbWUod2NoYXJfdCos
IHNpemVfdCwgY29uc3Qgd2NoYXJfdCosIGNvbnN0IHN0cnVjdCB0bSopOwp9CiMgNDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdGF0ZV90eXBlIF9N
X3N0OwogICAgICBzdHJlYW1vZmYgX01fb2ZmOwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90
eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAg
ICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZw
b3MoKTogX01fc3QoX19zdGF0ZV90eXBlKCkpLCBfTV9vZmYoc3RyZWFtb2ZmKCkpIHsgfQoKICAg
ICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBl
KCkpCiAgICAgIDogX01fc3QoX19zdCksIF9NX29mZihfX29mZikgeyB9CgogICAgICBvcGVyYXRv
ciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAg
IG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0
aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBf
TV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0
b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgdCgqdGhpcyk7CiAgICAg
ICAgcmV0dXJuIHQgKz0gX19vZmY7CiAgICAgIH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y
LShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIHQoKnRoaXMpOwogICAgICAg
IHJldHVybiB0IC09IF9fb2ZmOwogICAgICB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yPT0o
Y29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9PSBfX3Bvcy5f
TV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9zJiBfX3Bvcykg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoKICAgICAgc3Ry
ZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAg
ICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29m
ZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCiAgdHlw
ZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA0MiAiL3Vzci9sb2NhbC9nY2Mz
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9p
b3Nmd2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz
CiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2
b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQK
ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZs
b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z
dCBjaGFyKiBfX3MpOwp9CiMgNDMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g
Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog
ICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lz
dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5h
bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVm
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg
ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
b3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh
bGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp
Y19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlz
dHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVy
YXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlv
czsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBi
YXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+
IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3Ry
aW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3Ry
ZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hh
cj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwog
IHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19v
ZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0
cmVhbTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNp
Y19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4gd2lvc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19p
c3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0
cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmlu
Z3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3
Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cgp9CiMgNDkgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVz
LmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0
X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlu
cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDog
cHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9y
IHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3Ry
dWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJl
ZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0
IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0
b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5j
ZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAm
IHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0
cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVy
OwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NhdGVnb3J5LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwK
ICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0gX1RwKiwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCY+
CnN0cnVjdCBpdGVyYXRvciB7CiAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSBy
ZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3Jf
dHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5
cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90
eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRl
ciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJl
bmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAq
PiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNl
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBf
VHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0
IF9UcCYgcmVmZXJlbmNlOwp9OwojIDE0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5
cGVzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25z
dCBfSXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0
ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46
OmRpZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVy
biBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVy
JikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
Ojp2YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2Nh
dGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19p
KTsgfQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYg
X19pKSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9J
dGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoK
dmFsdWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsg
fQoKfQojIDUwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAz
NCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgt
Z251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVjay5o
IiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYg
X19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5j
ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs
IF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7
ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJl
dHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0KQp7CgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJh
dG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0YW5j
ZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0ZXIm
IF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdo
aWxlIChfX24tLSkgKytfX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBp
ZiAoX19uID4gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9f
bisrKSAtLV9faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
JiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX2kgKz0gX19u
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5s
aW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQp7Cgog
IF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0KIyA1MSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9y
LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBf
Q29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv
aWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9p
ZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm
IF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFp
bmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYg
X192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcioo
KSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpj
bGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29u
dGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5
cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZv
aWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250
X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBl
bmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250YWluZXItPnB1
c2hfZnJvbnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9u
dF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp
czsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5l
IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFp
bmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9f
eCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWlu
ZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy
X3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgaW5z
ZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0
b3IgX19pKQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6
dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIs
IF9fdmFsdWUpOwogICAgKytpdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBp
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp
czsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5s
aW5lCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gs
IF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9y
IF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVy
KF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3Mg
X1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9
IHB0cmRpZmZfdD4KY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBl
ZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y
LCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5j
ZSwgX0Rpc3RhbmNlPiBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Ig
Y3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0
YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBf
UmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkg
e30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9u
YWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJh
dG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50
OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1j
dXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewog
ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsK
ICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlz
OwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2Vf
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9f
eSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IGJvb2wgb3BlcmF0b3IhPSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2Vf
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9f
eSkKewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CiMgMTkzICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJh
dG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRv
cgp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAg
ICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAg
ICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVu
Y2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigp
IHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJy
ZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJl
bnQoX194LmN1cnJlbnQpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRl
cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChf
X3guYmFzZSgpKSB7fQoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJy
ZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3Rt
cCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisr
KCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRv
cisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJl
dHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBf
X3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1Nl
bGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2Vs
ZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBl
IF9fbikgewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxm
IG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYo
Y3VycmVudCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBf
X24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByZWZlcmVu
Y2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlz
ICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewog
IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRl
cmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09
IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9y
Pihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJu
IF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewog
IHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu
ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0
b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
CiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJl
dHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRv
cj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpvcGVyYXRvcisodHlwZW5hbWUg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAg
ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+
CmNsYXNzIGlzdHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKCiAgaXN0cmVhbV9pdGVyYXRvcigpIDog
X01fc3RyZWFtKDApLCBfTV9vayhmYWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW1f
dHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsgfQoKICByZWZlcmVuY2Ug
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KICBwb2ludGVyIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9y
JiBvcGVyYXRvcisrKCkgewogICAgX01fcmVhZCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBp
c3RyZWFtX2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yIF9f
dG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBib29s
IF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkgY29uc3QKICAgIHsgcmV0dXJu
IChfTV9vayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9z
dHJlYW0pOyB9Cgpwcml2YXRlOgogIGlzdHJlYW1fdHlwZSogX01fc3RyZWFtOwogIF9UcCBfTV92
YWx1ZTsKICBib29sIF9NX29rOwoKICB2b2lkIF9NX3JlYWQoKSB7CiAgICBfTV9vayA9IChfTV9z
dHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgICBpZiAoX01fb2spIHsKICAg
ICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8gdHJ1
ZSA6IGZhbHNlOwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFy
VCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29u
c3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAg
ICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rp
c3Q+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBi
b29sCm9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0
cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9D
aGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kp
Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIs
IGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KY2xhc3Mgb3N0cmVhbV9pdGVy
YXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgdHlwZWRlZiBfVHJh
aXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
IG9zdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j
ZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9f
cyksIF9NX3N0cmluZygwKSB7fQogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3Ms
IGNvbnN0IF9DaGFyVCogX19jKQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2Mp
IHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVl
KSB7CiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3Ry
ZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRv
cjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8
X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxf
VHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KcHJpdmF0ZToKICBvc3RyZWFt
X3R5cGUqIF9NX3N0cmVhbTsKICBjb25zdCBfQ2hhclQqIF9NX3N0cmluZzsKfTsKIyA0MTcgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5
cGVuYW1lIF9Db250YWluZXI+CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRl
cmF0b3I8aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAg
ICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAog
ICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBv
aW50ZXIsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJl
ZmVyZW5jZT4KewoKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgog
IHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxf
aXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJh
aXRzX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRl
Z29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6
OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6
OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3Ry
YWl0c190eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190
eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3Vy
cmVudChfSXRlcmF0b3IoKSkgeyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0
IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgp
KSB7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJy
ZW50OyB9CgogIHBvaW50ZXIKICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVu
dDsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJl
bnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKyso
aW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3Jt
YWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAq
dGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVy
biBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVy
YXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1
cnJlbnRbX19uXTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0
IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhp
czsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNl
X3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50
ICsgX19uKTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRp
ZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsg
fQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5
cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0g
X19uKTsgfQoKICBkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJh
dG9yX3R5cGUmIF9faSkgY29uc3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJl
bnQ7IH0KCiAgY29uc3QgX0l0ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJy
ZW50OyB9Cn07CgoKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy
YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo
cykKeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9f
cmhzKTsgfQoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0
b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAg
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7
IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+Cmlu
bGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBf
Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1l
IF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShf
X3JocyA8IF9fbGhzKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg
X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAg
ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m
IF9fcmhzKQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9
Cgp9CiMgNTIgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Nv
bmNlcHRfY2hlY2suaCIgMSAzCiMgNTMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9G
b3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJ
dGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9fYTsK
ICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0Zvcndh
cmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChfX2Es
IF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUg
dm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7CiAg
X19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp
bmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25z
dCBfVHAmIF9fYikgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVy
biBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29u
c3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2Nv
bXApIHsKCiAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBt
YXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAg
aWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KIyAxMzcgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19j
b3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywg
X0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9f
biA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsK
ICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z
dCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly
c3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQg
KyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2NvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu
ZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIF9U
cCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0
dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl
X3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBf
VHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9PdXRwdXRJdGVyKF9f
Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0
ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90
eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192
YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwog
IHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3Vs
dCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0
dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9P
dXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+Ojpf
Tm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9f
bGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNl
IF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQg
PSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAg
IGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJh
dG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9E
aXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQo
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxf
VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBf
X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3QgcHRy
ZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9O
dW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1cm4gX19yZXN1bHQgLSBf
TnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRf
ZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBj
b3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQp
IHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVl
X3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3
YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkky
Pjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3
YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5
cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0
ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7
CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4K
aW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBf
X2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKXsKICByZXR1cm4gX19j
b3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUg
PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2Fy
ZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0
LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf
QkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9u
b3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgp
KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkky
IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19u
b3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9i
YWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFs
KCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9C
STIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5
X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFs
KCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQg
PiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0
OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0
ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0
ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7
CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJ
dGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0
cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9J
bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsK
ICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxf
SW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUg
X19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4g
X19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOwp9CgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg
Kl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9y
ICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwog
IHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hhciogX19m
aXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9f
Zmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChzaWdu
ZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICBj
b25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVt
c2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0g
X19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0
LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSB1bnNpZ25lZCBjaGFyKiBmaWxsX24odW5z
aWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJzdCAr
IF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9T
aXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBm
aWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIGNoYXIqIGZpbGxfbihjaGFyKiBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJz
dCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CnBhaXI8X0lucHV0SXRlcjEsIF9J
bnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJz
dDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs
IF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl
cjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICArK19fZmlyc3QxOwog
ICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIy
PihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCEoKl9fZmlyc3QxID09ICpf
X2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICgg
OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFf
X2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwog
IHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJz
dDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19m
aXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1
cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1
cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJz
dDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBp
bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl
bjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9f
bGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciog
X19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7Cgog
IHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFy
KikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l
ZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8z
d2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0x
OwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19f
Zmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsK
ICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVy
biAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNv
bnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRp
ZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVu
MiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19m
aXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQg
IT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgOiAoX19sZW4xID09IF9fbGVu
MiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19sZXhp
Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFy
KiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19m
aXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln
bmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJl
dHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9f
Zmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDI4ICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9j
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9m
dW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBf
X3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Mo
dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5n
ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq
IF9fcyk7Cn0KIyAyOSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2NzdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGRfY2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMK
IyAzNSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIgMwojIDU4ICIvdXNyL2luY2x1
ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAo
X19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsIHVuc2lnbmVk
IGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikgdGhyb3cgKCkKCgoKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVy
cm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsIHVuc2lnbmVkIGlu
dCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikgdGhyb3cgKCkKCgoKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7Cgp9CiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2Fzc2Vy
dC5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCgoKCgojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90aHJlYWRzLmgiIDMK
bmFtZXNwYWNlIHN0ZAp7CiMgNTQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBf
UmVmY291bnRfQmFzZQp7CgoKCgogIHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCgogICB2b2xhdGls
ZSBfUkNfdCBfTV9yZWZfY291bnQ7CiMgNzYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAg
X1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pIHt9CiMgMTExICIv
dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
ZysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsgKytfTV9yZWZfY291
bnQ7IH0KICBfUkNfdCBfTV9kZWNyKCkgeyByZXR1cm4gLS1fTV9yZWZfY291bnQ7IH0KCn07CiMg
MjAyICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBsb25nIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBsb25nICogX19wLCB1bnNpZ25lZCBsb25nIF9f
cSkgewogICAgICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwogICAgICAgICpfX3Ag
PSBfX3E7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDIyMyAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
bF90aHJlYWRzLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CnN0cnVjdCBfU1RMX211dGV4X3Nw
aW4gewogIGVudW0geyBfX2xvd19tYXggPSAzMCwgX19oaWdoX21heCA9IDEwMDAgfTsKCgogIHN0
YXRpYyB1bnNpZ25lZCBfX21heDsKICBzdGF0aWMgdW5zaWduZWQgX19sYXN0Owp9OwoKdGVtcGxh
dGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX21heCA9
IF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX2xvd19tYXg7Cgp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbGFzdCA9IDA7CgpzdHJ1Y3Qg
X1NUTF9tdXRleF9sb2NrCnsKIyAzMjkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdm9p
ZCBfTV9pbml0aWFsaXplKCkge30KICB2b2lkIF9NX2FjcXVpcmVfbG9jaygpIHt9CiAgdm9pZCBf
TV9yZWxlYXNlX2xvY2soKSB7fQoKfTsKIyAzNTUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAz
CnN0cnVjdCBfU1RMX2F1dG9fbG9jawp7CiAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICBf
U1RMX2F1dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykK
ICAgIHsgX01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogIH5fU1RMX2F1dG9fbG9jaygpIHsg
X01fbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKcHJpdmF0ZToKICB2b2lkIG9wZXJhdG9yPShj
b25zdCBfU1RMX2F1dG9fbG9jayYpOwogIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19s
b2NrJik7Cn07Cgp9CiMgMzkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgNjggIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGxfYWxsb2MuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGludCBfX2lu
c3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2
b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9j
KHZvaWQqLCBzaXplX3QpOwogIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k
bGVyKSgpOwoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7
CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQp
IF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0K
CiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgewogICAgZnJl
ZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg
LCBzaXplX3QgX19uZXdfc3opCiAgewogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwg
X19uZXdfc3opOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxs
b2MoX19wLCBfX25ld19zeik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9p
ZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogIHsKICAgIHZvaWQg
KCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgIF9fbWFsbG9jX2Fs
bG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgcmV0dXJuKF9fb2xkKTsKICB9Cgp9OwoKCgp0ZW1w
bGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7Cgp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4Kdm9pZCoKX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhz
aXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lk
KiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9
IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9j
X2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAgICAgICAgKCpfX215X21h
bGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAg
aWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IF9f
aW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxs
b2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRs
ZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9t
YWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgw
ID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAg
ICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxv
YyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAg
fQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRl
bXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVi
bGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4g
MCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHAp
KTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCop
IF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxv
Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6
ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRl
YWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9m
IChfVHApKTsgfQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19h
bGxvYyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19leHRyYSA9IDh9OwoKCgpwdWJsaWM6CgogIHN0
YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0g
KGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgKihzaXpl
X3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7
CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7
CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgo
dm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo
Iiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiwgMTkw
LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3Jl
YWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBj
aGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgodm9pZCkg
KCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgi
KihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIs
IDE5NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChj
aGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQp
IF9TX2V4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsg
KGludCkgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAgICBy
ZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICB9Cgp9OwoKCgoKdHlwZWRlZiBtYWxs
b2NfYWxsb2MgYWxsb2M7CnR5cGVkZWYgbWFsbG9jX2FsbG9jIHNpbmdsZV9jbGllbnRfYWxsb2M7
CiMgNTI2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xh
c3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYg
c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVm
ZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07
CgogIGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikg
dGhyb3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2Nh
dG9yPF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50
ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3Rf
cG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7
IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewog
ICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShf
X24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQg
ZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFs
bG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgp
IGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoK
ICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19w
KSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgp
OyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBl
ZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3Bv
aW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0
dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikK
ewogIHJldHVybiBmYWxzZTsKfQojIDYwMiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxs
b2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwog
IHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVu
Y2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2
YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0
b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhy
b3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxf
VHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5f
X3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2lu
dGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0
X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194
OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewog
ICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlp
bmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoK
ICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5k
ZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNp
emVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkg
LyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1Rw
JiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIg
X19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBf
X2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAg
dHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRl
cjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZh
bHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5
cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9f
YWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVy
bHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9j
YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19h
bGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5n
X2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUgPGludCBp
bnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+Cmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1
ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1
Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDczMiAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVj
dCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBm
YWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+
OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19p
bnN0YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBf
QWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29s
IF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxv
Yz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsK
fTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFp
dHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25z
dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1Rw
LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRl
ZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxv
Y2F0b3JfdHlwZTsKfTsKIyA3NzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdf
YWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B
bGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+
ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAx
LCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAg
ICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+
CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYg
c2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxv
Y190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CiMgODA4ICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9j
LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1
Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxv
Yz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5
cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBl
OwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2Nh
dG9yX3R5cGU7Cn07Cgp9CiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVj
dC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL2crKy9uZXciIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDQ3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAz
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChf
VDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7Cm5ldyAoKHZvaWQqKSBfX3ApIF9UMShfX3Zh
bHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChfVDEq
IF9fcCkgewogIG5ldyAoKHZvaWQqKSBfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgppbmxpbmUgdm9pZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9fcG9pbnRlci0+fl9U
cCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApfX2Rlc3Ryb3lf
YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9f
ZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAg
IGRlc3Ryb3koJipfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+
CmlubGluZSB2b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVy
YXRvciwgX190cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwg
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190
eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlh
bF9kZXN0cnVjdG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9k
ZXN0cnVjdG9yKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5l
IHZvaWQgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCkgewogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2Zp
cnN0KSk7Cn0KCmlubGluZSB2b2lkIF9EZXN0cm95KGNoYXIqLCBjaGFyKikge30KaW5saW5lIHZv
aWQgX0Rlc3Ryb3koaW50KiwgaW50Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kobG9uZyosIGxv
bmcqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikge30KaW5saW5lIHZv
aWQgX0Rlc3Ryb3koZG91YmxlKiwgZG91YmxlKikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kod2No
YXJfdCosIHdjaGFyX3QqKSB7fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp
bmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgewogIF9D
b25zdHJ1Y3QoX19wLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZv
aWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgX0NvbnN0cnVjdChfX3ApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX0Rlc3Ry
b3koX19wb2ludGVyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGlu
ZSB2b2lkIGRlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCkgewogIF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCn0KIyAzNiAiL3Vzci9s
b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgi
IDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwojIDEgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29w
eV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9G
b3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3
YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9f
Zmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19y
ZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
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
ICB0cnkgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCAr
K19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBw
YWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIpOwogIH0KICBjYXRj
aCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRl
cj4KaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRp
YWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAog
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nl
c3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJk
SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6
ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXpl
ZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUg
cGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1
dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJz
dCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9f
bGFzdCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2
b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf
X2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAg
ICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9f
Y3VyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOyB0
aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFz
dCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFs
dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmls
bF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxs
X25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIg
X19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f
Y3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAg
fQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFz
cyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwog
IHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lz
X1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNs
YXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKewogIHJldHVybiBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJz
dCkpOwp9CiMgMjMxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+
CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19t
aWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0
cnkgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19t
aWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7
IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5
KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVkX2Zp
bGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ry
b3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmlu
aXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9y
d2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
eCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEs
IF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0cnkgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlk
MiwgX19sYXN0MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3QyLCBf
X21pZDIpOyB0aHJvdzsgfTsKfQoKfQojIDM3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0
b3IuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyAz
NSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0
LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZXhjZXB0
aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nh
c3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAg
X190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19k
b21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9h
cmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJv
d19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMzYgIi91c3IvbG9jYWwvZ2NjMy9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdmVj
dG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM3ICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDQ4ICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJv
b2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBl
CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19i
YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9f
YSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30K
CnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9N
X3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9U
cCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9y
LmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBf
X24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24p
OyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9W
ZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw
ZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19i
YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgw
KSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3RhcnQ7
CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxv
Y190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxv
Y190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBz
aXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAg
OiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNz
Pgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNl
bGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRv
cl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9NX2Fs
bG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9y
YWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFsbG9j
YXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVj
dG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4KewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHJpdmF0ZToKICB0
eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8
X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90
eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwg
dmVjdG9yX3R5cGU+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3Rf
cG9pbnRlciwgdmVjdG9yX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlw
ZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl
OwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j
YXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxj
b25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2Vf
aXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcg
X0Jhc2U6Ol9NX2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5n
IF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNl
OjpfTV9lbmRfb2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRl
cmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChp
dGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAg
ICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gaXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoKICByZXZlcnNlX2l0
ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAg
IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihi
ZWdpbigpKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5
cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7
IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNp
dHkoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9v
Zl9zdG9yYWdlKSAtIGJlZ2luKCkpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVy
biBiZWdpbigpID09IGVuZCgpOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBf
X24pIHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0
b3JbXShzaXplX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9Cgog
IHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgaWYgKF9fbiA+
PSB0aGlzLT5zaXplKCkpCiAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsKICB9
CgogIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgeyBfTV9yYW5nZV9jaGVjayhfX24p
OyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBf
X24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07
IH0KCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBj
b25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBh
bGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0g
dW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGlj
aXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUo
KSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwg
X1RwKCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6
IF9CYXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9
IHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0K
CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVn
cmFsOwogICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7
CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1
eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9z
dGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0
ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9f
biwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9N
X3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsKICB9CgogIH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7
IH0KCiAgdmVjdG9yPF9UcCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feCk7CiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBh
Y2l0eSgpIDwgX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgp
OwogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFy
dCwgX01fZmluaXNoKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAg
X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAg
ICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6
ZTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIH0KICB9CgoK
CgoKCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9m
aWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBl
IF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+
OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9f
bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv
aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1
ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFs
KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNw
YXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUp
CiAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBf
TV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4g
KmJlZ2luKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVn
aW4oKTsgfQogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgY29u
c3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCiAgdm9p
ZCBwdXNoX2JhY2soY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5k
X29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytf
TV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7
CiAgfQogIHZvaWQgcHVzaF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zf
c3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7
CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOwogIH0KICB2b2lkIHN3
YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KSB7CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9f
eC5fTV9zdGFydCk7CiAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAg
IHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9
CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkg
ewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2Zp
bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAg
IGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAg
ZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pLCBfX3gpOwogICAg
cmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bv
c2l0aW9uKSB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBp
ZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkp
IHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQog
ICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJl
dHVybiBiZWdpbigpICsgX19uOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8
X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3Bh
dGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv
cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9f
biwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2
b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNl
cnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
CiAgfQoKICB2b2lkIGluc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0
IF9UcCYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogIHZv
aWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBf
VHAmIF9feCk7CgogIHZvaWQgcG9wX2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ry
b3koX01fZmluaXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg
ewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24g
KyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01f
ZmluaXNoKTsKICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVy
YXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9f
bGFzdCwgZW5kKCksIF9fZmlyc3QpKTsKICAgIGRlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9m
aW5pc2ggPSBfTV9maW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJz
dDsKICB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9f
eCkgewogICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBf
X25ld19zaXplLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6
ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUp
IHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJl
Z2luKCksIGVuZCgpKTsgfQoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4KICBwb2ludGVyIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9G
b3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBwb2ludGVyIF9f
cmVzdWx0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRf
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7IHRocm93
OyB9OwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFu
Z2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAg
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygq
X19maXJzdCk7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9p
ZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0
b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX24pOwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5k
X29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywK
ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsK
CiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNl
cnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYg
X194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUo
KSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCks
IF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbApvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBh
cmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3Rv
cjxfVHAsIF9BbGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8
X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNv
bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4m
IF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9f
eCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9U
cCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1Rw
LCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5
cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAg
ICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdp
bigpLCBfX3guZW5kKCkpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAg
ICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsK
ICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFy
dCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNpemUoKSA+PSBfX3hsZW4pIHsKICAgICAg
aXRlcmF0b3IgX19pKGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSkpOwogICAg
ICBkZXN0cm95KF9faSwgZW5kKCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJl
Z2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6
ZWRfY29weShfX3guYmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAg
fQogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9B
bGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFs
KQp7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190
bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwog
IH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9f
dmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19u
IC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBf
X24sIF9fdmFsKSwgZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9N
X2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewog
IGl0ZXJhdG9yIF9fY3VyKGJlZ2luKCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYg
X19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0
OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxz
ZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVj
dG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0LCBfX2xlbik7CgogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIHBv
aW50ZXIgX190bXAoX01fYWxsb2NhdGVfYW5kX2NvcHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCkp
OwogICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01f
c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3Rt
cDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsK
ICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5p
c2goY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBkZXN0cm95KF9fbmV3X2Zp
bmlzaCwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICB9CiAg
ZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21p
ZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgIF9NX2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9B
bGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gp
CnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3Qo
X01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgX1RwIF9f
eF9jb3B5ID0gX194OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9m
aW5pc2ggLSAyKSwgaXRlcmF0b3IoX01fZmluaXNoLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9f
eF9jb3B5OwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6
ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9f
b2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4p
KTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICB0cnkgewogICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBf
X3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdf
c3RhcnQpOwogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAg
KytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShf
X3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyAoZGVz
dHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0
LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsK
ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQp
OwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICBfTV9maW5pc2ggPSBfX25l
d19maW5pc2guYmFzZSgpOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNl
KCkgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p
ZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24p
CnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3Qo
X01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgY29weV9i
YWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwKICAgICAgICAgICAg
ICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsK
ICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAg
IGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXpl
IDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBw
b2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgdHJ5IHsKICAgICAgX19uZXdf
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsK
ICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3Io
X01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3
X2ZpbmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19u
ZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpOyB0aHJvdzsgfTsK
CiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQs
IF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFy
dDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2luc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6
ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgX1Rw
IF9feF9jb3B5ID0gX194OwogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVu
ZCgpIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7
CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9j
b3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2Zp
bmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5p
c2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0
aW9uICsgX19uLCBfX3hfY29weSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdW5pbml0
aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7
CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAg
ICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9f
b2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3Ig
X19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmlu
aXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmlu
aXRpYWxpemVkX2NvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAg
IF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBf
X3gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHko
X19wb3NpdGlvbiwgZW5kKCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u
KSB7IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19u
ZXdfc3RhcnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFy
dCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0
b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwog
ICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3Rv
cmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAg
X19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRv
ciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog
ICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7
CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24p
IHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRp
b247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19l
bGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2gg
LSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwog
ICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29s
ZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAg
ICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJz
dDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2gg
Kz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np
dGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2Vs
ZW1zX2FmdGVyOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAg
ICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBz
aXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19v
bGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19s
ZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5
IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01f
c3RhcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0
aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gK
ICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zp
bmlzaCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7IChkZXN0cm95
KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFz
ZSgpLF9fbGVuKSk7IHRocm93OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNo
KTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5p
c2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3
X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKfQojIDM4ICIvdXNyL2xvY2FsL2dj
YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk
X3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgMzQgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKc3RhdGljIGNvbnN0IGlu
dCBfX1dPUkRfQklUID0gaW50KDgqc2l6ZW9mKHVuc2lnbmVkIGludCkpOwoKc3RydWN0IF9CaXRf
cmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX21hc2s7
CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg
ICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2Uo
KSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShi
b29sIF9feCkKICB7CiAgICBpZiAoX194KSAqX01fcCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01f
cCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9w
ZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQogICAgeyByZXR1cm4gKnRoaXMgPSBi
b29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkg
Y29uc3QKICAgIHsgcmV0dXJuIGJvb2woKnRoaXMpID09IGJvb2woX194KTsgfQogIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhYm9v
bCgqdGhpcykgJiYgYm9vbChfX3gpOwogIH0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21h
c2s7IH0KfTsKCmlubGluZSB2b2lkIHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVy
ZW5jZSBfX3kpCnsKICBib29sIF9fdG1wID0gX194OwogIF9feCA9IF9feTsKICBfX3kgPSBfX3Rt
cDsKfQoKc3RydWN0IF9CaXRfaXRlcmF0b3JfYmFzZSA6IHB1YmxpYyByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25l
ZCBpbnQgX01fb2Zmc2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jhc2UodW5zaWduZWQgaW50KiBfX3gs
IHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAg
dm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9NX29mZnNldCsrID09IF9fV09SRF9CSVQgLSAx
KSB7CiAgICAgIF9NX29mZnNldCA9IDA7CiAgICAgICsrX01fcDsKICAgIH0KICB9CiAgdm9pZCBf
TV9idW1wX2Rvd24oKSB7CiAgICBpZiAoX01fb2Zmc2V0LS0gPT0gMCkgewogICAgICBfTV9vZmZz
ZXQgPSBfX1dPUkRfQklUIC0gMTsKICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgdm9pZCBfTV9p
bmNyKHB0cmRpZmZfdCBfX2kpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9v
ZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09SRF9CSVQ7CiAgICBfX24gPSBfX24gJSBfX1dP
UkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGlu
dCkgX19uICsgX19XT1JEX0JJVDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29m
ZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBf
Qml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPT0gX19pLl9N
X3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9f
aS5fTV9wIHx8IChfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQp
OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNv
bnN0IHsKICAgIHJldHVybiAhKCp0aGlzID09IF9faSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX19pIDwgKnRo
aXM7CiAgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkg
Y29uc3QgewogICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwogIH0KICBib29sIG9wZXJhdG9yPj0o
Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlz
IDwgX19pKTsKICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9wZXJhdG9yLShjb25zdCBfQml0X2l0
ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kpIHsKICByZXR1
cm4gX19XT1JEX0JJVCAqIChfX3guX01fcCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBf
X3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVy
YXRvcl9iYXNlCnsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVm
IF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRv
cjsKCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0Jp
dF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0Jp
dF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7IH0KICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7
CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVy
YXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0
ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAg
X01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRv
cis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewog
ICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0
b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRo
aXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0oZGlm
ZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg
IHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJl
bmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5saW5lIF9CaXRf
aXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9f
eCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBw
dWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJlbmNlOwogIHR5
cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29sKiBwb2ludGVy
OwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgX0JpdF9j
b25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9jb25z
dF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0Jp
dF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3Qg
X0JpdF9pdGVyYXRvciYgX194KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9f
eC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAg
ICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29u
c3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9p
dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1w
OwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkg
ewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwog
ICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJl
bmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0
aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJh
dG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3Rt
cCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgY29uc3RfaXRlcmF0b3Ig
b3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9y
IF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KICBjb25zdF9yZWZl
cmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICByZXR1cm4gKigqdGhp
cyArIF9faSk7CiAgfQp9OwoKaW5saW5lIF9CaXRfY29uc3RfaXRlcmF0b3IKb3BlcmF0b3IrKHB0
cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfY29uc3RfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194
ICsgX19uOyB9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3Rh
dGljPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAg
ICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9N
X3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVk
OgogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBf
TV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9C
SVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAg
ICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9N
X3ApOwogIH0KCiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgX01fZGF0YV9hbGxvY2F0b3I7CiAgX0JpdF9p
dGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICB1bnNpZ25lZCBp
bnQqIF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpj
bGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y
X3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2Fs
bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5p
c2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUK
ICAgICAgICAgIF9BbGxvY190eXBlOwoKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXpl
X3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKChfX24gKyBfX1dPUkRf
QklUIC0gMSkvX19XT1JEX0JJVCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAo
X01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01f
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRv
ciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rv
cl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxv
Y190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZl
Y3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Fs
bG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFz
ZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j
YXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDog
X0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgp
OyB9Cn07Cgp9CgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzMTggIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGxfYnZlY3Rvci5oIiAyIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgX0FsbG9jPgogIGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9y
X2Jhc2U8X0FsbG9jPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGJvb2wgdmFsdWVfdHlwZTsK
ICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlw
ZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBv
aW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogICAgdHlwZWRl
ZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy
YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv
cjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CdmVj
dG9yX2Jhc2U8X0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICBhbGxv
Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgewogICAgICByZXR1cm4gX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+OjpnZXRfYWxsb2NhdG9yKCk7CiAgICB9CgogIHByb3RlY3RlZDoKICAgIHVz
aW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fYml0X2FsbG9jOwogICAgdXNpbmcgX0J2ZWN0
b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxf
QWxsb2M+OjpfTV9zdGFydDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZmlu
aXNoOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsK
CiAgcHJvdGVjdGVkOgogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pIHsKICAg
ICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAg
IF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01fZmluaXNoID0gX01fc3RhcnQg
KyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIHZvaWQgX01faW5zZXJ0X2F1eChpdGVy
YXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0g
X01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9N
X2ZpbmlzaCwgX01fZmluaXNoICsgMSk7CiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7CiAgICAg
ICAgKytfTV9maW5pc2g7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gc2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgICAgdW5zaWduZWQg
aW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNv
cHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgKl9faSsr
ID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7
CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19x
ICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3RhcnQg
PSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcigpOwog
ICAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IDA7
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBwdXNo
X2JhY2soKl9fZmlyc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwog
ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9y
IF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkg
ewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAgKytfX3Bv
czsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog
ICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewog
ICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19uID0gMDsK
ICAgICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAgICAgaWYgKGNhcGFj
aXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRp
b24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgICBj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgICAgICBfTV9maW5pc2ggKz0g
ZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAg
c2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICAgIHVu
c2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9y
IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAg
ICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2Zpbmlz
aCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRl
KCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9C
SVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDAp
OwogICAgICAgIH0KICAgICAgfQogICAgfQoKICBwdWJsaWM6CiAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7
IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoK
ICAgIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihl
bmQoKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewogICAg
ICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgICB9CiAgICByZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAg
ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogICAgfQoKICAgIHNpemVfdHlwZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICAgIHNpemVfdHlw
ZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICAgIHNpemVfdHlw
ZSBjYXBhY2l0eSgpIGNvbnN0IHsKICAgICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRv
cihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigpKTsKICAgIH0KICAgIGJvb2wgZW1wdHko
KSBjb25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CgogICAgcmVmZXJlbmNlIG9wZXJh
dG9yW10oc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5j
ZV90eXBlKF9fbikpOyB9CiAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUg
X19uKSBjb25zdAogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19u
KSk7IH0KCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAg
ICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19yYW5nZV9lcnJvcigi
dmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAg
ICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29u
c3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hl
Y2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rv
cl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9f
dmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAg
X01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9z
dG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6
ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUo
KSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9N
X3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9y
JiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAg
ICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194
LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+
CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
X3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChf
TV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVf
ZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9p
bml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp
cnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVj
dG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg
ICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg
ICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwog
ICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0
b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlm
IChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg
ICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJl
Z2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBk
aWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoK
CgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAg
aWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29m
X3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXpl
KCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9f
biwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us
IF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19u
LCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
aW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fz
c2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50
ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fz
c2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJl
Z2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7
ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVs
c2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19s
ZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICAgICAgaWYg
KF9fbGVuIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGNvcHkoX19maXJzdCwgX19sYXN0LCBiZWdp
bigpKSwgZW5kKCkpOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlk
ID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICAgIGNvcHko
X19maXJzdCwgX19taWQsIGJlZ2luKCkpOwogICAgICAgIGluc2VydChlbmQoKSwgX19taWQsIF9f
bGFzdCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewog
ICAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIHVuc2lnbmVkIGludCogX19xID0g
X01fYml0X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQo
KSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9N
X3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9f
cSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgfQogICAgfQoKICAg
IHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBjb25zdF9yZWZlcmVu
Y2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgcmVmZXJlbmNlIGJhY2so
KSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29u
c3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkg
ewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICAg
Kl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChlbmQo
KSwgX194KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7
CiAgICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3RkOjpzd2Fw
KF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3Rv
cmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KICAgIGl0ZXJhdG9yIGluc2VydChp
dGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBkaWZmZXJlbmNl
X3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICAgIGlmIChfTV9maW5pc2guX01f
cCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAgICpf
TV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3Np
dGlvbiwgX194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRv
ciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3RydWVfdHlwZSkgewogICAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBf
X3gpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQg
X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luc2VydF9y
YW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp
KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGlu
c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBf
TV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgICB9CgogICAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBz
aXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID09IDApIHJldHVybjsKICAg
ICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2Fy
ZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwog
ICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlwZShfX24p
LCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6
ZSgpLCBfX24pOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVu
KTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJh
dG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgICBfTV9m
aW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19u
KSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3Rh
cnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaXRl
cmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgX01fZmls
bF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9wX2JhY2so
KSB7IC0tX01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u
KSB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5KF9fcG9z
aXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgICAgLS1fTV9maW5pc2g7CiAgICAg
IHJldHVybiBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19m
aXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBl
bmQoKSwgX19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9pZCByZXNp
emUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGlmIChf
X25ld19zaXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5
cGUoX19uZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwg
X19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsKICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQqIF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zf
c3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQgY2xl
YXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8Ym9v
bCwgYWxsb2M+IGJpdF92ZWN0b3I7Cgp9CiMgMzkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9yLmgiIDIg
MwojIDMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvdmVjdG9yIiAyIDMKIyA2NyAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBw
IiAyCgoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFhhbGFuRE9NQ2hhcjsKCgoKCgoKCiMgMSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9jYXNzZXJ0IiAxIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDEgMwojIDM3
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIg
MSAzCiMgMzUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAyIDMKIyA1OCAiL3Vzci9p
bmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2Zh
aWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLCB1bnNp
Z25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHRocm93ICgpCgoKCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0
X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLCB1bnNpZ25l
ZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHRocm93ICgpCgoKCiAgICAg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKfQojIDM4ICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nh
c3NlcnQuaCIgMiAzCiMgMyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9jYXNzZXJ0IiAyIDMKIyA4MCAiWGFsYW5ET00vWGFsYW5E
T01TdHJpbmcuaHBwIiAyCgoKCmNsYXNzIFhhbGFuRE9NU3RyaW5nCnsKcHVibGljOgoKCgoKCgog
ICAgICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8WGFsYW5ET01DaGFyPiBYYWxhbkRPTUNoYXJWZWN0
b3JUeXBlOwogICAgICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8Y2hhcj4gQ2hhclZlY3RvclR5cGU7
CiAgICAgICAgdHlwZWRlZiBzdGQ6OnZlY3Rvcjx3Y2hhcl90PiBXaWRlQ2hhclZlY3RvclR5cGU7
CgoKICAgICAgICB0eXBlZGVmIFhhbGFuRE9NQ2hhciB2YWx1ZV90eXBlOwogICAgICAgIHR5cGVk
ZWYgWGFsYW5ET01DaGFyJiByZWZlcmVuY2U7CiAgICAgICAgdHlwZWRlZiBjb25zdCBYYWxhbkRP
TUNoYXImIGNvbnN0X3JlZmVyZW5jZTsKCiAgICAgICAgdHlwZWRlZiBYYWxhbkRPTUNoYXJWZWN0
b3JUeXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwoKICAgICAgICB0eXBlZGVmIFhhbGFuRE9NQ2hh
clZlY3RvclR5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgIHR5cGVkZWYgWGFsYW5ET01D
aGFyVmVjdG9yVHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAgICAgdHlw
ZWRlZiBYYWxhbkRPTUNoYXJWZWN0b3JUeXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRl
cmF0b3I7CiAgICAgICAgdHlwZWRlZiBYYWxhbkRPTUNoYXJWZWN0b3JUeXBlOjpjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CgogICAgICAgIGVudW0geyBucG9z
ID0gLTEgfTsKCiAgICAgICAgZXhwbGljaXQKICAgICAgICBYYWxhbkRPTVN0cmluZygpOwoKICAg
ICAgICBleHBsaWNpdAogICAgICAgIFhhbGFuRE9NU3RyaW5nKAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dHlwZSB0aGVDb3VudCA9IHNpemVfdHlwZShucG9zKSk7CgogICAgICAgIFhhbGFuRE9NU3RyaW5n
KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU291cmNl
LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlU3RhcnRQb3NpdGlvbiA9IDAs
CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVDb3VudCA9IHNpemVfdHlwZShu
cG9zKSk7CgogICAgICAgIGV4cGxpY2l0CiAgICAgICAgWGFsYW5ET01TdHJpbmcoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nLAogICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQgPSBzaXplX3R5cGUobnBvcykpOwoKICAg
ICAgICBYYWxhbkRPTVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRo
ZUNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbkRPTUNoYXIgdGhlQ2hhcik7Cgog
ICAgICAgIH5YYWxhbkRPTVN0cmluZygpCiAgICAgICAgewogICAgICAgIH0KCiAgICAgICAgWGFs
YW5ET01TdHJpbmcmCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVS
SFMpCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCZ0aGVSSFMgIT0gdGhpcykKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhID0gdGhlUkhTLm1fZGF0
YTsKCgoKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoK
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9N
U3RyaW5nJgogICAgICAgIG9wZXJhdG9yPShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUyk7Cgog
ICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIG9wZXJhdG9yPShYYWxhbkRPTUNoYXIgdGhl
UkhTKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1fZGF0YS5yZXNpemUoMik7CgogICAgICAg
ICAgICAgICAgbV9kYXRhWzBdID0gdGhlUkhTOwogICAgICAgICAgICAgICAgbV9kYXRhWzFdID0g
WGFsYW5ET01DaGFyKDApOwoKCgoKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAg
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgICAgaXRlcmF0b3IKICAg
ICAgICBiZWdpbigpCiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAg
ICAgICAgICAgICAgIHJldHVybiBtX2RhdGEuYmVnaW4oKTsKICAgICAgICB9CgogICAgICAgIGNv
bnN0X2l0ZXJhdG9yCiAgICAgICAgYmVnaW4oKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAg
ICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLmJlZ2luKCk7
CiAgICAgICAgfQoKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgICAgcmJlZ2luKCkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0
dXJuIG1fZGF0YS5yYmVnaW4oKTsKICAgICAgICB9CgogICAgICAgIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IKICAgICAgICByYmVnaW4oKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGlu
dmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLnJiZWdpbigpOwogICAg
ICAgIH0KCiAgICAgICAgc2l6ZV90eXBlCiAgICAgICAgc2l6ZSgpIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKCgoKICAgICAgICAgICAgICAgIHJldHVybiBt
X2RhdGEuZW1wdHkoKSA9PSB0cnVlID8gMCA6IG1fZGF0YS5zaXplKCkgLSAxOwoKICAgICAgICB9
CgogICAgICAgIHNpemVfdHlwZQogICAgICAgIGxlbmd0aCgpIGNvbnN0CiAgICAgICAgewogICAg
ICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBzaXplKCk7
CiAgICAgICAgfQoKICAgICAgICBzaXplX3R5cGUKICAgICAgICBtYXhfc2l6ZSgpIGNvbnN0CiAg
ICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJl
dHVybiBzaXplX3R5cGUofjApOwogICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIHJlc2l6
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZUNvdW50LAogICAgICAgICAg
ICAgICAgICAgICAgICBYYWxhbkRPTUNoYXIgdGhlQ2hhcikKICAgICAgICB7CiAgICAgICAgICAg
ICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIHRoZU9s
ZFNpemUgPSBzaXplKCk7CgogICAgICAgICAgICAgICAgaWYgKHRoZU9sZFNpemUgPT0gMCkKICAg
ICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEucmVzaXplKHRo
ZUNvdW50ICsgMSwgdGhlQ2hhcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS5y
ZXNpemUodGhlQ291bnQsIHRoZUNoYXIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRh
W3RoZU9sZFNpemVdID0gdGhlQ2hhcjsKICAgICAgICAgICAgICAgIH0KCgoKCgoKICAgICAgICAg
ICAgICAgIG1fZGF0YS5iYWNrKCkgPSAwOwoKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsK
ICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICByZXNpemUoc2l6ZV90eXBlIHRoZUNvdW50
KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAg
ICByZXNpemUodGhlQ291bnQsIFhhbGFuRE9NQ2hhcigwKSk7CiAgICAgICAgfQoKICAgICAgICBz
aXplX3R5cGUKICAgICAgICBjYXBhY2l0eSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAg
ICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBtX2RhdGEuY2FwYWNpdHko
KSAtIDE7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgcmVzZXJ2ZShzaXplX3R5cGUg
dGhlQ291bnQgPSAwKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAg
ICAgICAgICAgICAgICBtX2RhdGEucmVzZXJ2ZSh0aGVDb3VudCArIDEpOwogICAgICAgIH0KCiAg
ICAgICAgdm9pZAogICAgICAgIGNsZWFyKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZh
cmlhbnRzKCk7CgogICAgICAgICAgICAgICAgbV9kYXRhLmVyYXNlKG1fZGF0YS5iZWdpbigpLCBt
X2RhdGEuZW5kKCkpOwoKCgoKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CiAgICAgICAg
fQoKICAgICAgICB2b2lkCiAgICAgICAgZXJhc2UoCiAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdHlwZSB0aGVTdGFydFBvc2l0aW9uID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90eXBlIHRoZUNvdW50ID0gc2l6ZV90eXBlKG5wb3MpKQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgdGhlQWN0
dWFsQ291bnQgPQogICAgICAgICAgICAgICAgICAgICAgICB0aGVDb3VudCA9PSBzaXplX3R5cGUo
bnBvcykgPyBsZW5ndGgoKSA6IHRoZUNvdW50OwoKICAgICAgICAgICAgICAgIGlmICh0aGVTdGFy
dFBvc2l0aW9uID09IDAgJiYgdGhlQ291bnQgPT0gc2l6ZSgpKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEuZXJhc2UobV9kYXRhLmJlZ2luKCksIG1fZGF0
YS5lbmQoKSk7CgoKCgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciBpID0g
Z2V0SXRlcmF0b3JGb3JQb3NpdGlvbih0aGVTdGFydFBvc2l0aW9uKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGF0YS5lcmFzZShpLCBpICsgKHRoZUFjdHVhbENvdW50KSk7CgoKCgogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKICAgICAgICB9Cgog
ICAgICAgIGJvb2wKICAgICAgICBlbXB0eSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAg
ICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBtX2RhdGEuc2l6ZSgpIDwg
MiA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAg
ICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIHRoZUluZGV4KSBjb25zdAogICAgICAgIHsKICAgICAg
ICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhW3Ro
ZUluZGV4XTsKICAgICAgICB9CgogICAgICAgIHJlZmVyZW5jZQogICAgICAgIG9wZXJhdG9yW10o
c2l6ZV90eXBlIHRoZUluZGV4KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMo
KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhW3RoZUluZGV4XTsKICAgICAgICB9CiMg
MzgyICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiCiAgICAgICAgY29uc3QgWGFsYW5ET01D
aGFyKgogICAgICAgIGNfc3RyKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZh
cmlhbnRzKCk7CgoKCgoKICAgICAgICAgICAgICAgIHJldHVybiBtX2RhdGEuc2l6ZSgpID09IDAg
PyAmc19lbXB0eSA6ICZtX2RhdGFbMF07CiAgICAgICAgfQoKICAgICAgICBjb25zdCBYYWxhbkRP
TUNoYXIqCiAgICAgICAgZGF0YSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgaW52
YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBjX3N0cigpOwogICAgICAgIH0KCiAg
ICAgICAgdm9pZAogICAgICAgIHN3YXAoWGFsYW5ET01TdHJpbmcmIHRoZU90aGVyKQogICAgICAg
IHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICBtX2RhdGEu
c3dhcCh0aGVPdGhlci5tX2RhdGEpOwojIDQxNiAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBw
IgogICAgICAgIH0KCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgb3BlcmF0b3IrPShj
b25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU291cmNlKQogICAgICAgIHsKICAgICAgICAgICAgICAg
IGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVNvdXJjZSk7
CiAgICAgICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBvcGVyYXRvcis9KGNv
bnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlu
dmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVN0cmluZyk7CiAg
ICAgICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBvcGVyYXRvcis9KFhhbGFu
RE9NQ2hhciB0aGVDaGFyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsK
CiAgICAgICAgICAgICAgICBhcHBlbmQoMSwgdGhlQ2hhcik7CgogICAgICAgICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgYXNz
aWduKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU291cmNlKQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICBlcmFzZSgpOwoKICAgICAgICAgICAg
ICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVNvdXJj
ZSk7CgogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwogICAgICAgIH0KCiAgICAgICAgWGFs
YW5ET01TdHJpbmcmCiAgICAgICAgYXNzaWduKAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTUNoYXIqIHRoZVNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
eXBlIHRoZUNvdW50KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAg
ICAgICAgICAgICAgICBlcmFzZSgpOwoKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAg
ICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVNvdXJjZSwgdGhlQ291bnQpOwogICAgICAg
IH0KCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgYXNzaWduKAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU291cmNlLAogICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdHlwZSB0aGVDb3VudCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRz
KCk7CgogICAgICAgICAgICAgICAgZXJhc2UoKTsKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRz
KCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGFwcGVuZCh0aGVTb3VyY2UsIHRoZVBvc2l0aW9u
LCB0aGVDb3VudCk7CiAgICAgICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBh
c3NpZ24oY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVNvdXJjZSkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgbV9kYXRhID0gdGhlU291cmNl
Lm1fZGF0YTsKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAg
YXNzaWduKAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NQ2hhciB0aGVDaGFyKQogICAgICAgIHsKICAgICAg
ICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICBlcmFzZSgpOwoKICAgICAg
ICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRo
ZUNvdW50LCB0aGVDaGFyKTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAg
ICAgIGFzc2lnbigKICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHRoZUZpcnN0UG9zaXRp
b24sCiAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvciB0aGVMYXN0UG9zaXRpb24pCiAgICAg
ICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIGVyYXNl
KCk7CgogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIGluc2Vy
dChiZWdpbigpLCB0aGVGaXJzdFBvc2l0aW9uLCB0aGVMYXN0UG9zaXRpb24pOwoKICAgICAgICAg
ICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
ICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBhcHBlbmQoY29uc3QgWGFsYW5E
T01TdHJpbmcmIHRoZVNvdXJjZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRz
KCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGFwcGVuZCh0aGVTb3VyY2UuY19zdHIoKSwgdGhl
U291cmNlLmxlbmd0aCgpKTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAg
ICAgIGFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcm
IHRoZVNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9u
LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQpCiAgICAgICAgewog
ICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBhcHBl
bmQodGhlU291cmNlLmNfc3RyKCkgKyB0aGVQb3NpdGlvbiwgdGhlQ291bnQpOwogICAgICAgIH0K
CiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgYXBwZW5kKAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90eXBlIHRoZUNvdW50KTsKCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAg
ICAgYXBwZW5kKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKQogICAgICAgIHsKICAgICAg
ICAgICAgICAgICgodm9pZCkgKCh0aGVTdHJpbmcgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwg
KCJ0aGVTdHJpbmcgIT0gMCIsICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiLCA1NTgsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsK
CiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVN0cmluZywgbGVuZ3RoKHRoZVN0cmlu
ZykpOwogICAgICAgIH0KCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgYXBwZW5kKAog
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgIFhhbGFuRE9NQ2hhciB0aGVDaGFyKTsKCiAgICAgICAgdm9pZAogICAgICAgIHB1
c2hfYmFjayhYYWxhbkRPTUNoYXIgdGhlQ2hhcikKICAgICAgICB7CiAgICAgICAgICAgICAgICBp
bnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgYXBwZW5kKDEsIHRoZUNoYXIpOwoKICAgICAg
ICAgICAgICAgIGludmFyaWFudHMoKTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5n
JgogICAgICAgIGluc2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBv
c2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhl
U3RyaW5nKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAg
ICAgICAgICByZXR1cm4gaW5zZXJ0KHRoZVBvc2l0aW9uLCB0aGVTdHJpbmcuY19zdHIoKSwgdGhl
U3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAg
ICAgIGluc2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9u
MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmlu
ZywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZUNvdW50KQogICAgICAgIHsKICAgICAgICAg
ICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0KHRoZVBv
c2l0aW9uMSwgdGhlU3RyaW5nLmNfc3RyKCkgKyB0aGVQb3NpdGlvbjIsIHRoZUNvdW50KTsKICAg
ICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGluc2VydCgKICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90eXBlIHRoZUNvdW50KTsKCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAg
aW5zZXJ0KAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKQogICAg
ICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1
cm4gaW5zZXJ0KHRoZVBvc2l0aW9uLCB0aGVTdHJpbmcsIGxlbmd0aCh0aGVTdHJpbmcpKTsKICAg
ICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGluc2VydCgKICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3R5cGUgdGhlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9N
Q2hhciB0aGVDaGFyKTsKCiAgICAgICAgaXRlcmF0b3IKICAgICAgICBpbnNlcnQoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGl0ZXJhdG9yIHRoZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICBYYWxhbkRPTUNoYXIgdGhlQ2hhcik7CgogICAgICAgIHZvaWQKICAgICAgICBpbnNlcnQo
CiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yIHRoZVBvc2l0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg
IFhhbGFuRE9NQ2hhciB0aGVDaGFyKTsKCiAgICAgICAgdm9pZAogICAgICAgIGluc2VydCgKICAg
ICAgICAgICAgICAgIGl0ZXJhdG9yIHRoZUluc2VydFBvc2l0aW9uLAogICAgICAgICAgICAgICAg
Y29uc3RfaXRlcmF0b3IgdGhlRmlyc3RQb3NpdGlvbiwKICAgICAgICAgICAgICAgIGNvbnN0X2l0
ZXJhdG9yIHRoZUxhc3RQb3NpdGlvbik7CgogICAgICAgIFhhbGFuRE9NU3RyaW5nCiAgICAgICAg
c3Vic3RyKAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24gPSAw
LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQgPSBzaXplX3R5cGUo
bnBvcykpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgKCh2b2lkKSAoKHRoZUNvdW50
ID09IHNpemVfdHlwZShucG9zKSAmJiB0aGVQb3NpdGlvbiA8IGxlbmd0aCgpIHx8IHRoZVBvc2l0
aW9uICsgdGhlQ291bnQgPD0gbGVuZ3RoKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlQ291
bnQgPT0gc2l6ZV90eXBlKG5wb3MpICYmIHRoZVBvc2l0aW9uIDwgbGVuZ3RoKCkgfHwgdGhlUG9z
aXRpb24gKyB0aGVDb3VudCA8PSBsZW5ndGgoKSIsICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5o
cHAiLCA2NDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCiAgICAgICAgICAgICAgICBp
bnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIFhhbGFuRE9NU3RyaW5nKCp0aGlz
LCB0aGVQb3NpdGlvbiwgdGhlQ291bnQpOwogICAgICAgIH0KCiAgICAgICAgaW50CiAgICAgICAg
Y29tcGFyZShjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKSBjb25zdAogICAgICAgIHsK
ICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY29t
cGFyZSh0aGVTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgfQoKICAgICAgICBpbnQKICAgICAgICBj
b21wYXJlKAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24xLAog
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQxLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKSBjb25zdAogICAgICAg
IHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4g
Y29tcGFyZSh0aGVQb3NpdGlvbjEsIHRoZUNvdW50MSwgdGhlU3RyaW5nLmNfc3RyKCksIHRoZVN0
cmluZy5sZW5ndGgoKSk7CiAgICAgICAgfQoKICAgICAgICBpbnQKICAgICAgICBjb21wYXJlKAog
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24xLAogICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQxLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3R5cGUgdGhlUG9zaXRpb24yLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5
cGUgdGhlQ291bnQyKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMo
KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZSh0aGVQb3NpdGlvbjEsIHRoZUNvdW50
MSwgdGhlU3RyaW5nLmNfc3RyKCkgKyB0aGVQb3NpdGlvbjIsIHRoZUNvdW50Mik7CiAgICAgICAg
fQoKICAgICAgICBpbnQKICAgICAgICBjb21wYXJlKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3Ry
aW5nKSBjb25zdDsKCiAgICAgICAgaW50CiAgICAgICAgY29tcGFyZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uMSwKICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIHRoZUNvdW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01DaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVD
b3VudDIgPSBzaXplX3R5cGUobnBvcykpIGNvbnN0OwoKICAgICAgICBpbnQKICAgICAgICBjb21w
YXJlKGNvbnN0IGNoYXIqIHRoZVN0cmluZykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAg
ICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUoWGFsYW5ET01T
dHJpbmcodGhlU3RyaW5nKSk7CiAgICAgICAgfQoKICAgICAgICBpbnQKICAgICAgICBjb21wYXJl
KAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24xLAogICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQxLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dHlwZSB0aGVDb3VudDIgPSBzaXplX3R5cGUobnBvcykpIGNvbnN0CiAgICAgICAgewogICAgICAg
ICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlKHRo
ZVBvc2l0aW9uMSwgdGhlQ291bnQxLCBYYWxhbkRPTVN0cmluZyh0aGVTdHJpbmcsIHRoZUNvdW50
MikpOwogICAgICAgIH0KCiAgICAgICAgQ2hhclZlY3RvclR5cGUKICAgICAgICB0cmFuc2NvZGUo
KSBjb25zdDsKCiAgICAgICAgc3RhdGljIGJvb2wKICAgICAgICBlcXVhbHMoCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHRoZVJIU0xlbmd0aCk7CgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgZXF1
YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCiAgICAg
ICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGVxdWFscyh0aGVMSFMsIGxlbmd0aCh0aGVMSFMp
LCB0aGVSSFMsIGxlbmd0aCh0aGVSSFMpKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBib29s
CiAgICAgICAgZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0
cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgdGhlUkhTKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB0
aGVMSFNMZW5ndGggPSB0aGVMSFMuc2l6ZSgpOwogICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IHRoZVJIU0xlbmd0aCA9IHRoZVJIUy5zaXplKCk7CgogICAgICAgICAgICAgICAgaWYg
KHRoZUxIU0xlbmd0aCAhPSB0aGVSSFNMZW5ndGgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVxdWFscyh0aGVMSFMuY19zdHIoKSwgdGhlTEhTTGVuZ3RoLCB0aGVSSFMuY19zdHIoKSwg
dGhlUkhTTGVuZ3RoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHN0YXRp
YyBib29sCiAgICAgICAgZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP
TUNoYXIqIHRoZVJIUykKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxzKHRo
ZUxIUy5jX3N0cigpLCB0aGVSSFMpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIGJvb2wKICAg
ICAgICBlcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciog
dGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhl
UkhTKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbHModGhlTEhTLCB0aGVS
SFMuY19zdHIoKSk7CiAgICAgICAgfQojIDc3NSAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBw
IgogICAgICAgIHN0YXRpYyBzaXplX3R5cGUKICAgICAgICBsZW5ndGgoY29uc3QgWGFsYW5ET01D
aGFyKiB0aGVTdHJpbmcpOwoKcHJvdGVjdGVkOgoKCgoKCgogICAgICAgIHZvaWQKICAgICAgICBp
bnZhcmlhbnRzKCkgY29uc3QKICAgICAgICB7CgoKCgoKCiAgICAgICAgICAgICAgICAoKHZvaWQp
ICgobV9kYXRhLnNpemUoKSA9PSAwIHx8IG1fZGF0YS5iYWNrKCkgPT0gMCkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCJtX2RhdGEuc2l6ZSgpID09IDAgfHwgbV9kYXRhLmJhY2soKSA9PSAwIiwgIlhh
bGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIsIDc5NCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDAp
KSk7CgogICAgICAgIH0KCgoKCgoKICAgICAgICBpdGVyYXRvcgogICAgICAgIGdldEJhY2tJbnNl
cnRJdGVyYXRvcigpCiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAg
ICAgICAgICAgICAgIHJldHVybiBtX2RhdGEuc2l6ZSgpID09IDAgPyBtX2RhdGEuZW5kKCkgOiBt
X2RhdGEuZW5kKCkgLSAxOwogICAgICAgIH0KCiAgICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAg
ICBnZXRCYWNrSW5zZXJ0SXRlcmF0b3IoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAg
IGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLnNpemUoKSA9PSAw
ID8gbV9kYXRhLmVuZCgpIDogbV9kYXRhLmVuZCgpIC0gMTsKICAgICAgICB9CgogICAgICAgIGl0
ZXJhdG9yCiAgICAgICAgZ2V0SXRlcmF0b3JGb3JQb3NpdGlvbihzaXplX3R5cGUgdGhlUG9zaXRp
b24pCiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAg
ICAgIHJldHVybiBtX2RhdGEuYmVnaW4oKSArIHRoZVBvc2l0aW9uOwogICAgICAgIH0KCiAgICAg
ICAgY29uc3RfaXRlcmF0b3IKICAgICAgICBnZXRJdGVyYXRvckZvclBvc2l0aW9uKHNpemVfdHlw
ZSB0aGVQb3NpdGlvbikgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRz
KCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS5iZWdpbigpICsgdGhlUG9zaXRpb247
CiAgICAgICAgfQoKcHJpdmF0ZToKCiAgICAgICAgWGFsYW5ET01DaGFyVmVjdG9yVHlwZSBtX2Rh
dGE7CgoKCgoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIHNfZW1wdHk7Cn07CgoK
CmlubGluZSBib29sCm9wZXJhdG9yPT0oCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFu
RE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gWGFsYW5ET01TdHJpbmc6OmVxdWFs
cyh0aGVMSFMsIHRoZVJIUyk7Cn0KCgoKaW5saW5lIGJvb2wKb3BlcmF0b3I9PSgKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4g
WGFsYW5ET01TdHJpbmc6OmVxdWFscyh0aGVMSFMsIHRoZVJIUyk7Cn0KCgoKaW5saW5lIGJvb2wK
b3BlcmF0b3I9PSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0
aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVS
SFMpCnsKCiAgICAgICAgcmV0dXJuIFhhbGFuRE9NU3RyaW5nOjplcXVhbHModGhlTEhTLCB0aGVS
SFMpOwp9CgoKCmlubGluZSBib29sCm9wZXJhdG9yIT0oCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gISh0aGVMSFMgPT0g
dGhlUkhTKTsKfQoKCgppbmxpbmUgYm9vbApvcGVyYXRvciE9KAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKewogICAgICAgIHJldHVybiAhKHRoZUxIUyA9
PSB0aGVSSFMpOwp9CgoKCmlubGluZSBib29sCm9wZXJhdG9yIT0oCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuICEodGhlUkhT
ID09IHRoZUxIUyk7Cn0KCgoKaW5saW5lIFhhbGFuRE9NU3RyaW5nCm9wZXJhdG9yKygKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKewogICAgICAgIFhh
bGFuRE9NU3RyaW5nIHRoZVRlbXAodGhlTEhTKTsKCiAgICAgICAgcmV0dXJuIHRoZVRlbXAgKz0g
dGhlUkhTOwp9CgoKCmlubGluZSBYYWxhbkRPTVN0cmluZwpvcGVyYXRvcisoCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgWGFsYW5ET01T
dHJpbmcgdGhlVGVtcCh0aGVMSFMpOwoKICAgICAgICByZXR1cm4gdGhlVGVtcCArPSB0aGVSSFM7
Cn0KCgoKaW5saW5lIFhhbGFuRE9NU3RyaW5nCm9wZXJhdG9yKygKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICBYYWxhbkRPTVN0cmluZyB0
aGVUZW1wKHRoZUxIUyk7CgogICAgICAgIHJldHVybiB0aGVUZW1wICs9IHRoZVJIUzsKfQoKCgpp
bmxpbmUgY29uc3QgWGFsYW5ET01TdHJpbmcKb3BlcmF0b3IrKAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gWGFsYW5ET01TdHJpbmcodGhl
TEhTKSArIHRoZVJIUzsKfQoKCgppbmxpbmUgY29uc3QgWGFsYW5ET01TdHJpbmcKb3BlcmF0b3Ir
KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1
cm4gdGhlTEhTICsgWGFsYW5ET01TdHJpbmcodGhlUkhTKTsKfQojIDk3MSAiWGFsYW5ET00vWGFs
YW5ET01TdHJpbmcuaHBwIgp0eXBlZGVmIHN0ZDo6dmVjdG9yPFhhbGFuRE9NQ2hhcj4gWGFsYW5E
T01DaGFyVmVjdG9yVHlwZTsKCnR5cGVkZWYgc3RkOjp2ZWN0b3I8Y2hhcj4gQ2hhclZlY3RvclR5
cGU7CiMgOTg5ICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiCmJvb2wKVHJhbnNjb2RlVG9M
b2NhbENvZGVQYWdlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIq
IHRoZVNvdXJjZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRo
ZVNvdXJjZVN0cmluZ0xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhclZlY3RvclR5
cGUmIHRhcmdldFZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0ZXJtaW5hdGUg
PSBmYWxzZSk7CiMgMTAwOCAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBwIgpib29sClRyYW5z
Y29kZVRvTG9jYWxDb2RlUGFnZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01DaGFyKiB0aGVTb3VyY2VTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJWZWN0
b3JUeXBlJiB0YXJnZXRWZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGVybWlu
YXRlID0gZmFsc2UpOwojIDEwMjQgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKaW5saW5l
IGNvbnN0IENoYXJWZWN0b3JUeXBlClRyYW5zY29kZVRvTG9jYWxDb2RlUGFnZShjb25zdCBYYWxh
bkRPTUNoYXIqIHRoZVNvdXJjZVN0cmluZykKewogICAgICAgIENoYXJWZWN0b3JUeXBlIHRoZVJl
c3VsdDsKCiAgICAgICAgVHJhbnNjb2RlVG9Mb2NhbENvZGVQYWdlKHRoZVNvdXJjZVN0cmluZywg
dGhlUmVzdWx0LCB0cnVlKTsKCiAgICAgICAgcmV0dXJuIHRoZVJlc3VsdDsKfQojIDEwNDUgIlhh
bGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKaW5saW5lIGJvb2wKVHJhbnNjb2RlVG9Mb2NhbENv
ZGVQYWdlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhl
U291cmNlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFyVmVjdG9yVHlwZSYgdGFy
Z2V0VmVjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIHRlcm1pbmF0ZSA9IGZhbHNl
KQp7CiAgICAgICAgcmV0dXJuIFRyYW5zY29kZVRvTG9jYWxDb2RlUGFnZSh0aGVTb3VyY2VTdHJp
bmcuY19zdHIoKSwgdGFyZ2V0VmVjdG9yLCB0ZXJtaW5hdGUpOwp9CiMgMTA2NCAiWGFsYW5ET00v
WGFsYW5ET01TdHJpbmcuaHBwIgppbmxpbmUgY29uc3QgQ2hhclZlY3RvclR5cGUKVHJhbnNjb2Rl
VG9Mb2NhbENvZGVQYWdlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTb3VyY2VTdHJpbmcpCnsK
ICAgICAgICBDaGFyVmVjdG9yVHlwZSB0aGVSZXN1bHQ7CgogICAgICAgIFRyYW5zY29kZVRvTG9j
YWxDb2RlUGFnZSh0aGVTb3VyY2VTdHJpbmcsIHRoZVJlc3VsdCwgdHJ1ZSk7CgogICAgICAgIHJl
dHVybiB0aGVSZXN1bHQ7Cn0KIyAxMDg0ICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiCmlu
bGluZSBjb25zdCBYYWxhbkRPTVN0cmluZwpUcmFuc2NvZGVGcm9tTG9jYWxDb2RlUGFnZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGhlU291cmNlU3RyaW5nLAogICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlU291cmNlU3RyaW5nTGVuZ3RoID0gdW5z
aWduZWQoLTEpKQp7CiAgICAgICAgcmV0dXJuIFhhbGFuRE9NU3RyaW5nKHRoZVNvdXJjZVN0cmlu
ZywgdGhlU291cmNlU3RyaW5nTGVuZ3RoKTsKfQojIDExMDUgIlhhbGFuRE9NL1hhbGFuRE9NU3Ry
aW5nLmhwcCIKYm9vbApUcmFuc2NvZGVGcm9tTG9jYWxDb2RlUGFnZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogdGhlU291cmNlU3RyaW5nLAogICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgdGhlU291cmNlU3RyaW5nTGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICBYYWxhbkRPTUNoYXJWZWN0b3JUeXBlJiB0aGVUYXJnZXRWZWN0b3IsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgdGVybWluYXRlID0gZmFsc2UpOwojIDExMjQgIlhhbGFuRE9N
L1hhbGFuRE9NU3RyaW5nLmhwcCIKYm9vbApUcmFuc2NvZGVGcm9tTG9jYWxDb2RlUGFnZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGhlU291cmNlU3RyaW5nLAogICAgICAg
ICAgICAgICAgICAgICAgICBYYWxhbkRPTUNoYXJWZWN0b3JUeXBlJiB0aGVUYXJnZXRWZWN0b3Is
CiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGVybWluYXRlID0gZmFsc2UpOwojIDExMzkg
IlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKaW5saW5lIGNvbnN0IFhhbGFuRE9NU3RyaW5n
ClRyYW5zY29kZUZyb21Mb2NhbENvZGVQYWdlKGNvbnN0IENoYXJWZWN0b3JUeXBlJiB0aGVTb3Vy
Y2VTdHJpbmcpCnsKICAgICAgICBjb25zdCBDaGFyVmVjdG9yVHlwZTo6c2l6ZV90eXBlIHRoZVNp
emUgPSB0aGVTb3VyY2VTdHJpbmcuc2l6ZSgpOwoKICAgICAgICBpZiAodGhlU291cmNlU3RyaW5n
W3RoZVNpemUgLSAxXSA9PSBDaGFyVmVjdG9yVHlwZTo6dmFsdWVfdHlwZSgwKSkKICAgICAgICB7
CiAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNjb2RlRnJvbUxvY2FsQ29kZVBhZ2UoJip0aGVT
b3VyY2VTdHJpbmcuYmVnaW4oKSwgdGhlU2l6ZSAtIDEpOwogICAgICAgIH0KICAgICAgICBlbHNl
CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zY29kZUZyb21Mb2NhbENvZGVQ
YWdlKCYqdGhlU291cmNlU3RyaW5nLmJlZ2luKCksIHRoZVNpemUpOwogICAgICAgIH0KfQojIDcy
ICJQbGF0Zm9ybVN1cHBvcnQvRG91YmxlU3VwcG9ydC5ocHAiIDIKCgoKCmNsYXNzIERvdWJsZVN1
cHBvcnQKewpwdWJsaWM6CiMgOTEgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIK
ICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzTmFOKGRvdWJsZSB0aGVOdW1iZXIpCiAgICAg
ICAgewoKICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcqIGNvbnN0IHRoZUZpcnN0
RFdPUkQgPQoKCgogICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIGxvbmcqPigmdGhlTnVtYmVyKTsKCgogICAgICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQgbG9uZyogY29uc3QgdGhlU2Vjb25kRFdPUkQgPQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZUZpcnN0RFdPUkQgKyAxOwoKICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhlRmlyc3REV09SRCA9PSAqc19OYU5GaXJzdERXT1JEICYm
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGVTZWNvbmREV09SRCA9PSAqc19OYU5TZWNv
bmREV09SRDsKICAgICAgICB9CgoKCgoKCgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgaXNQ
b3NpdGl2ZUluZmluaXR5KGRvdWJsZSB0aGVOdW1iZXIpCiAgICAgICAgewogICAgICAgICAgICAg
ICAgcmV0dXJuICFpc05hTih0aGVOdW1iZXIpICYmIHRoZU51bWJlciA9PSBzX3Bvc2l0aXZlSW5m
aW5pdHk7CiAgICAgICAgfQoKCgoKCgoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzTmVn
YXRpdmVJbmZpbml0eShkb3VibGUgdGhlTnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiAhaXNOYU4odGhlTnVtYmVyKSAmJiB0aGVOdW1iZXIgPT0gc19uZWdhdGl2ZUluZmlu
aXR5OwogICAgICAgIH0KCgoKCgoKCiAgICAgICAgc3RhdGljIGJvb2wKICAgICAgICBpc1Bvc2l0
aXZlWmVybyhkb3VibGUgdGhlTnVtYmVyKQogICAgICAgIHsKCiAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBsb25nKiBjb25zdCB0aGVGaXJzdERXT1JEID0KCgoKICAgICAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBsb25nKj4oJnRoZU51bWJl
cik7CgoKICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcqIGNvbnN0IHRoZVNlY29u
ZERXT1JEID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGVGaXJzdERXT1JEICsgMTsKCiAgICAgICAgICAgICAgICByZXR1cm4gKnRoZUZp
cnN0RFdPUkQgPT0gKnNfcG9zaXRpdmVaZXJvRmlyc3REV09SRCAmJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAqdGhlU2Vjb25kRFdPUkQgPT0gKnNfcG9zaXRpdmVaZXJvU2Vjb25kRFdPUkQ7
CiAgICAgICAgfQoKCgoKCgoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzTmVnYXRpdmVa
ZXJvKGRvdWJsZSB0aGVOdW1iZXIpCiAgICAgICAgewoKICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGxvbmcqIGNvbnN0IHRoZUZpcnN0RFdPUkQgPQoKCgogICAgICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGxvbmcqPigmdGhlTnVtYmVyKTsK
CgogICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyogY29uc3QgdGhlU2Vjb25kRFdP
UkQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoZUZpcnN0RFdPUkQgKyAxOwoKICAgICAgICAgICAgICAgIHJldHVybiAqdGhlRmlyc3RE
V09SRCA9PSAqc19uZWdhdGl2ZVplcm9GaXJzdERXT1JEICYmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICp0aGVTZWNvbmREV09SRCA9PSAqc19uZWdhdGl2ZVplcm9TZWNvbmREV09SRDsKICAg
ICAgICB9CiMgMTkxICJQbGF0Zm9ybVN1cHBvcnQvRG91YmxlU3VwcG9ydC5ocHAiCiAgICAgICAg
c3RhdGljIGRvdWJsZQogICAgICAgIGdldE5hTigpCiAgICAgICAgewogICAgICAgICAgICAgICAg
cmV0dXJuIHNfTmFOOwogICAgICAgIH0KCgoKCgoKICAgICAgICBzdGF0aWMgZG91YmxlCiAgICAg
ICAgZ2V0UG9zaXRpdmVJbmZpbml0eSgpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu
IHNfcG9zaXRpdmVJbmZpbml0eTsKICAgICAgICB9CgoKCgoKCiAgICAgICAgc3RhdGljIGRvdWJs
ZQogICAgICAgIGdldE5lZ2F0aXZlSW5maW5pdHkoKQogICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiBzX25lZ2F0aXZlSW5maW5pdHk7CiAgICAgICAgfQojIDIyNyAiUGxhdGZvcm1TdXBw
b3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgZXF1YWwo
CiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSB0aGVSSFMpOwojIDI0MCAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBv
cnQuaHBwIgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgbm90RXF1YWwoCiAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSB0aGVSSFMpOwojIDI1MyAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAg
ICAgIHN0YXRpYyBib29sCiAgICAgICAgbGVzc1RoYW4oCiAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVSSFMpOwoj
IDI2NiAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0YXRpYyBi
b29sCiAgICAgICAgbGVzc1RoYW5PckVxdWFsKAogICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlUkhTKTsKIyAyNzkg
IlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0aWMgYm9vbAog
ICAgICAgIGdyZWF0ZXJUaGFuKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhT
LAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlUkhTKTsKIyAyOTIgIlBsYXRmb3Jt
U3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGdy
ZWF0ZXJUaGFuT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZUxIUywK
ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZVJIUyk7CiMgMzA1ICJQbGF0Zm9ybVN1
cHBvcnQvRG91YmxlU3VwcG9ydC5ocHAiCiAgICAgICAgc3RhdGljIGRvdWJsZQogICAgICAgIGFk
ZCgKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZUxIUywKICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHRoZVJIUyk7CiMgMzE4ICJQbGF0Zm9ybVN1cHBvcnQvRG91YmxlU3Vw
cG9ydC5ocHAiCiAgICAgICAgc3RhdGljIGRvdWJsZQogICAgICAgIHN1YnRyYWN0KAogICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgdGhlUkhTKTsKIyAzMzEgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIK
ICAgICAgICBzdGF0aWMgZG91YmxlCiAgICAgICAgbXVsdGlwbHkoCiAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVS
SFMpOwojIDM0NCAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0
YXRpYyBkb3VibGUKICAgICAgICBkaXZpZGUoCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVSSFMpOwojIDM1OCAi
UGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0YXRpYyBkb3VibGUK
ICAgICAgICBtb2R1bHVzKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAog
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlUkhTKTsKIyAzNzEgIlBsYXRmb3JtU3Vw
cG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0aWMgZG91YmxlCiAgICAgICAgbmVn
YXRpdmUoZG91YmxlIHRoZURvdWJsZSk7CgoKCgoKCiAgICAgICAgc3RydWN0IGVxdWFsRnVuY3Rp
b24gOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgZG91YmxlJiwgY29uc3QgZG91
YmxlJiwgYm9vbD4KCiAgICAgICAgewogICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUKICAgICAg
ICAgICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2FyZ3Vt
ZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRf
dHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcXVhbCh0aGVMSFMsIHRoZVJIUyk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgfTsKCgoKCiAgICAgICAgc3RydWN0IG5vdEVxdWFsRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpi
aW5hcnlfZnVuY3Rpb248Y29uc3QgZG91YmxlJiwgY29uc3QgZG91YmxlJiwgYm9vbD4KCiAgICAg
ICAgewogICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUKICAgICAgICAgICAgICAgIG9wZXJhdG9y
KCkoCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAog
ICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3RFcXVh
bCh0aGVMSFMsIHRoZVJIUyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCgoKCiAgICAg
ICAgc3RydWN0IGxlc3NUaGFuRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248
Y29uc3QgZG91YmxlJiwgY29uc3QgZG91YmxlJiwgYm9vbD4KCiAgICAgICAgewogICAgICAgICAg
ICAgICAgcmVzdWx0X3R5cGUKICAgICAgICAgICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAg
ICAgICAgICAgICAgIGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAg
ICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZXNzVGhhbih0aGVMSFMsIHRoZVJI
Uyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCgoKCiAgICAgICAgc3RydWN0IGxlc3NU
aGFuT3JFcXVhbEZ1bmN0aW9uIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IGRv
dWJsZSYsIGNvbnN0IGRvdWJsZSYsIGJvb2w+CgogICAgICAgIHsKICAgICAgICAgICAgICAgIHJl
c3VsdF90eXBlCiAgICAgICAgICAgICAgICBvcGVyYXRvcigpKAogICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdF9hcmd1bWVudF90eXBlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAg
c2Vjb25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVzc1RoYW5PckVxdWFsKHRoZUxIUywgdGhlUkhT
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9OwoKCgoKICAgICAgICBzdHJ1Y3QgZ3JlYXRl
clRoYW5GdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxjb25zdCBkb3VibGUm
LCBjb25zdCBkb3VibGUmLCBib29sPgoKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXN1bHRf
dHlwZQogICAgICAgICAgICAgICAgb3BlcmF0b3IoKSgKICAgICAgICAgICAgICAgICAgICAgICAg
Zmlyc3RfYXJndW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlY29u
ZF9hcmd1bWVudF90eXBlIHRoZVJIUykgY29uc3QKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdyZWF0ZXJUaGFuKHRoZUxIUywgdGhlUkhTKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICB9OwoKCgoKICAgICAgICBzdHJ1Y3QgZ3JlYXRlclRoYW5PckVx
dWFsRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgZG91YmxlJiwg
Y29uc3QgZG91YmxlJiwgYm9vbD4KCiAgICAgICAgewogICAgICAgICAgICAgICAgcmVzdWx0X3R5
cGUKICAgICAgICAgICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAgICAgICAgICAgIGZp
cnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRf
YXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBncmVhdGVyVGhhbk9yRXF1YWwodGhlTEhTLCB0aGVSSFMpOwog
ICAgICAgICAgICAgICAgfQogICAgICAgIH07CgoKCgogICAgICAgIHN0cnVjdCBhZGRGdW5jdGlv
biA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxjb25zdCBkb3VibGUmLCBjb25zdCBkb3Vi
bGUmLCBkb3VibGU+CgogICAgICAgIHsKICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlCiAgICAg
ICAgICAgICAgICBvcGVyYXRvcigpKAogICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9hcmd1
bWVudF90eXBlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kX2FyZ3VtZW50
X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYWRkKHRoZUxIUywgdGhlUkhTKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICB9OwoKCgoKICAgICAgICBzdHJ1Y3Qgc3VidHJhY3RGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJp
bmFyeV9mdW5jdGlvbjxjb25zdCBkb3VibGUmLCBjb25zdCBkb3VibGUmLCBkb3VibGU+CgogICAg
ICAgIHsKICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgICAgICAgICBvcGVyYXRv
cigpKAogICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9hcmd1bWVudF90eXBlIHRoZUxIUywK
ICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25z
dAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VidHJh
Y3QodGhlTEhTLCB0aGVSSFMpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CgoKCgogICAg
ICAgIHN0cnVjdCBtdWx0aXBseUZ1bmN0aW9uIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9u
PGNvbnN0IGRvdWJsZSYsIGNvbnN0IGRvdWJsZSYsIGRvdWJsZT4KCiAgICAgICAgewogICAgICAg
ICAgICAgICAgcmVzdWx0X3R5cGUKICAgICAgICAgICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAg
ICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtdWx0aXBseSh0aGVMSFMsIHRo
ZVJIUyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCgoKCiAgICAgICAgc3RydWN0IGRp
dmlkZUZ1bmN0aW9uIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IGRvdWJsZSYs
IGNvbnN0IGRvdWJsZSYsIGRvdWJsZT4KCiAgICAgICAgewogICAgICAgICAgICAgICAgcmVzdWx0
X3R5cGUKICAgICAgICAgICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAgICAgICAgICAg
IGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBzZWNv
bmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBkaXZpZGUodGhlTEhTLCB0aGVSSFMpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH07CgoKCgogICAgICAgIHN0cnVjdCBtb2R1bHVzRnVuY3Rpb24gOiBw
dWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgZG91YmxlJiwgY29uc3QgZG91YmxlJiwg
ZG91YmxlPgoKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXN1bHRfdHlwZQogICAgICAgICAg
ICAgICAgb3BlcmF0b3IoKSgKICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfYXJndW1lbnRf
dHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9hcmd1bWVudF90eXBl
IHRoZVJIUykgY29uc3QKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1vZHVsdXModGhlTEhTLCB0aGVSSFMpOwogICAgICAgICAgICAgICAgfQogICAgICAg
IH07CgoKCgogICAgICAgIHN0cnVjdCBuZWdhdGl2ZUZ1bmN0aW9uIDogcHVibGljIHN0ZDo6dW5h
cnlfZnVuY3Rpb248Y29uc3QgZG91YmxlJiwgZG91YmxlPgoKICAgICAgICB7CiAgICAgICAgICAg
ICAgICByZXN1bHRfdHlwZQogICAgICAgICAgICAgICAgb3BlcmF0b3IoKShhcmd1bWVudF90eXBl
IHRoZURvdWJsZSkgY29uc3QKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5lZ2F0aXZlKHRoZURvdWJsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
fTsKIyA1NjEgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0
aWMgYm9vbAogICAgICAgIGlzVmFsaWQoY29uc3QgWGFsYW5ET01TdHJpbmcgdGhlU3RyaW5nKTsK
IyA1NzEgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0aWMg
Ym9vbAogICAgICAgIGlzVmFsaWQoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcpOwojIDU4
MiAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0YXRpYyBkb3Vi
bGUKICAgICAgICB0b0RvdWJsZShjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKTsKIyA1
OTMgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0aWMgZG91
YmxlCiAgICAgICAgdG9Eb3VibGUoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcpOwojIDYw
MyAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0YXRpYyBkb3Vi
bGUKICAgICAgICByb3VuZChkb3VibGUgdGhlVmFsdWUpOwoKcHJpdmF0ZToKCiAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBzX05hTjsKICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNfcG9z
aXRpdmVJbmZpbml0eTsKICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNfbmVnYXRpdmVJbmZp
bml0eTsKICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNfcG9zaXRpdmVaZXJvOwogICAgICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgc19uZWdhdGl2ZVplcm87CgogICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBsb25nKiBzX05hTkZpcnN0RFdPUkQ7CiAgICAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGxvbmcqIHNfTmFOU2Vjb25kRFdPUkQ7CgogICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBsb25nKiBzX3Bvc2l0aXZlWmVyb0ZpcnN0RFdPUkQ7CiAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGxvbmcqIHNfcG9zaXRpdmVaZXJvU2Vjb25kRFdPUkQ7CgogICAgICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBsb25nKiBzX25lZ2F0aXZlWmVyb0ZpcnN0RFdPUkQ7CiAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcqIHNfbmVnYXRpdmVaZXJvU2Vjb25kRFdPUkQ7Cn07
CiMgNTggIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmNwcCIgMgoKCgojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Y21hdGgiIDEgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NtYXRoLmgiIDEgMwojIDM5ICIvdXNyL2xv
Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvc3RkX2NtYXRoLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29u
ZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NtYXRoLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbWF0aC5oIiAyIDMKIyA0
MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0ZF9jbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAz
CiMgMjcgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9i
aXRzL2h1Z2VfdmFsLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYg
Ii91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDIgMwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9uYW4uaCIgMSAzCiMgMzggIi91c3Iv
aW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAx
IDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBkb3Vi
bGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUgZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5j
bHVkZS9tYXRoLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo
Y2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl
IF9fYWNvcyAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpOyBl
eHRlcm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRv
dWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91
YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4y
IChkb3VibGUgX195LCBkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9f
eCk7IGV4dGVybiBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBzaW4g
KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KTsKCmV4dGVybiBk
b3VibGUgdGFuIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCk7
CgoKCmV4dGVybiB2b2lkIHNpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJs
ZSAqX19jb3N4KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19z
aW54LCBkb3VibGUgKl9fY29zeCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9f
eCk7IGV4dGVybiBkb3VibGUgX19jb3NoIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgc2lu
aCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KTsKCmV4dGVy
biBkb3VibGUgdGFuaCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX190YW5oIChkb3VibGUg
X194KTsKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUg
X19hY29zaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KTsg
ZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgYXRhbmgg
KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gpOwoKCgoKCmV4
dGVybiBkb3VibGUgZXhwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cCAoZG91Ymxl
IF9feCk7CgoKCmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl
IF9fZXhwMTAgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBwb3cxMCAoZG91YmxlIF9feCk7
IGV4dGVybiBkb3VibGUgX19wb3cxMCAoZG91YmxlIF9feCk7CgoKCmV4dGVybiBkb3VibGUgZnJl
eHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCk7IGV4dGVybiBkb3VibGUgX19mcmV4cCAo
ZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KTsKCgpleHRlcm4gZG91YmxlIGxkZXhwIChkb3Vi
bGUgX194LCBpbnQgX19leHBvbmVudCk7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9f
eCwgaW50IF9fZXhwb25lbnQpOwoKCmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUgX194KTsgZXh0
ZXJuIGRvdWJsZSBfX2xvZyAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91
YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19sb2cxMCAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRv
dWJsZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cik7IGV4dGVybiBkb3VibGUgX19t
b2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cik7CgoKCmV4dGVybiBkb3VibGUgZXhwbTEg
KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fZXhwbTEgKGRvdWJsZSBfX3gpOwoKCmV4dGVy
biBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMXAgKGRvdWJs
ZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgbG9nYiAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUg
X19sb2diIChkb3VibGUgX194KTsKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAoZG91YmxlIF9feCk7
IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZzIg
KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMiAoZG91YmxlIF9feCk7CgoKCgoKCmV4
dGVybiBkb3VibGUgcG93IChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBf
X3BvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChkb3Vi
bGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3NxcnQgKGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gZG91
YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90
IChkb3VibGUgX194LCBkb3VibGUgX195KTsKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91Ymxl
IF9feCk7IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KTsKCgoKCgoKZXh0ZXJuIGRv
dWJsZSBjZWlsIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gp
OwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpOyBleHRlcm4g
ZG91YmxlIF9fZmxvb3IgKGRvdWJsZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19mbW9kIChkb3VibGUgX194LCBkb3Vi
bGUgX195KTsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1
ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91
YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZp
bml0ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoK
CmV4dGVybiBkb3VibGUgaW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gZG91YmxlIF9faW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSk7IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KTsKCgoK
ZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19z
aWduaWZpY2FuZCAoZG91YmxlIF9feCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3Vi
bGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBk
b3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdi
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29u
c3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g
aW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2ow
IChkb3VibGUpOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fajEg
KGRvdWJsZSk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBf
X2puIChpbnQsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSk7IGV4dGVybiBkb3Vi
bGUgX195MCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJs
ZSBfX3kxIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSk7IGV4dGVybiBk
b3VibGUgX195biAoaW50LCBkb3VibGUpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUp
OyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJs
ZSk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAo
ZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB0
Z2FtbWEgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSk7CgoKCgpleHRl
cm4gZG91YmxlIGdhbW1hIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSk7
CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKTsg
ZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCk7CgoKCgoK
CmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19yaW50IChk
b3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFm
dGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAo
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0
ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCmV4dGVy
biBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pOyBleHRlcm4gZG91YmxlIF9f
c2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pOwoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAo
ZG91YmxlIF9feCwgaW50IF9fbik7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBfX3gs
IGludCBfX24pOwoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpOyBleHRlcm4gaW50IF9f
aWxvZ2IgKGRvdWJsZSBfX3gpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChkb3VibGUgX194
LCBsb25nIGludCBfX24pOyBleHRlcm4gZG91YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9u
ZyBpbnQgX19uKTsKCgoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpOyBleHRl
cm4gZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUgX194KTsKCgoKZXh0ZXJuIGRvdWJsZSByb3Vu
ZCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19yb3VuZCAoZG91YmxlIF9feCk7CgoKCmV4
dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGRvdWJsZSBfX3RydW5jIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgpleHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSwgaW50ICpfX3F1byk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3ksIGludCAqX19xdW8pOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBf
X3gpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCk7CmV4dGVybiBsb25nIGxv
bmcgaW50IGxscmludCAoZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50
IChkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCk7IGV4
dGVybiBsb25nIGludCBfX2xyb3VuZCAoZG91YmxlIF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50
IGxscm91bmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmQgKGRv
dWJsZSBfX3gpOwoKCgpleHRlcm4gZG91YmxlIGZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
OyBleHRlcm4gZG91YmxlIF9fZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKZXh0ZXJu
IGRvdWJsZSBmbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX2Zt
YXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3Vi
bGUgX195KTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGRvdWJsZSBfX3ZhbHVlKQogICAg
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdCAoZG91
YmxlIF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4g
ZG91YmxlIGZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feik7IGV4dGVybiBk
b3VibGUgX19mbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opOwojIDY0ICIv
dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpOyBleHRlcm4g
ZmxvYXQgX19hY29zZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhc2luZiAoZmxvYXQgX194
KTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXRhbmYg
KGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZs
b2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYg
KGZsb2F0IF9feSwgZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQgX194KTsg
ZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBzaW5mIChmbG9h
dCBfX3gpOyBleHRlcm4gZmxvYXQgX19zaW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHRh
bmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCk7CgoKCmV4dGVy
biB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCk7
IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAq
X19jb3N4KTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxv
YXQgX19jb3NoZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQgX194KTsg
ZXh0ZXJuIGZsb2F0IF9fc2luaGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZs
b2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3RhbmhmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gZmxv
YXQgYWNvc2hmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCk7
CgpleHRlcm4gZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hc2luaGYg
KGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxv
YXQgX19hdGFuaGYgKGZsb2F0IF9feCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKGZsb2F0IF9f
eCk7IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCBleHAx
MGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KTsKCmV4dGVy
biBmbG9hdCBwb3cxMGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxvYXQg
X194KTsKCgoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQp
OyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KTsKCgpl
eHRlcm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KTsgZXh0ZXJuIGZs
b2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gZmxvYXQg
bG9nZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KTsKCgpleHRl
cm4gZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0
IF9feCk7CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpOyBl
eHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKTsKCgoKZXh0ZXJu
IGZsb2F0IGV4cG0xZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBf
X3gpOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xv
ZzFwZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCk7IGV4dGVy
biBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gpOwoKCgoKZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9h
dCBfX3gpOyBleHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQg
bG9nMmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xvZzJmIChmbG9hdCBfX3gpOwoKCgoK
CgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQg
X19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9h
dCBfX3gpOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KTsKCgoKZXh0ZXJuIGZsb2F0
IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19oeXBvdGYgKGZs
b2F0IF9feCwgZmxvYXQgX195KTsKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KTsg
ZXh0ZXJuIGZsb2F0IF9fY2JydGYgKGZsb2F0IF9feCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWls
ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJu
IGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2Zsb29y
ZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195
KTsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKCmV4dGVy
biBpbnQgX19pc2luZmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gaW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWYgKGZsb2F0IF9fdmFs
dWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBpbmZu
YW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxv
YXQgX19pbmZuYW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQg
X19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCgpleHRlcm4gZmxvYXQgc2lnbmlmaWNh
bmRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCk7
CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9f
eCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxv
YXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0
IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBm
IChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgajFmIChm
bG9hdCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgam5mIChpbnQs
IGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkw
ZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkxZiAo
ZmxvYXQpOyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50
LCBmbG9hdCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCk7CgoKCgoKZXh0ZXJuIGZs
b2F0IGVyZmYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpOwpleHRlcm4gZmxv
YXQgZXJmY2YgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KTsKZXh0ZXJuIGZs
b2F0IGxnYW1tYWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpOwpleHRl
cm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCk7
CgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAo
ZmxvYXQpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25n
YW1wKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsK
CgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19yaW50
ZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFm
dGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZs
b2F0IF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBm
bG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKZXh0ZXJuIGZsb2F0
IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZs
b2F0IF9feCwgZmxvYXQgX19uKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwg
aW50IF9fbik7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbik7CgoK
ZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0
IF9feCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19u
KTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKTsKCgoK
ZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX25lYXJi
eWludGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0IF9feCk7IGV4
dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAo
ZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3Ry
dW5jZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g
ZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pOyBleHRlcm4g
ZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1byk7CgoKCgoK
CmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGludCBfX2xy
aW50ZiAoZmxvYXQgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194
KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4g
bG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAo
ZmxvYXQgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCk7IGV4
dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9h
dCBmZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCmV4
dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19m
bWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYg
KGZsb2F0IF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxv
YXQgX196KTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0
IF9feik7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIvdXNyL2luY2x1ZGUv
bWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIv
dXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wg
KGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJs
ZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRv
dWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwg
KGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJs
ZSBfX3ksIGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9u
ZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3Ns
IChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJs
ZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3Vi
bGUgdGFubCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAobG9u
ZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KTsgZXh0ZXJuIHZvaWQgX19z
aW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91Ymxl
ICpfX2Nvc3gpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9f
eCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19zaW5obCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5obCAobG9u
ZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9f
eCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRv
dWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5o
bCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91
YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KTsK
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGV4cDEwbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChs
b25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUg
X194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpOwoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVu
dCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9f
ZXhwb25lbnQpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwg
aW50IF9fZXhwb25lbnQpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91Ymxl
IF9feCwgaW50IF9fZXhwb25lbnQpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRv
dWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUg
bW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cik7IGV4dGVybiBsb25n
IGRvdWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGxvZzFwbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChs
b25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUg
X194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7CgoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cy
bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91
YmxlIF9feCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcg
ZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gp
OwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJs
ZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KTsKCgoK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUg
ZmFic2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRvdWJs
ZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlz
aW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGluZm5hbmwgKGludCBfX2Vy
cm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2lu
Zm5hbmwgKGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KTsKCgoK
CmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2NvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNo
YXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUg
X192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBqMGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJs
ZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fajFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9u
ZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpOwpl
eHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3kwbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3Vi
bGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQs
IGxvbmcgZG91YmxlKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRv
dWJsZSBlcmZjbCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9u
ZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJs
ZSB0Z2FtbWFsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxv
bmcgZG91YmxlKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSk7CgoKCgoKCmV4dGVybiBs
b25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOyBleHRl
cm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXAp
OwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRl
cmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCgpleHRl
cm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbik7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX24pOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBp
bnQgX19uKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBp
bnQgX19uKTsKCgpleHRlcm4gaW50IGlsb2dibCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGlu
dCBfX2lsb2dibCAobG9uZyBkb3VibGUgX194KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2Fs
YmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pOyBleHRlcm4gbG9uZyBkb3VibGUg
X19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pOwoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJv
dW5kbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25n
IGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBf
X3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1
bmNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4
dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSwgaW50ICpfX3F1byk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbXF1b2wgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50
IGxyaW50bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25n
IGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBf
X3gpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCk7CgoK
CmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBp
bnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJv
dW5kbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAo
bG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtYXhs
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoK
CmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRv
dWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25n
IGRvdWJsZSBfX3opOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KTsKIyAxMDAgIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDIgMwojIDExMyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gaW50IHNpZ25n
YW07CiMgMTU0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmVudW0KICB7CiAgICBGUF9OQU4sCgog
ICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBGUF9TVUJOT1JNQUwsCgogICAgRlBf
Tk9STUFMCgogIH07CiMgMjM2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7
CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9YT1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18K
fSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZF
UlNJT047CiMgMjU5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnN0cnVjdCBfX2V4Y2VwdGlvbgoK
CgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAg
ZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwogIH07CgoKZXh0ZXJuIGludCBtYXRoZXJy
IChzdHJ1Y3QgX19leGNlcHRpb24gKl9fZXhjKSB0aHJvdyAoKTsKIyAyODkgIi91c3IvaW5jbHVk
ZS9tYXRoLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZmxvYXQuaCIgMSAzCiMgMjkwICIvdXNyL2luY2x1ZGUvbWF0aC5o
IiAyIDMKIyA0MDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDQ0ICIvdXNyL2xvY2FsL2dj
YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk
X2NtYXRoLmgiIDIgMwojIDcwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NtYXRoLmgiIDMKbmFtZXNwYWNlIHN0
ZAp7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2NtYXRoX3Bvd2VyKF9UcCwgdW5z
aWduZWQgaW50KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBfVHAKICAgIF9f
Y21hdGhfYWJzKF9UcCBfX3gpCiAgICB7CiAgICAgIHJldHVybiBfX3ggPCBfVHAoKSA/IC1fX3gg
OiBfX3g7CiAgICB9CgoKICBpbmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194KSB7IHJldHVybiBf
X2J1aWx0aW5fZmFic2YoX194KTsgfQojIDk1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NtYXRoLmgiIDMKICBp
bmxpbmUgZmxvYXQKICBhY29zKGZsb2F0IF9feCkgeyByZXR1cm4gOjphY29zZihfX3gpOyB9CgoK
CgoKCiAgaW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194
KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0
YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBhdGFuMihmbG9hdCBfX3ksIGZsb2F0
IF9feCkgeyByZXR1cm4gOjphdGFuMmYoX195LCBfX3gpOyB9CgoKCgoKCgogIGlubGluZSBmbG9h
dAogIGNlaWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KIyAxMzkgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGRfY21hdGguaCIgMwogIGlubGluZSBmbG9hdAogIGNvcyhmbG9hdCBfX3gpIHsgcmV0
dXJuIDo6Y29zZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgY29zaChmbG9hdCBfX3gp
IHsgcmV0dXJuIDo6Y29zaGYoX194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIGV4cChmbG9h
dCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgZmFi
cyhmbG9hdCBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CiMgMTc0ICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RkX2NtYXRoLmgiIDMKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gpIHsg
cmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBmbW9kKGZsb2F0
IF9feCwgZmxvYXQgX195KSB7IHJldHVybiA6OmZtb2RmKF9feCwgX195KTsgfQoKCgoKCgoKICBp
bmxpbmUgZmxvYXQKICBmcmV4cChmbG9hdCBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJl
eHBmKF9feCwgX19leHApOyB9CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxvYXQgX194
LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgoKCgoKCgogIGlu
bGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoK
CiAgaW5saW5lIGZsb2F0CiAgbG9nMTAoZmxvYXQgX194KSB7IHJldHVybiA6OmxvZzEwZihfX3gp
OyB9CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIp
IHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CiMgMjM3ICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nt
YXRoLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bv
d19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAg
ICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6IF9fY21hdGhf
cG93ZXIoX194LCBfX24pOwogICAgfQoKCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwg
ZmxvYXQgX195KSB7IHJldHVybiA6OnBvd2YoX194LCBfX3kpOyB9CgoKCgoKCiAgaW5saW5lIGZs
b2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9fbikKICB7CiAgICByZXR1cm4gX19wb3dfaGVscGVy
KF9feCwgX19uKTsKICB9CgoKCgoKICBpbmxpbmUgZmxvYXQKICBzaW4oZmxvYXQgX194KSB7IHJl
dHVybiA6OnNpbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQgX194
KSB7IHJldHVybiA6OnNpbmhmKF9feCk7IH0KIyAyODQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY21hdGguaCIg
MwogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQgX194KSB7IHJldHVybiA6OnNxcnRmKF9feCk7
IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICB0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmYo
X194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJldHVybiA6
OnRhbmhmKF9feCk7IH0KCgoKCgoKICBleHRlcm4gIkMiIGRvdWJsZSBhY29zKGRvdWJsZSBfX3gp
OwoKICBleHRlcm4gIkMiIGRvdWJsZSBhc2luKGRvdWJsZSBfX3gpOwoKICBleHRlcm4gIkMiIGRv
dWJsZSBhdGFuKGRvdWJsZSBfX3gpOwoKICBleHRlcm4gIkMiIGRvdWJsZSBhdGFuMihkb3VibGUg
X195LCBkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgY2VpbChkb3VibGUgX194KTsK
CgoKCgogIGV4dGVybiAiQyIgZG91YmxlIGNvcyhkb3VibGUgX194KTsKCgogIGV4dGVybiAiQyIg
ZG91YmxlIGNvc2goZG91YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91YmxlIGV4cChkb3VibGUg
X194KTsKCgogIGlubGluZSBkb3VibGUKICBmYWJzKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVp
bHRpbl9mYWJzKF9feCk7IH0KCgoKCgogIGlubGluZSBkb3VibGUKICBhYnMoZG91YmxlIF9feCkg
eyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKCgoKCiAgZXh0ZXJuICJDIiBkb3VibGUg
Zmxvb3IoZG91YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91YmxlIGZtb2QoZG91YmxlIF9feCwg
ZG91YmxlIF9feSk7CgogIGV4dGVybiAiQyIgZG91YmxlIGZyZXhwKGRvdWJsZSBfX3gsIGludCog
X19leHApOwoKICBleHRlcm4gIkMiIGRvdWJsZSBsZGV4cChkb3VibGUgX194LCBpbnQgX19leHAp
OwoKICBleHRlcm4gIkMiIGRvdWJsZSBsb2coZG91YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91
YmxlIGxvZzEwKGRvdWJsZSBfX3gpOwoKICBleHRlcm4gIkMiIGRvdWJsZSBtb2RmKGRvdWJsZSBf
X3gsIGRvdWJsZSogX19pcHRyKTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgcG93KGRvdWJsZSBfX3gs
IGRvdWJsZSBfX3kpOwoKICBpbmxpbmUgZG91YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kp
CiAgewogICAgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9faSk7CiAgfQoKCgoKCiAgZXh0ZXJu
ICJDIiBkb3VibGUgc2luKGRvdWJsZSBfX3gpOwoKCiAgZXh0ZXJuICJDIiBkb3VibGUgc2luaChk
b3VibGUgX194KTsKCgoKCgogIGV4dGVybiAiQyIgZG91YmxlIHNxcnQoZG91YmxlIF9feCk7CgoK
ICBleHRlcm4gIkMiIGRvdWJsZSB0YW4oZG91YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91Ymxl
IHRhbmgoZG91YmxlIF9feCk7CgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWJzKGxvbmcgZG91
YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KIyAzOTkgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGRfY21hdGguaCIgMwogIGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUg
X194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoKCgoKCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRh
bmwoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4yKGxvbmcgZG91Ymxl
IF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmF0YW4ybChfX3ksIF9feCk7IH0KCgoK
CgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY2VpbChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu
IDo6Y2VpbGwoX194KTsgfQojIDQ0MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbWF0aC5oIiAzCiAgaW5saW5l
IGxvbmcgZG91YmxlCiAgY29zKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjb3NsKF9feCk7
IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3NoKGxvbmcgZG91YmxlIF9feCkgeyBy
ZXR1cm4gOjpjb3NobChfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZXhwKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpleHBsKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBmYWJzKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNs
KF9feCk7IH0KIyA0NzggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY21hdGguaCIgMwogIGlubGluZSBsb25nIGRv
dWJsZQogIGZsb29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwoX194KTsgfQoK
CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBs
b25nIGRvdWJsZQogIGZyZXhwKGxvbmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4g
OjpmcmV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbGRl
eHAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBsKF9feCwgX19l
eHApOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGxvZyhsb25nIGRvdWJsZSBfX3gp
IHsgcmV0dXJuIDo6bG9nbChfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9n
MTAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZzEwbChfX3gpOyB9CgoKCgoKCiAgaW5s
aW5lIGxvbmcgZG91YmxlCiAgbW9kZihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lw
dHIpIHsgcmV0dXJuIDo6bW9kZmwoX194LCBfX2lwdHIpOyB9CiMgNTQzICIvdXNyL2xvY2FsL2dj
YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk
X2NtYXRoLmgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCgoKCgoKICBpbmxp
bmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBpbnQgX19uKQogIHsKICAgIHJl
dHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOwogIH0KCgoKCgogIGlubGluZSBsb25nIGRvdWJs
ZQogIHNpbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2lubChfX3gpOyB9CgoKCgoKCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2lu
aGwoX194KTsgfQojIDU4MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbWF0aC5oIiAzCiAgaW5saW5lIGxvbmcg
ZG91YmxlCiAgc3FydChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c3FydGwoX194KTsgfQoK
CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu
IDo6dGFubChfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuaChsb25nIGRv
dWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFuaGwoX194KTsgfQoKCgoKfQojIDc1MyAiL3Vzci9sb2Nh
bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRz
L3N0ZF9jbWF0aC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9jbWF0aC50Y2MiIDMKbmFtZXNwYWNlIHN0ZCB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBpbnQg
X19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3aGls
ZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAgICAg
ICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAgfQoK
ICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDc1NCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbWF0aC5oIiAy
IDMKIyAzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL2NtYXRoIiAyIDMKIyA2MiAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBv
cnQuY3BwIiAyCgoKCiMgMSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiIDEK
IyA2MyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCiMgMSAiUGxhdGZvcm1T
dXBwb3J0L1BsYXRmb3JtU3VwcG9ydERlZmluaXRpb25zLmhwcCIgMQojIDY0ICJQbGF0Zm9ybVN1
cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvY2Fzc2VydCIgMSAzCgoj
IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGRfY2Fzc2VydC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jYXNz
ZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1
ZGUvYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzYgIi91
c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMgNTggIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpl
eHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9f
YXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwgdW5zaWduZWQgaW50IF9fbGluZSwgX19j
b25zdCBjaGFyICpfX2Z1bmN0aW9uKSB0aHJvdyAoKQoKCgogICAgIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9f
ZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25z
dCBjaGFyICpfX2Z1bmN0aW9uKSB0aHJvdyAoKQoKCgogICAgIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCn0KIyAzOCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDIgMwojIDMgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvY2Fzc2VydCIgMiAzCiMgNjggIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBw
IiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL2crKy9mdW5jdGlvbmFsIiAxIDMKIyA2OSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0
cmluZ0hlbHBlci5ocHAiIDIKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9pb3Nmd2QiIDEgMwojIDc3ICJQbGF0
Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL3ZlY3RvciIgMSAz
CiMgNzkgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIiAyCiMgODcgIlBsYXRm
b3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgojIDEgIi91c3IvaW5jbHVkZS93Y3R5cGUu
aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAy
IDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAy
IDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBp
bnQgd2N0eXBlX3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA2OSAi
L3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKCgoKCgoKCmVudW0KewogIF9JU3d1cHBlciA9ICgo
MCkgPCA4ID8gKGludCkgKDFVTCA8PCAoMCkgPDwgMjQpIDogKGludCkgKDFVTCA8PCAoKDApICsg
OCkpKSwKICBfSVN3bG93ZXIgPSAoKDEpIDwgOCA/IChpbnQpICgxVUwgPDwgKDEpIDw8IDI0KSA6
IChpbnQpICgxVUwgPDwgKCgxKSArIDgpKSksCiAgX0lTd2FscGhhID0gKCgyKSA8IDggPyAoaW50
KSAoMVVMIDw8ICgyKSA8PCAyNCkgOiAoaW50KSAoMVVMIDw8ICgoMikgKyA4KSkpLAogIF9JU3dk
aWdpdCA9ICgoMykgPCA4ID8gKGludCkgKDFVTCA8PCAoMykgPDwgMjQpIDogKGludCkgKDFVTCA8
PCAoKDMpICsgOCkpKSwKICBfSVN3eGRpZ2l0ID0gKCg0KSA8IDggPyAoaW50KSAoMVVMIDw8ICg0
KSA8PCAyNCkgOiAoaW50KSAoMVVMIDw8ICgoNCkgKyA4KSkpLAogIF9JU3dzcGFjZSA9ICgoNSkg
PCA4ID8gKGludCkgKDFVTCA8PCAoNSkgPDwgMjQpIDogKGludCkgKDFVTCA8PCAoKDUpICsgOCkp
KSwKICBfSVN3cHJpbnQgPSAoKDYpIDwgOCA/IChpbnQpICgxVUwgPDwgKDYpIDw8IDI0KSA6IChp
bnQpICgxVUwgPDwgKCg2KSArIDgpKSksCiAgX0lTd2dyYXBoID0gKCg3KSA8IDggPyAoaW50KSAo
MVVMIDw8ICg3KSA8PCAyNCkgOiAoaW50KSAoMVVMIDw8ICgoNykgKyA4KSkpLAogIF9JU3dibGFu
ayA9ICgoOCkgPCA4ID8gKGludCkgKDFVTCA8PCAoOCkgPDwgMjQpIDogKGludCkgKDFVTCA8PCAo
KDgpICsgOCkpKSwKICBfSVN3Y250cmwgPSAoKDkpIDwgOCA/IChpbnQpICgxVUwgPDwgKDkpIDw8
IDI0KSA6IChpbnQpICgxVUwgPDwgKCg5KSArIDgpKSksCiAgX0lTd3B1bmN0ID0gKCgxMCkgPCA4
ID8gKGludCkgKDFVTCA8PCAoMTApIDw8IDI0KSA6IChpbnQpICgxVUwgPDwgKCgxMCkgKyA4KSkp
LAogIF9JU3dhbG51bSA9ICgoMTEpIDwgOCA/IChpbnQpICgxVUwgPDwgKDExKSA8PCAyNCkgOiAo
aW50KSAoMVVMIDw8ICgoMTEpICsgOCkpKQp9OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVy
biBpbnQgaXN3YWxudW0gKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlz
d2FscGhhICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2lu
dF90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193Yykg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgaXN3bG93ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGlzd3ByaW50ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1
bmN0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50
X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193Yykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgaXN3YmxhbmsgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxNjIg
Ii91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gd2N0eXBlX3QgX193Y3R5cGUgKF9fY29u
c3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9f
Y29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3djdHlw
ZSAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYykgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN3
Y3R5cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwojIDIyNyAiL3Vz
ci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgX19jb25zdCBfX2ludDMyX3QgKndjdHJhbnNf
dDsKCgpleHRlcm4gd2ludF90IHRvd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0
ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiB3aW50
X3QgX190b3djdHJhbnMgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3QgX19kZXNjKSB0aHJvdyAoKTsK
Cn0KIyAyNTEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKCgoKZXh0ZXJu
IHdjdHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93ICgpOwoK
CmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFuc190IF9fZGVzYykg
dGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjYzICIvdXNy
L2luY2x1ZGUvd2N0eXBlLmgiIDIgMwoKCgpleHRlcm4gaW50IF9faXN3YWxudW1fbCAod2ludF90
IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgX19p
c3dhbHBoYV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBfX2lzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxl
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xv
Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2dyYXBoX2wgKHdp
bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
X19pc3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBfX2lzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j
YWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dwdW5jdF9sICh3aW50X3QgX193Yywg
X19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3c3BhY2Vf
bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBfX2lzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxl
X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2JsYW5rX2wgKHdpbnRf
dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHlwZV90
IF9fd2N0eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2Fs
ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3Y3R5cGVfbCAod2ludF90IF9fd2MsIHdj
dHlwZV90IF9fZGVzYywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CiMgMzM0ICIvdXNy
L2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuIHdpbnRfdCBfX3Rvd2xvd2VyX2wgKHdpbnRfdCBf
X3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93
dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4
dGVybiB3aW50X3QgX190b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2Ms
IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKfQojIDg4ICJQbGF0Zm9ybVN1cHBv
cnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKCgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5n
LmhwcCIgMQojIDkyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKCgoj
IDEgIlBsYXRmb3JtU3VwcG9ydC9YYWxhblVuaWNvZGUuaHBwIiAxCiMgNjMgIlBsYXRmb3JtU3Vw
cG9ydC9YYWxhblVuaWNvZGUuaHBwIgojIDEgIlBsYXRmb3JtU3VwcG9ydC9QbGF0Zm9ybVN1cHBv
cnREZWZpbml0aW9ucy5ocHAiIDEKIyA2NCAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuVW5pY29kZS5o
cHAiIDIKCgoKIyAxICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiIDEKIyA2OCAiUGxhdGZv
cm1TdXBwb3J0L1hhbGFuVW5pY29kZS5ocHAiIDIKCgoKCgoKbmFtZXNwYWNlIFhhbGFuVW5pY29k
ZQoKewojIDIwOSAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuVW5pY29kZS5ocHAiCiAgICAgICAgc3Rh
dGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFySFRhYiA9IDB4MDk7CiAgICAgICAgc3RhdGljIGNv
bnN0IFhhbGFuRE9NQ2hhciBjaGFyTEYgPSAweDBBOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxh
bkRPTUNoYXIgY2hhckNSID0gMHgwRDsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFy
IGNoYXJGRiA9IDB4MEM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyU3Bh
Y2UgPSAweDIwOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJFeGNsYW1h
dGlvbk1hcmsgPSAweDIxOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJR
dW90ZU1hcmsgPSAweDIyOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJO
dW1iZXJTaWduID0gMHgyMzsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFy
RG9sbGFyU2lnbiA9IDB4MjQ7CgogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hh
clBlcmNlbnRTaWduID0gMHgyNTsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBj
aGFyQW1wZXJzYW5kID0gMHgyNjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBj
aGFyQXBvc3Ryb3BoZSA9IDB4Mjc7CgogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIg
Y2hhckxlZnRQYXJlbnRoZXNpcyA9IDB4Mjg7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9N
Q2hhciBjaGFyUmlnaHRQYXJlbnRoZXNpcyA9IDB4Mjk7CgogICAgICAgIHN0YXRpYyBjb25zdCBY
YWxhbkRPTUNoYXIgY2hhckFzdGVyaXNrID0gMHgyQTsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhh
bGFuRE9NQ2hhciBjaGFyUGx1c1NpZ24gPSAweDJCOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFs
YW5ET01DaGFyIGNoYXJDb21tYSA9IDB4MkM7CgogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRP
TUNoYXIgY2hhckh5cGhlbk1pbnVzID0gMHgyRDsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFu
RE9NQ2hhciBjaGFyRnVsbFN0b3AgPSAweDJFOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5E
T01DaGFyIGNoYXJTb2xpZHVzID0gMHgyRjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9N
Q2hhciBjaGFyRGlnaXRfMCA9IDB4MzA7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hh
ciBjaGFyRGlnaXRfMSA9IDB4MzE7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBj
aGFyRGlnaXRfMiA9IDB4MzI7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFy
RGlnaXRfMyA9IDB4MzM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGln
aXRfNCA9IDB4MzQ7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRf
NSA9IDB4MzU7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfNiA9
IDB4MzY7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfNyA9IDB4
Mzc7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfOCA9IDB4Mzg7
CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfOSA9IDB4Mzk7Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckNvbG9uID0gMHgzQTsKICAgICAg
ICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJTZW1pY29sb24gPSAweDNCOwoKICAgICAg
ICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXNzVGhhblNpZ24gPSAweDNDOwoKICAg
ICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJFcXVhbHNTaWduID0gMHgzRDsKCiAg
ICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyR3JlYXRlclRoYW5TaWduID0gMHgz
RTsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyUXVlc3Rpb25NYXJrID0g
MHgzRjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyQ29tbWVyY2lhbEF0
ID0gMHg0MDsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX0Eg
PSAweDQxOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9CID0g
MHg0MjsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfQyA9IDB4
NDM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX0QgPSAweDQ0
OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9FID0gMHg0NTsK
ICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfRiA9IDB4NDY7CiAg
ICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX0cgPSAweDQ3OwogICAg
ICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9IID0gMHg0ODsKICAgICAg
ICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfSSA9IDB4NDk7CiAgICAgICAg
c3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX0ogPSAweDRBOwogICAgICAgIHN0
YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9LID0gMHg0QjsKICAgICAgICBzdGF0
aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfTCA9IDB4NEM7CiAgICAgICAgc3RhdGlj
IGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX00gPSAweDREOwogICAgICAgIHN0YXRpYyBj
b25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9OID0gMHg0RTsKICAgICAgICBzdGF0aWMgY29u
c3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfTyA9IDB4NEY7CiAgICAgICAgc3RhdGljIGNvbnN0
IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX1AgPSAweDUwOwogICAgICAgIHN0YXRpYyBjb25zdCBY
YWxhbkRPTUNoYXIgY2hhckxldHRlcl9RID0gMHg1MTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFs
YW5ET01DaGFyIGNoYXJMZXR0ZXJfUiA9IDB4NTI7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFu
RE9NQ2hhciBjaGFyTGV0dGVyX1MgPSAweDUzOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRP
TUNoYXIgY2hhckxldHRlcl9UID0gMHg1NDsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01D
aGFyIGNoYXJMZXR0ZXJfVSA9IDB4NTU7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hh
ciBjaGFyTGV0dGVyX1YgPSAweDU2OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIg
Y2hhckxldHRlcl9XID0gMHg1NzsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNo
YXJMZXR0ZXJfWCA9IDB4NTg7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFy
TGV0dGVyX1kgPSAweDU5OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxl
dHRlcl9aID0gMHg1QTsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGVm
dFNxdWFyZUJyYWNrZXQgPSAweDVCOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFy
IGNoYXJSZXZlcnNlU29saWR1cyA9IDB4NUM7CgogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRP
TUNoYXIgY2hhclJpZ2h0U3F1YXJlQnJhY2tldCA9IDB4NUQ7CgogICAgICAgIHN0YXRpYyBjb25z
dCBYYWxhbkRPTUNoYXIgY2hhckNpcmN1bWZsZXhBY2NlbnQgPSAweDVFOwoKICAgICAgICBzdGF0
aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMb3dMaW5lID0gMHg1RjsKCiAgICAgICAgc3RhdGlj
IGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX2EgPSAweDYxOwogICAgICAgIHN0YXRpYyBj
b25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9iID0gMHg2MjsKICAgICAgICBzdGF0aWMgY29u
c3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfYyA9IDB4NjM7CiAgICAgICAgc3RhdGljIGNvbnN0
IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX2QgPSAweDY0OwogICAgICAgIHN0YXRpYyBjb25zdCBY
YWxhbkRPTUNoYXIgY2hhckxldHRlcl9lID0gMHg2NTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFs
YW5ET01DaGFyIGNoYXJMZXR0ZXJfZiA9IDB4NjY7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFu
RE9NQ2hhciBjaGFyTGV0dGVyX2cgPSAweDY3OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRP
TUNoYXIgY2hhckxldHRlcl9pID0gMHg2OTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01D
aGFyIGNoYXJMZXR0ZXJfbCA9IDB4NkM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hh
ciBjaGFyTGV0dGVyX20gPSAweDZEOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIg
Y2hhckxldHRlcl9uID0gMHg2RTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNo
YXJMZXR0ZXJfbyA9IDB4NkY7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFy
TGV0dGVyX3AgPSAweDcwOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxl
dHRlcl9xID0gMHg3MTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0
ZXJfciA9IDB4NzI7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVy
X3MgPSAweDczOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl90
ID0gMHg3NDsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfdSA9
IDB4NzU7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX3cgPSAw
eDc3OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl94ID0gMHg3
ODsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfeSA9IDB4Nzk7
CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX3ogPSAweDdBOwoK
ICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZWZ0Q3VybHlCcmFja2V0ID0g
MHg3QjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyVmVydGljYWxMaW5l
ID0gMHg3QzsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyUmlnaHRDdXJs
eUJyYWNrZXQgPSAweDdEOwojIDM1MyAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuVW5pY29kZS5ocHAi
Cn07CiMgOTYgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIiAyCiMgMSAiUGxh
dGZvcm1TdXBwb3J0L1hhbGFuWE1MQ2hhci5ocHAiIDEKIyA2MyAiUGxhdGZvcm1TdXBwb3J0L1hh
bGFuWE1MQ2hhci5ocHAiCiMgMSAiUGxhdGZvcm1TdXBwb3J0L1BsYXRmb3JtU3VwcG9ydERlZmlu
aXRpb25zLmhwcCIgMQojIDY0ICJQbGF0Zm9ybVN1cHBvcnQvWGFsYW5YTUxDaGFyLmhwcCIgMgoK
CgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIgMQojIDY4ICJQbGF0Zm9ybVN1cHBv
cnQvWGFsYW5YTUxDaGFyLmhwcCIgMgoKCgpzdHJ1Y3QgWGFsYW5YTUxDaGFyCnsKCnB1YmxpYzoK
CiAgICAgICAgZW51bSBlVHlwZQogICAgICAgIHsKICAgICAgICAgICAgICAgIFhNTF9YWCA9IDAs
CiAgICAgICAgICAgICAgICBYTUxfQkMgPSAxLAogICAgICAgICAgICAgICAgWE1MX0lEID0gMiwK
ICAgICAgICAgICAgICAgIFhNTF9FWCA9IDMsCiAgICAgICAgICAgICAgICBYTUxfREkgPSA0LAog
ICAgICAgICAgICAgICAgWE1MX0NDID0gNSwKICAgICAgICAgICAgICAgIFhNTF9XUyA9IDYKICAg
ICAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBjaGFyIHRoZVVuaWNvZGVUYWJsZVtdOwoKICAgICAg
ICBzdGF0aWMgYm9vbAogICAgICAgIGlzQmFzZUNoYXIoWGFsYW5ET01DaGFyIGMpCiAgICAgICAg
ewogICAgICAgICAgICAgICAgcmV0dXJuIHRoZVVuaWNvZGVUYWJsZVtjXSA9PSBYTUxfQkM7CiAg
ICAgICAgfQoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzSWRlb2dyYXBoaWMoWGFsYW5E
T01DaGFyIGMpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoZVVuaWNvZGVUYWJs
ZVtjXSA9PSBYTUxfSUQ7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlz
RXh0ZW5kZXIoWGFsYW5ET01DaGFyIGMpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu
IHRoZVVuaWNvZGVUYWJsZVtjXSA9PSBYTUxfRVg7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMg
Ym9vbAogICAgICAgIGlzRGlnaXQoWGFsYW5ET01DaGFyIGMpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgcmV0dXJuIHRoZVVuaWNvZGVUYWJsZVtjXSA9PSBYTUxfREk7CiAgICAgICAgfQoKICAg
ICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzQ29tYmluaW5nQ2hhcihYYWxhbkRPTUNoYXIgYykK
ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlVW5pY29kZVRhYmxlW2NdID09IFhN
TF9DQzsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgaXNXaGl0ZXNwYWNl
KFhhbGFuRE9NQ2hhciBjKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVVbmlj
b2RlVGFibGVbY10gPT0gWE1MX1dTOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIGJvb2wKICAg
ICAgICBpc0xldHRlcihYYWxhbkRPTUNoYXIgYykKICAgICAgICB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhlVW5pY29kZVRhYmxlW2NdID09IFhNTF9CQyB8fCB0aGVVbmljb2RlVGFibGVbY10g
PT0gWE1MX0lEOwogICAgICAgIH0KCgp9OwojIDk3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5n
SGVscGVyLmhwcCIgMgoKCgpjbGFzcyBYYWxhbk91dHB1dFN0cmVhbTsKIyAxMzkgIlBsYXRmb3Jt
U3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgY29uc3QgWGFsYW5ET01TdHJpbmcm
ClN0YXRpY1N0cmluZ1RvRE9NU3RyaW5nKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcp
CnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5nOwp9CiMgMTUzICJQbGF0Zm9ybVN1cHBvcnQvRE9N
U3RyaW5nSGVscGVyLmhwcCIKdm9pZApET01TdHJpbmdIZWxwZXJJbml0aWFsaXplKCk7CgoKCgoK
Cgp2b2lkCkRPTVN0cmluZ0hlbHBlclRlcm1pbmF0ZSgpOwojIDE3NCAiUGxhdGZvcm1TdXBwb3J0
L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTUNoYXIqCmNfd3N0cihj
b25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAgICAgcmV0dXJuIHRoZVN0cmlu
Zy5jX3N0cigpOwp9CiMgMTg5ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIK
aW5saW5lIGNvbnN0IGNoYXIqCmNfc3RyKGNvbnN0IENoYXJWZWN0b3JUeXBlJiB0aGVTdHJpbmcp
CnsKICAgICAgICBpZiAodGhlU3RyaW5nLnNpemUoKSA9PSAwKQogICAgICAgIHsKICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogY29uc3QgcHRyID0gJnRoZVN0cmluZ1swXTsKCiAgICAgICAg
ICAgICAgICAoKHZvaWQpICgocHRyW3RoZVN0cmluZy5zaXplKCkgLSAxXSA9PSAnXDAnKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoInB0clt0aGVTdHJpbmcuc2l6ZSgpIC0gMV0gPT0gJ1xcMCciLCAi
UGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiLCAyMDAsIF9fUFJFVFRZX0ZVTkNU
SU9OX18pLCAwKSkpOwoKICAgICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgICAgfQp9CiMg
MjIzICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGNvbnN0IFhh
bGFuRE9NQ2hhcioKY193c3RyKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKQp7CiAgICAg
ICAgcmV0dXJuIHRoZVN0cmluZzsKfQojIDIzOCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hl
bHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTUNoYXIqCnRvQ2hhckFycmF5KGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5nLmNfc3Ry
KCk7Cn0KIyAyNTIgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUg
Y29uc3QgWGFsYW5ET01DaGFyKgp0b0NoYXJBcnJheShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0
cmluZykKewogICAgICAgIHJldHVybiB0aGVTdHJpbmc7Cn0KIyAyNjcgIlBsYXRmb3JtU3VwcG9y
dC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgY29uc3QgY2hhcioKdG9DaGFyQXJyYXkoY29u
c3QgQ2hhclZlY3RvclR5cGUmIHRoZVN0cmluZykKewogICAgICAgIHJldHVybiB0aGVTdHJpbmcu
c2l6ZSgpID09IDAgPyAwIDogJnRoZVN0cmluZ1swXTsKfQojIDI4MiAiUGxhdGZvcm1TdXBwb3J0
L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB2b2lkCnJlc2VydmUoCiAgICAgICAgICAgICAg
ICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB0aGVDb3VudCkKewogICAgICAgIHRoZVN0cmluZy5yZXNlcnZlKHRo
ZUNvdW50KTsKfQojIDI5OCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlu
bGluZSB1bnNpZ25lZCBpbnQKbGVuZ3RoKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcp
CnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5nLmxlbmd0aCgpOwp9CiMgMzEzICJQbGF0Zm9ybVN1
cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIHVuc2lnbmVkIGludApsZW5ndGgoY29u
c3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcpCnsKICAgICAgICAoKHZvaWQpICgodGhlU3RyaW5n
ICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlU3RyaW5nICE9IDAiLCAiUGxhdGZvcm1T
dXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiLCAzMTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw
KSkpOwoKICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUJ1ZmZlclBvaW50ZXIgPSB0aGVT
dHJpbmc7CgogICAgICAgIHdoaWxlKCp0aGVCdWZmZXJQb2ludGVyICE9IDApCiAgICAgICAgewog
ICAgICAgICAgICAgICAgdGhlQnVmZmVyUG9pbnRlcisrOwogICAgICAgIH0KCiAgICAgICAgcmV0
dXJuIHRoZUJ1ZmZlclBvaW50ZXIgLSB0aGVTdHJpbmc7Cn0KIyAzMzYgIlBsYXRmb3JtU3VwcG9y
dC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgdW5zaWduZWQgaW50Cmxlbmd0aChjb25zdCBj
aGFyKiB0aGVTdHJpbmcpCnsKICAgICAgICAoKHZvaWQpICgodGhlU3RyaW5nICE9IDApID8gMCA6
IChfX2Fzc2VydF9mYWlsICgidGhlU3RyaW5nICE9IDAiLCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0
cmluZ0hlbHBlci5ocHAiLCAzMzksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAg
ICByZXR1cm4gc3RybGVuKHRoZVN0cmluZyk7Cn0KIyAzNTIgIlBsYXRmb3JtU3VwcG9ydC9ET01T
dHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAppc0VtcHR5KGNvbnN0IFhhbGFuRE9NU3RyaW5n
JiBzdHIpCnsKICAgICAgICByZXR1cm4gbGVuZ3RoKHN0cikgPT0gMCA/IHRydWUgOiBmYWxzZTsK
fQojIDM2OSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB1bnNp
Z25lZCBpbnQKaW5kZXhPZigKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01D
aGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NQ2hhciB0aGVD
aGFyKQp7CiAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVQb2ludGVyID0gdGhlU3RyaW5n
OwoKICAgICAgICB3aGlsZSgqdGhlUG9pbnRlciAhPSB0aGVDaGFyICYmICp0aGVQb2ludGVyICE9
IDApCiAgICAgICAgewogICAgICAgICAgICAgICAgKyt0aGVQb2ludGVyOwogICAgICAgIH0KCiAg
ICAgICAgcmV0dXJuIHRoZVBvaW50ZXIgLSB0aGVTdHJpbmc7Cn0KIyAzOTUgIlBsYXRmb3JtU3Vw
cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgdW5zaWduZWQgaW50CmluZGV4T2YoCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcsCiAg
ICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NQ2hhciB0aGVDaGFyKQp7CiAgICAgICAgaWYg
KHRoZVN0cmluZy5sZW5ndGgoKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4T2YoY193c3RyKHRoZVN0cmluZyksIHRoZUNoYXIpOwogICAgICAgIH0KfQojIDQy
MSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnVuc2lnbmVkIGludAppbmRl
eE9mKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmlu
ZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdWJzdHJp
bmcpOwojIDQzNiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnVuc2lnbmVk
IGludAppbmRleE9mKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgdGhlU3Vic3RyaW5nKTsKIyA0NTMgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIu
aHBwIgp1bnNpZ25lZCBpbnQKbGFzdEluZGV4T2YoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxh
bkRPTUNoYXIgdGhlQ2hhcik7CiMgNDY5ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVy
LmhwcCIKaW5saW5lIHVuc2lnbmVkIGludApsYXN0SW5kZXhPZigKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAg
ICAgICAgWGFsYW5ET01DaGFyIHRoZUNoYXIpCnsKICAgICAgICByZXR1cm4gbGFzdEluZGV4T2Yo
Y193c3RyKHRoZVN0cmluZyksIHRoZUNoYXIpOwp9CiMgNDg2ICJQbGF0Zm9ybVN1cHBvcnQvRE9N
U3RyaW5nSGVscGVyLmhwcCIKYm9vbApzdGFydHNXaXRoKAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdWJzdHJpbmcpOwojIDUwMCAiUGxhdGZvcm1TdXBwb3J0
L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wKc3RhcnRzV2l0aCgKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdWJzdHJpbmcpOwojIDUxNCAiUGxhdGZvcm1T
dXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wKc3RhcnRzV2l0aCgKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdWJzdHJpbmcpOwojIDUyOCAiUGxh
dGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wKc3RhcnRzV2l0aCgKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN1YnN0cmluZyk7CiMg
NTQyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKc3Rh
cnRzV2l0aCgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRo
ZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGhlU3Vic3RyaW5n
KQp7CiAgICAgICAgcmV0dXJuIHN0YXJ0c1dpdGgoCiAgICAgICAgICAgICAgICAgICAgICAgIHRo
ZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcodGhlU3Vic3Ry
aW5nKSk7Cn0KIyA1NjEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpib29s
CmVuZHNXaXRoKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRo
ZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVT
dWJzdHJpbmcpOwojIDU3NSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlu
bGluZSBib29sCmVuZHNXaXRoKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP
TVN0cmluZyYgdGhlRE9NU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlU3Vic3RyaW5nKQp7CiAgICAgICAgcmV0dXJuIGVuZHNXaXRoKGNfd3N0
cih0aGVET01TdHJpbmcpLCBjX3dzdHIodGhlU3Vic3RyaW5nKSk7Cn0KIyA1OTIgIlBsYXRmb3Jt
U3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTVN0cmluZyAmCkRvdWJsZVRvRE9N
U3RyaW5nKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlVmFsdWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVSZXN1bHQpOwojIDYwNSAiUGxhdGZv
cm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTVN0cmlu
ZwpEb3VibGVUb0RPTVN0cmluZyhkb3VibGUgdGhlVmFsdWUpCnsKICAgICAgICBYYWxhbkRPTVN0
cmluZyB0aGVSZXN1bHQ7CgogICAgICAgIERvdWJsZVRvRE9NU3RyaW5nKHRoZVZhbHVlLCB0aGVS
ZXN1bHQpOwoKICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNjI1ICJQbGF0Zm9ybVN1cHBv
cnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcgJgpMb25nVG9IZXhET01TdHJp
bmcoCiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGhlVmFsdWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVSZXN1bHQpOwojIDYzOSAiUGxhdGZvcm1TdXBw
b3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTVN0cmluZwpMb25n
VG9IZXhET01TdHJpbmcobG9uZyB0aGVWYWx1ZSkKewogICAgICAgIFhhbGFuRE9NU3RyaW5nIHRo
ZVJlc3VsdDsKCiAgICAgICAgTG9uZ1RvSGV4RE9NU3RyaW5nKHRoZVZhbHVlLCB0aGVSZXN1bHQp
OwoKICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNjU5ICJQbGF0Zm9ybVN1cHBvcnQvRE9N
U3RyaW5nSGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcgJgpVbnNpZ25lZExvbmdUb0hleERPTVN0
cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aGVWYWx1ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRoZVJlc3VsdCk7CiMgNjczICJQ
bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGNvbnN0IFhhbGFuRE9N
U3RyaW5nClVuc2lnbmVkTG9uZ1RvSGV4RE9NU3RyaW5nKHVuc2lnbmVkIGxvbmcgdGhlVmFsdWUp
CnsKICAgICAgICBYYWxhbkRPTVN0cmluZyB0aGVSZXN1bHQ7CgogICAgICAgIFVuc2lnbmVkTG9u
Z1RvSGV4RE9NU3RyaW5nKHRoZVZhbHVlLCB0aGVSZXN1bHQpOwoKICAgICAgICByZXR1cm4gdGhl
UmVzdWx0Owp9CiMgNjkyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFs
YW5ET01TdHJpbmcgJgpMb25nVG9ET01TdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgdGhlVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVS
ZXN1bHQpOwojIDcwNSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGlu
ZSBjb25zdCBYYWxhbkRPTVN0cmluZwpMb25nVG9ET01TdHJpbmcobG9uZyB0aGVWYWx1ZSkKewog
ICAgICAgIFhhbGFuRE9NU3RyaW5nIHRoZVJlc3VsdDsKCiAgICAgICAgTG9uZ1RvRE9NU3RyaW5n
KHRoZVZhbHVlLCB0aGVSZXN1bHQpOwoKICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNzI1
ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcgJgpV
bnNpZ25lZExvbmdUb0RPTVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyB0aGVWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRo
ZVJlc3VsdCk7CiMgNzM4ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5s
aW5lIGNvbnN0IFhhbGFuRE9NU3RyaW5nClVuc2lnbmVkTG9uZ1RvRE9NU3RyaW5nKHVuc2lnbmVk
IGxvbmcgdGhlVmFsdWUpCnsKICAgICAgICBYYWxhbkRPTVN0cmluZyB0aGVSZXN1bHQ7CgogICAg
ICAgIFVuc2lnbmVkTG9uZ1RvRE9NU3RyaW5nKHRoZVZhbHVlLCB0aGVSZXN1bHQpOwoKICAgICAg
ICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNzU2ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs
cGVyLmhwcCIKaW50CldpZGVTdHJpbmdUb0ludChjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmlu
Zyk7CiMgNzY3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKbG9uZwpXaWRl
U3RyaW5nVG9Mb25nKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKTsKIyA3NzggIlBsYXRm
b3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgp1bnNpZ25lZCBsb25nCldpZGVTdHJpbmdU
b1Vuc2lnbmVkTG9uZyhjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgNzg5ICJQbGF0
Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKZG91YmxlCldpZGVTdHJpbmdUb0RvdWJs
ZShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgODAwICJQbGF0Zm9ybVN1cHBvcnQv
RE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGludApET01TdHJpbmdUb0ludChjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAgICAgcmV0dXJuIFdpZGVTdHJpbmdUb0ludChj
X3dzdHIodGhlU3RyaW5nKSk7Cn0KIyA4MTQgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxw
ZXIuaHBwIgppbmxpbmUgbG9uZwpET01TdHJpbmdUb0xvbmcoY29uc3QgWGFsYW5ET01TdHJpbmcm
IHRoZVN0cmluZykKewogICAgICAgIHJldHVybiBXaWRlU3RyaW5nVG9Mb25nKGNfd3N0cih0aGVT
dHJpbmcpKTsKfQojIDgyOCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlu
bGluZSB1bnNpZ25lZCBsb25nCkRPTVN0cmluZ1RvVW5zaWduZWRMb25nKGNvbnN0IFhhbGFuRE9N
U3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICByZXR1cm4gV2lkZVN0cmluZ1RvVW5zaWduZWRM
b25nKGNfd3N0cih0aGVTdHJpbmcpKTsKfQojIDg0MiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu
Z0hlbHBlci5ocHAiCmlubGluZSBkb3VibGUKRE9NU3RyaW5nVG9Eb3VibGUoY29uc3QgWGFsYW5E
T01TdHJpbmcmIHRoZVN0cmluZykKewogICAgICAgIHJldHVybiBXaWRlU3RyaW5nVG9Eb3VibGUo
Y193c3RyKHRoZVN0cmluZykpOwp9CiMgODU3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs
cGVyLmhwcCIKdm9pZApPdXRwdXRTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFu
T3V0cHV0U3RyZWFtJiB0aGVTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENo
YXJWZWN0b3JUeXBlJiB0aGVTdHJpbmcpOwojIDg3MSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu
Z0hlbHBlci5ocHAiCnZvaWQKT3V0cHV0U3RyaW5nKAoKCgogICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om9zdHJlYW0mIHRoZVN0cmVhbSwKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IENoYXJWZWN0b3JUeXBlJiB0aGVTdHJpbmcpOwojIDg4OSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0
cmluZ0hlbHBlci5ocHAiCnZvaWQKT3V0cHV0U3RyaW5nKAogICAgICAgICAgICAgICAgICAgICAg
ICBYYWxhbk91dHB1dFN0cmVhbSYgdGhlU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgOTAzICJQbGF0Zm9ybVN1cHBvcnQvRE9N
U3RyaW5nSGVscGVyLmhwcCIKdm9pZApPdXRwdXRTdHJpbmcoCgoKCiAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6b3N0cmVhbSYgdGhlU3RyZWFtLAoKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcpOwojIDkyMSAiUGxhdGZvcm1TdXBwb3J0L0RP
TVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB2b2lkCk91dHB1dFN0cmluZygKICAgICAgICAgICAg
ICAgICAgICAgICAgWGFsYW5PdXRwdXRTdHJlYW0mIHRoZVN0cmVhbSwKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZykKewogICAgICAgIGlmIChp
c0VtcHR5KHRoZVN0cmluZykgPT0gZmFsc2UpCiAgICAgICAgewogICAgICAgICAgICAgICAgT3V0
cHV0U3RyaW5nKHRoZVN0cmVhbSwgY193c3RyKHRoZVN0cmluZykpOwogICAgICAgIH0KfQojIDk0
MSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB2b2lkCk91dHB1
dFN0cmluZygKCgoKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtJiB0aGVTdHJl
YW0sCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3Ry
aW5nKQp7CiAgICAgICAgT3V0cHV0U3RyaW5nKHRoZVN0cmVhbSwgY193c3RyKHRoZVN0cmluZykp
Owp9CiMgOTYyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhh
bGFuT3V0cHV0U3RyZWFtJgpvcGVyYXRvcjw8KAogICAgICAgICAgICAgICAgICAgICAgICBYYWxh
bk91dHB1dFN0cmVhbSYgdGhlU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBD
aGFyVmVjdG9yVHlwZSYgdGhlU3RyaW5nKQp7CiAgICAgICAgT3V0cHV0U3RyaW5nKHRoZVN0cmVh
bSwgdGhlU3RyaW5nKTsKCiAgICAgICAgcmV0dXJuIHRoZVN0cmVhbTsKfQojIDk4NiAiUGxhdGZv
cm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBzdGQ6Om9zdHJlYW0mCm9wZXJh
dG9yPDwoCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSYgdGhlU3RyZWFtLAoK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhclZlY3RvclR5cGUmIHRoZVN0cmluZykK
ewogICAgICAgIE91dHB1dFN0cmluZyh0aGVTdHJlYW0sIHRoZVN0cmluZyk7CgogICAgICAgIHJl
dHVybiB0aGVTdHJlYW07Cn0KIyAxMDA2ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVy
LmhwcCIKaW5saW5lIFhhbGFuT3V0cHV0U3RyZWFtJgpvcGVyYXRvcjw8KAogICAgICAgICAgICAg
ICAgICAgICAgICBYYWxhbk91dHB1dFN0cmVhbSYgdGhlU3RyZWFtLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZykKewogICAgICAgIE91dHB1dFN0
cmluZyh0aGVTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZVN0cmlu
Zyk7CgogICAgICAgIHJldHVybiB0aGVTdHJlYW07Cn0KIyAxMDMxICJQbGF0Zm9ybVN1cHBvcnQv
RE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIHN0ZDo6b3N0cmVhbSYKb3BlcmF0b3I8PCgKICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtJiB0aGVTdHJlYW0sCgogICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZykKewogICAgICAgIE91
dHB1dFN0cmluZyh0aGVTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
ZVN0cmluZyk7CgogICAgICAgIHJldHVybiB0aGVTdHJlYW07Cn0KIyAxMDUyICJQbGF0Zm9ybVN1
cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuT3V0cHV0U3RyZWFtJgpvcGVy
YXRvcjw8KAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk91dHB1dFN0cmVhbSYgdGhlU3Ry
ZWFtLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3Ry
aW5nKQp7CiAgICAgICAgT3V0cHV0U3RyaW5nKHRoZVN0cmVhbSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhlU3RyaW5nKTsKCiAgICAgICAgcmV0dXJuIHRoZVN0cmVhbTsKfQoj
IDEwNzcgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgc3RkOjpv
c3RyZWFtJgpvcGVyYXRvcjw8KAogICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0m
IHRoZVN0cmVhbSwKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5n
JiB0aGVTdHJpbmcpCnsKICAgICAgICBPdXRwdXRTdHJpbmcodGhlU3RyZWFtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGVTdHJpbmcpOwoKICAgICAgICByZXR1cm4gdGhlU3Ry
ZWFtOwp9CiMgMTA5OCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGlu
ZSBYYWxhbkRPTUNoYXIKY2hhckF0KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgdGhlSW5kZXgpCnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5nW3RoZUluZGV4XTsKfQojIDEx
MTQgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAppc1hN
TFdoaXRlc3BhY2UoWGFsYW5ET01DaGFyIHRoZUNoYXIpCnsKICAgICAgICByZXR1cm4gWGFsYW5Y
TUxDaGFyOjppc1doaXRlc3BhY2UodGhlQ2hhcik7Cn0KIyAxMTI4ICJQbGF0Zm9ybVN1cHBvcnQv
RE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKaXNYTUxEaWdpdChYYWxhbkRPTUNoYXIg
dGhlQ2hhcikKewogICAgICAgIHJldHVybiBYYWxhblhNTENoYXI6OmlzRGlnaXQodGhlQ2hhcik7
Cn0KIyAxMTQyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJv
b2wKaXNYTUxMZXR0ZXJPckRpZ2l0KFhhbGFuRE9NQ2hhciB0aGVDaGFyKQp7CiAgICAgICAgcmV0
dXJuIFhhbGFuWE1MQ2hhcjo6aXNEaWdpdCh0aGVDaGFyKSB8fAogICAgICAgICAgICAgICAgICAg
ICAgICBYYWxhblhNTENoYXI6OmlzTGV0dGVyKHRoZUNoYXIpOwp9CiMgMTE2MiAiUGxhdGZvcm1T
dXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhhbGFuRE9NU3RyaW5nCnN1YnN0cmluZygKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVTdGFydEluZGV4LAogICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlRW5kSW5kZXggPSB1bnNpZ25lZCgtMSkpOwoj
IDExODEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTVN0cmlu
ZwpzdWJzdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5n
JiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVTdGFy
dEluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlRW5kSW5kZXgg
PSB1bnNpZ25lZCgtMSkpOwojIDExOTYgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIu
aHBwIgpYYWxhbkRPTVN0cmluZwp0b0xvd2VyQ2FzZShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0
cmluZyk7CiMgMTIwOCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhhbGFu
RE9NU3RyaW5nCnRvTG93ZXJDYXNlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpOwoj
IDEyMjAgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTVN0cmlu
Zwp0b1VwcGVyQ2FzZShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgMTIzMiAiUGxh
dGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhhbGFuRE9NU3RyaW5nCnRvVXBwZXJD
YXNlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpOwojIDEyNDUgIlBsYXRmb3JtU3Vw
cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01DaGFyCnRvTG93ZXJBU0NJ
SShYYWxhbkRPTUNoYXIgdGhlQ2hhcikKewogICAgICAgIGlmICh0aGVDaGFyID49IFhhbGFuVW5p
Y29kZTo6Y2hhckxldHRlcl9BICYmIHRoZUNoYXIgPD0gWGFsYW5Vbmljb2RlOjpjaGFyTGV0dGVy
X1opCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFhhbGFuRE9NQ2hhcih0aGVDaGFy
IC0gKFhhbGFuVW5pY29kZTo6Y2hhckxldHRlcl9BIC0gWGFsYW5Vbmljb2RlOjpjaGFyTGV0dGVy
X2EpKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJl
dHVybiB0aGVDaGFyOwogICAgICAgIH0KfQojIDEyNjggIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJp
bmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01DaGFyCnRvVXBwZXJBU0NJSShYYWxhbkRPTUNo
YXIgdGhlQ2hhcikKewogICAgICAgIGlmICh0aGVDaGFyID49IFhhbGFuVW5pY29kZTo6Y2hhckxl
dHRlcl9hICYmIHRoZUNoYXIgPD0gWGFsYW5Vbmljb2RlOjpjaGFyTGV0dGVyX3opCiAgICAgICAg
ewogICAgICAgICAgICAgICAgcmV0dXJuIFhhbGFuRE9NQ2hhcih0aGVDaGFyICsgKFhhbGFuVW5p
Y29kZTo6Y2hhckxldHRlcl9BIC0gWGFsYW5Vbmljb2RlOjpjaGFyTGV0dGVyX2EpKTsKICAgICAg
ICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVDaGFy
OwogICAgICAgIH0KfQojIDEyOTEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBw
IgpYYWxhbkRPTVN0cmluZwp0b0xvd2VyQ2FzZUFTQ0lJKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhl
U3RyaW5nKTsKIyAxMzA0ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFs
YW5ET01TdHJpbmcKdG9Mb3dlckNhc2VBU0NJSShjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3Ry
aW5nKTsKIyAxMzE3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFsYW5E
T01TdHJpbmcKdG9VcHBlckNhc2VBU0NJSShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7
CiMgMTMzMCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhhbGFuRE9NU3Ry
aW5nCnRvVXBwZXJDYXNlQVNDSUkoY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZyk7CiMg
MTM0NyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmludApjb21wYXJlKAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDaGFyVmVjdG9yVHlwZSYgdGhlTEhTLAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDaGFyVmVjdG9yVHlwZSYgdGhlUkhTKTsKIyAxMzY3
ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW50CmNvbXBhcmUoCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHRoZVJIU0xlbmd0aCk7CiMgMTM4NyAiUGxhdGZvcm1TdXBwb3J0L0RP
TVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBhcmUodGhl
TEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNDA3ICJQ
bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGludApjb21wYXJlKAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAg
ICAgcmV0dXJuIGNvbXBhcmUodG9DaGFyQXJyYXkodGhlTEhTKSwgbGVuZ3RoKHRoZUxIUyksIHRv
Q2hhckFycmF5KHRoZVJIUyksIGxlbmd0aCh0aGVSSFMpKTsKfQojIDE0MjggIlBsYXRmb3JtU3Vw
cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgaW50CmNvbXBhcmUoCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNv
bXBhcmUodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdG9DaGFyQXJyYXkodGhlUkhTKSwgbGVuZ3Ro
KHRoZVJIUykpOwp9CiMgMTQ0OSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAi
CmlubGluZSBpbnQKY29tcGFyZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01TdHJpbmcmIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01D
aGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gY29tcGFyZSh0b0NoYXJBcnJheSh0aGVMSFMp
LCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNDczICJQbGF0
Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW50CmNvbXBhcmVJZ25vcmVDYXNlKAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywKICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZUxIU0xlbmd0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCB0aGVSSFNMZW5ndGgpOwojIDE0OTQgIlBsYXRmb3JtU3VwcG9y
dC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgaW50CmNvbXBhcmVJZ25vcmVDYXNlKAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1
cm4gY29tcGFyZUlnbm9yZUNhc2UodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5n
dGgodGhlUkhTKSk7Cn0KIyAxNTE1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw
cCIKaW5saW5lIGludApjb21wYXJlSWdub3JlQ2FzZSgKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKewogICAgICAgIHJldHVybiBjb21wYXJlSWdub3Jl
Q2FzZSh0b0NoYXJBcnJheSh0aGVMSFMpLCBsZW5ndGgodGhlTEhTKSwgdG9DaGFyQXJyYXkodGhl
UkhTKSwgbGVuZ3RoKHRoZVJIUykpOwp9CiMgMTUzNyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu
Z0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZUlnbm9yZUNhc2UoCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBh
cmVJZ25vcmVDYXNlKHRoZUxIUywgbGVuZ3RoKHRoZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyks
IGxlbmd0aCh0aGVSSFMpKTsKfQojIDE1NTkgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxw
ZXIuaHBwIgppbmxpbmUgaW50CmNvbXBhcmVJZ25vcmVDYXNlKAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAgICAgIHJldHVybiBjb21wYXJlSWdu
b3JlQ2FzZSh0b0NoYXJBcnJheSh0aGVMSFMpLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5n
dGgodGhlUkhTKSk7Cn0KIyAxNTgxICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw
cCIKaW50CmNvbXBhcmVJZ25vcmVDYXNlQVNDSUkoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgdGhlTEhTTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP
TUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZVJI
U0xlbmd0aCk7CiMgMTYwMCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlu
bGluZSBpbnQKY29tcGFyZUlnbm9yZUNhc2VBU0NJSSgKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZ25vcmVDYXNl
QVNDSUkodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0K
IyAxNjIyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGludApj
b21wYXJlSWdub3JlQ2FzZUFTQ0lJKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP
TVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZ25vcmVDYXNlQVNDSUko
dG9DaGFyQXJyYXkodGhlTEhTKSwgbGVuZ3RoKHRoZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyks
IGxlbmd0aCh0aGVSSFMpKTsKfQojIDE2NDUgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxw
ZXIuaHBwIgppbmxpbmUgaW50CmNvbXBhcmVJZ25vcmVDYXNlQVNDSUkoCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBh
cmVJZ25vcmVDYXNlQVNDSUkodG9DaGFyQXJyYXkodGhlTEhTKSwgbGVuZ3RoKHRoZUxIUyksIHRo
ZVJIUywgbGVuZ3RoKHRoZVJIUykpOwp9CiMgMTY2OCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu
Z0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZUlnbm9yZUNhc2VBU0NJSSgKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4g
Y29tcGFyZUlnbm9yZUNhc2VBU0NJSSh0aGVMSFMsIGxlbmd0aCh0aGVMSFMpLCB0b0NoYXJBcnJh
eSh0aGVSSFMpLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNjg4ICJQbGF0Zm9ybVN1cHBvcnQvRE9N
U3RyaW5nSGVscGVyLmhwcCIKaW50CmNvbGxhdGlvbkNvbXBhcmUoCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHRoZVJIU0xlbmd0aCk7CiMgMTcwNyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBl
ci5ocHAiCmlubGluZSBpbnQKY29sbGF0aW9uQ29tcGFyZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbGxhdGlvbkNvbXBh
cmUodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAx
NzI3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGludApjb2xs
YXRpb25Db21wYXJlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYg
dGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbGxhdGlvbkNvbXBhcmUodG9DaGFyQXJyYXkodGhl
TEhTKSwgbGVuZ3RoKHRoZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyksIGxlbmd0aCh0aGVSSFMp
KTsKfQojIDE3NDUgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUg
aW50CmNvbGxhdGlvbkNvbXBhcmUoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFu
RE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0
cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbGxhdGlvbkNvbXBhcmUodGhlTEhTLCBs
ZW5ndGgodGhlTEhTKSwgdG9DaGFyQXJyYXkodGhlUkhTKSwgbGVuZ3RoKHRoZVJIUykpOwp9CiMg
MTc2MyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29s
bGF0aW9uQ29tcGFyZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJp
bmcmIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0
aGVSSFMpCnsKICAgICAgICByZXR1cm4gY29sbGF0aW9uQ29tcGFyZSh0b0NoYXJBcnJheSh0aGVM
SFMpLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNzgxICJQ
bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKYm9vbAplcXVhbHMoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHRoZUxlbmd0aCk7CiMgMTc5NiAiUGxhdGZvcm1TdXBwb3J0L0RP
TVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCmVxdWFscygKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IHRoZUxIU0xlbmd0aCA9IGxlbmd0aCh0aGVMSFMpOwoKICAgICAgICByZXR1cm4gdGhlTEhTTGVu
Z3RoICE9IGxlbmd0aCh0aGVSSFMpID8gZmFsc2UgOiBlcXVhbHModGhlTEhTLCB0aGVSSFMsIHRo
ZUxIU0xlbmd0aCk7Cn0KIyAxODE1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw
cCIKaW5saW5lIGJvb2wKZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP
TVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIHRoZUxIUyA9PSB0aGVSSFM7Cn0KIyAx
ODMyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1
YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKewog
ICAgICAgICgodm9pZCkgKCh0aGVMSFMgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ0aGVM
SFMgIT0gMCIsICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIsIDE4MzcsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCiAgICAgICAgcmV0dXJuIHRoZVJIUyA9PSB0aGVM
SFM7Cn0KIyAxODUyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5l
IGJvb2wKZXF1YWxzKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgY29u
c3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gZXF1YWxzKHRoZVJIUywg
dGhlTEhTKTsKfQojIDE4NjggIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpp
bmxpbmUgYm9vbAplcXVhbHMoY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAg
ICBjb25zdCBjaGFyKiB0aGVSSFMpCnsKICAgICAgICAoKHZvaWQpICgodGhlUkhTICE9IDApID8g
MCA6IChfX2Fzc2VydF9mYWlsICgidGhlUkhTICE9IDAiLCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0
cmluZ0hlbHBlci5ocHAiLCAxODcyLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCiAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IHRoZVJIU0xlbmd0aCA9IGxlbmd0aCh0aGVSSFMpOwoKICAg
ICAgICBpZiAodGhlUkhTTGVuZ3RoICE9IGxlbmd0aCh0aGVMSFMpKQogICAgICAgIHsKICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIHJldHVybiB0aGVMSFMgPT0gWGFsYW5ET01TdHJpbmcodGhlUkhTLCB0
aGVSSFNMZW5ndGgpOwogICAgICAgIH0KfQojIDE4OTUgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJp
bmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAplcXVhbHMoY29uc3QgY2hhciogdGhlTEhTLAogICAg
ICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gZXF1
YWxzKHRoZVJIUywgdGhlTEhTKTsKfQojIDE5MTEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdI
ZWxwZXIuaHBwIgppbmxpbmUgYm9vbAplcXVhbHMoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMs
CiAgICAgICAgICAgY29uc3QgY2hhciogdGhlUkhTKQp7CiAgICAgICAgKCh2b2lkKSAoKHRoZUxI
UyAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInRoZUxIUyAhPSAwIiwgIlBsYXRmb3JtU3Vw
cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIiwgMTkxNSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDAp
KSk7CiAgICAgICAgKCh2b2lkKSAoKHRoZVJIUyAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo
InRoZVJIUyAhPSAwIiwgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIiwgMTkx
NiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCB0aGVSSFNMZW5ndGggPSBsZW5ndGgodGhlUkhTKTsKCiAgICAgICAgaWYgKHRoZVJIU0xlbmd0
aCAhPSBsZW5ndGgodGhlTEhTKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1
cm4gZXF1YWxzKFhhbGFuRE9NU3RyaW5nKHRoZVJIUywgdGhlUkhTTGVuZ3RoKSwgdGhlTEhTKTsK
ICAgICAgICB9Cn0KIyAxOTM5ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIK
aW5saW5lIGJvb2wKZXF1YWxzKGNvbnN0IGNoYXIqIHRoZUxIUywKICAgICAgICAgICBjb25zdCBY
YWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAgICAgIHJldHVybiBlcXVhbHModGhlUkhTLCB0aGVM
SFMpOwp9CiMgMTk1NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wK
ZXF1YWxzSWdub3JlQ2FzZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01D
aGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciog
dGhlUkhTLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTGVuZ3RoKTsK
IyAxOTcxICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wK
ZXF1YWxzSWdub3JlQ2FzZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01D
aGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciog
dGhlUkhTKQp7CiAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHRoZUxlbmd0aCA9IGxlbmd0aCh0
aGVMSFMpOwoKICAgICAgICByZXR1cm4gdGhlTGVuZ3RoICE9IGxlbmd0aCh0aGVSSFMpID8gZmFs
c2UgOiBlcXVhbHNJZ25vcmVDYXNlKHRoZUxIUywgdGhlUkhTLCB0aGVMZW5ndGgpOwp9CiMgMTk5
MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCmVxdWFs
c0lnbm9yZUNhc2UoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5n
JiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0
aGVSSFMpCnsKICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoID0gbGVuZ3Ro
KHRoZUxIUyk7CgogICAgICAgIHJldHVybiB0aGVMSFNMZW5ndGggIT0gbGVuZ3RoKHRoZVJIUykg
PyBmYWxzZSA6CiAgICAgICAgICAgICAgICBlcXVhbHNJZ25vcmVDYXNlKHRvQ2hhckFycmF5KHRo
ZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyksIHRoZUxIU0xlbmd0aCk7Cn0KIyAyMDEwICJQbGF0
Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdub3Jl
Q2FzZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsK
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlUkhTTGVuZ3RoID0gbGVuZ3RoKHRoZVJIUyk7
CgogICAgICAgIHJldHVybiB0aGVSSFNMZW5ndGggIT0gbGVuZ3RoKHRoZUxIUykgPyBmYWxzZSA6
CiAgICAgICAgICAgICAgICBlcXVhbHNJZ25vcmVDYXNlKHRoZUxIUywgdG9DaGFyQXJyYXkodGhl
UkhTKSwgdGhlUkhTTGVuZ3RoKTsKfQojIDIwMzAgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdI
ZWxwZXIuaHBwIgppbmxpbmUgYm9vbAplcXVhbHNJZ25vcmVDYXNlKAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAgICAgIHJldHVybiBlcXVhbHNJ
Z25vcmVDYXNlKHRoZVJIUywgdGhlTEhTKTsKfQojIDIwNDggIlBsYXRmb3JtU3VwcG9ydC9ET01T
dHJpbmdIZWxwZXIuaHBwIgpib29sCmVxdWFsc0lnbm9yZUNhc2VBU0NJSSgKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTLAogICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgdGhlTGVuZ3RoKTsKIyAyMDY0ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3Ry
aW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdub3JlQ2FzZUFTQ0lJKAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgdGhlTGVuZ3RoID0gbGVuZ3RoKHRoZUxIUyk7CgogICAgICAgIHJldHVybiB0
aGVMZW5ndGggIT0gbGVuZ3RoKHRoZVJIUykgPyBmYWxzZSA6CiAgICAgICAgICAgICAgICBlcXVh
bHNJZ25vcmVDYXNlQVNDSUkodGhlTEhTLCB0aGVSSFMsIHRoZUxlbmd0aCk7Cn0KIyAyMDg1ICJQ
bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdu
b3JlQ2FzZUFTQ0lJKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYg
dGhlUkhTKQp7CiAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHRoZUxlbmd0aCA9IGxlbmd0aCh0
aGVMSFMpOwoKICAgICAgICByZXR1cm4gdGhlTGVuZ3RoICE9IGxlbmd0aCh0aGVSSFMpID8gZmFs
c2UgOgogICAgICAgICAgICAgICAgZXF1YWxzSWdub3JlQ2FzZUFTQ0lJKHRvQ2hhckFycmF5KHRo
ZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyksIHRoZUxlbmd0aCk7Cn0KIyAyMTA2ICJQbGF0Zm9y
bVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdub3JlQ2Fz
ZUFTQ0lJKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxI
UywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykK
ewogICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB0aGVSSFNMZW5ndGggPSBsZW5ndGgodGhlUkhT
KTsKCiAgICAgICAgcmV0dXJuIHRoZVJIU0xlbmd0aCAhPSBsZW5ndGgodGhlTEhTKSA/IGZhbHNl
IDoKICAgICAgICAgICAgICAgIGVxdWFsc0lnbm9yZUNhc2VBU0NJSSh0aGVMSFMsIHRvQ2hhckFy
cmF5KHRoZVJIUyksIHRoZVJIU0xlbmd0aCk7Cn0KIyAyMTI3ICJQbGF0Zm9ybVN1cHBvcnQvRE9N
U3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdub3JlQ2FzZUFTQ0lJKAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAgICAgIHJl
dHVybiBlcXVhbHNJZ25vcmVDYXNlQVNDSUkodGhlUkhTLCB0aGVMSFMpOwp9CiMgMjE0NiAiUGxh
dGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCm9wZXJhdG9yPCgK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhclZlY3RvclR5cGUmIHRoZUxIUywKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhclZlY3RvclR5cGUmIHRoZVJIUykKewogICAg
ICAgIHJldHVybiBjb21wYXJlKHRoZUxIUywgdGhlUkhTKSA8IDAgPyB0cnVlIDogZmFsc2U7Cn0K
IyAyMTY1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wK
b3BlcmF0b3I8KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYg
dGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhl
UkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBhcmUodGhlTEhTLCB0aGVSSFMpIDwgMCA/IHRydWUg
OiBmYWxzZTsKfQojIDIxODMgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpp
bmxpbmUgWGFsYW5ET01TdHJpbmcmCmFzc2lnbigKICAgICAgICAgICAgICAgICAgICAgICAgWGFs
YW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFs
YW5ET01TdHJpbmcmIHRoZVN0cmluZ1RvQXNzaWduKQp7CiAgICAgICAgdGhlU3RyaW5nID0gdGhl
U3RyaW5nVG9Bc3NpZ247CgogICAgICAgIHJldHVybiB0aGVTdHJpbmc7Cn0KIyAyMjAzICJQbGF0
Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuRE9NU3RyaW5nJgph
c3NpZ24oCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nVG9B
c3NpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVTdHJpbmdUb0Fz
c2lnbkxlbmd0aCA9IHVuc2lnbmVkKC0xKSkKewogICAgICAgIGlmICh0aGVTdHJpbmdUb0Fzc2ln
bkxlbmd0aCA9PSB1bnNpZ25lZCgtMSkpCiAgICAgICAgewogICAgICAgICAgICAgICAgdGhlU3Ry
aW5nLmFzc2lnbih0aGVTdHJpbmdUb0Fzc2lnbik7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICAgICAgICB0aGVTdHJpbmcuYXNzaWduKHRoZVN0cmluZ1RvQXNzaWdu
LCB0aGVTdHJpbmdUb0Fzc2lnbkxlbmd0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhl
U3RyaW5nOwp9CiMgMjIzMCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlu
bGluZSBYYWxhbkRPTVN0cmluZyYKYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICBYYWxh
bkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlU3RyaW5nVG9BcHBlbmQpCnsKICAgICAgICB0aGVTdHJpbmcuYXBwZW5k
KHRoZVN0cmluZ1RvQXBwZW5kKTsKCiAgICAgICAgcmV0dXJuIHRoZVN0cmluZzsKfQojIDIyNTAg
IlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01TdHJp
bmcmCmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRoZVN0
cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJp
bmdUb0FwcGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZVN0cmlu
Z1RvQXBwZW5kTGVuZ3RoID0gdW5zaWduZWQoLTEpKQp7CiAgICAgICAgKCh2b2lkKSAoKHRoZVN0
cmluZ1RvQXBwZW5kICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlU3RyaW5nVG9BcHBl
bmQgIT0gMCIsICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIsIDIyNTYsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICBpZiAodGhlU3RyaW5nVG9BcHBlbmRM
ZW5ndGggPT0gdW5zaWduZWQoLTEpKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHRoZVN0cmlu
Zy5hcHBlbmQodGhlU3RyaW5nVG9BcHBlbmQpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAg
ICAgewogICAgICAgICAgICAgICAgdGhlU3RyaW5nLmFwcGVuZCh0aGVTdHJpbmdUb0FwcGVuZCwg
dGhlU3RyaW5nVG9BcHBlbmRMZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoZVN0
cmluZzsKfQojIDIyODAgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxp
bmUgWGFsYW5ET01TdHJpbmcmCmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5E
T01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
dGhlU3RyaW5nVG9BcHBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0
aGVTdHJpbmdUb0FwcGVuZExlbmd0aCA9IHVuc2lnbmVkKC0xKSkKewogICAgICAgIHRoZVN0cmlu
Zy5hcHBlbmQoVHJhbnNjb2RlRnJvbUxvY2FsQ29kZVBhZ2UodGhlU3RyaW5nVG9BcHBlbmQsIHRo
ZVN0cmluZ1RvQXBwZW5kTGVuZ3RoKSk7CgogICAgICAgIHJldHVybiB0aGVTdHJpbmc7Cn0KIyAy
MzAwICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuRE9N
U3RyaW5nJgphcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0
aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciB0aGVD
aGFyVG9BcHBlbmQpCnsKICAgICAgICB0aGVTdHJpbmcuYXBwZW5kKDEsIHRoZUNoYXJUb0FwcGVu
ZCk7CgogICAgICAgIHJldHVybiB0aGVTdHJpbmc7Cn0KIyAyMzE5ICJQbGF0Zm9ybVN1cHBvcnQv
RE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuRE9NU3RyaW5nJgphcHBlbmQoCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgdGhlQ2hhclRvQXBwZW5kKQp7CgogICAgICAgIGNoYXIgdGhlVGVt
cEJ1ZmZlcltdID0geyB0aGVDaGFyVG9BcHBlbmQsICdcMCcgfTsKCiAgICAgICAgcmV0dXJuIGFw
cGVuZCh0aGVTdHJpbmcsIHRoZVRlbXBCdWZmZXIpOwp9CiMgMjM0MCAiUGxhdGZvcm1TdXBwb3J0
L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBYYWxhbkRPTVN0cmluZyYKaW5zZXJ0KAogICAg
ICAgICAgICAgICAgICAgICAgICBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlUG9zaXRpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmdUb0luc2VydCkKewogICAgICAg
IHRoZVN0cmluZy5pbnNlcnQodGhlUG9zaXRpb24sIHRoZVN0cmluZ1RvSW5zZXJ0KTsKCiAgICAg
ICAgcmV0dXJuIHRoZVN0cmluZzsKfQojIDIzNjEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdI
ZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01TdHJpbmcmCmluc2VydCgKICAgICAgICAgICAgICAg
ICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHRoZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZ1RvSW5zZXJ0KQp7CiAgICAgICAgdGhlU3RyaW5nLmlu
c2VydCh0aGVQb3NpdGlvbiwgdGhlU3RyaW5nVG9JbnNlcnQpOwoKICAgICAgICByZXR1cm4gdGhl
U3RyaW5nOwp9CiMgMjM4MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhh
bGFuRE9NU3RyaW5nCnRyaW0oY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZyk7CiMgMjM5
MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB2b2lkCmNsZWFy
KFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICB0aGVTdHJpbmcuY2xlYXIoKTsK
fQojIDI0MDMgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgdm9p
ZAplcmFzZShYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAgICAgdGhlU3RyaW5nLmVy
YXNlKCk7Cn0KIyAyNDE3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5s
aW5lIHZvaWQKcmVsZWFzZU1lbW9yeShYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAg
ICAgWGFsYW5ET01TdHJpbmcoKS5zd2FwKHRoZVN0cmluZyk7Cn0KCgoKdm9pZApDb3B5V2lkZVN0
cmluZ1RvVmVjdG9yKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIq
IHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhclZlY3RvclR5cGUmIHRoZVZl
Y3Rvcik7CgoKCnZvaWQKQ29weVN0cmluZ1RvVmVjdG9yKAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJWZWN0
b3JUeXBlJiB0aGVWZWN0b3IpOwojIDI0NDcgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxw
ZXIuaHBwIgpYYWxhbkRPTUNoYXJWZWN0b3JUeXBlCk1ha2VYYWxhbkRPTUNoYXJWZWN0b3IoCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZlRyYW5zY29kZSA9IHRydWUpOwojIDI0NjEgIlBsYXRmb3JtU3VwcG9ydC9E
T01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTUNoYXJWZWN0b3JUeXBlCk1ha2VYYWxhbkRPTUNo
YXJWZWN0b3IoY29uc3QgWGFsYW5ET01DaGFyKiBkYXRhKTsKIyAyNDczICJQbGF0Zm9ybVN1cHBv
cnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuRE9NQ2hhclZlY3RvclR5cGUKTWFr
ZVhhbGFuRE9NQ2hhclZlY3Rvcihjb25zdCBYYWxhbkRPTVN0cmluZyYgZGF0YSkKewogICAgICAg
IHJldHVybiBNYWtlWGFsYW5ET01DaGFyVmVjdG9yKGNfd3N0cihkYXRhKSk7Cn0KCgoKCgoKc3Ry
dWN0IGNfd3N0cl9mdW5jdG9yIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248WGFsYW5ET01T
dHJpbmcsIGNvbnN0IFhhbGFuRE9NQ2hhcio+Cgp7CiAgICAgICAgcmVzdWx0X3R5cGUKICAgICAg
ICBvcGVyYXRvcigpIChjb25zdCBhcmd1bWVudF90eXBlJiB0aGVTdHJpbmcpIGNvbnN0CiAgICAg
ICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGNfd3N0cih0aGVTdHJpbmcpOwogICAgICAgIH0K
fTsKIyAyNTA1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKc3RydWN0IERP
TVN0cmluZ0hhc2hGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiwgc2l6ZV90PgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgb3Bl
cmF0b3IoKSAoYXJndW1lbnRfdHlwZSB0aGVLZXkpIGNvbnN0CiAgICAgICAgewogICAgICAgICAg
ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSYXdCdWZmZXIgPSBjX3dzdHIodGhlS2V5KTsK
CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRoZUhhc2hWYWx1ZSA9IDBMOwoKICAgICAg
ICAgICAgICAgIGlmICh0aGVSYXdCdWZmZXIgIT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKCp0aGVSYXdCdWZmZXIpCiAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVIYXNoVmFsdWUgPSA1
ICogdGhlSGFzaFZhbHVlICsgKnRoZVJhd0J1ZmZlcjsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhlUmF3QnVmZmVyKys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0X3R5cGUodGhlSGFzaFZh
bHVlKyspOwogICAgICAgIH0KfTsKIyAyNTQxICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs
cGVyLmhwcCIKc3RydWN0IERPTVN0cmluZ0VxdWFsc0Z1bmN0aW9uIDogcHVibGljIHN0ZDo6Ymlu
YXJ5X2Z1bmN0aW9uPGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgY29uc3QgWGFsYW5ET01TdHJpbmcm
LCBib29sPgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgb3BlcmF0b3IoKSAoZmlyc3Rf
YXJndW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vj
b25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiBlcXVhbHModGhlTEhTLCB0aGVSSFMpOwogICAgICAgIH0KfTsKIyAyNTY0ICJQbGF0
Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKc3RydWN0IERPTVN0cmluZ0VxdWFsc0ln
bm9yZUNhc2VGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxjb25zdCBYYWxh
bkRPTVN0cmluZyYsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgYm9vbD4KCnsKICAgICAgICByZXN1
bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkgKGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9hcmd1bWVudF90eXBlIHRoZVJI
UykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxzSWdub3JlQ2Fz
ZSh0aGVMSFMsIHRoZVJIUyk7CiAgICAgICAgfQp9OwojIDI1ODcgIlBsYXRmb3JtU3VwcG9ydC9E
T01TdHJpbmdIZWxwZXIuaHBwIgpzdHJ1Y3QgRE9NU3RyaW5nTm90RXF1YWxzRnVuY3Rpb24gOiBw
dWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgWGFsYW5ET01TdHJpbmcmLCBjb25zdCBY
YWxhbkRPTVN0cmluZyYsIGJvb2w+Cgp7CiAgICAgICAgcmVzdWx0X3R5cGUKICAgICAgICBvcGVy
YXRvcigpIChmaXJzdF9hcmd1bWVudF90eXBlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAgICAgICAgcmV0dXJuICFlcXVhbHModGhlTEhTLCB0aGVSSFMpOwogICAgICAgIH0K
fTsKIyAyNjEwICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKc3RydWN0IERP
TVN0cmluZ0xlc3NUaGFuRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29u
c3QgWGFsYW5ET01TdHJpbmcmLCBjb25zdCBYYWxhbkRPTVN0cmluZyYsIGJvb2w+Cgp7CiAgICAg
ICAgcmVzdWx0X3R5cGUKICAgICAgICBvcGVyYXRvcigpIChmaXJzdF9hcmd1bWVudF90eXBlIHRo
ZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlw
ZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUo
dGhlTEhTLCB0aGVSSFMpIDwgMCA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9Cn07CiMgMjYzMyAi
UGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnN0cnVjdCBET01TdHJpbmdMZXNz
VGhhbklnbm9yZUNhc2VGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxjb25z
dCBYYWxhbkRPTVN0cmluZyYsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgYm9vbD4KCnsKICAgICAg
ICByZXN1bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkgKGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhl
TEhTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9hcmd1bWVudF90eXBl
IHRoZVJIUykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUln
bm9yZUNhc2UodGhlTEhTLCB0aGVSSFMpIDwgMCA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9Cn07
CiMgMjY1NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnN0cnVjdCBET01T
dHJpbmdMZXNzVGhhbklnbm9yZUNhc2VBU0NJSUZ1bmN0aW9uIDogcHVibGljIHN0ZDo6YmluYXJ5
X2Z1bmN0aW9uPGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgY29uc3QgWGFsYW5ET01TdHJpbmcmLCBi
b29sPgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgb3BlcmF0b3IoKSAoZmlyc3RfYXJn
dW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25k
X2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJl
dHVybiBjb21wYXJlSWdub3JlQ2FzZSh0aGVMSFMsIHRoZVJIUykgPCAwID8gdHJ1ZSA6IGZhbHNl
OwogICAgICAgIH0KfTsKIyAyNjc5ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw
cCIKc3RydWN0IERPTVN0cmluZ0xlc3NUaGFuT3JFcXVhbEZ1bmN0aW9uIDogcHVibGljIHN0ZDo6
YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgY29uc3QgWGFsYW5ET01TdHJp
bmcmLCBib29sPgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgb3BlcmF0b3IoKSAoZmly
c3RfYXJndW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Vjb25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBjb21wYXJlKHRoZUxIUywgdGhlUkhTKSA8PSAwID8gdHJ1ZSA6IGZhbHNlOwog
ICAgICAgIH0KfTsKIyAyNzAyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIK
c3RydWN0IERPTVN0cmluZ0dyZWF0ZXJUaGFuRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpiaW5hcnlf
ZnVuY3Rpb248Y29uc3QgWGFsYW5ET01TdHJpbmcmLCBjb25zdCBYYWxhbkRPTVN0cmluZyYsIGJv
b2w+Cgp7CiAgICAgICAgcmVzdWx0X3R5cGUKICAgICAgICBvcGVyYXRvcigpIChmaXJzdF9hcmd1
bWVudF90eXBlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRf
YXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBhcmUodGhlTEhTLCB0aGVSSFMpID4gMCA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9
Cn07CiMgMjcyNSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnN0cnVjdCBE
T01TdHJpbmdHcmVhdGVyVGhhbk9yRXF1YWxGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9m
dW5jdGlvbjxjb25zdCBYYWxhbkRPTVN0cmluZyYsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgYm9v
bD4KCnsKICAgICAgICByZXN1bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkgKGZpcnN0X2FyZ3Vt
ZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9h
cmd1bWVudF90eXBlIHRoZVJIUykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1
cm4gY29tcGFyZSh0aGVMSFMsIHRoZVJIUykgPj0gMCA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9
Cn07CiMgMjc0NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnN0cnVjdCBs
ZXNzX25vX2Nhc2VfYXNjaWlfd2lkZV9zdHJpbmcgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rp
b248Y29uc3QgWGFsYW5ET01DaGFyKiwgY29uc3QgWGFsYW5ET01DaGFyKiwgYm9vbD4KCnsKIyAy
NzU3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKICAgICAgICByZXN1bHRf
dHlwZQogICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2Fy
Z3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfYXJndW1l
bnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGNv
bXBhcmVJZ25vcmVDYXNlQVNDSUkodGhlTEhTLCB0aGVSSFMpIDwgMCA/IHRydWUgOiBmYWxzZTsK
ICAgICAgICB9Cn07CiMgMjc3NCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAi
CmJvb2wKaXNYTUxXaGl0ZXNwYWNlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBzdHJpbmcpOwojIDI3
ODcgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpib29sCmlzWE1MV2hpdGVz
cGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyIGNoW10sCiAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGFydCwKICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCk7CiMgMjgwMSAiUGxhdGZvcm1TdXBwb3J0L0RP
TVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCmlzWE1MV2hpdGVzcGFjZShjb25zdCBYYWxh
bkRPTUNoYXIqIHRoZVN0cmluZykKewogICAgICAgICgodm9pZCkgKCh0aGVTdHJpbmcgIT0gMCkg
PyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ0aGVTdHJpbmcgIT0gMCIsICJQbGF0Zm9ybVN1cHBvcnQv
RE9NU3RyaW5nSGVscGVyLmhwcCIsIDI4MDQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoK
ICAgICAgICByZXR1cm4gaXNYTUxXaGl0ZXNwYWNlKHRoZVN0cmluZywgMCwgbGVuZ3RoKHRoZVN0
cmluZykpOwp9CiMgNjYgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmNwcCIgMgojIDEg
IlBsYXRmb3JtU3VwcG9ydC9YYWxhblVuaWNvZGUuaHBwIiAxCiMgNjcgIlBsYXRmb3JtU3VwcG9y
dC9Eb3VibGVTdXBwb3J0LmNwcCIgMgoKCgpjb25zdCBkb3VibGUgRG91YmxlU3VwcG9ydDo6c19O
YU4gPSBzcXJ0KC0yLjAxKTsKY29uc3QgZG91YmxlIERvdWJsZVN1cHBvcnQ6OnNfcG9zaXRpdmVJ
bmZpbml0eSA9IChfX2V4dGVuc2lvbl9fICgodW5pb24geyB1bnNpZ25lZCBjaGFyIF9fY1s4XTsg
ZG91YmxlIF9fZDsgfSkgeyBfX2M6IHsgMCwgMCwgMCwgMCwgMCwgMCwgMHhmMCwgMHg3ZiB9IH0p
Ll9fZCk7CmNvbnN0IGRvdWJsZSBEb3VibGVTdXBwb3J0OjpzX25lZ2F0aXZlSW5maW5pdHkgPSAt
RG91YmxlU3VwcG9ydDo6c19wb3NpdGl2ZUluZmluaXR5Owpjb25zdCBkb3VibGUgRG91YmxlU3Vw
cG9ydDo6c19wb3NpdGl2ZVplcm8gPSAwLjA7CgoKY29uc3QgZG91YmxlIERvdWJsZVN1cHBvcnQ6
OnNfbmVnYXRpdmVaZXJvID0gLURvdWJsZVN1cHBvcnQ6OnNfcG9zaXRpdmVaZXJvOwojIDg3ICJQ
bGF0Zm9ybVN1cHBvcnQvRG91YmxlU3VwcG9ydC5jcHAiCmNvbnN0IHVuc2lnbmVkIGxvbmcqIERv
dWJsZVN1cHBvcnQ6OnNfTmFORmlyc3REV09SRCA9CgoKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGxvbmcqPigm
c19OYU4pOwoKCmNvbnN0IHVuc2lnbmVkIGxvbmcqIERvdWJsZVN1cHBvcnQ6OnNfTmFOU2Vjb25k
RFdPUkQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc19OYU5GaXJz
dERXT1JEICsgMTsKCgpjb25zdCB1bnNpZ25lZCBsb25nKiBEb3VibGVTdXBwb3J0OjpzX3Bvc2l0
aXZlWmVyb0ZpcnN0RFdPUkQgPQoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBsb25nKj4oJnNfcG9zaXRpdmVa
ZXJvKTsKCgpjb25zdCB1bnNpZ25lZCBsb25nKiBEb3VibGVTdXBwb3J0OjpzX3Bvc2l0aXZlWmVy
b1NlY29uZERXT1JEID0gc19wb3NpdGl2ZVplcm9GaXJzdERXT1JEICsgMTsKCgpjb25zdCB1bnNp
Z25lZCBsb25nKiBEb3VibGVTdXBwb3J0OjpzX25lZ2F0aXZlWmVyb0ZpcnN0RFdPUkQgPQoKCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBsb25nKj4oJnNfbmVnYXRpdmVaZXJvKTsKCgpjb25zdCB1bnNpZ25lZCBs
b25nKiBEb3VibGVTdXBwb3J0OjpzX25lZ2F0aXZlWmVyb1NlY29uZERXT1JEID0gc19uZWdhdGl2
ZVplcm9GaXJzdERXT1JEICsgMTsKCgoKYm9vbApEb3VibGVTdXBwb3J0OjplcXVhbCgKICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAg
ZG91YmxlIHRoZVJIUykKewogICAgICAgIGlmIChpc05hTih0aGVMSFMpID09IHRydWUgfHwgaXNO
YU4odGhlUkhTKSA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy
biB0aGVMSFMgPT0gdGhlUkhTOwogICAgICAgIH0KfQoKCgpib29sCkRvdWJsZVN1cHBvcnQ6Om5v
dEVxdWFsKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAogICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuICFlcXVhbCh0aGVM
SFMsIHRoZVJIUyk7Cn0KCgoKYm9vbApEb3VibGVTdXBwb3J0OjpsZXNzVGhhbigKICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlIHRoZVJIUykKewogICAgICAgIGlmIChpc05hTih0aGVMSFMpID09IHRydWUgfHwgaXNOYU4o
dGhlUkhTKSA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0
aGVMSFMgPCB0aGVSSFM7CiAgICAgICAgfQp9CgoKCmJvb2wKRG91YmxlU3VwcG9ydDo6bGVzc1Ro
YW5PckVxdWFsKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAogICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgdGhlUkhTKQp7CiAgICAgICAgaWYgKGlzTmFOKHRoZUxI
UykgPT0gdHJ1ZSB8fCBpc05hTih0aGVSSFMpID09IHRydWUpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgICAgICAgcmV0dXJuIHRoZUxIUyA8PSB0aGVSSFM7CiAgICAgICAgfQp9CgoKCmJvb2wK
RG91YmxlU3VwcG9ydDo6Z3JlYXRlclRoYW4oCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVSSFMpCnsKICAgICAg
ICBpZiAoaXNOYU4odGhlTEhTKSA9PSB0cnVlIHx8IGlzTmFOKHRoZVJIUykgPT0gdHJ1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGVs
c2UKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlTEhTID4gdGhlUkhTOwogICAg
ICAgIH0KfQoKCgpib29sCkRvdWJsZVN1cHBvcnQ6OmdyZWF0ZXJUaGFuT3JFcXVhbCgKICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAg
ZG91YmxlIHRoZVJIUykKewogICAgICAgIGlmIChpc05hTih0aGVMSFMpID09IHRydWUgfHwgaXNO
YU4odGhlUkhTKSA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy
biB0aGVMSFMgPj0gdGhlUkhTOwogICAgICAgIH0KfQoKCgpkb3VibGUKRG91YmxlU3VwcG9ydDo6
YWRkKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAogICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgdGhlUkhTKQp7CiAgICAgICAgaWYgKGlzTmFOKHRoZUxIUykgPT0g
dHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlTEhTOwogICAgICAgIH0K
ICAgICAgICBlbHNlIGlmIChpc05hTih0aGVSSFMpID09IHRydWUpCiAgICAgICAgewogICAgICAg
ICAgICAgICAgcmV0dXJuIHRoZVJIUzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIHJldHVybiB0aGVMSFMgKyB0aGVSSFM7CiAgICAgICAgfQp9CgoKCmRv
dWJsZQpEb3VibGVTdXBwb3J0OjpzdWJ0cmFjdCgKICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZVJIUykKewogICAg
ICAgIGlmIChpc05hTih0aGVMSFMpID09IHRydWUpCiAgICAgICAgewogICAgICAgICAgICAgICAg
cmV0dXJuIHRoZUxIUzsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoaXNOYU4odGhlUkhTKSA9
PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVSSFM7CiAgICAgICAg
fQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlTEhTIC0g
dGhlUkhTOwogICAgICAgIH0KfQoKCgpkb3VibGUKRG91YmxlU3VwcG9ydDo6bXVsdGlwbHkoCiAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSB0aGVSSFMpCnsKICAgICAgICBpZiAoaXNOYU4odGhlTEhTKSA9PSB0cnVlKQog
ICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVMSFM7CiAgICAgICAgfQogICAgICAg
IGVsc2UgaWYgKGlzTmFOKHRoZVJIUykgPT0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gdGhlUkhTOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAg
ICAgICAgICAgcmV0dXJuIHRoZUxIUyAqIHRoZVJIUzsKICAgICAgICB9Cn0KCgoKZG91YmxlCkRv
dWJsZVN1cHBvcnQ6OmRpdmlkZSgKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZUxI
UywKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZVJIUykKewogICAgICAgIGlmIChp
c05hTih0aGVMSFMpID09IHRydWUpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHRo
ZUxIUzsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoaXNOYU4odGhlUkhTKSA9PSB0cnVlKQog
ICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVSSFM7CiAgICAgICAgfQogICAgICAg
IGVsc2UgaWYgKHRoZVJIUyAhPSAwLjBMKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy
biB0aGVMSFMgLyB0aGVSSFM7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CgoKICAg
ICAgICAgICAgICAgIGlmICh0aGVMSFMgPT0gMC4wTCkKICAgICAgICAgICAgICAgIHsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBEb3VibGVTdXBwb3J0OjpnZXROYU4oKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoZUxIUyA+IDAuMEwgJiYKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQb3NpdGl2ZVplcm8odGhlUkhTKSA9PSB0
cnVlKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERv
dWJsZVN1cHBvcnQ6OmdldFBvc2l0aXZlSW5maW5pdHkoKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBEb3VibGVTdXBwb3J0OjpnZXROZWdhdGl2ZUluZmluaXR5KCk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfQp9CgoKCmRvdWJsZQpEb3VibGVTdXBwb3J0Ojptb2R1bHVzKAog
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgdGhlUkhTKQp7CiAgICAgICAgaWYgKGlzTmFOKHRoZUxIUykgPT0gdHJ1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlTEhTOwogICAgICAgIH0KICAgICAg
ICBlbHNlIGlmIChpc05hTih0aGVSSFMpID09IHRydWUpCiAgICAgICAgewogICAgICAgICAgICAg
ICAgcmV0dXJuIHRoZVJIUzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAg
ICAgICAgICAgIHJldHVybiBsb25nKHRoZUxIUykgJSBsb25nKHRoZVJIUyk7CiAgICAgICAgfQp9
CgoKCmRvdWJsZQpEb3VibGVTdXBwb3J0OjpuZWdhdGl2ZShkb3VibGUgdGhlRG91YmxlKQp7CiAg
ICAgICAgaWYgKGlzTmFOKHRoZURvdWJsZSkgPT0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gZ2V0TmFOKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gLXRoZURvdWJsZTsKICAgICAgICB9Cn0KCgoKZG91YmxlCkRv
dWJsZVN1cHBvcnQ6OnRvRG91YmxlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpCnsK
ICAgICAgICByZXR1cm4gdG9Eb3VibGUoY193c3RyKHRoZVN0cmluZykpOwp9CgoKCnZvaWQKY29u
c3VtZVdoaXRlc3BhY2UoY29uc3QgWGFsYW5ET01DaGFyKiYgdGhlU3RyaW5nKQp7CiAgICAgICAg
d2hpbGUoKnRoZVN0cmluZyAhPSAwICYmCiAgICAgICAgICAgICAgICAgIGlzWE1MV2hpdGVzcGFj
ZSgqdGhlU3RyaW5nKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICArK3RoZVN0cmluZzsKICAg
ICAgICB9Cn0KCgoKc3RhdGljIHZvaWQKY29uc3VtZU51bWJlcnMoY29uc3QgWGFsYW5ET01DaGFy
KiYgdGhlU3RyaW5nKQp7CiAgICAgICAgd2hpbGUoKnRoZVN0cmluZyAmJgogICAgICAgICAgICAg
ICAgICAqdGhlU3RyaW5nID49IFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0XzAgJiYKICAgICAgICAg
ICAgICAgICAgKnRoZVN0cmluZyA8PSBYYWxhblVuaWNvZGU6OmNoYXJEaWdpdF85KQogICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGVTdHJpbmc7CiAgICAgICAgfQp9CgoKCnN0
YXRpYyBib29sCmRvVmFsaWRhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFu
RE9NQ2hhciogdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBib29sJiBmR290RGVj
aW1hbFBvaW50KQp7CiAgICAgICAgKCh2b2lkKSAoKHRoZVN0cmluZyAhPSAwKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoInRoZVN0cmluZyAhPSAwIiwgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBw
b3J0LmNwcCIsIDM5MywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogICAgICAgIGJvb2wg
ZkVycm9yID0gZmFsc2U7CiAgICAgICAgYm9vbCBmR290RGlnaXQgPSBmYWxzZTsKICAgICAgICBi
b29sIGZHb3RNaW51cyA9IGZhbHNlOwogICAgICAgIGJvb2wgZkdvdFdoaXRlc3BhY2UgPSBmYWxz
ZTsKCiAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVDdXJyZW50ID0gdGhlU3RyaW5nOwoK
CiAgICAgICAgY29uc3VtZVdoaXRlc3BhY2UodGhlQ3VycmVudCk7CgogICAgICAgIHdoaWxlKCp0
aGVDdXJyZW50ICE9IDAgJiYgZkVycm9yID09IGZhbHNlKQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIHN3aXRjaCgqdGhlQ3VycmVudCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGNhc2UgWGFsYW5Vbmljb2RlOjpjaGFyRnVsbFN0b3A6CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChmR290RGVjaW1hbFBvaW50ID09IHRydWUgfHwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmR290V2hpdGVzcGFjZSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkVycm9yID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmR290RGVjaW1h
bFBvaW50ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGVDdXJy
ZW50OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgWGFsYW5Vbmljb2RlOjpjaGFySHlwaGVuTWludXM6
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmR290RGVjaW1hbFBvaW50ID09IHRydWUgfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmR290TWludXMgPT0gdHJ1ZSB8fAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZHb3REaWdpdCA9PSB0cnVlIHx8CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZkdvdFdoaXRlc3BhY2UgPT0gdHJ1ZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRXJyb3Ig
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZHb3RNaW51cyA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICsrdGhlQ3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRp
Z2l0XzA6CiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0XzE6CiAg
ICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0XzI6CiAgICAgICAgICAg
ICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0XzM6CiAgICAgICAgICAgICAgICBjYXNl
IFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0XzQ6CiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5p
Y29kZTo6Y2hhckRpZ2l0XzU6CiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hh
ckRpZ2l0XzY6CiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0Xzc6
CiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0Xzg6CiAgICAgICAg
ICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0Xzk6CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChmR290V2hpdGVzcGFjZSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkVycm9yID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmR290RGln
aXQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lTnVtYmVy
cyh0aGVDdXJyZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhclNw
YWNlOgogICAgICAgICAgICAgICAgY2FzZSBYYWxhblVuaWNvZGU6OmNoYXJDUjoKICAgICAgICAg
ICAgICAgIGNhc2UgWGFsYW5Vbmljb2RlOjpjaGFySFRhYjoKICAgICAgICAgICAgICAgIGNhc2Ug
WGFsYW5Vbmljb2RlOjpjaGFyTEY6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmR290V2hp
dGVzcGFjZSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZkVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmR290V2hpdGVzcGFjZSA9IHRydWU7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVXaGl0ZXNwYWNlKHRoZUN1cnJl
bnQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGZF
cnJvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0KCgoKCiAgICAgICAgcmV0dXJuIGZFcnJvciA9PSBmYWxzZSA/IGZHb3RE
aWdpdCA6IGZhbHNlOwp9CgoKCnN0YXRpYyBib29sCmRvVmFsaWRhdGUoY29uc3QgWGFsYW5ET01D
aGFyKiB0aGVTdHJpbmcpCnsKICAgICAgICBib29sIGZEdW1teSA9IGZhbHNlOwoKICAgICAgICBy
ZXR1cm4gZG9WYWxpZGF0ZSh0aGVTdHJpbmcsIGZEdW1teSk7Cn0KCgoKaW5saW5lIGRvdWJsZQpj
b252ZXJ0SGVscGVyKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIq
IHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmR290RGVjaW1hbFBvaW50
KQp7CgoKCgogICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB0aGVMb25nSGFja1RocmVzaG9sZCA9
IDExOwoKICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlTGVuZ3RoID0gbGVuZ3RoKHRoZVN0
cmluZyk7CgogICAgICAgIGlmIChmR290RGVjaW1hbFBvaW50ID09IGZhbHNlICYmIHRoZUxlbmd0
aCA8IHRoZUxvbmdIYWNrVGhyZXNob2xkKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy
biBkb3VibGUoV2lkZVN0cmluZ1RvTG9uZyh0aGVTdHJpbmcpKTsKICAgICAgICB9CiAgICAgICAg
ZWxzZQogICAgICAgIHsKCiAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlQnVm
ZmVyU2l6ZSA9IDIwMHU7CgogICAgICAgICAgICAgICAgaWYgKHRoZUxlbmd0aCA8IHRoZUJ1ZmZl
clNpemUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgdGhl
QnVmZmVyW3RoZUJ1ZmZlclNpemVdOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IHRoZUxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlQnVmZmVyW2ldID0gY2hhcih0
aGVTdHJpbmdbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICB0aGVCdWZmZXJbdGhlTGVuZ3RoXSA9ICdcMCc7CgogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYXRvZih0aGVCdWZmZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBDaGFy
VmVjdG9yVHlwZSB0aGVWZWN0b3I7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGVWZWN0b3Iu
cmVzZXJ2ZSh0aGVMZW5ndGggKyAxKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIENvcHlXaWRl
U3RyaW5nVG9WZWN0b3IodGhlU3RyaW5nLCB0aGVWZWN0b3IpOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGF0b2YoJip0aGVWZWN0b3IuYmVnaW4oKSk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQp9CgoKCmRvdWJsZQpkb0NvbnZlcnQoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVT
dHJpbmcpCnsKICAgICAgICAoKHZvaWQpICgodGhlU3RyaW5nICE9IDApID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgidGhlU3RyaW5nICE9IDAiLCAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQu
Y3BwIiwgNTU1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICAoKHZvaWQpICgo
KnRoZVN0cmluZyAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIip0aGVTdHJpbmcgIT0gMCIs
ICJQbGF0Zm9ybVN1cHBvcnQvRG91YmxlU3VwcG9ydC5jcHAiLCA1NTYsIF9fUFJFVFRZX0ZVTkNU
SU9OX18pLCAwKSkpOwojIDY2NCAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuY3BwIgog
ICAgICAgIGJvb2wgZkdvdERlY2ltYWxQb2ludCA9IGZhbHNlOwoKICAgICAgICBpZiAoZG9WYWxp
ZGF0ZSh0aGVTdHJpbmcsIGZHb3REZWNpbWFsUG9pbnQpID09IGZhbHNlKQogICAgICAgIHsKICAg
ICAgICAgICAgICAgIHJldHVybiBEb3VibGVTdXBwb3J0OjpnZXROYU4oKTsKICAgICAgICB9CiAg
ICAgICAgZWxzZQogICAgICAgIHsKCgoKCgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRI
ZWxwZXIodGhlU3RyaW5nLCBmR290RGVjaW1hbFBvaW50KTsKCiAgICAgICAgfQoKfQoKCgpkb3Vi
bGUKRG91YmxlU3VwcG9ydDo6dG9Eb3VibGUoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcp
CnsKICAgICAgICBpZiAodGhlU3RyaW5nID09IDAgfHwKICAgICAgICAgICAgICAgICp0aGVTdHJp
bmcgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmFOKCk7CiAgICAg
ICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZG9Db252
ZXJ0KHRoZVN0cmluZyk7CiAgICAgICAgfQp9CgoKCmJvb2wKRG91YmxlU3VwcG9ydDo6aXNWYWxp
ZChjb25zdCBYYWxhbkRPTVN0cmluZyB0aGVTdHJpbmcpCnsKICAgICAgICByZXR1cm4gaXNWYWxp
ZChjX3dzdHIodGhlU3RyaW5nKSk7Cn0KCgoKYm9vbApEb3VibGVTdXBwb3J0Ojppc1ZhbGlkKGNv
bnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKQp7CiAgICAgICAgcmV0dXJuIGRvVmFsaWRhdGUo
dGhlU3RyaW5nKTsKfQojIDg5NSAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuY3BwIgpk
b3VibGUKRG91YmxlU3VwcG9ydDo6cm91bmQoZG91YmxlIHRoZVZhbHVlKQp7CiAgICAgICAgaWYg
KGlzTmFOKHRoZVZhbHVlKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmFO
KCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGlzUG9zaXRpdmVJbmZpbml0eSh0aGVWYWx1
ZSkpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGdldFBvc2l0aXZlSW5maW5pdHko
KTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzTmVnYXRpdmVJbmZpbml0eSh0aGVWYWx1ZSkpCiAg
ICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGdldE5lZ2F0aXZlSW5maW5pdHkoKTsKICAg
ICAgICB9CiAgICAgICAgZWxzZSBpZiAodGhlVmFsdWUgPT0gMCkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gMC4wOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0aGVWYWx1ZSA+
IDApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGxvbmcodGhlVmFsdWUgKyAwLjUp
OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewoKCgogICAgICAgICAgICAgICAgZG91
YmxlIGludFBhcnQgPSAwOwoKICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBmcmFjUGFydCA9
IG1vZGYodGhlVmFsdWUsICZpbnRQYXJ0KTsKCiAgICAgICAgICAgICAgICBpZiAoZnJhY1BhcnQg
PT0gLTAuNSkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBsb25nKHRoZVZhbHVlICsgMC41KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxv
bmcodGhlVmFsdWUgLSAwLjUpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQo=


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

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

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-07  9:18 c++/2914: gcc 3.0 crashes on xalan DoubleSupport.cpp nathan
  -- strict thread matches above, loose matches on Subject: below --
2001-05-23  8:26 tot

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).