public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/5667: Internal compiler error
@ 2002-02-12  6:56 cheng
  0 siblings, 0 replies; 2+ messages in thread
From: cheng @ 2002-02-12  6:56 UTC (permalink / raw)
  To: gcc-gnats


>Number:         5667
>Category:       c++
>Synopsis:       Internal compiler error
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Feb 12 06:56:02 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Philip Cheng
>Release:        gcc 3.0.3
>Organization:
>Environment:
Sun Solaris 2.7 
>Description:
vecclean.cpp:6442: warning: unused variable `CVCLShape*poDangleShape'
/usr/local/include/g++-v3/bits/stl_algo.h: In function `_RandomAccessIter 
   std::__unguarded_partition(_RandomAccessIter, _RandomAccessIter, _Tp, 
   _Compare) [with _RandomAccessIter = 
   std::__normal_iterator<std::pair<CVCLPoint, CVCLNode*>*, 
   std::vector<std::pair<CVCLPoint, CVCLNode*>, 
   std::allocator<std::pair<CVCLPoint, CVCLNode*> > > >, _Tp = 
   std::pair<CVCLPoint, CVCLNode*>, _Compare = TBool (*)(const 
   std::pair<CVCLPoint, CVCLNode*>&, const std::pair<CVCLPoint, CVCLNode*>&)]':
/usr/local/include/g++-v3/bits/stl_algo.h:1656:   instantiated from `void std::__introsort_loop(_RandomAccessIter, _RandomAccessIter, _Tp*, _Size, _Compare) [with _RandomAccessIter = std::__normal_iterator<std::pair<CVCLPoint, CVCLNode*>*, std::vector<std::pair<CVCLPoint, CVCLNode*>, std::allocator<std::pair<CVCLPoint, CVCLNode*> > > >, _Tp = std::pair<CVCLPoint, CVCLNode*>, _Size = long int, _Compare = TBool (*)(const std::pair<CVCLPoint, CVCLNode*>&, const std::pair<CVCLPoint, CVCLNode*>&)]'
/usr/local/include/g++-v3/bits/stl_algo.h:1691:   instantiated from `void std::sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = std::__normal_iterator<std::pair<CVCLPoint, CVCLNode*>*, std::vector<std::pair<CVCLPoint, CVCLNode*>, std::allocator<std::pair<CVCLPoint, CVCLNode*> > > >, _Compare = TBool (*)(const std::pair<CVCLPoint, CVCLNode*>&, const std::pair<CVCLPoint, CVCLNode*>&)]'
vecclean.cpp:3025:   instantiated from here
/usr/local/include/g++-v3/bits/stl_algo.h:1467: Internal compiler error in 
   expand_function_start, at function.c:6424
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
make[1]: *** [vecclean.o] Error 1
make[1]: Leaving directory `/home/pci/vcur/src/base/algo'
make: *** [subdirs] Error 2
>How-To-Repeat:
compile using gcc 
>Fix:

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

IyA4MiAidmVjY2xlYW4uY3BwIgojIDEgIi91c3IvaW5jbHVkZS9mbG9hdC5oIiAxIDMgNAojIDE2
ICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylmbG9hdC5oCTEu
MTUJOTcvMTEvMjIgU01JIgoKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiBpbnQgX19mbHRfcm91
bmRzKHZvaWQpOwojIDk3ICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMyA0Cn0KIyA4MyAidmVjY2xl
YW4uY3BwIiAyCiMgMSAiLi4vLi4vLi4vbGliL2dkYi5oIiAxCiMgMzQ1ICIuLi8uLi8uLi9saWIv
Z2RiLmgiCiMgMSAiLi4vLi4vLi4vbGliL2NjbGNvbnYuaCIgMQojIDc1ICIuLi8uLi8uLi9saWIv
Y2NsY29udi5oIgojIDEgIi4uLy4uLy4uL2xpYi9jY2xiYXNlLmgiIDEKIyAzOSAiLi4vLi4vLi4v
bGliL2NjbGJhc2UuaCIKZXh0ZXJuICJDIiB7CgojIDEgIi4uLy4uLy4uL2xpYi9wY2lzeXMuaCIg
MQojIDQyICIuLi8uLi8uLi9saWIvY2NsYmFzZS5oIiAyCiMgMSAiLi4vLi4vLi4vbGliL2NjbGNv
bmYuaCIgMQojIDQzICIuLi8uLi8uLi9saWIvY2NsYmFzZS5oIiAyCiMgMSAiLi4vLi4vLi4vbGli
L2NjbHBvcnQuaCIgMQojIDY1ICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIgojIDEgIi4uLy4uLy4u
L2xpYi9wY2lzeXMuaCIgMQojIDY2ICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAyCiMgMTI5ICIu
Li8uLi8uLi9saWIvY2NscG9ydC5oIgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2
OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiMgMTQgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0
ZGlvLmgiIDMgNAojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJp
czIuNy8zLjAuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAojIDQzICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRhcmcuaCIgMyA0
CnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTUgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGlv
LmgiIDIgMyA0CiMgMzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJp
czIuNy8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW8u
aAkxLjY5CTk4LzA3LzEzIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3Rz
LmgiIDEgMyA0CiMgMTMgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAzIDQKI3By
YWdtYSBpZGVudCAiQCgjKWZlYXR1cmVfdGVzdHMuaAkxLjE3CTk3LzEyLzA0IFNNSSIKCiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAojIDkgIi91c3IvaW5jbHVkZS9zeXMv
aXNhX2RlZnMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylpc2FfZGVmcy5oCTEuMTYJOTkvMDUv
MjUgU01JIgojIDE0OCAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQKZXh0ZXJuICJD
IiB7CiMgMzMwICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAp9CiMgMTYgIi91c3Iv
aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDE3NSAi
L3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNAp9CiMgMzcgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgi
IDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiMgOSAiL3Vzci9p
bmNsdWRlL3N5cy92YV9saXN0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdmFfbGlzdC5oCTEu
MTEJOTcvMTEvMjIgU01JIgojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xpc3QuaCIgMyA0CmV4
dGVybiAiQyIgewoKCgp0eXBlZGVmIHZvaWQgKl9fdmFfbGlzdDsKCgoKCgp9CiMgMzggIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0
ZGlvLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3RhZy5oIiAxIDMgNAojIDkgIi91
c3IvaW5jbHVkZS9zdGRpb190YWcuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGRpb190YWcu
aAkxLjMJOTgvMDQvMjAgU01JIgoKCmV4dGVybiAiQyIgewojIDIxICIvdXNyL2luY2x1ZGUvc3Rk
aW9fdGFnLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBGSUxFIF9fRklMRTsKCgoKfQojIDM5ICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9z
dGRpby5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDEgMyA0CiMgOSAi
L3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGRpb19p
bXBsLmgJMS44CTk5LzA2LzMwIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5o
IiAxIDMgNAojIDEyICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAyIDMgNAoKCmV4dGVybiAi
QyIgewoKCgoKCnR5cGVkZWYgbG9uZyBzc2l6ZV90OwojIDMwICIvdXNyL2luY2x1ZGUvc3RkaW9f
aW1wbC5oIiAzIDQKc3RydWN0IEZJTEUgewogICAgICAgIGxvbmcgX19wYWRbMTZdOwp9OwojIDU4
ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAzIDQKfQojIDQwICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMg
NAojIDUwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4w
LjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIF9fRklMRSBG
SUxFOwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBzaXplX3Q7CiMgODggIi91c3IvbG9jYWwv
bGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgi
IDMgNAp0eXBlZGVmIGxvbmcgb2ZmX3Q7CgoKCgoKdHlwZWRlZiBvZmZfdCBvZmY2NF90OwojIDEw
MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2lu
Y2x1ZGUvc3RkaW8uaCIgMyA0CnR5cGVkZWYgbG9uZyBmcG9zX3Q7CgoKCgoKdHlwZWRlZiBmcG9z
X3QgZnBvczY0X3Q7CiMgMTMyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNv
bGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKdHlwZWRlZiBfX3ZhX2xpc3QgX19u
b3RfdmFfbGlzdF9fOwojIDIwMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z
b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFIF9faW9iWzIw
XTsKIyAyMTUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8z
LjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gdW5zaWduZWQgY2hhciBfc2lidWZbXSwg
X3NvYnVmW107CiMgMjc1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFy
aXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCByZW1vdmUoY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIGludCByZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpl
eHRlcm4gRklMRSAqdG1wZmlsZSh2b2lkKTsKZXh0ZXJuIGNoYXIgKnRtcG5hbShjaGFyICopOwoK
ZXh0ZXJuIGNoYXIgKnRtcG5hbV9yKGNoYXIgKik7CgpleHRlcm4gaW50IGZjbG9zZShGSUxFICop
OwpleHRlcm4gaW50IGZmbHVzaChGSUxFICopOwpleHRlcm4gRklMRSAqZm9wZW4oY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqZnJlb3Blbihjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIHZvaWQgc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsK
CgpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBp
bnQgc2V0bGluZWJ1ZihGSUxFICopOwoKZXh0ZXJuIGludCBzZXR2YnVmKEZJTEUgKiwgY2hhciAq
LCBpbnQsIHNpemVfdCk7CgpleHRlcm4gaW50IGZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICos
IC4uLik7CgpleHRlcm4gaW50IGZzY2FuZihGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4
dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc2NhbmYoY29u
c3QgY2hhciAqLCAuLi4pOwoKCgoKZXh0ZXJuIGludCBzbnByaW50ZihjaGFyICosIHNpemVfdCwg
Y29uc3QgY2hhciAqLCAuLi4pOwoKCmV4dGVybiBpbnQgc3ByaW50ZihjaGFyICosIGNvbnN0IGNo
YXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCAuLi4pOwpleHRlcm4gaW50IHZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNf
dmFfbGlzdCk7CmV4dGVybiBpbnQgdnByaW50Zihjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0
KTsKCgoKZXh0ZXJuIGludCB2c25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwg
X19nbnVjX3ZhX2xpc3QpOwoKZXh0ZXJuIGludCB2c3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIg
KiwgX19nbnVjX3ZhX2xpc3QpOwpleHRlcm4gaW50IGZnZXRjKEZJTEUgKik7CmV4dGVybiBjaGFy
ICpmZ2V0cyhjaGFyICosIGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBmcHV0YyhpbnQsIEZJTEUg
Kik7CmV4dGVybiBpbnQgZnB1dHMoY29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gaW50IGdl
dGMoRklMRSAqKTsKZXh0ZXJuIGludCBnZXRjaGFyKHZvaWQpOwpleHRlcm4gY2hhciAqZ2V0cyhj
aGFyICopOwpleHRlcm4gaW50IHB1dGMoaW50LCBGSUxFICopOwpleHRlcm4gaW50IHB1dGNoYXIo
aW50KTsKZXh0ZXJuIGludCBwdXRzKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgdW5nZXRjKGlu
dCwgRklMRSAqKTsKZXh0ZXJuIHNpemVfdCBmcmVhZCh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBG
SUxFICopOwpleHRlcm4gc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90
LCBGSUxFICopOwpleHRlcm4gaW50IGZnZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBp
bnQgZnNlZWsoRklMRSAqLCBsb25nLCBpbnQpOwpleHRlcm4gaW50IGZzZXRwb3MoRklMRSAqLCBj
b25zdCBmcG9zX3QgKik7CmV4dGVybiBsb25nIGZ0ZWxsKEZJTEUgKik7CmV4dGVybiB2b2lkIHJl
d2luZChGSUxFICopOwpleHRlcm4gdm9pZCBjbGVhcmVycihGSUxFICopOwpleHRlcm4gaW50IGZl
b2YoRklMRSAqKTsKZXh0ZXJuIGludCBmZXJyb3IoRklMRSAqKTsKZXh0ZXJuIHZvaWQgcGVycm9y
KGNvbnN0IGNoYXIgKik7CiMgMzUzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3Vu
LXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIEZJTEUgKmZkb3Bl
bihpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpjdGVybWlkKGNoYXIgKik7CmV4dGVy
biBpbnQgZmlsZW5vKEZJTEUgKik7CiMgMzY0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj
djktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIHZvaWQg
ZmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlKEZJTEUgKik7CmV4dGVy
biB2b2lkIGZ1bmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZChGSUxF
ICopOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQodm9pZCk7CmV4dGVybiBpbnQgcHV0Y191
bmxvY2tlZChpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZChpbnQpOwoj
IDM3OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4z
L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFICpwb3Blbihjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpjdXNlcmlkKGNoYXIgKik7CmV4dGVybiBjaGFyICp0
ZW1wbmFtKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRvcHQoaW50
LCBjaGFyICpjb25zdCAqLCBjb25zdCBjaGFyICopOwoKCgpleHRlcm4gY2hhciAqb3B0YXJnOwpl
eHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CmV4dGVybiBpbnQgZ2V0dyhGSUxFICop
OwpleHRlcm4gaW50IHB1dHcoaW50LCBGSUxFICopOwpleHRlcm4gaW50IHBjbG9zZShGSUxFICop
OwoKCgoKCgoKZXh0ZXJuIGludCBmc2Vla28oRklMRSAqLCBvZmZfdCwgaW50KTsKZXh0ZXJuIG9m
Zl90IGZ0ZWxsbyhGSUxFICopOwojIDU4NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5
LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0Cn0KIyAxMzAgIi4uLy4u
Ly4uL2xpYi9jY2xwb3J0LmgiIDIKIyAxNjIgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCiMgMSAi
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1
ZGUvbWF0aC5oIiAxIDMgNAojIDI0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3Vu
LXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRlcm4gIkMiIHsKCgojcHJh
Z21hIGlkZW50ICJAKCMpbWF0aC5oCTIuNwk5OC8wMS8yNyIKIyA0NiAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvbWF0aC5oIiAzIDQK
dHlwZWRlZiB1bmlvbiBfaF92YWwgewogICAgICAgIHVuc2lnbmVkIGxvbmcgX2lbc2l6ZW9mKGRv
dWJsZSkgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOwogICAgICAgIGRvdWJsZSBfZDsKfSBfaF92
YWw7CgoKZXh0ZXJuIGNvbnN0IF9oX3ZhbCBfX2h1Z2VfdmFsOwojIDgwICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9tYXRoLmgiIDMg
NApleHRlcm4gaW50IHNpZ25nYW07CgoKCgoKCgplbnVtIHZlcnNpb24ge2xpYm1faWVlZSA9IC0x
LCBjX2lzc3VlXzQsIGFuc2lfMSwgc3RyaWN0X2Fuc2l9OwoKCmV4dGVybiBjb25zdCBlbnVtIHZl
cnNpb24gX2xpYl92ZXJzaW9uOwoKCgoKc3RydWN0IF9fbWF0aF9leGNlcHRpb24gewogICAgICAg
IGludCB0eXBlOwogICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgZG91YmxlIGFyZzE7CiAgICAg
ICAgZG91YmxlIGFyZzI7CiAgICAgICAgZG91YmxlIHJldHZhbDsKfTsKIyAxMzQgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL21hdGgu
aCIgMyA0CmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhc2luIChk
b3VibGUpOwpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgYXRhbjIg
KGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJsZSk7CmV4dGVybiBkb3Vi
bGUgc2luIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlKTsKCmV4dGVybiBkb3Vi
bGUgY29zaCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUpOwpleHRlcm4gZG91
YmxlIHRhbmggKGRvdWJsZSk7CgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlKTsKZXh0ZXJuIGRv
dWJsZSBmcmV4cCAoZG91YmxlLCBpbnQgKik7CmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSwg
aW50KTsKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgbG9nMTAgKGRv
dWJsZSk7CmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlLCBkb3VibGUgKik7CgpleHRlcm4gZG91
YmxlIHBvdyAoZG91YmxlLCBkb3VibGUpOwpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSk7Cgpl
eHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlKTsK
ZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUs
IGRvdWJsZSk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpOwpleHRlcm4gZG91Ymxl
IGVyZmMgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSk7CmV4dGVybiBkb3Vi
bGUgaHlwb3QgKGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGludCBpc25hbiAoZG91YmxlKTsKZXh0
ZXJuIGRvdWJsZSBqMCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKTsKZXh0ZXJu
IGRvdWJsZSBqbiAoaW50LCBkb3VibGUpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKTsK
ZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKTsKZXh0
ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAo
ZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhdGFu
aCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUpOwpleHRlcm4gZG91YmxlIGxv
Z2IgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUsIGRvdWJsZSk7CmV4
dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgc2Nh
bGIgKGRvdWJsZSwgZG91YmxlKTsKCgoKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSk7CmV4
dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSk7CmV4
dGVybiBkb3VibGUgcmludCAoZG91YmxlKTsKCgoKCgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1
Y3QgX19tYXRoX2V4Y2VwdGlvbiAqKTsKCgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRv
dWJsZSk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUsIGRvdWJsZSk7CmV4dGVy
biBkb3VibGUgc2NhbGJuIChkb3VibGUsIGludCk7CiMgMjMyICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRl
cm4gZmxvYXQgbW9kZmYgKGZsb2F0LCBmbG9hdCAqKTsKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvZmxvYXRpbmdwb2ludC5o
IiAxIDMgNAojIDIxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMy
LjcvMy4wLjMvaW5jbHVkZS9mbG9hdGluZ3BvaW50LmgiIDMgNApleHRlcm4gIkMiIHsKCgojcHJh
Z21hIGlkZW50ICJAKCMpZmxvYXRpbmdwb2ludC5oCTIuNCA5NC8wNi8wOSIKIyA0MiAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvZmxv
YXRpbmdwb2ludC5oIiAzIDQKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3Vu
LXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAojIDQzICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9mbG9hdGlu
Z3BvaW50LmgiIDIgMyA0CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4t
c29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy9pZWVlZnAuaCIgMSAzIDQKIyAxNyAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lz
L2llZWVmcC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWllZWVmcC5oCTIuNyA5NC8xMS8wOSIK
CgpleHRlcm4gIkMiIHsKCgoKCgoKZW51bSBmcF9kaXJlY3Rpb25fdHlwZSB7CiAgICAgICAgZnBf
bmVhcmVzdCA9IDAsCiAgICAgICAgZnBfdG96ZXJvID0gMSwKICAgICAgICBmcF9wb3NpdGl2ZSA9
IDIsCiAgICAgICAgZnBfbmVnYXRpdmUgPSAzCn07CgplbnVtIGZwX3ByZWNpc2lvbl90eXBlIHsK
ICAgICAgICBmcF9leHRlbmRlZCA9IDAsCiAgICAgICAgZnBfc2luZ2xlID0gMSwKICAgICAgICBm
cF9kb3VibGUgPSAyLAogICAgICAgIGZwX3ByZWNpc2lvbl8zID0gMwp9OwoKZW51bSBmcF9leGNl
cHRpb25fdHlwZSB7CiAgICAgICAgZnBfaW5leGFjdCA9IDAsCiAgICAgICAgZnBfZGl2aXNpb24g
PSAxLAogICAgICAgIGZwX3VuZGVyZmxvdyA9IDIsCiAgICAgICAgZnBfb3ZlcmZsb3cgPSAzLAog
ICAgICAgIGZwX2ludmFsaWQgPSA0Cn07CgplbnVtIGZwX3RyYXBfZW5hYmxlX3R5cGUgewogICAg
ICAgIGZwX3RyYXBfaW5leGFjdCA9IDAsCiAgICAgICAgZnBfdHJhcF9kaXZpc2lvbiA9IDEsCiAg
ICAgICAgZnBfdHJhcF91bmRlcmZsb3cgPSAyLAogICAgICAgIGZwX3RyYXBfb3ZlcmZsb3cgPSAz
LAogICAgICAgIGZwX3RyYXBfaW52YWxpZCA9IDQKfTsKIyAxMzMgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy9pZWVlZnAuaCIg
MyA0CmVudW0gZnBfY2xhc3NfdHlwZSB7CiAgICAgICAgZnBfemVybyA9IDAsCiAgICAgICAgZnBf
c3Vibm9ybWFsID0gMSwKICAgICAgICBmcF9ub3JtYWwgPSAyLAogICAgICAgIGZwX2luZmluaXR5
ID0gMywKICAgICAgICBmcF9xdWlldCA9IDQsCiAgICAgICAgZnBfc2lnbmFsaW5nID0gNQp9OwoK
Cn0KIyA0NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMu
MC4zL2luY2x1ZGUvZmxvYXRpbmdwb2ludC5oIiAyIDMgNAojIDU4ICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9mbG9hdGluZ3BvaW50
LmgiIDMgNAp0eXBlZGVmIGludCBzaWdmcGVfY29kZV90eXBlOwoKdHlwZWRlZiB2b2lkICgqc2ln
ZnBlX2hhbmRsZXJfdHlwZSkoKTsKCgoKCgpleHRlcm4gc2lnZnBlX2hhbmRsZXJfdHlwZSBzaWdm
cGUgKHNpZ2ZwZV9jb2RlX3R5cGUsIHNpZ2ZwZV9oYW5kbGVyX3R5cGUpOwoKCgoKdHlwZWRlZiBm
bG9hdCBzaW5nbGU7CgoKCnR5cGVkZWYgdW5zaWduZWQgZXh0ZW5kZWRbM107CgoKdHlwZWRlZiBs
b25nIGRvdWJsZSBxdWFkcnVwbGU7Cgp0eXBlZGVmIHVuc2lnbmVkIGZwX2V4Y2VwdGlvbl9maWVs
ZF90eXBlOwojIDkwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMy
LjcvMy4wLjMvaW5jbHVkZS9mbG9hdGluZ3BvaW50LmgiIDMgNAp0eXBlZGVmIGNoYXIgZGVjaW1h
bF9zdHJpbmdbNTEyXTsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgZW51bSBmcF9jbGFzc190
eXBlIGZwY2xhc3M7CiAgICAgICAgaW50IHNpZ247CiAgICAgICAgaW50IGV4cG9uZW50OwogICAg
ICAgIGRlY2ltYWxfc3RyaW5nIGRzOwoKCiAgICAgICAgaW50IG1vcmU7CgoKICAgICAgICBpbnQg
bmRpZ2l0czsKCgp9IGRlY2ltYWxfcmVjb3JkOwoKZW51bSBkZWNpbWFsX2Zvcm0gewogICAgICAg
IGZpeGVkX2Zvcm0sCgoKICAgICAgICBmbG9hdGluZ19mb3JtCgp9OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIGVudW0gZnBfZGlyZWN0aW9uX3R5cGUgcmQ7CgogICAgICAgIGVudW0gZGVjaW1h
bF9mb3JtIGRmOwoKICAgICAgICBpbnQgbmRpZ2l0czsKfSBkZWNpbWFsX21vZGU7CgplbnVtIGRl
Y2ltYWxfc3RyaW5nX2Zvcm0gewogICAgICAgIGludmFsaWRfZm9ybSwKICAgICAgICB3aGl0ZXNw
YWNlX2Zvcm0sCiAgICAgICAgZml4ZWRfaW50X2Zvcm0sCiAgICAgICAgZml4ZWRfaW50ZG90X2Zv
cm0sCiAgICAgICAgZml4ZWRfZG90ZnJhY19mb3JtLAogICAgICAgIGZpeGVkX2ludGRvdGZyYWNf
Zm9ybSwKICAgICAgICBmbG9hdGluZ19pbnRfZm9ybSwKICAgICAgICBmbG9hdGluZ19pbnRkb3Rf
Zm9ybSwKICAgICAgICBmbG9hdGluZ19kb3RmcmFjX2Zvcm0sCiAgICAgICAgZmxvYXRpbmdfaW50
ZG90ZnJhY19mb3JtLAogICAgICAgIGluZl9mb3JtLAogICAgICAgIGluZmluaXR5X2Zvcm0sCiAg
ICAgICAgbmFuX2Zvcm0sCiAgICAgICAgbmFuc3RyaW5nX2Zvcm0KfTsKCmV4dGVybiB2b2lkIHNp
bmdsZV90b19kZWNpbWFsIChzaW5nbGUgKiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVjb3Jk
ICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoKZXh0ZXJuIHZvaWQgZG91YmxlX3RvX2Rl
Y2ltYWwgKGRvdWJsZSAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwgZnBfZXhj
ZXB0aW9uX2ZpZWxkX3R5cGUgKik7CgpleHRlcm4gdm9pZCBleHRlbmRlZF90b19kZWNpbWFsIChl
eHRlbmRlZCAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwgZnBfZXhjZXB0aW9u
X2ZpZWxkX3R5cGUgKik7CgpleHRlcm4gdm9pZCBxdWFkcnVwbGVfdG9fZGVjaW1hbCAocXVhZHJ1
cGxlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNpbWFsX3JlY29yZCAqLCBmcF9leGNlcHRpb25fZmll
bGRfdHlwZSAqKTsKCgpleHRlcm4gdm9pZCBkZWNpbWFsX3RvX3NpbmdsZSAoc2luZ2xlICosIGRl
Y2ltYWxfbW9kZSAqLCBkZWNpbWFsX3JlY29yZCAqLCBmcF9leGNlcHRpb25fZmllbGRfdHlwZSAq
KTsKCmV4dGVybiB2b2lkIGRlY2ltYWxfdG9fZG91YmxlIChkb3VibGUgKiwgZGVjaW1hbF9tb2Rl
ICosIGRlY2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoKZXh0ZXJu
IHZvaWQgZGVjaW1hbF90b19leHRlbmRlZCAoZXh0ZW5kZWQgKiwgZGVjaW1hbF9tb2RlICosIGRl
Y2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoKZXh0ZXJuIHZvaWQg
ZGVjaW1hbF90b19xdWFkcnVwbGUgKHF1YWRydXBsZSAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1h
bF9yZWNvcmQgKiwgZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKik7CgoKZXh0ZXJuIHZvaWQgc3Ry
aW5nX3RvX2RlY2ltYWwgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAqLCBlbnVt
IGRlY2ltYWxfc3RyaW5nX2Zvcm0gKiwgY2hhciAqKik7CgpleHRlcm4gdm9pZCBmdW5jX3RvX2Rl
Y2ltYWwgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAqLCBlbnVtIGRlY2ltYWxf
c3RyaW5nX2Zvcm0gKiwgY2hhciAqKiwgaW50ICgqKSh2b2lkKSwgaW50ICosIGludCAoKikoaW50
KSk7CgoKZXh0ZXJuIHZvaWQgZmlsZV90b19kZWNpbWFsIChjaGFyICoqLCBpbnQsIGludCwgZGVj
aW1hbF9yZWNvcmQgKiwgZW51bSBkZWNpbWFsX3N0cmluZ19mb3JtICosIGNoYXIgKiosIEZJTEUg
KiwgaW50ICopOwoKCgpleHRlcm4gY2hhciAqc2Vjb252ZXJ0IChzaW5nbGUgKiwgaW50LCBpbnQg
KiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpzZmNvbnZlcnQgKHNpbmdsZSAqLCBpbnQs
IGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNnY29udmVydCAoc2luZ2xlICos
IGludCwgaW50LCBjaGFyICopOwpleHRlcm4gY2hhciAqZWNvbnZlcnQgKGRvdWJsZSwgaW50LCBp
bnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpmY29udmVydCAoZG91YmxlLCBpbnQs
IGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdjb252ZXJ0IChkb3VibGUsIGlu
dCwgaW50LCBjaGFyICopOwpleHRlcm4gY2hhciAqcWVjb252ZXJ0IChxdWFkcnVwbGUgKiwgaW50
LCBpbnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpxZmNvbnZlcnQgKHF1YWRydXBs
ZSAqLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnFnY29udmVydCAo
cXVhZHJ1cGxlICosIGludCwgaW50LCBjaGFyICopOwoKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJs
ZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlLCBpbnQsIGlu
dCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUsIGludCwgY2hhciAqKTsKCgoK
CgpleHRlcm4gZG91YmxlIGF0b2YgKGNvbnN0IGNoYXIgKik7CmV4dGVybiBkb3VibGUgc3RydG9k
IChjb25zdCBjaGFyICosIGNoYXIgKiopOwoKCn0KIyAyMzUgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL21hdGguaCIgMiAzIDQKCgoK
Cn0KIyAxNjMgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CiNwcmFnbWEgaWRl
bnQgIkAoIyljdHlwZS5oCTEuMzAJOTgvMDEvMTYgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAxOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0
CgoKZXh0ZXJuICJDIiB7CiMgNDggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKZXh0ZXJuIGlu
dCBpc2FsbnVtKGludCk7CmV4dGVybiBpbnQgaXNhbHBoYShpbnQpOwpleHRlcm4gaW50IGlzY250
cmwoaW50KTsKZXh0ZXJuIGludCBpc2RpZ2l0KGludCk7CmV4dGVybiBpbnQgaXNncmFwaChpbnQp
OwpleHRlcm4gaW50IGlzbG93ZXIoaW50KTsKZXh0ZXJuIGludCBpc3ByaW50KGludCk7CmV4dGVy
biBpbnQgaXNwdW5jdChpbnQpOwpleHRlcm4gaW50IGlzc3BhY2UoaW50KTsKZXh0ZXJuIGludCBp
c3VwcGVyKGludCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQoaW50KTsKZXh0ZXJuIGludCB0b2xvd2Vy
KGludCk7CmV4dGVybiBpbnQgdG91cHBlcihpbnQpOwoKCgoKZXh0ZXJuIGludCBpc2FzY2lpKGlu
dCk7CmV4dGVybiBpbnQgdG9hc2NpaShpbnQpOwpleHRlcm4gaW50IF90b2xvd2VyKGludCk7CmV4
dGVybiBpbnQgX3RvdXBwZXIoaW50KTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19jdHlwZVtd
OwpleHRlcm4gdW5zaWduZWQgaW50ICpfX2N0eXBlX21hc2s7CmV4dGVybiBpbnQgKl9fdHJhbnNf
dXBwZXI7CmV4dGVybiBpbnQgKl9fdHJhbnNfbG93ZXI7CiMgMTYzICIvdXNyL2luY2x1ZGUvY3R5
cGUuaCIgMyA0Cn0KIyAxNjYgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIKIyAxICIvdXNyL2lu
Y2x1ZGUvZXJybm8uaCIgMSAzIDQKIyAxMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNAojcHJh
Z21hIGlkZW50ICJAKCMpZXJybm8uaAkxLjE1CTk4LzAzLzAyIFNNSSIKCgoKCgojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvZXJybm8uaCIgMSAzIDQKIyAxMSAiL3Vzci9pbmNsdWRlL3N5cy9lcnJuby5o
IiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWVycm5vLmgJMS4xOQk5OC8wMS8xNCBTTUkiCiMgMzUg
Ii91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0CmV4dGVybiAiQyIgewojIDE5MSAiL3Vzci9p
bmNsdWRlL3N5cy9lcnJuby5oIiAzIDQKfQojIDE4ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAz
IDQKCgpleHRlcm4gIkMiIHsKIyAzMiAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNApleHRlcm4g
aW50ICpfX19lcnJubygpOwoKCgoKCgp9CiMgMTY3ICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAy
CgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4w
LjMvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQKIyAyNSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z
cGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3RkbGliLmgiIDMgNAojcHJhZ21h
IGlkZW50ICJAKCMpc3RkbGliLmgJMS40NAk5OC8wMS8yMiBTTUkiCgojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDI4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5
cy93YWl0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpd2FpdC5oCTEuMjEJOTcvMDQvMDggU01J
IgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAxOSAiL3Vz
ci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
c3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAoj
IDI1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl0eXBlcy5oCTEuNjMJ
OTgvMDQvMjggU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0CiMg
MjggIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9p
bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90
ZXN0cy5oIiAxIDMgNAojIDI5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNv
bGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy9tYWNodHlwZXMuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNo
dHlwZXMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyltYWNodHlwZXMuaAkxLjEyCTk2LzA4LzAx
IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMTkg
Ii91c3IvaW5jbHVkZS9zeXMvbWFjaHR5cGVzLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgMzMg
Ii91c3IvaW5jbHVkZS9zeXMvbWFjaHR5cGVzLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfcGh5c2Fk
cl90IHsgaW50IHJbMV07IH0gKnBoeXNhZHJfdDsKCnR5cGVkZWYgc3RydWN0IF9sYWJlbF90IHsg
bG9uZyB2YWxbMl07IH0gbGFiZWxfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGxvY2tfdDsK
Cgp9CiMgMzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8z
LjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAojIDQ1ICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1
ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWludF90eXBlcy5oCTEu
Ngk5Ny8wOC8yMCBTTUkiCiMgNDIgIi91c3IvaW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDMgNAoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQKIyA0MyAiL3Vzci9pbmNsdWRl
L3N5cy9pbnRfdHlwZXMuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyA2MiAiL3Vzci9pbmNsdWRl
L3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgY2hhciBpbnQ4X3Q7CgoKCgoKdHlwZWRlZiBz
aG9ydCBpbnQxNl90Owp0eXBlZGVmIGludCBpbnQzMl90OwoKdHlwZWRlZiBsb25nIGludDY0X3Q7
CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IHVpbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKCnR5cGVkZWYgdW5z
aWduZWQgbG9uZyB1aW50NjRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIg
MyA0CnR5cGVkZWYgaW50NjRfdCBpbnRtYXhfdDsKdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7
CiMgMTA3ICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nIGlu
dHB0cl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0cl90OwojIDExOSAiL3Vzci9pbmNs
dWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgY2hhciBpbnRfbGVhc3Q4X3Q7CgoKCgoK
dHlwZWRlZiBzaG9ydCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBpbnRfbGVhc3QzMl90OwoK
dHlwZWRlZiBsb25nIGludF9sZWFzdDY0X3Q7CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1
aW50X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnRfbGVhc3QxNl90Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCB1aW50X2xlYXN0MzJfdDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1
aW50X2xlYXN0NjRfdDsKCgoKCgoKCn0KIyA0NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy
Y3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgoK
CgpleHRlcm4gIkMiIHsKIyA2MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z
b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgbG9u
ZyBsb25nbG9uZ190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X2xvbmdsb25nX3Q7CiMg
ODIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQzMl90IHRfc2NhbGFyX3Q7CnR5cGVk
ZWYgdWludDMyX3QgdF91c2NhbGFyX3Q7CiMgOTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3Bh
cmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIHVjaGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0X3Q7
CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25n
X3Q7Cgp0eXBlZGVmIGNoYXIgKmNhZGRyX3Q7CnR5cGVkZWYgbG9uZyBkYWRkcl90Owp0eXBlZGVm
IHNob3J0IGNudF90OwojIDExMCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z
b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgaW50
IHB0cmRpZmZfdDsKIyAxMjUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29s
YXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bG9uZ190IHBm
bl90Owp0eXBlZGVmIHVsb25nX3QgcGdjbnRfdDsKdHlwZWRlZiBsb25nIHNwZ2NudF90OwoKdHlw
ZWRlZiB1Y2hhcl90IHVzZV90Owp0eXBlZGVmIHNob3J0IHN5c2lkX3Q7CnR5cGVkZWYgc2hvcnQg
aW5kZXhfdDsKdHlwZWRlZiB2b2lkICp0aW1lb3V0X2lkX3Q7CnR5cGVkZWYgdm9pZCAqYnVmY2Fs
bF9pZF90OwojIDE2MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlz
Mi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVsb25nX3QgaW5vX3Q7
CnR5cGVkZWYgbG9uZyBibGtjbnRfdDsKdHlwZWRlZiB1bG9uZ190IGZzYmxrY250X3Q7CnR5cGVk
ZWYgdWxvbmdfdCBmc2ZpbGNudF90OwojIDE3NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy
Y3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVm
IGlub190IGlubzY0X3Q7CnR5cGVkZWYgYmxrY250X3QgYmxrY250NjRfdDsKdHlwZWRlZiBmc2Js
a2NudF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBmc2ZpbGNudF90IGZzZmlsY250NjRfdDsKIyAx
ODkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQgYmxrc2l6ZV90OwoKCgoKCnR5cGVk
ZWYgZW51bSB7IF9CX0ZBTFNFLCBfQl9UUlVFIH0gYm9vbGVhbl90OwojIDIwOCAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMgNAp0eXBlZGVmIGludDY0X3QgcGFkNjRfdDsKdHlwZWRlZiB1aW50NjRfdCB1cGFk
NjRfdDsKIyAyMjEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIu
Ny8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nbG9uZ190IG9mZnNl
dF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCB1X29mZnNldF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdf
dCBsZW5fdDsKdHlwZWRlZiBsb25nbG9uZ190IGRpc2thZGRyX3Q7CiMgMjQyICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMyA0CnR5cGVkZWYgdW5pb24gewogICAgICAgIG9mZnNldF90IF9mOwogICAgICAgIHN0
cnVjdCB7CiAgICAgICAgICAgICAgICBpbnQzMl90IF91OwogICAgICAgICAgICAgICAgaW50MzJf
dCBfbDsKICAgICAgICB9IF9wOwp9IGxsb2ZmX3Q7CiMgMjYyICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0
CnR5cGVkZWYgdW5pb24gewogICAgICAgIGRpc2thZGRyX3QgX2Y7CiAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgICAgIGludDMyX3QgX3U7CiAgICAgICAgICAgICAgICBpbnQzMl90IF9sOwog
ICAgICAgIH0gX3A7Cn0gbGxkYWRkcl90OwoKCnR5cGVkZWYgdWludF90IGtfZmx0c2V0X3Q7CiMg
MjgxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgaW50IGlkX3Q7CiMgMjk0ICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMyA0CnR5cGVkZWYgdWludF90IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgbG9uZyBz
dXNlY29uZHNfdDsKCgoKCgoKdHlwZWRlZiB1aW50X3QgbWFqb3JfdDsKdHlwZWRlZiB1aW50X3Qg
bWlub3JfdDsKIyAzMTUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJp
czIuNy8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBzaG9ydCBwcmlfdDsK
IyAzMjggIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAu
My9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1c2hvcnRfdCBvX21vZGVfdDsKdHlw
ZWRlZiBzaG9ydCBvX2Rldl90Owp0eXBlZGVmIHVzaG9ydF90IG9fdWlkX3Q7CnR5cGVkZWYgb191
aWRfdCBvX2dpZF90Owp0eXBlZGVmIHNob3J0IG9fbmxpbmtfdDsKdHlwZWRlZiBzaG9ydCBvX3Bp
ZF90Owp0eXBlZGVmIHVzaG9ydF90IG9faW5vX3Q7CgoKCgoKdHlwZWRlZiBpbnQga2V5X3Q7Cgp0
eXBlZGVmIHVpbnRfdCBtb2RlX3Q7CgoKCgoKCgp0eXBlZGVmIGludCB1aWRfdDsKCgoKCgp0eXBl
ZGVmIHVpZF90IGdpZF90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX3Q7CnR5
cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7Cgp0eXBlZGVmIHN0cnVjdCBfcHRocmVh
ZF9tdXRleCB7CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVpbnQ4X3QgX19wdGhy
ZWFkX211dGV4X2ZsYWdbNF07CiAgICAgICAgICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfbXV0
ZXhfdHlwZTsKICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9mbGFnczsKICAgICAgICB1bmlvbiB7
CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90
IF9fcHRocmVhZF9tdXRleF9wYWRbOF07CiAgICAgICAgICAgICAgICB9IF9fcHRocmVhZF9tdXRl
eF9sb2NrNjQ7CiAgICAgICAgICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfbXV0ZXhfb3duZXI2
NDsKICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9sb2NrOwogICAgICAgIHVwYWQ2NF90IF9fcHRo
cmVhZF9tdXRleF9kYXRhOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCnR5cGVkZWYgc3RydWN0IF9wdGhy
ZWFkX2NvbmQgewogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1aW50OF90IF9fcHRo
cmVhZF9jb25kX2ZsYWdbNF07CiAgICAgICAgICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfY29u
ZF90eXBlOwogICAgICAgIH0gX19wdGhyZWFkX2NvbmRfZmxhZ3M7CiAgICAgICAgdXBhZDY0X3Qg
X19wdGhyZWFkX2NvbmRfZGF0YTsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKCnR5cGVkZWYgc3RydWN0
IF9wdGhyZWFkX3J3bG9jayB7CiAgICAgICAgaW50MzJfdCBfX3B0aHJlYWRfcndsb2NrX3JlYWRl
cnM7CiAgICAgICAgdWludDE2X3QgX19wdGhyZWFkX3J3bG9ja190eXBlOwogICAgICAgIHVpbnQx
Nl90IF9fcHRocmVhZF9yd2xvY2tfbWFnaWM7CiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX3J3
bG9ja19wYWQxWzNdOwogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkMlsyXTsK
ICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDNbMl07Cn0gcHRocmVhZF9yd2xv
Y2tfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2F0dHIgewogICAgICAgIHZvaWQgKl9f
cHRocmVhZF9hdHRycDsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo
cmVhZF9tdXRleGF0dHIgewogICAgICAgIHZvaWQgKl9fcHRocmVhZF9tdXRleGF0dHJwOwp9IHB0
aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfY29uZGF0dHIg
ewogICAgICAgIHZvaWQgKl9fcHRocmVhZF9jb25kYXR0cnA7Cn0gcHRocmVhZF9jb25kYXR0cl90
OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX29uY2UgewogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9v
bmNlX3BhZFs0XTsKfSBwdGhyZWFkX29uY2VfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVh
ZF9yd2xvY2thdHRyIHsKICAgICAgICB2b2lkICpfX3B0aHJlYWRfcndsb2NrYXR0cnA7Cn0gcHRo
cmVhZF9yd2xvY2thdHRyX3Q7Cgp0eXBlZGVmIHVsb25nX3QgZGV2X3Q7CgoKdHlwZWRlZiB1aW50
X3QgbmxpbmtfdDsKdHlwZWRlZiBpbnQgcGlkX3Q7CiMgNDc2ICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0
CnR5cGVkZWYgbG9uZyB0aW1lX3Q7CgoKCgp0eXBlZGVmIGxvbmcgY2xvY2tfdDsKCgoKCnR5cGVk
ZWYgaW50IGNsb2NraWRfdDsKCgoKCnR5cGVkZWYgaW50IHRpbWVyX3Q7CgoKCgoKCnR5cGVkZWYg
dW5zaWduZWQgY2hhciB1bmNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCB1aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxvbmc7CiMgNTUy
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1X2NoYXI7CnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7CnR5cGVkZWYgc3RydWN0IF9xdWFkIHsgaW50IHZh
bFsyXTsgfSBxdWFkX3Q7CnR5cGVkZWYgcXVhZF90IHF1YWQ7CgoKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMSAzIDQKIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg
MyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzZWxlY3QuaAkxLjE2CTk4LzA0LzI3IFNNSSIKCiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMTUgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAz
IDQKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMp
dGltZS5oCTIuNjIJOTgvMDIvMDQgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVf
dGVzdHMuaCIgMSAzIDQKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0CgoKCgoK
CgpleHRlcm4gIkMiIHsKIyA0OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNApzdHJ1Y3Qg
dGltZXZhbCB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBzdXNlY29uZHNfdCB0dl91
c2VjOwp9OwojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1lem9u
ZSB7CiAgICAgICAgaW50IHR6X21pbnV0ZXN3ZXN0OwogICAgICAgIGludCB0el9kc3R0aW1lOwp9
OwoKCgoKCn0KIyAxMDAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKIyAxICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMSAzIDQKIyAxMDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNAoKCgpl
eHRlcm4gIkMiIHsKIyAxNTUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKc3RydWN0IGl0
aW1lcnZhbCB7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3Ry
dWN0IHRpbWV2YWwgaXRfdmFsdWU7Cn07CiMgMjAzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg
MyA0CnR5cGVkZWYgbG9uZ2xvbmdfdCBocnRpbWVfdDsKIyAzMTUgIi91c3IvaW5jbHVkZS9zeXMv
dGltZS5oIiAzIDQKaW50IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKiwgc3RydWN0IHRpbWV2YWwg
Kik7CiMgMzI2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CmludCBnZXRpdGltZXIoaW50
LCBzdHJ1Y3QgaXRpbWVydmFsICopOwppbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3Ry
dWN0IHRpbWV2YWwgKik7CgppbnQgc2V0aXRpbWVyKGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnZh
bCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOwojIDM2NCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi
IDMgNAppbnQgc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHZvaWQgKik7CgpocnRpbWVf
dCBnZXRocnRpbWUodm9pZCk7CmhydGltZV90IGdldGhydnRpbWUodm9pZCk7CiMgMzg0ICIvdXNy
L2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CmludCBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwg
Kiwgdm9pZCAqKTsKIyA0MDUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKIyAxICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKI3By
YWdtYSBpZGVudCAiQCgjKXRpbWUuaAkxLjM2CTk4LzAzLzI3IFNNSSIKCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMTkgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDIgMyA0CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43
LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjAgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNjQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApz
dHJ1Y3QgdG0gewogICAgICAgIGludCB0bV9zZWM7CiAgICAgICAgaW50IHRtX21pbjsKICAgICAg
ICBpbnQgdG1faG91cjsKICAgICAgICBpbnQgdG1fbWRheTsKICAgICAgICBpbnQgdG1fbW9uOwog
ICAgICAgIGludCB0bV95ZWFyOwogICAgICAgIGludCB0bV93ZGF5OwogICAgICAgIGludCB0bV95
ZGF5OwogICAgICAgIGludCB0bV9pc2RzdDsKfTsKCgoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sodm9p
ZCk7CmV4dGVybiBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3QpOwpleHRlcm4gdGltZV90
IG1rdGltZShzdHJ1Y3QgdG0gKik7CmV4dGVybiB0aW1lX3QgdGltZSh0aW1lX3QgKik7CmV4dGVy
biBjaGFyICphc2N0aW1lKGNvbnN0IHN0cnVjdCB0bSAqKTsKZXh0ZXJuIGNoYXIgKmN0aW1lKGNv
bnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lKGNvbnN0IHRpbWVfdCAqKTsK
ZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHNpemVf
dCBzdHJmdGltZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0g
Kik7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3Qg
dG0gKik7CmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqLCBzdHJ1
Y3QgdG0gKik7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqLCBzdHJ1Y3QgdG0gKik7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1w
bC5oIiAxIDMgNAojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKI3ByYWdt
YSBpZGVudCAiQCgjKXRpbWVfaW1wbC5oCTEuMwk5OC8wMi8xMyBTTUkiCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDE4ICIvdXNyL2luY2x1ZGUvc3lzL3Rp
bWVfaW1wbC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3Rp
bWVfaW1wbC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgdGltZXNwZWMgewogICAgICAgIHRpbWVfdCB0
dl9zZWM7CiAgICAgICAgbG9uZyB0dl9uc2VjOwp9IHRpbWVzcGVjX3Q7CiMgNjAgIi91c3IvaW5j
bHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3Ry
dWNfdDsKIyA3OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0CnR5cGVkZWYgc3Ry
dWN0IGl0aW1lcnNwZWMgewogICAgICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAg
ICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7Cn0gaXRpbWVyc3BlY190OwojIDEzMCAiL3Vz
ci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0Cn0KIyAxMDQgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDIgMyA0CiMgMTE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdW5pb24gc2lndmFsIHsK
ICAgICAgICBpbnQgc2l2YWxfaW50OwogICAgICAgIHZvaWQgKnNpdmFsX3B0cjsKfTsKCgoKCnN0
cnVjdCBzaWdldmVudCB7CiAgICAgICAgaW50IHNpZ2V2X25vdGlmeTsKICAgICAgICBpbnQgc2ln
ZXZfc2lnbm87CiAgICAgICAgdW5pb24gc2lndmFsIHNpZ2V2X3ZhbHVlOwogICAgICAgIHZvaWQg
KCpzaWdldl9ub3RpZnlfZnVuY3Rpb24pKHVuaW9uIHNpZ3ZhbCk7CiAgICAgICAgcHRocmVhZF9h
dHRyX3QgKnNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzOwogICAgICAgIGludCBfX3NpZ2V2X3BhZDI7
Cn07CgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMg
Kik7CmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAq
KTsKZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVz
cGVjICopOwpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZShjbG9ja2lkX3QsIHN0cnVjdCBzaWdldmVu
dCAqLCB0aW1lcl90ICopOwpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSh0aW1lcl90KTsKZXh0ZXJu
IGludCB0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUo
dGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSh0
aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICosCiAgICAgICAgICAgICAgICBz
dHJ1Y3QgaXRpbWVyc3BlYyAqKTsKZXh0ZXJuIGludCBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRp
bWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKCgoKCmV4dGVybiB2b2lkIHR6c2V0KHZvaWQp
OwoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgpleHRlcm4gbG9uZyBfc3lzY29uZihpbnQpOwoK
CgoKCgpleHRlcm4gbG9uZyB0aW1lem9uZTsKZXh0ZXJuIGludCBkYXlsaWdodDsKIyAxNzYgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlKGNvbnN0IGNo
YXIgKik7CgoKCgoKCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CiMgMjcyICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzIDQKc3RhdGljIGNoYXIgKgphc2N0aW1lX3IoY29uc3Qgc3RydWN0IHRtICpfX3Rt
LCBjaGFyICpfX2J1ZikKewogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2FzY3RpbWVfcihj
b25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAqKTsKICAgICAgICByZXR1cm4gKF9fcG9zaXhfYXNjdGlt
ZV9yKF9fdG0sIF9fYnVmKSk7Cn0Kc3RhdGljIGNoYXIgKgpjdGltZV9yKGNvbnN0IHRpbWVfdCAq
X190aW1lLCBjaGFyICpfX2J1ZikKewogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2N0aW1l
X3IoY29uc3QgdGltZV90ICosIGNoYXIgKik7CiAgICAgICAgcmV0dXJuIChfX3Bvc2l4X2N0aW1l
X3IoX190aW1lLCBfX2J1ZikpOwp9CiMgMzM0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKfQoj
IDQwNiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0CiMgNDE4ICIvdXNyL2luY2x1ZGUv
c3lzL3RpbWUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzIDQKIyA0
MTkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNAoKCgoKCn0KIyAxOCAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CiMgNDUgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDMgNAp0eXBlZGVmIGxvbmcgZmRfbWFzazsKCnR5cGVkZWYgbG9uZyBm
ZHNfbWFzazsKIyA3MyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CnR5cGVkZWYgc3Ry
dWN0IGZkX3NldCB7CgoKCiAgICAgICAgbG9uZyBmZHNfYml0c1soKCg2NTUzNikrKCgoc2l6ZW9m
IChmZHNfbWFzaykgKiA4KSktMSkpLygoc2l6ZW9mIChmZHNfbWFzaykgKiA4KSkpXTsKfSBmZF9z
ZXQ7CiMgOTcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNApleHRlcm4gaW50IHNlbGVj
dChpbnQsIGZkX3NldCAqLCBmZF9zZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICopOwoK
CgoKCgp9CiMgNTY1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMy
LjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKIyA1ODEgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzIDQKfQojIDIxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQKCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvcmVz
b3VyY2UuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylyZXNvdXJjZS5oCTEuMjUJOTgvMDYvMzAg
U01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAxOSAi
L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAyIDMgNAoKIyAxICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MSAzIDQKIyAyMSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAyIDMgNAojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvdGltZS5oIiAxIDMgNAojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNl
LmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNTMgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2Uu
aCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBybGltX3Q7CiMgMTAyICIvdXNyL2luY2x1ZGUv
c3lzL3Jlc291cmNlLmgiIDMgNApzdHJ1Y3QgcmxpbWl0IHsKICAgICAgICBybGltX3QgcmxpbV9j
dXI7CiAgICAgICAgcmxpbV90IHJsaW1fbWF4Owp9OwoKCgoKdHlwZWRlZiB1X2xvbmdsb25nX3Qg
cmxpbTY0X3Q7CgoKCgoKc3RydWN0IHJsaW1pdDY0IHsKICAgICAgICBybGltNjRfdCBybGltX2N1
cjsKICAgICAgICBybGltNjRfdCBybGltX21heDsKfTsKIyAxNDMgIi91c3IvaW5jbHVkZS9zeXMv
cmVzb3VyY2UuaCIgMyA0CnN0cnVjdCBydXNhZ2UgewogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1
X3V0aW1lOwogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwogICAgICAgIGxvbmcgcnVf
bWF4cnNzOwogICAgICAgIGxvbmcgcnVfaXhyc3M7CiAgICAgICAgbG9uZyBydV9pZHJzczsKICAg
ICAgICBsb25nIHJ1X2lzcnNzOwogICAgICAgIGxvbmcgcnVfbWluZmx0OwogICAgICAgIGxvbmcg
cnVfbWFqZmx0OwogICAgICAgIGxvbmcgcnVfbnN3YXA7CiAgICAgICAgbG9uZyBydV9pbmJsb2Nr
OwogICAgICAgIGxvbmcgcnVfb3VibG9jazsKICAgICAgICBsb25nIHJ1X21zZ3NuZDsKICAgICAg
ICBsb25nIHJ1X21zZ3JjdjsKICAgICAgICBsb25nIHJ1X25zaWduYWxzOwogICAgICAgIGxvbmcg
cnVfbnZjc3c7CiAgICAgICAgbG9uZyBydV9uaXZjc3c7Cn07CiMgMTkzICIvdXNyL2luY2x1ZGUv
c3lzL3Jlc291cmNlLmgiIDMgNApleHRlcm4gaW50IHNldHJsaW1pdChpbnQsIGNvbnN0IHN0cnVj
dCBybGltaXQgKik7CmV4dGVybiBpbnQgZ2V0cmxpbWl0KGludCwgc3RydWN0IHJsaW1pdCAqKTsK
IyAyMDMgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CmV4dGVybiBpbnQgZ2V0cHJp
b3JpdHkoaW50LCBpZF90KTsKZXh0ZXJuIGludCBzZXRwcmlvcml0eShpbnQsIGlkX3QsIGludCk7
CmV4dGVybiBpbnQgZ2V0cnVzYWdlKGludCwgc3RydWN0IHJ1c2FnZSAqKTsKIyAyMjggIi91c3Iv
aW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0Cn0KIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0
LmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDEgMyA0CiMgMTYgIi91
c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXNpZ2luZm8u
aAkxLjU0CTk4LzAzLzI3IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3Rz
LmgiIDEgMyA0CiMgMTkgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNAojIDEgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRl
L3N5cy90eXBlcy5oIiAxIDMgNAojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMiAz
IDQKCgpleHRlcm4gIkMiIHsKIyAxMjYgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRl
L3N5cy9tYWNoc2lnLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbWFjaHNpZy5oCTEuMTQJOTgv
MDIvMDUgU01JIgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0
CiMgMjAgIi91c3IvaW5jbHVkZS9zeXMvbWFjaHNpZy5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewoj
IDExMCAiL3Vzci9pbmNsdWRlL3N5cy9tYWNoc2lnLmgiIDMgNAp9CiMgMTI3ICIvdXNyL2luY2x1
ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQKIyAyMDYgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5o
IiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAxIDMgNAojIDIwNyAiL3Vz
ci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0CiMgMjE3ICIvdXNyL2luY2x1ZGUvc3lzL3Np
Z2luZm8uaCIgMyA0CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xh
cmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjE4ICIvdXNyL2luY2x1
ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQKCgoKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CgoKCiAg
ICAgICAgaW50IHNpX3NpZ25vOwogICAgICAgIGludCBzaV9jb2RlOwogICAgICAgIGludCBzaV9l
cnJubzsKCiAgICAgICAgaW50IHNpX3BhZDsKCiAgICAgICAgdW5pb24gewoKICAgICAgICAgICAg
ICAgIGludCBfX3BhZFsoKDI1NiAvIHNpemVvZiAoaW50KSkgLSA0KV07CgogICAgICAgICAgICAg
ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191
aWQ7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHNpZ3Zh
bCBfX3ZhbHVlOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19raWxsOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fdXRpbWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fc3RpbWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBfX2NsZDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBfX3BkYXRhOwog
ICAgICAgICAgICAgICAgfSBfX3Byb2M7CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqX19hZGRyOwogICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX190cmFwbm87CiAgICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19wYzsKICAgICAg
ICAgICAgICAgIH0gX19mYXVsdDsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewoKICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fZmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgX19i
YW5kOwogICAgICAgICAgICAgICAgfSBfX2ZpbGU7CgogICAgICAgICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCBfX2ZhZGRyOwoKCiAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVzdHJ1Y190IF9fdHN0YW1wOwoKCgogICAgICAgICAgICAgICAgICAgICAg
ICBzaG9ydCBfX3N5c2NhbGw7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19uc3lzYXJn
OwogICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fZmF1bHQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgX19zeXNhcmdbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX21z
dGF0ZVsxMF07CiAgICAgICAgICAgICAgICB9IF9fcHJvZjsKCiAgICAgICAgfSBfX2RhdGE7Cgp9
IHNpZ2luZm9fdDsKIyAzNTQgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQKdHlwZWRl
ZiBzdHJ1Y3Qga19zaWdpbmZvIHsKICAgICAgICBpbnQgc2lfc2lnbm87CiAgICAgICAgaW50IHNp
X2NvZGU7CiAgICAgICAgaW50IHNpX2Vycm5vOwoKICAgICAgICBpbnQgc2lfcGFkOwoKICAgICAg
ICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAg
ICBwaWRfdCBfX3BpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuaW9uIHNpZ3ZhbCBfX3ZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gX19raWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fdXRpbWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fc3RpbWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBfX2NsZDsKICAgICAgICAgICAgICAgICAg
ICAgICAgfSBfX3BkYXRhOwogICAgICAgICAgICAgICAgfSBfX3Byb2M7CgogICAgICAgICAgICAg
ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hZGRyOwogICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX190cmFwbm87CiAgICAgICAgICAgICAgICAgICAgICAgIGNh
ZGRyX3QgX19wYzsKICAgICAgICAgICAgICAgIH0gX19mYXVsdDsKCiAgICAgICAgICAgICAgICBz
dHJ1Y3QgewoKICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZmQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgX19iYW5kOwogICAgICAgICAgICAgICAgfSBfX2ZpbGU7CgogICAgICAg
ICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCBfX2ZhZGRy
OwoKCgogICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RydWNfdCBfX3RzdGFtcDsKCgoKICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvcnQgX19zeXNjYWxsOwogICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyIF9fbnN5c2FyZzsKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX2ZhdWx0
OwoKCgogICAgICAgICAgICAgICAgfSBfX3Byb2Y7CgogICAgICAgIH0gX19kYXRhOwoKfSBrX3Np
Z2luZm9fdDsKCnR5cGVkZWYgc3RydWN0IHNpZ3F1ZXVlIHsKICAgICAgICBzdHJ1Y3Qgc2lncXVl
dWUgKnNxX25leHQ7CiAgICAgICAga19zaWdpbmZvX3Qgc3FfaW5mbzsKICAgICAgICB2b2lkICgq
c3FfZnVuYykoc3RydWN0IHNpZ3F1ZXVlICopOwogICAgICAgIHZvaWQgKnNxX2JhY2twdHI7Cgp9
IHNpZ3F1ZXVlX3Q7CiMgNDU0ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0Cn0KIyAy
NiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9w
cm9jc2V0LmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAzIDQKI3By
YWdtYSBpZGVudCAiQCgjKXByb2NzZXQuaAkxLjE4CTk4LzA2LzMwIFNNSSIKCgpleHRlcm4gIkMi
IHsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDIzICIv
dXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMiAzIDQKIyA0MCAiL3Vzci9pbmNsdWRlL3N5cy9w
cm9jc2V0LmgiIDMgNAp0eXBlZGVmIGVudW0KCiAgICAgICAgaWR0eXBlCgogICAgICAgICAgICAg
ICAgewogICAgICAgIFBfUElELAogICAgICAgIFBfUFBJRCwKICAgICAgICBQX1BHSUQsCgogICAg
ICAgIFBfU0lELAogICAgICAgIFBfQ0lELAogICAgICAgIFBfVUlELAogICAgICAgIFBfR0lELAog
ICAgICAgIFBfQUxMLAogICAgICAgIFBfTFdQSUQKfSBpZHR5cGVfdDsKIyA2NCAiL3Vzci9pbmNs
dWRlL3N5cy9wcm9jc2V0LmgiIDMgNAp0eXBlZGVmIGVudW0gaWRvcCB7CiAgICAgICAgUE9QX0RJ
RkYsCgoKICAgICAgICBQT1BfQU5ELAoKCiAgICAgICAgUE9QX09SLAoKCiAgICAgICAgUE9QX1hP
UgoKCn0gaWRvcF90OwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgcHJvY3NldCB7CiAgICAgICAgaWRv
cF90IHBfb3A7CgoKCgogICAgICAgIGlkdHlwZV90IHBfbGlkdHlwZTsKCgogICAgICAgIGlkX3Qg
cF9saWQ7CgogICAgICAgIGlkdHlwZV90IHBfcmlkdHlwZTsKCgogICAgICAgIGlkX3QgcF9yaWQ7
Cn0gcHJvY3NldF90OwojIDEyOSAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNAp9CiMg
MjcgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKIyA4NiAi
L3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMgNApleHRlcm4gcGlkX3Qgd2FpdChpbnQgKik7CmV4
dGVybiBwaWRfdCB3YWl0cGlkKHBpZF90LCBpbnQgKiwgaW50KTsKCgpleHRlcm4gaW50IHdhaXRp
ZChpZHR5cGVfdCwgaWRfdCwgc2lnaW5mb190ICosIGludCk7CmV4dGVybiBwaWRfdCB3YWl0Myhp
bnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICopOwoKCgoKZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90
LCBpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICopOwojIDExOCAiL3Vzci9pbmNsdWRlL3N5cy93
YWl0LmgiIDMgNAp9CiMgMzIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29s
YXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKCgp0
eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHF1b3Q7CiAgICAgICAgaW50IHJlbTsKfSBkaXZf
dDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nIHF1b3Q7CiAgICAgICAgbG9uZyByZW07
Cn0gbGRpdl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nIGxvbmcgcXVvdDsKICAg
ICAgICBsb25nIGxvbmcgcmVtOwp9IGxsZGl2X3Q7CiMgMTQ4ICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4
dGVybiB1bnNpZ25lZCBjaGFyIF9fY3R5cGVbXTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mKGNvbnN0
IGNoYXIgKik7CmV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOwpleHRlcm4gbG9uZyBpbnQg
YXRvbChjb25zdCBjaGFyICopOwpleHRlcm4gZG91YmxlIHN0cnRvZChjb25zdCBjaGFyICosIGNo
YXIgKiopOwpleHRlcm4gbG9uZyBpbnQgc3RydG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50
KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoq
LCBpbnQpOwoKZXh0ZXJuIGludCByYW5kKHZvaWQpOwpleHRlcm4gdm9pZCBzcmFuZCh1bnNpZ25l
ZCBpbnQpOwoKCmV4dGVybiBpbnQgcmFuZF9yKHVuc2lnbmVkIGludCAqKTsKCgpleHRlcm4gdm9p
ZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICopOwpleHRl
cm4gdm9pZCAqbWFsbG9jKHNpemVfdCk7CmV4dGVybiB2b2lkICpyZWFsbG9jKHZvaWQgKiwgc2l6
ZV90KTsKCmV4dGVybiB2b2lkIGFib3J0KHZvaWQpOwpleHRlcm4gaW50IGF0ZXhpdCh2b2lkICgq
KSh2b2lkKSk7CmV4dGVybiB2b2lkIGV4aXQoaW50KTsKZXh0ZXJuIHZvaWQgX2V4aXRoYW5kbGUo
dm9pZCk7CmV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBzeXN0
ZW0oY29uc3QgY2hhciAqKTsKCmV4dGVybiB2b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29u
c3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwKICAgICAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwg
Y29uc3Qgdm9pZCAqKSk7CmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3Qs
CiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwoKZXh0ZXJuIGlu
dCBhYnMoaW50KTsKZXh0ZXJuIGRpdl90IGRpdihpbnQsIGludCk7CmV4dGVybiBsb25nIGludCBs
YWJzKGxvbmcpOwpleHRlcm4gbGRpdl90IGxkaXYobG9uZywgbG9uZyk7CgpleHRlcm4gaW50IG1i
dG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBtYmxlbihj
b25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgd2N0b21iKGNoYXIgKiwgd2NoYXJfdCk7
CgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp
OwpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3Qp
OwoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4KHZvaWQpOwpleHRlcm4gZG91YmxlIGVyYW5kNDgo
dW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiBsb25nIGpyYW5kNDgodW5zaWduZWQgc2hvcnQgKik7
CmV4dGVybiB2b2lkIGxjb25nNDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiBsb25nIGxyYW5k
NDgodm9pZCk7CmV4dGVybiBsb25nIG1yYW5kNDgodm9pZCk7CmV4dGVybiBsb25nIG5yYW5kNDgo
dW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2VlZDQ4KHVuc2lnbmVk
IHNob3J0ICopOwpleHRlcm4gdm9pZCBzcmFuZDQ4KGxvbmcpOwpleHRlcm4gaW50IHB1dGVudihj
aGFyICopOwpleHRlcm4gdm9pZCBzZXRrZXkoY29uc3QgY2hhciAqKTsKIyAyMTkgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGxp
Yi5oIiAzIDQKZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIgKik7CiMgMjI5ICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRsaWIuaCIg
MyA0CmV4dGVybiBsb25nIGE2NGwoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmVjdnQoZG91
YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpmY3Z0KGRvdWJsZSwgaW50LCBp
bnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZ2N2dChkb3VibGUsIGludCwgY2hhciAqKTsKZXh0
ZXJuIGludCBnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqY29uc3QgKiwgY2hhciAqKik7CmV4dGVy
biBpbnQgZ3JhbnRwdChpbnQpOwpleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVuc2lnbmVkLCBjaGFy
ICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpsNjRhKGxvbmcpOwpleHRlcm4gY2hhciAqbWt0ZW1w
KGNoYXIgKik7CmV4dGVybiBjaGFyICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2
b2lkKTsKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJu
IGNoYXIgKnNldHN0YXRlKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIHNyYW5kb20odW5zaWdu
ZWQpOwpleHRlcm4gaW50IHR0eXNsb3Qodm9pZCk7CmV4dGVybiBpbnQgdW5sb2NrcHQoaW50KTsK
ZXh0ZXJuIHZvaWQgKnZhbGxvYyhzaXplX3QpOwoKCgoKZXh0ZXJuIGludCBkdXAyKGludCwgaW50
KTsKZXh0ZXJuIGNoYXIgKnFlY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4
dGVybiBjaGFyICpxZmN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4g
Y2hhciAqcWdjdnQobG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdldGN3
ZChjaGFyICosIHNpemVfdCk7CmV4dGVybiBjb25zdCBjaGFyICpnZXRleGVjbmFtZSh2b2lkKTsK
ZXh0ZXJuIGNoYXIgKmdldGxvZ2luKHZvaWQpOwpleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIg
KmNvbnN0ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQg
b3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAq
KTsKZXh0ZXJuIGNoYXIgKmdldHBhc3NwaHJhc2UoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBn
ZXRwdyh1aWRfdCwgY2hhciAqKTsKZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKZXh0ZXJuIHZvaWQg
Km1lbWFsaWduKHNpemVfdCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50KTsKCgpl
eHRlcm4gbG9uZyBsb25nIGF0b2xsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcgbGxh
YnMobG9uZyBsb25nKTsKZXh0ZXJuIGxsZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcp
OwpleHRlcm4gY2hhciAqbGx0b3N0cihsb25nIGxvbmcsIGNoYXIgKik7CmV4dGVybiBsb25nIGxv
bmcgc3RydG9sbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBs
b25nIGxvbmcgc3RydG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gY2hh
ciAqdWxsdG9zdHIodW5zaWduZWQgbG9uZyBsb25nLCBjaGFyICopOwojIDQxMiAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3RkbGli
LmgiIDMgNAp9CiMgMTcwICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAyCgoKCgoKCgojIDEgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRl
L3N5cy90eXBlcy5oIiAxIDMgNAojIDE3OCAiLi4vLi4vLi4vbGliL2NjbHBvcnQuaCIgMgoKCgoK
IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMv
aW5jbHVkZS91bmlzdGQuaCIgMSAzIDQKIyAyNSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy
Y3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojcHJhZ21hIGlk
ZW50ICJAKCMpdW5pc3RkLmgJMS41NQk5OC8wNC8xNCBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9z
eXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDI4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw
YXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKCiMgMSAi
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMzAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2
OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3Rk
LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdW5pc3RkLmgJMS4zNgk5OC8wNy8xNiBTTUkiCgoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDI4ICIvdXNyL2lu
Y2x1ZGUvc3lzL3VuaXN0ZC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDI2NCAiL3Vzci9pbmNs
dWRlL3N5cy91bmlzdGQuaCIgMyA0Cn0KIyAzMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy
Y3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDIgMyA0CgoKZXh0ZXJu
ICJDIiB7CiMgMjA5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMy
LjcvMy4wLjMvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgYWNjZXNzKGNvbnN0IGNo
YXIgKiwgaW50KTsKCgpleHRlcm4gaW50IGFjY3QoY29uc3QgY2hhciAqKTsKCmV4dGVybiB1bnNp
Z25lZCBhbGFybSh1bnNpZ25lZCk7CgoKZXh0ZXJuIGludCBicmsodm9pZCAqKTsKCmV4dGVybiBp
bnQgY2hkaXIoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBjaG93bihjb25zdCBjaGFyICosIHVp
ZF90LCBnaWRfdCk7CgoKZXh0ZXJuIGludCBjaHJvb3QoY29uc3QgY2hhciAqKTsKCmV4dGVybiBp
bnQgY2xvc2UoaW50KTsKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIoaW50LCBjaGFyICosIHNpemVf
dCk7CmV4dGVybiBjaGFyICpjcnlwdChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKCmV4
dGVybiBjaGFyICpjdGVybWlkKGNoYXIgKik7CgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZChjaGFy
ICopOwpleHRlcm4gaW50IGR1cChpbnQpOwpleHRlcm4gaW50IGR1cDIoaW50LCBpbnQpOwoKCmV4
dGVybiB2b2lkIGVuY3J5cHQoY2hhciAqLCBpbnQpOwoKZXh0ZXJuIGludCBleGVjbChjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqY29u
c3QgKik7CmV4dGVybiBpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKiwgY2hh
ciAqY29uc3QgKik7CmV4dGVybiBpbnQgZXhlY3ZwKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3Qg
Kik7CmV4dGVybiB2b2lkIF9leGl0KGludCk7CgoKCgoKCgpleHRlcm4gaW50IGZhdHRhY2goaW50
LCBjb25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IGZjaGRpcihpbnQpOwpleHRlcm4gaW50IGZj
aG93bihpbnQsIHVpZF90LCBnaWRfdCk7CgoKCmV4dGVybiBpbnQgZmNocm9vdChpbnQpOwoKCgpl
eHRlcm4gaW50IGZkYXRhc3luYyhpbnQpOwojIDI4MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z
cGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4g
aW50IGZkZXRhY2goY29uc3QgY2hhciAqKTsKCmV4dGVybiBwaWRfdCBmb3JrKHZvaWQpOwoKCmV4
dGVybiBwaWRfdCBmb3JrMSh2b2lkKTsKCmV4dGVybiBsb25nIGZwYXRoY29uZihpbnQsIGludCk7
CgoKZXh0ZXJuIGludCBmc3luYyhpbnQpOwoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZShpbnQsIG9m
Zl90KTsKCmV4dGVybiBjaGFyICpnZXRjd2QoY2hhciAqLCBzaXplX3QpOwoKCmV4dGVybiBpbnQg
Z2V0ZHRhYmxlc2l6ZSh2b2lkKTsKCmV4dGVybiBnaWRfdCBnZXRlZ2lkKHZvaWQpOwpleHRlcm4g
dWlkX3QgZ2V0ZXVpZCh2b2lkKTsKZXh0ZXJuIGdpZF90IGdldGdpZCh2b2lkKTsKZXh0ZXJuIGlu
dCBnZXRncm91cHMoaW50LCBnaWRfdCAqKTsKCgpleHRlcm4gbG9uZyBnZXRob3N0aWQodm9pZCk7
CgoKZXh0ZXJuIGludCBnZXRob3N0bmFtZShjaGFyICosIHNpemVfdCk7CgoKCgpleHRlcm4gY2hh
ciAqZ2V0bG9naW4odm9pZCk7CgoKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAq
LCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4gaW50IG9wdGVyciwg
b3B0aW5kLCBvcHRvcHQ7CmV4dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKik7CgoKCmV4
dGVybiBpbnQgZ2V0cGFnZXNpemUodm9pZCk7CmV4dGVybiBwaWRfdCBnZXRwZ2lkKHBpZF90KTsK
CmV4dGVybiBwaWRfdCBnZXRwaWQodm9pZCk7CmV4dGVybiBwaWRfdCBnZXRwcGlkKHZvaWQpOwpl
eHRlcm4gcGlkX3QgZ2V0cGdycCh2b2lkKTsKCgpjaGFyICpnZXR0eHQoY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICopOwoKCgpleHRlcm4gcGlkX3QgZ2V0c2lkKHBpZF90KTsKCmV4dGVybiB1aWRf
dCBnZXR1aWQodm9pZCk7CgoKZXh0ZXJuIGNoYXIgKmdldHdkKGNoYXIgKik7CiMgMzUyICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS91
bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgaW9jdGwoaW50LCBpbnQsIC4uLik7CgoKCmV4dGVybiBp
bnQgaXNhZXhlYyhjb25zdCBjaGFyICosIGNoYXIgKmNvbnN0ICosIGNoYXIgKmNvbnN0ICopOwoK
ZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKZXh0ZXJuIGludCBsaW5rKGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqKTsKCgpleHRlcm4gaW50IGxjaG93bihjb25zdCBjaGFyICosIHVpZF90LCBnaWRf
dCk7CmV4dGVybiBpbnQgbG9ja2YoaW50LCBpbnQsIG9mZl90KTsKZXh0ZXJuIGludCByZWFkbGlu
ayhjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKCmV4dGVybiBvZmZfdCBsc2VlayhpbnQs
IG9mZl90LCBpbnQpOwoKCmV4dGVybiBpbnQgbmljZShpbnQpOwoKZXh0ZXJuIGxvbmcgcGF0aGNv
bmYoY29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gaW50IHBhdXNlKHZvaWQpOwpleHRlcm4gaW50
IHBpcGUoaW50ICopOwoKCmV4dGVybiBvZmZzZXRfdCBsbHNlZWsoaW50LCBvZmZzZXRfdCwgaW50
KTsKZXh0ZXJuIG9mZl90IHRlbGwoaW50KTsKZXh0ZXJuIGludCBtaW5jb3JlKGNhZGRyX3QsIHNp
emVfdCwgY2hhciAqKTsKCgoKZXh0ZXJuIHNzaXplX3QgcHJlYWQoaW50LCB2b2lkICosIHNpemVf
dCwgb2ZmX3QpOwoKCgpleHRlcm4gdm9pZCBwcm9maWwodW5zaWduZWQgc2hvcnQgKiwgc2l6ZV90
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXRm
b3JrKHZvaWQgKCopICh2b2lkKSwgdm9pZCAoKikgKHZvaWQpLCB2b2lkICgqKSAodm9pZCkpOwoK
CgpleHRlcm4gbG9uZyBwdHJhY2UoaW50LCBwaWRfdCwgbG9uZywgbG9uZyk7CgoKCmV4dGVybiBz
c2l6ZV90IHB3cml0ZShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBvZmZfdCk7CgpleHRlcm4g
c3NpemVfdCByZWFkKGludCwgdm9pZCAqLCBzaXplX3QpOwoKCmV4dGVybiBpbnQgcmVuYW1lKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGludCByZXNvbHZlcGF0aChjb25z
dCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKCmV4dGVybiBpbnQgcm1kaXIoY29uc3QgY2hhciAq
KTsKCgpleHRlcm4gdm9pZCAqc2JyayhpbnRwdHJfdCk7CgpleHRlcm4gaW50IHNldGdpZChnaWRf
dCk7CgoKZXh0ZXJuIGludCBzZXRlZ2lkKGdpZF90KTsKCgoKZXh0ZXJuIGludCBzZXRncm91cHMo
aW50LCBjb25zdCBnaWRfdCAqKTsKCmV4dGVybiBpbnQgc2V0cGdpZChwaWRfdCwgcGlkX3QpOwoK
CmV4dGVybiBwaWRfdCBzZXRwZ3JwKHZvaWQpOwpleHRlcm4gaW50IHNldHJlZ2lkKGdpZF90LCBn
aWRfdCk7CmV4dGVybiBpbnQgc2V0cmV1aWQodWlkX3QsIHVpZF90KTsKCmV4dGVybiBwaWRfdCBz
ZXRzaWQodm9pZCk7CmV4dGVybiBpbnQgc2V0dWlkKHVpZF90KTsKCgpleHRlcm4gaW50IHNldGV1
aWQodWlkX3QpOwoKZXh0ZXJuIHVuc2lnbmVkIHNsZWVwKHVuc2lnbmVkKTsKCgpleHRlcm4gaW50
IHN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKCgoKZXh0ZXJuIHZvaWQgc3dhYihjb25zdCB2b2lkICos
IHZvaWQgKiwgc3NpemVfdCk7CgoKCmV4dGVybiBpbnQgc3ltbGluayhjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIHN5bmModm9pZCk7CgpleHRlcm4gbG9uZyBzeXNjb25m
KGludCk7CgoKCgpleHRlcm4gbG9uZyBfX3N5c2NvbmZfeHBnNShpbnQpOwoKCgpleHRlcm4gcGlk
X3QgdGNnZXRwZ3JwKGludCk7CmV4dGVybiBpbnQgdGNzZXRwZ3JwKGludCwgcGlkX3QpOwoKCmV4
dGVybiBvZmZfdCB0ZWxsKGludCk7CgoKCmV4dGVybiBpbnQgdHJ1bmNhdGUoY29uc3QgY2hhciAq
LCBvZmZfdCk7CgpleHRlcm4gY2hhciAqdHR5bmFtZShpbnQpOwoKCmV4dGVybiB1c2Vjb25kc190
IHVhbGFybSh1c2Vjb25kc190LCB1c2Vjb25kc190KTsKCmV4dGVybiBpbnQgdW5saW5rKGNvbnN0
IGNoYXIgKik7CgoKZXh0ZXJuIGludCB1c2xlZXAodXNlY29uZHNfdCk7CgoKCmV4dGVybiBwaWRf
dCB2Zm9yayh2b2lkKTsKCgoKZXh0ZXJuIHZvaWQgdmhhbmd1cCh2b2lkKTsKCmV4dGVybiBzc2l6
ZV90IHdyaXRlKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwoKCmV4dGVybiB2b2lkIHlpZWxk
KHZvaWQpOwojIDgwOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlz
Mi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojcHJhZ21hIHVua25vd25fY29udHJvbF9m
bG93KHZmb3JrKQojIDg2MCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xh
cmlzMi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApzdGF0aWMgaW50CmdldGxvZ2luX3Io
Y2hhciAqX19uYW1lLCBpbnQgX19sZW4pCnsKICAgICAgICBleHRlcm4gaW50IF9fcG9zaXhfZ2V0
bG9naW5fcihjaGFyICosIGludCk7CiAgICAgICAgcmV0dXJuIChfX3Bvc2l4X2dldGxvZ2luX3Io
X19uYW1lLCBfX2xlbikpOwp9CnN0YXRpYyBpbnQKdHR5bmFtZV9yKGludCBfX2ZpbGRlcywgY2hh
ciAqX19idWYsIHNpemVfdCBfX3NpemUpCnsKICAgICAgICBleHRlcm4gaW50IF9fcG9zaXhfdHR5
bmFtZV9yKGludCwgY2hhciAqLCBzaXplX3QpOwogICAgICAgIHJldHVybiAoX19wb3NpeF90dHlu
YW1lX3IoX19maWxkZXMsIF9fYnVmLCBfX3NpemUpKTsKfQojIDkyMyAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDMg
NAp9CiMgMTgzICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAyCiMgMTk4ICIuLi8uLi8uLi9saWIv
Y2NscG9ydC5oIgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJp
czIuNy8zLjAuMy9pbmNsdWRlL3NldGptcC5oIiAxIDMgNAojIDI2ICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zZXRqbXAuaCIgMyA0
CiNwcmFnbWEgaWRlbnQgIkAoIylzZXRqbXAuaAkxLjMyCTk4LzAxLzMwIFNNSSIKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMjkgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3NldGptcC5oIiAy
IDMgNAoKCmV4dGVybiAiQyIgewojIDU2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjkt
c3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zZXRqbXAuaCIgMyA0CnR5cGVkZWYgbG9uZyBq
bXBfYnVmWzEyXTsKIyA2NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xh
cmlzMi43LzMuMC4zL2luY2x1ZGUvc2V0am1wLmgiIDMgNApleHRlcm4gaW50IHNldGptcChqbXBf
YnVmKTsKI3ByYWdtYSB1bmtub3duX2NvbnRyb2xfZmxvdyhzZXRqbXApCmV4dGVybiBpbnQgX3Nl
dGptcChqbXBfYnVmKTsKI3ByYWdtYSB1bmtub3duX2NvbnRyb2xfZmxvdyhfc2V0am1wKQpleHRl
cm4gdm9pZCBsb25nam1wKGptcF9idWYsIGludCk7CmV4dGVybiB2b2lkIF9sb25nam1wKGptcF9i
dWYsIGludCk7CgoKCgoKCnR5cGVkZWYgbG9uZyBzaWdqbXBfYnVmWzE5XTsKCgoKCmV4dGVybiBp
bnQgc2lnc2V0am1wKHNpZ2ptcF9idWYsIGludCk7CiNwcmFnbWEgdW5rbm93bl9jb250cm9sX2Zs
b3coc2lnc2V0am1wKQpleHRlcm4gdm9pZCBzaWdsb25nam1wKHNpZ2ptcF9idWYsIGludCk7CiMg
MTE0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMv
aW5jbHVkZS9zZXRqbXAuaCIgMyA0Cn0KIyAxOTkgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIK
IyAyNTEgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAojcHJhZ21hIGlkZW50ICJA
KCMpc3RyaW5nLmgJMS4yMgk5Ny8xMi8yMiBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh
dHVyZV90ZXN0cy5oIiAxIDMgNAojIDE5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMyA0CgoK
ZXh0ZXJuICJDIiB7CiMgNDMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CmV4dGVybiB2b2lk
ICptZW1jcHkodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lkICptZW1t
b3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gY2hhciAqc3RyY3B5KGNo
YXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cm5jcHkoY2hhciAqLCBjb25zdCBj
aGFyICosIHNpemVfdCk7CgpleHRlcm4gY2hhciAqc3RyY2F0KGNoYXIgKiwgY29uc3QgY2hhciAq
KTsKZXh0ZXJuIGNoYXIgKnN0cm5jYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Cgpl
eHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0
ZXJuIGludCBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0
cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cm5jbXAoY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3RyeGZybShj
aGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qg
dm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqLCBp
bnQpOwpleHRlcm4gc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpl
eHRlcm4gY2hhciAqc3RycGJyayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBj
aGFyICpzdHJyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIHNpemVfdCBzdHJzcG4oY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cnRvayhjaGFyICosIGNvbnN0IGNoYXIg
Kik7CgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yKGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICoq
KTsKCmV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBjaGFy
ICpzdHJlcnJvcihpbnQpOwpleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOwoKCgpl
eHRlcm4gdm9pZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwoK
CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbChpbnQpOwpleHRlcm4gaW50IGZmcyhpbnQpOwpleHRl
cm4gaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50
IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoKCgoKCmV4
dGVybiBjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqKTsKIyAxNDYgIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMyA0Cn0KIyAyNTIgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIKIyAzMzUgIi4uLy4u
Ly4uL2xpYi9jY2xwb3J0LmgiCiAgdHlwZWRlZiBjaGFyIEZTdHJpbmc7CiMgMzQ1ICIuLi8uLi8u
Li9saWIvY2NscG9ydC5oIgpjaGFyICogR2V0Rk9SVFJBTlN0cmluZyggRlN0cmluZyAqLCBpbnQs
IGNvbnN0IGNoYXIgKiApOwpjaGFyICogR2V0Rk9SVFJBTlN0cmluZ0V4KCBGU3RyaW5nICosIGlu
dCwgY29uc3QgY2hhciAqLCBpbnQgKTsKY2hhciAqIEdldEZPUlRSQU5QYXRoU3RyaW5nKCBGU3Ry
aW5nICosIGludCwgY29uc3QgY2hhciAqICk7CiMgMzk1ICIuLi8uLi8uLi9saWIvY2NscG9ydC5o
IgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAu
My9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAojIDkwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw
YXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYg
X19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAzOTYgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIK
IyA0MzkgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCmludCBQQ0lHZXRPU1ZlcnNpb24oY2hhciAq
KiBwcHN6T1NOYW1lLGNoYXIgKiogcHBzek9TVmVyc2lvbik7CnZvaWQgUENJX3Fzb3J0KHZvaWQg
KmJhc2UsIHNpemVfdCBuLCBzaXplX3Qgc2l6ZSwKICAgICAgICAgICBpbnQgKCpjb21wYXIpKGNv
bnN0IHZvaWQqLGNvbnN0IHZvaWQqKSk7Cgpkb3VibGUgUENJX21vZGYoZG91YmxlIHZhbHVlLCBk
b3VibGUgKiBpcHRyKTsKIyA0NzQgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCiAgICAgIHR5cGVk
ZWYgaW50ICgqUVNDTVApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKIyA0NCAiLi4vLi4v
Li4vbGliL2NjbGJhc2UuaCIgMgojIDEgIi4uLy4uLy4uL2xpYi9jY2x0eXBlcy5oIiAxCiMgNDMg
Ii4uLy4uLy4uL2xpYi9jY2x0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVEJ5dGU7CnR5
cGVkZWYgaW50IFRCb29sOwojIDEwOSAiLi4vLi4vLi4vbGliL2NjbHR5cGVzLmgiCnR5cGVkZWYg
bG9uZyBsb25nIGludDY0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjQ7CgoKdHlw
ZWRlZiBpbnQgaW50MzI7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMjsKCgp0eXBlZGVmIHNo
b3J0IGludDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNjsKCgoKCgoKdHlwZWRlZiB2
b2lkICgqUENJQ291bnRlcikoZG91YmxlKTsKCnR5cGVkZWYgc3RydWN0IHsKICBkb3VibGUgeDsK
ICBkb3VibGUgeTsKfSBWZWN0b3JfdDsKIyAyMTkgIi4uLy4uLy4uL2xpYi9jY2x0eXBlcy5oIgp0
eXBlZGVmIHZvaWQgKCpUcmFuc2Zvcm1GdW5jKSh2b2lkICosIGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUgKiwgZG91YmxlICopOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgZG91YmxlIHg7CiAgICBkb3Vi
bGUgeTsKICAgIGRvdWJsZSB6Owp9IEdEQlZlcnRleDsKIyA0NSAiLi4vLi4vLi4vbGliL2NjbGJh
c2UuaCIgMgojIDEgIi4uLy4uLy4uL2xpYi9jY2x0YXNrLmgiIDEKIyAyMTIgIi4uLy4uLy4uL2xp
Yi9jY2x0YXNrLmgiCnR5cGVkZWYgdm9pZCAoKklNUEV4aXRQcm9jKSh2b2lkKTsKCnR5cGVkZWYg
c3RydWN0IHsKICBjaGFyIHByb2dyYW1fbmFtZVsxNl07CiAgY2hhciBUYXNrRGVzY1s0OF07CiAg
aW50IE1vbml0b3I7CiAgaW50IHR0eXR5cGU7CiAgY2hhciBTeXNMYWJlbFsxOV07CiAgY2hhciBN
aXNzaW5nWzQ1XTsKICBpbnQgZmF0YWxfZXJyb3I7CiAgaW50IHBybV9yZXF1aXJlZDsKICBpbnQg
cHJtX3ByZXNlbnQ7CgoKICBsb25nIEpCbERpcjsKICBsb25nIEpCbERhdDsKICBsb25nIFBybU9w
bjsKICBGSUxFICpQcm1GUDsKICB1aW50MzIgKkpEYXQ7CiAgdW5zaWduZWQgY2hhciBDRGF0WzE1
MzZdOwoKICBjaGFyIFBDSUhvbWVbNjRdOwogIGludCBpbXBfZmxhZ3M7CgogIGludCBtYWluX2Fy
Z2M7CiAgY2hhciAqKm1haW5fYXJndjsKCiAgaW50IG5FeGl0UHJvYzsKICBJTVBFeGl0UHJvYyAq
cGFwZm5FeGl0UHJvYzsKfSBJTVBJbmZvX3Q7CgoKZXh0ZXJuIElNUEluZm9fdCBJTVBJbmZvOwpl
eHRlcm4gaW50IElNUEluaXRpYWxpemVkOwoKCgoKCgpleHRlcm4gaW50IGltcF9lcnJubzsKZXh0
ZXJuIGludCBpbXBfZXJydHlwZTsKZXh0ZXJuIGludCBpbXBfc3lzX2Vycm5vOwpleHRlcm4gY2hh
ciAqaW1wX2VycnN0cmluZzsKIyAyNjkgIi4uLy4uLy4uL2xpYi9jY2x0YXNrLmgiCmV4dGVybiBG
SUxFICpSZXBvcnQ7CmV4dGVybiBpbnQgRGVidWdNb2RlOwoKCgoKCnZvaWQgRGVidWcoY29uc3Qg
Y2hhciAqLCAuLi4gKTsKdm9pZCBEZWJ1Z092ZXIoaW50LCBjb25zdCBjaGFyICosIC4uLiApOwoK
dm9pZCBEZWJ1Z09OKCB2b2lkICk7CnZvaWQgRGVidWdPRkYoIHZvaWQgKTsKdm9pZCBEZWJ1Z1JF
U1RPUkUoIHZvaWQgKTsKdm9pZCBJbnN0YWxsRGVidWdIYW5kbGVyKCB2b2lkICgqKShjb25zdCBj
aGFyICopICk7CmludCBHZXREZWJ1Z01vZGUoIHZvaWQgKTsKCgoKCgp2b2lkIElNUFN0YXR1cygg
Y2hhciAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKiwgaW50ICosIHZvaWQgKiosIGludCwgY2hhciAqKiApOwp2b2lkIElN
UEluaXQoIGNoYXIgKiwgaW50LCBpbnQsIGNoYXIgKiogKTsKCgoKCmludCBJTVBTZWVQYXJtKCBj
aGFyICosIGludCwgaW50LCBpbnQgKTsKdm9pZCBJTVBSZWFsRW5jb2RlKCBkb3VibGUsIGludCwg
Y2hhciAqICk7CmNoYXIgKiBJTVBUaW1lKCBjaGFyICosIGludCApOwppbnQgSU1QVGVybWluYWwo
IGNoYXIgKiApOwppbnQgSU1QQXV0b21hdGljVGVybSggdm9pZCApOwp2b2lkIElNUEF0RXhpdCgg
SU1QRXhpdFByb2MgKTsKVEJvb2wgSU1QUmVnaXN0ZXJlZEZvckV4aXQoSU1QRXhpdFByb2MpOwp2
b2lkIElNUEluc3RhbGxFeGl0RnVuYyggdm9pZCAoKikoaW50KSApOwppbnQgSU1QRmF0YWwoIGlu
dCApOwppbnQgSU1QUnVuVGFzayggY2hhciAqLCBjaGFyICosIGludCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKCopKCBpbnQsIGludCApLCBpbnQgKiApOwppbnQgSU1QS2lsbFRh
c2soIGludCApOwppbnQgSU1QS2lsbFRhc2tCeU5hbWUoIGNvbnN0IGNoYXIgKiApOwppbnQgSU1Q
R2V0UElEKCB2b2lkICk7ClRCb29sIElNUEdldFBJREJ5TmFtZSggY29uc3QgY2hhciAqLCBpbnQg
KiApOwoKVEJvb2wgSU1QU2V0Q1dEKCBjb25zdCBjaGFyICogKTsKVEJvb2wgSU1QU2V0Q1dERnJv
bUZpbGUoIGNvbnN0IGNoYXIqIHBzekZpbGUgKTsKCmNvbnN0IGNoYXIgKklNUEdldENXRCggdm9p
ZCApOwpjb25zdCBjaGFyICpJTVBHZXRVc2VySG9tZSggdm9pZCApOwppbnQgSU1QTWtEaXJlY3Rv
cnkoIGNvbnN0IGNoYXIgKiApOwoKVEJvb2wgSU1QSW52b2tlRnVuY3Rpb24oIHZvaWQgKiwgY29u
c3QgY2hhciAqLCB2b2lkICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50LCB2b2lkICogKTsKdm9pZCAqSU1QR2V0U3ltYm9sKCBjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CgpjaGFyICoqIElNUEdldEFyZ3MoIGludCAqICk7
CklNUEluZm9fdCAqIElNUEdldEluZm8oIHZvaWQgKTsKaW50IElNUFNjclBhZ2UoIEZJTEUgKiwg
aW50ICk7CgppbnQgSU1QSGxwU2VhcmNoKCBjaGFyICosIGNoYXIgKiApOwppbnQgSU1QRXhlU2Vh
cmNoKCBjaGFyICosIGNoYXIgKiApOwppbnQgSU1QRWFzU2VhcmNoKCBjaGFyICosIGNoYXIgKiAp
Owp2b2lkIElNUEdldFN5c05hbWUoIGNoYXIgKiosIGNoYXIgKiogKTsKY2hhciAqIElNUEdldE15
RXhlUGF0aCggdm9pZCApOwppbnQgSU1QR2V0TWVtb3J5KCBUQm9vbCAqICk7CmNoYXIgKiBJTVBG
aW5kRmlsZSggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKdm9pZCBJTVBPdmVycmlkZUZp
bmRGaWxlRnVuYyhjaGFyICooKikoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSk7CmNoYXIgKiBJ
TVBGaW5kQ29uZmlnKCBjb25zdCBjaGFyICpwc3pGaWxlbmFtZSwgVEJvb2wgYlJlYWRNb2RlICk7
Cgp2b2lkIEluc3RhbGxVU2xlZXBIb29rKCB2b2lkICgqKShpbnQpICk7CnZvaWQgVVNsZWVwKCBp
bnQgKTsKZG91YmxlIEdldE1pY3JvU2Vjb25kcygpOwpzaG9ydCBBUGFyc2UoY2hhciAqKTsKCnZv
aWQgSU1QQ291bnRlciggZG91YmxlICk7CnZvaWQgSU1QU2V0Q3VtdWxhdGl2ZVBhcm1zKCBkb3Vi
bGUsIGRvdWJsZSwgdm9pZCAoKikoIGRvdWJsZSApICk7CnZvaWQgSU1QQ3VtdWxhdGl2ZUNvdW50
ZXIoIGRvdWJsZSApOwoKdHlwZWRlZiBUQm9vbCAoKklNUFByb2dyZXNzRnVuYykoIGRvdWJsZSwg
Y29uc3QgY2hhciAqLCB2b2lkICogKTsKClRCb29sIElNUFRlcm1Qcm9ncmVzc0NvdW50ZXIoIGRv
dWJsZSwgY29uc3QgY2hhciAqLCB2b2lkICopOwpUQm9vbCBJTVBEdW1teVByb2dyZXNzKCBkb3Vi
bGUsIGNvbnN0IGNoYXIgKiwgdm9pZCAqICk7ClBDSUNvdW50ZXIgSU1QUHJvZ3Jlc3NDb3VudGVy
R2F0ZSggSU1QUHJvZ3Jlc3NGdW5jLCBjb25zdCBjaGFyICosdm9pZCAqICk7Cgp2b2lkICpJTVBD
cmVhdGVDdW11bGF0aXZlUHJvZ3Jlc3MoIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QUHJvZ3Jlc3NGdW5jLCB2b2lkICogKTsK
VEJvb2wgSU1QQ3VtdWxhdGl2ZVByb2dyZXNzKCBkb3VibGUsIGNvbnN0IGNoYXIgKiwgdm9pZCAq
ICk7CgoKVEJvb2wgTkNDRXN0YWJsaXNoTGlua1BSTSggdm9pZCApOwp2b2lkIE5DQ0VzdGFibGlz
aExpbmsoIEZJTEUgKiApOwpUQm9vbCBOQ0NQcm9ncmVzcyggZG91YmxlLCBjb25zdCBjaGFyICos
IHZvaWQgKiApOwoKdm9pZCBOQ1NTZXR1cE1vbml0b3IoIHZvaWQgKTsKVEJvb2wgTkNTUG9sbCgg
ZG91YmxlICosIGNoYXIgKiogKTsKdm9pZCBOQ1NJbnN0YWxsUG9sbGVyKCBJTVBQcm9ncmVzc0Z1
bmMsIHZvaWQgKiApOwpUQm9vbCBOQ1NHZXRUYXNrSW5mbyggaW50ICosIGNoYXIgKiApOwoKVEJv
b2wgSXNXaW4zMnMoIHZvaWQgKTsKCmludCBEZXN0cm95Q29uc29sZSggdm9pZCApOwp2b2lkIFNo
b3dDb25zb2xlKCBUQm9vbCApOwppbnQgQ3JlYXRlQ29uc29sZSggdm9pZCApOwojIDM4MSAiLi4v
Li4vLi4vbGliL2NjbHRhc2suaCIKdm9pZCBJTVBSZXR1cm4odm9pZCk7CnZvaWQgSU1QRXhpdCgg
aW50ICk7CgoKCgoKaW50IEROUENoZWNrKGNvbnN0IGNoYXIqKTsKaW50IEROUFBlZWsoY29uc3Qg
Y2hhciopOwpjaGFyICpETlBFcnJvck1zZyh2b2lkKTsKIyA0NTYgIi4uLy4uLy4uL2xpYi9jY2x0
YXNrLmgiCmludCBJTVBfUHJvdGVjdCggdm9pZCApOwp2b2lkICogSU1QUHJvdGVjdEJ1ZmZlcigg
dm9pZCApOwp2b2lkIElNUFVucHJvdGVjdCggdm9pZCApOwp2b2lkIElNUFZpb2xhdGlvbiggaW50
LCBpbnQsIGNvbnN0IGNoYXIgKiApOwppbnQgSU1QR2V0UHJvdGVjdFJpbmdDb3VudCggdm9pZCAp
OwoKCgoKCmludCBfSU1QQXNzZXJ0KCBjaGFyICosIGNoYXIgKiwgaW50ICk7CnZvaWQgSU1QQ2hl
Y2tFeHByKGNoYXIgKiwgY2hhciAqLCBpbnQpOwojIDQ3NiAiLi4vLi4vLi4vbGliL2NjbHRhc2su
aCIKdm9pZCBJTVBFcnJDaGFyKCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICog
KTsKdm9pZCBJTVBFcnJSZWFsKCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBkb3VibGUsIGludCAp
Owp2b2lkIElNUEVyckludCggaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQgKTsKdm9p
ZCBJTVBFcnJMb25nKCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBsb25nLCBpbnQgKTsKdm9pZCBJ
TVBFcnJNc2coIGludCwgaW50ICk7CnZvaWQgSU1QUmVwb3J0RXJyb3IoIGludCwgaW50LCBjb25z
dCBjaGFyICosIFRCb29sICk7CmludCBJTVBFcnJubyggdm9pZCApOwp2b2lkIElNUFNldEVycm5v
KCBpbnQgKTsKY29uc3QgY2hhciAqIElNUEVyclN0cmluZyggdm9pZCApOwp2b2lkIEluc3RhbGxJ
TVBXYXJuaW5nSGFuZGxlciggdm9pZCAoKikoY29uc3QgY2hhciAqKSApOwp2b2lkIFBvcElNUFdh
cm5pbmdIYW5kbGVyKHZvaWQpOwoKdm9pZCBJTVBFcnJvciggaW50LCBpbnQsIGNvbnN0IGNoYXIg
KiwgLi4uICk7Cgp2b2lkIElNUFB1dENoYXIoIGNoYXIgKiwgY2hhciAqICk7CnZvaWQgSU1QUHV0
UmVhbCggY2hhciAqLCBmbG9hdCAqLCBpbnQgKTsKaW50IElNUEdldERlZmF1bHQoIGNoYXIgKiwg
Y2hhciAqLCBjaGFyICosZmxvYXQgKiwgZmxvYXQgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgKiApOwppbnQgSU1QT3BlbiggaW50ICk7CmNvbnN0IGNoYXIgKklNUEdldFBS
TUZpbGVuYW1lKCB2b2lkICk7ClRCb29sIElNUEFjcXVpcmVQUk1GaWxlKGNvbnN0IGNoYXIqIFBS
TUZpbGVuYW1lLCBUQm9vbCBiT3ZlcndyaXRlKTsKaW50IElNUENyZWF0ZSggdm9pZCApOwppbnQg
SU1QR2V0TnVtZXJpYyggY2hhciAqLCBjaGFyICosIHZvaWQgKiwgaW50ICk7CmludCBJTVBHZXRD
aGFyKCBjaGFyICosIGNoYXIgKiwgaW50ICk7CmludCBJTVBEZWZQYXJtKCBjaGFyICosIGNoYXIg
KiwgaW50LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICogKTsKVEJvb2wgSU1QVW5kZWZpbmVQYXJtKCBjb25zdCBjaGFyICogKTsKCmNvbnN0
IGNoYXIgKklNUEdldE1ham9yUmV2KCB2b2lkICk7CnZvaWQgSU1QUGF0aEV4cGFuZCggY2hhciAq
ICk7CnZvaWQgSU1QU2V0UENJSG9tZSggY29uc3QgY2hhciAqICk7CmNvbnN0IGNoYXIgKiBJTVBN
dW5nZSggY29uc3QgY2hhciAqLCAuLi4gKTsKaW50IENEUGF0aEV4cGFuZCggY2hhciAqLCBpbnQg
KTsKVEJvb2wgSW5pdENEUGF0aEV4cGFuZChjb25zdCBjaGFyICopOwp2b2lkIGltcG1zZ2MoIGlu
dCwgY2hhciAqLCBjaGFyICogKTsKaW50IGltcGtleWMoIGNoYXIgKiwgY2hhciAqICk7CnZvaWQg
aW1wZXhyYyggaW50LCBpbnQsIGludCApOwppbnQgaW1wc3JoYyggY2hhciAqLCBsb25nICosIGxv
bmcgKiApOwoKCnZvaWQgSU1QUGFnZVRpdGxlKCBGSUxFICosIGNoYXIgKiwgY2hhciAqICk7CnZv
aWQgSU1QUGFnZSggRklMRSAqLCBpbnQgKTsKCnZvaWQgSU1QQXN5bmNEaXNhYmxlKCB2b2lkICk7
CmludCBJTVBBc3luY0dldENoYXIoIGludCApOwppbnQ2NCBJTVBHZXRGcmVlU3BhY2UoIGNvbnN0
IGNoYXIgKiApOwoKVEJvb2wgSU1QTG9ja0ZpbGUoIEZJTEUgKiwgVEJvb2wgKTsKVEJvb2wgSU1Q
VW5sb2NrRmlsZSggRklMRSAqICk7CmNvbnN0IGNoYXIgKiBJTVBHZXRFbnYoIGNvbnN0IGNoYXIg
KiApOwp2b2lkIElNUFNldEVudiggY29uc3QgY2hhciAqcHN6TmFtZSwgY29uc3QgY2hhciAqcHN6
VmFsdWUgKTsKVEJvb2wgSU1QUmVhZEVudkZpbGUoY29uc3QgY2hhciAqcHN6RmlsZSk7CmNvbnN0
IGNoYXIgKiBJTVBHZXRQQ0lIb21lRGlyKGNvbnN0IGNoYXIqIHBzelZhcmlhYmxlKTsKCmNoYXIg
KklNUFJlZGlyZWN0U3Rkb3V0KCB2b2lkICk7CnZvaWQgSU1QUmVzdG9yZVN0ZG91dCggdm9pZCAp
OwpjaGFyICpJTVBSZWRpcmVjdFN0ZG91dE9ubHkoIHZvaWQgKTsKdm9pZCBJTVBSZXN0b3JlU3Rk
b3V0T25seSggdm9pZCApOwpjaGFyICpJTVBSZWRpcmVjdFN0ZGVyciggdm9pZCApOwp2b2lkIElN
UFJlc3RvcmVTdGRlcnIoIHZvaWQgKTsKClRCb29sIElNUEFkZEdyb3VwSWNvbihjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKVEJvb2wgSU1QQ3JlYXRlR3JvdXAgKGNvbnN0IGNoYXIg
Kik7ClRCb29sIElNUFNldFJlZ2lzdHJ5UENJKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
VEJvb2wgSU1QU2V0UmVnaXN0cnkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjb25zdCBj
aGFyICogSU1QR2V0UmVnaXN0cnlQQ0koY29uc3QgY2hhciAqKTsKY29uc3QgY2hhciAqIElNUEdl
dFJlZ2lzdHJ5UENJVmVyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY29uc3QgY2hhciAq
IElNUEdldFJlZ2lzdHJ5KGNvbnN0IGNoYXIgKik7CmNoYXIgKipJTVBHZXRSZWdpc3RyeUNoaWxk
cmVuKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwp2b2lkIElNUFNldFJlZ2lzdHJ5UENJ
SGFuZGxlcnMoY29uc3QgY2hhciAqKCpwZm5HZXRSZWcpKGNvbnN0IGNoYXIgKiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wgKCpwZm5TZXRSZWdpc3RyeSko
Y29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKikpOwpUQm9vbCBJTVBHZXREYXRhYmFz
ZVBhcm1zKGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqLCBjaGFyICoqLCBjaGFyKiosIGNoYXIgKiosIGNoYXIgKiosIGNoYXIgKiopOwojIDczMCAi
Li4vLi4vLi4vbGliL2NjbHRhc2suaCIKaW50IGZwVmFsaWRhdGUoIEZJTEUgKiApOwppbnQgZnAy
dHlwZSggRklMRSAqICk7CmludCBmcDJpbmRleCggRklMRSAqICk7CnZvaWQgZnBTRVRpbmRleCgg
RklMRSAqLCBpbnQgKTsKaW50IGZwMmZkKCBGSUxFICogKTsKdm9pZCBmcFNFVGZkKCBGSUxFICos
IGludCApOwpGSUxFICogZnBBbGxvYyggY29uc3QgY2hhciAqLCBpbnQsIEZJTEUgKiApOwp2b2lk
IGZwUmVhbGxvYyhGSUxFICpmcCwgY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnQgZGt0eXBlKTsK
dm9pZCBmcERlYWxsb2MoIEZJTEUgKiApOwpjaGFyICogZnAyZmlsZW5hbWUoIEZJTEUgKiApOwp2
b2lkIGZwU0VUZmxhZyggRklMRSAqLCBpbnQgKTsKdm9pZCBmcENMRUFSZmxhZyggRklMRSAqLCBp
bnQgKTsKaW50IGZwVGVzdEZsYWcoIEZJTEUgKiwgaW50ICk7CmludCBmcFJlZmVyZW5jZSggRklM
RSAqICk7CmludCBmcERlcmVmZXJlbmNlKCBGSUxFICogKTsKaW50IGZwR2V0UmVmQ291bnQoIEZJ
TEUgKiApOwppbnQgZnBEdW1wRmlsZXMoIHZvaWQgKTsKRklMRSAqKiBmcEZpbGVMaXN0KCB2b2lk
ICk7ClRCb29sIERLRmlsZXNMb3coIHZvaWQgKTsKCmludCBQcm9tb3RlKCBGSUxFICosIHZvaWQg
KiApOwoKCgoKaW50IERLQ2hlY2soIGNvbnN0IGNoYXIgKiApOwp2b2lkIERLR2V0KCBGSUxFICos
IGxvbmcsIGxvbmcsIHZvaWQgKiApOwp2b2lkIERLUHV0KCBGSUxFICosIGxvbmcsIGxvbmcsIHZv
aWQgKiApOwpGSUxFICogREtPcGVuKCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqICk7
CnZvaWQgREtDbG9zZSggRklMRSAqICk7CmNoYXIgKiBES05hbWUoIEZJTEUgKiApOwp2b2lkIERL
RXJyb3IoIEZJTEUgKiApOwppbnQgREtSZWFkKCBGSUxFICosIHZvaWQgKiwgaW50NjQsIGxvbmcg
KTsKY2hhciAqIERLUmVhZExpbmUoIEZJTEUgKiApOwppbnQgREtXcml0ZSggRklMRSAqLCB2b2lk
ICosIGludDY0LCBsb25nICk7CnVuc2lnbmVkIGNoYXIgKiBES01NYXBJbmZvKCBGSUxFICosIGlu
dCAqICk7CmludCBES0FsbG9jKCBGSUxFICogKTsKbG9uZyBES1NpemUoIGNvbnN0IGNoYXIgKiAp
Owp2b2lkIERLU3luYyggRklMRSAqICk7CnZvaWQgREtEZWxldGUoIGNvbnN0IGNoYXIgKiApOwp2
b2lkIERLUmVuYW1lKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwp2b2lkIERLVHJ1bmNh
dGUoIGNvbnN0IGNoYXIgKiwgaW50ICk7CgppbnQgREtGUmVhZCggdm9pZCAqLCBsb25nLCBsb25n
LCBGSUxFICogKTsKaW50IERLRldyaXRlKCB2b2lkICosIGxvbmcsIGxvbmcsIEZJTEUgKiApOwpp
bnQgREtGU2VlayggRklMRSAqLCBpbnQ2NCwgaW50ICk7CmludCBES0ZTZWVrNjQoIEZJTEUgKiwg
aW50NjQsIGludCApOwppbnQ2NCBES0ZUZWxsKCBGSUxFICogKTsKCgoKCmludCBES1ByaW50Zigg
Y29uc3QgY2hhciAqLCAuLi4gKTsKaW50IERLRlByaW50ZiggRklMRSAqLCBjb25zdCBjaGFyICos
IC4uLiApOwp2b2lkIEluc3RhbGxQcmludGZIYW5kbGVyKCB2b2lkICgqSGFuZGxlckZ1bmN0aW9u
KShjb25zdCBjaGFyICopKTsKCgoKCmludCBES0NvcHkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICopOwppbnQgREtDaG1vZChjb25zdCBjaGFyICosIGludCk7CiMgODA2ICIuLi8uLi8uLi9saWIv
Y2NsdGFzay5oIgpGSUxFICpGSGFuZGxlMmZwKCBpbnQgKTsKaW50IGZwMkZIYW5kbGUoIEZJTEUg
KiApOwppbnQgQXNzaWduRkhhbmRsZUZvcmZwKCBGSUxFICosIGludCApOwp2b2lkIFJlbW92ZUZI
YW5kbGUoIGludCApOwojIDg2NiAiLi4vLi4vLi4vbGliL2NjbHRhc2suaCIKdm9pZCBTZXRITWFs
bG9jRGVidWcoaW50IG5MZXZlbCk7CnZvaWQgKiBfSE1hbGxvYyhzaXplX3QgblNpemUsIGNoYXIg
KnBzekZpbGUsIGludCBuTGluZSk7CnZvaWQgKiBfSENhbGxvYyhzaXplX3QgbkVsZW0sIHNpemVf
dCBuU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6RmlsZSwgaW50IG5M
aW5lKTsKY2hhciAqIF9IU3RyaW5nKGNvbnN0IGNoYXIgKnBzelN0cmluZywgY2hhciAqcHN6Rmls
ZSwgaW50IG5MaW5lKTsKdm9pZCBfSEZyZWUoIHZvaWQgKnBCbG9jaywgY2hhciAqcHN6RmlsZSwg
aW50IG5MaW5lKTsKdm9pZCAqIF9IUmVhbGxvYyh2b2lkICpwQmxvY2ssIHNpemVfdCBuU2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekZpbGUsIGludCBuTGluZSk7CnZv
aWQgX0hNZW1vcnlUZXN0KGNoYXIgKnBzekZpbGUsIGludCBuTGluZSk7CnZvaWQgX0hSZXBvcnQo
Y2hhciAqcHN6RmlsZSwgaW50IG5MaW5lKTsKaW50IEhNSGFuZGxlcihpbnQpOwp2b2lkIEhNRGVi
dWdMZXZlbChpbnQgbkxldmVsKTsKdm9pZCBfSE1hcmsoY2hhciAqcHN6RmlsZSwgaW50IG5MaW5l
KTsKaW50IF9IQ2hlY2tNYXJrKGNoYXIgKnBzekZpbGUsIGludCBuTGluZSk7ClRCb29sIF9IVGVz
dEJsb2NrKHZvaWQgKnBCbG9jaywgY2hhciAqcHN6RmlsZSwgaW50IG5MaW5lKTsKY2hhciAqIEhT
UHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKdm9pZCBfSFJlcG9ydEJ5RmlsZXMoY2hh
ciAqcHN6RmlsZSwgaW50IG5MaW5lKTsKdm9pZCBIUHJpbnRCbG9jayh2b2lkICpwQmxvY2spOwp2
b2lkIF9ITWVtSW5mbyh2b2lkICosIGNoYXIgKiwgaW50KTsKY2hhciAqIEhTdHJpbmdFeHBhbmQo
Y29uc3QgY2hhciAqcHN6SW5wdXQpOwpUQm9vbCBDQ0xIU3RyaW5nRXhwYW5kVGVzdCggdm9pZCAp
OwojIDkzNCAiLi4vLi4vLi4vbGliL2NjbHRhc2suaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N0
YXQuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNAojcHJhZ21hIGlk
ZW50ICJAKCMpc3RhdC5oCTEuNDUJOTgvMDMvMjQgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAxOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIg
MyA0CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMu
MC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjAgIi91c3IvaW5jbHVkZS9zeXMvc3Rh
dC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDQwICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIg
MyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMSAzIDQKIyA0MSAiL3Vzci9p
bmNsdWRlL3N5cy9zdGF0LmgiIDIgMyA0CiMgMjAzICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIg
MyA0CnN0cnVjdCBzdGF0IHsKICAgICAgICBkZXZfdCBzdF9kZXY7CiAgICAgICAgaW5vX3Qgc3Rf
aW5vOwogICAgICAgIG1vZGVfdCBzdF9tb2RlOwogICAgICAgIG5saW5rX3Qgc3Rfbmxpbms7CiAg
ICAgICAgdWlkX3Qgc3RfdWlkOwogICAgICAgIGdpZF90IHN0X2dpZDsKICAgICAgICBkZXZfdCBz
dF9yZGV2OwogICAgICAgIG9mZl90IHN0X3NpemU7CgoKICAgICAgICB0aW1lc3RydWNfdCBzdF9h
dGltOwogICAgICAgIHRpbWVzdHJ1Y190IHN0X210aW07CiAgICAgICAgdGltZXN0cnVjX3Qgc3Rf
Y3RpbTsKCgoKCgogICAgICAgIGJsa3NpemVfdCBzdF9ibGtzaXplOwogICAgICAgIGJsa2NudF90
IHN0X2Jsb2NrczsKICAgICAgICBjaGFyIHN0X2ZzdHlwZVsxNl07Cn07CiMgNDQzICIvdXNyL2lu
Y2x1ZGUvc3lzL3N0YXQuaCIgMyA0CmV4dGVybiBpbnQgZnN0YXQoaW50LCBzdHJ1Y3Qgc3RhdCAq
KTsKZXh0ZXJuIGludCBzdGF0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CgoKCmV4dGVy
biBpbnQgbHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKZXh0ZXJuIGludCBta25v
ZChjb25zdCBjaGFyICosIG1vZGVfdCwgZGV2X3QpOwoKCgoKCmV4dGVybiBpbnQgZmNobW9kKGlu
dCwgbW9kZV90KTsKCgpleHRlcm4gaW50IGNobW9kKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0
ZXJuIGludCBta2Rpcihjb25zdCBjaGFyICosIG1vZGVfdCk7CmV4dGVybiBpbnQgbWtmaWZvKGNv
bnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0ZXJuIG1vZGVfdCB1bWFzayhtb2RlX3QpOwojIDUwMiAi
L3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNAp9CiMgOTM1ICIuLi8uLi8uLi9saWIvY2NsdGFz
ay5oIiAyCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgc3RhdCBES1N0YXRfdDsKIyA5NjUgIi4uLy4uLy4u
L2xpYi9jY2x0YXNrLmgiCmludCBES1N0YXQoIGNvbnN0IGNoYXIgKiwgREtTdGF0X3QgKiApOwoK
CgoKY2hhciAqKiBJTVBEaXJlY3RvcnkoIGNvbnN0IGNoYXIgKiApOwppbnQgSU1QUmVnZXgoIGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBUQm9vbCApOwpUQm9vbCBJTVBGaWxlbmFtZUNvbXBh
cmUoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CmNvbnN0IGNoYXIgKiBJTVBUZW1wTmFt
ZSh2b2lkKTsKY29uc3QgY2hhciAqIElNUFJlbFRlbXBOYW1lKCBjb25zdCBjaGFyICpwc3pMb2Nh
dGlvbiApOwpjb25zdCBjaGFyICogSU1QUmVsVGVtcE5hbWVFeHQoIGNvbnN0IGNoYXIgKnBzekxv
Y2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpwc3pFeHQpOwoKVEJvb2wgSU1QSXNEaXJlY3RvcnkoIGNvbnN0IGNoYXIqIHBzekRpcmVj
dG9yeSApOwpUQm9vbCBJTVBJc0RpcmVjdG9yeVdyaXRhYmxlKCBjb25zdCBjaGFyKiBwc3pEaXJl
Y3RvcnkgKTsKY29uc3QgY2hhciAqIElNUEdldFRlbXBEaXIoIHZvaWQgKTsKCgoKCmludCBJTVBT
aWduYWwoIGludCwgdm9pZCAoKikodm9pZCkgKTsKdm9pZCBJTVBTaWduYWxJZ25vcmUoIHZvaWQg
KTsKIyAxMDA4ICIuLi8uLi8uLi9saWIvY2NsdGFzay5oIgpUQm9vbCBORVRJbml0KCB2b2lkICk7
CnZvaWQgTkVUQ2xvc2UoIEZJTEUgKiApOwppbnQgTkVUU2VuZCggRklMRSAqLCB2b2lkICosIGlu
dCApOwppbnQgTkVUQWNjZXB0KCBGSUxFICosIHZvaWQgKiwgaW50ICk7CkZJTEUgKk5FVE9wZW4o
IGNvbnN0IGNoYXIgKiwgaW50MzIsIGludDMyICk7CkZJTEUgKk5FVEFkdmVydGlzZSggY29uc3Qg
Y2hhciAqLCBpbnQzMiAqLCBpbnQzMiAqICk7CkZJTEUgKk5FVFNlbGVjdCggRklMRSAqLCBpbnQg
KTsKbG9uZyBORVRGbGFncyggRklMRSAqICk7CnZvaWQgTkVUU2V0RmxhZ3MoIEZJTEUgKiwgbG9u
ZyApOwp2b2lkIE5FVEZsdXNoKCBGSUxFICogKTsKY29uc3QgY2hhciAqTkVUSG9zdG5hbWUoIHZv
aWQgKTsKVEJvb2wgTkVUUGVuZGluZ1JlYWQgKEZJTEUqIGZwLCBpbnQgbXNlY3MpOwojIDEwMzAg
Ii4uLy4uLy4uL2xpYi9jY2x0YXNrLmgiCnR5cGVkZWYgZW51bSB4ZHJfdHlwZSB7CiAgWERSVm9p
ZCA9IDAsCiAgWERSSW50MzIgPSAxLAogIFhEUkZsb2F0ID0gMiwKICBYRFJEb3VibGUgPSAzLAog
IFhEUlN0cmluZyA9IDQsCiAgWERSQnl0ZSA9IDUsCiAgWERSSW50MzJDb3VudGVkID0gNiwKICBY
RFJGbG9hdENvdW50ZWQgPSA3LAogIFhEUkRvdWJsZUNvdW50ZWQgPSA4LAogIFhEUkJ5dGVDb3Vu
dGVkID0gOQp9IFhEUlR5cGU7CgppbnQgWERSU2VuZCggRklMRSAqLCBYRFJUeXBlLCBpbnQsIHZv
aWQgKiApOwppbnQgWERSQWNjZXB0KCBGSUxFICosIFhEUlR5cGUsIGludCwgdm9pZCAqICk7CiMg
MTA1NCAiLi4vLi4vLi4vbGliL2NjbHRhc2suaCIKaW50IFJQQ0FjY2VwdCggRklMRSAqLCBpbnQg
KiApOwppbnQgUlBDU2VuZCggRklMRSAqLCBpbnQsIGludCApOwoKCgoKCgoKdHlwZWRlZiBUQm9v
bCAoKklNUERkZUNCKSggdm9pZCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBpbnQg
KiApOwp2b2lkICpJTVBEZGVDb25uZWN0KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwp2
b2lkIElNUERkZURpc2Nvbm5lY3QoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7ClRCb29s
IElNUERkZUV4ZWN1dGUoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICog
KTsKVEJvb2wgSU1QRGRlUmVxdWVzdCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKios
IGludCAqICk7CnZvaWQgSU1QRGRlUmVnaXN0ZXJTZXJ2aWNlKCBjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKiwgSU1QRGRlQ0IgKTsKCgoKVEJvb2wgSU1QU3RhcnQoaW50LCBjaGFyICosIGNoYXIg
KiwgY2hhciopOwpUQm9vbCBJTVBQcmludChpbnQsIGNoYXIgKiwgY2hhciAqKTsKIyA0NiAiLi4v
Li4vLi4vbGliL2NjbGJhc2UuaCIgMgoKfQojIDc2ICIuLi8uLi8uLi9saWIvY2NsY29udi5oIiAy
CgpleHRlcm4gIkMiIHsKIyA5MSAiLi4vLi4vLi4vbGliL2NjbGNvbnYuaCIKY2hhciAqIFN0cmlw
V2hpdGVTcGFjZSggY2hhciAqICk7CmludCBOZXh0TXVsdCggaW50LCBpbnQgKTsKdm9pZCBTdHJU
b0FyZyggY2hhciAqLCBjaGFyICosIGNoYXIgKiosIGludCAqKTsKY2hhciAqIE1rTmFtZSggY29u
c3QgY2hhciAqLCAuLi4gKTsKCmNoYXIgKiBNa1N0cmluZyggY2hhciAqICk7CnZvaWQgUHJpbnRG
bG9hdCggY2hhciAqLCBjaGFyICosIGRvdWJsZSApOwp2b2lkIFByaW50RG91YmxlKCBjaGFyICos
IGNoYXIgKiwgZG91YmxlICk7CmNvbnN0IGNoYXIgKiBGb3JtYXREb3VibGUoIGRvdWJsZSwgY2hh
ciAqICk7Cgp2b2lkIFByaW50SW50KCBjaGFyICosIGNoYXIgKiwgbG9uZyApOwp2b2lkIFRleHRG
aWVsZEZpbGwoIGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKTsKCgoKCnZvaWQgVUNhc2VTdHJp
bmcoIGNoYXIgKiApOwp2b2lkIExDYXNlU3RyaW5nKCBjaGFyICogKTsKZG91YmxlIFNjYW5Eb3Vi
bGUoIGNoYXIgKiwgaW50ICk7CmxvbmcgU2NhbkludCggY2hhciAqLCBpbnQgKTsKdm9pZCBGaWxl
TmFtZSggY2hhciAqLCBjaGFyICogKTsKdm9pZCBCaXRDb3VudCh1bnNpZ25lZCBjaGFyICosIGlu
dCwgaW50ICopOwoKZG91YmxlIElNUFJhbmRvbSh2b2lkKTsKaW50IElNUEluaXRSYW5kb20oaW50
KTsKaW50IElNUFJhbmRJbnQodm9pZCk7CmRvdWJsZSBJTVBSYW5kTm9ybShkb3VibGUpOwoKY2hh
ciAqKiBHZXROaWNlR3JhcGhMYWJlbHMoIGRvdWJsZSwgZG91YmxlLCBpbnQsIGludCAqKTsKCgoK
CnZvaWQgTWF0cml4SW52KCBkb3VibGUgKiwgaW50LCBkb3VibGUgKiApOwp2b2lkIFRyaWFuZ3Vs
YXJEZWNvbXBvc2UoaW50LCBkb3VibGUgKik7CnZvaWQgUHJpbnRNYXRyaXgoY2hhciAqbmFtZSwg
aW50IG4sIGludCBtLCBkb3VibGUgKm1hdCk7CmRvdWJsZSBQb3dJbnQgKGRvdWJsZSwgaW50KTsK
CgoKCgp2b2lkIE1NM19NdWx0KGRvdWJsZSAqbWF0MSwgZG91YmxlICptYXQyLCBkb3VibGUgKm1h
dDMpOwp2b2lkIE1WM19NdWx0KGRvdWJsZSAqbWF0LCBkb3VibGUgKnZlYzEsIGRvdWJsZSAqdmVj
Mik7CnZvaWQgTXRWM19NdWx0KGRvdWJsZSAqbWF0LCBkb3VibGUgKnZlYzEsIGRvdWJsZSAqdmVj
Mik7CmRvdWJsZSBWZWNMZW5ndGgoZG91YmxlICp2ZWMpOwp2b2lkIFZlY05vcm1hbGl6ZShkb3Vi
bGUgKnZlYyk7CnZvaWQgVmVjRGlmZihkb3VibGUgKnZlYzEsIGRvdWJsZSAqdmVjMiwgZG91Ymxl
ICp2ZWMzKTsKdm9pZCBWZWNTY2FsZShkb3VibGUgc2NhbGUsIGRvdWJsZSAqdmVjMSwgZG91Ymxl
ICp2ZWMyKTsKZG91YmxlIFZlY0Rpc3RhbmNlKGRvdWJsZSAqdmVjMSwgZG91YmxlICp2ZWMyKTsK
ZG91YmxlIERvdFByb2R1Y3QoZG91YmxlICp2ZWMxLCBkb3VibGUgKnZlYzIpOwp2b2lkIENyb3Nz
UHJvZHVjdChkb3VibGUgKnZlYzEsIGRvdWJsZSAqdmVjMiwgZG91YmxlICp2ZWMzKTsKZG91Ymxl
IHBvbHl2YWwoZG91YmxlICpjb2VmLCBpbnQgbk9yZGVyLCBkb3VibGUgeCk7CgoKCgoKY2hhciAq
KiBSZWFkQXV4RmlsZSggY29uc3QgY2hhciAqICk7CmNoYXIgKiBGZXRjaEF1eEVudHJ5KCBjaGFy
ICoqLCBjb25zdCBjaGFyICogKTsKY29uc3QgY2hhciAqIEZldGNoTmV4dEF1eEVudHJ5KCBjaGFy
ICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpjaGFyICoqIFNldEF1eEVudHJ5KCBj
aGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpjaGFyICoqIEFkZEF1eEVudHJ5
KCBjaGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpjaGFyICoqIERlbGV0ZUF1
eEVudHJpZXMoIGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wpOwp2b2lkIFdyaXRlQXV4RmlsZSgg
Y29uc3QgY2hhciAqLCBjaGFyICoqICk7CmludCBGZXRjaEF1eEZpZWxkTmFtZUxlbmd0aCggY29u
c3QgY2hhciAqICk7ClRCb29sIFBhcnNlQXV4RW50cnkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICoqLCBjb25zdCBjaGFyICoqKTsKY2hhciAqIEJ1aWxkQXV4RW50cnkoIGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqICk7CgpjaGFyICoqIERlbGV0ZVN0cmluZ0xpc3RFbnRyeSggY2hhciAqKiwg
aW50ICk7ClRCb29sIFN0cmluZ0xpc3RzRXF1YWwoIGNoYXIgKiosIGNoYXIgKiogKTsKY2hhciAq
KiBEdXBsaWNhdGVTdHJpbmdMaXN0KCBjaGFyICoqICk7CmludCBDb3VudFN0cmluZ0xpc3QoIGNo
YXIgKiogKTsKdm9pZCBEZXN0cm95U3RyaW5nTGlzdCggY2hhciAqKiApOwpjaGFyICoqIEFkZFN0
cmluZ0xpc3QoIGNoYXIgKiosIGNoYXIgKiogKTsKY2hhciAqKiBBZGRTdHJpbmdUb0xpc3QoIGNo
YXIgKiosIGNvbnN0IGNoYXIgKiApOwppbnQgRmluZEVudHJ5SW5TdHJpbmdMaXN0KCBjaGFyICoq
LCBjb25zdCBjaGFyICogKTsKaW50IEZpbmRSZWdleEluU3RyaW5nTGlzdCggY2hhciAqKiwgY29u
c3QgY2hhciAqICk7CmludCBSZXBsYWNlU3RyaW5nSW5MaXN0KCBjaGFyICoqLCBjb25zdCBjaGFy
ICosIGludCApOwpjaGFyICoqIFRleHRGaWxlVG9TdHJpbmdMaXN0KCBjb25zdCBjaGFyICogKTsK
VEJvb2wgU3RyaW5nTGlzdFRvRmlsZSggY2hhciAqKiwgY29uc3QgY2hhciAqICk7CmNoYXIgKlN0
cmluZ0xpc3RUb0J1ZmZlciggY2hhciAqKiBwYXBzelN0cmluZ0xpc3QgKTsKY2hhciAqKkJ1ZmZl
clRvU3RyaW5nTGlzdCggY29uc3QgY2hhciogcHN6QnVmZmVyICk7CmNoYXIgKiogVG9rZW5pemUo
IGNvbnN0IGNoYXIgKiApOwpjaGFyICoqIFRva2VuaXplRGVsaW0oIGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqICk7CmNoYXIgKiogVG9rZW5pemVEZWxpbTIoIGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqICk7CmNoYXIgKiBHZXRMYXN0VG9rZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICop
OwpjaGFyICoqIEluc2VydFN0cmluZ0luTGlzdChjaGFyICoqLCBjb25zdCBjaGFyICosIGludCAs
IFRCb29sKTsKIyAxOTEgIi4uLy4uLy4uL2xpYi9jY2xjb252LmgiCnZvaWQgU3dhcFdvcmQoIGlu
dCwgdm9pZCAqICk7CiMgMjA2ICIuLi8uLi8uLi9saWIvY2NsY29udi5oIgp2b2lkIENDTExvZ0Vy
cm9yKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uICk7CnZvaWQgQ0NMTG9nU3VjY2Vz
cyggY29uc3QgY2hhciAqICk7CnZvaWQgQ0NMU3RhcnRUZXN0KCBjb25zdCBjaGFyICogKTsKVEJv
b2wgQ0NMRW5kVGVzdCggdm9pZCApOwojIDIxOCAiLi4vLi4vLi4vbGliL2NjbGNvbnYuaCIKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqYmFzZW5hbWU7CiAgICBjaGFyICpleHRlbnNpb247CiAg
ICBjaGFyICpkcml2ZTsKICAgIGludCByZWxhdGl2ZTsKICAgIGludCBwYXRoX2VsZW1lbnRzOwog
ICAgY2hhciAqcGF0aFsyNF07Cn0gR2xvYl90OwojIDI1MCAiLi4vLi4vLi4vbGliL2NjbGNvbnYu
aCIKdm9pZCBJTVBEZXN0cm95R2xvYiggR2xvYl90ICogKTsKR2xvYl90ICogSU1QRmlsZTJHbG9i
KCBjb25zdCBjaGFyICosIGludCApOwpjaGFyICogSU1QR2xvYjJGaWxlKCBjb25zdCBHbG9iX3Qg
KiwgaW50ICk7CmNoYXIgKiBJTVBHbG9iYmVyKCBjb25zdCBjaGFyICosIGludCwgaW50ICk7CmNo
YXIgKiBJTVBHZXRQYXRoKCBjb25zdCBHbG9iX3QgKiwgaW50ICk7CmNoYXIgKiBJTVBHZXRGaWxl
bmFtZSggY29uc3QgR2xvYl90ICosIGludCApOwpjb25zdCBjaGFyICogSU1QR2V0RmlsZW5hbWVS
ZWYoIGNvbnN0IEdsb2JfdCAqLCBpbnQgKTsKY29uc3QgY2hhciAqIElNUEV4dHJhY3RGaWxlbmFt
ZVJlZiggY29uc3QgY2hhciAqLCBpbnQgKTsKCgp2b2lkIElNUFNldEZpbGVuYW1lKCBHbG9iX3Qg
KiwgY29uc3QgY2hhciAqICk7CmNoYXIgKiBJTVBTZXRFeHRlbnNpb24oIGNvbnN0IGNoYXIqIHBz
ekZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogcHN6RXh0ICk7CmNoYXIgKiBJTVBBYmJyZXZpYXRlUGF0aCggR2xvYl90ICosIGludCwgaW50
ICk7CmNvbnN0IGNoYXIgKiBJTVBTZWFyY2hGaWxlKCBjb25zdCBjaGFyICogKTsKCmNoYXIgKiBJ
TVBNYWtlUmVsYXRpdmVQYXRoKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpjaGFyICog
SU1QTWVyZ2VSZWxhdGl2ZVBhdGgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7ClRCb29s
IENDTFJlbGF0aXZlVGVzdCggdm9pZCApOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgbGlua190IHsKICBz
dHJ1Y3QgbGlua190ICpuZXh0OwogIHZvaWQgKm9iamVjdDsKfSBMaW5rX3Q7CgpMaW5rX3QgKiBJ
bnNlcnRMaW5rKCBMaW5rX3QgKiwgTGlua190ICogKTsKTGlua190ICogQWRkTGluayggTGlua190
ICosIExpbmtfdCAqICk7CkxpbmtfdCAqIENyZWF0ZUxpbmsoIHZvaWQgKiApOwpMaW5rX3QgKiBG
aW5kTGluayggTGlua190ICosIHZvaWQgKiApOwpMaW5rX3QgKiBEZWxldGVMaW5rKCBMaW5rX3Qg
KiwgTGlua190ICogKTsKTGlua190ICogUmVtb3ZlTGluayggTGlua190ICosIExpbmtfdCAqICk7
CkxpbmtfdCAqIExpbmtOKCBMaW5rX3QgKiwgaW50ICk7CnZvaWQgRGVzdHJveUxpc3QoIExpbmtf
dCAqICk7CkxpbmtfdCAqIER1cGxpY2F0ZUxpc3QoIExpbmtfdCAqKTsKIyAzMTIgIi4uLy4uLy4u
L2xpYi9jY2xjb252LmgiCnR5cGVkZWYgc3RydWN0IENDSEVudHJ5X3QKewogICAgdm9pZCAqaEtl
eTsKICAgIHZvaWQgKnBEYXRhOwp9IENDSEVudHJ5OwoKc3RydWN0IENDSENhY2hlX3Q7Cgp0eXBl
ZGVmIGxvbmcgKCpDQ0hIYXNoRnVuYykodm9pZCAqKTsKdHlwZWRlZiBpbnQgKCpDQ0hDb21wRnVu
Yykodm9pZCAqLCB2b2lkICopOwp0eXBlZGVmIHZvaWQgKCpDQ0hGbHVzaEZ1bmMpKHN0cnVjdCBD
Q0hDYWNoZV90ICosIENDSEVudHJ5ICosIHZvaWQgKik7Cgp0eXBlZGVmIHN0cnVjdCBDQ0hDYWNo
ZV90CnsKICAgIGludDMyIG5PcHRpb25zOwogICAgaW50IG5TaXplOwogICAgaW50IG5FbnRyaWVz
OwogICAgdW5zaWduZWQgaW50IG5TbG90czsKICAgIGludCAqcGFuRW50cmllc0luU2xvdDsKICAg
IENDSEVudHJ5ICoqcGFwYXNFbnRyaWVzOwogICAgQ0NISGFzaEZ1bmMgcGZuSGFzaDsKICAgIEND
SENvbXBGdW5jIHBmbkNvbXA7CiAgICBDQ0hGbHVzaEZ1bmMgcGZuRmx1c2g7CiAgICB2b2lkICpw
Rmx1c2hDQkRhdGE7Cn0gQ0NIQ2FjaGUsICpDQ0hIYW5kbGU7CgpDQ0hFbnRyeSAqIENDSEZpbmRF
bnRyeShDQ0hIYW5kbGUgcHNDYWNoZSwgdm9pZCAqaEtleSk7CnZvaWQgKiBDQ0hEZWxldGUoQ0NI
SGFuZGxlIHBzQ2FjaGUsIHZvaWQgKmhLZXkpOwpDQ0hIYW5kbGUgQ0NIQ3JlYXRlQ2FjaGUoc2l6
ZV90IG5TaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgbk9wdGlvbnMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0hGbHVzaEZ1bmMgcGZjRmx1c2hGdW5j
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcEZsdXNoQ0JEYXRhKTsKdm9p
ZCAqIENDSFVwZGF0ZShDQ0hIYW5kbGUgcHNDYWNoZSwgdm9pZCAqaEtleSwgdm9pZCAqcERhdGEp
OwpDQ0hFbnRyeSAqIENDSEZpbmRFbnRyeShDQ0hIYW5kbGUgcHNDYWNoZSwgdm9pZCAqaEtleSk7
CnZvaWQgKiBDQ0hEZWxldGUoQ0NISGFuZGxlIHBzQ2FjaGUsIHZvaWQgKmhLZXkpOwp2b2lkIEND
SEZsdXNoQ2FjaGUoQ0NISGFuZGxlIHBzQ2FjaGUpOwp2b2lkICoqIENDSEdldEFsbChDQ0hIYW5k
bGUgcHNDYWNoZSk7CmludCBDQ0hHZXROdW1FbnRyaWVzKENDSEhhbmRsZSBwc0NhY2hlKTsKdm9p
ZCAqIENDSEZpbmQoQ0NISGFuZGxlIHBzQ2FjaGUsIHZvaWQgKmhLZXkpOwp2b2lkIENDSERlbGV0
ZUNhY2hlKENDSEhhbmRsZSBwc0NhY2hlKTsKQ0NIRW50cnkgKiogQ0NIR2V0QWxsRW50cmllcyhD
Q0hIYW5kbGUgcHNDYWNoZSk7CgoKCgpjaGFyICogTkxTVGFnTG9va3VwIChjb25zdCBjaGFyKiBw
c3pUYWcgKTsKY2hhciAqIE5MU0xvb2t1cCAoY29uc3QgY2hhciogcHN6U3RyaW5nICk7CmNoYXIg
KiogTkxTTG9va3VwU3RyaW5nTGlzdCAoY2hhciAqKiBwYXN6U3RyaW5nTGlzdCApOwpUQm9vbCBO
TFNUb0RvdWJsZUJ5dGUgKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBpbnQpOwpjaGFyICogTkxTRG91
YmxlVG9Db21wb3VuZChjb25zdCBjaGFyICpwc3pEb3VibGVCeXRlLCBpbnQgbkNoYXJDb3VudCk7
CgpUQm9vbCBOTFNIYXNEb3VibGUgKGNvbnN0IGNoYXIgKik7ClRCb29sIE5MU0RvdWJsZUNoYXJJ
c05VTEwgKGNvbnN0IGNoYXIgKik7CnZvaWQgTkxTU2V0TG9jYWxlIChjb25zdCBjaGFyICogKTsK
dm9pZCBOTFNDbGVhckRhdGFiYXNlICh2b2lkKTsKCgp2b2lkIE5MU1NldFRlc3RNb2RlKFRCb29s
KTsKdm9pZCBOTFNTZXRMb2dNb2RlKFRCb29sKTsKdm9pZCBOTFNJbml0KCk7ClRCb29sIE5MU0lz
TGVhZEJ5dGUodW5zaWduZWQgY2hhcik7CmNoYXIgKiBOTFNOZXh0Q2hhcihjaGFyICopOwpjaGFy
ICogTkxTUHJldkNoYXIoY2hhciAqLCBjaGFyICopOwppbnQgTkxTU3RyaW5nTGVuZ3RoKGNoYXIg
Kik7CmludCBOTFNNYXhDaGFyV2lkdGgoKTsKCgoKCnZvaWQgUE1Jbml0aWFsaXplKCBUQm9vbCAp
Owp2b2lkIFBNU3RhcnRUaW1pbmcoIGNvbnN0IGNoYXIgKiApOwp2b2lkIFBNRW5kVGltaW5nKCBj
b25zdCBjaGFyICogKTsKdm9pZCBQTVN0YXJ0UHJvY2Vzcyh2b2lkKTsKdm9pZCBQTUVuZFByb2Nl
c3Modm9pZCk7CmNoYXIgKipQTUdldEFjdGlvbnModm9pZCk7CmRvdWJsZSBQTUdldEF2ZXJhZ2VB
Y3Rpb25UaW1lKCBjb25zdCBjaGFyICogKTsKdm9pZCBQTURlYnVnUmVwb3J0KHZvaWQpOwppbnQg
UE1HZXRFcnJvcnMoY29uc3QgY2hhciAqKTsKCgoKCnR5cGVkZWYgY2hhciAqKElNUFByb21wdEVu
Y3J5cHRLZXkpKCB1bnNpZ25lZCBjaGFyICpwYWJ5RmluZ2VycHJpbnRFbmNyeXB0ZWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwc3pGaW5nZXJwcmlu
dENsZWFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
cHN6UXVlc3Rpb24gKTsKCnZvaWQgSU1QWG9yV2l0aFN0cmluZyggY29uc3QgY2hhciAqLCB1bnNp
Z25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgaW50ICk7CnZvaWQgSU1QRW5jcnlwdEJ1ZmZl
ciggY29uc3QgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgaW50ICk7
CnZvaWQgSU1QRGVjcnlwdEJ1ZmZlciggY29uc3QgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVu
c2lnbmVkIGNoYXIgKiwgaW50ICk7CmNoYXIgKklNUEdlbmVyYXRlRW5jcnlwdGlvbktleSggaW50
ICk7Cgp2b2lkIElNUFJlbWVtYmVyRW5jcnlwdEtleSggY29uc3QgY2hhciAqICk7CmNoYXIgKipJ
TVBSZWNhbGxFbmNyeXB0S2V5cyggdm9pZCApOwpjaGFyICpJTVBHZXRNYXRjaGluZ0tleSggdW5z
aWduZWQgY2hhciAqcGFieUZpbmdlcnByaW50RW5jcnlwdGVkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekZpbmdlcnByaW50Q2xlYXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6UXVlc3Rpb24gKTsKdm9p
ZCBJTVBTZXRFbmNyeXB0S2V5UHJvbXB0ZXIoIElNUFByb21wdEVuY3J5cHRLZXkgcGZuUHJvbXB0
ZXIgKTsKY2hhciAqSU1QUHJvbXB0VGVybUVuY3J5cHRLZXkoIHVuc2lnbmVkIGNoYXIgKiwgY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKCgoKCgp2b2lkIFByaW50SGlzRGF0YShGSUxFICpm
cCwgY29uc3QgaW50ICphbkhpc0RhdGEsIGludCBuSGlzRGF0YVNpemUsCiAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBkZkZpcnN0QmluVmFsdWUsIGRvdWJsZSBkZkJpblNpemUpOwoKdm9pZCBQcmlu
dEhpc0FTQ0lJKEZJTEUgKmZwLCBjb25zdCBpbnQgKmFuSGlzRGF0YSwgaW50IG5IaXNEYXRhU2l6
ZSwKICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZkZpcnN0QmluVmFsdWUsIGRvdWJsZSBkZkJp
blNpemUsIGludCBuSGlzQ291bnQsCiAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZIaXNNaW4s
IGRvdWJsZSBkZkhpc01heCwgZG91YmxlIGRmSGlzTWVhbiwKICAgICAgICAgICAgICAgICAgIGRv
dWJsZSBkZkhpc1N0ZERldiwgZG91YmxlIGRmSGlzTWVkaWFuLCBkb3VibGUgZGZDb3VudE1pbiwK
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZkNvdW50TWF4LCBkb3VibGUgZGZHcmV5TGV2ZWxN
aW4sCiAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZHcmV5TGV2ZWxNYXgsIGNvbnN0IGNoYXIg
KnBzelRpdGxlLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6TGFiZWxYLCBjb25z
dCBjaGFyICpwc3pMYWJlbFksCiAgICAgICAgICAgICAgICAgICBUQm9vbCBiUHJpbnRTdGF0cyk7
Cgp2b2lkIFByaW50SGlzUFMoRklMRSAqZnAsIGNvbnN0IGludCAqYW5IaXNEYXRhLCBpbnQgbkhp
c0RhdGFTaXplLAogICAgICAgICAgICAgICAgZG91YmxlIGRmRmlyc3RCaW5WYWx1ZSwgZG91Ymxl
IGRmQmluU2l6ZSwgaW50IG5IaXNDb3VudCwKICAgICAgICAgICAgICAgIGRvdWJsZSBkZkhpc01p
biwgZG91YmxlIGRmSGlzTWF4LCBkb3VibGUgZGZIaXNNZWFuLAogICAgICAgICAgICAgICAgZG91
YmxlIGRmSGlzU3RkRGV2LCBkb3VibGUgZGZIaXNNZWRpYW4sIGRvdWJsZSBkZkNvdW50TWluLAog
ICAgICAgICAgICAgICAgZG91YmxlIGRmQ291bnRNYXgsIGRvdWJsZSBkZkdyZXlMZXZlbE1pbiwg
ZG91YmxlIGRmR3JleUxldmVsTWF4LAogICAgICAgICAgICAgICAgZG91YmxlIGRmUGFnZVdpZHRo
LCBkb3VibGUgZGZQYWdlSGVpZ2h0LCBkb3VibGUgZGZXaW5kb3dXaWR0aCwKICAgICAgICAgICAg
ICAgIGRvdWJsZSBkZldpbmRvd0hlaWdodCwgaW50IGJMYW5kU2NhcGUsIGNvbnN0IGNoYXIgKnBz
elRpdGxlLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6TGFiZWxYLCBjb25zdCBjaGFy
ICpwc3pMYWJlbFksCiAgICAgICAgICAgICAgICBUQm9vbCBiUHJpbnRTdGF0cywgaW50IG5OdW1D
b3BpZXMpOwoKfQojIDM0NiAiLi4vLi4vLi4vbGliL2dkYi5oIiAyCiMgMSAiLi4vLi4vLi4vbGli
L2NjbHByb2ouaCIgMQojIDIxICIuLi8uLi8uLi9saWIvY2NscHJvai5oIgpleHRlcm4gIkMiIHsK
CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIGNoYXIgVW5pdHNbMjBdOwogIGRvdWJsZSBEZWFydGhb
Ml07CiAgZG91YmxlIFJlZkxvbmc7CiAgZG91YmxlIFJlZkxhdDsKICBkb3VibGUgU3RkUGFyYWxs
ZWwxOwogIGRvdWJsZSBTdGRQYXJhbGxlbDI7CiAgZG91YmxlIEZhbHNlRWFzdGluZzsKICBkb3Vi
bGUgRmFsc2VOb3J0aGluZzsKICBkb3VibGUgU2NhbGU7CiAgZG91YmxlIEhlaWdodDsKICBkb3Vi
bGUgTG9uZzE7CiAgZG91YmxlIExhdDE7CiAgZG91YmxlIExvbmcyOwogIGRvdWJsZSBMYXQyOwog
IGRvdWJsZSBBemltdXRoOwogIGludCBMYW5kc2F0TnVtOwoKICBpbnQgTGFuZHNhdFBhdGg7Cgog
IGRvdWJsZSBYT2ZmOwogIGRvdWJsZSBZT2ZmOwogIGRvdWJsZSBYU2l6ZTsKICBkb3VibGUgWVNp
emU7CgogIGludCBQcm9qZWN0aW9uQ29kZTsKICBpbnQgUHJvamVjdGlvblpvbmU7CiAgZG91Ymxl
IFVTR1NQYXJtc1sxNV07CiAgaW50IFVuaXRzQ29kZTsKICBpbnQgU3BoZXJvaWQ7CiAgaW50IElG
aWVsZHM7CgogIGRvdWJsZSBYUm90OwogIGRvdWJsZSBZUm90OwoKfSBQcm9qSW5mb190OwojIDcz
ICIuLi8uLi8uLi9saWIvY2NscHJvai5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgY2hhciBzekRhdHVt
Q29kZVs1XTsKICBjaGFyICogcHN6RGF0dW1OYW1lOwogIGNoYXIgKiBwc3pEYXR1bVdoZXJlOwoK
CgoKICBjaGFyIHN6RWxsaXBzQ29kZVs1XTsKICBjaGFyICogcHN6RWxsaXBzTmFtZTsKICBkb3Vi
bGUgZEE7CiAgZG91YmxlIGRCOwoKICBjaGFyICogcHN6U2hpZnRGaWxlMTsKICBjaGFyICogcHN6
U2hpZnRGaWxlMjsKCgogIGRvdWJsZSBkWE9mZnNldDsKICBkb3VibGUgZFlPZmZzZXQ7CiAgZG91
YmxlIGRaT2Zmc2V0OwoKCiAgZG91YmxlIGRYUm90YXRlOwogIGRvdWJsZSBkWVJvdGF0ZTsKICBk
b3VibGUgZFpSb3RhdGU7CgogIGRvdWJsZSBkU2NhbGU7CgogIGRvdWJsZSBkWFNpZ21hOwogIGRv
dWJsZSBkWVNpZ21hOwogIGRvdWJsZSBkWlNpZ21hOwoKICBpbnQgbkRvcHBsZXI7CgoKICBkb3Vi
bGUgZEZsYXR0ZW5pbmc7CiMgMTE4ICIuLi8uLi8uLi9saWIvY2NscHJvai5oIgogIGNoYXIgKipw
YXN6R3JpZEZpbGU7CgogIHZvaWQgKiBwc0dGOwoKCgp9IERhdHVtSW5mb190OwoKCgoKdHlwZWRl
ZiBzdHJ1Y3QKewogIGNoYXIgc3pVc2VyTmFtZVsxMl07CiAgY2hhciBzelByb2pEZXNjWzgwXTsK
ICBjaGFyIHN6UHJvakNvdW50cnlbODBdOwogIFRCb29sIGJDb21tb247CgogIGludCBuUmVhbFR5
cGU7CgogIFByb2pJbmZvX3Qgc1JlYWxQcm9qOwp9IFVzZXJQcm9qSW5mb190OwojIDE5NiAiLi4v
Li4vLi4vbGliL2NjbHByb2ouaCIKVEJvb2wgQ0NMUHJvalRlc3QoIHZvaWQgKTsKVEJvb2wgQ0NM
VXNlclByb2pUZXN0KCB2b2lkICk7CgppbnQgR0NUUFNpbXBsZVRyYW5zZm9ybSAoIGNoYXIgKiwg
ZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KiwgZG91YmxlICosIGRvdWJsZSAqICk7CgppbnQgUENJMkdDVFAgKCBQcm9qSW5mb190ICogKTsK
dm9pZCBHQ1RQMlBDSSAoIFByb2pJbmZvX3QgKiApOwoKaW50IEdlb3N5czJQcm9qSW5mbyAoIFBy
b2pJbmZvX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSApOwppbnQgR2Vvc3lzMlByb2pJbmZvMiAoIFByb2pJ
bmZvX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUsIGRvdWJsZSApOwoKaW50IEdDVFBUcmFuc2Zvcm0gKCBQcm9qSW5mb190ICosIGRvdWJs
ZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qSW5mb190ICosIGRv
dWJsZSAqLCBkb3VibGUgKiApOwoKdm9pZCBJbml0UHJvakluZm8gKCBQcm9qSW5mb190ICosIGlu
dCApOwpjaGFyICogUHJvakluZm8yUGFybXMgKCBQcm9qSW5mb190ICogKTsKaW50IFByb2pQYXJt
czJJbmZvICggY2hhciAqLCBQcm9qSW5mb190ICogKTsKaW50IFByb2pJbmZvMlBSTUZpbGUgKCBQ
cm9qSW5mb190ICogKTsKaW50IFByb2pQUk1GaWxlMkluZm8gKCBjaGFyICosIFByb2pJbmZvX3Qg
KiApOwppbnQgR2Vvc3lzQ29tcGF0aWJsZSggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsK
aW50IFByb2pDb21wYXRpYmxlKCBjb25zdCBQcm9qSW5mb190ICosIGNvbnN0IFByb2pJbmZvX3Qg
KiApOwppbnQgRGVjb2RlR2Vvc3lzKCBjb25zdCBjaGFyICosIGNoYXIgKiApOwppbnQgR2V0RWxs
aXBzb2lkKCBjb25zdCBjaGFyICogKTsKaW50IGdldF9lbGwoIGNoYXIgKiwgZG91YmxlICosIGRv
dWJsZSAqICk7CmNoYXIgZ2V0X3Byb2ooIGludCwgY2hhciAqLCBjaGFyICosIFByb2pJbmZvX3Qg
KiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlLCBkb3VibGUsIGRv
dWJsZSwgZG91YmxlICk7ClRCb29sIEdldEVhcnRoTW9kZWwoIGNvbnN0IGNoYXIgKiwgY2hhciAq
ICk7ClRCb29sIEdldEVsbGlwc29pZERhdGEoIGNvbnN0IGNoYXIgKiwgaW50ICosIGRvdWJsZSAq
LCBkb3VibGUgKiApOwpUQm9vbCBHZXRFbGxpcHNvaWRJbmZvKCBjb25zdCBjaGFyICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGRvdWJsZSAqLCBkb3VibGUgKiwgY2hh
ciAqKiApOwpjaGFyICogR2V0RWxsaXBzb2lkQ29kZSggZG91YmxlLCBkb3VibGUgKTsKVEJvb2wg
R2V0RGF0dW1JbmZvICggY29uc3QgY2hhciAqLCBEYXR1bUluZm9fdCAqICk7ClRCb29sIEdldERh
dHVtSW5mbzIgKCBjb25zdCBjaGFyICosIERhdHVtSW5mb190ICoqICk7ClRCb29sIExvbmdMYXRQ
cm9qSW5mbyggY29uc3QgY2hhciAqLCBQcm9qSW5mb190ICosIFByb2pJbmZvX3QgKiApOwppbnQg
R2Vvc3lzRGVzY3JpcHRpb24oIGludCwgY29uc3QgY2hhciAqLCBjaGFyICosIGNoYXIgKiosIGNo
YXIgKiogKTsKVEJvb2wgSXNQcm9qZWN0YWJsZSggY29uc3QgY2hhciAqLCBjb25zdCBQcm9qSW5m
b190ICogKTsKVEJvb2wgUmVxdWlyZXNQcm9qSW5mbyggaW50ICk7ClRCb29sIElzQ29uZm9ybWFs
KCBjb25zdCBjaGFyICogKTsKaW50IFByb2pEZWZhdWx0cyggUHJvakluZm9fdCAqLCBpbnQgKiwg
aW50ICosIGNoYXIgKiwgUHJvakluZm9fdCAqICk7CmNoYXIgKiogUHJvalJlcG9ydCggUHJvaklu
Zm9fdCAqICk7ClRCb29sIFByb2pOb3JtYWxpemUoIFByb2pJbmZvX3QgKiApOwpVc2VyUHJvaklu
Zm9fdCAqRmluZFVzZXJQcm9qZWN0aW9uKCBjb25zdCBjaGFyICogKTsKVEJvb2wgR2V0VXNlclBy
b2plY3Rpb25OYW1lKCBQcm9qSW5mb190ICosIGNoYXIgKiApOwp2b2lkIERlZmluZVVzZXJQcm9q
ZWN0aW9uKCBVc2VyUHJvakluZm9fdCAqICk7ClVzZXJQcm9qSW5mb190ICoqR2V0VXNlclByb2pl
Y3Rpb25zKHZvaWQpOwoKdm9pZCBVVE1ab25lIChkb3VibGUsIGRvdWJsZSwgaW50ICosIGNoYXIg
Kik7Cgp2b2lkIERlY1RvRE1TIChkb3VibGUsIGludCwgY2hhciAqKTsKaW50IERNU1RvRGVjIChj
b25zdCBjaGFyICosIGRvdWJsZSAqKTsKdm9pZCBEZWNpbWFsVG9EZWdyZWVzKCBkb3VibGUsIGNo
YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBp
bnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCwgY2hh
ciAqICk7CgpUQm9vbCBSZWFkQXJjSW5mb1Byb2plY3Rpb25GaWxlKCBjaGFyICoqLCBQcm9qSW5m
b190ICogKTsKY2hhciAqKiBXcml0ZUFyY0luZm9Qcm9qZWN0aW9uRmlsZSggUHJvakluZm9fdCAq
ICk7CmludCBVU0dTX0FyY0luZm9fU1BDU1pvbmUoIFRCb29sLCBpbnQgKTsKCgoKCgpUQm9vbCBJ
bnZlcnNlQWZmaW5lKCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91
YmxlLAogICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRv
dWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIEFwcGx5QWZmaW5lKCBkb3VibGUsIGRv
dWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50LCBkb3VibGUgKiwgZG91YmxlICosIGludCApOwpkb3VibGUgQWZmaW5l
WFNpemUoIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKTsK
ZG91YmxlIEFmZmluZVlTaXplKCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSwgZG91YmxlICk7CmRvdWJsZSBBZmZpbmVSb3RhdGlvbiggZG91YmxlLGRvdWJsZSxkb3VibGUs
ZG91YmxlLGRvdWJsZSxkb3VibGUgKTsKCgoKCgppbnQgRGF0dW1TaGlmdCAoIGNoYXIgKiwgZG91
YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwoKaW50IEdvb2RlVHJhbnNmb3JtKCBQ
cm9qSW5mb190ICosIGludCwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQcm9qSW5mb190ICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwoKaW50IENhc3Np
bmlUcmFuc2Zvcm0oIFByb2pJbmZvX3QgKiwgaW50LCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvakluZm9fdCAqLCBkb3VibGUgKiwgZG91Ymxl
ICogKTsKCmludCBSU09UcmFuc2Zvcm0oIFByb2pJbmZvX3QgKiwgaW50LCBkb3VibGUsIGRvdWJs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qSW5mb190ICosIGRvdWJsZSAq
LCBkb3VibGUgKiApOwoKaW50IEtyb3Zha1RyYW5zZm9ybSggUHJvakluZm9fdCAqLCBpbnQsIGRv
dWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2pJbmZv
X3QgKiwgZG91YmxlICosIGRvdWJsZSAqICk7CgppbnQgU0dET1RyYW5zZm9ybSggUHJvakluZm9f
dCAqLCBpbnQsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQcm9qSW5mb190ICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwoKaW50IExCU0dUcmFuc2Zvcm0o
IFByb2pJbmZvX3QgKiwgaW50LCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUHJvakluZm9fdCAqLCBkb3VibGUgKiwgZG91YmxlICogKTsKCmludCBJU0lO
VHJhbnNmb3JtKCBQcm9qSW5mb190ICosIGludCwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFByb2pJbmZvX3QgKiwgZG91YmxlICosIGRvdWJsZSAqICk7
CgpUQm9vbCBHZW9jb2RlZFRvTUdSUyggUHJvakluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgaW50
LCBjaGFyICogKTsKVEJvb2wgTUdSU1RvR2VvY29kZWQoIGNvbnN0IGNoYXIgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFByb2pJbmZvX3QgKiwgZG91YmxlICosIGRvdWJsZSAq
ICk7CnZvaWQgRVBTR3RvUHJvakluZm8oIGNoYXIgKiwgUHJvakluZm9fdCAqKTsKIyAzMTAgIi4u
Ly4uLy4uL2xpYi9jY2xwcm9qLmgiCnZvaWQgcHJqX3NpbmNvcyAoIGRvdWJsZSwgZG91YmxlICos
IGRvdWJsZSAqICk7CmRvdWJsZSBhc2lueiAoIGRvdWJsZSApOwpkb3VibGUgbXNmbnogKCBkb3Vi
bGUsIGRvdWJsZSwgZG91YmxlICk7CmRvdWJsZSBxc2ZueiAoIGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUgKTsKZG91YmxlIHBoaTF6ICggZG91YmxlLCBkb3VibGUsIGxvbmcgKiApOwpkb3VibGUgcGhp
MnogKCBkb3VibGUsIGRvdWJsZSwgbG9uZyAqICk7CmRvdWJsZSBwaGkzeiAoIGRvdWJsZSwgZG91
YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBsb25nICogKTsKZG91YmxlIHBoaTR6ICggZG91
YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKiApOwpkb3VibGUgcGFrY3og
KCBkb3VibGUgKTsKZG91YmxlIHBha3IyZG0gKCBkb3VibGUgKTsKZG91YmxlIHRzZm56ICggZG91
YmxlLCBkb3VibGUsIGRvdWJsZSApOwppbnQgcHJqX3NpZ24gKCBkb3VibGUgKTsKZG91YmxlIGFk
anVzdF9sb24gKCBkb3VibGUgKTsKZG91YmxlIGUwZm4gKCBkb3VibGUgKTsKZG91YmxlIGUxZm4g
KCBkb3VibGUgKTsKZG91YmxlIGUyZm4gKCBkb3VibGUgKTsKZG91YmxlIGUzZm4gKCBkb3VibGUg
KTsKZG91YmxlIGU0Zm4gKCBkb3VibGUgKTsKZG91YmxlIG1sZm4gKCBkb3VibGUsIGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUsIGRvdWJsZSApOwppbnQgY2FsY191dG1fem9uZSAoIGRvdWJsZSApOwoj
IDM1NiAiLi4vLi4vLi4vbGliL2NjbHByb2ouaCIKVEJvb2wgQ0NMVHJhbnNmb3JtVGVzdCggdm9p
ZCApOwojIDM2NiAiLi4vLi4vLi4vbGliL2NjbHByb2ouaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAg
aW50IHBieDsKICAgIGludCBwYnk7CiAgICBkb3VibGUgcmJ4WzIxXTsKICAgIGRvdWJsZSByYnlb
MjFdOwogICAgZG91YmxlIHJhYnhbM107CiAgICBkb3VibGUgcmFieVszXTsKfSBHRU9JbmZvX3Q7
CgoKCgp2b2lkIEdDUExpc3QgKGludCwgaW50ICosIGludCAqLCBkb3VibGUgKiwgZG91YmxlICos
IGRvdWJsZSAqLAogICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBpbnQs
IGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICogKTsKdm9pZCBHQ1BSb290TWVhblNxICggR0VP
SW5mb190ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUg
KiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQs
IGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgR0NQVHJhbnNmb3JtICggR0VPSW5mb190ICosIGRv
dWJsZSwgZG91YmxlLCBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIEdDUFJlZ3Jlc3Npb24gKCBH
RU9JbmZvX3QgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgKiwgZG91YmxlICosIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgR0NQUmVncmVzc2lvbjIgKCBHRU9J
bmZvX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBkb3VibGUgKiwg
ZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgZG91YmxlICos
IGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCAqLCBpbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQg
R0NQUmVncmVzc2lvbjJXaXRoV29yc3RQb2ludCAoIEdFT0luZm9fdCAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCwgaW50ICosIGludCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBpbnQgKiwgZG91YmxlICosIGRvdWJsZSAqKTsK
CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IFJhZGlhbFRlcm1Db3VudDsKICAgIGRvdWJs
ZSBDUElYWzQqMjU2XTsKICAgIGRvdWJsZSBDUElZWzQqMjU2XTsKICAgIGRvdWJsZSBDb2VmZlhb
NCoyNTYgKzNdOwogICAgZG91YmxlIENvZWZmWVs0KjI1NiArM107CiAgICBkb3VibGUgQWZmaW5l
WFszXTsKICAgIGRvdWJsZSBBZmZpbmVZWzNdOwogICAgaW50IFJhbmtPZkE7CiAgICBkb3VibGUg
Q29uZE51bU9mQTsKfSBUUFNJbmZvX3Q7Cgp2b2lkIFRQU0NhbGN1bGF0ZSAoVFBTSW5mb190ICp0
cHMsIGludCBuY3AsIGRvdWJsZSAqcml4LCBkb3VibGUgKnJpeSwKICAgICAgICAgICAgICAgICAg
IGRvdWJsZSAqcm91LCBkb3VibGUgKnJvdik7Cgp2b2lkIFRQU1RyYW5zZm9ybSAoVFBTSW5mb190
ICp0cHMsIGRvdWJsZSByaXgsIGRvdWJsZSByaXksCiAgICAgICAgICAgICAgICAgICBkb3VibGUg
KnJvdSwgZG91YmxlICpyb3YpOwoKdm9pZCBUUFNSTVNFcnJvciAoVFBTSW5mb190ICp0cHMsIGlu
dCBuY2hrcCwKICAgICAgICAgICAgICAgICAgZG91YmxlICpjaGtwaXgsIGRvdWJsZSAqY2hrcGl5
LAogICAgICAgICAgICAgICAgICBkb3VibGUgKmNoa3BvdSwgZG91YmxlICpjaGtwb3YsCiAgICAg
ICAgICAgICAgICAgIGRvdWJsZSAqYXZ4LCBkb3VibGUgKmF2eSwgZG91YmxlICpybXN4LCBkb3Vi
bGUgKnJtc3kpOwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGRvdWJsZSBkZlhPZmYsIGRmWU9m
ZiwgZGZYU2l6ZSwgZGZZU2l6ZTsKICAgIFRCb29sIGJSZXByb2plY3Q7CiAgICBQcm9qSW5mb190
IHNWZWNQcm9qOwogICAgUHJvakluZm9fdCBzSW1nUHJvajsKfSBWVHJhbkluZm87CgpUQm9vbCBW
VHJhblNldHVwKCBQcm9qSW5mb190ICogcHNJbWdQcm9qLCBQcm9qSW5mb190ICogcHNWZWNQcm9q
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVlRyYW5JbmZvICogcHNWVHJhbiApOwoKdm9p
ZCBWVHJhblRvUGl4ZWwoIHZvaWQgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUg
KiApOwp2b2lkIFZUcmFuRnJvbVBpeGVsKCB2b2lkICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUg
KiwgZG91YmxlICogKTsKCgoKCnZvaWQgZGRjb21wYyhpbnQsIGRvdWJsZSAqLCBpbnQgKiwgaW50
ICopOwp2b2lkIGRzb2x2YyhpbnQsIGRvdWJsZSAqLCBpbnQgKiwgZG91YmxlICopOwp2b2lkIGRx
cmxzYyhkb3VibGUgKiwgaW50LCBpbnQsIGRvdWJsZSwgaW50ICosIGRvdWJsZSAqLCBkb3VibGUg
KiwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBpbnQgKiwgZG91YmxlICosIGRvdWJs
ZSAqLCBpbnQsIGludCAqKTsKIyA0NjEgIi4uLy4uLy4uL2xpYi9jY2xwcm9qLmgiCnR5cGVkZWYg
c3RydWN0IHsKICBpbnQgblR5cGU7CiAgVEJvb2wgYlZhbGlkOwoKICB1bmlvbiB7CiAgICBHRU9J
bmZvX3QgKnBzR0VPOwogICAgVFBTSW5mb190ICpwc1RQUzsKCiAgICB2b2lkICpwc1JUQ1M7CiAg
ICB2b2lkICpwc1NSSVQ7CgogIH0gdTsKfSBUUk5JbmZvX3Q7CgoKVFJOSW5mb190ICogVFJOQWxs
b2NhdGUoIGludCApOwp2b2lkIFRSTkRlYWxsb2NhdGUoIFRSTkluZm9fdCAqICk7CnZvaWQgVFJO
Q2FsY3VsYXRlKCBUUk5JbmZvX3QgKiwgaW50LCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgdm9pZCAqICk7CnZvaWQg
VFJOQ2FsY3VsYXRlM0QoIFRSTkluZm9fdCAqLCBpbnQsIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91
YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAq
LCBkb3VibGUgKiwgdm9pZCAqICk7ClRCb29sIFRSTlRyYW5zZm9ybSggVFJOSW5mb190ICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICopOwpUQm9vbCBUUk5UcmFuc2Zvcm0z
RCggVFJOSW5mb190ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlLCBk
b3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwg
ZG91YmxlICosIGRvdWJsZSAqKTsKdm9pZCBUUk5STVNFcnJvciggVFJOSW5mb190ICosIGludCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAq
LCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91Ymxl
ICogKTsKCnZvaWQgVFJOUk1TRXJyb3IzRCggVFJOSW5mb190ICosIGludCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAq
LCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3Vi
bGUgKiApOwoKZG91YmxlIFBBSzJQQ0koIGRvdWJsZSBkZWcsIGludCBmdW5jdGlvbiApOwoKfQoj
IDM0NyAiLi4vLi4vLi4vbGliL2dkYi5oIiAyCgoKZXh0ZXJuICJDIiB7CiMgMzg1ICIuLi8uLi8u
Li9saWIvZ2RiLmgiCnR5cGVkZWYgaW50MzIgR0RCU2hhcGVJZDsKIyAzOTQgIi4uLy4uLy4uL2xp
Yi9nZGIuaCIKdHlwZWRlZiBlbnVtIEdEQkxheWVyVHlwZV9lCnsKICAgIEdEQkxVbmtub3duPTAs
CiAgICBHREJMVG9wb0FyYywKICAgIEdEQkxUb3BvQXJlYSwKICAgIEdEQkxUb3BvTm9kZSwKICAg
IEdEQkxXaG9sZVBvbHlnb24sCiAgICBHREJMUG9pbnQsCiAgICBHREJMTGluZSwKICAgIEdEQkxU
YWJsZQp9IEdEQkxheWVyVHlwZTsKCgoKCgpzdHJ1Y3QgR0RCTGF5ZXJfdDsKCgp0eXBlZGVmIHN0
cnVjdCB7CgogIGNoYXIgVW5pdHNbMjBdOwoKCiAgaW50IE5TdHJ1Y3R1cmU7CiAgaW50IE5WZXJ0
ZXg7CiAgZG91YmxlIFhTdGFydDsKICBkb3VibGUgWVN0YXJ0OwogIGRvdWJsZSBYRW5kOwogIGRv
dWJsZSBZRW5kOwogIGRvdWJsZSBzY2FsZTsKCgogIEZJTEUgKmZwOwogIGludCBzZWc7CiAgaW50
IGxhc3Rfc3RydWN0LAogICAgICAgICAgICBuZXh0X3N0cnVjdCwKCiAgICAgICAgICAgIGJ1ZmZl
clsxMjhdOwogIGxvbmcgbGFzdF9ibG9jazsKCiAgICBzdHJ1Y3QgR0RCTGF5ZXJfdCAqaExheWVy
Owp9IFZJbmZvX3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBhY2Nlc3M7CiAgRklMRSAq
ZnA7CiAgaW50IHNlZ251bTsKICBGSUxFICp0ZXh0X2ZwOwoKCiAgY2hhciAqY2JfYnVmZmVyOwog
IGludCBjaGFyX29mZnNldDsKICBpbnQgc2VnX29mZnNldDsKfSBUSW5mb190OwojIDQ2NiAiLi4v
Li4vLi4vbGliL2dkYi5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgU2xhbnRSYW5nZUZzdFBp
eGVsOwogICAgaW50IFNsYW50UmFuZ2VMYXN0UGl4ZWw7CiAgICBmbG9hdCBGc3RQaXhlbExhdDsK
ICAgIGZsb2F0IE1pZFBpeGVsTGF0OwogICAgZmxvYXQgTHN0UGl4ZWxMYXQ7CiAgICBmbG9hdCBG
c3RQaXhlbExvbmc7CiAgICBmbG9hdCBNaWRQaXhlbExvbmc7CiAgICBmbG9hdCBMc3RQaXhlbExv
bmc7Cn0gQW5jaWxsYXJ5RGF0YV90OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgY2hhciBJZGVudGlm
aWVyWzE3XTsKICAgIGNoYXIgRmFjaWxpdHlbMTddOwogICAgY2hhciBFbGxpcHNvaWRbMTddOwog
ICAgZG91YmxlIEVxdWF0b3JpYWxSYWRpdXM7CiAgICBkb3VibGUgUG9sYXJSYWRpdXM7CiAgICBk
b3VibGUgSW5jaWRlbmNlQW5nbGU7CiAgICBkb3VibGUgUGl4ZWxTcGFjaW5nOwogICAgZG91Ymxl
IExpbmVTcGFjaW5nOwogICAgZG91YmxlIENsb2NrQW5nbGU7CgogICAgaW50IE51bWJlckJsb2Nr
RGF0YTsKICAgIGludDMyIE51bWJlckRhdGE7CgogICAgQW5jaWxsYXJ5RGF0YV90ICpMaW5lOwp9
IFJhZGFyU2VnX3Q7CiMgNTAyICIuLi8uLi8uLi9saWIvZ2RiLmgiCnR5cGVkZWYgc3RydWN0CnsK
ICAgIGRvdWJsZSBDaGFuZ2VJbkF0dGl0dWRlOwogICAgZG91YmxlIENoYW5nZUVhcnRoU2F0ZWxs
aXRlRGlzdDsKCn0gQXR0aXR1ZGVMaW5lX3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBkb3VibGUg
Um9sbDsKICAgIGRvdWJsZSBQaXRjaDsKICAgIGRvdWJsZSBZYXc7CiAgICBpbnQzMiBOdW1iZXJP
ZkxpbmU7CgogICAgaW50IE51bWJlckJsb2NrRGF0YTsKICAgIEF0dGl0dWRlTGluZV90ICpMaW5l
OwoKfSBBdHRpdHVkZVNlZ190OwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewoKICAgIGludCBuU2Nh
bkxpbmVOdW07CiAgICBpbnQgblN0YXJ0U2NhblRpbWVHTVRNc2VjOwogICAgdW5zaWduZWQgY2hh
ciBhYnlTY2FuTGluZVF1YWxpdHlbMTBdOwogICAgdW5zaWduZWQgY2hhciBhYWJ5QmFkQmFuZElu
ZGljYXRvcnNbNV1bMl07CiAgICB1bnNpZ25lZCBjaGFyIGFieVNhdGVsbGl0ZVRpbWVDb2RlWzhd
OwoKCiAgICBpbnQgYW5UYXJnZXRUZW1wRGF0YVszXTsKICAgIGludCBhblRhcmdldFNjYW5EYXRh
WzNdOwogICAgaW50IGFuU3BhY2VTY2FuRGF0YVs1XTsKCn0gQXZocnJMaW5lX3Q7Cgp0eXBlZGVm
IHN0cnVjdAp7CgogICAgY2hhciBzekltYWdlRm9ybWF0WzUwXTsKICAgIGludCBuSW1hZ2VYU2l6
ZTsKICAgIGludCBuSW1hZ2VZU2l6ZTsKICAgIFRCb29sIGJJc0FzY2VuZGluZzsKICAgIFRCb29s
IGJJc0ltYWdlUm90YXRlZDsKCgogICAgY2hhciBzek9yYml0TnVtYmVyWzE3XTsKICAgIGNoYXIg
c3pBc2NlbmREZXNjZW5kTm9kZUZsYWdbMTddOwogICAgY2hhciBzekVwb2NoWWVhckFuZERheVsx
N107CiAgICBjaGFyIHN6RXBvY2hUaW1lV2l0aGluRGF5WzE3XTsKICAgIGNoYXIgc3pUaW1lRGlm
ZlN0YXRpb25TYXRlbGxpdGVNc2VjWzE3XTsKICAgIGNoYXIgc3pBY3R1YWxTZW5zb3JTY2FuUmF0
ZVsxN107CiAgICBjaGFyIHN6SWRlbnRPZk9yYml0SW5mb1NvdXJjZVsxN107CiAgICBjaGFyIHN6
SW50ZXJuYXRpb25hbERlc2lnbmF0b3JbMTddOwogICAgY2hhciBzek9yYml0TnVtQXRFcG9jaFsx
N107CiAgICBjaGFyIHN6SnVsaWFuRGF5QXNjZW5kTm9kZVsxN107CiAgICBjaGFyIHN6RXBvY2hZ
ZWFyWzE3XTsKICAgIGNoYXIgc3pFcG9jaE1vbnRoWzE3XTsKICAgIGNoYXIgc3pFcG9jaERheVsx
N107CiAgICBjaGFyIHN6RXBvY2hIb3VyWzE3XTsKICAgIGNoYXIgc3pFcG9jaE1pbnV0ZVsxN107
CiAgICBjaGFyIHN6RXBvY2hTZWNvbmRbMTddOwogICAgY2hhciBzelBvaW50T2ZBcmllc0RlZ3Jl
ZXNbMTddOwogICAgY2hhciBzekFub21hbGlzdGljUGVyaW9kWzE3XTsKICAgIGNoYXIgc3pOb2Rh
bFBlcmlvZFsxN107CiAgICBjaGFyIHN6RWNjZW50cmljaXR5WzE3XTsKICAgIGNoYXIgc3pBcmd1
bWVudE9mUGVyaWdlZVsxN107CiAgICBjaGFyIHN6UkFBTlsxN107CiAgICBjaGFyIHN6SW5jbGlu
YXRpb25bMTddOwogICAgY2hhciBzek1lYW5Bbm9tYWx5WzE3XTsKICAgIGNoYXIgc3pTZW1pTWFq
b3JBeGlzWzE3XTsKCgoKCiAgICBpbnQgblJlY29yZFNpemU7CiAgICBpbnQgbkJsb2NrU2l6ZTsK
ICAgIGludCBuTnVtUmVjb3Jkc1BlckJsb2NrOwogICAgaW50IG5OdW1CbG9ja3M7CiAgICBpbnQg
bk51bVNjYW5saW5lUmVjb3JkczsKCgogICAgQXZocnJMaW5lX3QgKkxpbmU7Cgp9IEF2aHJyU2Vn
X3Q7CgoKCgoKdHlwZWRlZiB1bmlvbgp7CiAgIEF0dGl0dWRlU2VnX3QgKkF0dGl0dWRlU2VnOwog
ICBSYWRhclNlZ190ICpSYWRhclNlZzsKICAgQXZocnJTZWdfdCAqQXZocnJTZWc7Cgp9IE9yYml0
RGF0YV90OwoKdHlwZWRlZiBlbnVtIHsgT3JiTm9uZSwgT3JiQXR0aXR1ZGUsIE9yYkxhdExvbmcs
IE9yYkF2aHJyIH0gT3JiaXRUeXBlOwp0eXBlZGVmIHN0cnVjdAp7CiAgICBjaGFyIFNhdGVsbGl0
ZURlc2NbMzNdOwogICAgY2hhciBTY2VuZUlEWzMzXTsKCiAgICBjaGFyIFNhdGVsbGl0ZVNlbnNv
clsxN107CiAgICBjaGFyIFNlbnNvck5vWzNdOwogICAgY2hhciBEYXRlSW1hZ2VUYWtlblsyM107
CiAgICBUQm9vbCBTdXBTZWdFeGlzdDsKICAgIGRvdWJsZSBGaWVsZE9mVmlldzsKICAgIGRvdWJs
ZSBWaWV3QW5nbGU7CiAgICBkb3VibGUgTnVtQ29sQ2VudHJlOwogICAgZG91YmxlIFJhZGlhbFNw
ZWVkOwogICAgZG91YmxlIEVjY2VudHJpY2l0eTsKICAgIGRvdWJsZSBIZWlnaHQ7CiAgICBkb3Vi
bGUgSW5jbGluYXRpb247CiAgICBkb3VibGUgVGltZUludGVydmFsOwogICAgZG91YmxlIE51bUxp
bmVDZW50cmU7CiAgICBkb3VibGUgTG9uZ0NlbnRyZTsKICAgIGRvdWJsZSBBbmd1bGFyU3BkOwog
ICAgZG91YmxlIEFzY05vZGVMb25nOwogICAgZG91YmxlIEFyZ1BlcmlnZWU7CiAgICBkb3VibGUg
TGF0Q2VudHJlOwogICAgZG91YmxlIEVhcnRoU2F0ZWxsaXRlRGlzdDsKICAgIGRvdWJsZSBOb21p
bmFsUGl0Y2g7CiAgICBkb3VibGUgVGltZUF0Q2VudHJlOwogICAgZG91YmxlIFNhdGVsbGl0ZUFy
ZzsKCiAgICBkb3VibGUgWENlbnRyZTsKICAgIGRvdWJsZSBZQ2VudHJlOwogICAgZG91YmxlIFV0
bVlDZW50cmU7CiAgICBkb3VibGUgVXRtWENlbnRyZTsKICAgIGRvdWJsZSBQaXhlbFJlczsKICAg
IGRvdWJsZSBMaW5lUmVzOwogICAgVEJvb2wgQ29ybmVyQXZhaWw7CiAgICBjaGFyIE1hcFVuaXRb
MTddOwogICAgZG91YmxlIFhVTDsKICAgIGRvdWJsZSBZVUw7CiAgICBkb3VibGUgWFVSOwogICAg
ZG91YmxlIFlVUjsKICAgIGRvdWJsZSBYTFI7CiAgICBkb3VibGUgWUxSOwogICAgZG91YmxlIFhM
TDsKICAgIGRvdWJsZSBZTEw7CiAgICBkb3VibGUgVXRtWVVMOwogICAgZG91YmxlIFV0bVhVTDsK
ICAgIGRvdWJsZSBVdG1ZVVI7CiAgICBkb3VibGUgVXRtWFVSOwogICAgZG91YmxlIFV0bVlMUjsK
ICAgIGRvdWJsZSBVdG1YTFI7CiAgICBkb3VibGUgVXRtWUxMOwogICAgZG91YmxlIFV0bVhMTDsK
CiAgICBkb3VibGUgTGF0Q2VudHJlRGVnOwogICAgZG91YmxlIExvbmdDZW50cmVEZWc7CiAgICBk
b3VibGUgTGF0VUw7CiAgICBkb3VibGUgTG9uZ1VMOwogICAgZG91YmxlIExhdFVSOwogICAgZG91
YmxlIExvbmdVUjsKICAgIGRvdWJsZSBMYXRMUjsKICAgIGRvdWJsZSBMb25nTFI7CiAgICBkb3Vi
bGUgTGF0TEw7CiAgICBkb3VibGUgTG9uZ0xMOwoKICAgIGRvdWJsZSBTUENvZWZmMUJbMzldOwog
ICAgaW50IFNQQ29lZmZTZ1s0XTsKCiAgICBpbnQgSW1hZ2VSZWNvcmRMZW5ndGg7CiAgICBpbnQg
TnVtYmVySW1hZ2VMaW5lOwogICAgaW50IE51bWJlckJ5dGVQZXJQaXhlbDsKICAgIGludCBOdW1i
ZXJTYW1wbGVQZXJMaW5lOwogICAgaW50IE51bWJlclByZWZpeEJ5dGVzOwogICAgaW50IE51bWJl
clN1ZmZpeEJ5dGVzOwogICAgaW50IFNQTkNvZWZmOwoKICAgIE9yYml0VHlwZSBUeXBlOwogICAg
T3JiaXREYXRhX3QgKk9yYml0TGluZTsKCn0gRXBoZW1lcmlzU2VnX3Q7CiMgNjk4ICIuLi8uLi8u
Li9saWIvZ2RiLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBkb3VibGUgTjB4MjsKICAgICAg
ICBkb3VibGUgYWE7CiAgICAgICAgZG91YmxlIFNtQUxQSEE7CiAgICAgICAgZG91YmxlIGJiOwog
ICAgICAgIGRvdWJsZSBDMDsKICAgICAgICBkb3VibGUgY2M7CiAgICAgICAgZG91YmxlIENPU19L
SEk7CiAgICAgICAgZG91YmxlIERFTFRBX0dBTU1BOwogICAgICAgIGRvdWJsZSBHQU1NQTsKICAg
ICAgICBkb3VibGUgS18xOwogICAgICAgIGRvdWJsZSBMMDsKICAgICAgICBkb3VibGUgUDsKICAg
ICAgICBkb3VibGUgUTsKICAgICAgICBkb3VibGUgVEFVOwogICAgICAgIGRvdWJsZSBUSEVUQTsK
ICAgICAgICBkb3VibGUgVEhFVEFfU0VDOwogICAgICAgIGRvdWJsZSBYMDsKICAgICAgICBkb3Vi
bGUgWTA7CiAgICAgICAgZG91YmxlIGRlbGg7CiAgICAgICAgZG91YmxlIENPRUZfWTI7CiAgICAg
ICAgaW50IG5HQ1BDb3VudDsKICAgICAgICBpbnQgbkVwaGVtZXJpc1NlZ05vOwogICAgICAgIGlu
dCBuQXR0aXR1ZGVGbGFnOwogICAgICAgIGNoYXIgR0NQVW5pdFsxN107CiAgICAgICAgY2hhciBH
Q1BNZWFuSHRGbGFnOwogICAgICAgIGRvdWJsZSBkZkdDUE1lYW5IdDsKICAgICAgICBkb3VibGUg
ZGZHQ1BNaW5IdDsKICAgICAgICBkb3VibGUgZGZHQ1BNYXhIdDsKICAgICAgICBpbnQgbkdDUElk
c1syNTZdOwogICAgICAgIGludCBuUGl4ZWxbMjU2XSxuTGluZVsyNTZdOwogICAgICAgIGRvdWJs
ZSBkZkVsZXZbMjU2XTsKICAgICAgICBkb3VibGUgKlFkZWx0YXI7CiAgICAgICAgZG91YmxlICpI
ZGVsdGF0OwogICAgICAgIGNoYXIgU2Vuc29yWzE2XTsKICAgICAgICBpbnQgblNlbnNvcjsKICAg
ICAgICBFcGhlbWVyaXNTZWdfdCAqT3JiaXRQdHI7CiAgICAgICAgUHJvakluZm9fdCAqc0dlb1Ry
YW5zZm9ybTsKICAgICAgICBUQm9vbCBSYXdUb0dlbzsKfSBTUklUSW5mb190OwoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgVEJvb2wgYk5JVEZSUEM7CiAgICBpbnQgbkNvZWZmOwogICAgaW50IG5Q
aXhlbHMsIG5MaW5lczsKICAgIGRvdWJsZSAqcGFkZlBpeGVsTnVtOwogICAgZG91YmxlICpwYWRm
UGl4ZWxEZW47CiAgICBkb3VibGUgKnBhZGZMaW5lTnVtOwogICAgZG91YmxlICpwYWRmTGluZURl
bjsKICAgIGRvdWJsZSBkZlhPZmYsIGRmWFNjYWxlOwogICAgZG91YmxlIGRmWU9mZiwgZGZZU2Nh
bGU7CiAgICBkb3VibGUgZGZaT2ZmLCBkZlpTY2FsZTsKICAgIGRvdWJsZSBkZlBPZmYsIGRmUFNj
YWxlOwogICAgZG91YmxlIGRmTE9mZiwgZGZMU2NhbGU7CiAgICBkb3VibGUgZGZYQWRqdXN0WzNd
OwogICAgZG91YmxlIGRmWUFkanVzdFszXTsKICAgIGNoYXIgKm1hcHVuaXQ7CiAgICBQcm9qSW5m
b190ICpzUHJvamVjdGlvbjsKfSBSRkluZm9fdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGlu
dCBuUGl4ZWxzOwogICAgaW50IG5MaW5lczsKICAgIGRvdWJsZSBkZmZvY2FsOwogICAgZG91Ymxl
IGFkZlhZWlszXTsKICAgIGRvdWJsZSBhZGZPUEtbM107CiAgICBkb3VibGUgYWRmeDNkWzNdOwog
ICAgZG91YmxlIGFkZnkzZFszXTsKICAgIGRvdWJsZSBhZGZ6M2RbM107CiAgICBkb3VibGUgYWRm
cGl4Mm1tWzRdOwogICAgZG91YmxlIGFkZmxpbjJtbVs0XTsKICAgIGRvdWJsZSBhZGZtbTJwaXhb
NF07CiAgICBkb3VibGUgYWRmbW0ybGluWzRdOwogICAgZG91YmxlIGFkZlByb2ZmWzJdOwogICAg
ZG91YmxlIGFkZlJhZGlzdFs4XTsKICAgIGRvdWJsZSBhZGZEZWNlbnRbNF07CiAgICBkb3VibGUg
ZGZSYWRpdXM7CiAgICBkb3VibGUgZGZyZmY7CiAgICBkb3VibGUgZGZHQ1BNaW5IdDsKICAgIGRv
dWJsZSBkZkdDUE1heEh0OwogICAgVEJvb2wgYlByaW5PZmY7CiAgICBUQm9vbCBiRGlzdG9ydDsK
ICAgIFRCb29sIGJEZWNlbnRlcjsKICAgIFRCb29sIGJSYWRpdXM7CiAgICBjaGFyICp1dG11bml0
OwogICAgY2hhciAqbWFwdW5pdDsKICAgIFByb2pJbmZvX3QgKnNQcm9qZWN0aW9uOwp9IEFQSW5m
b190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgRklMRSAqZnBfaW47CiAgICBGSUxFICpmcF9v
dXQ7CgogICAgY2hhciAqcHN6RmlsZU9wdGlvbnM7CgogICAgY2hhciBzekZpbGVUeXBlWzE2XTsK
CiAgICBpbnQgKnBhbklXOwoKICAgIGludCAqYXBhbklDWzRdOwogICAgaW50IHBhbkNvdW50SUNb
NF07CgogICAgaW50ICpwYW5HRU87CiAgICBpbnQgbkNvdW50R0VPOwoKICAgIGludCAqcGFuTFVU
OwogICAgaW50IG5Db3VudExVVDsKCiAgICBpbnQgKnBhbkJJVDsKICAgIGludCBuQ291bnRCSVQ7
CgogICAgaW50ICpwYW5WRUM7CiAgICBpbnQgbkNvdW50VkVDOwoKICAgIGludCAqcGFuT1JCOwog
ICAgaW50IG5Db3VudE9SQjsKCiAgICBpbnQgKnBhblNJRzsKICAgIGludCBuQ291bnRTSUc7Cgog
ICAgaW50ICpwYW5URVg7CiAgICBpbnQgbkNvdW50VEVYOwoKICAgIGludCAqcGFuUENUOwogICAg
aW50IG5Db3VudFBDVDsKCiAgICBpbnQgKnBhbkJJTjsKICAgIGludCBuQ291bnRCSU47CgogICAg
aW50ICpwYW5HQ1A7CiAgICBpbnQgbkNvdW50R0NQOwogICAgaW50IG5PdXRwdXRGb3JtYXRUeXBl
OwogICAgVEJvb2wgYkNsaXBWZWN0b3JzOwogICAgVEJvb2wgYkNsaXBHQ1BzOwoKfSBGaWxlVHJh
bnNmZXJfdDsKCgoKCgp2b2lkIENsZWFyRmlsZVRyYW5zZmVyU3RydWN0KEZpbGVUcmFuc2Zlcl90
ICpwc0ZUKTsKCnZvaWQgQWxsb2NhdGVDaGFubmVsTGlzdChpbnQgKnBhbkNvdW50SUMsaW50ICph
cGFuSUNbNF0sCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5OdW1DaGFuLGludCAqKnBhbkRC
SUMsaW50ICoqcGFuREJPQyk7Cgp2b2lkIERlYWxsb2NhdGVDaGFubmVsTGlzdChpbnQgKipwYW5E
QklDLGludCAqKnBhbkRCT0MpOwoKCnZvaWQgVHJhbnNmZXJJbWFnZXJ5KEZJTEUgKmZwX2luLEZJ
TEUgKmZwX291dCxpbnQgbk91dHB1dEZvcm1hdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgIGlu
dCBuQ291bnRJQyxpbnQgKnBhbklDLGludCAqcGFuSVcsaW50ICpwYW5EQk9DLAogICAgICAgICAg
ICAgICAgICAgICBjaGFyICpwc3pEZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgUENJ
Q291bnRlciBwZm5Db3VudGVyICk7Cgp2b2lkIFRyYW5zZmVyQml0TWFwcyhGSUxFKiBmcF9pbixG
SUxFKiBmcF9vdXQsCiAgICAgICAgICAgICAgICAgICAgIGludCBuT3V0cHV0Rm9ybWF0VHlwZSxp
bnQgbkNvdW50QklULAogICAgICAgICAgICAgICAgICAgICBpbnQgKnBhbkJJVCxpbnQgKnBhbklX
LAogICAgICAgICAgICAgICAgICAgICBjaGFyICpwc3pEZXNjcmlwdGlvbixQQ0lDb3VudGVyIHBm
bkNvdW50ZXIpOwoKdm9pZCBUcmFuc2ZlclZlY3RvcnMoRklMRSAqZnBfaW4sRklMRSAqZnBfb3V0
LGludCBuT3V0cHV0Rm9ybWF0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW50IG5Db3VudFZF
QyxpbnQgKnBhblZFQyxpbnQgKnBhbklXLFRCb29sIGJDbGlwLAogICAgICAgICAgICAgICAgICAg
ICBjaGFyICpwc3pEZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgUENJQ291bnRlciBw
Zm5Db3VudGVyKTsKCnZvaWQgVHJhbnNmZXJHQ1BzKEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxp
bnQgbk91dHB1dEZvcm1hdFR5cGUsCiAgICAgICAgICAgICAgICAgIGludCBuQ291bnRHQ1AsaW50
ICpwYW5HQ1AsaW50ICpwYW5JVywKICAgICAgICAgICAgICAgICAgY2hhciAqcHN6RGVzY3JpcHRp
b24pOwoKdm9pZCBUcmFuc2ZlclRFWHMoRklMRSAqZnBfaW4sRklMRSAqZnBfb3V0LGludCBuT3V0
cHV0Rm9ybWF0VHlwZSwKICAgICAgICAgICAgICAgICAgaW50IG5Db3VudFRFWCxpbnQgKnBhblRF
WCxpbnQgKnBhbklXLAogICAgICAgICAgICAgICAgICBjaGFyICpwc3pEZXNjcmlwdGlvbik7Cgp2
b2lkIFRyYW5zZmVyQklOcyhGSUxFICpmcF9pbixGSUxFICpmcF9vdXQsaW50IG5PdXRwdXRGb3Jt
YXRUeXBlLAogICAgICAgICAgICAgICAgICBpbnQgbkNvdW50QklOLGludCAqcGFuQklOLGludCAq
cGFuSVcsCiAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekRlc2NyaXB0aW9uKTsKCnZvaWQgVHJh
bnNmZXJQQ1RzKEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxpbnQgbk91dHB1dEZvcm1hdFR5cGUs
CiAgICAgICAgICAgICAgICAgIGludCBuQ291bnRQQ1QsaW50ICpwYW5QQ1QsCiAgICAgICAgICAg
ICAgICAgIGNoYXIgKnBzekRlc2NyaXB0aW9uKTsKCnZvaWQgVHJhbnNmZXJMVVRzKEZJTEUgKmZw
X2luLEZJTEUgKmZwX291dCxpbnQgbk91dHB1dEZvcm1hdFR5cGUsCiAgICAgICAgICAgICAgICAg
IGludCBuQ291bnRMVVQsaW50ICpwYW5MVVQsCiAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekRl
c2NyaXB0aW9uKTsKCnZvaWQgVHJhbnNmZXJTSUdzKEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxp
bnQgbk91dHB1dEZvcm1hdFR5cGUsCiAgICAgICAgICAgICAgICAgIGludCBuQ291bnRTSUcsaW50
ICpwYW5TSUcsaW50ICpwYW5JVywKICAgICAgICAgICAgICAgICAgY2hhciAqcHN6RGVzY3JpcHRp
b24pOwoKdm9pZCBUcmFuc2Zlck9SQnMoRklMRSAqZnBfaW4sRklMRSAqZnBfb3V0LGludCBuT3V0
cHV0Rm9ybWF0VHlwZSwKICAgICAgICAgICAgICAgICAgaW50IG5Db3VudE9SQixpbnQgKnBhbk9S
QixpbnQgKnBhbklXLAogICAgICAgICAgICAgICAgICBjaGFyICpwc3pEZXNjcmlwdGlvbik7Cgp2
b2lkIFVwZGF0ZUNoYW5uZWxIaXN0b3J5KEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxpbnQgbkNv
dW50SUMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwYW5JQyxpbnQgKnBhbkRCT0Ms
Y2hhciAqcHN6RGVzY3JpcHRpb24pOwoKdm9pZCBVcGRhdGVTZWdtZW50SGlzdG9yeShGSUxFICpm
cF9pbixGSUxFICpmcF9vdXQsaW50IG5Db3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKnBhbkluU2VnLGludCAqcGFuT3V0U2VnLGNoYXIgKnBzekRlc2NyaXB0aW9uKTsKCgoKCgp0
eXBlZGVmIHN0cnVjdAp7CiAgaW50IFR5cGU7CiAgY2hhciAqTmFtZTsKICB1bnNpZ25lZCBjaGFy
ICpEYXRhQ2FjaGU7CiAgaW50IENhY2hlU2l6ZTsKICBjaGFyICoqRGlyRW50cnk7CiAgaW50IERp
ckVudHJpZXM7CiAgRklMRSAqZnA7CiAgaW50IGZwUHJpdmF0ZTsKfSBHREJUZXN0SW5mb190OwoK
dHlwZWRlZiBHREJUZXN0SW5mb190IEdEQlRlc3RJbmZvOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAg
ZG91YmxlIHg7CiAgICBkb3VibGUgeTsKfSBHREJWZXJ0ZXgyRDsKCgpleHRlcm4gR0RCVmVydGV4
IGdzR0RCVmVydGV4TWluOwpleHRlcm4gR0RCVmVydGV4IGdzR0RCVmVydGV4TWF4OwpleHRlcm4g
R0RCVmVydGV4IGdzR0RCVmVydGV4WmVybzsKCgp0eXBlZGVmIHVpbnQzMiBHREJGbGFnczsKdHlw
ZWRlZiB1aW50MzIgR0RCSGludHM7CgoKCgoKCnR5cGVkZWYgdW5pb24KewogIGZsb2F0IGZGbG9h
dDsKICBkb3VibGUgZERvdWJsZTsKICBjaGFyICpwc3pTdHJpbmc7CiAgaW50MzIgbkludGVnZXI7
CiAgaW50MzIgKnBhbkludHM7Cn0gR0RCRmllbGQsICpHREJSZWNvcmQ7Cgp0eXBlZGVmIGludCBH
REJGaWVsZFR5cGU7CiMgOTY1ICIuLi8uLi8uLi9saWIvZ2RiLmgiCnR5cGVkZWYgc3RydWN0CnsK
ICAgIGNoYXIgKnBzek5hbWU7CiAgICBjaGFyICpwc3pEZXNjOwogICAgR0RCRmllbGRUeXBlIGVU
eXBlOwogICAgR0RCRmllbGQgdURlZmF1bHQ7CiAgICBjaGFyICpwc3pGb3JtYXQ7Cn0gR0RCRGVm
bjsKCgoKCgp0eXBlZGVmIGludCBHREJBbmdsZVVuaXQ7CiMgOTkwICIuLi8uLi8uLi9saWIvZ2Ri
LmgiCnN0cnVjdCBHREJHcm91cEluZGV4X3Q7CnN0cnVjdCBHREJJbmZvX3M7CnN0cnVjdCBHREJR
VDsKc3RydWN0IEdEQlRvcG9JbmZvX3Q7CgpzdHJ1Y3QgR0RCTGF5ZXJfdAp7CiAgICBzdHJ1Y3Qg
R0RCSW5mb19zICpwc01ldGhvZHM7CiAgICB2b2lkICpwTmF0aXZlSW5mbzsKICAgIEZJTEUgKmZw
OwogICAgaW50IG5TZWdtZW50OwogICAgY2hhciAqcHN6TmFtZTsKICAgIGNoYXIgKnBzekRlc2M7
CgoKCiAgICBHREJGbGFncyBmRmxhZ3M7CgoKCiAgICBpbnQgbkZpZWxkczsKICAgIEdEQkRlZm4g
KnBhc0RlZm47CgoKCiAgICBDQ0hIYW5kbGUgaE1vZENhY2hlOwogICAgQ0NISGFuZGxlIGhSZWFk
Q2FjaGU7CiAgICBDQ0hIYW5kbGUgaERlbGV0ZWRDYWNoZTsKICAgIGludCBuTW9kQ2FjaGVPcHRp
b25zOwogICAgaW50IG5SZWFkQ2FjaGVPcHRpb25zOwogICAgaW50IG5SZWFkQ2FjaGVTaXplOwog
ICAgaW50IG5Nb2RDYWNoZVNpemU7CgoKCiAgICBUQm9vbCBiTm9DYWNoZTsKICAgIFRCb29sIGIy
RDsKCgoKICAgIFRCb29sIGJFeHRlbnRzRGlydHk7CiAgICBHREJWZXJ0ZXggc01pbjsKICAgIEdE
QlZlcnRleCBzTWF4OwoKCgogICAgaW50IGlSZXBDb2RlRmllbGQ7CiAgICBpbnQgaUdyb3VwSWRG
aWVsZDsKICAgIGludCBpQ2hpbGRMaXN0RmllbGQ7CiAgICBpbnQgaVRleHRGaWVsZDsKICAgIGlu
dCBpQW5nbGVGaWVsZDsKICAgIGludCBpSGVpZ2h0RmllbGQ7CgoKCgogICAgR0RCQW5nbGVVbml0
IGVBbmdsZVVuaXQ7CgoKCgogICAgc3RydWN0IEdEQkdyb3VwSW5kZXhfdCAqaEdyb3VwSW5kZXg7
CgoKCiAgICBzdHJ1Y3QgR0RCUVQgKnBzUXVhZFRyZWU7CgoKCgogICAgaW50IG5TaGFwZUNvdW50
OwogICAgaW50IGJTaGFwZUNvdW50VmFsaWQ7CgogICAgaW50IG5Qb2ludHNDb3VudDsKICAgIGlu
dCBuTGluZXNDb3VudDsKICAgIGludCBuQXJlYXNDb3VudDsKICAgIFRCb29sIGJTaGFwZXNDb3Vu
dFR5cGVWYWxpZDsKCgoKCiAgICBzdHJ1Y3QgR0RCVG9wb0luZm9fdCAqcHNUb3BvOwoKICAgIGlu
dCBpWENvb3JkRmllbGQ7CiAgICBpbnQgaVlDb29yZEZpZWxkOwoKCgoKICAgIEdEQlNoYXBlSWQg
KnBhaFNlbGVjdGVkSWRzOwogICAgaW50IG5TZWxlY3RlZENvdW50OwogICAgaW50IG5Mb2NrZWRT
ZWxlY3Rpb25Db3VudDsKCiAgICBUQm9vbCBiU3luY2luZzsKCiAgICBzdHJ1Y3QgR0RCVmVjVW5k
b0xldmVsX3QgKnBzVlVMOwogICAgdm9pZCAqcEpPTFRWZWN0b3JMYXllcjsKCgoKCiAgICBpbnQg
aVJpbmdTdGFydEZpZWxkOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgR0RCTGF5ZXJfdCAqIEdEQkxheWVy
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdm9pZCAqbm90aGluZzsKfSBHREJSc3Q7Cgp0eXBlZGVm
IHN0cnVjdCB7CiAgICBkb3VibGUgZGZCb3VuZGFyeTsKICAgIGRvdWJsZSBkZlZhbHVlOwp9IEdE
QkJyZWFrUG9pbnRMVVRfdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGRvdWJsZSBkZkJvdW5kYXJ5
OwogICAgdW5zaWduZWQgY2hhciBuUmVkOwogICAgdW5zaWduZWQgY2hhciBuR3JlZW47CiAgICB1
bnNpZ25lZCBjaGFyIG5CbHVlOwp9IEdEQkJyZWFrUG9pbnRQQ1RfdDsKCnR5cGVkZWYgc3RydWN0
CnsKICAgIEdEQlZlcnRleCAqcGFzVmVydGljZXM7CiAgICBpbnQgbkNvdW50OwogICAgR0RCRmll
bGQgKnBhc0ZpZWxkczsKfSBHREJTaGFwZTsKCnR5cGVkZWYgc3RydWN0CnsKICAgIEdEQlZlcnRl
eCAqcGFzVmVydGljZXM7CiAgICBpbnQgbkNvdW50OwogICAgR0RCRmllbGQgKiBwYXNGaWVsZHM7
CiAgICBHREJEZWZuICpwYXNEZWZuOwogICAgaW50IG5GaWVsZHM7Cn0gR0RCRmF0U2hhcGU7CgoK
CgoKdHlwZWRlZiBzdHJ1Y3QgR0RCQ2Fwc190CnsKCgoKICAgIFRCb29sIGJIYXNWZXJ0aWNlczsK
ICAgIFRCb29sIGJWZXJ0aWNlc09ubHk7CgoKCiAgICBUQm9vbCBiSGFzQXR0cmlidXRlczsKICAg
IFRCb29sIGJBdHRyaWJ1dGVzT25seTsKCgoKCgoKICAgIFRCb29sIGJBZGRGaWVsZDsKCgoKCgoK
ICAgIFRCb29sIGJBZGRSYW5kRmllbGQ7CgoKCgogICAgVEJvb2wgYkNhbkNyZWF0ZTsKCgoKCiAg
ICBUQm9vbCBiQ2FuTW9kaWZ5OwoKCgoKCgogICAgVEJvb2wgYlJhbmRvbVVwZGF0ZTsKCgoKCgoK
ICAgIFRCb29sIGJDcmVhdGVMYXllcnM7CgoKCgoKICAgIGludCBuTWF4TGF5ZXJzOwoKCgoKICAg
IFRCb29sIGJEZWxldGVMYXllcnM7CgoKCgoKCiAgICBUQm9vbCBiQ2FuQ3JlYXRlTGF5ZXJzQXRB
bnlUaW1lOwoKCgoKICAgIFRCb29sIGJIYXNGbG9hdHM7CiAgICBUQm9vbCBiSGFzSW50czsKICAg
IFRCb29sIGJIYXNEb3VibGVzOwogICAgVEJvb2wgYkhhc0NoYXI7CiAgICBUQm9vbCBiSGFzSW50
TGlzdDsKCgoKCgogICAgVEJvb2wgYk5lZWRzRXh0ZW50czsKCgoKCgogICAgVEJvb2wgYk5lZWRz
TnVtYmVyRW50aXRpZXNQZXJMYXllcjsKCgoKCgogICAgVEJvb2wgYk5hdGl2ZUxheWVyUmV0dXJu
c0NvcHk7CgoKCgoKCiAgICBHREJEZWZuICoqcGFwYXNEZWZuOwoKCgoKICAgIFRCb29sIGJDYW5S
ZWFkUmVwVGFibGU7CiAgICBUQm9vbCBiQ2FuV3JpdGVSZXBUYWJsZTsKICAgIFRCb29sIGJDYW5X
cml0ZVJlcFRhYmxlTG9zc2xlc3NseTsKIyAxMjUxICIuLi8uLi8uLi9saWIvZ2RiLmgiCiAgICBU
Qm9vbCBiSGlkZUZyb21Vc2VyOwogICAgVEJvb2wgYkhpZGVGcm9tVXNlckluRmlsZVNlbGVjdG9y
OwoKCgoKCiAgICBUQm9vbCBiU3BhdGlhbFF1ZXJ5OwogICAgVEJvb2wgYkF0dHJpYnV0ZVF1ZXJ5
OwoKCgoKICAgIFRCb29sIGJVc2Vyc1Bhc3N3b3JkOwoKCgoKICAgIFRCb29sIGJDYW5ub3RDcmVh
dGVSc3Q7Cgp9IEdEQkNhcGFiaWxpdGllczsKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgRklMRSAq
ZnBTcmM7CiAgaW50IG5EQklDOwoKICBpbnQgblRhcmdldENoYW47CgogIFRCb29sIGJDbGVhbjsK
ICBUQm9vbCBiVXNlRm9ySGlzdG9ncmFtOwoKICBkb3VibGUgZGZSZXNGYWN0b3I7Cn0gR0RCT3Zl
cnZpZXdJbmZvX3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgRklMRSAqZnBTcmM7CiAgICBp
bnQgbkxheWVyVHlwZTsKICAgIGludCBuU3JjTGF5ZXI7CiAgICBpbnQgKnBhbkRCSVc7CgogICAg
aW50IG5Ec3RMYXllcjsKCiAgICBpbnQgbk9wdGlvbnM7CgogICAgVEJvb2wgYkNsaXBHZW87CiAg
ICBkb3VibGUgZGZDbGlwWE9mZjsKICAgIGRvdWJsZSBkZkNsaXBZT2ZmOwogICAgZG91YmxlIGRm
Q2xpcFhTaXplOwogICAgZG91YmxlIGRmQ2xpcFlTaXplOwoKICAgIHVuaW9uCiAgICB7CiAgICAg
ICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICBUQm9vbCAoKnBmblByb2NXaXRoSWQpKHN0
cnVjdCBHREJMYXllcl90KiwgR0RCU2hhcGVJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBHREJTaGFwZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0RCTGF5ZXIsIEdEQlNoYXBlICosIFRCb29sLCBUQm9vbCAqKTsKICAg
ICAgICAgICAgdm9pZCAoKnBmbk1hcHBpbmdGdW5jKShHREJMYXllciwgR0RCTGF5ZXIsIGludCAq
KTsKICAgICAgICAgICAgdm9pZCAoKnBmbkNvcHlMYXllclN0cnVjdCkoR0RCTGF5ZXIsIEdEQkxh
eWVyKTsKICAgICAgICB9IHNWT3B0OwoKICAgICAgICBzdHJ1Y3QKICAgICAgICB7CiAgICAgICAg
ICAgIHZvaWQgKCpwZm5Qcm9jZXNzVGlsZSkoIGludCwgaW50LCBpbnQsIGludCwgdm9pZCAqICk7
CiAgICAgICAgfSBzSU9wdDsKICAgIH0gdTsKfSBHREJUcmFuc2ZlckxheWVySW5mbzsKCnR5cGVk
ZWYgc3RydWN0IHsKICAgIEZJTEUgKmZwRHN0OwogICAgaW50IG5Ec3RDcmVhdGVUeXBlOwogICAg
Y2hhciAqcHN6RHN0Q3JlYXRlT3B0aW9uczsKICAgIGNoYXIgKnBzekRzdENyZWF0ZUZpbGVuYW1l
OwoKICAgIGNoYXIgKnBzelByb2Nlc3NJbmc7CiAgICBjaGFyICpwc3pQcm9jZXNzRWQ7CgogICAg
aW50IG5PcHRpb25zOwoKICAgIGludCAqcGFuREJPVzsKCiAgICBJTVBQcm9ncmVzc0Z1bmMgcGZu
UHJvZ3Jlc3M7CiAgICB2b2lkICpwUHJvZ3Jlc3NBcmc7CgogICAgaW50IG5MYXllcnM7CiAgICBH
REJUcmFuc2ZlckxheWVySW5mbyAqKnBhcHNMYXllcnM7Cgp9IEdEQlRyYW5zZmVySW5mbzsKCkdE
QlRyYW5zZmVySW5mbyAqIEdEQkNyZWF0ZVRyYW5zZmVyKCB2b2lkICk7CnZvaWQgR0RCRGVzdHJv
eVRyYW5zZmVyKCBHREJUcmFuc2ZlckluZm8gKiApOwpHREJUcmFuc2ZlckxheWVySW5mbyAqCiAg
ICAgICAgR0RCQWRkVHJhbnNmZXJMYXllciggR0RCVHJhbnNmZXJJbmZvICosIEZJTEUgKiwgaW50
LCBpbnQsIGludCAqLCBpbnQgKTsKClRCb29sIEdEQlRyYW5zZmVyTGF5ZXJzKCBHREJUcmFuc2Zl
ckluZm8gKiApOwojIDEzNzAgIi4uLy4uLy4uL2xpYi9nZGIuaCIKdHlwZWRlZiBlbnVtIHsKICBH
REJTQWxsLAogIEdEQlNOZWFyZXN0LAogIEdEQlNOZWFyZXN0V2l0aERpc3RhbmNlLAogIEdEQlNQ
b2x5Z29uc0luc2lkZSwKICBHREJTUmFkaXVzLAogIEdEQlNSZWN0LAogIEdEQlNJbnNpZGVQb2x5
LAogIEdEQlNDdXRQb2x5LAogIEdEQlNPdXRzaWRlUG9seSwKICBHREJTQXR0cmlidXRlLAogIEdE
QlNJbmNsdXNpdmUsCiAgR0RCU05lYXJlc3ROb3RJbkxpc3QsCiAgR0RCU05lYXJlc3QzRCwKICBH
REJTTmVhcmVzdE5vdEluTGlzdDNELAogIEdEQlNSZXByb2plY3RSZWN0LAogIEdEQlNSZXByb2pl
Y3ROZWFyZXN0LAogIEdEQlNSYWRpdXNOZWFyZXN0LAogIEdEQlNSYWRpdXNOb3RJbkxpc3QsCiAg
R0RCU1Byb3Blcmx5SW5zaWRlUG9seQoKCn0gR0RCU2VhcmNoVHlwZTsKCgoKCnR5cGVkZWYgc3Ry
dWN0IEdEQkluZm9fcwp7CiAgICB2b2lkICgqU2l6ZUluZm8pICggRklMRSAqLCBpbnQgKiwgaW50
ICosIGludCAqICk7CiAgICBpbnQgKCpDaGFuWFNpemUpICggRklMRSAqICk7CiAgICBpbnQgKCpD
aGFuWVNpemUpICggRklMRSAqICk7CiAgICBpbnQgKCpDaGFuTnVtKSAoIEZJTEUgKiApOwogICAg
aW50ICgqQ2hhblR5cGUpICggRklMRSAqLCBpbnQgKTsKICAgIHZvaWQgKCpCeXRlQ2hhbklPKSAo
IEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBpbnQsIGludCAqICk7
CiAgICB2b2lkICgqSW50Q2hhbklPKSAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiAqLCBpbnQsIGlu
dCwgaW50LCBpbnQgKiApOwogICAgdm9pZCAoKlJlYWxDaGFuSU8pICggRklMRSAqLCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0ICosIGludCwgaW50LCBpbnQsIGludCAqICk7CiAgICBGSUxFICooKkNyZWF0ZSkgKCBj
aGFyICosIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQsIGNoYXIgKiApOwogICAgaW50ICgqR2VvcmVmSU8pICggRklMRSAqLCBpbnQsIGNo
YXIgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqICk7CiAgICBpbnQgKCpHZW9yZWZJTzIpICggRklM
RSAqLCBpbnQsIGNoYXIgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqICwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKik7CiAgICBpbnQgKCpI
aW50KSAoIEZJTEUgKiApOwogICAgaW50ICgqQ2hhbkRlc2NJTykgKCBGSUxFICosIGludCwgaW50
LCBjaGFyICogKTsKICAgIHZvaWQgKCpDbG9zZSkgKCBGSUxFICogKTsKICAgIEZJTEUgKigqT3Bl
bikgKCBjaGFyICosIGNoYXIgKiApOwogICAgRklMRSAqKCpSZW9wZW4pICggRklMRSAqICk7CiAg
ICBsb25nICgqRmlsZUF0dHJpYnV0ZSkgKCB2b2lkICk7CiAgICBsb25nIERlZmF1bHRBdHRyaWJ1
dGU7CiAgICB2b2lkICgqRmlsZURlc2MpICggRklMRSAqICk7CiAgICB2b2lkICgqU2VnRGVzY0lP
KSAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgY2hhciAqICk7CiAgICB2b2lkICgqVmVjdG9ySW5m
bykgKCBGSUxFICosIGludCwgaW50LCBWSW5mb190ICogKTsKICAgIGludCAoKlZlY3RvcklPKSAo
IFZJbmZvX3QgKiwgaW50LCBpbnQsIGludCwgaW50ICosIGludCAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLCBkb3Vi
bGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCApOwogICAg
aW50ICgqU2VnTmV4dCkgKCBGSUxFICosIGludCwgaW50ICk7CiAgICBpbnQgKCpHZXRDaGFuSW5m
bykgKCBGSUxFICosIGludCwgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb25nICosIGxvbmcgKiwgbG9uZyAqLCBpbnQgKiApOwogICAgdm9pZCAo
KlBjdElPKSAoIEZJTEUgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwogICAgdm9pZCAo
KkJyZWFrUG9pbnRQY3RJTykgKCBGSUxFICosIGludCwgaW50LAogICAgICAgICAgICAgICAgICAg
IGludCAqLCBpbnQgKiwgR0RCQnJlYWtQb2ludFBDVF90ICoqKTsKICAgIHZvaWQgKCpMdXRJTykg
KCBGSUxFICosIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICogKTsKICAgIHZvaWQgKCpCcmVha1Bv
aW50THV0SU8pICggRklMRSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICBpbnQgKiwg
aW50ICosIEdEQkJyZWFrUG9pbnRMVVRfdCAqKiApOwogICAgdm9pZCAoKkJpdG1hcElPKSAoIEZJ
TEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQgKTsKICAgIGludCAoKlRlc3RP
cGVuKSAoIEdEQlRlc3RJbmZvX3QgKiApOwogICAgdm9pZCAoKlRleHRBY2Nlc3MpICggRklMRSAq
LCBUSW5mb190ICosIGNoYXIgKiwgaW50ICk7CiAgICBpbnQgKCpUZXh0UmVhZCkgKCBUSW5mb190
ICosIGNoYXIgKiwgaW50ICk7CiAgICB2b2lkICgqVGV4dFdyaXRlKSAoIFRJbmZvX3QgKiwgY2hh
ciAqICk7CiAgICB2b2lkICgqU3luYykgKCBGSUxFICogKTsKICAgIHZvaWQgKCpGaWxlRGVzY0lP
KSAoIEZJTEUgKiwgaW50LCBpbnQsIGNoYXIgKiApOwogICAgaW50ICgqUHJvamVjdGlvbklPKSAo
IEZJTEUgKiwgaW50LCBQcm9qSW5mb190ICogKTsKICAgIGNoYXIgU2hvcnROYW1lWzVdOwogICAg
Y2hhciBFeHRlbnNpb25bNF07CiAgICBjaGFyICpMb25nTmFtZTsKICAgIGludCBwYWRkaW5nWzhd
OwogICAgaW50ICgqTWVtQ2hhbkluZm8pICggRklMRSAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKios
IGxvbmcgKiwgbG9uZyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICog
KTsKICAgIHZvaWQgKCpHY3BJTykgKCBGSUxFICosIGludCwgaW50LCBpbnQgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwg
aW50ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91Ymxl
ICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICos
IGRvdWJsZSAqLCBkb3VibGUgKiApOwoKCiAgICBHREJMYXllciAoKkdldExheWVyKSAoRklMRSAq
LCBpbnQpOwogICAgR0RCTGF5ZXIgKCpDcmVhdGVMYXllcikgKEZJTEUgKiwgY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKik7CiAgICB2b2lkICgqRGVsZXRlTGF5ZXIpIChGSUxFICosIGludCk7CgogICAgaW50ICgq
R2V0UHJvamVjdGlvbkluZm8pIChHREJMYXllciAsIFByb2pJbmZvX3QgKik7CiAgICB2b2lkICgq
U2V0UHJvamVjdGlvbkluZm8pIChHREJMYXllciAsIFByb2pJbmZvX3QgKik7CgogICAgR0RCU2hh
cGVJZCAoKkdldE5leHRTaGFwZUlkKShHREJMYXllciAsIEdEQlNoYXBlSWQpOwogICAgdm9pZCAo
KkRlbGV0ZVNoYXBlKSAoR0RCTGF5ZXIgLCBHREJTaGFwZUlkKTsKICAgIEdEQlNoYXBlSWQgKCpD
cmVhdGVTaGFwZSkgKEdEQkxheWVyICwgR0RCU2hhcGVJZCk7CgogICAgR0RCVmVydGV4ICooKkdl
dFZlcnRpY2VzKSAoR0RCTGF5ZXIgLEdEQlNoYXBlSWQsIGludCAqKTsKICAgIHZvaWQgKCpTZXRW
ZXJ0aWNlcykgKEdEQkxheWVyICxHREJTaGFwZUlkLCBpbnQsR0RCVmVydGV4ICopOwoKICAgIEdE
QkZpZWxkICogKCpHZXRSZWNvcmQpIChHREJMYXllciwgR0RCU2hhcGVJZCk7CiAgICB2b2lkICgq
U2V0UmVjb3JkKSAoR0RCTGF5ZXIsIEdEQlNoYXBlSWQsIEdEQkZpZWxkICopOwoKICAgIEdEQlNo
YXBlICooKkdldFNoYXBlKSAoR0RCTGF5ZXIgLCBHREJTaGFwZUlkKTsKICAgIHZvaWQgKCpTZXRT
aGFwZSkgKEdEQkxheWVyICwgR0RCU2hhcGVJZCwgR0RCU2hhcGUgKik7CgogICAgVEJvb2wgKCpB
ZGRGaWVsZCkgKEdEQkxheWVyLCBjaGFyICosIEdEQkZpZWxkVHlwZSwgR0RCRmllbGQgKik7CiAg
ICBUQm9vbCAoKkRlbGV0ZUZpZWxkKSAoR0RCTGF5ZXIgLCBjaGFyICopOwoKICAgIHZvaWQgKigq
R2V0UnN0KSAoR0RCTGF5ZXIpOwogICAgdm9pZCAoKlNldFJzdCkgKEdEQkxheWVyLCB2b2lkICop
OwogICAgVEJvb2wgKCpDbGVhckxheWVyKSAoR0RCTGF5ZXIpOwogICAgVEJvb2wgKCpTZXRVcGRh
dGVNb2RlKSAoR0RCTGF5ZXIsIFRCb29sKTsKCiAgICBHREJDYXBhYmlsaXRpZXMgc0NhcGFiaWxp
dGllczsKCiAgICBjaGFyICoqKCpNZXRhRGF0YUlPKSAoRklMRSAqLCBpbnQsIGludCwgaW50LCBj
aGFyICoqKTsKCiAgICBUQm9vbCAoKkNvcHlUb3BvTGF5ZXJzKShGSUxFICosIEdEQkxheWVyLCBH
REJMYXllciosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdEQkxheWVyLCBHREJMYXllciosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdEQkxheWVyLCBHREJMYXllciosIGNvbnN0IGNoYXIgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIpOwoKICAgIHZvaWQgKCpXcml0ZUhp
c3RvcnkpIChGSUxFICosIGludCwgaW50LCBjb25zdCBjaGFyICopOwogICAgY29uc3QgY2hhciAq
KCpSZWFkSGlzdG9yeSkgKEZJTEUgKiwgaW50LCBpbnQsIGludCk7CgogICAgdm9pZCAoKkNvbXBy
ZXNzKSAoRklMRSAqKTsKICAgIHZvaWQgKCpDaGFuQWRkKSAoRklMRSAqLCBpbnQsIGludCwgUENJ
Q291bnRlcik7CiAgICB2b2lkICgqQ2hhbkRlbGV0ZSkgKEZJTEUgKiwgaW50LCBpbnQgKiwgUENJ
Q291bnRlcik7CiAgICB2b2lkICgqQnVpbGRPdmVydmlld3MpKEZJTEUgKiwgaW50LCBpbnQgKiwg
aW50LCBUQm9vbCwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSU1QUHJvZ3Jlc3NGdW5jLCB2b2lkICogKTsKICAgIFRCb29sICgqR2V0VGlsZUluZm8pIChG
SUxFICosIGludCwgaW50ICosIGludCAqKTsKCiAgICBHREJPdmVydmlld0luZm9fdCAqKCpHZXRP
dmVydmlld3MpKEZJTEUgKiwgaW50ICogKTsKCiAgICB2b2lkICgqRGVsZXRlKSAoIGNoYXIgKiAp
OwogICAgdm9pZCAoKlNhdEVwaGVtZXJpc0lPKSAoRklMRSAqLCBpbnQsIGludCwgRXBoZW1lcmlz
U2VnX3QgKik7CiAgICB2b2lkICgqQmluYXJ5SU8pIChGSUxFICosIGludCwgaW50LCBpbnQsIGlu
dCwgdW5zaWduZWQgY2hhciAqKTsKICAgIGludCAoKkdldEJpbmFyeUxlbmd0aCkgKEZJTEUgKiwg
aW50KTsKICAgIGludCAoKlNlZ0NyZWF0ZSkgKEZJTEUgKiwgY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICosIGludCApOwogICAgdm9pZCAoKkFycmF5SU8pIChGSUxFICosIGludCwgaW50LCBpbnQg
KiwgaW50ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICoqLGNo
YXIqKTsKCiAgICBHREJTaGFwZUlkICooKlNwYXRpYWxRdWVyeSkgKEdEQkxheWVyLCBpbnQgKiwg
R0RCU2hhcGVJZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBH
REJTZWFyY2hUeXBlLCB2YV9saXN0KTsKICAgIGNoYXIgKiooKkxheWVyTGlzdCkgKEZJTEUgKiwg
VEJvb2wpOwogICAgR0RCU2hhcGVJZCAqKCpBdHRyaWJ1dGVRdWVyeSkgKEdEQkxheWVyLCBpbnQg
KiwgR0RCU2hhcGVJZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
LCBjb25zdCBjaGFyICopOwogICAgY2hhciAqKigqTGlzdE5hbWVzKSAoY29uc3QgY2hhciAqLCBp
bnQpOwogICAgY2hhciAqKigqTGlzdEZpZWxkTmFtZXMpIChjb25zdCBjaGFyICopOwoKICAgIFRC
b29sICgqQXV0b1NldENoYW5QSUQpKCBGSUxFKiBmcCwgaW50LCB1aW50MzIgKiApOwogICAgVEJv
b2wgKCpHZXRDaGFuUElEKSggRklMRSogZnAsIGludCwgdWludDMyICogKTsKICAgIGludCAoKkZp
bmRDaGFuRnJvbVBJRCkoIEZJTEUqIGZwLCB1aW50MzIgKTsKCiAgICBjaGFyICoqKCAqR2V0VmFs
aWRGaWVsZFZhbHVlcykgKCBHREJMYXllcixpbnQgKTsKCn0gR0RCSW5mb190OwoKCgoKc3RydWN0
IEdEQkdyb3VwX3QKewogICAgaW50IGlHcm91cElkOwogICAgaW50IG5FbnRpdGllczsKICAgIEdE
QlNoYXBlSWQgKnBhaEVudGl0aWVzOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgR0RCR3JvdXBfdCAqR0RC
R3JvdXA7CgpzdHJ1Y3QgR0RCR3JvdXBJbmRleF90CnsKICAgIEdEQkxheWVyIGhMYXllcjsKICAg
IGludCBuR3JvdXBzOwogICAgaW50IG5BbGxvY2F0ZWRHcm91cHM7CiAgICBHREJHcm91cCBwYXNH
cm91cHM7CiAgICBpbnQgbk5leHRVbnVzZWRHcm91cElkOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgR0RC
R3JvdXBJbmRleF90ICpHREJHcm91cEluZGV4OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgR1FOCnsKICAg
IHN0cnVjdCBHUU4gKnBzUGFyZW50OwogICAgc3RydWN0IEdRTiAqYXBzTm9kZXNbNF07CiAgICBH
REJWZXJ0ZXggc01pbjsKICAgIEdEQlZlcnRleCBzTWF4OwogICAgaW50IG5TaGFwZXM7CiAgICBp
bnQgbkNhcGFjaXR5OwogICAgR0RCU2hhcGVJZCAqcGFoU2hhcGVJZHM7CiAgICBpbnQgaUluZGV4
Owp9IEdEQlF1YWROb2RlOwoKdHlwZWRlZiBzdHJ1Y3QgR0RCUVQKewogICAgR0RCUXVhZE5vZGUg
KnJvb3Q7CiAgICBHREJMYXllciBoTGF5ZXI7CiAgICBDQ0hIYW5kbGUgaEVudGl0eUxvb2tVcDsK
ICAgIGludCBuRGVwdGg7CiAgICBUQm9vbCBiSXRlbU91dHNpZGVSb290Owp9IEdEQlF1YWRUcmVl
OwoKdHlwZWRlZiBzdHJ1Y3QgR0RCUVRJCnsKICAgIEdEQlF1YWROb2RlICpwc0N1cnJlbnROb2Rl
OwogICAgaW50IG5DdXJyZW50SW5kZXg7CiAgICBHREJWZXJ0ZXggc01pbjsKICAgIEdEQlZlcnRl
eCBzTWF4OwogICAgVEJvb2wgYkV4dGVudHNDaGFuZ2VkOwp9IEdEQlFUSXRlcmF0b3I7CgoKCgoK
CnR5cGVkZWYgc3RydWN0IEdEQlNlYXJjaF90CnsKICAgIFRCb29sICgqU2VhcmNoRnVuYykoc3Ry
dWN0IEdEQlNlYXJjaF90ICosIEdEQlNoYXBlICosIGludDMyICopOwogICAgR0RCTGF5ZXIgcHNM
YXllcjsKICAgIEdEQkxheWVyVHlwZSBlTGF5ZXJUeXBlOwogICAgR0RCTGF5ZXIgcHNBcmVhTGF5
ZXI7CiAgICBjaGFyICpwc3pTZWFyY2hFeHByOwogICAgR0RCVmVydGV4IHNQb2ludDsKICAgIEdE
QlZlcnRleCBzTWluOwogICAgR0RCVmVydGV4IHNNYXg7CiAgICBHREJTaGFwZUlkIGhDbG9zZXN0
U2hhcGVJZDsKICAgIGRvdWJsZSBkRGlzdGFuY2U7CiAgICBkb3VibGUgKnBkRGlzdGFuY2U7CiAg
ICBpbnQgaUNsb3Nlc3RTZWdtZW50OwogICAgR0RCU2hhcGVJZCBoTGFzdFNoYXBlSWQ7CiAgICBp
bnQgbkxhc3RJbmRleDsKICAgIFRCb29sIGJJc0ZpbmRGaXJzdDsKCgoKCiAgICBUQm9vbCBiSXNB
dE5vZGU7CiAgICBHREJWZXJ0ZXggc05vZGU7CiAgICBkb3VibGUgZEFuZ2xlOwoKCgogICAgc3Ry
dWN0IEdEQlFUSSBzUXVhZEl0ZXJhdG9yOwogICAgR0RCU2hhcGVJZCAqcGFoRXhjbHVzaW9uSWRM
aXN0OwogICAgaW50IG5FeGNsdXNpb25JZENvdW50OwoKCgogICAgaW50IG5Db3VudDsKICAgIEdE
QlZlcnRleCAqcGFzVmVydGljZXM7CgoKCiAgICBpbnQgbk5lYXJlc3RJbmRleDsKICAgIGludCBu
TmVhcmVzdFNpemU7CiAgICBHREJTaGFwZUlkICpwYWhOZWFyZXN0OwogICAgZG91YmxlICpwYWRE
aXN0YW5jZXM7CiAgICBUQm9vbCBiVXNlSW5zaWRlOwp9IEdEQlNlYXJjaDsKCgoKCgp0eXBlZGVm
IHN0cnVjdCBHREJDcEZ1bmNzX3QKewogICAgVEJvb2wgKCpQcm9jZXNzaW5nX0Z1bmMpIChHREJM
YXllciwgY29uc3QgR0RCU2hhcGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHREJMYXllciAsIEdEQlNoYXBlICopOwogICAgdm9pZCAoKk1hcHBpbmdfRnVuYykg
KEdEQkxheWVyLCBHREJMYXllciwgaW50ICopOwogICAgdm9pZCAoKkNvdW50ZXJfRnVuYykgKGRv
dWJsZSk7CiAgICB2b2lkICgqQ29weUxheWVyU3RydWN0X0Z1bmMpIChHREJMYXllciwgR0RCTGF5
ZXIpOwogICAgVEJvb2wgKCpQcm9jV2l0aElkX0Z1bmMpIChHREJMYXllciwgR0RCU2hhcGVJZCwg
Y29uc3QgR0RCU2hhcGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdEQkxheWVyLCBHREJTaGFwZSAqLCBUQm9vbCwgVEJvb2wgKik7CgogICAgSU1QUHJvZ3Jlc3NG
dW5jIHBmblByb2dyZXNzOwogICAgdm9pZCAqcFByb2dyZXNzQXJnOwp9IEdEQkNwRnVuY3M7CiMg
MTY3OCAiLi4vLi4vLi4vbGliL2dkYi5oIgpHREJJbmZvX3QgKiBHREJSZWdpc3RlciAoIGludCAp
OwpHREJJbmZvX3QgKiBHREJHZXRGb3JtYXRJbmZvICggaW50ICk7CnZvaWQgR0RCQnl0ZUNoYW5J
TyAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQgKiAp
Owp2b2lkIEdEQkJ5dGVDaGFuSU9Mb3cgKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwg
aW50LCBpbnQsIGludCwgaW50ICogKTsKdm9pZCBHREJJbnRDaGFuSU8gKCBGSUxFICosIGludCwg
aW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludDMyICosIGludCwgaW50LCBpbnQsIGludCAqICk7CnZvaWQgR0RCSW50Q2hhbklPTG93ICgg
RklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQzMiAqLCBpbnQsIGludCwgaW50LCBpbnQgKiApOwp2b2lkIEdEQlJl
YWxDaGFuSU8gKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICosIGludCwgaW50LCBpbnQsIGludCAqICk7
CnZvaWQgR0RCUmVhbENoYW5JT0xvdyAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKiwgaW50LCBpbnQs
IGludCwgaW50ICogKTsKdm9pZCBHREJCaXRDaGFuSU8gKCBGSUxFICosIGludCwgaW50LCBpbnQs
IGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50ICogKTsKCnZvaWQgR0RCQml0bWFwSU9Mb3coRklM
RSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCwg
aW50KTsKCmludCBHREJDaGFuVHlwZSAoIEZJTEUgKiwgaW50ICk7CmNvbnN0IGNoYXIgKiBHREJD
aGFuVHlwZURlc2NyaXB0aW9uUmVmICggaW50ICk7CmludCBHREJDaGFuWFNpemUgKCBGSUxFICog
KTsKaW50IEdEQkNoYW5ZU2l6ZSAoIEZJTEUgKiApOwppbnQgR0RCQ2hhbk51bSAoIEZJTEUgKiAp
Owp2b2lkIEdEQlNpemVJbmZvICggRklMRSAqLCBpbnQgKiwgaW50ICosIGludCAqICk7CmludCBH
REJIaW50ICggRklMRSAqICk7ClRCb29sIEdEQlRlc3REZXNjcmlwdGlvbiggY29uc3QgY2hhciAq
ICk7CmludCBHREJDaGFuRGVzY0lPICggRklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7CkZJTEUg
KiBHREJDcmVhdGUgKCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsKCnZvaWQgR0RCQ2hhbkZs
dXNoKEZJTEUgKiwgaW50KTsKRklMRSAqIEdEQk9wZW4gKCBjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKiApOwpGSUxFICogR0RCUmVvcGVuICggRklMRSAqICk7CnZvaWQgR0RCQ2xvc2UgKCBGSUxF
ICogKTsKdm9pZCBHREJDbG9zZUpPTFRGaWxlICggRklMRSAqICk7CnZvaWQgR0RCRGVsZXRlICgg
aW50LCBjb25zdCBjaGFyICogKTsKVEJvb2wgR0RCRGVsZXRlRmllbGQgKCBHREJMYXllciwgY2hh
ciAqICk7CmxvbmcgR0RCRmlsZUF0dHJpYnV0ZSAoIEZJTEUgKiApOwpjaGFyICoqIEdEQk1ldGFE
YXRhSU8gKCBGSUxFICosIGludCwgaW50LCBpbnQsIGNoYXIgKiogKTsKbG9uZyBHREJBdHRyaWJ1
dGUgKCBpbnQgKTsKdm9pZCBHREJGaWxlRGVzYyAoIEZJTEUgKiApOwp2b2lkIEdEQlNlZ0Rlc2NJ
TyAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgY2hhciAqICk7Cgp2b2lkIEdEQlZlY3RvckluZm8g
KCBGSUxFICosIGludCwgaW50LCBWSW5mb190ICogKTsKaW50IEdEQlZlY3RvcklPICggVkluZm9f
dCAqLCBpbnQsIGludCwgaW50LCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKiwgaW50MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBpbnQgKTsKCmludCBHREJDb21wYXRW
ZWN0b3JJTyhWSW5mb190ICosIGludCAsIGludCAsIGludCAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBpbnQzMiAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyICosIGRvdWJsZSAqKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgaW50ICk7Cgp2b2lkIEdE
Qk5ld1ZlY3RvckluZm8oIEZJTEUgKiwgaW50LCBpbnQsIFZJbmZvX3QgKiApOwppbnQgR0RCTmV3
VmVjdG9ySU8oIFZJbmZvX3QgKiwgaW50LCBpbnQsIGludCwgaW50ICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQzMiAqLCBpbnQzMiAqLCBkb3VibGUg
KiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBpbnQg
KTsKCnZvaWQgR0RCQml0bWFwSU8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCBp
bnQsIGludCApOwppbnQgR0RCR2VvcmVmSU8oIEZJTEUgKiwgaW50LCBjaGFyICosIGRvdWJsZSAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICos
IGRvdWJsZSAqICk7CmludCBHREJHZW9yZWZJTzIoIEZJTEUgKiwgaW50LCBjaGFyICosIGRvdWJs
ZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
ICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICogKTsKaW50IEdEQlByb2plY3Rpb25JTygg
RklMRSAqLCBpbnQsIFByb2pJbmZvX3QgKiApOwp2b2lkIEdEQlBjdElPKCBGSUxFICosIGludCwg
aW50LCB1bnNpZ25lZCBjaGFyICogKTsKdm9pZCBHREJMdXRJTyggRklMRSAqLCBpbnQsIGludCwg
dW5zaWduZWQgY2hhciAqICk7CnZvaWQgR0RCQnJlYWtQb2ludFBjdElPKCBGSUxFICosIGludCwg
aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgaW50
ICosIEdEQkJyZWFrUG9pbnRQQ1RfdCAqKiApOwp2b2lkIEdEQkJyZWFrUG9pbnRMdXRJTyggRklM
RSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50ICosIGludCAqLCBHREJCcmVha1BvaW50TFVUX3QgKiogKTsKCnZvaWQgR0RCR2NwSU8oIEZJ
TEUgKiwgaW50LCBpbnQgLCBpbnQsIGludCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGludCAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqICk7
Cgp2b2lkIEdEQlNhdEVwaGVtZXJpc0lPKCBGSUxFICosIGludCwgaW50LCBFcGhlbWVyaXNTZWdf
dCAqKTsKdm9pZCBHREJTYXRFcGhlbWVyaXNGcmVlKCBFcGhlbWVyaXNTZWdfdCAqICk7CkVwaGVt
ZXJpc1NlZ190ICpHREJTYXRFcGhlbWVyaXNEdXBsaWNhdGUoIEVwaGVtZXJpc1NlZ190ICogKTsK
RXBoZW1lcmlzU2VnX3QgKkdEQkJpbmFyeVRvRXBoZW1lcmlzKCBpbnQsIHVuc2lnbmVkIGNoYXIg
KiApOwp1bnNpZ25lZCBjaGFyICpHREJFcGhlbWVyaXNUb0JpbmFyeSggRXBoZW1lcmlzU2VnX3Qg
KiwgaW50ICogKTsKClNSSVRJbmZvX3QgKkdEQlNhdE1vZGVsSU8oIEZJTEUgKiwgaW50LCBpbnQs
IFNSSVRJbmZvX3QgKiApOwp2b2lkIEdEQkZyZWVTUklUSW5mbyggU1JJVEluZm9fdCAqICk7ClNS
SVRJbmZvX3QgKkdEQkJpbmFyeVRvU1JJVEluZm8oIGludCwgdW5zaWduZWQgY2hhciAqICk7CnVu
c2lnbmVkIGNoYXIgKkdEQlNSSVRJbmZvVG9CaW5hcnkoIFNSSVRJbmZvX3QgKiwgaW50ICogKTsK
ClJGSW5mb190ICpSRkFsbG9jYXRlIChSRkluZm9fdCAqLCBpbnQpOwp2b2lkIFJGRGVhbGxvY2F0
ZSAoUkZJbmZvX3QgKik7ClJGSW5mb190ICpHREJSRk1vZGVsSU8oIEZJTEUgKiwgaW50LCBpbnQs
IFJGSW5mb190ICogKTsKdm9pZCBHREJGcmVlUkZJbmZvKCBSRkluZm9fdCAqICk7ClJGSW5mb190
ICpHREJCaW5hcnlUb1JGSW5mbyggaW50LCB1bnNpZ25lZCBjaGFyICogKTsKdW5zaWduZWQgY2hh
ciAqR0RCUkZJbmZvVG9CaW5hcnkoIFJGSW5mb190ICosIGludCAqICk7CgpBUEluZm9fdCAqQVBB
bGxvY2F0ZSAoQVBJbmZvX3QgKik7CnZvaWQgQVBEZWFsbG9jYXRlIChBUEluZm9fdCAqKTsKQVBJ
bmZvX3QgKkdEQkFQTW9kZWxJTyggRklMRSAqLCBpbnQsIGludCwgQVBJbmZvX3QgKiApOwp2b2lk
IEdEQkZyZWVBUEluZm8oIEFQSW5mb190ICogKTsKQVBJbmZvX3QgKkdEQkJpbmFyeVRvQVBJbmZv
KCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwp1bnNpZ25lZCBjaGFyICpHREJBUEluZm9Ub0JpbmFy
eSggQVBJbmZvX3QgKiwgaW50ICogKTsKCnZvaWQgR0RCQXJyYXlJTyggRklMRSAqLCBpbnQsIGlu
dCwgaW50ICosIGludCAqLCBkb3VibGUgKiosIGNoYXIqKTsKCmludCBHREJTZWdDcmVhdGUoIEZJ
TEUgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CgppbnQgR0RCU2VnTmV4dCgg
RklMRSAqLCBpbnQsIGludCApOwp2b2lkIEdEQlNlZ0NoZWNrKCBGSUxFICosIGludCAqLCBpbnQs
IGludCwgY2hhciAqICk7ClRCb29sIEdEQlNlZ0V4aXN0KCBGSUxFICosIGludCwgaW50KTsKaW50
IEdEQlNlZ0NvdW50KCBGSUxFICosIGludCApOwppbnQgR0RCTGF5ZXJOYW1lVG9TZWcoIEZJTEUg
KiwgY29uc3QgY2hhciAqICk7CmNvbnN0IGNoYXIgKiBHREJMYXllclR5cGVUb1Nob3J0TmFtZSgg
aW50ICk7CmNvbnN0IGNoYXIgKiBHREJMYXllclR5cGVUb0xvbmdOYW1lKCBpbnQgKTsKaW50IEdE
QlNob3J0TmFtZVRvTGF5ZXJUeXBlKCBjb25zdCBjaGFyICogKTsKaW50IEdEQkdldENoYW5JbmZv
KCBGSUxFICosIGludCwgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgKiwgbG9uZyAqLCBsb25nICosIGludCAqICk7CgppbnQgR0RCTWVtQ2hh
bkluZm8oIEZJTEUgKiwgaW50LCB1bnNpZ25lZCBjaGFyICoqLCBsb25nICosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvbmcgKiwgaW50ICogKTsKVEJvb2wgR0RCR2V0VGlsZUluZm8o
IEZJTEUgKiwgaW50LCBpbnQgKiwgaW50ICogKTsKCmludCBHREJUZXN0T3BlbiAoIGNvbnN0IGNo
YXIgKiApOwppbnQgR0RCVGV4dEFjY2VzcyAoIEZJTEUgKiwgVEluZm9fdCAqLCBjaGFyICosIGlu
dCwgY2hhciAqICk7CmludCBHREJUZXh0UmVhZCAoIFRJbmZvX3QgKiwgY2hhciAqLCBpbnQgKTsK
dm9pZCBHREJUZXh0V3JpdGUgKCBUSW5mb190ICosIGNoYXIgKiApOwp2b2lkIEdEQlN5bmMgKCBG
SUxFICogKTsKdm9pZCBHREJDb21wcmVzcyAoIEZJTEUgKiApOwp2b2lkIEdEQkNoYW5BZGQgKCBG
SUxFICosIGludCwgaW50LCBQQ0lDb3VudGVyICk7CnZvaWQgR0RCQ2hhbkRlbGV0ZSAoIEZJTEUg
KiwgaW50LCBpbnQgKiwgUENJQ291bnRlciApOwp2b2lkIEdEQlVuaXRUZXN0aW5nICh2b2lkKTsK
ClRCb29sIEdEQkJ1aWxkT3ZlcnZpZXdzKCBGSUxFICosIGludCwgaW50ICosIGludCwgVEJvb2ws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBJTVBQcm9n
cmVzc0Z1bmMsIHZvaWQgKiApOwpHREJPdmVydmlld0luZm9fdCAqCiAgICAgICAgICAgICAgIEdE
QkdldE92ZXJ2aWV3cyAoIEZJTEUgKiwgaW50ICopOwp2b2lkIEdEQkNoYW5Db3B5ICggRklMRSAq
LCBpbnQgKiwgaW50LCBGSUxFICosIGludCAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKCopKCBpbnQsIGludCwgaW50LCB2b2lkICopLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKikoIGRvdWJsZSApICk7ClRCb29sIEdE
Qk11bHRpQ2hhbkNvcHkoIEZJTEUgKiwgaW50ICosIGludCAqLCBGSUxFICosIGludCAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCwgaW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKikoIGludCwgaW50LCBpbnQsaW50LHZvaWQg
KiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMsIHZv
aWQgKiApOwp2b2lkIEdEQkJpdG1hcENvcHkgKCBGSUxFICosIGludCAqLCBpbnQsIEZJTEUgKiwg
aW50ICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCopKGlu
dCxpbnQsaW50LGludCx2b2lkKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
Q0lDb3VudGVyICk7CgppbnQgR0RCVmVjdG9yQ29weShGSUxFICpmcF9pbiwgaW50IG5TZWdJbiwg
RklMRSAqZnBfb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5TZWdPdXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCAoKlRyYW5zZm9ybV9GdW5jKShHREJMYXll
ciAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHREJTaGFwZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0RCTGF5ZXIgLCBHREJTaGFwZSAqKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKCpNYXBwaW5nX0Z1bmMpKEdEQkxheWVyLEdEQkxheWVyLGludCAqKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpDb3VudGVyX0Z1bmMpKGRvdWJsZSkpOwoK
aW50IEdEQlZlY3RvckNwKEZJTEUgKmZwX2luLCBpbnQgblNlZ0luLCBGSUxFICpmcF9vdXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5TZWdPdXQsIEdEQkNwRnVuY3MgKnBzRnVuY3Mp
OwoKR0RCTGF5ZXIKICAgICAgICBHREJWZWN0b3JUcmFuc2ZlcihHREJMYXllciBoU3JjTGF5ZXIs
IEdEQlNoYXBlSWQgKnBhaFNoYXBlSWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBu
Q291bnQsIEdEQkxheWVyIGhEc3RMYXllciwgaW50IG5PcHRpb25zKTsKCgpHREJTaGFwZUlkICpH
REJHZXRMYXllclNlbGVjdGlvblJlZihHREJMYXllcik7CnZvaWQgR0RCU2V0TGF5ZXJTZWxlY3Rp
b24oR0RCTGF5ZXIsIEdEQlNoYXBlSWQgKiwgaW50KTsKdm9pZCBHREJBZGRUb0xheWVyU2VsZWN0
aW9uKEdEQkxheWVyLCBHREJTaGFwZUlkKTsKdm9pZCBHREJBZGRUb011bHRpcGxlTGF5ZXJTZWxl
Y3Rpb24oR0RCTGF5ZXIsIEdEQlNoYXBlSWQqLCBpbnQpOwp2b2lkIEdEQlJlbW92ZUxheWVyU2Vs
ZWN0aW9uKEdEQkxheWVyLCBHREJTaGFwZUlkICosIGludCk7CmludCBHREJHZXRMYXllclNlbGVj
dGlvbkNvdW50KEdEQkxheWVyKTsKVEJvb2wgR0RCSXNTaGFwZVNlbGVjdGVkKEdEQkxheWVyLCBH
REJTaGFwZUlkKTsKVEJvb2wgR0RCU2V0TG9ja0xheWVyU2VsZWN0aW9uU3RhdHVzKCBHREJMYXll
ciwgVEJvb2wgKTsKVEJvb2wgR0RCR2V0TG9ja0xheWVyU2VsZWN0aW9uU3RhdHVzKCBHREJMYXll
ciApOwoKdm9pZCBHREJSZXNldFJlYWRDYWNoZVNpemUodm9pZCk7CnZvaWQgR0RCU2V0UmVhZENh
Y2hlU2l6ZShpbnQgblNpemUpOwppbnQgR0RCR2V0UmVhZENhY2hlU2l6ZSh2b2lkKTsKdm9pZCBH
REJDcmVhdGVMYXllckNhY2hlcyhHREJMYXllciBwc0xheWVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuTW9kT3B0aW9ucyAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5Nb2RTaXplICwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgblJlYWRPcHRpb25z
ICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgblJl
YWRTaXplICk7CgpUQm9vbCBHREJMYXllckNhbkhvbGRUaWxsQ29tbWl0KEdEQkxheWVyKTsKdm9p
ZCBHREJEaXNjYXJkTGF5ZXJDaGFuZ2VzKEdEQkxheWVyKTsKdm9pZCBHREJTeW5jTGF5ZXIoR0RC
TGF5ZXIpOwoKdm9pZCBHREJSZW1hcFJlY29yZChHREJMYXllciwgR0RCTGF5ZXIsIGludCAqLCBH
REJTaGFwZSAqKTsKaW50ICogR0RCR2V0TGF5ZXJTdHJ1Y3R1cmVNYXBwaW5nKEdEQkxheWVyIGhT
cmMsIEdEQkxheWVyIGhEZXN0KTsKaW50ICogR0RCR2V0RGVmblN0cnVjdHVyZU1hcHBpbmcoR0RC
RGVmbiAqLGludCxHREJEZWZuICosaW50KTsKCgppbnQgSGFzaEdEQkltYWdlKCBGSUxFICosIGlu
dCwgaW50LCBpbnQsIGludCwgaW50ICk7CnZvaWQgR0RCQXZnUmVhZCggRklMRSAqLCBpbnQsIGlu
dCwgaW50LCBpbnQsIGZsb2F0ICosIGludCwgaW50LCBpbnQpOwp2b2lkIEdEQk1vZGVSZWFkKCBG
SUxFICosIGludCwgaW50LCBpbnQsIGludCwgZmxvYXQgKiwgaW50LCBpbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCApOwoKdm9pZCBHREJSZXNhbXBsZUJ5dGVJbWFnZSAoRklMRSAq
ZnAsIGRvdWJsZSBkZkdlb1hPZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBk
Zkdlb1lPZmYsIGRvdWJsZSBkZkdlb1hTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgZGZHZW9ZU2l6ZSwgdW5zaWduZWQgY2hhciAqcGFieUltYWdlQnVmZmVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbkJ1ZlhTaXplLCBpbnQgbkJ1ZllTaXplLCBpbnQgbkJ1
ZkNoYW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYW5DaGFuTWFwLCBpbnQgblJl
c2FtcGxlVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wgYkJhY2tVc2VkLCBk
b3VibGUgZGZCYWNrVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIg
cGZuQ291bnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmRmlyc3RDb3Vu
dCwgZG91YmxlIGRmTGFzdENvdW50KTsKCnZvaWQgR0RCUmVzYW1wbGVJbnRJbWFnZSAoRklMRSAq
ZnAsIGRvdWJsZSBkZkdlb1hPZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBk
Zkdlb1lPZmYsIGRvdWJsZSBkZkdlb1hTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgZGZHZW9ZU2l6ZSwgaW50MzIgKnBhbjMySW1hZ2VCdWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBuQnVmWFNpemUsIGludCBuQnVmWVNpemUsIGludCBuQnVmQ2hhbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphbkNoYW5NYXAsIGludCBuUmVzYW1wbGVU
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCBiQmFja1VzZWQsIGRvdWJsZSBk
ZkJhY2tWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJQ291bnRlciBwZm5Db3Vu
dGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZGaXJzdENvdW50LCBkb3Vi
bGUgZGZMYXN0Q291bnQpOwoKdm9pZCBHREJSZXNhbXBsZVJlYWxJbWFnZSAoRklMRSAqZnAsIGRv
dWJsZSBkZkdlb1hPZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZkdlb1lP
ZmYsIGRvdWJsZSBkZkdlb1hTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
ZGZHZW9ZU2l6ZSwgZmxvYXQgKnBhZkltYWdlQnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbkJ1ZlhTaXplLCBpbnQgbkJ1ZllTaXplLCBpbnQgbkJ1ZkNoYW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCAqYW5DaGFuTWFwLCBpbnQgblJlc2FtcGxlVHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wgYkJhY2tVc2VkLCBkb3VibGUgZGZCYWNrVmFs
dWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIgcGZuQ291bnRlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmRmlyc3RDb3VudCwgZG91YmxlIGRmTGFz
dENvdW50KTsKCmNvbnN0IGNoYXIgKiBHREJGZXRjaE1ldGFEYXRhRW50cnkoRklMRSAqLCBpbnQs
IGludCxjb25zdCBjaGFyICopOwp2b2lkIEdEQlNldE1ldGFEYXRhRW50cnkoRklMRSAqLCBpbnQs
IGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7CnZvaWQgR0RCRGVsZXRlTWV0YURhdGFFbnRyaWVzKEZJTEUg
KiwgaW50LCBpbnQsY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBUQm9vbCk7Cgp2b2lkIEdEQldyaXRlSGlz
dG9yeShGSUxFICosIGludCwgaW50LCBjb25zdCBjaGFyICopOwpjb25zdCBjaGFyICogR0RCUmVh
ZEhpc3RvcnkoRklMRSAqLCBpbnQsIGludCwgaW50ICk7Cgp2b2lkIEdEQkJpbmFyeUlPKCBGSUxF
ICosIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqICk7CmludCBHREJHZXRCaW5h
cnlMZW5ndGgoIEZJTEUgKiwgaW50ICk7Cgp2b2lkIEdEQkpPTFRIYXJkU3luYyggRklMRSAqLCBU
Qm9vbCBiRGVzdHJveUltYWdlTGF5ZXJzICk7Cgp2b2lkIEdEQkpPTFRGaWxsQ2hhbm5lbHNBZGRl
ZExpc3QoIEZJTEUqIGZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQqIHBhbkNoYW5NYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBuTmV3Q2hhbm5lbENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbk9sZENoYW5uZWxDb3VudCApOwojIDE5MjggIi4uLy4u
Ly4uL2xpYi9nZGIuaCIKVEJvb2wgR0RCQXNzaWduQWxsUElEcyggRklMRSogZnAgKTsKClRCb29s
IEdEQkF1dG9TZXRDaGFuUElEKCBGSUxFKiBmcCwgaW50IG5DaGFuTnVtYmVyLCB1aW50MzIgKnB1
UElEICk7ClRCb29sIEdEQkdldENoYW5QSUQoIEZJTEUqIGZwLCBpbnQgbkNoYW5OdW1iZXIsIHVp
bnQzMiAqcHVQSUQgKTsKaW50IEdEQkZpbmRDaGFuRnJvbVBJRCggRklMRSogZnAsIHVpbnQzMiBu
UElEICk7CgpUQm9vbCBTZXRDaGFuQ1JDKEZJTEUgKmZwLCBpbnQgbkNoYW5OdW1iZXIsIHVpbnQz
MiAqcHVQSUQgKTsKVEJvb2wgR2V0Q2hhbkNSQyggRklMRSogZnAsIGludCBuQ2hhbk51bWJlciwg
dWludDMyICpwdVBJRCApOwppbnQgRmluZENoYW5Gcm9tQ1JDKCBGSUxFKiBmcCwgdWludDMyIG5Q
SUQgKTsKClRCb29sIEdlbmVyYXRlQ1JDKEZJTEUgKmZwLCBpbnQgbkNoYW5uZWwsIHVpbnQzMiAq
bkNSQyk7CgoKdm9pZCBHREJKT0xUUmVtYXBBbmRDb21taXRDaGFubmVsRGVsZXRpb25zKCBGSUxF
KiBmcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KiBwYW5DaGFuTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbk5ld0NoYW5uZWxDb3VudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5PbGRDaGFubmVsQ291bnQg
KTsKCnZvaWQgR0RCSk9MVFJlbWFwQW5kQ29tbWl0Q2hhbm5lbEFkZGl0aW9ucyhGSUxFKiBmcCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcGFuQ2hhbk1h
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuTmV3Q2hh
bm5lbENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG5PbGRDaGFubmVsQ291bnQpOwoKCgoKClRCb29sIEdEQlRlc3RDYXBhYmlsaXR5KCBHREJMYXll
ciAsIEdEQkZsYWdzICk7CiMgMTk2NCAiLi4vLi4vLi4vbGliL2dkYi5oIgppbnQgR0RCR2V0UHJv
amVjdGlvbkluZm8oIEdEQkxheWVyICwgUHJvakluZm9fdCAqICk7CnZvaWQgR0RCU2V0UHJvamVj
dGlvbkluZm8oIEdEQkxheWVyICwgUHJvakluZm9fdCAqICk7CgpHREJMYXllciBHREJHZXRMYXll
ciggRklMRSAqLCBpbnQgKTsKR0RCTGF5ZXJUeXBlIEdEQkdldExheWVyVHlwZSggR0RCTGF5ZXIg
aExheWVyLCBUQm9vbCBiRG9TY2FuSWZVbmtub3duICk7CkdEQkxheWVyIEdEQkNyZWF0ZUxheWVy
KCBGSUxFICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKiBwc3pOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICogcHN6RGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqIHBzek9wdGlvbnMgKTsKCmludCBHREJMYXllcjJTZWdtZW50
KCBHREJMYXllciBoTGF5ZXIgKTsKaW50IEdEQkxheWVyMlR5cGUoIEdEQkxheWVyICk7CkZJTEUg
KiBHREJMYXllcjJmcCggR0RCTGF5ZXIgKTsKCnZvaWQgR0RCRGVsZXRlTGF5ZXIoIEZJTEUgKmZw
LCBpbnQgblNlZ21lbnQgKTsKCkdEQlNoYXBlSWQgR0RCR2V0Rmlyc3QoR0RCTGF5ZXIgKTsKR0RC
U2hhcGVJZCBHREJHZXROZXh0KEdEQkxheWVyICwgR0RCU2hhcGVJZCk7CgoKCgpHREJTaGFwZUlk
ICogR0RCUXVlcnkoIEdEQkxheWVyIGhMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCAqcG5PdXRTaGFwZUNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0RCU2hhcGVJZCAqcGFoU2hhcGVJZHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbkluU2hhcGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekV4cHJlc3Npb24gKTsKCkdEQlNoYXBlSWQg
KiBHREJRdWVyeUxheWVyKCBHREJMYXllciAsIGludCAqcG5Db3VudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCU2hhcGVJZCAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbkNvdW50LCBHREJTZWFyY2hUeXBlLCAuLi4g
KTsKCnZvaWQgR0RCRmluZEV4dGVudHMoR0RCVmVydGV4ICpwYXNWZXJ0aWNlcywgaW50IG5Db3Vu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZlcnRleCAqcHNNaW4sIEdEQlZl
cnRleCAqcHNNYXgpOwpUQm9vbCBHREJGaW5kU2hhcGVFeHRlbnRzKEdEQkxheWVyLCBHREJTaGFw
ZUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCVmVy
dGV4ICosIEdEQlZlcnRleCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEJvb2wgYkRpc3BsYXlFcnJvcik7CnZvaWQgR0RCRmluZEV4dGVudHMyKEdEQlZl
cnRleCAqcGFzVmVydGljZXMsIGludCBuQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0RCVmVydGV4ICpwc01pbiwgR0RCVmVydGV4ICpwc01heCk7CnZvaWQgR0RCTWFrZU1p
bk1heChHREJWZXJ0ZXggKnBzTWluLCBHREJWZXJ0ZXggKnBzTWF4KTsKaW50IEdEQkZpbmROZWFy
ZXN0VmVydGV4KEdEQkxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdEQlNoYXBlSWQsIEdEQlZlcnRleCAqKTsKCkdEQlNlYXJjaCAqIEdEQlNldFNl
YXJjaENyaXRlcmlhKEdEQkxheWVyICwgR0RCU2VhcmNoVHlwZSwgLi4uKTsKR0RCU2hhcGVJZCBH
REJGaW5kRmlyc3QoR0RCU2VhcmNoICosIEdEQlNoYXBlSWQgKiwgaW50KTsKR0RCU2hhcGVJZCBH
REJGaW5kTmV4dChHREJTZWFyY2ggKixHREJTaGFwZUlkICosIGludCk7CnZvaWQgR0RCUmVsZWFz
ZUNyaXRlcmlhKEdEQlNlYXJjaCAqKTsKCkdEQlNoYXBlSWQgR0RCQ3JlYXRlU2hhcGUoIEdEQkxh
eWVyICwgR0RCU2hhcGVJZCk7CnZvaWQgR0RCRGVsZXRlU2hhcGUoIEdEQkxheWVyICwgR0RCU2hh
cGVJZCApOwpHREJTaGFwZUlkIEdEQlVuRGVsZXRlU2hhcGUoIEdEQkxheWVyICwgR0RCU2hhcGVJ
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJTaGFwZSAq
cHNTaGFwZSApOwoKR0RCVmVydGV4ICogR0RCR2V0VmVydGljZXMoR0RCTGF5ZXIgLCBHREJTaGFw
ZUlkLCBpbnQgKnBuQ291bnQgKTsKR0RCVmVydGV4ICogR0RCR2V0VmVydGljZXNSZWYoR0RCTGF5
ZXIsIEdEQlNoYXBlSWQsIGludCAqcG5Db3VudCk7CnZvaWQgR0RCU2V0VmVydGljZXMoR0RCTGF5
ZXIgLCBHREJTaGFwZUlkLCBpbnQgbkNvdW50LCBHREJWZXJ0ZXggKik7CkdEQlZlcnRleCAqIEdE
QlZlcnRleENvcHkoR0RCVmVydGV4ICosIGludCBuQ291bnQpOwoKaW50IEdEQkdldE51bUZpZWxk
cyhHREJMYXllcik7CmludCBHREJHZXRGaWVsZEluZGV4KEdEQkxheWVyLCBjb25zdCBjaGFyICop
OwppbnQgR0RCR2V0RmllbGRJbmRleFJlZ2V4KEdEQkxheWVyLCBjb25zdCBjaGFyICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIFRCb29sKTsKY29uc3Qg
Y2hhciAqIEdEQkdldEZpZWxkTmFtZShHREJMYXllciwgaW50KTsKCmNvbnN0IGNoYXIgKiBHREJH
ZXRGaWVsZERlc2MoR0RCTGF5ZXIgaExheWVyLCBpbnQgaUZpZWxkKTsKdm9pZCBHREJTZXREZWZh
dWx0KEdEQkxheWVyIGhMYXllciwgaW50IGlGaWVsZCwgR0RCRmllbGQgKnB1VmFsdWUpOwp2b2lk
IEdEQlNldEZpZWxkRGVzYyhHREJMYXllciBoTGF5ZXIsIGludCBpRmllbGQsIGNoYXIgKnBzekRl
c2MpOwp2b2lkIEdEQlNldEZpZWxkTmFtZShHREJMYXllciBoTGF5ZXIsIGludCBpRmllbGQsIGNo
YXIgKnBzek5hbWUpOwp2b2lkIEdEQlNldEZpZWxkRm9ybWF0KEdEQkxheWVyIGhMYXllciwgaW50
IGlGaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBz
ekZvcm1hdCk7CgoKY29uc3QgY2hhciAqIEdEQkdldEZpZWxkRm9ybWF0KEdEQkxheWVyLCBpbnQp
OwppbnQgR0RCR2V0RmllbGRXaWR0aChHREJMYXllciwgaW50LCBpbnQgKiwgVEJvb2wgKik7CmNv
bnN0IGNoYXIgKiBHREJHZW5GaWVsZEZvcm1hdChHREJGaWVsZFR5cGUsIGludCwgaW50LCBUQm9v
bCApOwp2b2lkIEdEQkluaXRpYWxpemVGaWVsZEZvcm1hdHMoR0RCTGF5ZXIgcHNMYXllcik7CgpH
REJGaWVsZFR5cGUgR0RCR2V0RmllbGRUeXBlIChHREJMYXllciwgaW50KTsKVEJvb2wgR0RCSXNT
eXNGaWVsZCAoY2hhciAqLCBHREJMYXllciwgaW50KTsKR0RCRmllbGQgKiBHREJHZXRGaWVsZERl
ZmF1bHQgKEdEQkxheWVyLCBpbnQpOwp2b2lkIEdEQlNldEZpZWxkVmFsdWUgKEdEQkxheWVyLCBH
REJTaGFwZUlkLCBpbnQsIEdEQkZpZWxkKik7CmRvdWJsZSBHREJTZXRWYWx1ZSAoR0RCTGF5ZXIs
IEdEQlNoYXBlSWQsIGludCwgZG91YmxlICk7CkdEQkZpZWxkICogR0RCR2V0RmllbGRWYWx1ZSAo
R0RCTGF5ZXIsIEdEQlNoYXBlSWQsIGludCk7CkdEQkZpZWxkICogR0RCR2V0RmllbGRWYWx1ZVF1
aWNrbHkoR0RCTGF5ZXIgLCBHREJTaGFwZSAqLCBpbnQpOwpkb3VibGUgR0RCR2V0VmFsdWUgKEdE
QkxheWVyLCBHREJTaGFwZUlkLCBpbnQpOwpjaGFyICogR0RCR2V0VmFsdWVTdHJpbmcgKEdEQkxh
eWVyLCBHREJTaGFwZUlkLCBpbnQpOwp2b2lkIEdEQlNldFZhbHVlU3RyaW5nIChHREJMYXllciwg
R0RCU2hhcGVJZCwgaW50LCBjaGFyICopOwp2b2lkIEdEQlNldEZpZWxkVmFsdWVTdHJpbmcoR0RC
RmllbGQgKnB1RmllbGQsIEdEQkZpZWxkVHlwZSBlVHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzelZhbHVlKTsKCgoKCnZvaWQgR0RC
U2V0RmllbGRNaXNzaW5nVmFsdWUoR0RCTGF5ZXIsIGludCwgY2hhciAqKTsKY2hhciAqR0RCR2V0
RmllbGRNaXNzaW5nVmFsdWUoR0RCTGF5ZXIsIGludCk7CnZvaWQgR0RCU2V0RmllbGRSZWFkT25s
eShHREJMYXllciwgaW50LCBUQm9vbCk7ClRCb29sIEdEQklzRmllbGRSZWFkT25seShHREJMYXll
ciwgaW50KTsKdm9pZCBHREJTZXRGaWVsZEhpZGRlbihHREJMYXllciwgaW50LCBUQm9vbCk7ClRC
b29sIEdEQklzRmllbGRIaWRkZW4oR0RCTGF5ZXIsIGludCk7CnZvaWQgR0RCU2V0RmllbGRBbGlh
cyhHREJMYXllciwgaW50LCBjaGFyICopOwpjaGFyICpHREJHZXRGaWVsZEFsaWFzKEdEQkxheWVy
LCBpbnQpOwp2b2lkIEdEQlNldEZpZWxkVmFsaWRhdGlvblJ1bGUoR0RCTGF5ZXIsIGludCwgY2hh
ciAqKTsKY2hhciAqR0RCR2V0RmllbGRWYWxpZGF0aW9uUnVsZShHREJMYXllciwgaW50KTsKdm9p
ZCBHREJTZXRGaWVsZFVuaXF1ZVZhbHVlcyhHREJMYXllciwgaW50LCBUQm9vbCk7ClRCb29sIEdE
Qkhhc0ZpZWxkVW5pcXVlVmFsdWVzKEdEQkxheWVyLCBpbnQpOwoKR0RCRmllbGQgKiBHREJHZXRS
ZWNvcmQgKEdEQkxheWVyLCBHREJTaGFwZUlkKTsKdm9pZCBHREJTZXRSZWNvcmQgKEdEQkxheWVy
LCBHREJTaGFwZUlkLCBHREJGaWVsZCAqKTsKR0RCRmllbGQgKiBHREJHZXRSZWNvcmRSZWYgKEdE
QkxheWVyLCBHREJTaGFwZUlkKTsKaW50IEdEQkFkZEZpZWxkIChHREJMYXllciwgY2hhciAqcHN6
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJGaWVsZFR5
cGUgZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCRmll
bGQgKnBzRGVmYXVsdCk7CgoKR0RCRmllbGQgKiBHREJSZWNvcmRDb3B5IChHREJMYXllciwgR0RC
RmllbGQgKik7CkdEQkZpZWxkICogR0RCUmVjb3JkQWxsb2MgKEdEQkxheWVyKTsKdm9pZCBHREJS
ZWNvcmRGcmVlIChHREJMYXllciwgR0RCRmllbGQgKik7CgoKdm9pZCBHREJGaWVsZEZyZWUgKEdE
QkZpZWxkVHlwZSwgR0RCRmllbGQgKik7CkdEQkZpZWxkIEdEQkZpZWxkQ29weSAoR0RCRmllbGRU
eXBlLCBHREJGaWVsZCAqKTsKVEJvb2wgR0RCRmllbGRWYWx1ZUlkZW50aWNhbChHREJGaWVsZFR5
cGUgZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHREJGaWVsZCogcHNGaWVsZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHREJGaWVsZCogcHNGaWVsZDIpOwoKdm9pZCBHREJGbHVzaENhY2hlIChH
REJMYXllciBwc0xheWVyKTsKCkdEQlNoYXBlICogR0RCU2hhcGVBbGxvYyhHREJMYXllcik7CnZv
aWQgR0RCU2hhcGVGcmVlKEdEQkxheWVyLCBHREJTaGFwZSAqKTsKR0RCU2hhcGUgKiBHREJHZXRT
aGFwZShHREJMYXllciwgR0RCU2hhcGVJZCk7CgpHREJTaGFwZSAqIEdEQkdldFNoYXBlUmVmKEdE
QkxheWVyLCBHREJTaGFwZUlkKTsKdm9pZCBHREJTZXRTaGFwZShHREJMYXllciwgR0RCU2hhcGVJ
ZCwgR0RCU2hhcGUqKTsKR0RCU2hhcGUgKiBHREJTaGFwZUNvcHkoR0RCTGF5ZXIsIEdEQlNoYXBl
ICopOwpHREJWZXJ0ZXggKiBHREJGaW5kQ2xvc2VzdFBvaW50KCBHREJMYXllciwgR0RCU2hhcGVJ
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZlcnRleCwgaW50
ICosIGRvdWJsZSAqLCBpbnQgKiApOwpHREJWZXJ0ZXggKkdEQkZpbmRDbG9zZXN0RnJvbUFycmF5
KEdEQlZlcnRleCAqcHNQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgR0RCVmVydGV4ICpw
YXNWZXJ0aWNlcywgaW50IG5Db3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpuTGVm
dEluZGV4LCBkb3VibGUgKmRmTWluRGlzdCwgaW50ICpuVmVydGV4SW5kZXgpOwoKdm9pZCBfR0RC
U2V0Q29vcmRGcm9tQXR0cmliKCBHREJMYXllciwgR0RCU2hhcGUgKiApOwp2b2lkIF9HREJTZXRB
dHRyaWJGcm9tQ29vcmQoIEdEQkxheWVyLCBHREJTaGFwZSAqICk7Cgp2b2lkIEdEQk1vZENhY2hl
Rmx1c2hGdW5jKENDSEhhbmRsZSBwc0NhY2hlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENDSEVudHJ5ICpwc0VudHJ5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBEYXRhKTsKCnZvaWQgR0RCUmVhZENh
Y2hlRmx1c2hGdW5jKENDSEhhbmRsZSBwc0NhY2hlLCBDQ0hFbnRyeSAqcHNFbnRyeSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcERhdGEpOwoKaW50IEdEQkdl
dE51bVNoYXBlcyhHREJMYXllcik7CnZvaWQgX0dEQlNldE51bVNoYXBlcyhHREJMYXllciwgaW50
KTsKdm9pZCBHREJTZXROdW1PZlNoYXBlc0J5VHlwZShHREJMYXllciBoTGF5ZXIsIGludCBuUG9p
bnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBuTGluZXMsIGludCBuQXJlYXMpOwp2b2lkIEdEQkdldE51bU9mU2hhcGVzQnlUeXBlKEdEQkxh
eWVyIGhMYXllciwgaW50KiBwblBvaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQqIHBuTGluZXMsIGludCogcG5BcmVhcyk7CkdEQkxheWVy
VHlwZSBHREJHZXRTaGFwZVR5cGUoR0RCTGF5ZXIgaExheWVyLCBHREJTaGFwZUlkIGhFbnRpdHkp
Owp2b2lkIEdEQlVwZGF0ZVNoYXBlQnlUeXBlKEdEQkxheWVyIGhMYXllciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJTaGFwZUlkIGhFbnRpdHksIGlu
dCBuT3BlcmF0aW9uKTsKCkdEQkZhdFNoYXBlICogR0RCR2V0RmF0U2hhcGUoR0RCTGF5ZXIsIEdE
QlNoYXBlSWQpOwp2b2lkIEdEQlNldEZhdFNoYXBlKEdEQkxheWVyLCBHREJTaGFwZUlkLCBHREJG
YXRTaGFwZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Kik7CnZvaWQgR0RCRmF0U2hhcGVGcmVlKEdEQkZhdFNoYXBlICpwc0ZhdFNoYXBlKTsKR0RCRmF0
U2hhcGUgKiBHREJGYXRTaGFwZUFsbG9jKEdEQkxheWVyKTsKCgp2b2lkICogR0RCR2V0UmVwVGFi
bGUoR0RCTGF5ZXIpOwp2b2lkIEdEQlNldFJlcFRhYmxlKEdEQkxheWVyLCB2b2lkICopOwoKR0RC
TGF5ZXIgR0RCQ29weUxheWVyU3RydWN0dXJlKEdEQkxheWVyIFNyYywgR0RCTGF5ZXIgRGVzdCk7
ClRCb29sIEdEQkxheWVySGFzTm9HZW9ncmFwaHkoR0RCTGF5ZXIgaExheWVyKTsKClRCb29sIEdE
QkdldEV4dGVudHMoR0RCTGF5ZXIgcHNMYXllciwgR0RCVmVydGV4ICpwc01pbiAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCVmVydGV4ICpwc01heCk7Cgp2b2lk
IF9HREJTZXRFeHRlbnRzKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlZlcnRleCAqcHNNaW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZlcnRleCAqcHNNYXgpOwpUQm9vbCBHREJDYWxj
RXh0ZW50cyhHREJMYXllciBwc0xheWVyLCBHREJWZXJ0ZXggKnBzTWluLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJWZXJ0ZXggKnBzTWF4KTsKVEJvb2wgR0RC
R2V0T3ZlcmFsbEV4dGVudHMoIEZJTEUgKiwgUHJvakluZm9fdCAqICk7Cgp2b2lkIEdEQlNldEN1
cnJlbnRBcmVhRXh0ZW50cyhHREJWZXJ0ZXggKnBzTWluLCBHREJWZXJ0ZXggKnBzTWF4KTsKdm9p
ZCBHREJHZXRDdXJyZW50QXJlYUV4dGVudHMoR0RCVmVydGV4ICpwc01pbiwgR0RCVmVydGV4ICpw
c01heCk7CnZvaWQgR0RCU2V0Q3VycmVudEFyZWFIYXNGaXhlZEV4dGVudHMoVEJvb2wgYkZpeGVk
KTsKVEJvb2wgR0RCQ3VycmVudEFyZWFIYXNGaXhlZEV4dGVudHModm9pZCk7CgpUQm9vbCBHREJH
ZXRWZWNBZGp1c3RlZFhZU2l6ZSggRklMRSAqLCBpbnQgKiwgaW50ICogKTsKCnZvaWQgR0RCQWRk
QXR0SW5mbyggR0RCTGF5ZXIsIGNvbnN0IGNoYXIgKiwgR0RCRmllbGRUeXBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0RCRmllbGQgKik7CkdEQkRlZm4gKiBHREJEZWZpbmVOZXdG
aWVsZChHREJMYXllciBwc0xheWVyLCBjb25zdCBjaGFyICpwc3pGaWVsZE5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekZpZWxkRGVzYywgR0RCRmllbGRUeXBl
IGVGaWVsZFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQkZpZWxkICpwdUZpZWxk
LCBjb25zdCBjaGFyICpwc3pGb3JtYXQsIC4uLik7CgpHREJEZWZuICogR0RCR2V0RmllbGREZWZu
KEdEQkxheWVyLCBpbnQpOwpHREJEZWZuICogR0RCQWRkRmllbGREZWZuKEdEQkxheWVyICk7CnZv
aWQgR0RCRGVmbkZyZWUoIEdEQkRlZm4gKiBwc0RlZm4gKTsKCnZvaWQgR0RCRnJlZUF0dEluZm8o
R0RCTGF5ZXIpOwp2b2lkIEdEQkZyZWVMYXllclN0cnVjdChHREJMYXllcik7CgpGSUxFICogR0RC
Q3JlYXRlTWVtQ29weShHREJMYXllciBwc0xheWVyKTsKRklMRSAqIEdEQkNyZWF0ZUNvbXBNZW1D
b3B5KEdEQkxheWVyLCBjb25zdCBjaGFyICopOwoKaW50ICogR0RCQ291bnRlZEludExpc3RDb3B5
KGludCAqKTsKaW50IEdEQkdldFNlZ21lbnROdW0oR0RCTGF5ZXIpOwoKR0RCTGF5ZXIgKiBHREJB
cHBlbmRMYXllckFycmF5KEdEQkxheWVyICwgR0RCTGF5ZXIgKiAsIGludCAqKSA7CkdEQkxheWVy
IEdEQkluY3JlYXNlTGF5ZXJBcnJheShGSUxFICosIEdEQkxheWVyICoqLCBpbnQgKik7CkdEQkxh
eWVyIEdEQkxheWVyQWxsb2MoRklMRSAqZnApOwp2b2lkIEdEQkxheWVyRnJlZSggR0RCTGF5ZXIg
KTsKCkdEQlNoYXBlICogR2V0R0RCU2hhcGUoVkluZm9fdCAqLCBHREJTaGFwZUlkKTsKdm9pZCBT
ZXRHREJTaGFwZShWSW5mb190ICosIEdEQlNoYXBlKik7ClRCb29sIEdEQlNldFVwZGF0ZU1vZGUo
R0RCTGF5ZXIsVEJvb2wpOwoKCgoKR0RCU2hhcGUgKiBHREJHZXRSaW5nUmVmKCBHREJMYXllciwg
R0RCU2hhcGUgKiwgaW50LCBpbnQzMiAqICk7CkdEQlNoYXBlICogR0RCR2V0UmluZyggR0RCTGF5
ZXIsIEdEQlNoYXBlICosIGludCwgaW50MzIgKiApOwppbnQgR0RCQWRkUmluZ1RvU2hhcGUoIEdE
QkxheWVyLCBHREJTaGFwZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0RCVmVydGV4ICosIGludCApOwpUQm9vbCBHREJHZXRSaW5nSW5mbyggR0RCTGF5ZXIs
IEdEQlNoYXBlICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCAqLCBpbnQgKiwgaW50MzIgKiApOwp2b2lkIEdEQkRlbGV0ZVJpbmcoIEdEQkxheWVyLCBH
REJTaGFwZSAqLCBpbnQgKTsKaW50IEdEQkdldFJpbmdDb3VudCggR0RCTGF5ZXIsIEdEQlNoYXBl
ICosIGludDMyICogKTsKdm9pZCBHREJTZXRSaW5nVmVydGljZXMoR0RCTGF5ZXIgaExheWVyLCBH
REJTaGFwZSogcHNTaGFwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpUmluZywgR0RCVmVydGV4ICpwYXNWZXJ0aWNlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuQ291bnQpOwp2b2lkIENDTFJpbmdUZXN0KCB2
b2lkICk7CkdEQlZlcnRleCAqR0RCQ29tYmluZVZlcnRpY2VzKEdEQkxheWVyIHBzTGF5ZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCU2hhcGVJZCogcGFuU2hhcGVJZHMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5OdW1TaGFwZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50KiBwbkNvdW50KTsKCgoKCnZvaWQgSURCQ2xlYXJTaGFw
ZXMoR0RCTGF5ZXIgKTsKVEJvb2wgSURCQ29udmVydFRvTmV3KEdEQkxheWVyICk7ClRCb29sIElE
QkNsZWFyTGF5ZXIoR0RCTGF5ZXIpOwoKVEJvb2wgR0RCQ2xlYXJMYXllcihHREJMYXllcik7Cgp2
b2lkIElEQkJ1ZmZBbGxvYygpOwp2b2lkIElEQkJ1ZmZSZWFsbG9jKGxvbmcpOwoKCgoKCgp2b2lk
IE1SWUNsZWFyRWRpdExpc3QoR0RCTGF5ZXIpOwpHREJTaGFwZUlkICogTVJZR2V0RWRpdExpc3Qo
R0RCTGF5ZXIsIGludCAqKTsKdm9pZCBNUllJbml0RWRpdExpc3QoR0RCTGF5ZXIpOwp2b2lkIE1S
WURlc3Ryb3lFZGl0TGlzdChHREJMYXllcik7CkdEQlNoYXBlICogTVJZR2V0U2hhcGUoR0RCTGF5
ZXIsIEdEQlNoYXBlSWQpOwoKCgoKCkdEQlF1YWRUcmVlICogR0RCUXVhZFRyZWVBbGxvYyhHREJM
YXllciBoTGF5ZXIsIEdEQlZlcnRleCAqcHNNaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdEQlZlcnRleCAqcHNNYXgsIGludCBuRGVwdGgpOwp2b2lkIEdEQlF1YWRUcmVlRnJlZShH
REJRdWFkVHJlZSAqcHNRVCk7ClRCb29sIEdEQlF1YWRUcmVlVXBkYXRlKEdEQlF1YWRUcmVlICpw
c1FULCBHREJTaGFwZUlkIGhTaGFwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdE
QlZlcnRleCAqcHNNaW4sIEdEQlZlcnRleCAqcHNNYXgpOwoKdm9pZCBHREJRdWFkVHJlZURlbGV0
ZShHREJRdWFkVHJlZSAqcHNRVCwgR0RCU2hhcGVJZCBoU2hhcGUpOwoKR0RCUXVhZE5vZGUgKiBH
REJVcFF1YWRUcmVlKEdEQlF1YWROb2RlICpwc0N1cnJlbnQsIEdEQlF1YWROb2RlICpwc1N0YXJ0
KTsKR0RCU2hhcGVJZCBHREJJbmNsdXNpdmVTZWFyY2goR0RCUVRJdGVyYXRvciAqcHNJdGVyKTsK
dm9pZCBHREJFbnF1YWRMYXllcihHREJMYXllcik7CnZvaWQgR0RCRGVxdWFkTGF5ZXIoR0RCTGF5
ZXIpOwpHREJRdWFkTm9kZSAqKiBHREJHZXRJbmNsdXNpdmVOb2RlTGlzdChHREJRdWFkVHJlZSAq
LCBHREJWZXJ0ZXggKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJW
ZXJ0ZXggKik7CgoKCgpUQm9vbCBHREJTZXRSZXBDb2RlRmllbGQoR0RCTGF5ZXIsIGNoYXIgKik7
CmludCBHREJHZXRSZXBDb2RlKEdEQkxheWVyLCBHREJTaGFwZUlkKTsKdm9pZCBHREJTZXRSZXBD
b2RlKEdEQkxheWVyLCBHREJTaGFwZUlkLCBpbnQpOwoKVEJvb2wgR0RCU2V0R3JvdXBJZEZpZWxk
KEdEQkxheWVyLCBjaGFyICopOwppbnQgR0RCR2V0R3JvdXBJZChHREJMYXllciwgR0RCU2hhcGVJ
ZCk7CnZvaWQgR0RCU2V0R3JvdXBJZChHREJMYXllciwgR0RCU2hhcGVJZCwgaW50KTsKClRCb29s
IEdEQlNldENoaWxkTGlzdEZpZWxkKEdEQkxheWVyLCBjaGFyICopOwppbnQgKiBHREJHZXRDaGls
ZExpc3QoR0RCTGF5ZXIsIEdEQlNoYXBlSWQpOwp2b2lkIEdEQlNldENoaWxkTGlzdChHREJMYXll
ciwgR0RCU2hhcGVJZCwgaW50ICopOwoKVEJvb2wgR0RCU2V0VGV4dEZpZWxkKEdEQkxheWVyLCBj
aGFyICopOwpjaGFyICogR0RCR2V0VGV4dChHREJMYXllciwgR0RCU2hhcGVJZCk7CmNoYXIgKiBH
REJHZXRUZXh0UXVpY2tseShHREJMYXllciAsIEdEQlNoYXBlICopOwp2b2lkIEdEQlNldFRleHQo
R0RCTGF5ZXIsIEdEQlNoYXBlSWQsIGNoYXIgKik7CgpUQm9vbCBHREJTZXRBbmdsZUZpZWxkKEdE
QkxheWVyLCBjaGFyICopOwpUQm9vbCBHREJHZXRBbmdsZShHREJMYXllciwgR0RCU2hhcGVJZCwg
ZG91YmxlICopOwpUQm9vbCBHREJHZXRBbmdsZVF1aWNrbHkoR0RCTGF5ZXIsIEdEQlNoYXBlICos
IGRvdWJsZSAqKTsKdm9pZCBHREJTZXRBbmdsZShHREJMYXllciwgR0RCU2hhcGVJZCwgZG91Ymxl
KTsKdm9pZCBHREJTZXRBbmdsZVVuaXQoR0RCTGF5ZXIsIEdEQkFuZ2xlVW5pdCk7CnZvaWQgR0RC
U2V0QW5nbGVVbml0U3RyKEdEQkxheWVyLCBjaGFyKik7CkdEQkFuZ2xlVW5pdCBHREJHZXRBbmds
ZVVuaXQoR0RCTGF5ZXIpOwpjaGFyICpHREJHZXRBbmdsZVVuaXRTdHIoR0RCTGF5ZXIpOwp2b2lk
IEdEQkNvbnZlcnRBbmdsZShHREJBbmdsZVVuaXQsIEdEQkFuZ2xlVW5pdCwgZG91YmxlKik7CmNo
YXIgKipHREJHZXRBbmdsZVVuaXRzTGlzdCgpOwoKVEJvb2wgR0RCU2V0SGVpZ2h0RmllbGQoR0RC
TGF5ZXIsIGNoYXIgKik7CmRvdWJsZSBHREJHZXRIZWlnaHQoR0RCTGF5ZXIsIEdEQlNoYXBlSWQp
OwpUQm9vbCBHREJHZXRIZWlnaHRRdWlja2x5KEdEQkxheWVyLCBHREJTaGFwZSAqLCBkb3VibGUg
Kik7CnZvaWQgR0RCU2V0SGVpZ2h0KEdEQkxheWVyLCBHREJTaGFwZUlkLCBkb3VibGUpOwoKdm9p
ZCBHREJJbml0U3BlY2lhbEZpZWxkcyhHREJMYXllcik7CnZvaWQgR0RCUmVJbml0U3BlY2lhbEZp
ZWxkcyhHREJMYXllcik7CnZvaWQgR0RCU2V0U3lzdGVtRmllbGQoIEdEQkxheWVyLCBjb25zdCBj
aGFyICosIGludCApOwppbnQgR0RCR2V0U3lzdGVtRmllbGQoIEdEQkxheWVyLCBjb25zdCBjaGFy
ICogKTsKCgoKCgp2b2lkIEdEQkJ1aWxkR3JvdXBJbmRleChHREJMYXllciBoTGF5ZXIpOwp2b2lk
IEdEQkRlc3Ryb3lHcm91cEluZGV4KEdEQkxheWVyIGhMYXllcik7ClRCb29sIEdEQkFkZFRvR3Jv
dXAoR0RCTGF5ZXIgaExheWVyLCBHREJTaGFwZUlkIGhTaGFwZUlkKTsKR0RCR3JvdXAgR0RCR2V0
R3JvdXAoR0RCTGF5ZXIgaExheWVyLCBpbnQgaUdyb3VwSWQpOwpUQm9vbCBHREJEZWxldGVGcm9t
R3JvdXAoR0RCTGF5ZXIgaExheWVyLCBHREJTaGFwZUlkIGhTaGFwZUlkKTsKVEJvb2wgR0RCVW5H
cm91cChHREJMYXllciBoTGF5ZXIsIGludCBpR3JvdXBJZCk7CmludCBHREJGaW5kRnJlZUdyb3Vw
SWQoR0RCTGF5ZXIgaExheWVyLCBpbnQgaUFkdmlzb3J5R3JvdXBJZCk7ClRCb29sIEdEQlBhY2tH
cm91cHMoR0RCTGF5ZXIgaExheWVyKTsKaW50IEdEQkdyb3VwRW50aXRpZXMoIEdEQkxheWVyIGhM
YXllciwgR0RCU2hhcGVJZCAqcGFoRW50aXRpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbkVudGl0aWVzICk7CgoKCgpHREJTaGFwZUlkICogR0RCR2V0Q2hpbGRMaXN0
Q29weShHREJMYXllciBoTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0RCU2hhcGVJZCBoRW50aXR5KTsKdm9pZCBHREJBdHRhY2hFbnRpdGllcyhHREJM
YXllciBoTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0RCU2hhcGVJZCAqcGFoRW50aXRpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG5FbnRpdGllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHREJTaGFwZUlkIGhQYXJlbnRTaGFwZUlkKTsKR0RCU2hhcGVJZCBHREJG
aW5kQ2hpbGRMaXN0UGFyZW50KEdEQkxheWVyIGhMYXllciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlNoYXBlSWQgaFNoYXBlSWQpOwpHREJTaGFw
ZUlkICogR0RCR2V0QXR0YWNoZWRFbnRpdGllcyhHREJMYXllciBoTGF5ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCU2hhcGVJZCBoU2hhcGVJ
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
KnBuRW50aXRpZXMpOwpHREJTaGFwZUlkICogR0RCRGV0YWNoRW50aXRpZXMoR0RCTGF5ZXIgaExh
eWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJTaGFw
ZUlkIGhFbnRpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCAqcG5FbnRpdGllcyk7CnZvaWQgR0RCRGV0YWNoQ2hpbGRMaXN0RW50aXRpZXMoR0RCTGF5
ZXIgaExheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHREJTaGFwZUlkIGhFbnRpdHkpOwoKCgoKdm9pZCAqIExvYWRHREJEeW5Gb3JtYXQo
Y29uc3QgY2hhciAqcHN6Rm9ybWF0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKnBzekJhc2VOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqcHN6UmVnaXN0ZXJGdW5jLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG5WZXJzaW9uICwgY29uc3QgY2hhciAqIHBzekZpbGVOYW1lKTsKCnZv
aWQgQUxMUmVnaXN0ZXIoIHZvaWQgKTsKdm9pZCBWZWN0b3JSZWdpc3Rlciggdm9pZCApOwp2b2lk
IEltYWdlUmVnaXN0ZXIoIHZvaWQgKTsKdm9pZCBDaGVhcFJlZ2lzdGVyKCB2b2lkICk7Cgp2b2lk
IEdEQlJlZ2lzdGVyV2l0aEpPTFRSZWdpc3RyeSh2b2lkKTsKCkdEQlRlc3RJbmZvX3QgKiBHREJU
ZXN0SW5mb01hcnNoYWwoIGNvbnN0IGNoYXIgKiwgRklMRSAqICk7CnZvaWQgR0RCVGVzdEluZm9E
ZXN0cm95KCBHREJUZXN0SW5mb190ICogKTsKCmludCBHREJGaWxlbmFtZTJGb3JtYXQoIGNoYXIg
KnBzekZpbGVOYW1lICk7CgoKCgp0eXBlZGVmIHN0cnVjdCBzZWd0eXBlIHsKICBpbnQgbkNvZGU7
CiAgY2hhciAqcHN6U2hvcnROYW1lOwogIGNoYXIgKnBzekxvbmdOYW1lOwp9IFNFR1R5cGU7CgoK
ZXh0ZXJuIFNFR1R5cGUgZ2FzVHlwZVRhYmxlW107CgpleHRlcm4gR0RCSW5mb190ICpHREJJbmZv
WzIwMF07CiMgMjM3OSAiLi4vLi4vLi4vbGliL2dkYi5oIgp0eXBlZGVmIGVudW0KewogICAgUGFy
c2VyVHlwZUZpbGUsCiAgICBQYXJzZXJUeXBlU3RyaW5nCn0gUGFyc2VyVHlwZTsKCgp0eXBlZGVm
IHN0cnVjdAp7CiAgICBQYXJzZXJUeXBlIFR5cGU7CiAgICB2b2lkICpTb3VyY2U7CgogICAgY2hh
ciAqKlN0cmluZzsKICAgIGludCAqSUQ7CiAgICBpbnQgU2l6ZTsKCiAgICBpbnQgSW5kZXg7CgoK
fSBQQVJTRVI7CiMgMjQxMSAiLi4vLi4vLi4vbGliL2dkYi5oIgpQQVJTRVIgKlBhcnNlckluaXQg
KFBhcnNlclR5cGUpOwp2b2lkIFBhcnNlclRlcm0gKFBBUlNFUiAqKTsKdm9pZCBQYXJzZXJSZXNl
dCAoUEFSU0VSICosIHZvaWQgKik7CnZvaWQgUGFyc2VyVG9rZW5SZWdpc3RlciAoUEFSU0VSICos
IGNoYXIgKiosIGludCAqLCBpbnQpOwppbnQgUGFyc2VyVG9rZW5HZXQgKFBBUlNFUiAqLCBjaGFy
ICopOwojIDI0NDEgIi4uLy4uLy4uL2xpYi9nZGIuaCIKdHlwZWRlZiBlbnVtCnsKICAgIEV4cHJU
eXBlUHJpbWFyeSwKICAgIEV4cHJUeXBlQm9vbGVhbkFORCwKICAgIEV4cHJUeXBlQm9vbGVhbk9S
LAogICAgRXhwclR5cGVCb29sZWFuTk9UCn0gRXhwclR5cGU7CgoKCgoKdHlwZWRlZiBlbnVtCnsK
ICAgIFByaW1hcnlPcEVxdWFsLAogICAgUHJpbWFyeU9wTGVzcywKICAgIFByaW1hcnlPcEdyZWF0
ZXIsCiAgICBQcmltYXJ5T3BMZXNzRXF1YWwsCiAgICBQcmltYXJ5T3BHcmVhdGVyRXF1YWwsCiAg
ICBQcmltYXJ5T3BOb3RFcXVhbAp9IFByaW1hcnlPcDsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IEV4
cHIKewogICAgRXhwclR5cGUgVHlwZTsKICAgIHVuaW9uCiAgICB7CiAgICAgICAgc3RydWN0CiAg
ICAgICAgewogICAgICAgICAgICBjaGFyICpOYW1lOwogICAgICAgICAgICBpbnQgTnVtOwogICAg
ICAgICAgICBQcmltYXJ5T3AgT3A7CiAgICAgICAgICAgIGludCBJc0NoYXJWYWx1ZTsKICAgICAg
ICAgICAgdW5pb24KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2hhciAqQ1ZhbHVlOwog
ICAgICAgICAgICAgICAgc3RydWN0CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgY2hhciAqTmFtZTsKICAgICAgICAgICAgICAgICAgICBpbnQgTnVtOwogICAgICAgICAgICAg
ICAgfSBGVmFsdWU7CiAgICAgICAgICAgIH0gVmFsdWU7CiAgICAgICAgfSBQcmltYXJ5OwoKICAg
ICAgICBzdHJ1Y3QKICAgICAgICB7CiAgICAgICAgICAgIHN0cnVjdCBFeHByICpMZWZ0OwogICAg
ICAgICAgICBzdHJ1Y3QgRXhwciAqUmlnaHQ7CiAgICAgICAgfSBCb29sZWFuOwogICAgfSBEYXRh
Owp9IEVYUFI7CiMgMjUwNiAiLi4vLi4vLi4vbGliL2dkYi5oIgpFWFBSICpFeHBySW5pdFByaW1h
cnkgKGNoYXIgKiwgUHJpbWFyeU9wLCBjaGFyICosIGludCk7CkVYUFIgKkV4cHJJbml0Qm9vbGVh
biAoRXhwclR5cGUsIEVYUFIgKiwgRVhQUiAqKTsKdm9pZCBFeHByVGVybSAoRVhQUiAqKTsKdm9p
ZCBFeHByU2V0TnVtIChFWFBSICosIGludCk7CnZvaWQgRXhwclNldEZWYWx1ZSAoRVhQUiAqLCBj
aGFyICosIGludCk7CmludCBFeHBySXNGVmFsdWUgKEVYUFIgKik7CmludCBFeHBySXNTdHJpbmdD
b25zdGFudCAoRVhQUiAqKTsKaW50IEV4cHJHZXRGTnVtIChFWFBSICopOwp2b2lkIEV4cHJHZXRQ
cmltYXJ5IChFWFBSICosIGNoYXIgKiosIGludCAqLCBQcmltYXJ5T3AgKiwgY2hhciAqKik7Cmlu
dCBFeHByRXZhbHVhdGUgKEVYUFIgKiwgaW50ICgqKShFWFBSICosIHZvaWQgKiksIHZvaWQgKik7
CmludCBFeHByVHJhdmVyc2UgKEVYUFIgKiwgaW50ICgqKShFWFBSICosIHZvaWQgKiksIHZvaWQg
Kik7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgY2hhciAqTmFtZTsKICBjaGFyICpEZXNjcmlwdGlv
bjsKCiAgaW50IE5TYW1wbGVzOwogIGludCBOQ2hhbm5lbHM7CgogIGludCAqQ2hhbm5lbDsKICBk
b3VibGUgKk1lYW47CiAgZG91YmxlICpTdGREZXZpYXRpb247CiAgZG91YmxlICpMb3dlclBQQm91
bmQ7CiAgZG91YmxlICpVcHBlclBQQm91bmQ7CgogIGRvdWJsZSBEZXRlcm1pbmFudDsKICBkb3Vi
bGUgVGhyZXNob2xkOwogIGRvdWJsZSBCaWFzOwoKICBkb3VibGUgKklDb3ZhcmlhbmNlOwoKICBk
b3VibGUgKkNvdmFyaWFuY2U7CgogIGludCBFbmNvZGluZzsKfSBTaWduYXR1cmVfdDsKCgoKCgp2
b2lkIENoZWNrQ2hhbiggRklMRSAqLCBjaGFyICosIGludCAqLCBpbnQgKTsKdm9pZCBDaGVja1dp
biggRklMRSAqLCBjaGFyICosIGludCAqICk7CiMgMjY0NCAiLi4vLi4vLi4vbGliL2dkYi5oIgp0
eXBlZGVmIGludCAoKlRpbGVSV0Z1bmMpKCBGSUxFICosIHZvaWQgKiwgaW50LCBpbnQsIHVuc2ln
bmVkIGNoYXIgKiApOwp0eXBlZGVmIHZvaWQgKCpDaGFuUldGdW5jKSggRklMRSAqLCB2b2lkICos
IGludCwgaW50LCB1bnNpZ25lZCBjaGFyICopOwoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBuTGFz
dEFjY2VzczsKICBpbnQgblhTaXplOwogIGludCBuWVNpemU7CgogIGludCBuVGlsZXM7CiAgaW50
ICpwYW5UaWxlQWNjZXNzOwogIGludCAqcGFuVGlsZUlEOwogIHVuc2lnbmVkIGNoYXIgKipwYXBh
YnlUaWxlOwoKICBUaWxlUldGdW5jIHBmbldyaXRlVGlsZTsKICBUaWxlUldGdW5jIHBmblJlYWRU
aWxlOwogIHZvaWQgKnBGdW5jVG9rZW47Cn0gUmF3Q2hhblRpbGVJbmZvX3Q7Cgp0eXBlZGVmIEdE
Qk92ZXJ2aWV3SW5mb190IFJhd092ZXJ2aWV3SW5mb190OwoKdHlwZWRlZiBzdHJ1Y3QgcmluZm8K
ewogIHN0cnVjdCByaW5mbyAqbmV4dDsKICBGSUxFICpmcFJhdzsKICBpbnQgWFNpemU7CiAgaW50
IFlTaXplOwogIGludCBDaGFubmVsczsKICBpbnQgSW50ZXJsZWF2aW5nOwoKCiAgbG9uZyAqQ2hP
ZmY7CiAgbG9uZyAqUGl4ZWxPZmZzZXQ7CiAgbG9uZyAqTGluZU9mZnNldDsKICBpbnQgKkRhdGFU
eXBlOwogIGludCAqRGF0YVNpemU7CiAgY2hhciAqQnl0ZVN3YXBwZWQ7CgoKICBDaGFuUldGdW5j
ICpXcml0ZUZ1bmM7CiAgQ2hhblJXRnVuYyAqUmVhZEZ1bmM7CiAgdm9pZCAqKkZ1bmNUb2tlbjsK
CgogIGludCBOQml0bWFwczsKICBsb25nICpCaXRPZmZzZXQ7CiAgbG9uZyAqQml0TGluZU9mZnNl
dDsKICBpbnQgKkJpdFNlZ21lbnQ7CiAgaW50ICpCaXRDb21wOwoKCiAgdW5zaWduZWQgY2hhciAq
KlJhd0JpdEJ1ZjsKICBsb25nICpSYXdCaXRCdWZTaXplOwoKICBjaGFyICoqQXV4aWxhcnlJbmZv
OwogIFRCb29sIGJBdXhpbGFyeU1vZGlmaWVkOwoKICB1bnNpZ25lZCBjaGFyICoqTU1hcFB0cjsK
CiAgaW50IFJhd09wZW5lZDsKCgogIFJhd0NoYW5UaWxlSW5mb190ICoqcGFwc1RpbGVJbmZvOwoK
CiAgaW50IG5PdmVydmlld3M7CiAgaW50IG5NYXhPdmVydmlld3M7CiAgUmF3T3ZlcnZpZXdJbmZv
X3QgKnBhc092ZXJ2aWV3czsKICBUQm9vbCBiUmF3TWFuYWdlZE92ZXJ2aWV3czsKCn0gUmF3SW5m
b190OwoKRklMRSAqIFJhd0NyZWF0ZSggY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQsIGNoYXIg
KiApOwpGSUxFICogUmF3T3BlbiggY2hhciAqLCBjaGFyICosIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBsb25nICk7CkZJTEUgKiBSYXdSZW9wZW4oIEZJTEUgKiApOwp2b2lkIFJhd0RlZmluZSgg
RklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgbG9uZyApOwppbnQgUmF3UHJvbW90ZSgg
RklMRSAqICk7CmludCBSYXdDaGFuVHlwZSggRklMRSAqLCBpbnQgKTsKdm9pZCBSYXdTaXplSW5m
byggRklMRSAqLCBpbnQgKiwgaW50ICosIGludCAqICk7CmludCBSYXdHZW9yZWZJTyggRklMRSAq
LCBpbnQsIGNoYXIgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqICk7CmludCBSYXdQcm9qZWN0aW9uSU8oIEZJTEUg
KiwgaW50LCBQcm9qSW5mb190ICogKTsKdm9pZCBSYXdTZXRQcm9qZWN0aW9uSW5mbyggR0RCTGF5
ZXIsIFByb2pJbmZvX3QgKiApOwppbnQgUmF3R2V0UHJvamVjdGlvbkluZm8oIEdEQkxheWVyLCBQ
cm9qSW5mb190ICogKTsKdm9pZCBSYXdCeXRlQ2hhbklPKCBGSUxFICosIGludCwgaW50LCBpbnQs
IGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
ICosIGludCwgaW50LCBpbnQsIGludCAqICk7CnZvaWQgUmF3SW50Q2hhbklPKCBGSUxFICosIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dDMyICosIGludCwgaW50LCBpbnQsIGludCAqICk7CnZvaWQgUmF3UmVhbENoYW5JTyggRklMRSAq
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgKiwgaW50LCBpbnQsIGludCwgaW50ICogKTsKdm9pZCBSYXdDaGFuSU9fMSggRklM
RSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQgKTsKaW50IFJhd0No
YW5JT19OKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBpbnQgKiwgaW50
ICk7CnZvaWQgUmF3Q2hhbklPX01hcHBlZCggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCB1bnNpZ25lZCBjaGFy
ICosIGludCwgaW50LCBpbnQsIGludCApOwpUQm9vbCBSYXdDaGFuSU9fT3ZlcnZpZXcoIEZJTEUg
KiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQgKTsKdm9pZCBSYXdS
ZWdpc3RlcigpOwp2b2lkIEZDTkNoYW5JT18xKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICos
IGludCwgaW50LCBpbnQsIGludCApOwp2b2lkIEZDTkNoYW5JT19UaWxlZCggRklMRSAqLCBpbnQs
IGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50ICk7ClRCb29sIEZDTkNoYW5J
T19OKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQgKiwgaW50ICk7
CnZvaWQgRkNOU2V0Q2hhbkluZm8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENoYW5SV0Z1bmMsIENoYW5SV0Z1bmMsIHZvaWQgKiApOwp2
b2lkIEZDTlNldFRpbGVJbmZvKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlsZVJXRnVuYywgVGlsZVJXRnVuYywgdm9p
ZCAqICk7CnZvaWQgUmF3U2V0Q2hhbkluZm8oIEZJTEUgKiwgaW50LCBsb25nLCBsb25nLCBsb25n
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQgKTsKdm9pZCBSYXdT
ZXRDaGFuQnl0ZVN3YXAoIEZJTEUgKiwgaW50LCBpbnQgKTsKaW50IFJhd0dldENoYW5JbmZvKCBG
SUxFICosIGludCwgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb25nICosIGxvbmcgKiwgbG9uZyAqLCBpbnQgKiApOwpUQm9vbCBSYXdHZXRUaWxlSW5mbygg
RklMRSAqLCBpbnQsIGludCAqLCBpbnQgKiApOwoKdm9pZCBSYXdCaXRtYXBJTyggRklMRSAqLCBp
bnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCApOwp2b2lkIFJhd1NldEJpdG1hcEluZm8oIEZJ
TEUgKiwgaW50LCBsb25nLCBsb25nLCBpbnQgKTsKCnZvaWQgUmF3TWVtQml0bWFwSU8oIEZJTEUg
KiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQgKTsKdm9pZCBSYXdTZXRNZW1CaXRt
YXBJbmZvKCBGSUxFICosIHVuc2lnbmVkIGNoYXIgKiwgbG9uZywgaW50LCBsb25nLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nLCBpbnQgKTsKCmludCBSYXdIaW50
KCBGSUxFICogKTsKdm9pZCBSYXdDbG9zZSggRklMRSAqICk7CnZvaWQgUmF3Q2xvc2VPdmVydmll
d3MoIEZJTEUgKiApOwp2b2lkIFJhd1N5bmMoIEZJTEUgKiApOwpUQm9vbCBSYXdXcml0ZUF1eEZp
bGUoIEZJTEUgKiApOwp2b2lkIFJhd1N3YXBCdWZmZXIoIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBp
bnQsIGludCApOwp2b2lkIFJhd1NlZ0Rlc2NJTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBjaGFy
ICogKTsKaW50IFJhd0NoYW5EZXNjSU8oIEZJTEUgKiwgaW50LCBpbnQsIGNoYXIgKiApOwp2b2lk
IFJhd1NldEF1eERlZkluZm8oIEZJTEUgKiApOwpjaGFyICoqIFJhd01ldGFEYXRhSU8oIEZJTEUg
KiwgaW50LCBpbnQsIGludCwgY2hhciAqKiApOwpjaGFyICoqIFJhd01ldGFEYXRhSU9XaXRoUENU
KCBGSUxFICosIGludCwgaW50LCBpbnQsIGNoYXIgKiogKTsKCnVuc2lnbmVkIGNoYXIgKlJhd0dl
dFRpbGUoIEZJTEUgKiBmcCwgaW50LCBpbnQsIGludCApOwp1bnNpZ25lZCBjaGFyICpSYXdVcGRh
dGVUaWxlKCBGSUxFICogZnAsIGludCwgaW50LCBpbnQgKTsKdm9pZCBSYXdTeW5jVGlsZXMoIEZJ
TEUgKiBmcCwgaW50ICk7CnZvaWQgUmF3V3JpdGVTeW5jVGlsZXMoIEZJTEUgKiBmcCwgaW50ICk7
Cgp2b2lkIFJhd1NldENoYW5PdmVydmlldyggRklMRSAqLCBpbnQsIEZJTEUgKiwgaW50LCBUQm9v
bCwgVEJvb2wgKTsKdm9pZCBSYXdCdWlsZE92ZXJ2aWV3cyggRklMRSAqLCBpbnQsIGludCAqLCBp
bnQsIFRCb29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMsIHZv
aWQgKiApOwpHREJPdmVydmlld0luZm9fdCAqCiAgICAgICAgICAgICAgICBSYXdHZXRPdmVydmll
d3MoIEZJTEUgKiwgaW50ICogKTsKCgoKCgojIDEgIi4uLy4uLy4uL2xpYi9scmVmLmgiIDEKIyAy
MCAiLi4vLi4vLi4vbGliL2xyZWYuaCIKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdAp7CiAg
ICBGSUxFICpmcDsKICAgIGNoYXIgKnBzekZpbGVuYW1lOwogICAgaW50IG5SZWZUeXBlOwogICAg
aW50IG5MYXllclR5cGU7CiAgICBpbnQgbkxheWVySW5kZXg7CiAgICBUQm9vbCBiUmVmZXJlbmNl
ZDsKfSBHREJMUmVmOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IG5SZWZzOwogICAgR0RCTFJl
ZiAqKnBhcHNTcmNMUmVmczsKICAgIEdEQkxSZWYgKipwYXBzRHN0TFJlZnM7Cn0gR0RCTFJlZk1h
cDsKIyA1MCAiLi4vLi4vLi4vbGliL2xyZWYuaCIKR0RCTFJlZiAqR0RCUGFyc2VSRUYoRklMRSAq
ZnAsIGNvbnN0IGNoYXIgKiBwc3pSZWZTdHJpbmcgKTsKY2hhciAqR0RCQnVpbGRSRUYoaW50IG5S
ZWZUeXBlLCBjb25zdCBjaGFyICpwc3pCYXNlRmlsZSwKICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqcHN6TGF5ZXJGaWxlLCBpbnQgbkxheWVyVHlwZSxpbnQgbkxheWVySW5kZXgpOwpH
REJMUmVmICpHREJCdWlsZExSZWYoaW50IG5SZWZUeXBlLCBGSUxFICpmcExheWVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekZpbGVuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuTGF5ZXJUeXBlLCBpbnQgbkxheWVySW5kZXgg
KTsKdm9pZCBHREJEZXN0cm95TFJlZihHREJMUmVmICpwc0xSZWYpOwpHREJMUmVmICpHREJEdXBs
aWNhdGVMUmVmKCBHREJMUmVmICpwc0xSZWYgKTsKdm9pZCBHREJBY2Nlc3NMUmVmKCBHREJMUmVm
ICpwc0xSZWYgKTsKdm9pZCBHREJEZWFjY2Vzc0xSZWYoIEdEQkxSZWYgKnBzTFJlZiApOwpUQm9v
bCBHREJMUmVmQ29tcGFyZSggY29uc3QgR0RCTFJlZiAqcHNMUmVmMSwgY29uc3QgR0RCTFJlZiAq
cHNMUmVmMiApOwoKR0RCTFJlZk1hcCAqR0RCQWRkVG9MUmVmTWFwKEdEQkxSZWZNYXAgKnBzTFJl
Zk1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQkxSZWYgKnBzU3JjTFJlZiwgR0RC
TFJlZiAqcHNEc3RMUmVmKTsKR0RCTFJlZk1hcCAqR0RCQWRkTGF5ZXJUb0xSZWZNYXAoR0RCTFJl
Zk1hcCAqcHNMUmVmTWFwLCBpbnQgblJlZlR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBuTGF5ZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpwc3pTcmNGaWxlLCBpbnQgblNyY0xheWVySW5kZXgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekRzdEZpbGUsIGludCBuRHN0TGF5ZXJJ
bmRleCApOwp2b2lkIEdEQkRlc3Ryb3lMUmVmTWFwKEdEQkxSZWZNYXAgKnBzTFJlZk1hcCk7CmNo
YXIgKkdEQkFwcGx5TFJlZk1hcFRvUkVGKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwc3pSRUYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQkxSZWZNYXAgKnBzTFJlZk1hcCk7CnZvaWQg
R0RCQXBwbHlMUmVmTWFwVG9MYXllcihGSUxFICpmcCwgaW50IG5MVHlwZSwgaW50IG5MSW5kZXgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJMUmVmTWFwICogcHNMUmVmTWFwKTsK
dm9pZCBHREJBcHBseUxSZWZNYXBUb0ZpbGUoRklMRSAqZnAsIEdEQkxSZWZNYXAgKnBzTFJlZk1h
cCk7CgpjaGFyICpHREJNb3ZlUkVGKEZJTEUgKmZwT2xkQmFzZSwgY29uc3QgY2hhciAqcHN6UkVG
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpmcE5ld0Jhc2UpOwpUQm9vbCBHREJN
ZXRhRGF0YU1vdmVSRUYoY2hhciAqKnBhcHN6TWV0YURhdGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRklMRSAqZnBPbGRCYXNlLCBGSUxFICpmcE5ld0Jhc2UpOwp2b2lkIEdE
QlNldFZlY3RvckxheWVyUkVGKEdEQkxheWVyIHBzQmFzZUxheWVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwc3pSRUZOYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHREJMYXllciBwc1JlZkxheWVyICk7CkdEQkxheWVyIEdE
QkdldExheWVyRnJvbVJFRiggRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBzelJFRiApOwpUQm9vbCBH
REJMYXllckFuZFJFRkNvbXBhcmUoR0RCTGF5ZXIgcHNMYXllciwgRklMRSAqZnAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6UkVGKTsKCn0KIyAy
Nzk3ICIuLi8uLi8uLi9saWIvZ2RiLmgiIDIKCkdEQkxSZWYgKiBHREJEZWZhdWx0UENUKCBGSUxF
ICosIGludCApOwpHREJMUmVmICogR0RCRGVmYXVsdExVVCggRklMRSAqLCBpbnQgKTsKCgoKCgp2
b2lkIENNTFJlZ2lzdGVyICh2b2lkKTsKRklMRSAqQ01MQ3JlYXRlIChjaGFyICosIGludCwgaW50
LCBpbnQsIGludCwgY2hhciAqKTsKdm9pZCBDTUxTZXRDaGFuSW5mbyAoRklMRSAqLCBpbnQsIGlu
dCwgdW5zaWduZWQgY2hhciAqLCBsb25nLCBsb25nLCBUQm9vbCk7CgoKCgp2b2lkIE1vdjhVKCBp
bnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIGludCwgdW5zaWdu
ZWQgY2hhciAqKTsKdm9pZCBNb3YxNlMoIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hh
ciAqLCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICopOwp2b2lkIE1vdjE2VSggaW50LCBp
bnQsIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNo
YXIgKik7CnZvaWQgTW92MzJSKCBpbnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwg
aW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqKTsKCmNvbnN0IGNoYXIgKkdEQkNoYW5EYXRh
VHlwZTJTdHJpbmcoIGludCBuRGF0YVR5cGUgKTsKClNpZ25hdHVyZV90ICpTaWdDcmVhdGUoIHZv
aWQgKTsKdm9pZCBTaWdGcmVlKCBTaWduYXR1cmVfdCAqICk7CgoKCgoKdm9pZCBDaGVja0NoUmFu
Z2UoIGNoYXIgKiwgaW50ICosIGludCwgaW50LCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICosIGludCwgaW50ICk7CnZvaWQgQ2hlY2tEdkNoYW4oIGNoYXIgKiwgaW50
ICosIGludCwgaW50ICk7CnZvaWQgQ2hlY2tEdldpbiggY2hhciAqLCBpbnQgKiwgaW50LCBpbnQg
KTsKaW50IENsaXBWZWN0b3IoIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91
YmxlICk7CnZvaWQgQml0V2lzZVNhbXBsZSggdW5zaWduZWQgY2hhciAqLCBsb25nLCBsb25nLCB1
bnNpZ25lZCBjaGFyICosIGxvbmcsIGxvbmcgKTsKClRCb29sIENsaXAzRFZlY3RvciggZG91Ymxl
ICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSApOwoKCgoKZXh0ZXJuIGludCBDaGFu
MlNpemVUYWJsZVtdOwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgTkVudHJpZXM7CiAgZG91
YmxlICpSYW5nZVN0YXJ0OwogIGRvdWJsZSAqUmFuZ2VFbmQ7CiAgY2hhciAqKkRlc2NyaXB0aW9u
OwoKICBpbnQgTkZpZWxkczsKICB2b2lkICoqRmllbGRBcnJheTsKICBpbnQgKkZpZWxkVHlwZTsK
CiAgZG91YmxlICpEb3VibGVCdWZmZXI7CiAgY2hhciAqU3RyaW5nQnVmZmVyOwp9IEF0dHJpYnV0
ZV90OwoKCgoKQXR0cmlidXRlX3QgKiBJbmdlc3RBdHRyaWJ1dGVzKCBUSW5mb190ICogKTsKaW50
IEZpbmRBdHRyaWJ1dGVFbnRyeSggQXR0cmlidXRlX3QgKiwgZG91YmxlICk7CnZvaWQgRGVzdHJv
eUF0dHJpYnV0ZXMoIEF0dHJpYnV0ZV90ICogKTsKCgoKCnZvaWQgSU1QVXBkYXRlRmxvYXRIYXNo
KCBkb3VibGUgKiwgZG91YmxlICk7CmludCBJTVBTdHJpbmdIYXNoKCBjb25zdCBjaGFyICogKTsK
ZG91YmxlIEdEQlNoYXBlSGFzaCggR0RCTGF5ZXIsIEdEQlNoYXBlICosIGludCApOwpkb3VibGUg
R0RCTGF5ZXJIYXNoKCBHREJMYXllciwgaW50ICk7ClRCb29sIEdEQlJlcG9ydFdyb25nSGFzaCgg
Y29uc3QgY2hhciAqLCBHREJMYXllciwgR0RCU2hhcGUgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50LCBkb3VibGUgKTsKIyAyODkwICIuLi8uLi8uLi9saWIvZ2RiLmgi
CnZvaWQgVERCUmVnaXN0ZXIoIHZvaWQgKTsKdm9pZCBHREFSZWdpc3Rlciggdm9pZCApOwp2b2lk
IFF1YWR0cmVlUmVnaXN0ZXIoIHZvaWQgKTsKCgoKCgpjaGFyICogX0dEQkNoYW5nZUZpbGVFeHQo
IGNvbnN0IGNoYXIgKnBzek5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpwc3pOZXdFeHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUQm9vbCBiTWF0Y2hDYXNlICk7Cgp2b2lkIF9HREJVcGRhdGUyREJvdW5kcyhH
REJWZXJ0ZXggKnBzQm91bmRzTWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHREJWZXJ0ZXggKnBzQm91bmRzTWF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHREJTaGFwZSAqcHNTaGFwZSk7CgpjaGFyICoqIF9HREJUb2tlbml6ZShjaGFy
ICpwc3pTdHIxLCBjaGFyICpwc3pEZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbk1h
eFRvaywgY2hhciAqKnBwc3pOZXh0KTsKCkdEQlZlcnRleCAqIF9HREJFbGxpcHNlKGRvdWJsZSBk
ZlhDZW50ZXIsIGRvdWJsZSBkZllDZW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
IGRmWFJhZGl1cywgZG91YmxlIGRmWVJhZGl1cywKICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgZGZTdGFydEFuZ2xlLCBkb3VibGUgZGZFbmRBbmdsZSwKICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbk1heFNlZ21lbnRzLCBpbnQgKnBuVmVydGljZXMpOwoKCgoKdHlwZWRlZiBzdHJ1Y3QK
ewogICAgaW50IG5QaXhlbHM7CiAgICBpbnQgbkxpbmVzOwogICAgaW50IG5CeXRlczsKICAgIGlu
dCBuQnVmTGluZXM7CiAgICBpbnQgbkxpbmVGaXJzdDsKICAgIGludCBuTGluZUxhc3Q7CiAgICB2
b2lkICoqcHBJbWFnZTsKICAgIHZvaWQgKnBNZW1CbG9jazsKICAgIGludCBuQWNjZXNzTW9kZTsK
ICAgIFRCb29sIGJJbk1lbW9yeTsKICAgIEZJTEUgKmZwQnVmOwogICAgY2hhciAqcHN6RmlsZU5h
bWU7Cn0KRkJJbmZvVHlwZTsKCgoKCgp2b2lkICoqIEZCQWxsb2NJbWFnZShpbnQgblBpeGVscywg
aW50IG5MaW5lcywgaW50IG5CeXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBuQnVmTGluZXMsIEZCSW5mb1R5cGUgKnBzRkJJbmZvKTsKCnZvaWQgRkJGcmVlSW1hZ2UoRkJJ
bmZvVHlwZSAqcHNGQkluZm8pOwoKdm9pZCBGQkFjY2Vzc0xpbmUoaW50IGlMaW5lLCBpbnQgbkxu
c0Fib3ZlLCBpbnQgbkxuc0JlbG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5B
Y2Nlc3NNb2RlLCBGQkluZm9UeXBlICpwc0ZCSW5mbyk7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBB
SUlGaWxlSW5mb190CnsKICAgIEZJTEUgKmZwOwogICAgY2hhciAqcHN6QnVmOwogICAgaW50IGlQ
dHI7Cn1BSUlGaWxlSW5mbzsKCnZvaWQgQUlJUmV3aW5kKEFJSUZpbGVJbmZvICpwc0ZpbGVJbmZv
KTsKY2hhciAqQUlJUmVhZENvbXByZXNzZWRMaW5lKEFJSUZpbGVJbmZvICpwc0ZpbGVJbmZvKTsK
CnZvaWQgX01JRlByb2Nlc3NDT09SRFNZUyhGSUxFICpmcE1JRiwgUHJvakluZm9fdCAqc1Byb2os
CiAgICBkb3VibGUgZGZNSUYyR0RCVW5pdHMsIGNoYXIgKipwcHN6TGluZSApOwoKdm9pZCBfTUlG
V3JpdGVDT09SRFNZUyhGSUxFICpmcE1JRiwgUHJvakluZm9fdCAqc1Byb2osCiAgICBUQm9vbCBi
V3JpdGVFT0wgKTsKCgoKCgoKR0RCTGF5ZXIgR0RCT2xkR2V0TGF5ZXIoRklMRSAqZnAsIGludCBu
U2VnbWVudCk7CkdEQlNoYXBlSWQgR0RCT2xkR2V0TmV4dFNoYXBlSWQoR0RCTGF5ZXIgcHNMYXll
ciwgR0RCU2hhcGVJZCBoU2hhcGVJZCk7CkdEQlNoYXBlSWQgR0RCT2xkQ3JlYXRlU2hhcGUoR0RC
TGF5ZXIgcHNMYXllciwgR0RCU2hhcGVJZCBoSGludElkKTsKR0RCU2hhcGUgKkdEQk9sZEdldFNo
YXBlKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQpOwp2b2lkIEdEQk9sZFNl
dFNoYXBlKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0RCU2hhcGUgKnBzU2hhcGUpOwppbnQgR0RCT2xkR2V0UHJvamVjdGlv
bkluZm8oR0RCTGF5ZXIgcHNMYXllciwgUHJvakluZm9fdCAqcHNQcm9qKTsKdm9pZCBDcmVhdGVE
eW5hbWljQ2FjaGVzKEdEQkxheWVyIHBzTGF5ZXIpOwp2b2lkIF9HREJEZXJlZ2lzdGVyTGF5ZXJG
b3JDbG9zZShGSUxFICpmcCwgR0RCTGF5ZXIgaExheWVyKTsKdm9pZCBfR0RCRmx1c2hMYXllckNh
Y2hlKEZJTEUgKmZwKTsKdm9pZCBfR0RCQ2xlYXJMYXllckNvbXBhdExpc3QoRklMRSAqZnApOwp2
b2lkIF9HREJSZWxlYXNlQ2FjaGUoRklMRSAqZnApOwp2b2lkIEdEQlJlZ2lzdGVyTGF5ZXJGb3JD
bG9zZShGSUxFICpmcCwgR0RCTGF5ZXIgaExheWVyKTsKCgoKCgoKbG9uZyBJbWFnZVN0YXRzKCBG
SUxFICosIGludCwgaW50ICosIGludCwgaW50ICosIGZsb2F0ICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0ICosIGZsb2F0ICosIGZsb2F0ICogKTsKaW50IEltYWdlSGlzdG9ncmFt
KCBGSUxFICogZnAsIGludCwgaW50ICosIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgKiwgaW50LCBkb3VibGUgKiwgZG91YmxlICosIFRCb29sLCBUQm9vbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUFByb2dyZXNzRnVuYywgdm9pZCAqICk7
CmludCBJbWFnZVNhbXBsZWRIaXN0b2dyYW0oIEZJTEUgKiBmcCwgaW50LCBpbnQgKiwgaW50LCBp
bnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQsIGRvdWJsZSAq
LCBkb3VibGUgKiwgVEJvb2wsIFRCb29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SU1QUHJvZ3Jlc3NGdW5jLCB2b2lkICogKTsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQg
aUpvaW5OdW1iZXI7CiAgICBpbnQgaVByaW1hcnlLZXlGaWVsZDsKICAgIGNoYXIgKnBzelNlY29u
ZEZpbGVOYW1lOwogICAgVEJvb2wgYkluUHJpbWFyeUZpbGU7CiAgICBpbnQgblNlY29uZFNlZ21l
bnROdW07CiAgICBHREJMYXllciBwc1NlY29uZGFyeVRhYmxlOwogICAgaW50IGlGb3JlaWduS2V5
RmllbGQ7CiAgICBpbnQgbkFjdGl2ZTsKfSBHREJKb2luSW5mbzsKCkdEQkpvaW5JbmZvICpHREJS
ZWFkSm9pbnMoR0RCTGF5ZXIgcHNMYXllcik7CnZvaWQgR0RCUmVtb3ZlSm9pbihHREJMYXllciBw
c0xheWVyLGludCBpSm9pbk51bSk7CnZvaWQgR0RCQWRkSm9pbihHREJMYXllciBwc0xheWVyLGlu
dCBpUHJpbWFyeUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCTGF5ZXIg
cHNTZWNvbmRhcnlUYWJsZSwgaW50IGlGb3JlaWduS2V5KTsKdm9pZCBHREJBY3RpdmF0ZUpvaW4o
R0RCTGF5ZXIgcHNMYXllcixpbnQgaUpvaW5OdW0pOwp2b2lkIEdEQkRlYWN0aXZhdGVKb2luKEdE
QkxheWVyIHBzTGF5ZXIsIGludCBpSm9pbk51bSk7CnZvaWQgR0RCSm9pblJla2V5KEdEQkxheWVy
IHBzTGF5ZXIsaW50IGlKb2luTnVtLGludCBpTmV3UHJpbWFyeUtleSk7CnZvaWQgR0RCRGVzdHJv
eUpvaW5JbmZvKEdEQkpvaW5JbmZvICpwYXNKb2lucyk7CmludCBHREJHZXROdW1iZXJKb2lucygg
RklMRSAqZnAsIGludCBuVHlwZSwgaW50IG5JbmRleCApOwpGSUxFICpHREJBY2Nlc3NMYXllcldp
dGhKb2lucyhHREJMYXllciBwc1ByaW1hcnlMYXllcik7ClRCb29sIEdEQkNsb3NlSm9pbmVkTGF5
ZXJzKEZJTEUgKmZwLCBjaGFyICoqKnBwYXBzekNsb3NlZEZpbGVzKTsKdm9pZCBHREJDbG9zZUpv
aW5GaWxlcyhjaGFyICoqcGFwc3pDbG9zYWJsZUZpbGVzKTsKVEJvb2wgR0RCSXNKb2luZWRGaWVs
ZChHREJMYXllciBwc0pvaW5lZExheWVyLCBpbnQgaUZpZWxkKTsKCgoKCgppbnQgR0RCR2V0TnVt
Q21iKCBGSUxFICpmZHBCYXNlRmlsZSwgaW50IG5CU2VnbWVudCk7ClRCb29sIEdEQkFkZENvbWJp
bmVkTGF5ZXIgKEZJTEUgKmZkcEJhc2VGaWxlLCBpbnQgbkJTZWdtZW50LAogICAgICAgICAgICAg
ICAgICAgIGNoYXIgKnBzekNGaWxlbmFtZSwgaW50IGlDU2VnbWVudCwgY2hhciAqcHN6T3B0aW9u
KTsKdm9pZCBHREJSZW1vdmVDb21iaW5lZExheWVyKEZJTEUgKmZkcEJhc2VGaWxlLCBpbnQgbkJT
ZWdtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekNG
aWxlbmFtZSxpbnQgaUNTZWdtZW50KTsKCgoKCnZvaWQgR0RCUmFzdGVyQWRkSm9pbiggRklMRSAq
ZnAsIGludCBpQ2hhbk51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0RCTGF5ZXIgcHNTZWNvbmRhcnlUYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlGb3JlaWduS2V5ICk7CnZvaWQgR0RCUmFzdGVyUmVtb3ZlSm9p
biggRklMRSAqZnAsIGludCBpQ2hhbk51bSwgaW50IGlKb2luTnVtICk7CkdEQkpvaW5JbmZvICog
R0RCUmFzdGVyUmVhZEpvaW5zKCBGSUxFICpmcCwgaW50IGlDaGFuTnVtICk7CnZvaWQgR0RCUmFz
dGVyQWN0aXZhdGVKb2luKCBGSUxFICpmcCwgaW50IGlDaGFuTnVtLCBpbnQgaUpvaW5OdW0gKTsK
dm9pZCBHREJSYXN0ZXJEZWFjdGl2YXRlSm9pbiggRklMRSAqZnAsIGludCBpQ2hhbk51bSwgaW50
IGlKb2luTnVtICk7CkdEQkxheWVyIEdEQlJhc3RlckdldEpvaW5MYXllciggRklMRSAqZnAsIGlu
dCBpQ2hhbk51bSwgaW50ICpwbktleUZpZWxkICk7CkdEQkxheWVyIEdEQlJhc3RlckNyZWF0ZUpv
aW4oIEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0sIGNoYXIgKnBzektleUZpZWxkTmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6TmFtZSwgY2hh
ciAqcHN6RGVzYyApOwoKR0RCRmllbGQgKiBHREJSYXN0ZXJHZXRSZWNvcmRSZWYoIEZJTEUgKmZw
LCBpbnQgaUNoYW5OdW0sIGRvdWJsZSBkZlBpeGVsVmFsdWUgKTsKR0RCRmllbGQgKiBHREJSYXN0
ZXJHZXRSZWNvcmQoIEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0sIGRvdWJsZSBkZlBpeGVsVmFsdWUg
KTsKdm9pZCBHREJSYXN0ZXJTZXRSZWNvcmQoIEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0sIEdEQkZp
ZWxkICogcGFzRmllbGRzICk7CgpHREJTaGFwZSAqIEdEQlJhc3RlckdldFNoYXBlUmVmKCBGSUxF
ICpmcCwgaW50IGlDaGFuTnVtLCBkb3VibGUgZGZQaXhlbFZhbHVlICk7CkdEQlNoYXBlICogR0RC
UmFzdGVyR2V0U2hhcGUoIEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0sIGRvdWJsZSBkZlBpeGVsVmFs
dWUgKTsKdm9pZCBHREJSYXN0ZXJTZXRTaGFwZSggRklMRSAqZnAsIGludCBpQ2hhbk51bSwgR0RC
U2hhcGUgKiBwc1NoYXBlICk7CgpUQm9vbCBHREJJc1BvaW50SW5zaWRlVmVydGljZXMoR0RCVmVy
dGV4ICpwc1ZlcnRleCwgaW50IG5Db3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHREJWZXJ0ZXggKnBhc1ZlcnRpY2VzLCBpbnQgKm5SaW5nU3RhcnQpOwpUQm9v
bCBHREJJc1BvaW50SW5zaWRlT3JPblZlcnRpY2VzKEdEQlZlcnRleCAqcHNWZXJ0ZXgsIGludCBu
Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZl
cnRleCAqcGFzVmVydGljZXMsIGludCAqblJpbmdTdGFydCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wgYkFsbG93T24pOwoKZG91YmxlIEdEQkdldERp
c3RhbmNlKGNvbnN0IEdEQlZlcnRleCAqcHNGaXJzdFBvaW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEdEQlZlcnRleCAqcHNTZWNvbmRQb2ludCk7Cgpkb3VibGUgR0RC
Q29tcHV0ZVNoYXBlQXJlYShHREJMYXllciBoTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wgYkRpc3BsYXlFcnJvciwg
VEJvb2wgKmJUb3BvRXJyb3IpOwpkb3VibGUgR0RCQ29tcHV0ZVNoYXBlUGVyaW1ldGVyKEdEQkxh
eWVyIGhMYXllciwgR0RCU2hhcGVJZCBoU2hhcGVJZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRCb29sIGJEaXNwbGF5RXJyb3IsIFRCb29sICpiVG9wb0Vycm9y
KTsKVEJvb2wgR0RCSXNTaGFwZUNsb3NlZChHREJMYXllciBoTGF5ZXIsIEdEQlNoYXBlICpwc1No
YXBlKTsKCmNoYXIgKiogR0RCQ29weUF0dHJpYnV0ZXMoIEdEQkxheWVyIGhOZXdMYXllciwgaW50
IG5OdW1iZXJMYXllcnMsIEdEQkxheWVyICpwYWhMYXllciwgVEJvb2wgYlJldHVybkxpc3QgKTsK
CmNoYXIgKiogR0RCTGlzdE5hbWVzKGNvbnN0IGNoYXIgKnBzekZpbGVOYW1lLCBpbnQgbkxheWVy
TGlzdEZsYWcpOwpjaGFyICoqIEdEQkxpc3RGaWVsZE5hbWVzKGNvbnN0IGNoYXIgKnBzekZpbGVO
YW1lKTsKY2hhciAqIEdEQkxpc3RGaWxlTWFzayggaW50IG5TZWdtZW50LCBpbnQgbk1vZGUsIFRC
b29sIGJBZGRBbGxGaWxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpwc3pBZGRpdGlvbmFsVHlwZXMgKTsKY2hhciAqKiBHREJHZXRWYWxpZEZpZWxkVmFs
dWVzKEdEQkxheWVyIGhMYXllciwgaW50IGlGaWVsZEluZGV4KTsKfQojIDg0ICJ2ZWNjbGVhbi5j
cHAiIDIKIyAxICIuLi8uLi8uLi9saWIvcGNsLmhoIiAxCiMgNjAgIi4uLy4uLy4uL2xpYi9wY2wu
aGgiCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKCgojIDEgIi4uLy4uLy4uL2xpYi9wY2kuaCIgMQoj
IDE4OSAiLi4vLi4vLi4vbGliL3BjaS5oIgojIDEgIi4uLy4uLy4uL2xpYi9jY2xwcml2LmgiIDEK
IyAyOCAiLi4vLi4vLi4vbGliL2NjbHByaXYuaCIKIyAxICIuLi8uLi8uLi9saWIvY2NsYmFzZS5o
IiAxCiMgMjkgIi4uLy4uLy4uL2xpYi9jY2xwcml2LmgiIDIKIyAxICIuLi8uLi8uLi9saWIvY2Ns
Y29udi5oIiAxCiMgMzAgIi4uLy4uLy4uL2xpYi9jY2xwcml2LmgiIDIKCmV4dGVybiAiQyIgewoK
CgoKdHlwZWRlZiBzdHJ1Y3QgZnBfbGluayB7CiAgc3RydWN0IGZwX2xpbmsgKm5leHQ7CiAgRklM
RSAqZnA7CiAgY2hhciAqZmlsZW5hbWU7CiAgaW50IHR5cGU7CiAgaW50IGluZGV4OwogIGludCBm
bGFnczsKICBpbnQgcmVmX2NvdW50Owp9IGZwTGlua190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgZGtp
bmZvCnsKICAgIHN0cnVjdCBka2luZm8gKm5leHQ7CiAgICBGSUxFICpmcDsKICAgIGludCBmZDsK
ICAgIHVuc2lnbmVkIGNoYXIgKm1lbV9wdHI7CgogICAgaW50NjQgbGVuZ3RoOwogICAgaW50NjQg
b2Zmc2V0OwogICAgbG9uZyBtZW1fbGVuZ3RoOwoKCgoKfSBES0luZm9fdDsKIyA4NCAiLi4vLi4v
Li4vbGliL2NjbHByaXYuaCIKaW50IGltcGRpcmMoIHZvaWQgKTsKaW50IGltcHNyaGNfZGlyX2J1
ZmZlciggY2hhciAqICk7CgoKZXh0ZXJuIGNoYXIgcGNpYnVmW107CgoKfQojIDE5MCAiLi4vLi4v
Li4vbGliL3BjaS5oIiAyCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBQaXhWYWw7Cgp0eXBl
ZGVmIHVuaW9uIHsKICAgIGludDMyIHdvcmQ7CiAgICBmbG9hdCBmd29yZDsKICAgIFBpeFZhbCBi
eXRlWzRdOwogICAgc3RydWN0IHsKCgoKCgoKICAgICAgICBQaXhWYWwgYjM7CiAgICAgICAgUGl4
VmFsIGIyOwogICAgICAgIFBpeFZhbCBiMTsKICAgICAgICBQaXhWYWwgYjA7CgogICAgfSBsOwp9
IFBpeHdvcmQ7CiMgMjM2ICIuLi8uLi8uLi9saWIvcGNpLmgiCiMgMSAiLi4vLi4vLi4vbGliL2dk
Yi5oIiAxCiMgMjM3ICIuLi8uLi8uLi9saWIvcGNpLmgiIDIKIyAxICIuLi8uLi8uLi9saWIvZ2Ri
ZnJtdHMuaCIgMQojIDE5NCAiLi4vLi4vLi4vbGliL2dkYmZybXRzLmgiCiMgMSAiLi4vLi4vLi4v
bGliL2dkYi5oIiAxCiMgMTk1ICIuLi8uLi8uLi9saWIvZ2RiZnJtdHMuaCIgMgoKZXh0ZXJuICJD
IiB7CgoKCgppbnQgVmF4MklFRUVEb3VibGUgKHZvaWQgKik7CmludCBJRUVFMlZheERvdWJsZSAo
dm9pZCAqKTsKdm9pZCBJRUVFMlZheEZsb2F0ICh2b2lkICopOwp2b2lkIFZheDJJRUVFRmxvYXQg
KHZvaWQgKik7CiMgMjE2ICIuLi8uLi8uLi9saWIvZ2RiZnJtdHMuaCIKdm9pZCBBRFJHREJSZWdp
c3RlciAodm9pZCk7CgoKCgoKCgpGSUxFICogQUdFQ3JlYXRlIChjaGFyICosIGludCwgaW50LCBp
bnQsIGludCwgY2hhciAqKTsKRklMRSAqIEFHRU9wZW4gKGNoYXIgKiwgY2hhciAqKTsKdm9pZCBB
R0VDbG9zZSAoRklMRSAqKTsKdm9pZCBBR0VSZWdpc3RlciAodm9pZCk7CnZvaWQgQUdFVmVjdG9y
SW5mbyAoRklMRSAqLCBpbnQsIGludCwgVkluZm9fdCAqKTsKaW50IEFHRVZlY3RvcklPIChWSW5m
b190ICosIGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLCBkb3VibGUgKiwgaW50KTsKaW50
IEFHRVNlZ05leHQgKEZJTEUgKiwgaW50LCBpbnQpOwp2b2lkIEFHRVNlZ0Rlc2NJTyAoRklMRSAq
LCBpbnQsIGludCwgaW50LCBjaGFyICopOwoKCgoKCgp2b2lkIEFJQlJlZ2lzdGVyKHZvaWQpOwoK
CgoKCgp2b2lkIEFJQ1JlZ2lzdGVyKHZvaWQpOwoKCgoKCgp2b2lkIEFJSVJlZ2lzdGVyKHZvaWQp
OwoKCgoKCgoKdm9pZCBBUlNSZWdpc3RlciAodm9pZCk7CgoKCgoKCgp2b2lkIEFWSFJlZ2lzdGVy
ICh2b2lkKTsKCgoKCgoKCnZvaWQgQk1QREJSZWdpc3Rlcih2b2lkKTsKCgoKCgoKCnZvaWQgQ0NH
UmVnaXN0ZXIgKHZvaWQpOwoKCgoKCgoKdm9pZCBDREJHREJSZWdpc3RlciAodm9pZCk7CgoKCgoK
CnZvaWQgQ0lNUmVnaXN0ZXIgKHZvaWQpOwoKCgoKCgp2b2lkIERCRlJlZ2lzdGVyICh2b2lkKTsK
CgoKCgoKCnZvaWQgREVNUmVnaXN0ZXIgKHZvaWQpOwpGSUxFICogREVNT3BlbiAoY2hhciAqLCBj
aGFyICopOwppbnQgREVNVGVzdE9wZW4gKEdEQlRlc3RJbmZvX3QgKik7CnZvaWQgREVNQ2xvc2Ug
KEZJTEUgKik7CkZJTEUgKiBERU1DcmVhdGUgKGNoYXIgKiwgaW50LCBkb3VibGUsIGRvdWJsZSwg
aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKik7
CnZvaWQgREVNV3JpdGVGaWxlIChGSUxFICopOwppbnQgREVNR2VvcmVmSU8gKEZJTEUgKiwgaW50
LCBjaGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgREVNSW50Q2hhbklPIChGSUxFICosIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQzMiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50LCBpbnQsIGludCwgaW50ICopOwppbnQgREVNQ2hhbkRlc2NJTyAoRklMRSAqLCBpbnQs
IGludCwgY2hhciAqKTsKdm9pZCBERU1TeW5jIChGSUxFICopOwppbnQgREVNTWVtQ2hhbkluZm8g
KEZJTEUgKiwgaW50LCB1bnNpZ25lZCBjaGFyICoqLCBsb25nICosIGxvbmcgKiwgaW50ICopOwoK
CgoKCgoKRklMRSAqIERHTk9wZW4gKGNoYXIgKiAsIGNoYXIgKik7CkZJTEUgKiBER05DcmVhdGUg
KGNoYXIgKik7CnZvaWQgREdOQ2xvc2UgKEZJTEUgKik7CnZvaWQgREdOVmVjdG9ySW5mbyAoRklM
RSAqLCBpbnQsIGludCwgVkluZm9fdCAqKTsKaW50IERHTlZlY3RvcklPIChWSW5mb190ICosIGlu
dCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLCBkb3VibGUgKiwgaW50KTsKdm9pZCBER05SZWdp
c3RlciAodm9pZCk7CmludCBER05TZWdOZXh0IChGSUxFICosIGludCwgaW50KTsKdm9pZCBER05T
ZWdEZXNjSU8gKEZJTEUgKiwgaW50LCBpbnQsIGludCwgY2hhciAqKTsKIyAzNTQgIi4uLy4uLy4u
L2xpYi9nZGJmcm10cy5oIgpGSUxFICogRExHT3BlbiAoY2hhciAqICwgY2hhciAqKTsKRklMRSAq
IERMR0NyZWF0ZSAoY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQsIGNoYXIgKiApOwp2b2lkIERM
R1JlZ2lzdGVyICh2b2lkKTsKCgoKCgoKCkZJTEUgKiBET1FPcGVuIChjaGFyICogLCBjaGFyICop
Owp2b2lkIERPUUNsb3NlIChGSUxFICopOwppbnQgRE9RR2VvcmVmSU8gKEZJTEUgKiwgaW50LCBj
aGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG91YmxlICosIGRvdWJsZSAqICk7CnZvaWQgRE9RUmVnaXN0ZXIgKHZvaWQpOwppbnQgRE9RVGVz
dE9wZW4gKEdEQlRlc3RJbmZvX3QgKik7Cgp2b2lkIERPMlJlZ2lzdGVyKCB2b2lkICk7CgoKCgoK
Cgp2b2lkIERSSVJlZ2lzdGVyKCB2b2lkICk7CiMgMzg4ICIuLi8uLi8uLi9saWIvZ2RiZnJtdHMu
aCIKdm9pZCBEVEVEUmVnaXN0ZXIgKHZvaWQpOwpGSUxFICogRFRFRE9wZW4gKGNoYXIgKiwgY2hh
ciAqKTsKaW50IERURURUZXN0T3BlbiAoR0RCVGVzdEluZm9fdCAqKTsKdm9pZCBEVEVEQ2xvc2Ug
KEZJTEUgKik7CmludCBEVEVER2VvcmVmSU8gKEZJTEUgKiwgaW50LCBjaGFyICosIGRvdWJsZSAq
LCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91
YmxlICopOwp2b2lkIERURURJbnRDaGFuSU8gKEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQsIGludDMyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGlu
dCwgaW50ICopOwp2b2lkIERURURTeW5jIChGSUxFICopOwppbnQgRFRFRE1lbUNoYW5JbmZvIChG
SUxFICosIGludCwgdW5zaWduZWQgY2hhciAqKiwgbG9uZyAqLCBsb25nICosIGludCAqKTsKaW50
IERURURDaGFuRGVzY0lPIChGSUxFICosIGludCwgaW50LCBjaGFyICopOwoKCgoKCgp2b2lkIERU
RVJlZ2lzdGVyKCB2b2lkICk7CgoKCgoKdm9pZCBEVkNSZWdpc3Rlcih2b2lkKTsKCgoKCnZvaWQg
RkRCUmVnaXN0ZXIodm9pZCk7CgoKCgp2b2lkIEdEQkRYRlJlZ2lzdGVyKCk7CgoKCgoKCgpGSUxF
ICogRUZGT3BlbiAoY2hhciAqLCBjaGFyICopOwppbnQgRUZGVGVzdE9wZW4gKEdEQlRlc3RJbmZv
X3QgKik7CnZvaWQgRUZGQ2xvc2UgKEZJTEUgKik7CnZvaWQgRUZGUmVnaXN0ZXIgKHZvaWQpOwpp
bnQgRUZGR2VvcmVmSU8gKEZJTEUgKiwgaW50LCBjaGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqKTsKaW50IEVG
RkNoYW5EZXNjSU8gKEZJTEUgKiwgaW50LCBpbnQsIGNoYXIgKik7CnZvaWQgRUZGQnl0ZUNoYW5J
TyAoRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50LCBpbnQgKik7CgoKCgoKCgp2
b2lkIEVJSVJlZ2lzdGVyICh2b2lkKTsKIyA0NjIgIi4uLy4uLy4uL2xpYi9nZGJmcm10cy5oIgp2
b2lkIEVPU1JlZ2lzdGVyKCB2b2lkICk7CgoKCgoKCgp2b2lkIEVQSFJlZ2lzdGVyICh2b2lkKTsK
CgoKCgoKCkZJTEUgKiBFUkRPcGVuIChjaGFyICosIGNoYXIgKik7CnZvaWQgRVJEQ2xvc2UgKEZJ
TEUgKik7CmludCBFUkRHZW9yZWZJTyAoRklMRSAqLCBpbnQsIGNoYXIgKiwgZG91YmxlICosIGRv
dWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICop
Owp2b2lkIEVSRFJlZ2lzdGVyICh2b2lkKTsKRklMRSAqIEVSREdEQkNyZWF0ZSAoY2hhciAqLCBp
bnQsIGludCwgaW50LCBpbnQsIGNoYXIgKik7CkZJTEUgKiBFUkRDcmVhdGUgKGNoYXIgKiwgaW50
LCBpbnQsIGludCwgaW50KTsKaW50IEVSRFRlc3RPcGVuIChHREJUZXN0SW5mb190ICopOwoKCgoK
Cgp2b2lkIEdBVlJlZ2lzdGVyKCB2b2lkICk7CgoKCgoKCnZvaWQgR0RCUlNUUmVnaXN0ZXIoKTsK
CgoKCgoKCnZvaWQgR0dGUmVnaXN0ZXIodm9pZCk7CgoKCgoKCgp2b2lkIEdSRFJlZ2lzdGVyKHZv
aWQpOwoKCgoKCgoKdm9pZCBHUkZSZWdpc3Rlcih2b2lkKTsKCgoKCgoKdm9pZCBHUlNSZWdpc3Rl
ciggdm9pZCApOwpGSUxFICogR1JTQ3JlYXRlQ2VsbCggY2hhciAqLCBpbnQsIGludCwgaW50LCBp
bnQsIGludCwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUgKTsKRklMRSAqIEdSU0NyZWF0ZVZlY0ZpbGUoIGNoYXIgKiApOwoKCgoK
dm9pZCBHSUFSZWdpc3Rlciggdm9pZCApOwoKCgoKCnZvaWQgR0lGUmVnaXN0ZXIoIHZvaWQgKTsK
dm9pZCBJbnN0YWxsR0lGV3JpdGVIYW5kbGVyKAogICAgc2l6ZV90ICgqSGFuZGxlcikoRklMRSAq
ZnAsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemVvZmJ1ZikgKTsKaW50IFdyaXRlR0lGKEZJTEUgKmZw
LCB1bnNpZ25lZCBjaGFyICpwaWMsIGludCBwdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICBp
bnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcm1hcCwg
dW5zaWduZWQgY2hhciAqZ21hcCwgdW5zaWduZWQgY2hhciAqYm1hcCwKICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbnVtY29scyxpbnQgY29sb3JzdHlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICpjb21tZW50KTsKCgoKCgp2b2lkIEdURVJlZ2lzdGVyKCB2b2lkICk7CgoKCgoKCnZv
aWQgR1hGUmVnaXN0ZXIoIHZvaWQgKTsKCgoKCgoKCnZvaWQgSERGUmVnaXN0ZXIgKHZvaWQpOwoK
CgoKCgoKdm9pZCBIREY0UmVnaXN0ZXIgKHZvaWQpOwoKCgoKCgp2b2lkIEhFR1JlZ2lzdGVyKCB2
b2lkICk7CgoKCgoKdm9pZCBIRVBSZWdpc3Rlciggdm9pZCApOwoKCgoKCgp2b2lkIEhFU1JlZ2lz
dGVyKCB2b2lkICk7CkZJTEUgKkhFU0NyZWF0ZSggY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQs
IGNoYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50LCBk
b3VibGUgKiwgZG91YmxlICogKTsKaW50IEhFU1dyaXRlTWV0YURhdGEoIEZJTEUgKiwgaW50LCBj
aGFyICosIGNoYXIgKiApOwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBuUGl4ZWxzOwogIGlu
dCBuTGluZXM7CgogIGludCBuVlFDb3VudDsKICBpbnQgKnBhblZRQ2hhbk51bTsKICBGSUxFICoq
cGFmcFZRQ2hhbjsKCiAgaW50IG5Ob25WUUNvdW50OwoKICBpbnQgKnBhbk5vblZRQ2hhbk51bTsK
ICBGSUxFICoqcGFmcE5vblZRQ2hhbjsKCiAgaW50IG5Db2RlVmVjdG9yczsKICBpbnQgbkRhdGFU
eXBlOwogIHZvaWQgKnBzT3RoZXJJbmZvOwogIGludCBuQml0c1BlckluZGV4Owp9IFZRdWJlSW5m
b190OwoKVEJvb2wgR2V0VlF1YmVJbmZvKCBGSUxFICosIFZRdWJlSW5mb190ICogKTsKVEJvb2wg
R2V0VlF1YmVDb2RlQm9vayggRklMRSAqLCB2b2lkICogKTsKVEJvb2wgR2V0VlF1YmVJbmRleE1h
cCggRklMRSAqLCBpbnQgKiwgdWludDE2ICogKTsKdm9pZCBWUXViZUNsZWFuVXAoIFZRdWJlSW5m
b190ICogKTsKVEJvb2wgVlF1YmVDcmVhdGUoIGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQgKTsKVEJvb2wgUHV0VlF1YmVDb2RlQm9vayggY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQs
IGludCAqLCB2b2lkICogKTsKVEJvb2wgUHV0VlF1YmVJbmRleE1hcCggY2hhciAqLCBpbnQgKiwg
aW50LCBpbnQsIHVpbnQxNiAqICk7CgoKCgoKCnZvaWQgSElSZWdpc3Rlciggdm9pZCApOwoKCgoK
aW50IElEQlRlc3RPcGVuKCBHREJUZXN0SW5mb190ICogKTsKdm9pZCBJREJSZWdpc3RlcigpOwoK
CgoKdm9pZCBJRkZUUmVnaXN0ZXIoKTsKCgoKCnZvaWQgSUlTUmVnaXN0ZXIoKTsKCgoKCgoKdm9p
ZCBJTkZSZWdpc3RlcigpOwoKCgoKCgoKdm9pZCBKREJSZWdpc3RlciAodm9pZCk7CkZJTEUgKiBK
REJDcmVhdGUgKGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50LCBjaGFyICogKTsKCgoKCnZvaWQg
SnBlZ0R1bXBNb3ZpZUZyYW1lKEZJTEUgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50
LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCk7CgoKCgp2b2lkIExBU1JlZ2lzdGVy
KHZvaWQpOwoKCgoKCgoKdm9pZCBMSU1SZWdpc3RlciAodm9pZCk7CgoKCgoKCnZvaWQgTElQUmVn
aXN0ZXIoIHZvaWQgKTsKCgoKCgoKCkZJTEUgKiBMU0NPcGVuIChjaGFyICogLCBjaGFyICopOwp2
b2lkIExTQ0Nsb3NlIChGSUxFICopOwp2b2lkIExTQ1JlZ2lzdGVyICh2b2lkKTsKaW50IExTQ1Rl
c3RPcGVuIChHREJUZXN0SW5mb190ICopOwpGSUxFICogTFNDQ3JlYXRlIChjaGFyICosIGludCwg
aW50LCBpbnQpOwoKCgoKCnZvaWQgTUlGUmVnaXN0ZXIoIHZvaWQgKTsKCmludCBNYXBJbmZvUmVh
ZFByb2pJbmZvKGNoYXIgKnBzelRBQkZpbGUsUHJvakluZm9fdCAqcHJval9pbmZvKTsKCgoKCgoK
dm9pZCBNRU1SZWdpc3RlciAodm9pZCk7CgoKCgoKCnZvaWQgTUZGUmVnaXN0ZXIgKHZvaWQpOwoK
CgoKCgp2b2lkIE1QQVJlZ2lzdGVyKHZvaWQpOwoKCgoKCgp2b2lkIE1QUFJlZ2lzdGVyKHZvaWQp
OwoKCgoKCgp2b2lkIE1QUlJlZ2lzdGVyKHZvaWQpOwp2b2lkIFJlYWRDU1lGaWxlKCBjaGFyICog
cHN6TVBSRmlsZW5hbWUsIGNoYXIgKiBwc3pDU1lCYXNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgUHJvakluZm9fdCAqIHBzUHJvaiApOwoKCgoKCgp2b2lkIE1QU1JlZ2lzdGVyKHZvaWQpOwoK
aW50IElMV0lTUmVhZFZlcnRpY2VzKEZJTEUgKmZwU0csIEZJTEUgKmZwQ0QsIGxvbmcgbERhdGFT
dGFydFBvc2l0aW9uLAogICAgZG91YmxlIGRmQWxwaGEsIGRvdWJsZSBkZkJldGExLCBkb3VibGUg
ZGZCZXRhMiwgaW50ICpuQ291bnQsCiAgICBHREJWZXJ0ZXggKipwYXNTZWdtZW50VmVydGljZXMp
OwoKCgoKCgp2b2lkIFRCVFJlZ2lzdGVyKHZvaWQpOwoKCnR5cGVkZWYgc3RydWN0IERvbWFpbklu
Zm8gewogICAgaW50IG5Eb21haW5XaWR0aDsKICAgIGludCBuTnVtYmVyUmVjb3JkczsKICAgIGlu
dCBuTnVtYmVyQ29sdW1uczsKICAgIGNoYXIgKnBzekRvbWFpbkRhdGE7Cn0gRG9tYWluSW5mbzsK
CnZvaWQgSUxXSVNSZWFkRE9NRmlsZSggY2hhciAqIHBzekZpbGVuYW1lLCBjaGFyICogcHN6RE9N
QmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgIERvbWFpbkluZm8gKnBzRG9tYWluSW5mbyk7
ClRCb29sIElMV0lTR2V0RE9NbWFpbk5hbWUoRG9tYWluSW5mbyAqcHNEb21haW5JbmZvLAogICAg
aW50IG5WYWx1ZVR5cGUsIGludCBuVmFsdWUsIGNoYXIgKipwcHN6RG9tYWluTmFtZSwgY2hhciAq
KnBwc3pEb21haW5Db2RlKTsKCgoKCgoKdm9pZCBNUllSZWdpc3RlciAodm9pZCk7CkZJTEUgKiBN
UllDcmVhdGUgKGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50LCBjaGFyICopOwojIDgwNCAiLi4v
Li4vLi4vbGliL2dkYmZybXRzLmgiCnZvaWQgTkRCUmVnaXN0ZXIgKHZvaWQpOwoKCgoKCgp2b2lk
IE5EQlJHQlJlZ2lzdGVyICh2b2lkKTsKCgoKCgoKCnZvaWQgTkRGUmVnaXN0ZXIgKHZvaWQpOwoK
CgoKCgp2b2lkIE5JVEZSZWdpc3Rlciggdm9pZCApOwoKdHlwZWRlZiBzdHJ1Y3QgTklURkluZm9f
cwp7CiAgc3RydWN0IE5JVEZJbmZvX3MgKm5leHQgOwogIEZJTEUgKmZwIDsKCiAgaW50NjQgbklt
YWdlSGVhZGVyT2Zmc2V0OwogIGRvdWJsZSBkZlZlcnNpb247CiAgVEJvb2wgYkNyZWF0aW5nTmV3
RmlsZTsKICBUQm9vbCBiSGVhZGVyV3JpdHRlbjsKICBjaGFyICoqcGFwc3pNZXRhRGF0YTsKICBU
Qm9vbCBiVGlsZTsKICBpbnQgbmJpdHM7CgogIGNoYXIgKnBzekRlc2NyaXB0aW9uOwogIGNoYXIg
c3pJbWFnZURhdGVbMjJdOwogIGludCBpbWFnZSA7CiAgaW50IHBpeGVsczsKICBpbnQgbGluZXMg
OwogIGxvbmcgb2Zmc2V0OwogIGxvbmcgcmVjc2l6OwoKICBpbnQgZW5jcnlwIDsKICBjaGFyIGlj
WzNdIDsKICBjaGFyIGNvbXJhdFs1XTsKICBpbnQgbmJhbmRzIDsKICBjaGFyIGltb2RlWzJdIDsK
ICBsb25nIG5icHAgOwoKICBpbnQgbkxvY1RhYmxlTG9jOwogIGludCBuSW1hZ2VEaXNwbGF5UGFy
YW1ldGVyTG9jOwogIGludCBuQ29tcHJlc3Npb25TZWN0aW9uTG9jOwogIGludCBuQ29tcHJlc3Np
b25Mb29rdXBTdWJzZWN0aW9uTG9jOwogIGludCBuU3BhdGlhbERhdGFTdWJzZWN0aW9uTG9jOwog
IGludCBuQ292ZXJhZ2VTZWN0aW9uTG9jOwogIGludCBuTWFza1NlY3Rpb25Mb2M7CiAgaW50IG5D
b2xvcm1hcFN1YnNlY3Rpb25Mb2M7CgogIHVpbnQzMiAqYXBhblZRQ29tcExVVFs0XTsKICB1aW50
MzIgKnBhblRpbGVPZmZzZXQ7CiAgdW5zaWduZWQgY2hhciAqcGFieUxVVDsKCiAgVEJvb2wgYkdp
dmVuR2VvcmVmV2FybmluZzsKCiAgaW50IG5icHIgOwogIGludCBuYnBjIDsKICBpbnQgbnBwYmg7
CiAgaW50IG5wcGJ2OwoKICBUQm9vbCBiUlBDT087CiAgaW50IGxpbmVfb2ZmOwogIGludCBzYW1w
X29mZjsKICBkb3VibGUgbGF0X29mZjsKICBkb3VibGUgbG9uZ19vZmY7CiAgaW50IGhlaWdodF9v
ZmY7CiAgaW50IGxpbmVfc2NhbGU7CiAgaW50IHNhbXBfc2NhbGU7CiAgZG91YmxlIGxhdF9zY2Fs
ZTsKICBkb3VibGUgbG9uZ19zY2FsZTsKICBpbnQgaGVpZ2h0X3NjYWxlOwogIGRvdWJsZSBsaW5l
X251bV9jb2VmZlsyMF07CiAgZG91YmxlIGxpbmVfZGVuX2NvZWZmWzIwXTsKICBkb3VibGUgc2Ft
cF9udW1fY29lZmZbMjBdOwogIGRvdWJsZSBzYW1wX2Rlbl9jb2VmZlsyMF07CgoKICBpbnQgbkNv
bUZhYzsKICB1bmlvbgogIHsKICAgICBzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgKmM7CiAg
ICAgc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKmQ7CiAgfSBpbmZvOwoKICBzdHJ1Y3Qg
anBlZ19lcnJvcl9tZ3IgKmplcnI7CgogIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKCiAgUHJvakluZm9f
dCBvUHJvajsKfSBOSVRGSW5mb190OwoKdm9pZCBOSVRGRGF0YSAoRklMRSAqLCBOSVRGSW5mb190
ICoqKTsKdm9pZCBOSVRGR2VvMkltZyAoTklURkluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91
YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKik7Cmlu
dCBOSVRGSW1nMkdlbyAoTklURkluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBGSUxFICosIGRv
dWJsZSwgaW50KTsKCgoKCgoKdm9pZCBOVEZSZWdpc3Rlciggdm9pZCApOwoKCgoKdm9pZCBOVEZM
TFJlZ2lzdGVyKHZvaWQpOwoKCgoKdm9pZCBOVEZDVFJlZ2lzdGVyKHZvaWQpOwoKCgoKdm9pZCBO
VEZTVFJlZ2lzdGVyKHZvaWQpOwoKCgoKdm9pZCBOVEZPU1JlZ2lzdGVyKHZvaWQpOwoKCgoKdm9p
ZCBOVEZCRFJlZ2lzdGVyKHZvaWQpOwoKCgoKdm9pZCBOVEZCTFJlZ2lzdGVyKHZvaWQpOwoKCgoK
dm9pZCBOVEZBUFJlZ2lzdGVyKHZvaWQpOwoKCgoKdm9pZCBOVEZNRFJlZ2lzdGVyKHZvaWQpOwoK
Cgp2b2lkIE5UWFJlZ2lzdGVyKCk7CgoKCgp2b2lkIE5WSVJlZ2lzdGVyKCB2b2lkICk7CgoKCgoK
Cgp2b2lkIE9CSlJlZ2lzdGVyKCB2b2lkICk7CgoKCgoKCgp2b2lkIE9HRElSZWdpc3Rlciggdm9p
ZCApOwoKCgoKCnZvaWQgT1JBUmVnaXN0ZXIoIHZvaWQgKTsKCgoKCgoKdm9pZCBPUkJSZWdpc3Rl
ciggdm9pZCApOwoKCgoKCgoKdm9pZCBQTFRSZWdpc3Rlcih2b2lkKTsKCgoKCgp2b2lkIFBQTURC
UmVnaXN0ZXIodm9pZCk7CgoKCgoKCnZvaWQgUk5IUmVnaXN0ZXIodm9pZCk7CgoKCgoKCnZvaWQg
U0RFUmVnaXN0ZXIodm9pZCk7CgoKCgoKCnZvaWQgREZBRFJlZ2lzdGVyKHZvaWQpOwoKCgoKCgp2
b2lkIERBRklGUmVnaXN0ZXIodm9pZCk7CgoKCgoKCnZvaWQgRFZEUmVnaXN0ZXIodm9pZCk7CgoK
CgoKCgp2b2lkIERWT0ZSZWdpc3Rlcih2b2lkKTsKCgoKCgoKdm9pZCBCSUdJREVBUmVnaXN0ZXIo
dm9pZCk7CgoKCgoKCnZvaWQgQURPUmVnaXN0ZXIodm9pZCk7CgoKdm9pZCBEQkFET1JlZ2lzdGVy
KHZvaWQpOwoKCgoKCnZvaWQgWExTREFPUmVnaXN0ZXIodm9pZCk7CnZvaWQgTURCREFPUmVnaXN0
ZXIodm9pZCk7CgoKCgoKdm9pZCBTSFBSZWdpc3Rlcih2b2lkKTsKIyAxMDkyICIuLi8uLi8uLi9s
aWIvZ2RiZnJtdHMuaCIKdm9pZCBTUENSZWdpc3RlciAodm9pZCk7CgoKCgoKCgp2b2lkIFNQQ0JS
ZWdpc3RlciAodm9pZCk7CgoKCgoKCgp2b2lkIFNQVlJlZ2lzdGVyICh2b2lkKTsKCgoKCgoKCnZv
aWQgU1VOUmVnaXN0ZXIodm9pZCk7CkZJTEUgKiBTVU5DcmVhdGUoY2hhciAqLCBpbnQsIGludCwg
aW50KTsKCgoKCgoKdm9pZCBTUFNSZWdpc3Rlciggdm9pZCApOwoKCgoKCgp2b2lkIFNRRFJlZ2lz
dGVyKCB2b2lkICk7CgoKCgoKCnZvaWQgU1NJUmVnaXN0ZXIoIHZvaWQgKTsKCgoKCgp2b2lkIFRC
QVJlZ2lzdGVyKHZvaWQpOwoKCgoKCgp2b2lkIFNXRlJlZ2lzdGVyKHZvaWQpOwojIDExNjAgIi4u
Ly4uLy4uL2xpYi9nZGJmcm10cy5oIgp2b2lkIFREQlJlZ2lzdGVyICh2b2lkKTsKCgoKCgoKCnZv
aWQgVEdBUmVnaXN0ZXIodm9pZCk7CgoKCgoKdm9pZCBUSU5SZWdpc3Rlciggdm9pZCApOwoKCgoK
CgoKdm9pZCBVTklSZWdpc3RlciAodm9pZCk7CgoKCgoKCnZvaWQgVkVIUmVnaXN0ZXIodm9pZCk7
CgoKCgp2b2lkIFZJQ0FSUmVnaXN0ZXIodm9pZCk7CgoKCgoKdm9pZCBWRFJlZ2lzdGVyKCB2b2lk
ICk7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CgoKCgoKICAgIGludCB2b2lkX3BhcmFtZXRlcjsK
fSBWUEZIZWFkZXI7Cgp0eXBlZGVmIHN0cnVjdCB2cGYKewogIHN0cnVjdCB2cGYgKm5leHQ7CiAg
RklMRSAqZnBWUEY7CiAgVlBGSGVhZGVyICpIZWFkZXI7CiAgZG91YmxlIFhNaW47CiAgZG91Ymxl
IFlNaW47CiAgZG91YmxlIFhNYXg7CiAgZG91YmxlIFlNYXg7CiAgZG91YmxlIFhTdGFydDsKICBk
b3VibGUgWEVuZDsKICBkb3VibGUgWVN0YXJ0OwogIGRvdWJsZSBZRW5kOwogIGludCBNZWRpYVR5
cGU7CiAgY2hhciAqRGF0YWJhc2VQYXRoOwogIGNoYXIgKkxpYnJhcnk7CiAgY2hhciAqKkNvdmVy
YWdlOwogIGludCBOQ292ZXJhZ2U7CiAgY2hhciAqQWNjZXNzUGF0aDsKICBpbnQgTlRpbGU7CiAg
aW50IExhc3RUaWxlOwogIGludCAqVGlsZUZpcnN0U3RydWN0OwogIGludCAqVGlsZUxhc3RTdHJ1
Y3Q7CiAgY2hhciAqKlRpbGVSZWZTdHI7CiAgY2hhciAqKlNlZ21lbnREZXNjcmlwdG9yOwogIGlu
dCBOU2VnbWVudDsKfSBWUEZJbmZvX3Q7CgoKCkZJTEUgKiBWUEZPcGVuIChjaGFyICosIGNoYXIg
Kik7CnZvaWQgVlBGQ2xvc2UgKEZJTEUgKik7CnZvaWQgVlBGUmVnaXN0ZXIgKHZvaWQpOwp2b2lk
IFZQRlZlY3RvckluZm8gKEZJTEUgKiwgaW50LCBpbnQsIFZJbmZvX3QgKik7CmludCBWUEZWZWN0
b3JJTyAoVkluZm9fdCAqLCBpbnQsIGludCwgaW50LCBpbnQgKiwgaW50ICosIGludCAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgZG91YmxlICoqLCBkb3VibGUgKiwgaW50
KTsKaW50IFZQRkFjY2Vzc0luZm8gKEZJTEUgKiwgVlBGSW5mb190ICopOwppbnQgVlBGU2VnTmV4
dCggRklMRSAqLCBpbnQsIGludCApOwp2b2lkIFZQRlNlZ0Rlc2NJTyggRklMRSAqLCBpbnQsIGlu
dCwgaW50LCBjaGFyICogKTsKCgoKCgoKdm9pZCBWVFhSZWdpc3Rlcih2b2lkKTsKCgoKCgoKCnZv
aWQgV01QUmVnaXN0ZXIgKHZvaWQpOwoKCgoKCgoKdm9pZCBYQk1SZWdpc3RlciAodm9pZCk7CgoK
CgoKCgpGSUxFICogWFdEQ3JlYXRlIChjaGFyICosIGludCwgaW50LCBpbnQsIGludCk7CnZvaWQg
WFdEUmVnaXN0ZXIgKHZvaWQpOwojIDEzMTAgIi4uLy4uLy4uL2xpYi9nZGJmcm10cy5oIgp2b2lk
IFNSVlJlZ2lzdGVyKCB2b2lkICk7CgoKCgoKdm9pZCBDRU9TUmVnaXN0ZXIgKHZvaWQpOwoKCgoK
CgoKdm9pZCBQQ1hSZWdpc3Rlcih2b2lkKTsKCgoKCgp2b2lkIEdHSlJlZ2lzdGVyKHZvaWQpOwpH
REJMYXllciBHR0pHZXRQcmltYXJ5TGF5ZXIoR0RCTGF5ZXIgcHNKb2luZWRMYXllcik7CkZJTEUg
KkdHSkdldFByaW1hcnlGaWxlKEZJTEUgKmZwKTsKR0RCSm9pbkluZm8gKkdHSkdldEpvaW5JbmZv
UmVmKEdEQkxheWVyIHBzSm9pbmVkTGF5ZXIpOwoKCgoKCnZvaWQgR1RPUE8zMFJlZ2lzdGVyKHZv
aWQpOwoKCgoKCnZvaWQgRUxBU1JlZ2lzdGVyKHZvaWQpOwoKCgoKCnZvaWQgVEJCUmVnaXN0ZXIo
dm9pZCk7CgoKCgoKdm9pZCBDTUJSZWdpc3Rlcih2b2lkKTsKCgoKCgp2b2lkIElEUlJlZ2lzdGVy
KHZvaWQpOwoKCgoKCnZvaWQgU0RUU1JlZ2lzdGVyKHZvaWQpOwoKCgoKCnZvaWQgTUlUQUJSZWdp
c3Rlcih2b2lkKTsKCgoKCkZJTEUgKlRJTE9wZW4oY2hhciAqcHN6RmlsZW5hbWUsIGNoYXIgKik7
CnZvaWQgVElMQ2xvc2UoRklMRSAqZnApOwp2b2lkIFRJTFJlZ2lzdGVyKHZvaWQpOwpUQm9vbCBU
SUxUZXN0T3BlbihHREJUZXN0SW5mbyAqcHNUZXN0SW5mbyk7CnZvaWQgVElMU2l6ZUluZm8oRklM
RSAqZnAsIGludCAqblBpeGVscywgaW50ICpuTGluZXMsIGludCAqbkNoYW5uZWxzKTsKaW50IFRJ
TENoYW5UeXBlKEZJTEUgKmZwLCBpbnQgbkNoYW5uZWwpOwppbnQgVElMUHJvamVjdGlvbklPKEZJ
TEUgKmZwLCBpbnQgbkZ1bmMsIFByb2pJbmZvX3QgKnBzUHJvakluZm8pOwp2b2lkIFRJTEJ5dGVD
aGFuSU8oRklMRSAqZnAsIGludCBuRnVuYywKICAgICAgICAgICAgICAgICAgIGludCBuWE9mZiwg
aW50IG5ZT2ZmLCBpbnQgblhTaXplLCBpbnQgbllTaXplLAogICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciAqcGFieUltZ0J1ZiwgaW50IG5CdWZYU2l6ZSwgaW50IG5CdWZZU2l6ZSwKICAg
ICAgICAgICAgICAgICAgIGludCBuQnVmQ2hhbkNvdW50LCBpbnQgKnBhbkNoYW5NYXApOwojIDE0
NTQgIi4uLy4uLy4uL2xpYi9nZGJmcm10cy5oIgp9CiMgMjM4ICIuLi8uLi8uLi9saWIvcGNpLmgi
IDIKIyAxICIuLi8uLi8uLi9saWIvaWRiLmgiIDEKIyAzNyAiLi4vLi4vLi4vbGliL2lkYi5oIgoj
IDEgIi4uLy4uLy4uL2xpYi9nZGIuaCIgMQojIDM4ICIuLi8uLi8uLi9saWIvaWRiLmgiIDIKCmV4
dGVybiAiQyIgewoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgblNlZ21lbnQ7CiAgICBp
bnQgblN0YXJ0QmxvY2s7CiAgICBpbnQgbk93bmluZ0xheWVyOwogICAgaW50IG5OZXh0QmxvY2s7
Cn0gSURCU3lzQmxvY2tJbmZvOwoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgblN0YXJ0
U3lzQmxvY2s7CiAgICBpbnQgbkxheWVyVHlwZTsKICAgIGludCBuTGVuZ3RoSW5CeXRlczsKCiAg
ICBpbnQgbkxheWVyQmxvY2tzOwogICAgaW50ICpwYW5MYXllckJsb2NrTWFwOwp9IElEQlN5c0xh
eWVySW5mbzsKCnR5cGVkZWYgc3RydWN0CnsKICAgIGNoYXIgY2hGbGFnOwogICAgY2hhciBzek5h
bWVbOV07CiAgICBpbnQgblR5cGU7CiAgICBsb25nIG5TdGFydDsKICAgIGxvbmcgblNpemU7Cn0g
SURCU2VnUHRJbmZvOwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICBsb25nIGZzdGltYTsKICBsb25n
IGZzdGhkcjsKICBpbnQgY2hhbm5lbHM7CiAgaW50IHBpeGVsczsKICBpbnQgbGluZXM7CiAgaW50
IGR1bW15OwogIGxvbmcgZnN0YmtzOwogIGxvbmcgYmxrcHRyOwogIGxvbmcgdG90c2l6OwogIGlu
dCBzdGF0dXM7CiAgbG9uZyBJbWdCbG9ja3M7CgoKICBpbnQgTGFzdFNlZzsKICBsb25nIExhc3RT
dGFydDsKICBsb25nIExhc3RTaXplOwogIGNoYXIgTGFzdEZsYWc7CiAgaW50IExhc3RUeXBlOwoK
CiAgaW50IGNobjh1OwogIGludCBjaG4xNnM7CiAgaW50IGNobjE2dTsKICBpbnQgY2huMzJyOwog
IGludCBJbnRlcmxlYXZlOwoKCiAgRklMRSAqKlJhd0ZpbGU7CiAgaW50ICpSYXdDaGFubmVsOwog
IGludCAqUmF3Q2hhbkRCSVc7CgogIGNoYXIgKkxvY2s7CiAgdW5zaWduZWQgY2hhciAqSW5pdE92
ZXJ2aWV3czsKCgogIGludCBNYXhCaXRtYXBzOwogIGNoYXIgKkRlc2NCaXRtYXBzOwoKICBsb25n
IExhc3RSZWFkVGltZTsKCgoKCiAgaW50IG5WZWN0b3JMYXllcnM7CiAgc3RydWN0IEdEQkxheWVy
X3QgKipwYXBzTGF5ZXJzOwoKCgoKICBUQm9vbCBiTWV0YURhdGFDaGFuZ2VkOwogIGNoYXIgKipw
YXBzek1ldGFEYXRhOwoKCgoKCgogIGludCBuU3lzRGlyU2VnOwogIFRCb29sIGJCbG9ja0luZm9E
aXJ0eTsKICBpbnQgbkdyb3dpbmdTZWc7CiAgaW50IG5GaXJzdEZyZWVCbG9jazsKCiAgaW50IG5T
eXNCbG9ja3M7CiAgSURCU3lzQmxvY2tJbmZvICpwYXNTeXNCbG9ja0luZm87CgogIGludCBuQmxv
Y2tDYWNoZUlEOwogIGludCBuQmxvY2tDYWNoZUxheWVyOwogIFRCb29sIGJCbG9ja0NhY2hlRGly
dHk7CiAgdW5zaWduZWQgY2hhciAqcGFieUJsb2NrQ2FjaGU7CgogIGludCBuU3lzTGF5ZXJzOwog
IElEQlN5c0xheWVySW5mbyAqcGFzU3lzTGF5ZXJJbmZvOwoKCgoKICBpbnQgbk1heFNlZ21lbnRz
OwogIElEQlNlZ1B0SW5mbyAqcGFzU2VnUHRJbmZvOwoKCgoKCgogIFRCb29sIGJUcnlpbmdUb0Ns
b3NlOwoKICBjaGFyICpwc3pFbmNyeXB0S2V5Owp9IElEQkluZm9fdDsKCgoKCnR5cGVkZWYgc3Ry
dWN0IHsKICBjaGFyIEZpbGVUeXBlWzhdOwogIGNoYXIgVmVyc2lvbls4XTsKICBjaGFyIEZpbGVT
aXplWzE2XTsKICBjaGFyIFJlc2VydmVkWzE2XTsKICBjaGFyIERlc2NyaXB0aW9uWzY0XTsKICBj
aGFyIEZhY2lsaXR5WzMyXTsKICBjaGFyIFRleHQxWzY0XTsKICBjaGFyIFRleHQyWzY0XTsKICBj
aGFyIENyZWF0aW9uRGF0ZVsxNl07CiAgY2hhciBVcGRhdGVEYXRlWzE2XTsKCiAgY2hhciBJbWFn
ZVN0YXJ0WzE2XTsKICBjaGFyIEltYWdlU2l6ZVsxNl07CiAgY2hhciBJbWFnZUhlYWRTdGFydFsx
Nl07CiAgY2hhciBJbWFnZUhlYWRTaXplWzhdOwogIGNoYXIgSW50ZXJsZWF2ZVs4XTsKICBjaGFy
IFJlc2VydmVkMls4XTsKICBjaGFyIENoYW5uZWxzWzhdOwogIGNoYXIgUGl4ZWxzWzhdOwogIGNo
YXIgTGluZXNbOF07CiAgY2hhciBQaXhlbFVuaXRbOF07CiAgY2hhciBYUGl4ZWxTaXplWzE2XTsK
ICBjaGFyIFlQaXhlbFNpemVbMTZdOwoKICBjaGFyIFNlZ21lbnRIZWFkU3RhcnRbMTZdOwogIGNo
YXIgU2VnbWVudEhlYWRTaXplWzhdOwoKICBjaGFyIE51bThVWzRdOwogIGNoYXIgTnVtMTZTWzRd
OwogIGNoYXIgTnVtMTZVWzRdOwogIGNoYXIgTnVtMzJSWzRdOwogIGNoYXIgUmVzZXJ2ZWQzWzMy
XTsKfSBGaWxlSGVhZGVyX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgY2hhciBEZXNjcmlwdGlvbls2
NF07CiAgY2hhciBGaWxlbmFtZVs2NF07CiAgY2hhciBDcmVhdGlvbkRhdGVbMTZdOwogIGNoYXIg
VXBkYXRlRGF0ZVsxNl07CiAgY2hhciBEYXRhVHlwZVs4XTsKICBjaGFyIEltYWdlT2Zmc2V0WzE2
XTsKICBjaGFyIFBpeGVsT2Zmc2V0WzhdOwogIGNoYXIgTGluZU9mZnNldFs4XTsKICBjaGFyIENo
YW5uZWxMb2NrOwogIGNoYXIgQnl0ZVN3YXBwZWQ7CiAgY2hhciBEYXRhVW5pdHNbMTZdOwogIGNo
YXIgQWRkQ29lZmZbMTZdOwogIGNoYXIgTXVsdENvZWZmWzE2XTsKICBjaGFyIEZpbGVYT2ZmWzhd
OwogIGNoYXIgRmlsZVlPZmZbOF07CiAgY2hhciBGaWxlWFNpemVbOF07CiAgY2hhciBGaWxlWVNp
emVbOF07CiAgY2hhciBHREJDaGFubmVsWzhdOwogIGNoYXIgUmVzZXJ2ZWRbOTRdOwogIGNoYXIg
SGlzdG9yeVs4MCo4XTsKfSBJbWFnZUhlYWRlcl90OwoKdHlwZWRlZiBzdHJ1Y3QgewogIGNoYXIg
VHJhbnNmb3JtWzE2XTsKICBjaGFyIElucHV0U3lzWzE2XTsKICBjaGFyIE91dHB1dFN5c1sxNl07
CiAgY2hhciBOWENvZWZbOF07CiAgY2hhciBOWUNvZWZbOF07CiAgY2hhciBSZXNlcnZlZFsxNDhd
OwogIGNoYXIgWENvZWZbMjYqNTVdOwogIGNoYXIgWUNvZWZbMjYqNTVdOwp9IElEQkdlb3JlZkRh
dGFfdDsKCmludCBJREJJbWFnZUhlYWRlcklPKCBGSUxFICosIGludCwgaW50LCBJbWFnZUhlYWRl
cl90ICogKTsKCgoKCgpGSUxFICogSURCT3BlbiggY2hhciAqLCBjaGFyICogKTsKRklMRSAqIElE
QlJlb3BlbihGSUxFICopOwpGSUxFICogSURCQ3JlYXRlKCBjaGFyICosIGludCwgaW50LCBpbnQg
KiwgY2hhciAqICk7CkZJTEUgKiBJREJHREJDcmVhdGUoIGNoYXIgKiwgaW50LCBpbnQsIGludCwg
aW50LCBjaGFyICogKTsKY29uc3QgY2hhciAqIElEQkV4cGFuZEZpbGVuYW1lKCBjb25zdCBjaGFy
ICogcHN6T3JpZ2luYWwgKTsKCnZvaWQgSURCU2VnRHNjKCBGSUxFICosIGludCApOwppbnQgSURC
VGVzdE9wZW4oIEdEQlRlc3RJbmZvX3QgKiApOwp2b2lkIElEQkJ1ZmZSZWFsbG9jKCBsb25nICk7
CnZvaWQgSURCQnVmZkFsbG9jKCB2b2lkICk7CnZvaWQgSURCU3luYyggRklMRSAqICk7CnZvaWQg
SURCUmVnaXN0ZXIoIHZvaWQgKTsKdm9pZCBJREJCaXRDb3VudCggRklMRSAqLCBpbnQsIGludCAq
KTsKdm9pZCBJREJGaWxlRGVzYyggRklMRSAqICk7CnZvaWQgSURCUGl4ZWxTaXplKCBGSUxFICos
IGludCwgZmxvYXQgKiwgZmxvYXQgKiwgY2hhciAqICk7CnZvaWQgSURCU2VnQWJvcnRIaXMoIEZJ
TEUgKiwgaW50ICk7CnZvaWQgSURCU2VnQ2hlY2soIEZJTEUgKiwgaW50ICosIGludCwgaW50LCBj
aGFyICogKTsKaW50IElEQlNlZ0NyZWF0ZSggRklMRSAqLCBjaGFyICosIGNoYXIgKiwgaW50LCBs
b25nICk7CmludCBJREJHREJTZWdDcmVhdGUoIEZJTEUgKiwgY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICosIGludCApOwp2b2lkIElEQlNlZ0RlbGV0ZSggRklMRSAqLCBpbnQgKTsKdm9pZCBJREJT
ZWdEZXAoIEZJTEUgKiwgaW50LCBjaGFyICosIGludCApOwp2b2lkIElEQlNlZ0lPKCBGSUxFICos
IGludCwgbG9uZywgbG9uZywgdm9pZCAqLCBpbnQgKTsKdm9pZCBJREJCaW5hcnlJTyggRklMRSAq
LCBpbnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwppbnQgSURCR2V0QmluYXJ5
TGVuZ3RoKCBGSUxFICosIGludCApOwp2b2lkIElEQlNlZ0luZm8oIEZJTEUgKiwgaW50LCBjaGFy
ICosIGludCAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKiwgbG9u
ZyAqICk7CnZvaWQgSURCU2VnSW5mb0lPKCBGSUxFICosIGludCwgaW50LCBjaGFyICosIGludCAq
LCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKiwgbG9uZyAqICk7CnZv
aWQgSURCU2VnUmVhZEhpcyggRklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7CnZvaWQgaWRiU2Vn
VXBkYXRlKCBGSUxFICosIGludCApOwp2b2lkIElEQkJ1aWxkU2VnUHRNYXAoIEZJTEUgKiBmcCAp
Owp2b2lkIElEQlNlZ1dyaXRlSGlzKCBGSUxFICosIGludCwgY2hhciAqICk7CnZvaWQgSURCU2Vn
V3JpdGVDb250ZW50cyggRklMRSAqLCBpbnQsIGNoYXIgKiApOwp2b2lkIElEQlNpemVJbmZvKCBG
SUxFICosIGludCAqLCBpbnQgKiwgaW50ICogKTsKdm9pZCBJREJMdXRJTyggRklMRSAqLCBpbnQs
IGludCwgdW5zaWduZWQgY2hhciAqICk7CnZvaWQgSURCQnJlYWtQb2ludEx1dElPKCBGSUxFICos
IGludCwgaW50LCBpbnQgKiwgaW50ICosCiAgICAgICAgICAgIEdEQkJyZWFrUG9pbnRMVVRfdCAq
Kik7CnZvaWQgSURCUGN0SU8oIEZJTEUgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwp2
b2lkIElEQkJyZWFrUG9pbnRQY3RJTyggRklMRSAqLCBpbnQsIGludCwgaW50ICosIGludCAqLAog
ICAgICAgICAgICBHREJCcmVha1BvaW50UENUX3QgKiopOwp2b2lkIElEQkdjcElPKCBGSUxFICos
IGludCwgaW50LCBpbnQsIGludCAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqLAogICAgICAgICAg
ICAgICAgY2hhciAqLCBpbnQgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91Ymxl
ICosCiAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICogKTsKdm9pZCBJREJHREJHY3BJ
TyggRklMRSAqLCBpbnQsIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwg
Y2hhciAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgaW50ICosIGRvdWJs
ZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICBk
b3VibGUgKiwgZG91YmxlICogKTsKaW50IElEQkdlb3JlZklPKCBGSUxFICosIGludCwgY2hhciAq
LCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICogKTsKaW50IElEQkdlb3JlZklPMiggRklM
RSAqLCBpbnQsIGNoYXIgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqICk7Cmlu
dCBJREJQcm9qZWN0aW9uSU8oIEZJTEUgKiwgaW50LCBpbnQsIFByb2pJbmZvX3QgKiApOwppbnQg
SURCR0RCUHJvamVjdGlvbklPKCBGSUxFICosIGludCwgUHJvakluZm9fdCAqICk7CnZvaWQgSURC
Qml0bWFwSU8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQgKTsKdm9pZCBJREJB
cnJheUlPKCBGSUxFICosIGludCwgaW50LCBpbnQgKiwgaW50ICosIGRvdWJsZSAqKixjaGFyKik7
CmludCBJREJIaW50KCBGSUxFICogKTsKaW50IElEQkNoYW5UeXBlKCBGSUxFICosIGludCApOwp2
b2lkIElEQkNoYW5BYm9ydEhpcyggRklMRSAqLCBpbnQgKTsKdm9pZCBJREJDaGFuRGVzYyggRklM
RSAqLCBpbnQsIGludCAqICk7CnZvaWQgSURCQ2hhblJlYWRIaXMoIEZJTEUgKiwgaW50LCBpbnQs
IGNoYXIgKiApOwp2b2lkIElEQkNoYW5Xcml0ZUhpcyggRklMRSAqLCBpbnQsIGNoYXIgKiApOwpp
bnQgSURCQ2hhbkRlc2NJTyggRklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7CnZvaWQgSURCQ2hh
bkRlbGV0ZSggRklMRSAqLCBpbnQgLCBpbnQgKiwgUENJQ291bnRlcik7CmNvbnN0IGNoYXIgKiBJ
REJSZWFkSGlzdG9yeSggRklMRSAqLCBpbnQsIGludCwgaW50ICk7CnZvaWQgSURCV3JpdGVIaXN0
b3J5KCBGSUxFICosIGludCwgaW50LCBjb25zdCBjaGFyICogKTsKCnZvaWQgSURCQnl0ZUNoYW5J
TyggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50LCBpbnQgKiApOwp2b2lkIElE
QkludENoYW5JTyAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludDMyICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGludCAqICk7CnZvaWQg
SURCUmVhbENoYW5JTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgZmxvYXQgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCwgaW50ICogKTsKdm9p
ZCBJREJCeXRlRmlsZUlPKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCB1bnNpZ25l
ZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGlu
dCAqICk7CnZvaWQgSURCSW50RmlsZUlPICggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50MzIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCwg
aW50ICopOwp2b2lkIElEQlJlYWxGaWxlSU8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQsIGZsb2F0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQs
IGludCAqKTsKClRCb29sIElEQkZpbGVPcGVuKCBGSUxFICosIGludCwgaW50ICk7CnZvaWQgSURC
RmlsZUNsb3NlKCBGSUxFICosIGludCApOwp2b2lkIElEQkluaXRPdmVydmlldyggRklMRSAqLCBp
bnQgKTsKdm9pZCBJREJTZXRDaGFuRmlsZSggRklMRSAqLCBpbnQsIGNoYXIgKiwgaW50LCBsb25n
LCBsb25nLCBsb25nLCBpbnQgKTsKdm9pZCBJREJTZXRHREJDaGFuRmlsZSggRklMRSAqLCBpbnQs
IGNoYXIgKiwgaW50LCBpbnQgKiwgaW50ICk7Cgp2b2lkIElEQlZlY3RvckluZm8oIEZJTEUgKiwg
aW50LCBpbnQsIFZJbmZvX3QgKiApOwppbnQgSURCVmVjdG9ySU8oIFZJbmZvX3QgKiwgaW50LCBp
bnQsIGludCwgaW50ICosIGludCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMy
ICosIGludDMyICosIGRvdWJsZSAqKiwgZG91YmxlICosIGludCApOwppbnQgSURCU2VnTmV4dCgg
RklMRSAqLCBpbnQsIGludCApOwp2b2lkIElEQlNlZ0Rlc2NJTyggRklMRSAqLCBpbnQsIGludCwg
aW50LCBjaGFyICogKTsKCnZvaWQgSURCQ2xvc2UoIEZJTEUgKiApOwp2b2lkIElEQkNsb3NlVmVj
dG9ycyggRklMRSAqICk7CmludCBJREJMb2NrQ2hlY2soIEZJTEUgKiwgaW50LCBpbnQgKiwgY2hh
ciAqICk7CmludCBJREJHZXRDaGFuSW5mbyggRklMRSAqLCBpbnQsIGNoYXIgKiwgaW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqLCBsb25nICosIGxvbmcgKiwgaW50ICog
KTsKVEJvb2wgSURCR2V0VGlsZUluZm8oIEZJTEUgKiwgaW50LCBpbnQgKiwgaW50ICogKTsKCnZv
aWQgSURCVGV4dEFjY2VzcyggRklMRSAqLCBUSW5mb190ICosIGNoYXIgKiwgaW50ICk7CmludCBJ
REJUZXh0UmVhZCggVEluZm9fdCAqLCBjaGFyICosIGludCApOwp2b2lkIElEQlRleHRXcml0ZShU
SW5mb190ICosIGNoYXIgKiApOwoKY2hhciAqKiBJREJNZXRhRGF0YUlPKCBGSUxFICosIGludCwg
aW50LCBpbnQsIGNoYXIgKiogKTsKCnZvaWQgSURCU2lnbmF0dXJlSU8oIEZJTEUgKmZwLCBpbnQg
ZnVuYywgaW50IHNlZ21lbnQsIFNpZ25hdHVyZV90ICpzaWcgKTsKCnZvaWQgSURCU2F0RXBoZW1l
cmlzSU8oRklMRSAqZnAsIGludCBmdW5jLCBpbnQgc2Vnbm8sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgRXBoZW1lcmlzU2VnX3QgKnNlZ21lbnQpOwppbnQgRmluZDFzdEVwU2VnbWVudChGSUxF
ICpmcCk7CnZvaWQgSURCU2F0RXBoZW1lcmlzRnJlZShFcGhlbWVyaXNTZWdfdCAqc2VnbWVudCk7
CnZvaWQgSURCU2F0QXR0aXR1ZGVJTyhGSUxFICpmcCwgaW50IGZ1bmMsIGludCBzZWdubywKICAg
ICAgICAgICAgICAgICAgICAgICAgIEF0dGl0dWRlU2VnX3QgKnNlZ21lbnQpOwp2b2lkIFRleHRU
b09yYml0KEZJTEUgKmZwLCBpbnQgc2Vnbm8sIEVwaGVtZXJpc1NlZ190ICpzZWdtZW50LAogICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipzdHJpbmdMaXN0LCBjaGFyICpkYnNuLCBjaGFyICpkYnNk
KTsKY2hhciAqKiBPcmJpdFRvVGV4dChGSUxFICpmcCwgaW50IHNlZ25vLCBFcGhlbWVyaXNTZWdf
dCAqc2VnbWVudCwKICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbik7CnZvaWQgSURCU2F0
TW9kZWxFcGhlbWVyaXNJTyhGSUxFICpmcCwgaW50IGZ1bmMsIGludCBzZWdubywKICAgICAgICAg
ICAgICAgICAgICAgICAgIEVwaGVtZXJpc1NlZ190ICpzZWdtZW50KTsKClRCb29sIElEQk1vdmUo
IEZJTEUgKiwgaW50NjQsIGludDY0LCBpbnQsIFBDSUNvdW50ZXIsIGRvdWJsZSwgZG91YmxlICk7
ClRCb29sIElEQk1vdmVTZWdtZW50KCBGSUxFICosIGludCwgaW50ICk7CnZvaWQgSURCQ29tcHJl
c3MoIEZJTEUgKiApOwpUQm9vbCBJREJOZWVkc0NvbXByZXNzKCBGSUxFICogKTsKdm9pZCBJREJD
aGFuQWRkKCBGSUxFICosIGludCAqLCBQQ0lDb3VudGVyICk7CnZvaWQgSURCR0RCQ2hhbkFkZCgg
RklMRSAqLCBpbnQsIGludCwgUENJQ291bnRlciApOwp2b2lkIElEQkNoYW5EZWxldGUoIEZJTEUg
KiwgaW50LCBpbnQgKiwgUENJQ291bnRlciApOwp2b2lkIElEQk1ha2VGaWxlSW50ZXJsZWF2ZWQo
IEZJTEUgKiApOwp2b2lkIElEQkNoYW5IZWFkZXJBZGQoIEZJTEUgKiwgaW50LCBQQ0lDb3VudGVy
ICk7CklEQkluZm9fdCAqSURCR2V0SW5mbyggRklMRSAqICk7CgpHREJMYXllciBJREJHZXRMYXll
cihGSUxFICpmcCwgaW50IG5TZWdtZW50KTsKCkdEQkxheWVyIElEQkNyZWF0ZUxheWVyKEZJTEUg
KmZwLCBjb25zdCBjaGFyICpwc3pOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnBzekRlc2MsIGNvbnN0IGNoYXIgKnBzek9wdGlvbnMpOwp2b2lkIElEQkRl
bGV0ZUxheWVyKEZJTEUgKmZwLCBpbnQgblNlZ21lbnRUb0RlbGV0ZSk7CmludCBJREJHZXRQcm9q
ZWN0aW9uSW5mbyhHREJMYXllciBwc0xheWVyLCBQcm9qSW5mb190ICpwc1Byb2opOwp2b2lkIElE
QlNldFByb2plY3Rpb25JbmZvKEdEQkxheWVyIHBzTGF5ZXIsIFByb2pJbmZvX3QgKnBzUHJvaik7
CkdEQlNoYXBlSWQgSURCR2V0TmV4dFNoYXBlSWQoR0RCTGF5ZXIgcHNMYXllciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlNoYXBlSWQgaFNoYXBlSWQpOwpHREJTaGFwZUlk
IElEQkNyZWF0ZVNoYXBlKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlNoYXBlSWQgaEFkdmlzb3J5U2hh
cGVJZCk7CnZvaWQgSURCRGVsZXRlU2hhcGUoR0RCTGF5ZXIgcHNMYXllciwgR0RCU2hhcGVJZCBo
U2hhcGVJZCk7CkdEQlZlcnRleCAqIElEQkdldFZlcnRpY2VzKEdEQkxheWVyIHBzTGF5ZXIsIEdE
QlNoYXBlSWQgaFNoYXBlSWQsIGludCAqcG4pOwp2b2lkIElEQlNldFZlcnRpY2VzKEdEQkxheWVy
IHBzTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbkNvdW50LCBHREJWZXJ0ZXggKnBhc1ZlcnRpY2VzKTsKR0RCRmllbGQgKiBJREJH
ZXRSZWNvcmQoR0RCTGF5ZXIgcHNMYXllciwgR0RCU2hhcGVJZCBoU2hhcGVJZCk7CnZvaWQgSURC
U2V0UmVjb3JkKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJGaWVsZCAqcGFzRmllbGRzKTsKR0RCU2hh
cGUgKiBJREJHZXRTaGFwZShHREJMYXllciBwc0xheWVyLCBHREJTaGFwZUlkIGhTaGFwZUlkKTsK
dm9pZCBJREJTZXRTaGFwZShHREJMYXllciBwc0xheWVyLCBHREJTaGFwZUlkIGhTaGFwZUlkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJTaGFwZSAqcHNTaGFwZSk7ClRC
b29sIElEQkFkZEZpZWxkKEdEQkxheWVyIHBzTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICpwc3pOYW1lLCBHREJGaWVsZFR5cGUgZVR5cGUsIEdEQkZpZWxkICpwc0RlZmF1
bHQpOwpUQm9vbCBJREJEZWxldGVGaWVsZChHREJMYXllciBwc0xheWVyLCBjaGFyICpwc3pOYW1l
KTsKdm9pZCAqIElEQkdldFJzdChHREJMYXllciBwc0xheWVyKTsKdm9pZCBJREJTZXRSc3QoR0RC
TGF5ZXIgcHNMYXllciwgdm9pZCAqIHBzUlNUKTsKdm9pZCBJREJTeW5jVmVjdG9ycyhJREJJbmZv
X3QgKik7ClRCb29sIElEQlNldFVwZGF0ZU1vZGUoR0RCTGF5ZXIsIFRCb29sKTsKVEJvb2wgSURC
TmV3VmVjdG9yVHlwZShHREJMYXllciBwc0xheWVyKTsKCnZvaWQgSURCQnVpbGRPdmVydmlld3Mo
IEZJTEUgKiwgaW50LCBpbnQgKiwgaW50LCBUQm9vbCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICosIElNUFByb2dyZXNzRnVuYywgdm9pZCAqICk7CnZvaWQg
SURCQnVpbGRFeHRlcm5hbE92ZXJ2aWV3cyggRklMRSAqLCBpbnQsIGludCAqLCBpbnQsIFRCb29s
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
LCBJTVBQcm9ncmVzc0Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICogKTsKR0RCT3ZlcnZpZXdJbmZvX3QgKiBJREJHZXRPdmVydmlld3MoIEZJTEUg
KiwgaW50ICogKTsKCkZJTEUgKiBJREJMaW5rKCBGSUxFICosIGNvbnN0IGNoYXIgKiwgaW50ICos
IGludDMyLCBJTVBQcm9ncmVzc0Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAp
OwpGSUxFICpJREJJbXBvcnQoIEZJTEUgKiwgaW50ICosIGludCwgaW50ICosIGludCAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMsIHZvaWQg
KiApOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgY29uc3QgY2hhciAqIHBzelBPcHRpb247CiAgICBp
bnQgblRyYW5zT3B0aW9uczsKfSBJREJJbXBvcnRPcHRpb25zOwoKRklMRSAqSURCSW1wb3J0RXgo
IEZJTEUgKiwgaW50ICosIGludCwgaW50ICosIGludCAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgSURCSW1wb3J0T3B0aW9ucyAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMsIHZvaWQgKiApOwoKCgoKCnZv
aWQgSURCU3lzQmxvY2tJbmZvUmVhZCggRklMRSAqICk7CnZvaWQgSURCU3lzQmxvY2tJbmZvV3Jp
dGUoIEZJTEUgKiApOwp2b2lkIElEQlN5c1NldExheWVyTGVuZ3RoKCBGSUxFICosIGludCwgaW50
ICk7CmludCBJREJTeXNHZXRMYXllckxlbmd0aCggRklMRSAqLCBpbnQgKTsKaW50IElEQlN5c0Ny
ZWF0ZUxheWVyKCBGSUxFICosIGludCApOwp2b2lkIElEQlN5c0RlbGV0ZUxheWVyKCBGSUxFICos
IGludCApOwp2b2lkIElEQlN5c0J5dGVJTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIHVu
c2lnbmVkIGNoYXIgKiApOwp2b2lkIElEQlN5c0Jsb2NrSW5mb0RlYWxsb2MoIEZJTEUgKiBmcCAp
OwoKdm9pZCBTSVNSZWdpc3Rlciggdm9pZCApOwoKCmV4dGVybiBJREJJbmZvX3QgKklEQkluZm9b
XTsKCgp2b2lkIElEQlJlYWRIZWFkZXJzKCBGSUxFICpmcCApOwoKCn0KIyAyMzkgIi4uLy4uLy4u
L2xpYi9wY2kuaCIgMgoKCiMgMSAiLi4vLi4vLi4vbGliL3BjaWRldi5oIiAxCiMgMjUgIi4uLy4u
Ly4uL2xpYi9wY2lkZXYuaCIKZXh0ZXJuICJDIiB7CiMgMzggIi4uLy4uLy4uL2xpYi9wY2lkZXYu
aCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludDMyIFR5cGU7CiAgICAgICAgaW50MzIgUGl4
ZWxzOwogICAgICAgIGludDMyIExpbmVzOwogICAgICAgIGludDMyIEltYWdlczsKICAgICAgICBp
bnQzMiBHcmFwaGljczsKICAgICAgICBpbnQzMiBCaXRBZGRyZXNzOwogICAgICAgIGludDMyIEZs
YWdzWzldOwogICAgICAgIGludDMyIFZMYXllcnM7CiAgICAgICAgaW50MzIgVlBpeGVsczsKICAg
ICAgICBpbnQzMiBWTGluZXM7Cn0gVkRJbmZvX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50
MzIgTW9kZTsKICBpbnQzMiBSZWRHdW47CiAgaW50MzIgR3JlZW5HdW47CiAgaW50MzIgQmx1ZUd1
bjsKICBpbnQzMiBDdXJzb3JFbmFibGU7CiAgaW50MzIgQ3Vyc29yQ29sb3I7CiAgaW50MzIgR3Jh
cGhpY0VuYWJsZVszMl07CiAgaW50MzIgR3JhcGhpY0NvbG9yWzMyXTsKICBpbnQzMiBDb2xvckN1
YmVbNF07CiAgaW50MzIgVmlld2FibGVQaXhlbHM7CiAgaW50MzIgVmlld2FibGVMaW5lczsKICBp
bnQzMiBSZXNlcnZlZFs2XTsKfSBWRFN0YXRlX3Q7CgoKCgoKCnR5cGVkZWYgc3RydWN0IHZpIHsK
ICBzdHJ1Y3QgdmkgKm5leHQ7CiAgVkRJbmZvX3QgVkRJbmZvOwogIEZJTEUgKmZwVkQ7CiAgbG9u
ZyBGbGFnczsKfSBWaWRlb0luZm9fdDsKIyAxMDUgIi4uLy4uLy4uL2xpYi9wY2lkZXYuaCIKc3Ry
dWN0IExpbmtNb3ZlSW5mbyB7CiAgY2hhciBHZW9zeXNbMjBdOwogIGNoYXIgUHJvalBhcm1zWzI1
Nl07CiAgZG91YmxlIEN1cnNvclg7CiAgZG91YmxlIEN1cnNvclk7CiAgZG91YmxlIFRvcExlZnRY
OwogIGRvdWJsZSBUb3BMZWZ0WTsKICBkb3VibGUgQm90dG9tUmlnaHRYOwogIGRvdWJsZSBCb3R0
b21SaWdodFk7Cn07CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50MzIgRXZlbnRPY2N1cmVkOwog
IGludDMyIFRyYXZlcnNhbDsKICBpbnQzMiBNb3VzZUJ1dHRvbjsKICBpbnQzMiBNb2RpZmllcktl
eXM7CiAgaW50MzIgRXZlbnREZWxheTsKICBpbnQzMiBEYXRhWDsKICBpbnQzMiBEYXRhWTsKICBp
bnQzMiBVbnVzZWRbOV07Cn0gVkRNb3VzZUV2ZW50X3Q7CiMgMTQ0ICIuLi8uLi8uLi9saWIvcGNp
ZGV2LmgiCkZJTEUgKlZET3BlbiAoY2hhciAqICk7CmxvbmcgVkRGbGFncyAoIEZJTEUgKiApOwpp
bnQgVkRBcml0aG1ldGljIChGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgZG91YmxlICk7CnZv
aWQgVkRDbGVhciAoRklMRSAqLCBpbnQsIGludCApOwp2b2lkIFZEQ3Vyc29yUG9zIChGSUxFICos
IGludCwgaW50ICosIGludCAqICk7CnZvaWQgVkRDdXJzb3JTaGFwZSAoRklMRSAqLCB1bnNpZ25l
ZCBjaGFyICopOwppbnQgVkRIaXN0b2dyYW0gKEZJTEUgKiwgaW50LCBpbnQsIGludDMyICogKTsK
dm9pZCBWREltYWdlSU8oRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCB1bnNp
Z25lZCBjaGFyICogKTsKdm9pZCBWRENsb3NlIChGSUxFICopOwp2b2lkIFZEQml0bWFwSU8oRklM
RSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICogKTsKdm9p
ZCBWREdEQkJpdG1hcElPKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIHVu
c2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQgKTsK
dm9pZCBWRFNpemVJbmZvIChGSUxFICosIGludCAqLCBpbnQgKiwgaW50ICosIGludCAqICk7CnZv
aWQgVkRMdXRJTyAoRklMRSAqLCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqICk7CnZvaWQgVkRQ
Y3RJTyAoRklMRSAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwp2b2lkIFZER0RCUGN0SU8gKEZJ
TEUgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwp2b2lkIFZEUHNldWRvSU8gKEZJTEUg
KiwgaW50LCB1bnNpZ25lZCBjaGFyICopOwp2b2lkIFZEUmVzZXQgKEZJTEUgKik7CnZvaWQgVkRT
dGF0dXNJTyAoRklMRSAqLCBpbnQsIGludDMyICogKTsKdm9pZCBWRFZlY3RvciAoRklMRSAqLCBp
bnQsIGludCwgaW50MzIgKiApOwp2b2lkIFZEVmlldyAoRklMRSAqLCBpbnQsIGZsb2F0ICosIGZs
b2F0ICosIGludCAqLCBpbnQgKiApOwp2b2lkIFZEWm9vbSAoRklMRSAqLCBkb3VibGUsIGRvdWJs
ZSApOwp2b2lkIFZEUmVnaXN0ZXIgKCB2b2lkICk7CnZvaWQgVkRCeXRlQ2hhbklPICggRklMRSAq
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50
LCBpbnQgKiApOwoKaW50IFZEUHJvbW90ZSAoIEZJTEUgKiApOwppbnQgVkRDaGFuRGVzY0lPICgg
RklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7CnZvaWQgVkRTZWdEZXNjSU8gKCBGSUxFICosIGlu
dCwgaW50LCBpbnQsIGNoYXIgKiApOwppbnQgVkRHZW9yZWZMYXllciAoIEZJTEUgKiwgaW50LCBp
bnQsIGludCwgY2hhciAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiAp
OwoKaW50IFZER2VvcmVmSU8gKCBGSUxFICosIGludCwgY2hhciAqLCBkb3VibGUgKiwgZG91Ymxl
ICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwoKaW50IFZEUHJvamVjdGlvbklPKCBGSUxFICosIGlu
dCwgaW50LCBpbnQsIFByb2pJbmZvX3QgKiApOwppbnQgVkRHREJQcm9qZWN0aW9uSU8oIEZJTEUg
KiwgaW50LCBQcm9qSW5mb190ICogKTsKaW50IFZEU2VnTmV4dCAoIEZJTEUgKiwgaW50LCBpbnQg
KTsKdm9pZCBWRFZlY3RvckluZm8gKCBGSUxFICosIGludCwgaW50LCBWSW5mb190ICogKTsKaW50
IFZEVmVjdG9ySU8gKCBWSW5mb190ICosIGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwgaW50
MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLCBkb3VibGUgKiwgaW50ICk7CgoKaW50IFZETW91c2VF
dmVudFJlYWQoIEZJTEUgKiwgVkRNb3VzZUV2ZW50X3QgKiApOwppbnQgVkRQbGF5RXZlbnQoIEZJ
TEUgKiwgY2hhciAqICk7CmNoYXIgKlZERXhlY3V0ZVNjcmlwdCggRklMRSAqLCBjb25zdCBjaGFy
ICosIFRCb29sICk7CnZvaWQgVkRTZWdEZXNjSU8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwgY2hh
ciAqICk7CnZvaWQgVkRTb3VyY2VJTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQgKiwgY2hh
ciAqLCBpbnQgKiwgaW50ICopOwojIDI3NCAiLi4vLi4vLi4vbGliL3BjaWRldi5oIgpGSUxFICpW
MTlPcGVuICggY2hhciAqLCBpbnQzMiwgaW50MzIgKTsKdm9pZCBWMTlDbG9zZSAoIEZJTEUgKiAp
OwppbnQgVjE5U2VuZCAoIEZJTEUgKiwgdm9pZCAqLCBpbnQzMiApOwppbnQgVjE5QWNjZXB0ICgg
RklMRSAqLCB2b2lkICosIGludDMyICk7CkZJTEUgKlYxOUFkdmVydGlzZSAoIGNoYXIgKiwgaW50
MzIgKiwgaW50MzIgKiApOwpGSUxFICpWMTlTZWxlY3QgKCBGSUxFICosIGludCApOwoKaW50IFYx
OUFyaXRobWV0aWMgKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50ICk7CnZvaWQgVjE5
Q2xlYXIgKCBGSUxFICosIGludCwgaW50ICk7CnZvaWQgVjE5Q3Vyc29yUG9zICggRklMRSAqLCBp
bnQsIGludCAqLCBpbnQgKiApOwp2b2lkIFYxOUZpbGwgKCBGSUxFICosIGludCwgaW50LCBpbnQs
IGludCApOwp2b2lkIFYxOUJpdG1hcElPICggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCB1bnNpZ25lZCBjaGFyICogKTsKdm9pZCBWMTlIaXN0b2dyYW0gKCBGSUxFICosIGlu
dCwgaW50LCBpbnQzMiAqICk7CnZvaWQgVjE5SW1hZ2VJTyAoIEZJTEUgKiwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqICk7CnZvaWQgVjE5THV0SU8gKCBGSUxF
ICosIGludCwgaW50LCBpbnQzMiAqICk7CnZvaWQgVjE5UGN0SU8gKCBGSUxFICosIGludCwgaW50
MzIgKiApOwp2b2lkIFYxOVJlc2V0ICggRklMRSAqICk7CnZvaWQgVjE5U3RhdHVzSU8gKCBGSUxF
ICosIGludCwgaW50MzIgKiApOwp2b2lkIFYxOVZlY3RvciAoIEZJTEUgKiwgaW50LCBpbnQsIGlu
dDMyICogKTsKdm9pZCBWMTlWaWV3ICggRklMRSAqLCBpbnQsIGZsb2F0ICosIGZsb2F0ICosIGlu
dCAqLCBpbnQgKiApOwp2b2lkIFYxOVpvb20gKCBGSUxFICosIGRvdWJsZSwgZG91YmxlICk7CnZv
aWQgVjE5Wm9vbVNjcm9sbCAoIEZJTEUgKiwgaW50LCBmbG9hdCAqLCBmbG9hdCAqLCBpbnQgKiwg
aW50ICosIGludCAqLCBpbnQgKiApOwoKbG9uZyBWMTlGbGFncyAoIEZJTEUgKiApOwp2b2lkIFYx
OUNvbmZpZ0lPICggRklMRSAqLCBpbnQsIFZESW5mb190ICogKTsKdm9pZCBWMTlDaGFuRGVzY0lP
ICggRklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7CnZvaWQgVjE5R2VvcmVmTGF5ZXIgKCBGSUxF
ICosIGludCwgaW50LCBpbnQsIGNoYXIgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwg
ZG91YmxlICogKTsKCnZvaWQgVjE5QW5ub3VuY2VMaW5rICggRklMRSAqICk7CnZvaWQgVjE5TGlu
a01vdmUgKCBGSUxFICosIHN0cnVjdCBMaW5rTW92ZUluZm8gKiApOwppbnQgVjE5VmVjdG9ySW5m
byAoIEZJTEUgKiwgaW50LCBpbnQsIFZJbmZvX3QgKiApOwppbnQgVjE5VmVjdG9ySU8oIFZJbmZv
X3QgKiwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBp
bnQzMiAqLCBpbnQzMiAqLAogICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiosIGRvdWJsZSAq
LCBpbnQgKTsKdm9pZCBWMTlNb3VzZUV2ZW50UmVhZCggRklMRSAqLCBWRE1vdXNlRXZlbnRfdCAq
ICk7CmludCBWMTlQbGF5RXZlbnQoIEZJTEUgKiwgY2hhciAqICk7CnZvaWQgVjE5U2VnRGVzY0lP
KCBGSUxFICosIGludCwgaW50LCBpbnQsIGNoYXIgKiApOwp2b2lkIFYxOVNvdXJjZUlPKCBGSUxF
ICosIGludCwgaW50LCBpbnQsIGludCAqLCBjaGFyICosIGludCAqLCBpbnQgKiApOwp2b2lkIFYx
OVByb2plY3Rpb25JTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBQcm9qSW5mb190ICogKTsKIyAz
NTQgIi4uLy4uLy4uL2xpYi9wY2lkZXYuaCIKdHlwZWRlZiBlbnVtIHRhcGVvcHAKewogICAgdGFw
ZU9GU0YsCiAgICB0YXBlT0JTRiwKICAgIHRhcGVPRlNSLAogICAgdGFwZU9CU1IsCiAgICB0YXBl
T1JFVywKICAgIHRhcGVPT0ZGTCwKICAgIHRhcGVPRU9GLAogICAgdGFwZU9OT1AsCiAgICB0YXBl
T1BBQ0sKfSBUYXBlT3BwOwoKCgoKCgp0eXBlZGVmIGVudW0gbGFzdG9wcAp7CiAgICB0YXBlTE9w
ZW4sCiAgICB0YXBlTENsb3NlLAogICAgdGFwZUxTZWVrLAogICAgdGFwZUxPZmZsLAogICAgdGFw
ZUxSZWFkLAogICAgdGFwZUxXcml0ZSwKICAgIHRhcGVMRXJyb3IsCiAgICB0YXBlTFVua25vd24K
fSBMYXN0T3BwOwoKCgoKCgp0eXBlZGVmIGVudW0gdGFwZWRpciB7IHRhcGVEUmVhZCwgdGFwZURX
cml0ZSwgdGFwZURSVyB9IFRhcGVEaXI7CgoKCgoKCgp0eXBlZGVmIGVudW0gdGFwZXR5cGUKewog
ICAgdGFwZURldmljZSwgdGFwZVBjaUZpbGUsIHRhcGVGaWxlLAogICAgdGFwZVJlbW90ZVBjaSwg
dGFwZVJlbW90ZVJtdAp9IFRhcGVUeXBlOwojIDQzNSAiLi4vLi4vLi4vbGliL3BjaWRldi5oIgp0
eXBlZGVmIHN0cnVjdCB0YXBlc3RhdAp7CiAgICBlbnVtIHsgdGFwZVNwRU9GLCB0YXBlU3BFT1Qs
IHRhcGVTcEJPVCwgdGFwZVNwVW5rIH0gcGxhY2U7CiAgICBlbnVtIHsgdGFwZVNhUiwgdGFwZVNh
VywgdGFwZVNhUlcsIHRhcGVTYVVuayB9IGFjY2VzczsKICAgIGVudW0geyB0YXBlU3NPTkwsIHRh
cGVTc09GRkwsIHRhcGVTc1VuayB9IHN0YXR1czsKICAgIGVudW0geyB0YXBlU2VPSywgdGFwZVNl
RXJyb3IsIHRhcGVTZVVuayB9IGVycm9yOwogICAgZW51bSB7IHRhcGVTYlRvb1NtYWxsLCB0YXBl
U2JPSyB9IGJ1ZmZTaXplOwogICAgaW50IGVycm9yTnVtOwogICAgVGFwZVR5cGUgdHlwZTsKICAg
IGludCBCeXRlc1JlYWQ7Cn0gVGFwZVN0YXQ7Cgp0eXBlZGVmIHN0cnVjdCB0YXBlCnsKICAgIHN0
cnVjdCB0YXBlICpuZXh0OwogICAgRklMRSAqRmlsZTsKICAgIGludCBGaWxlSUQ7CiAgICBUYXBl
RGlyIG1vZGU7CiAgICBUYXBlVHlwZSB0eXBlOwogICAgY2hhciAqZmlsZU5hbWU7CiAgICBjaGFy
ICpidWY7CgogICAgaW50IGJ1ZlNpemU7CiAgICBpbnQgYnVmUG9zOwogICAgbG9uZyBmaWxlUG9z
OwoKICAgIFRhcGVTdGF0IHN0YXR1czsKCiAgICBMYXN0T3BwIGxhc3RPcHA7CiAgICBpbnQgbGFz
dFdyaXRlOwoKfSAqVGFwZTsKCgoKRklMRSAqVGFwZU9wZW4gKGNoYXIgKiwgY2hhciAqKTsKdm9p
ZCBUYXBlQ2xvc2UgKEZJTEUgKik7CmludCBUYXBlUmVhZCAoRklMRSAqLCB2b2lkICosIGludCwg
VGFwZVN0YXQgKik7CmludCBUYXBlV3JpdGUgKEZJTEUgKiwgdm9pZCAqLCBpbnQpOwpUYXBlU3Rh
dCBUYXBlQ29udHJvbCAoRklMRSAqLCBUYXBlT3BwLCBpbnQpOwpUYXBlU3RhdCBUYXBlU3RhdHVz
IChUYXBlKTsKVGFwZSBSZW1vdGVUYXBlT3BlbiAoVGFwZSk7CnZvaWQgUmVtb3RlVGFwZUNsb3Nl
IChUYXBlKTsKaW50IFJlbW90ZVRhcGVSZWFkIChUYXBlLCBjaGFyICosIGludCk7CmludCBSZW1v
dGVUYXBlV3JpdGUgKFRhcGUsIGNoYXIqLCBpbnQpOwpUYXBlU3RhdCBSZW1vdGVUYXBlQ29udHJv
bCAoVGFwZSwgVGFwZU9wcCwgaW50KTsKdm9pZCBUYXBlUmVwb3J0IChGSUxFICopOwoKfQojIDI0
MiAiLi4vLi4vLi4vbGliL3BjaS5oIiAyCiMgMSAiLi4vLi4vLi4vbGliL2NjbHNlci5oIiAxCiMg
MjAgIi4uLy4uLy4uL2xpYi9jY2xzZXIuaCIKIyAxICIuLi8uLi8uLi9saWIvY2NsY29udi5oIiAx
CiMgMjEgIi4uLy4uLy4uL2xpYi9jY2xzZXIuaCIgMgoKCgoKCgoKZXh0ZXJuICJDIiB7CgpGSUxF
ICpTSU9PcGVuKGNvbnN0IGNoYXIgKnBzekRldmljZU5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIGNv
bnN0IGludCBuQmF1ZCwKICAgICAgICAgICAgICBjb25zdCBpbnQgblBhcml0eSwgY29uc3QgaW50
IG5EYXRhQml0cywgY29uc3QgaW50IG5TdG9wQml0cyk7CgpUQm9vbCBTSU9DbG9zZShGSUxFICpm
cEZpZCk7CgpUQm9vbCBTSU9HZXRDaGFyKEZJTEUgKmZwRmlkLCBjaGFyICpwQ2hhcik7ClRCb29s
IFNJT1B1dENoYXIoRklMRSAqZnBGaWQsIGNoYXIgY2hPdXRwdXQpOwojIDY3ICIuLi8uLi8uLi9s
aWIvY2Nsc2VyLmgiCnR5cGVkZWYgc3RydWN0CnsKCgogICAgaW50IG5UYWJsZXQ7CiAgICBjaGFy
ICpwc3pOYW1lOwogICAgY2hhciAqcHN6SW5pdENvbW1hbmQ7CiAgICBjaGFyICpwc3pGb3JtYXRT
dHJpbmc7CiAgICBjaGFyICpwc3pTdHJlYW1Db21tYW5kOwogICAgY2hhciAqcHN6UG9pbnRDb21t
YW5kOwogICAgY2hhciAqcHN6U3dpdGNoQ29tbWFuZDsKICAgIGludCBuQmF1ZDsKICAgIGludCBu
UGFyaXR5OwogICAgaW50IG5EYXRhQml0czsKICAgIGludCBuU3RvcEJpdHM7CgoKICAgIEZJTEUg
KmZwVGFibGV0OwogICAgY2hhciAqcHN6QnVmZmVyOwoKCiAgICBpbnQgblhTdGFydCwgbllTdGFy
dDsKICAgIGludCBuWENoYXJzLCBuWUNoYXJzOwogICAgVEJvb2wgYlhTaWduZWQ7CiAgICBUQm9v
bCBiWVNpZ25lZDsKICAgIGludCBuQnV0dG9uU3RhcnQ7CiAgICBpbnQgbkJ1dHRvbkNoYXJzOwog
ICAgVEJvb2wgYlN0YXJ0c0F0WmVybzsKICAgIFRCb29sIGJIZXhCdXR0b247Cn0gVGFibGV0Owoj
IDExMCAiLi4vLi4vLi4vbGliL2NjbHNlci5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgICBUQm9vbCBi
U3VjY2VzczsKICAgIGludCBuWCwgblk7CiAgICBpbnQgbkJ1dHRvbjsKIyAxMjYgIi4uLy4uLy4u
L2xpYi9jY2xzZXIuaCIKICAgIGludCBuQ2hhcnNSZWFkOwogICAgaW50IG5SZWFkU3RhcnRQb3M7
Cn0gVGFibGV0UG9pbnQ7CiMgMTM4ICIuLi8uLi8uLi9saWIvY2Nsc2VyLmgiClRCb29sIFRhYldy
aXRlQ29tbWFuZChUYWJsZXQgKnBzVGFibGV0LCBjaGFyICpwc3pDb21tYW5kU3RyaW5nKTsKVGFi
bGV0ICpUYWJSZWFkQ29uZmlnKGludCAqblRhYmxldHMpOwoKdm9pZCBQcmludFRhYmxldHMoVGFi
bGV0ICpwc1RhYmxldHMsIGludCBudW1UYWJsZXRzKTsKCnZvaWQgVGFiRnJlZVRhYmxldHMoVGFi
bGV0ICpwc1RhYmxldHMsIGludCBudW1UYWJsZXRzKTsKClRhYmxldCAqVGFiTmV3VGFibGV0KFRh
YmxldCAqKnBwc1RhYmxldEFycmF5LCBpbnQgKm5UYWJsZXRzLAogICAgICAgICAgICAgICAgICAg
ICBjaGFyICpwc3pOYW1lLAogICAgICAgICAgICAgICAgICAgICBjaGFyICpwc3pJbml0Q29tbWFu
ZCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6Rm9ybWF0U3RyaW5nLAogICAgICAgICAg
ICAgICAgICAgICBjaGFyICpwc3pTdHJlYW1Db21tYW5kLAogICAgICAgICAgICAgICAgICAgICBj
aGFyICpwc3pQb2ludENvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzelN3aXRj
aENvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgIGludCBuQmF1ZCwgaW50IG5QYXJpdHksIGlu
dCBuRGF0YUJpdHMsCiAgICAgICAgICAgICAgICAgICAgIGludCBuU3RvcEJpdHMpOwoKVEJvb2wg
VGFiVXBkYXRlVGFibGV0KFRhYmxldCAqcHNUYWJsZXQsCiAgICAgICAgICAgICAgICAgICAgICBj
aGFyICpwc3pOYW1lLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6SW5pdENvbW1hbmQs
CiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwc3pGb3JtYXRTdHJpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICpwc3pTdHJlYW1Db21tYW5kLAogICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqcHN6UG9pbnRDb21tYW5kLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6U3dp
dGNoQ29tbWFuZCwKICAgICAgICAgICAgICAgICAgICAgIGludCBuQmF1ZCwgaW50IG5QYXJpdHks
IGludCBuRGF0YUJpdHMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgblN0b3BCaXRzKTsKClRC
b29sIFRhYldyaXRlQ29uZmlnKFRhYmxldCAqcHNUYWJsZXRBcnJheSwgY29uc3QgaW50IG5UYWJs
ZXRzKTsKClRhYmxldCAqVGFiT3BlbihjaGFyICpwc3pEZXZpY2UsIFRhYmxldCAqcHNUYWJsZXQp
OwpUYWJsZXQgKlRhYk9wZW5QUk0oY2hhciAqcHN6RGV2aWNlKTsKVEJvb2wgVGFiQ2xvc2UoVGFi
bGV0ICpwc1RhYmxldCk7CgpUYWJsZXRQb2ludCBUYWJSZWFkKFRhYmxldCAqcHNUYWJsZXQsIFRC
b29sIGJTeW5jKTsKVGFibGV0UG9pbnQgVGFiUG9pbnQoVGFibGV0ICpwc1RhYmxldCk7Cgp2b2lk
IFRhYkZsdXNoKFRhYmxldCAqcHNUYWJsZXQpOwpjaGFyICpUYWJTdHJpbmcyQ29tbWFuZChjaGFy
ICpwc3pDb252ZXJ0KTsKClRhYmxldCAqVGFiQ29weShUYWJsZXQgKnBzRGVzdCwgVGFibGV0ICpw
c1NvdXJjZSk7CgoKCgpUQm9vbCBJc0JsYW5rKGNvbnN0IGNoYXIgKnBzekxpbmUpOwpUQm9vbCBQ
YXJzZUZvcm1hdFN0cmluZyhUYWJsZXQgKnBzVGFibGV0LCBjaGFyICpwc3pGb3JtYXRTdHJpbmcp
Owp2b2lkIFRhYkluaXRTdHJ1Y3R1cmUoVGFibGV0ICpwc1RhYmxldCk7CiMgMTk2ICIuLi8uLi8u
Li9saWIvY2Nsc2VyLmgiCnR5cGVkZWYgZW51bQp7CiAgICBNYWdlbGxhbk5hdjUwMDBQcm8sCiAg
ICBOTUVBCn0KR1BTVHlwZTsKCgoKCnR5cGVkZWYgZW51bQp7CgoKCiAgICBSZWFkSGVhZGVyLAog
ICAgUmVhZFRpbWUsCiAgICBSZWFkTGF0LAogICAgUmVhZExvbiwKICAgIFJlYWRBbHQsCgoKCiAg
ICBHWEdYUAp9CkxpbmVTdGF0ZTsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICAgIGRvdWJsZSBk
Zlg7CiAgICBkb3VibGUgZGZZOwogICAgZG91YmxlIGRmWjsKICAgIGNoYXIgc3pHZW9zeXMgWzE3
XTsKfSBHUFNQb2ludDsKCgoKCnR5cGVkZWYgc3RydWN0CnsKICAgIEdQU1R5cGUgZUdQU1VuaXRU
eXBlOwoKICAgIGNoYXIgc3pMYXQgWzMyXTsKICAgIGNoYXIgc3pMb24gWzMyXTsKICAgIGNoYXIg
c3pBbHQgWzMyXTsKCiAgICBjaGFyIHBzekJ1ZmZlciBbMzIgKyAxXTsKICAgIEZJTEUgKmZwR1BT
OwogICAgTGluZVN0YXRlIGVDdXJyZW50U3RhdGU7CiAgICBHUFNQb2ludCBzUG9pbnQ7Cgp9IEdQ
U0RhdGE7Cgp0eXBlZGVmIEdQU0RhdGEqIEdQU0hhbmRsZTsKIyAyNjQgIi4uLy4uLy4uL2xpYi9j
Y2xzZXIuaCIKR1BTSGFuZGxlIEdQU09wZW4gKEZJTEUgKmZwT3BlbkdQUywgR1BTVHlwZSBlR1BT
VHlwZUNob2ljZSk7CkdQU1BvaW50ICpHUFNSZWFkIChHUFNIYW5kbGUgaEdQUyk7ClRCb29sIEdQ
U0Nsb3NlIChHUFNIYW5kbGUgaEdQUyk7Cgp9CiMgMjQzICIuLi8uLi8uLi9saWIvcGNpLmgiIDIK
IyAxICIuLi8uLi8uLi9saWIvZ2VvLmgiIDEKIyAxNzYgIi4uLy4uLy4uL2xpYi9nZW8uaCIKIyAx
ICIuLi8uLi8uLi9saWIvcG1oLmgiIDEKIyAzMyAiLi4vLi4vLi4vbGliL3BtaC5oIgpleHRlcm4g
IkMiIHsKCgoKCnR5cGVkZWYgc3RydWN0CnsKICAgIGludCBuQnl0ZXNQZXJQaXhlbDsKICAgIGlu
dCBuRGVwdGg7CiAgICBpbnQgblNjYW5saW5lUGFkOwoKICAgIGludCBuUmVkU2hpZnQ7CiAgICBp
bnQgbkdyZWVuU2hpZnQ7CiAgICBpbnQgbkJsdWVTaGlmdDsKCiAgICB1bnNpZ25lZCBjaGFyIGFi
eVJlZENvbXBbMjU2XTsKICAgIHVuc2lnbmVkIGNoYXIgYWJ5R3JlZW5Db21wWzI1Nl07CiAgICB1
bnNpZ25lZCBjaGFyIGFieUJsdWVDb21wWzI1Nl07CiAgICB1bnNpZ25lZCBjaGFyIGFieUdyZXlD
b21wWzI1Nl07CiAgICB1bnNpZ25lZCBjaGFyIGFieU1hcDhJbmRleFsyNTZdOwoKICAgIFRCb29s
IGJUb3BUb0JvdHRvbTsKICAgIFRCb29sIGJVc2VDb21wcmVzczsKICAgIHVuc2lnbmVkIGNoYXIq
IHBhYnk4dG8yNDsKfSBQTUhQcmVmZXJQaXhtYXA7Cgp1bnNpZ25lZCBjaGFyICpQTUhQYWNrUGl4
bWFwKCBQTUhQcmVmZXJQaXhtYXAgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICos
IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQgKTsKdm9pZCBQTUhVbnBhY2tQaXhtYXAoIFBNSFByZWZlclBpeG1hcCAqLCB1
bnNpZ25lZCBjaGFyICosIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciAqKiwgdW5zaWduZWQgY2hhciAqKiwgdW5zaWduZWQgY2hhciAqKiApOwp2b2lkIFBN
SFVzZVBDVCggUE1IUHJlZmVyUGl4bWFwICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQsIGlu
dCwgaW50LCBpbnQsIFRCb29sKTsKCn0KIyAxNzcgIi4uLy4uLy4uL2xpYi9nZW8uaCIgMgoKIyAx
ICIuLi8uLi8uLi9saWIvY2NsY2xhc3MuaCIgMQojIDU2ICIuLi8uLi8uLi9saWIvY2NsY2xhc3Mu
aCIKIyAxICIuLi8uLi8uLi9saWIvZ2RiLmgiIDEKIyA1NyAiLi4vLi4vLi4vbGliL2NjbGNsYXNz
LmgiIDIKCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgZW51bSB7CiAgQ0FOb25lLAogIENBTWlu
aW11bURpc3RhbmNlLAogIENBUGFyYWxsZWxwaXBlZCwKICBDQUZ1bGwsCiAgQ0FGdWxsTm9OdWxs
LAogIENBVGllcwp9IENsYXNzQWxnOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ2xhc3NBbGcgQWxn
b3JpdGhtOwoKICAgIEZJTEUgKmZwU3JjOwogICAgaW50IE5DaGFubmVsczsKICAgIGludCAqREJJ
QzsKICAgIGludCAqREJJVzsKCiAgICBpbnQgTkNsYXNzZXM7CiAgICBTaWduYXR1cmVfdCAqKlNp
Z25hdHVyZXM7CgogICAgRklMRSAqZnBEc3Q7CiAgICBpbnQgREJPQzsKICAgIGludCAqREJPVzsK
CiAgICBpbnQgTk1sY0NoYW5uZWxzOwogICAgaW50ICpEQk1sY09DOwoKICAgIGludCBOUHJvYkNo
YW5uZWxzOwogICAgaW50ICpEQlByb2JPQzsKCiAgICBQQ0lDb3VudGVyIENvdW50ZXI7CgogICAg
SU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzOwogICAgdm9pZCAqcFByb2dyZXNzQXJnOwoKICAg
IGludCAoKkluc2lkZVByb2MpKCBpbnQgcGl4ZWwsIGludCBsaW5lLCB2b2lkICphcmcgKTsKICAg
IHZvaWQgKkluc2lkZUFyZzsKCiAgICBmbG9hdCAqcGZCYWNrZ3JvdW5kVmFsdWU7CgogICAgaW50
IENsYXNzQ291bnRbMjU2XTsKICAgIGludCBQaXhlbENvdW50OwoKfSBTaWdDbGFzc2lmeU9wdGlv
bnM7Cgp2b2lkIEluaXRTaWdDbGFzc2lmeU9wdGlvbnMoIFNpZ0NsYXNzaWZ5T3B0aW9ucyAqICk7
ClRCb29sIFNpZ0NsYXNzaWZ5KCBTaWdDbGFzc2lmeU9wdGlvbnMgKiApOwpjaGFyICpTaWdDbGFz
c2lmeVJlcG9ydCggU2lnQ2xhc3NpZnlPcHRpb25zICosIGludCApOwoKVEJvb2wgQ0FNaW5EaXND
bGFzc2lmaWNhdGlvbiggU2lnQ2xhc3NpZnlPcHRpb25zICogKTsKVEJvb2wgQ0FGdWxsQ2xhc3Np
ZmljYXRpb24oIFNpZ0NsYXNzaWZ5T3B0aW9ucyAqICk7ClRCb29sIENBUFBDbGFzc2lmaWNhdGlv
biggU2lnQ2xhc3NpZnlPcHRpb25zICogKTsKVEJvb2wgQ0FUaWVzQ2xhc3NpZmljYXRpb24oIFNp
Z0NsYXNzaWZ5T3B0aW9ucyAqICk7ClRCb29sIENBRnVsbE5vTnVDbGFzc2lmaWNhdGlvbiAoIFNp
Z0NsYXNzaWZ5T3B0aW9ucyAqICk7CgpUQm9vbCBTaWdHZW5lcmF0ZShGSUxFICosIEZJTEUgKixp
bnQsIFNpZ25hdHVyZV90ICoqLCBpbnQsIGludCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQsIGludCwgaW50LCBpbnQsIElNUFByb2dyZXNzRnVuYywgdm9pZCogKTsKZG91
YmxlICpTaWdHZW5Jbml0aWFsaXplKCBpbnQsIFNpZ25hdHVyZV90ICoqLCBpbnQgKTsKdm9pZCBT
aWdHZW5BY2N1bXVsYXRlKCBpbnQsIFNpZ25hdHVyZV90ICoqLCBpbnQsIGRvdWJsZSAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICosIHVuc2lnbmVkIGNoYXIgKiwgaW50ICk7CnZv
aWQgU2lnR2VuUG9zdFByb2Nlc3MoIGludCwgU2lnbmF0dXJlX3QgKiosIGludCwgZG91YmxlICog
KTsKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbk1pbkNsdXN0ZXJzOwogICAgaW50IG5N
YXhDbHVzdGVyczsKICAgIGludCBuRGVzaXJlZENsdXN0ZXJzOwoKICAgIGludCBuTWF4SXRlcmF0
aW9uczsKICAgIGRvdWJsZSBkZk1vdmVUaHJlc2hvbGQ7CiAgICBpbnQgbk1pblNhbXBsZVRocmVz
aG9sZDsKICAgIGRvdWJsZSBkZlN0ZERldjsKCiAgICBkb3VibGUgZGZMdW1waW5nVGhyZXNob2xk
OwogICAgaW50IG5NYXhMdW1wUGFpcnM7CiAgICBUQm9vbCBiVXNlU2lnc0FzU2VlZHM7CiAgICBp
bnQgbk1heFNhbXBsZVNpemU7CgogICAgdm9pZCAoKnBmblJlcG9ydFByb2MpKFNpZ25hdHVyZV90
ICoqU2lnbmF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtQ2xh
c3NlcywgaW50IG51bUNoYW5zLCB2b2lkKiBhcmcpOwogICAgdm9pZCogcFJlcG9ydEFyZzsKCiAg
ICB2b2lkICgqcGZuRGlzY2FyZFByb2MpKGludCBuV2hpY2hDbHVzdGVyLCB2b2lkKiBhcmcpOwog
ICAgdm9pZCogcERpc2NhcmRBcmc7CgogICAgdm9pZCAoKnBmblNwbGl0UHJvYykoaW50IG5XaGlj
aENsdXN0ZXIsIHZvaWQqIGFyZyk7CiAgICB2b2lkKiBwU3BsaXRBcmc7CgogICAgdm9pZCAoKnBm
bkx1bXBQcm9jKShpbnQgbkZpcnN0Q2x1c3RlciwgaW50IG5TZWNvbmRDbHVzdGVyLCB2b2lkKiBh
cmcpOwogICAgdm9pZCogcEx1bXBBcmc7Cn0gSXNvRGF0YVBhcm1zOwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgaW50IG5EZXNpcmVkQ2x1c3RlcnM7CiAgICBpbnQgbk1heEl0ZXJhdGlvbnM7CiAgICBk
b3VibGUgZGZNb3ZlVGhyZXNob2xkOwogICAgVEJvb2wgYlVzZVNpZ3NBc1NlZWRzOwogICAgaW50
IG5NYXhTYW1wbGVTaXplOwoKICAgIHZvaWQgKCpwZm5SZXBvcnRQcm9jKShTaWduYXR1cmVfdCAq
KlNpZ25hdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1DbGFz
c2VzLCBpbnQgbnVtQ2hhbnMsIHZvaWQqIGFyZyk7CiAgICB2b2lkICpwUmVwb3J0QXJnOwoKfSBL
TWVhbnNQYXJtczsKCnZvaWQgSW5pdEtNZWFuc1Bhcm1zKCBLTWVhbnNQYXJtcyAqICk7ClRCb29s
IEtNZWFuc1NpZ0dlbmVyYXRlKCBTaWdDbGFzc2lmeU9wdGlvbnMgKiwgS01lYW5zUGFybXMgKiAp
OwoKVEJvb2wgRnV6enlLTWVhbnNTaWdHZW5lcmF0ZShTaWdDbGFzc2lmeU9wdGlvbnMgKiwgS01l
YW5zUGFybXMgKik7Cgp2b2lkIEluaXRJc29EYXRhUGFybXMoIElzb0RhdGFQYXJtcyAqICk7ClRC
b29sIElzb0RhdGFTaWdHZW5lcmF0ZSggU2lnQ2xhc3NpZnlPcHRpb25zICosIElzb0RhdGFQYXJt
cyAqICk7Cgp2b2lkIENvbXB1dGVTaWduYXR1cmVJbmZvKFNpZ0NsYXNzaWZ5T3B0aW9ucyAqcHNT
Q08sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuU2FtcGxlQ291bnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICoqcGFwYWZTYW1wbGVC
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2ICpwYW5DbGFz
c0J1ZmZlcik7Cgp2b2lkIENoYXJDb21wdXRlU2lnbmF0dXJlSW5mbyhTaWdDbGFzc2lmeU9wdGlv
bnMgKnBzU0NPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5T
YW1wbGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgKipwYXBhZlNhbXBsZUJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludDE2ICpwYW5DbGFzc0J1ZmZlcik7Cgp9CiMgMTc5ICIuLi8uLi8uLi9s
aWIvZ2VvLmgiIDIKIyAxICIuLi8uLi8uLi9saWIvY2NsaW1hZ2UuaCIgMQojIDM5ICIuLi8uLi8u
Li9saWIvY2NsaW1hZ2UuaCIKIyAxICIuLi8uLi8uLi9saWIvZ2RiLmgiIDEKIyA0MCAiLi4vLi4v
Li4vbGliL2NjbGltYWdlLmgiIDIKCmV4dGVybiAiQyIgewojIDk2ICIuLi8uLi8uLi9saWIvY2Ns
aW1hZ2UuaCIKdHlwZWRlZiBzdHJ1Y3QKewogICAgR0RCTGF5ZXIgaExheWVyOwogICAgaW50IG5M
YXllclR5cGU7CiAgICBpbnQgblpDb29yZDsKfSBER1JMYXllcl90OwoKCgoKdHlwZWRlZiBzdHJ1
Y3QKewogICAgaW50IG5HcmlkZGluZ01ldGhvZDsKCiAgICBpbnQgbkxheWVyczsKICAgIERHUkxh
eWVyX3QgYXNMYXllcnNbNjRdOwoKICAgIEZJTEUgKmZwT3V0R3JpZDsKICAgIGludCBuT3V0Q2hh
bjsKICAgIGludCBkYm93WzRdOwoKICAgIGludCBuTWF4SXRlcjsKCiAgICBkb3VibGUgZGZQY3RS
YW5nZTsKICAgIGRvdWJsZSBkZkFic0RpZmY7CgogICAgZmxvYXQgZk1pc3NWYWw7CgogICAgVEJv
b2wgYkNuRWxldkZpeGVkOwogICAgVEJvb2wgYlB0RWxldkZpeGVkOwoKICAgIGRvdWJsZSBkZlhQ
aXhTaXplOwogICAgZG91YmxlIGRmWVBpeFNpemU7CgogICAgUHJvakluZm9fdCBzUmFzdGVyUHJv
ajsKICAgIFByb2pJbmZvX3QgYXNWZWN0b3JQcm9qWzY0XTsKCiAgICBkb3VibGUgZGZPdXRYTWlu
OwogICAgZG91YmxlIGRmT3V0WE1heDsKICAgIGRvdWJsZSBkZk91dFlNaW47CiAgICBkb3VibGUg
ZGZPdXRZTWF4Owp9IERHUlBhcmFtc190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IG5G
bGFnOwogICAgZmxvYXQgZkVsZXY7Cn0gREdSUGl4ZWxfdDsKCgoKCnR5cGVkZWYgdW5pb24Kewog
ICAgaW50MzIgd29yZDsKICAgIHN0cnVjdAogICAgewogICAgICAgIHVuc2lnbmVkIGNoYXIgZmxh
Z3M7CiAgICAgICAgdW5zaWduZWQgY2hhciBkaXI7CiAgICAgICAgaW50MTYgZGlzdDsKICAgIH0g
YjsKfSBER1JGbGFnczsKCgoKCgp2b2lkIERFTUdSRCAoREdSUGFyYW1zX3QgKik7CnZvaWQgREdS
UGFyYW1zSW5pdCggREdSUGFyYW1zX3QgKiApOwp2b2lkIERHUkFkZExheWVyKCBER1JQYXJhbXNf
dCAqLCBHREJMYXllciwgaW50LCBpbnQgKTsKCnZvaWQgREdSRkRNIChER1JQYXJhbXNfdCAqREdS
UGFyYW1zKTsKCnZvaWQgREdSRkRNSW5pdCAoREdSUGFyYW1zX3QgKkRHUlBhcmFtcyk7Cgp2b2lk
IERHUkZETVNjYW5JbkRhdGEgKERHUlBhcmFtc190ICpER1JQYXJhbXMpOwoKdm9pZCBER1JGRE1D
YWxjT2Zmc2V0IChpbnQgKmFuUGl4Q2VudHJlLCBpbnQgblJlbVgsIGludCBuUmVtWSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgKm5EaXN0LCBpbnQgKm5EaXIpOwoKdm9pZCBER1JGRE1T
ZXRQaXhlbCAoaW50IG5QbnRQaXgsIGludCBuUG50TGluLCBkb3VibGUgZGZaLAogICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbkRpc3QsIGludCBuRGlyLCBUQm9vbCBiVHJlbmQsIGludCBuQnJl
YWtUeXBlKTsKCnZvaWQgREdSRkRNU2V0UGl4QnVmIChpbnQgbkJ1ZkluZGV4LCBkb3VibGUgZGZa
LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbkRpc3QsIGludCBuRGlyLCBpbnQgbkZsYWcs
IFRCb29sIGJGbGFnVmFsKTsKClRCb29sIERHUkZETVBpeEVtcHR5IChpbnQgbkJ1ZkluZGV4KTsK
CmludCBER1JGRE1HZXREaXIgKGludCBuQnVmSW5kZXgpOwoKdm9pZCBER1JGRE1TZXREaXIgKGlu
dCBuQnVmSW5kZXgsIGludCBuRGlyKTsKCmludCBER1JGRE1HZXREaXN0IChpbnQgbkJ1ZkluZGV4
KTsKCnZvaWQgREdSRkRNU2V0RGlzdCAoaW50IG5CdWZJbmRleCwgaW50IG5EaXN0KTsKClRCb29s
IERHUkZETUdldEZsYWcgKGludCBuQnVmSW5kZXgsIGludCBuRmxhZyk7Cgp2b2lkIERHUkZETVNl
dEZsYWcgKGludCBuQnVmSW5kZXgsIGludCBuRmxhZywgVEJvb2wgYkZsYWdWYWwpOwoKdm9pZCBE
R1JGRE1Eb0VyYXNlIChpbnQgblBudFBpeCwgaW50IG5QbnRMaW4sIGRvdWJsZSBkZlopOwoKdm9p
ZCBER1JGRE1Db252ZXJ0TGluZSAoZG91YmxlIGRmUHJldlgsIGRvdWJsZSBkZlByZXZZLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmUHJldlosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZYLCBkb3VibGUgZGZZLCBkb3VibGUgZGZa
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5CcmVha1R5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCBiVHJlbmQsIGludCBuU3RyaXBMaW5l
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuRmlyc3RTdHJpcExpbmUp
OwoKdm9pZCBER1JGRE1HcmlkSW5pdCAoREdSUGFyYW1zX3QgKkRHUlBhcmFtcyk7Cgp2b2lkIERH
UkZETUludGVycG9sYXRlIChER1JQYXJhbXNfdCAqREdSUGFyYW1zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbkludGVycERpciwgVEJvb2wgYkFsbERlZiwgVEJvb2wgYkZpbGxBbGwp
OwoKdm9pZCBER1JGRE1EYXRhU2V0SU8gKGNvbnN0IGludCBuRnVuYywgaW50IG5Qcm9jRGlyLCBp
bnQgbkRTSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5CdWZJbmRleCwgaW50
ICpuSW5kZXhJbmNyKTsKCnZvaWQgREdSRkRNU2V0RWxldiAoaW50IG5CdWZJbmRleCwgZG91Ymxl
IGRmTmV3RWxldiwKICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCBiRmlsbCwgVEJvb2wgYklu
dGVycCwgaW50IG5EaXN0KTsKCnZvaWQgREdSRkRNRG9JbnRlcnAgKGludCAqYW5CdWZJbmRpY2Vz
LCBpbnQgbkluZGV4SW5jciwKICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCAqYWJDbGlmZiwg
VEJvb2wgYkZpbGwpOwoKdm9pZCBER1JGRE1JdGVyYXRlIChER1JQYXJhbXNfdCAqREdSUGFyYW1z
KTsKCnZvaWQgREdSRkRNT3V0cHV0REVNIChER1JQYXJhbXNfdCAqREdSUGFyYW1zKTsKCnZvaWQg
REdSRkRNQ2xlYW51cCAodm9pZCk7CgoKCgoKZXh0ZXJuIFRCb29sIGdhYkRHUlByb2pDb252WzY0
XTsKZXh0ZXJuIGNoYXIgKnBhcHN6REdSTGF5ZXJOYW1lWzggKzFdOwojIDI2MCAiLi4vLi4vLi4v
bGliL2NjbGltYWdlLmgiCmV4dGVybiBkb3VibGUgZ2RmREdSQ29udlVzZXJUb1VPUjsKCmV4dGVy
biBpbnQgZ25ER1JYQ29kZWRQaXhTaXplOwpleHRlcm4gaW50IGduREdSWUNvZGVkUGl4U2l6ZTsK
CmV4dGVybiBGSUxFICpnZnBGRE1UZW1wRmlsZTsKZXh0ZXJuIGNoYXIgKmdwc3pGRE1UZW1wTmFt
ZTsKZXh0ZXJuIGludCBnbmFGRE1DaG5NYXBbXTsKCmV4dGVybiBpbnQgZ25GRE1QaXhlbHNQZXJM
aW5lOwpleHRlcm4gaW50IGduRkRNTnVtYmVyT2ZMaW5lczsKZXh0ZXJuIGludCBnbkZETUxpbmVz
UGVyU3RyaXA7CgpleHRlcm4gaW50IGduRkRNRGF0YVNldExlbmd0aDsKZXh0ZXJuIGludCBnbkZE
TU51bU9mRGF0YXNldHM7CgpleHRlcm4gREdSUGl4ZWxfdCAqZ3Bhc0ZETUJ1ZjsKZXh0ZXJuIGlu
dCBnbkZETUJ1ZkxlbjsKCmV4dGVybiBpbnQgZ2FuRkRNRXJhc2VYWzIwMF07CmV4dGVybiBpbnQg
Z2FuRkRNRXJhc2VZWzIwMF07CmV4dGVybiBpbnQgZ25GRE1OdW1FcmFzZTsKZXh0ZXJuIGludCBn
bkZETUVyYXNlUG9zOwpleHRlcm4gVEJvb2wgZ2JGRE1XcmFwOwoKZXh0ZXJuIGRvdWJsZSBnZGZG
RE1TdHJpcFhNaW47CmV4dGVybiBkb3VibGUgZ2RmRkRNU3RyaXBYTWF4OwpleHRlcm4gZG91Ymxl
IGdkZkZETVN0cmlwWU1pbjsKZXh0ZXJuIGRvdWJsZSBnZGZGRE1TdHJpcFlNYXg7CgpleHRlcm4g
ZG91YmxlIGdkZkZETU1heEVsZXY7CmV4dGVybiBkb3VibGUgZ2RmRkRNTWluRWxldjsKCmV4dGVy
biBmbG9hdCBnZkZETVVuZGVmRWxldjsKCmV4dGVybiBpbnQgZ25GRE1BdmVyYWdlTm9kZVNwYWNp
bmc7CgpleHRlcm4gZG91YmxlIGdkZkZETVhUb1BpeEExLCBnZGZGRE1YVG9QaXhBMjsKZXh0ZXJu
IGRvdWJsZSBnZGZGRE1ZVG9MaW5CMSwgZ2RmRkRNWVRvTGluQjM7CgpleHRlcm4gaW50IGduRkRN
U2F2ZVg7CmV4dGVybiBpbnQgZ25GRE1TYXZlWTsKIyAzMTAgIi4uLy4uLy4uL2xpYi9jY2xpbWFn
ZS5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgIEZJTEUqIGZwX21lbTsKICAgR0RCTGF5ZXIgaFNhbXBs
ZVBvaW50c0xheWVyOwogICBkb3VibGUgZGZSYWRpdXNJbmNyRmFjdG9yOwogICBkb3VibGUgZGZT
dGFydFJhZGl1czsKICAgZG91YmxlIGRmTWF4UmFkaXVzOwogICBkb3VibGUgZEVtcHR5VmFsdWU7
CiAgIGRvdWJsZSBkZlhSZXNvbHV0aW9uOwogICBkb3VibGUgZGZZUmVzb2x1dGlvbjsKICAgaW50
IG5NaW5OdW1Qb2ludHM7CiAgIGludCBuRXhwb25lbjsKICAgaW50IG5TYW1wbGU7CiAgIFRCb29s
IGJTaW1wbGVJbnZEaXM7Cn1JbnZkSW5mbzsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICBGSUxF
KiBmcF9tZW07CiAgIEdEQkxheWVyIGhTYW1wbGVQb2ludHNMYXllcjsKICAgaW50IG5NaW5OdW1Q
b2ludHM7CiAgIGludCBuRXhwb25lbjsKICAgaW50IG5TYW1wbGU7CiAgIFRCb29sIGJTaW1wbGVJ
bnZEaXM7CiAgIGRvdWJsZSBkZlJhZGl1c0luY3JGYWN0b3I7CiAgIGRvdWJsZSBkZlN0YXJ0UmFk
aXVzOwogICBkb3VibGUgZGZNYXhSYWRpdXM7CiAgIGRvdWJsZSBkRW1wdHlWYWx1ZTsKICAgZG91
YmxlIGRmWFJlc29sdXRpb247CiAgIGRvdWJsZSBkZllSZXNvbHV0aW9uOwogICBkb3VibGUgZGZZ
T2Zmc2V0OwogICBkb3VibGUgZGZYT2Zmc2V0Owp9SW52RGlzSW5mb190OwoKCgp0eXBlZGVmIHN0
cnVjdAp7CiAgICBGSUxFICogZnBJbjsKICAgIGludCAqIHBuU2VnbWVudHM7CiAgICBpbnQgblNl
Z21lbnRzOwogICAgY2hhciAqIHN6RmllbGROYW1lOwoKICAgIEZJTEUgKiBmcE91dDsKICAgIGlu
dCAqIGFuREJPVzsKICAgIGludCBuT3V0cHV0Q2hhbm5lbDsKCiAgICBpbnQgbkludGVycFR5cGU7
CiAgICBkb3VibGUgZGZNaW5TZWFyY2hSYWRpdXM7CiAgICBkb3VibGUgZGZNYXhTZWFyY2hSYWRp
dXM7CiAgICBpbnQgbk1pbkRhdGFOdW07CiAgICBUQm9vbCBiQmFja2dyb3VuZDsKICAgIGZsb2F0
IGZCYWNrZ3JvdW5kOwogICAgaW50IG5FeHA7CgogICAgSU1QUHJvZ3Jlc3NGdW5jIHBmbkNvdW50
ZXI7CiAgICB2b2lkICpwQ291bnRBcmc7Cgp9IEludkRpc3RQYXJhbV90OwoKCnR5cGVkZWYgc3Ry
dWN0IHsKICAgIGRvdWJsZSBkZlhTaXplOwogICAgZG91YmxlIGRmWVNpemU7CiAgICBkb3VibGUg
ZGZYT2Zmc2V0OwogICAgZG91YmxlIGRmWU9mZnNldDsKICAgIGRvdWJsZSogcGRmWDsKICAgIGRv
dWJsZSogcGRmWTsKICAgIGRvdWJsZSogcGRmWjsKICAgIGludCBuVGVybXM7CiAgICBUQm9vbCBC
YWNrRWxldkZsYWc7Cn0gU2FtcGxlUG9pbnRzSW5mb190OwoKClRCb29sIE5OSW50ZXJwb2xhdGUg
KEZJTEUgKmdkYl9mcCwgU2FtcGxlUG9pbnRzSW5mb190ICpwc1NhbXBsZUluZm8sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGJvYywgaW50ICp3aW5kb3csIFRCb29sIGJFeHRy
YXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMgcGZuQ291
bnRlcix2b2lkKiBwQ291bnRBcmcpOwoKCnZvaWQgSW52RGlzdGFuY2UoRklMRSAqZ2RiX2ZwLElu
dkRpc0luZm9fdCAqcHNJbnZEaXMsaW50IGRib2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQqIGRib3csUENJQ291bnRlciBwZm5Db3VudGVyKTsKClRC
b29sIEludGVycG9sYXRlQXRFYWNoUG9pbnQoSW52RGlzSW5mb190ICpwc0ludkRpcywgZG91Ymxl
IGRYZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRZZiwg
ZmxvYXQqIHBkZkVzdGltYXRlKTsKCgpUQm9vbCBJbnZEaXN0SW50ZXJwKEludkRpc3RQYXJhbV90
ICogcHNQYXJhbSApOwoKCnZvaWQgUmVhZFhZWihGSUxFICpmcF9yYXN0ZXIsIFNhbXBsZVBvaW50
c0luZm9fdCAqcHNTYW1wbGVJbmZvLAogICAgICAgICAgICAgRklMRSAqZnBfdmVjdG9yLCBpbnQg
bkRidnMsIGNoYXIgKnBzekZsZG5tZSwKICAgICAgICAgICAgIFRCb29sIGJDb252ZXJ0UGl4ZWwp
OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgZG91YmxlIGRNaW5YOwogICAgZG91YmxlIGRNaW5Z
OwogICAgZG91YmxlIGRYWVNjYWxlRmFjOwoKICAgIGRvdWJsZSBkTWluWjsKICAgIGRvdWJsZSBk
U2NhbGVkRGVsdGE7CiAgICBkb3VibGUgZERlbHRhOwogICAgZG91YmxlIGRBbHBoYTA7CiAgICBk
b3VibGUqIHBkQWxwaGFzOwp9IE11bHRpUXVhZENvZWZmX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg
ICBkb3VibGUgZE1pblg7CiAgICBkb3VibGUgZE1pblk7CiAgICBkb3VibGUgZFhZU2NhbGVGYWM7
CiAgICBkb3VibGUgZEEwOwogICAgZG91YmxlIGRBMTsKICAgIGRvdWJsZSBkQTI7CiAgICBkb3Vi
bGUqIHBkQjsKfSBUaGluUGxhdGVDb2VmZl90OwoKc3RydWN0IFByb2JsZW1JbmZvOwoKdHlwZWRl
ZiBUQm9vbCAoKmZUeXBlKShzdHJ1Y3QgUHJvYmxlbUluZm8qKTsKCgp0eXBlZGVmIHN0cnVjdCBQ
cm9ibGVtSW5mbyB7CiAgICBGSUxFKiBnZGJfZnA7CiAgICBkb3VibGUgZGZYU2l6ZTsKICAgIGRv
dWJsZSBkZllTaXplOwogICAgZG91YmxlIGRmWE9mZnNldDsKICAgIGRvdWJsZSBkZllPZmZzZXQ7
CiAgICBkb3VibGUgZGZYOwogICAgZG91YmxlIGRmWTsKICAgIGRvdWJsZSBkZkVzdGltYXRlOwog
ICAgZG91YmxlKiBwZGZYOwogICAgZG91YmxlKiBwZGZZOwogICAgZG91YmxlKiBwZGZaOwogICAg
aW50IG5UZXJtczsKICAgIGludCBkYm9jOwogICAgaW50KiBkYm93OwogICAgSU1QUHJvZ3Jlc3NG
dW5jIHBmbkNvdW50ZXI7CiAgICB2b2lkICpwQ291bnRBcmc7CiAgICB2b2lkKiBwc0NvZWZmczsK
ICAgIGZUeXBlIHBmblRyYW5zZm9ybVhZWjsKICAgIGZUeXBlIHBmbkNyZWF0ZUNvZWZmczsKICAg
IGZUeXBlIHBmbkRlc3Ryb3lDb2VmZnM7CiAgICBmVHlwZSBwZm5JbnRlcnBvbGF0aW9uOwogICAg
ZlR5cGUgcGZuSW50ZXJwb2xhdGVBdFBvaW50OwogICAgZG91YmxlIGRmUmVzVmFsdWU7Cn0gUHJv
YmxlbUluZm9fdDsKCgpUQm9vbCBSQkZJbnRlcnBvbGF0aW9uKFByb2JsZW1JbmZvX3QqIHBzSW5m
byk7CgpUQm9vbCBNUVRyYW5zZm9ybVhZWihQcm9ibGVtSW5mb190KiBwc0luZm8pOwpUQm9vbCBU
UFNUcmFuc2Zvcm1YWVooUHJvYmxlbUluZm9fdCogcHNJbmZvKTsKVEJvb2wgTVFDcmVhdGVDb2Vm
ZnMoUHJvYmxlbUluZm9fdCogcHNJbmZvKTsKVEJvb2wgTVFEZXN0cm95Q29lZmZzKFByb2JsZW1J
bmZvX3QqIHBzSW5mbyk7ClRCb29sIE1RSW50ZXJwb2xhdGVBdFBvaW50KFByb2JsZW1JbmZvX3Qq
IHBzSW5mbyk7ClRCb29sIFRQU0NyZWF0ZUNvZWZmcyhQcm9ibGVtSW5mb190KiBwc0luZm8pOwpU
Qm9vbCBUUFNEZXN0cm95Q29lZmZzKFByb2JsZW1JbmZvX3QqIHBzSW5mbyk7ClRCb29sIFRQU0lu
dGVycG9sYXRlQXRQb2ludChQcm9ibGVtSW5mb190KiBwc0luZm8pOwojIDUwMSAiLi4vLi4vLi4v
bGliL2NjbGltYWdlLmgiCnR5cGVkZWYgc3RydWN0CnsKICAgIEdEQkxheWVyIGhMYXllcjsKICAg
IGludCBuSW5wdXRGaWVsZDsKfSBLUkdMYXllcl90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewoKICAg
IGludCBuTGF5ZXJzOwogICAgS1JHTGF5ZXJfdCBhc0xheWVyc1s2NF07CgogICAgRklMRSAqZnBP
dXQ7CiAgICBpbnQgbkRCT0M7CiAgICBpbnQgbkRCT0NWYXI7CiAgICBpbnQgKnBhbkRCT1c7Cgog
ICAgSU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzOwogICAgdm9pZCAqcFByb2dyZXNzQXJnOwoK
ICAgIFRCb29sIGJVc2VCYWNrZ3JvdW5kVmFsdWU7CiAgICBkb3VibGUgZGZCYWNrZ3JvdW5kVmFs
dWU7CgogICAgaW50IG5Nb2RlOwogICAgZG91YmxlIGRmTnVnZ2V0OwogICAgZG91YmxlIGRmU2ls
bDsKICAgIGRvdWJsZSBkZlJhbmdlOwogICAgaW50IG5NYXhQb2ludHNQZXJNYXRyaXg7CiAgICBp
bnQgbk1pblBvaW50c1Blck9jdGFudDsKCiAgICBpbnQgbkJsb2NrTW9kZTsKICAgIGludCBuTWF4
UG9pbnRzUGVyQmxvY2s7CiAgICBkb3VibGUgZGZYQmxvY2s7CiAgICBkb3VibGUgZGZZQmxvY2s7
Cgp9IEtyaWdpbmdPcHRpb25zOwoKCgoKVEJvb2wgUG9pbnRLcmlnaW5nICggS3JpZ2luZ09wdGlv
bnMgKik7Cgp2b2lkIEluaXRLcmlnaW5nT3B0aW9ucyggS3JpZ2luZ09wdGlvbnMgKiApOwoKdm9p
ZCBLUkdBZGRMYXllciggS3JpZ2luZ09wdGlvbnMgKiwgR0RCTGF5ZXIsIGludCApOwoKCgoKCgp2
b2lkIEN1bXVDb3VudGVySW5pdCggSU1QUHJvZ3Jlc3NGdW5jLCB2b2lkICogKTsKdm9pZCBDdW11
Q291bnRlck5ld0xldmVsKCB2b2lkICk7CnZvaWQgQ3VtdUNvdW50ZXJFeGl0TGV2ZWwoIHZvaWQg
KTsKdm9pZCBDdW11Q291bnRlclNldFJhbmdlKCBkb3VibGUsIGRvdWJsZSApOwp2b2lkIEN1bXVD
b3VudGVyU2V0TWVzc2FnZSggY2hhciAqICk7CnZvaWQgQ3VtdUNvdW50ZXJQcm9ncmVzcyggZG91
YmxlICk7CgoKCgp0eXBlZGVmIGVudW0KewogICAgVkRFTV9QT0lOVFMsCiAgICBWREVNX0NPTlRP
VVJTLAogICAgVkRFTV8zRExJTkVTLAogICAgVkRFTV9WQUxMRVlTLAogICAgVkRFTV9SSURHRVMs
CiAgICBWREVNX0NMSUZGUwp9ClZERU1MYXllclR5cGU7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBp
bnQgbk51bUxheWVyczsKICAgIEdEQkxheWVyICpwYWhMYXllcnM7CiAgICBpbnQgKnBhbkZpZWxk
czsKICAgIFZERU1MYXllclR5cGUgKnBhZUxUeXBlczsKICAgIEZJTEUgKmZwT3V0OwogICAgaW50
IG5EQk9DOwogICAgaW50IGFuREJPV1s0XTsKICAgIGludCBuTWF4SXRlcjsKICAgIGZsb2F0IGZN
YXhFcnI7CiAgICBUQm9vbCBiV3JpdGVIaXM7CiAgICBpbnQgbk1lbUluQnl0ZXM7CiAgICBJTVBQ
cm9ncmVzc0Z1bmMgcGZuUHJvZ3Jlc3M7CiAgICB2b2lkICpwUHJvZ3Jlc3NBcmc7Cn0KVkRFTVBh
cmFtVHlwZTsKCnZvaWQgVkRFTShWREVNUGFyYW1UeXBlICpwc1BhcmFtcyk7Cgp2b2lkIFZERU1Q
YXJhbUluaXQoVkRFTVBhcmFtVHlwZSAqcHNQYXJhbXMpOwoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7
CgoKICAgIGludCAqREJPVzsKCiAgICBGSUxFICpmcFVuY29yOwogICAgRklMRSAqZnBHZW87Cgog
ICAgaW50IEJ1ZkNoYW47CiAgICBpbnQgKkRCSUM7CiAgICBpbnQgKkRCT0M7CgogICAgdW5zaWdu
ZWQgY2hhciAqKkxVVHM7CiAgICBkb3VibGUgKipMVVRDb2VmZnM7CgogICAgaW50IENhY2hlU2l6
ZTsKICAgIHVuc2lnbmVkIGNoYXIgKkNhY2hlOwogICAgaW50IE91dHB1dENhY2hlU2l6ZTsKCiAg
ICBkb3VibGUgKk1vc2FpYzsKICAgIGludCBNb3NhaWNTaXplOwoKICAgIHZvaWQgKCpDb3VudCko
ZG91YmxlKTsKCiAgICBkb3VibGUgRXhjbHVzaW9uVmFsdWU7CiAgICBpbnQgRXhjbHVzaW9uRmxh
ZzsKCiAgICBkb3VibGUgQmxlbmRXaWR0aDsKCiAgICBpbnQgU3JjQml0bWFwOwogICAgaW50IERz
dEJpdG1hcDsKCiAgICBUcmFuc2Zvcm1GdW5jIFRyYW5zZm9ybTsKICAgIHZvaWQgKlRyYW5zZm9y
bUFyZzsKCiAgICBpbnQgUmVzYW1wbGVUeXBlOwogICAgaW50IFNhbXBsaW5nSW50ZXJ2YWw7Cgog
ICAgVEJvb2wgYk1ldGFkYXRhOwogICAgVEJvb2wgYldhcm5UaHJhc2hpbmc7CgoKfSBXYXJwT3B0
aW9uczsKIyA2NTkgIi4uLy4uLy4uL2xpYi9jY2xpbWFnZS5oIgp2b2lkIEluaXRXYXJwT3B0aW9u
cyAoIFdhcnBPcHRpb25zICogKTsKaW50IFdhcnBJbWFnZSAoIFdhcnBPcHRpb25zICogKTsKdm9p
ZCBXYXJwQm91bmRzICggV2FycE9wdGlvbnMgKiwgaW50ICosIGludCAqICk7Cgp2b2lkIFdhcnBO
ZWFyZXN0ICggV2FycE9wdGlvbnMgKiwgaW50ICosIGludCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIGludCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKiwgaW50ICosIGludCwgaW50ICk7CnZvaWQgV2FycENhY2hlTmVhcmVzdCAo
IFdhcnBPcHRpb25zICosIGludCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBpbnQgKiwgaW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBpbnQgKTsKdm9pZCBXYXJwTmVhcmVzdFNh
bXBsaW5nICggV2FycE9wdGlvbnMgKiwgaW50ICosIGludCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIGludCAqLCBpbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgaW50ICosIGludCwgaW50LCBp
bnQgKTsKdm9pZCBXYXJwQmlsaW5lYXIgKCBXYXJwT3B0aW9ucyAqLCBpbnQgKiwgaW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIGludCAqLCBpbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBpbnQsIGludCApOwp2b2lk
IFdhcnBCaWxpbmVhclNhbXBsaW5nICggV2FycE9wdGlvbnMgKiwgaW50ICosIGludCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBpbnQg
KiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBp
bnQgKiwgaW50LCBpbnQsIGludCApOwp2b2lkIFdhcnBDdWJpYyAoIFdhcnBPcHRpb25zICosIGlu
dCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgaW50
ICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgaW50ICosIGludCwgaW50
ICk7CnZvaWQgV2FycEN1YmljU2FtcGxpbmcgKCBXYXJwT3B0aW9ucyAqLCBpbnQgKiwgaW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIGlu
dCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGlu
dCAqLCBpbnQsIGludCwgaW50ICk7CnZvaWQgV2FycFNpblggKCBXYXJwT3B0aW9ucyAqLCBpbnQg
KiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIGludCAq
LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBpbnQsIGludCAp
Owp2b2lkIFdhcnBTaW5YU2FtcGxpbmcgKCBXYXJwT3B0aW9ucyAqLCBpbnQgKiwgaW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgaW50ICos
IGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQgKiwg
aW50LCBpbnQsIGludCApOwoKaW50IFJlcHJvamVjdEltYWdlKCBXYXJwT3B0aW9ucyAqICk7Cmlu
dCBHQ1BSZXByb2plY3RJbWFnZSggV2FycE9wdGlvbnMgKiwgaW50ICk7CmludCBNb3NhaWNJbWFn
ZSggV2FycE9wdGlvbnMgKiApOwoKdm9pZCBQb2ludEluUG9seSggZG91YmxlLCBkb3VibGUsIGRv
dWJsZSAqLCBpbnQsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAg
aW50ICogKTsKdm9pZCBQcm94aW1pdHkoIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwgaW50LCBk
b3VibGUgKiApOwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgRklMRSAqZnBJbjsKICAgIEZJTEUg
KmZwT3V0OwogICAgaW50IG5OdW1MYXllcnM7CiAgICBpbnQgKnBhbkxheWVyczsKICAgIGludCAq
cGFuQXR0RmllbGRzOwogICAgZmxvYXQgKnBhZlZhbHVlczsKICAgIGludCAqZGJvYzsKICAgIGZs
b2F0IGZMaW5lV2lkdGg7CiAgICBUQm9vbCBiNENvbm5lY3Q7CiAgICBUQm9vbCBiQml0bWFwOwog
ICAgaW50IG5NZW1TaXplOwogICAgSU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzOwogICAgdm9p
ZCAqcFByb2dyZXNzQXJnOwogICAgaW50IG5PdmVybGF5RmxhZ3M7Cn0gR3JkcG9sUGFyYW1UeXBl
OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IG5YU2l6ZTsKICAgIGludCBuWVNpemU7CiAg
ICBpbnQgblRvcDsKICAgIGludCBuQnVmTGluZXM7CiAgICBmbG9hdCAqcGFmSW1hZ2U7CiAgICB1
bnNpZ25lZCBjaGFyICpwYWJ5UGxhbmU7CiAgICBmbG9hdCBmTGluZVdpZHRoOwogICAgaW50IG5P
dmVybGF5RmxhZ3M7Cn0gR3JpZERlc3RuVHlwZTsKCnZvaWQgR3JkcG9sUGFyYW1Jbml0KEdyZHBv
bFBhcmFtVHlwZSAqcHNQYXJhbXMpOwoKdm9pZCBHcmlkUG9seWdvbnMoR3JkcG9sUGFyYW1UeXBl
ICpwc1BhcmFtcyk7Cgp2b2lkIEdyaWRBcmNzKEdyZHBvbFBhcmFtVHlwZSAqcHNQYXJhbXMpOwoK
dm9pZCBHcmlkRWRnZUFuZEZpbGwoR3JkcG9sUGFyYW1UeXBlICpwc1BhcmFtcyk7Cgp2b2lkIEJ1
cm5Qb2x5Z29uc0luSW1hZ2UoaW50IG5Qb2x5Z29ucywgaW50ICpwbk51bVZlcnRpY2VzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICoqcHBmVmVydGljZXMsIGZsb2F0
IGZWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkRGVzdG5UeXBl
ICpwc0RDKTsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBGSUxFICpmcEluOwogICAgRklMRSAq
ZnBPdXQ7CiAgICBpbnQgblZTZWc7CiAgICBpbnQgKmFuREJWUzsKICAgIGludCBuREJPQzsKICAg
IGNoYXIgKmZsZG5tZTsKICAgIGludCBuTWF4SXRlcjsKICAgIGZsb2F0IGZUZW5zaW9uOwogICAg
ZmxvYXQgZlJlbGF4Owp9CkdyZENudFBhcmFtVHlwZTsKCnZvaWQgR3JpZENvbnRvdXIoR3JkQ250
UGFyYW1UeXBlICpwc1BhcmFtcywgUENJQ291bnRlciBwZm5Db3VudGVyKTsKIyA3NzcgIi4uLy4u
Ly4uL2xpYi9jY2xpbWFnZS5oIgp2b2lkIFZTYW1wbGVQb2x5KCBGSUxFICosIEdEQkxheWVyLCBp
bnQsIGludCwgZG91YmxlLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmFuc2Zvcm1GdW5jLCB2b2lkICosIElNUFByb2dyZXNzRnVuYywgdm9pZCAqICk7CgoKCgoK
dm9pZCBJSFN0b1JHQiAoaW50IGksIGludCBoLCBpbnQgcywgaW50KiByLCBpbnQqIGcsIGludCog
Yik7CnZvaWQgUkdCdG9JSFMgKGludCByLCBpbnQgZywgaW50IGIsIGludCogaSwgaW50KiBoLCBp
bnQqIHMpOwoKdm9pZCBSR0JUb0lIU1RyYW5zZm9ybShmbG9hdCAqYWZSR0JCdWZmZXIsIGZsb2F0
ICphZklIU0J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5Db3Vu
dCwgVEJvb2wgYlNjYWxlLCBjaGFyICpzeklIU01vZGVsKTsKCnZvaWQgSUhTVG9SR0JUcmFuc2Zv
cm0oZmxvYXQgKmFmSUhTQnVmZmVyLCBmbG9hdCAqYWZSR0JCdWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBuQ291bnQsIFRCb29sIGJTY2FsZSwgY2hhciAqc3pJSFNN
b2RlbCk7CiMgODAzICIuLi8uLi8uLi9saWIvY2NsaW1hZ2UuaCIKdHlwZWRlZiBzdHJ1Y3QKewoK
CiAgICBGSUxFICpmcFNvdXJjZTsKCiAgICBGSUxFICpmcERlc3Q7CiAgICBjaGFyICpwc3pEZXN0
TmFtZTsKCiAgICBpbnQgblByb2Nlc3M7CgogICAgaW50IG5PdXRwdXRBczsKCiAgICBpbnQgYW5E
QklDWzJdOwogICAgaW50IG5JbkxheWVyczsKICAgIGludCBhbkRCSVdbNF07CiAgICBpbnQgbkRC
T0M7CgogICAgVEJvb2wgYkhpc3Rvcnk7CgoKICAgIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVz
czsKICAgIHZvaWQgKnBQcm9ncmVzc0FyZzsKCiAgICBkb3VibGUgKnBhZGZBMERhdGE7CiAgICBk
b3VibGUgKnBhZGZTY2FsZTsKICAgIGRvdWJsZSAqcGFkZkluY2lkOwoKfSBTQVJTaWdtYV90OwoK
U0FSU2lnbWFfdCAqQ3JlYXRlU0FSU2lnbWEoKTsKdm9pZCBGcmVlU0FSU2lnbWEoIFNBUlNpZ21h
X3QgKiApOwpUQm9vbCBTQVJTaWdtYSggU0FSU2lnbWFfdCAqICk7Cgp9CiMgMTgwICIuLi8uLi8u
Li9saWIvZ2VvLmgiIDIKCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICBkb3Vi
bGUgKnNyX2ZpcnN0OwogIGRvdWJsZSAqc3JfbGFzdDsKICBkb3VibGUgKmxvbmdfZmlyc3Q7CiAg
ZG91YmxlICpsb25nX21pZDsKICBkb3VibGUgKmxvbmdfbGFzdDsKICBkb3VibGUgKmxhdF9maXJz
dDsKICBkb3VibGUgKmxhdF9taWQ7CiAgZG91YmxlICpsYXRfbGFzdDsKfSBMaW5lUG9zaXRpb247
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgUHJvakluZm9fdCBzR2VvVHJhbnNmb3JtOwoKICBMaW5lUG9z
aXRpb24gc0xpbmVQb3M7CgogIGludCBuT3JiUGl4ZWxzOwogIGludCBuT3JiTGluZXM7Cn0gUlRD
U0NhbGNPcHRpb25zX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgR0VPSW5mb190IHNHZW8ySW1nOwog
IEdFT0luZm9fdCBzSW1nMkdlbzsKCiAgTGluZVBvc2l0aW9uICpwc0xpbmVQb3M7CgogIGludCBu
T3JiUGl4ZWxzOwogIGludCBuSW5jcmVtZW50OwoKICBkb3VibGUgZGZYUmVzOwogIGRvdWJsZSBk
ZllSZXM7CiAgZG91YmxlIGRmZGlzdF8xOwogIGRvdWJsZSBkZmRpc3RfbjsKICBkb3VibGUgKnBk
ZlNsYW50OwogIGRvdWJsZSAqcGRmSW5jOwogIGRvdWJsZSAqcGRmU2FtcGxlX3NpemU7CiAgZG91
YmxlIGRmR0NQTWluSHQ7CiAgZG91YmxlIGRmR0NQTWF4SHQ7CgogIFJUQ1NDYWxjT3B0aW9uc190
ICpwc0NPcHQ7Cn0gUlRDU0luZm9fdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbkdD
UDsKICAgIGNoYXIgKnBzekdjcGlkczsKICAgIGNoYXIgKm1hcHVuaXQ7CiAgICBjaGFyICpwc3pT
dGF0dXM7CiAgICBkb3VibGUgKnBhZGZQaXhlbDsKICAgIGRvdWJsZSAqcGFkZkxpbmU7CiAgICBk
b3VibGUgKnBhZGZYOwogICAgZG91YmxlICpwYWRmWTsKICAgIGRvdWJsZSAqcGFkZlo7CiAgICBQ
cm9qSW5mb190ICpzUHJvamVjdGlvbjsKfSBHQ1BJbmZvX3Q7CgpHQ1BJbmZvX3QgKklEQkdjcElP
MiAoIEZJTEUgKiwgaW50LCBpbnQsIGludCAqLCBHQ1BJbmZvX3QgKik7CnZvaWQgSURCR2NwMkZy
ZWUgKCBHQ1BJbmZvX3QgKnNHQ1AgKTsKR0NQSW5mb190ICpJREJHY3BUb0dDUEluZm8gKCBGSUxF
ICosIGludCk7CgoKCgp2b2lkIFJGR2VvMkltZyAoUkZJbmZvX3QgKiwgZG91YmxlLCBkb3VibGUs
IGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqKTsK
aW50IFJGSW1nMkdlbyAoUkZJbmZvX3QgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIEZJTEUgKiwgZG91Ymxl
LCBpbnQpOwpUQm9vbCBSRkRldEdlbyAoUkZJbmZvX3QgKipSRk1vZGVsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBkZkxQaXhlbCwgZG91YmxlIGRmTExpbmUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIGRmUlBpeGVsLCBkb3VibGUgZGZSTGluZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgKnBkZlgsIGRvdWJsZSAqcGRmWSwgZG91YmxlICpwZGZa
KTsKCgoKCnZvaWQgQVBHZW8ySW1nIChBUEluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91Ymxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIEFQ
SW1nMkdlbyAoQVBJbmZvX3QgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqKTsKdm9pZCBBUEltZzJQaG90byAoQVBJ
bmZvX3QgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgQVBQaG90
bzJHZW8gKEFQSW5mb190ICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqKTsKVEJvb2wgQVBEZXRHZW8gKEFQSW5m
b190ICoqQVBNb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZMUGl4ZWws
IGRvdWJsZSBkZkxMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZlJQaXhl
bCwgZG91YmxlIGRmUkxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpwZGZY
LCBkb3VibGUgKnBkZlksIGRvdWJsZSAqcGRmWik7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgUHJv
akluZm9fdCBzR2VvVHJhbnNmb3JtOwogIEVwaGVtZXJpc1NlZ190ICpwc09yYml0RGF0YTsKICBU
Qm9vbCBSYXdUb0dlbzsKfSBTUklUQ2FsY09wdGlvbnNfdDsKClRCb29sIFNSSVRDYWxjdWxhdGUo
IFNSSVRJbmZvX3QgKiAsIEVwaGVtZXJpc1NlZ190ICosIGludCAsIFByb2pJbmZvX3QgKiAsCiAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlICogLCBkb3VibGUgKiAsIGRvdWJsZSAqICwgZG91
YmxlICogLCBkb3VibGUgKik7CgpUQm9vbCBTUklUQ2FsY3VsYXRlTiggaW50ICwgY2hhciAqLCBT
UklUSW5mb190ICoqICwgRXBoZW1lcmlzU2VnX3QgKiosCiAgICAgICAgICAgICAgICAgICAgICBQ
cm9qSW5mb190ICosIGludCAsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAg
ICAgaW50ICwgY2hhciAqLCBjaGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosCiAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUg
KiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgY2hhciAqLCBpbnQgKiwK
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKik7Cgp2b2lkIFNSSVRJbml0
IChGSUxFICosIGludCAsIEVwaGVtZXJpc1NlZ190ICoqKTsKCnZvaWQgU1JJVFRyYW5zZm9ybSgg
U1JJVEluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAg
IGRvdWJsZSAqLCBkb3VibGUgKik7Cgp2b2lkIFNSSVRSTVNFcnJvciAoU1JJVEluZm9fdCAqLCBp
bnQgLAogICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAg
ICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKik7Cgp2
b2lkIFNSSVRXTW9kZWwgKEZJTEUgKiwgaW50ICosIFNSSVRJbmZvX3QgKik7Cgp2b2lkIFNSSVRS
TW9kZWwgKEZJTEUgKiwgaW50ICwgU1JJVEluZm9fdCAqKTsKClRCb29sIFNSSVREZXRHZW8gKFNS
SVRJbmZvX3QgKipTUklUTW9kZWwsIGRvdWJsZSBkZnBpeGVsMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBkZmxpbmUxLCBkb3VibGUgZGZwaXhlbDIsIGRvdWJsZSBkZmxpbmUy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpwZGZYLCBkb3VibGUgKnBkZlks
IGRvdWJsZSAqcGRmWik7CgpUQm9vbCBHZW5TYXRFcGlwb2xhciAoY2hhciAqLCBjaGFyICosIGNo
YXIgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBp
bnQsIHZvaWQgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDUElu
Zm9fdCAqLCBHQ1BJbmZvX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQs
IElNUFByb2dyZXNzRnVuYywgdm9pZCAqKTsKClRCb29sIEdlbkFQRXBpcG9sYXIgKGNoYXIgKiwg
Y2hhciAqLCBjaGFyICosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCwgaW50LCBBUEluZm9fdCAqLCBBUEluZm9fdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0NQSW5mb190ICosIEdDUEluZm9fdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50LCBJTVBQcm9ncmVzc0Z1bmMsIHZvaWQgKik7CgpUQm9vbCBHZW9TYXRERU0gKGNo
YXIgKiwgaW50LCBpbnQgKiwgY2hhciAqLCBpbnQsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSwgY2hhciAqICwgaW50LCBJTVBQcm9ncmVzc0Z1bmMsIHZv
aWQgKik7CgoKdm9pZCB0b3V0aW5fMSAoU1JJVEluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91
YmxlLCBkb3VibGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKik7Cgp2b2lk
IHRvdXRpbiAoU1JJVEluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqKTsKdm9pZCBTUE9UMUJUbzFBKCBTUklU
SW5mb190ICosIGRvdWJsZSAqLCBkb3VibGUgKik7Cgp2b2lkIFNQT1QxQVRvMUIoIFNSSVRJbmZv
X3QgKiwgZG91YmxlICosIGRvdWJsZSAqKTsKCnZvaWQgRGV0RGVtIChGSUxFICosIGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAg
ICAgICAgZG91YmxlLCBpbnQsIGludCwgaW50LCBUQm9vbCAqLCBmbG9hdCAqLCBpbnQsIGRvdWJs
ZSwgaW50ICopOwoKZG91YmxlIEdldEdlb2lkSHQgKGRvdWJsZSwgZG91YmxlKTsKCnZvaWQgSW1h
Z2VIaXMgKEZJTEUqLCBpbnQsIGludCAqLCBpbnQgKiwgZG91YmxlKTsKCnZvaWQgTDdIREZSZWFk
IChjaGFyICosIGNoYXIgKiwgaW50ICosIGludCAsIGNoYXIgKiwgY2hhciAqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIFRCb29sLCBJTVBQcm9ncmVzc0Z1bmMpOwoKdm9pZCBMN1RpZmZSZWFk
IChjaGFyICosIGNoYXIgKiwgaW50ICosIGludCAsIGNoYXIgKiwgY2hhciAqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBUQm9vbCwgSU1QUHJvZ3Jlc3NGdW5jKTsKCnZvaWQgTDdGYXN0UmVh
ZCAoY2hhciAqLCBjaGFyICosIGludCAqLCBpbnQgLCBjaGFyICosIGNoYXIgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEJvb2wsIElNUFByb2dyZXNzRnVuYyk7Cgp2b2lkIEw3TmxhcHNS
ZWFkIChjaGFyICosIGNoYXIgKiwgaW50ICosIGludCAsIGNoYXIgKiwgY2hhciAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEJvb2wsIElNUFByb2dyZXNzRnVuYyk7Cgp2b2lkIEFTVEVS
UmVhZCAoY2hhciAqLCBjaGFyICosIGludCAqLCBpbnQgLCBjaGFyICosIGNoYXIgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBUQm9vbCwgSU1QUHJvZ3Jlc3NGdW5jKTsKCnZvaWQgU2F0RXAx
VG9JbWcgKGludCwgdm9pZCAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSwgZG91YmxlICosIGludCwgaW50LCBUQm9vbCAqLCBUQm9vbCk7Cgp2
b2lkIFNhdEVwMlRvSW1nIChkb3VibGUsIGRvdWJsZSwgZG91YmxlICosIGRvdWJsZSAqLCBkb3Vi
bGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wpOwoKdm9pZCBTYXRJbWdU
b0VwMiAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKiwgaW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlLCBUQm9vbCAqLCBUQm9vbCk7Cgp2
b2lkIFNhdEltZ1RvRXAxIChpbnQgLCB2b2lkICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKiwgaW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlLCBUQm9vbCAqLCBUQm9v
bCk7CgpUQm9vbCBNZXJnZUlrb25vcyAoaW50LCBGSUxFICoqLCBjaGFyICosIElNUFByb2dyZXNz
RnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCBjaGFyICopOwoKVEJv
b2wgTWVyZ2VTcG90IChpbnQsIEZJTEUgKiosIGNoYXIgKiwgSU1QUHJvZ3Jlc3NGdW5jLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosIGNoYXIgKik7ClRCb29sIE1lcmdlQXN0
ZXIgKGludCwgRklMRSAqKiwgY2hhciAqLCBJTVBQcm9ncmVzc0Z1bmMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKiwgY2hhciAqKTsKIyAzOTMgIi4uLy4uLy4uL2xpYi9nZW8u
aCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IG5UeXBlOwoKICAgIFByb2pJbmZvX3Qgc1Byb2pl
Y3Rpb247CgogICAgaW50IG5UUk5UeXBlOwogICAgR0VPSW5mb190ICpwc0dFT0Zyb21QaXhlbDsK
ICAgIEdFT0luZm9fdCAqcHNHRU9Ub1BpeGVsOwoKICAgIEVwaGVtZXJpc1NlZ190ICpwc09yYml0
Owp9IEltZ0dlbzsKCkltZ0dlbyAqIEltZ0dlb0FsbG9jYXRlKCk7CnZvaWQgSW1nR2VvRGVhbGxv
Y2F0ZSggSW1nR2VvICogKTsKSW1nR2VvICogSW1nR2VvRnJvbUdDUHMoIEZJTEUgKiBmcCwgaW50
IG5TZWdtZW50LCBpbnQgblRSTlR5cGUgKTsKSW1nR2VvICogSW1nR2VvRnJvbU9yYml0KCBGSUxF
ICogZnAsIGludCBuU2VnbWVudCApOwpJbWdHZW8gKiBJbWdHZW9Gcm9tUHJvamVjdGlvbiggUHJv
akluZm9fdCAqICk7CnZvaWQgSW1nR2VvR2V0UHJvamVjdGlvbiggSW1nR2VvICosIFByb2pJbmZv
X3QgKiApOwpUQm9vbCBJbWdHZW9Ub1BpeGVsKCBJbWdHZW8gKiwKICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSAqLCBkb3VibGUgKiwgZG91YmxlICogKTsKVEJvb2wgSW1nR2VvRnJvbVBpeGVsKCBJbWdHZW8g
KiwKICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqICk7CgoKCgp2
b2lkIERpc3RDb2VmZihkb3VibGUgKiwgZG91YmxlICosIGludCwgY2hhciAqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlLCBkb3VibGUgKiwgaW50KTsKClRCb29sIEdldEVsZXYoIEZJ
TEUgKiwgaW50LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlICosIFRCb29sLCBkb3VibGUpOwoKVEJv
b2wgSXNPdmVybGFwIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CgppbnQgR2Vu
V1JhdGlvbmFsIChkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJs
ZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBpbnQg
LCBpbnQgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwg
ZG91YmxlICosIGRvdWJsZSAqLCBpbnQgLCBkb3VibGUpOwoKVEJvb2wgR2VuQXV0b0RlbSAoY2hh
ciAqZmlsZXAxLCBjaGFyICpmaWxlcDIsIGNoYXIgKmZpbGVkZW0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbk1vZGVsLCBpbnQgblNlZ21lbnQxLCBpbnQgblNlZ21lbnQyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkYml3LCBkb3VibGUgKmRmTWluTWF4RWxldiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZmFpbHZhbHUsIGludCBuYmFja2VsZXYs
IGludCBuRXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqRGVtRGV0LCBjaGFy
ICpEZW1FZGl0LCBjaGFyICpTY29yQ2hhbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKnJlcG9ydCwgSU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqcFByb2dyZXNzQXJnLCBjaGFyKiBFcnJNc2cpOwoKVEJvb2wgR2Vu
SW1nMkdlbyAoaW50IG5Nb2RlbCwgdm9pZCAqcE1vZGVsLCBkb3VibGUgZGZwaXhlbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmbGluZSwgZG91YmxlIGR6LCBkb3VibGUgKnBk
Zmdlb3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqcGRmZ2VveSk7CgpUQm9v
bCBHZW5HZW8ySW1nIChpbnQgbk1vZGVsLCB2b2lkICpwTW9kZWwyLCBkb3VibGUgZGZnZW94LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZnZW95LCBkb3VibGUgZHosIGRvdWJs
ZSAqcGRmZG94LAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKnBkZmRveSk7Cgpk
b3VibGUgQ2hlY2tJbWdSZXMgKGNoYXIgKnBzekZpbGVuYW1lLCBpbnQgbk1vZGVsLCBpbnQgblNl
Z21lbnQxKTsKClRCb29sIENhbEVsZXYgKGludCBuTW9kZWwsIHZvaWQgKnBNb2RlbCwgZG91Ymxl
IGRmTFBpeGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZMTGluZSwgdm9p
ZCAqcE1vZGVsMiwgZG91YmxlIGRmUlBpeGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgZGZSTGluZSwgZG91YmxlIGRmVG9sLCBkb3VibGUgKnBkZlgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSAqcGRmWSwgZG91YmxlICpwZGZaKTsKCnZvaWQgTWVhbk1hdGNo
IChkb3VibGUqIHBkZlRlbXBsYXRlLCBpbnQgblRTaXplLCBkb3VibGUqIHBkZlNlYXJjaCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgblNTaXplLCBkb3VibGUgKnBkZkNvclNjb3JlLCBp
bnQgbkNTU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUqIE1heFNjb3JlLCBp
bnQqIE1heFgsIGludCogTWF4WSk7Cgp2b2lkIERpZmZNYXRjaCAoZG91YmxlKiBwZGZUZW1wbGF0
ZSwgaW50IG5UU2l6ZSwgZG91YmxlKiBwZGZTZWFyY2gsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG5TU2l6ZSwgZG91YmxlICpwZGZDb3JTY29yZSwgaW50IG5DU1NpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlKiBNaW5TY29yZSwgZG91YmxlICpNYXhTY29yZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQqIE1pblgsIGludCogTWluWSk7Cgp2b2lkIFN1YlBp
eGVsKGRvdWJsZSBmMTEsIGRvdWJsZSBmMTIsIGRvdWJsZSBmMTMsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBmMjEsIGRvdWJsZSBmMjIsIGRvdWJsZSBmMjMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBmMzEsIGRvdWJsZSBmMzIsIGRvdWJsZSBmMzMsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSAqZGZYLCBkb3VibGUgKmRmWSk7CgoKCgoKCnR5cGVkZWYgc3Ry
dWN0CnsKCgogICAgaW50ICpEQklXOwogICAgaW50ICpEQk9XOwoKICAgIEZJTEUgKmZwVW5jb3I7
CiAgICBGSUxFICpmcEdlbzsKICAgIEZJTEUgKmZwREVNOwogICAgRklMRSAqZnBGaWx0ZXI7Cgog
ICAgaW50IEJ1ZkNoYW47CiAgICBpbnQgKkRCSUM7CiAgICBpbnQgKkRCT0M7CiAgICBpbnQgREJF
QzsKICAgIGRvdWJsZSBkZkVsZXZPcHRpb25bMl07CiAgICBkb3VibGUgZGZCYWNrRWxldjsKCiAg
ICBpbnQgQ2FjaGVTaXplOwoKICAgIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzczsKICAgIGlu
dCBSZXNhbXBsZVR5cGU7CiAgICBpbnQgU2FtcGxpbmdJbnRlcnZhbDsKICAgIGludCBGaWx0ZXJU
eXBlOwogICAgaW50IG5GaWx0ZXJTaXplWzJdOwoKICAgIGludCBNYXRoTW9kZWw7CiAgICBTUklU
SW5mb190ICpTUklUTW9kZWw7CiAgICBBUEluZm9fdCAqQVBNb2RlbDsKICAgIFJGSW5mb190ICpS
Rk1vZGVsOwogICAgUlRDU0luZm9fdCAqUlRDU01vZGVsOwoKICAgIGNoYXIgVVRNVW5pdFsxN107
Cgp9IE9ydGhvT3B0aW9uczsKIyA1MzcgIi4uLy4uLy4uL2xpYi9nZW8uaCIKdm9pZCBJbml0T3J0
aG9PcHRpb25zICggT3J0aG9PcHRpb25zICogKTsKdm9pZCBHZW5PcnRobyAoIE9ydGhvT3B0aW9u
cyAqICk7CgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBGSUxFICpmcENvbG91cjsKICAgIGludCBh
bkNvbG91ckNoYW5zWzNdOwogICAgaW50IGFuQ29sb3VyRGJpd1s0XTsKICAgIFRCb29sIGJQc2V1
ZG9Db2xvdXI7CiAgICB1bnNpZ25lZCBjaGFyIGF1Y0NvbG91ckx1dFs3NjhdOwogICAgZmxvYXQg
YWZDb2xvdXJNaW5bM107CiAgICBmbG9hdCBhZkNvbG91ck1heFszXTsKICAgIGludCBuQ29sb3Vy
UmVzYW1wbGU7CgogICAgRklMRSAqZnBJbnRlbnNpdHk7CiAgICBpbnQgbkludGVuc2l0eUNoYW47
CiAgICBpbnQgYW5JbnRlbnNpdHlEYml3WzRdOwogICAgdW5zaWduZWQgY2hhciBhdWNJbnRlbnNp
dHlMdXRbMjU2XTsKICAgIGZsb2F0IGZJbnRlbnNpdHlNaW47CiAgICBmbG9hdCBmSW50ZW5zaXR5
TWF4OwogICAgaW50IG5JbnRlbnNpdHlSZXNhbXBsZTsKCiAgICBGSUxFICpmcE91dHB1dDsKICAg
IGludCBhbk91dHB1dENoYW5zWzNdOwogICAgZmxvYXQgZk91dHB1dEJhY2tncm91bmQ7CgogICAg
aW50IG5GdXNpb25Nb2RlbDsKICAgIGludCBiVG9JSFM7CgogICAgdm9pZCAoKnBmbkNvdW50ZXIp
KGRvdWJsZSk7Cgp9IEZ1c2lvbk9wdGlvbnM7CiMgNTg5ICIuLi8uLi8uLi9saWIvZ2VvLmgiCnZv
aWQgSW5pdEZ1c2lvbk9wdGlvbnMgKEZ1c2lvbk9wdGlvbnMgKnBzRnVzaW9uT3B0aW9ucyk7CnZv
aWQgRGF0YUZ1c2lvbiAoRnVzaW9uT3B0aW9ucyAqcHNGdXNpb25PcHRpb25zKTsKCnZvaWQgR2V0
SGlzdG9ncmFtIChGSUxFICpmcCwgaW50IG5DaG5OdW0sIGludCBhbkRiaXdbNF0sCiAgICAgICAg
ICAgICAgICAgIGludCBhbkhpc3RvZ3JhbVtdLCBkb3VibGUgKnBkZkRhdGFNaW4sIGRvdWJsZSAq
cGRmRGF0YU1heCwKICAgICAgICAgICAgICAgICAgaW50IG5GdW5jKTsKCnZvaWQgR2V0RGVmYXVs
dEx1dCAoaW50IGFuSGlzdG9ncmFtW10sIGludCBlVHlwZSwgdW5zaWduZWQgY2hhciBhbkx1dFtd
KTsKClRCb29sIEdlbmVyYXRlQ29udG91cnMgKEZJTEUgKmdkYl9mcCwgaW50IGRiZWMsIGludCAq
ZGJpdywKICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKmFkZkNvbnRvdXJMaXN0LCBpbnQg
bkNvbnRvdXJzLCBkb3VibGUgYmFja3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBHREJMYXll
ciBoTmV3TGF5ZXIsIGludCBpRmllbGQsCiAgICAgICAgICAgICAgICAgICAgICAgSU1QUHJvZ3Jl
c3NGdW5jIHBmblByb2dyZXNzLCB2b2lkICpwUHJvZ3Jlc3NBcmcpOwoKCgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICAgIGRvdWJsZSB4OwogICAgZG91YmxlIHk7Cn0gVk9SUG9pbnQ7CgoKdHlwZWRlZiBz
dHJ1Y3QKewogICAgZG91YmxlIGRMZWZ0OwogICAgZG91YmxlIGRUb3A7CiAgICBkb3VibGUgZFJp
Z2h0OwogICAgZG91YmxlIGRCb3R0b207Cn0gVk9SUmVjdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAg
ICBpbnQgblZlcnRpY2VzOwogICAgVk9SUG9pbnQgKnBhc1ZlcnRpY2VzOwp9IFZPUlBvbHlnb247
CgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgVk9SUG9pbnQgc1BvaW50OwogICAgVk9SUG9seWdvbiBz
UG9seWdvbjsKfSBWT1JEaWFncmFtOwoKCnZvaWQgVk9SVm9yb25vaURpYWdyYW0oVk9SRGlhZ3Jh
bSAqcGFzVk9SRGlhZ3JhbSwgaW50IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZPUlJlY3QgKnBzUmVjdCk7CnZvaWQgVk9SRnJlZVBvbHlnb25zKFZPUkRpYWdyYW0gKnBhc1ZP
UkRpYWdyYW0sIGludCBuKTsKCgoKCnZvaWQgRmluZERlbVJhbmdlIChGSUxFICosIGludCwgaW50
LCBpbnQsIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgUlRDU0dldEltYWdlSW5mbyAoRklMRSAq
LCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQgKiwKICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKiwgZG91YmxlICosIGRvdWJsZSAqLCBUQm9vbCAqKTsKdm9pZCBSVENTRGV0
UG9pbnQgKGludCwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlLCBkb3VibGUg
KiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICopOwp2b2lk
IFJUQ1NQYXJhbGxheENhbCAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91
YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUsIGludCAqLCBpbnQgKik7
CnZvaWQgUlRDU0dldExpbmVEYXRhIChGSUxFICosIGludCwgTGluZVBvc2l0aW9uICosIGludCk7
CnZvaWQgUlRDU0dldFBvc2l0aW9uSW5mbyAoTGluZVBvc2l0aW9uICosIGludCwgZG91YmxlLCBk
b3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRv
dWJsZSAqLCBUQm9vbCAqKTsKdm9pZCBSVENTQ2FsUGFyYW1ldGVycyAoZG91YmxlLCBkb3VibGUs
IGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICos
CiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBpbnQsIFRCb29sICopOwp2b2lkIFJU
Q1NEZW1MaW5lIChGSUxFICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgY2hhciAq
LCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgZG91YmxlLCBkb3VibGUsIGludCwg
aW50LCBpbnQsIGZsb2F0ICosIGRvdWJsZSwgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAg
IGludCAqLCBpbnQsIGRvdWJsZSAqLCBpbnQgKiwgaW50ICopOwp2b2lkIFJUQ1NDRGVtTGluZSAo
RklMRSAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGNoYXIgKiwgZG91YmxlLAog
ICAgICAgICAgICAgICAgICBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBpbnQsIGludCwgZmxvYXQg
KiwgZG91YmxlLAogICAgICAgICAgICAgICAgICBjaGFyICosIGludCwgaW50ICosIGludCwgZG91
YmxlICosIGludCwKICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwg
aW50ICosIGludCAqLCBpbnQsIGludCAqKTsKdm9pZCBSVENTQ2FsRWxldiAoRklMRSAqLCBkb3Vi
bGUsIGRvdWJsZSwgZG91YmxlICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAg
ICAgICAgICBkb3VibGUsIGludCwgaW50LCBpbnQsIFRCb29sICosIGZsb2F0ICosIGludCwKICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSwgaW50ICosIGludCAqLCBpbnQgKik7CnZvaWQgUlRDU0ND
YWxFbGV2IChGSUxFICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwgZG91YmxlLCBkb3VibGUs
IGRvdWJsZSwKICAgICAgICAgICAgICAgICAgIGRvdWJsZSwgaW50LCBpbnQsIGludCwgVEJvb2wg
KiwgZmxvYXQgKiwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgaW50ICosIGludCwgaW50LCBp
bnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICosIGludCAqLCBpbnQsIGludCAqKTsKdm9pZCBSVENT
RG90UHJvZHVjdCAoZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgUlRDU0VhcnRo
UmFkaXVzIChkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIFJUQ1NOb3JtYWxpemUgKGRvdWJsZSAq
LCBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIFJUQ1NYWVpQb2xhciAoZG91YmxlICosIGRvdWJs
ZSAqLCBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIFJUQ1NQb2x5Q29lZiAoZG91YmxlICosIGRv
dWJsZSAqLCBkb3VibGUgKiwgaW50ICosIFRCb29sICopOwp2b2lkIFJUQ1NTb2x2ZUVxbiAoZG91
YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBUQm9vbCAqKTsK
dm9pZCBSVENTUG9sYXJYWVogKGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAq
KTsKdm9pZCBSVENTSW5pU2ltIChGSUxFICosIEZJTEUgKiwgaW50LCBpbnQsIGRvdWJsZSwgTGlu
ZVBvc2l0aW9uICosCiAgICAgICAgICAgICAgICAgIGZsb2F0ICoqLCBkb3VibGUgKiosIHVuc2ln
bmVkIGNoYXIgKiosIGludCAqKiwgaW50ICoqLAogICAgICAgICAgICAgICAgICBpbnQgKiwgaW50
ICosIGludCAqLCBpbnQgKiwgZG91YmxlICosIGRvdWJsZSAqLCBUQm9vbCAqKTsKdm9pZCBSVENT
U2ltQ2hpcCAoRklMRSAqLCBGSUxFICosIGZsb2F0ICosIGludCAsIGludCAqLCBpbnQsIGRvdWJs
ZSwKICAgICAgICAgICAgICAgICAgTGluZVBvc2l0aW9uICosIGZsb2F0ICosIGRvdWJsZSAqLCB1
bnNpZ25lZCBjaGFyICosIGludCAqLCBpbnQgKiwKICAgICAgICAgICAgICAgICAgaW50ICwgaW50
LCBpbnQsIGludCwgZG91YmxlICwgZG91YmxlICwgUENJQ291bnRlciApOwp2b2lkIFJUQ1NDYWxT
aGlmdFBhcmFsbGF4IChpbnQsIGludCwgZG91YmxlLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJs
ZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKik7CnZvaWQgUlRD
U0luaU1hcCAoRklMRSAqLCBpbnQsIExpbmVQb3NpdGlvbiAqLCBkb3VibGUgKiwgZG91YmxlICos
IGludCAqLCBpbnQgKik7CnZvaWQgUlRDU0NhbGN1bGF0ZSAoR0VPSW5mb190ICosIEdFT0luZm9f
dCAqLCBMaW5lUG9zaXRpb24gKiwgaW50LAogICAgICAgICAgICAgICAgICAgIFByb2pJbmZvX3Qg
KiwKICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3Vi
bGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQpOwp2b2lkIFJUQ1NS
TVNFcnJvciAoR0VPSW5mb190ICosIEdFT0luZm9fdCAqLCBMaW5lUG9zaXRpb24gKiwgaW50LCBp
bnQsCiAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3Vi
bGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICopOwp2
b2lkIFJUQ1NUcmFuc2Zvcm0gKEdFT0luZm9fdCAqLCBHRU9JbmZvX3QgKiwgTGluZVBvc2l0aW9u
ICosIGludCwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgIGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUgKiwgZG91YmxlICopOwp2b2lkIFJUQ1NHZW9Ub0ltZyAoTGluZVBvc2l0aW9uICosIGludCwg
ZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAg
ICBkb3VibGUgKiwgaW50LCBpbnQsIGRvdWJsZSwgZG91YmxlLCBHRU9JbmZvX3QgKiwgR0VPSW5m
b190ICopOwp2b2lkIFJUQ1NTaW1Ub0dlbyAoRklMRSAqLCBGSUxFICosIGludCwgaW50LCBMaW5l
UG9zaXRpb24gKiwgaW50LCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBk
b3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAg
ICAgICAgICAgICBmbG9hdCAqLCBkb3VibGUgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7ClRC
b29sIFJUQ1NDYWxHZW9kZXRpY1Bvc2l0aW9uIChSVENTSW5mb190ICosIFRCb29sLCBkb3VibGUs
IGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUs
IGRvdWJsZSAqLCBkb3VibGUgKik7ClRCb29sIFJUQ1NDYWxHZW9kZXRpYyAoUlRDU0luZm9fdCAq
LCBUQm9vbCwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSwgZG91YmxlICosIGRvdWJsZSAqKTsKVEJvb2wgUlRDU0dlbzJJbWcgKFJUQ1NJbmZv
X3QgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgKiwgZG91YmxlICopOwpSVENTSW5mb190ICpSVENTR2VuTW9kZWwgKEZJTEUgKiwg
aW50LCBHQ1BJbmZvX3QgKik7CnZvaWQgUlRDU0ZyZWVNb2RlbCAoUlRDU0luZm9fdCAqKTsKY2hh
ciAqIEN1dFN0cmluZyAoY2hhciAqLCBpbnQpOwpUQm9vbCBSVENTRGV0R2VvIChSVENTSW5mb190
ICosIFJUQ1NJbmZvX3QgKiwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUsIGRvdWJsZSwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKik7CgoKCgoK
CmludCBTcGVjUmVhZCAoRklMRSAqLCBpbnQsIGZsb2F0ICosaW50ICosaW50ICosaW50ICosZmxv
YXQgKixpbnQpOwp2b2lkIFNwZWNXcml0ZSAoRklMRSAqLCBpbnQsZmxvYXQgKixpbnQsaW50LGlu
dCxkb3VibGUsY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKixpbnQsdW5z
aWduZWQgY2hhciAqKTsKIyA3MzAgIi4uLy4uLy4uL2xpYi9nZW8uaCIKdHlwZWRlZiBzdHJ1Y3QK
ewogICAgaW50IG5EYXRhOwoKICAgIGRvdWJsZSAqcGRYRGF0YTsKICAgIGRvdWJsZSAqcGRZRGF0
YTsKICAgIGRvdWJsZSAqcGRaRGF0YTsKCiAgICBmbG9hdCAqcGZXZWlnaHRpbmc7CgogICAgZG91
YmxlICpwZEZEYXRhOwoKfURhdGFUdXBsZXQ7CgpUQm9vbCBTdXJmaXQoRGF0YVR1cGxldCAqcHNE
YXRhLGludCBuRGVncmVlLFRCb29sIGJSb2J1c3QsZmxvYXQgZlN0ZHMsCiAgICAgICAgICAgICBk
b3VibGUgKipwYXBkQ09FRiwgZG91YmxlICpwZEZpdCwKICAgICAgICAgICAgIGRvdWJsZSAqcGRS
Uk1TLCBkb3VibGUgKnBkWlJNUyxUQm9vbCAqcGJGbGFncywKICAgICAgICAgICAgIGRvdWJsZSAq
cGRYLCBkb3VibGUgKnBkWSxkb3VibGUgKnBkWixpbnQgbk51bSk7Cgp2b2lkIE1hcFRvU2ltcGxl
T3JkZXIoaW50IG5PcmRlcixkb3VibGUgKipwYXBkQ09FRixkb3VibGUgKnBhZENPRUYpOwoKVEJv
b2wgTWFwVG9SZWdyZXNzaW9uT3JkZXIoaW50IG5PcmRlcixkb3VibGUgKnBhcGRDT0VGLGRvdWJs
ZSAqcGFkQ09FRik7CgpUQm9vbCBTdXJmaXRNYW5hZ2VyKCBEYXRhVHVwbGV0ICpwc0RhdGEsIFRC
b29sIGJSb2J1c3QsZmxvYXQgZlN0ZHMsCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGZUb2xl
cmFuY2UsIGludCBuU3RhcnREZWdyZWUsIGludCBuRW5kRGVncmVlLAogICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgKipwYXBkQ09FRiwgZG91YmxlICpwZEZpdCwKICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlICpwZFJSTVMsIGRvdWJsZSAqcGRaUk1TLFRCb29sICpwYkZsYWdzLAogICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgKnBkWCwgZG91YmxlICpwZFksZG91YmxlICpwZFosaW50IG5O
dW0sCiAgICAgICAgICAgICAgICAgICAgIGludCAqcG5MYXN0RGVncmVlKTsKCgoKCnR5cGVkZWYg
ZG91YmxlICgqVmVjQnVmZmVyUXVhbGlmeUZ1bmMpKCB2b2lkICosIEZJTEUgKiwgaW50LCBHREJT
aGFwZSAqICk7Cgp0eXBlZGVmIHN0cnVjdCBWQkZPX3QKewogICAgRklMRSAqZnBWZWM7CiAgICBp
bnQgbkRCVlNDb3VudDsKICAgIGludCAqcGFuREJWUzsKCiAgICBGSUxFICpmcFJhc3RlcjsKICAg
IGludCBuREJPQjsKICAgIGludCBhbkRCT1dbNF07CgogICAgaW50IG5EQk9DOwoKICAgIFZlY0J1
ZmZlclF1YWxpZnlGdW5jIHBmblF1YWxpZnlGdW5jOwoKICAgIGRvdWJsZSBkRGVmYXVsdEJ1ZmZl
clNpemU7CiAgICBkb3VibGUgZERlZmF1bHRCdXJuVmFsdWU7CgogICAgUENJQ291bnRlciBwZm5D
b3VudGVyOwoKfSBWZWNCdWZmZXJPcHRpb25zX3Q7CgpUQm9vbCBWZWN0b3JCdWZmZXJUb1Jhc3Rl
ciggVmVjQnVmZmVyT3B0aW9uc190ICogKTsKZG91YmxlIERlZmF1bHRWZWNCdWZmZXJRdWFsaWZ5
RnVuYyggdm9pZCAqLCBGSUxFICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdEQlNoYXBlICogKTsKdm9pZCBJbml0VmVjQnVmZmVyT3B0aW9ucyggVmVjQnVmZmVy
T3B0aW9uc190ICogKTsKCgoKCnZvaWQgTWF0cml4TXVsdGlwbHkoIGRvdWJsZSAqLCBpbnQsIGlu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBpbnQsIGludCwg
ZG91YmxlICopOwojIDgwNCAiLi4vLi4vLi4vbGliL2dlby5oIgplbnVtCnsKICAgIFRfRklSLAog
ICAgVF9GTVAsCiAgICBUX0NPUywKICAgIFRfV0FMLAogICAgVF9IQUQsCiAgICBUX0hBUgp9OwoK
CgoKZW51bQp7CiAgICBGX0NPTlQsCiAgICBGX1JEMlAsCiAgICBGX1ZESUYsCiAgICBGX0dTTFAs
CiAgICBGX0dTSFAsCiAgICBGX0JXTFAsCiAgICBGX0JXSFAKfTsKCgoKCmVudW0KewogICAgUkFE
X0ZfTk9ORSwKICAgIFJBRF9GX0JILAogICAgUkFEX0ZfQkwsCiAgICBSQURfRl9HSCwKICAgIFJB
RF9GX0dMCn07CiMgODUzICIuLi8uLi8uLi9saWIvZ2VvLmgiCnR5cGVkZWYgc3RydWN0CnsKICAg
IGludCBuRmlsdFR5cGU7CiAgICBmbG9hdCBmUGl4ZWxTaXplWDsKICAgIGZsb2F0IGZQaXhlbFNp
emVZOwogICAgZmxvYXQgZkN1dE9mZjsKICAgIGludCBuRE9yZGVyOwogICAgZmxvYXQgZlpMZXZl
bDsKICAgIGZsb2F0IHBmUmVnRmxkVmVjWzNdOwogICAgZmxvYXQgcGZTcmNGbGRWZWNbM107Cn0K
RmlsdGVyUGFyYW1UeXBlOwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICAgIEZJTEUgKmZwSW47CiAg
ICBGSUxFICpmcE91dDsKICAgIGludCBuQ2hhbm5lbHM7CiAgICBpbnQgKmFuREJJQzsKICAgIGlu
dCAqYW5EQk9DOwogICAgaW50IG5OdW1CaXRtYXBzOwogICAgaW50ICphbkJOR0Y7CiAgICBpbnQg
KmFuREJJVzsKICAgIGludCAqYW5EQk9XOwogICAgZmxvYXQgZkN1dE9mZjsKICAgIGludCBuQm9y
ZGVyV2lkdGg7CiAgICBpbnQgbkZpbHRlclR5cGU7CiAgICBpbnQgblRmb3JtOwp9CkJNUEZpbHRQ
YXJhbXNfdDsKCgoKCgoKVEJvb2wgQml0bWFwRmlsdGVyKEJNUEZpbHRQYXJhbXNfdCAqcHNQYXJh
bXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QUHJvZ3Jlc3NGdW5jIHBmbkNvdW50
ZXIsIHZvaWQqIHBDb3VudEFyZyk7Cgp2b2lkIEZGVDFEIChpbnQgblNpemUsIGRvdWJsZSAqcGRB
cnJheSwgaW50IG5EaXIsIGRvdWJsZSAqcGRTaW5lLAogICAgICAgICAgICBkb3VibGUgKnBkQ29z
bik7Cgp2b2lkIFdhbHNoMUQgKGludCBuU2l6ZSwgZG91YmxlICpwZEFycmF5LCBUQm9vbCBiQml0
UmV2KTsKCnZvaWQgQ29zaW5lMURGd2QgKGludCBuU2l6ZSwgZG91YmxlICpwZEFycmF5LCBkb3Vi
bGUgKnBkU2luZSwKICAgICAgICAgICAgICAgICAgZG91YmxlICpwZENvc24sIGRvdWJsZSAqcGRT
Y2FsKTsKCnZvaWQgQ29zaW5lMURJbnYgKGludCBuU2l6ZSwgZG91YmxlICpwZEFycmF5LCBkb3Vi
bGUgKnBkU2luZSwKICAgICAgICAgICAgICAgICAgZG91YmxlICpwZENvc24sIGRvdWJsZSAqcGRT
Y2FsKTsKCnZvaWQgVHJpZ1RhYmxlcyAoaW50IG5TaXplLCBkb3VibGUgKnBkU2luZSwgZG91Ymxl
ICpwZENvc24pOwoKdm9pZCBDb3NTY2FsZVRhYmxlIChpbnQgblNpemUsIGRvdWJsZSAqcGRTY2Fs
KTsKCmludCBOZXh0UG93ZXJPZlR3byAoaW50IG4pOwoKZG91YmxlIFBvd2VyTihkb3VibGUgZEJh
c2UsIGludCBuT3JkZXIpOwoKRklMRSAqIEZGVERpc2tCdWZmZXIoY2hhciAqc3pCdWZGaWxlLCBp
bnQgblNpemVYLCBpbnQgblNpemVZLCBpbnQgbkNoYW4pOwoKVEJvb2wgVHJhbnNmb3JtMkRGb3J3
YXJkKGludCBuVGZvcm0sIEZJTEUgKmZwSW4sIGludCAqZGJpYywgaW50ICpkYml3LAogICAgICAg
ICAgICAgICAgICAgICAgICBGSUxFICpmcE91dCwgaW50ICpkYm9jLCBpbnQgKmRib3csCiAgICAg
ICAgICAgICAgICAgICAgICAgIFRCb29sIGJaZXJvSW5DZW50ZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgIElNUFByb2dyZXNzRnVuYyBwZm5Db3VudGVyLCB2b2lkKiBwQ291bnRBcmcpOwoKVEJv
b2wgVHJhbnNmb3JtMkRJbnZlcnNlKGludCBuVGZvcm0sIEZJTEUgKmZwSW4sIGludCAqZGJpYywg
aW50ICpkYml3LAogICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpmcE91dCwgaW50ICpkYm9j
LCBpbnQgKmRib3csIGNoYXIgKmZpbGIsCiAgICAgICAgICAgICAgICAgICAgICAgIFRCb29sIGJa
ZXJvSW5DZW50ZXIsIElNUFByb2dyZXNzRnVuYyBwZm5Db3VudGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkKiBwQ291bnRBcmcpOwoKVEJvb2wgRkZUMkRGb3J3YXJkKGludCBuVGZvcm0s
IEZJTEUgKmZwSW4sIGludCAqZGJpYywgaW50ICpkYml3LAogICAgICAgICAgICAgICAgICBGSUxF
ICpmcE91dCwgaW50ICpkYm9jLCBpbnQgKmRib3csIFRCb29sIGJaZXJvSW5DZW50ZXIsCiAgICAg
ICAgICAgICAgICAgIElNUFByb2dyZXNzRnVuYyBwZm5Db3VudGVyLCB2b2lkKiBwQ291bnRBcmcp
OwoKVEJvb2wgRkZUMkRJbnZlcnNlKGludCBuVGZvcm0sIEZJTEUgKmZwSW4sIGludCAqZGJpYywg
aW50ICpkYml3LAogICAgICAgICAgICAgICAgICBGSUxFICpmcE91dCwgaW50ICpkYm9jLCBpbnQg
KmRib3csIGNoYXIgKmZpbGIsCiAgICAgICAgICAgICAgICAgIFRCb29sIGJaZXJvSW5DZW50ZXIs
IElNUFByb2dyZXNzRnVuYyBwZm5Db3VudGVyLAogICAgICAgICAgICAgICAgICB2b2lkKiBwQ291
bnRBcmcpOwoKVEJvb2wgRkZUQW5kRmlsdGVyKEZJTEUgKmZwSW4sIGludCAqZGJpYywgaW50ICpk
Yml3LAogICAgICAgICAgICAgICAgICBGSUxFICpmcE91dCwgaW50ICpkYm9jLCBpbnQgKmRib3cs
IGNoYXIgKmZpbGIsCiAgICAgICAgICAgICAgICAgIEZpbHRlclBhcmFtVHlwZSAqcHNQYXJhbSwg
SU1QUHJvZ3Jlc3NGdW5jIHBmbkNvdW50ZXIsCiAgICAgICAgICAgICAgICAgIHZvaWQqIHBDb3Vu
dEFyZyApOwoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBUQm9vbCBiTG9hZGVkOwogICAgaW50
IG5YU2l6ZSwgbllTaXplOwogICAgdW5zaWduZWQgc2hvcnQgKnBuVW5pY29uSW1hZ2U7CiAgICBp
bnQgbkltYWdlU2l6ZTsKICAgIGludCBuTWFza1NpemU7CiAgICBpbnQgbk9jY1NpemU7CiAgICBp
bnQgbkxheWVyczsKICAgIGludCAqcG5DbGFzc1NpemU7CiAgICBpbnQgKnBuQ2xhc3NNYXNrOwog
ICAgaW50ICpwbkNsYXNzT2NjOwogICAgaW50IG5Vbmljb247CiAgICBpbnQgKnBuVW5pY29uU2l6
ZTsKICAgIGludCAqcG5Vbmljb25NYXNrOwogICAgaW50ICpwblVuaWNvbk9jYzsKICAgIHVuc2ln
bmVkIGNoYXIgKnBieUZpZWxkczsKICAgIGZsb2F0ICpwZkVzdDsKICAgIHNob3J0ICpwbk1hcDsK
ICAgIGZsb2F0ICpwZk1ldHJpYzsKfQpTRElJbmZvVHlwZTsKCnR5cGVkZWYgc3RydWN0CnsKICAg
IEZJTEUgKmZwR0RCOwogICAgRklMRSAqZnBCaXRtYXA7CiAgICBpbnQgbkNvdW50REJJQzsKICAg
IGludCAqcG5EQklDOwogICAgaW50IG5YT2ZmLCBuWU9mZiwgblhTaXplLCBuWVNpemU7CiAgICBp
bnQgbkNvdW50S09TTjsKICAgIGludCAqcG5LT1NOOwogICAgaW50IG5Db3VudFNBU047CiAgICBp
bnQgKnBuU0FTTjsKfQpEaWdycFBhcmFtVHlwZTsKCnR5cGVkZWYgc3RydWN0CnsKICAgIEZJTEUg
KmZwR0RCOwogICAgaW50IG5YT2ZmLCBuWU9mZiwgblhTaXplLCBuWVNpemU7CiAgICBpbnQgbkRC
T0M7CiAgICBpbnQgbkFsZ29yaXRobTsKICAgIGZsb2F0IGZHYW1tYTsKfQpEaWVzdFBhcmFtVHlw
ZTsKIyAxMDAyICIuLi8uLi8uLi9saWIvZ2VvLmgiCmVudW0KewogICAgU0RJX0NGLAogICAgU0RJ
X1BfRElSLAogICAgU0RJX1BfQkFZLAogICAgU0RJX1BfUkVHLAogICAgU0RJX0ZfR0FNLAogICAg
U0RJX0ZfU1VNLAogICAgU0RJX0ZfQVZFLAogICAgU0RJX0ZfTUFYLAogICAgU0RJX0ZfTUlOCn07
CiMgMTAyMyAiLi4vLi4vLi4vbGliL2dlby5oIgppbnQgU0RJR3JvdXBMYXllcnMoRGlncnBQYXJh
bVR5cGUgKnBzRGlncnAsIFNESUluZm9UeXBlICpwc1NESUluZm8pOwp2b2lkIEZyZWVTRElJbmZv
KFNESUluZm9UeXBlICpwc1NESUluZm8pOwp2b2lkIEluaXRTRElJbmZvKFNESUluZm9UeXBlICpw
c1NESUluZm8pOwp2b2lkIFNESUVzdEFsZ28oU0RJSW5mb1R5cGUgKnBzU0RJSW5mbywgaW50IG5B
bGdvLCBmbG9hdCBmR2FtbWEpOwp2b2lkIFNESUVzdGltYXRpb24oRGllc3RQYXJhbVR5cGUgKnBz
RGllc3QsIFNESUluZm9UeXBlICpwc1NESUluZm8pOwoKCgoKdm9pZCBMYWJlbFJlZ2lvbihpbnQg
blhTaXplLCBpbnQgbllTaXplLCB1bnNpZ25lZCBjaGFyICpwYnlJbWFnZSwgaW50IG5DbGFzcywK
ICAgICAgICAgICAgICAgICBUQm9vbCBiUmFuZG9tKTsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg
ICBpbnQgbkdyYWRpZW50OwogICAgaW50IG5DdXJ2ZUxlbjE7CiAgICBpbnQgbkN1cnZlTGVuMjsK
ICAgIGludCBuRml0dGluZzsKICAgIGZsb2F0IGZDb3NCZW5kQW5nbGU7CiAgICBpbnQgblJhbmdl
Owp9IEVDUGFyYW1UeXBlOwoKdm9pZCBTa2VsZXRvbihpbnQgblhTaXplLCBpbnQgbllTaXplLCB1
bnNpZ25lZCBjaGFyICpwYnlQaXgpOwp2b2lkIEN1dEJyYW5jaChpbnQgblhTaXplLCBpbnQgbllT
aXplLCB1bnNpZ25lZCBjaGFyICpwYnlQaXgpOwp2b2lkIEZpbmRQaXhlbEN1cnZlcyhpbnQgblhT
aXplLCBpbnQgbllTaXplLCB1bnNpZ25lZCBjaGFyICpwYnlQaXgsCiAgICAgICAgICAgICAgICAg
ICB2b2lkICgqcGZuUHJvY0N1cnZlKShpbnQsaW50KixpbnQqKSk7CgpUQm9vbCBFeHRyYWN0Q3Vy
dmVzKGludCBuUGl4ZWxzLCBpbnQgbkxpbmVzLCB1bnNpZ25lZCBjaGFyICpwYnlQaXgsCiAgICAg
ICAgICAgICAgICAgICBFQ1BhcmFtVHlwZSAqcHNQYXJhbXMsCiAgICAgICAgICAgICAgICAgICB2
b2lkICgqcGZuU2F2ZVZlY3RvcikoaW50LGludCosaW50KiksCiAgICAgICAgICAgICAgICAgICBJ
TVBQcm9ncmVzc0Z1bmMgcGZuQ291bnRlciwgdm9pZCogcENvdW50QXJnKTsKClRCb29sIENhbm55
RWRnZShpbnQgblhTaXplLCBpbnQgbllTaXplLCB1bnNpZ25lZCBjaGFyICpwYnlJbWFnZSwgaW50
IG5SYWRpdXMsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwYnlHcmFk
RGlyLCBJTVBQcm9ncmVzc0Z1bmMgcGZuQ291bnRlciwKICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQqIHBDb3VudEFyZyk7CgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBGSUxFICpmcEluOwog
ICAgRklMRSAqZnBPdXQ7CiAgICBpbnQgKmRiaWM7CiAgICBpbnQgKmRib2M7CiAgICBpbnQgKnRl
eHR1cmU7CiAgICBpbnQgbk1lYXM7CiAgICBpbnQgblhJbk9mZiwgbllJbk9mZiwgblhPdXRPZmYs
IG5ZT3V0T2ZmLCBuWFNpemUsIG5ZU2l6ZTsKICAgIGludCBuRmxzelgsIG5GbHN6WTsKICAgIGlu
dCBuU3BhdFgsIG5TcGF0WTsKICAgIFRCb29sIGJEaXJJbnY7Cn0KVGV4dHVyZVBhcmFtVHlwZTsK
CgoKVEJvb2wgVGV4dHVyZU1lYXN1cmVzKFRleHR1cmVQYXJhbVR5cGUgKnBzUGFyYW1zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUFByb2dyZXNzRnVuYyBwZm5Db3VudGVyLHZv
aWQqIHBDb3VudEFyZyk7CgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgblR5cGU7CiAgICBG
SUxFICpmcEluOwogICAgRklMRSAqZnBPdXQ7CiAgICBGSUxFICpmcE1hc2s7CiAgICBpbnQgZGJp
YzsKICAgIGludCBkYm9jOwogICAgaW50IG1hc2s7CiAgICBpbnQgblhTaXplLCBuWVNpemU7CiAg
ICBpbnQgblhJbk9mZiwgbllJbk9mZjsKICAgIGludCBuWE91dE9mZiwgbllPdXRPZmY7CiAgICBp
bnQgblhXaW4sIG5ZV2luOwogICAgaW50IG5Gb3JtYXQ7CiAgICBmbG9hdCBmTkxvb2tzOwogICAg
ZmxvYXQgZkRhbXA7CiAgICBmbG9hdCBmQ29udG91cjsKICAgIGZsb2F0IGZHcmFkaWVudDsKCgp9
ClNwY0ZsdFBhcmFtVHlwZTsKCmVudW0KewogICAgU0FSX0xFRSwKICAgIFNBUl9LVUFOLAogICAg
U0FSX0ZST1NULAogICAgU0FSX0VMRUUsCiAgICBTQVJfRUZST1NULAogICAgU0FSX0dBTU1BLAog
ICAgU0FSX0xBUExBQ0lBTiwKICAgIFNBUl9UT1VaSSwKICAgIFNBUl9TVERERVYsCiAgICBTQVJf
QVZFUkFHRQp9OwoKVEJvb2wgU0FSU3BlY2tsZUZpbHRlcihTcGNGbHRQYXJhbVR5cGUgKnBzUGFy
YW1zLCBJTVBQcm9ncmVzc0Z1bmMgcGZuQ291bnRlciwgdm9pZCAqcENvdW50QXJnKTsKCgoKCnZv
aWQgU2FtcGxlSGlzdG9ncmFtKEZJTEUgKmZwR0RCLCBpbnQgbkRCSUMsIGludCAqZGJpdywgaW50
IG5IaXNTYW1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKnBmUGVyY2Vu
dGlsZSk7Cgp2b2lkIFNjYWxpbmdUYWJsZShGSUxFICpmcEdEQiwgaW50IG5EQklDLCBpbnQgKmRi
aXcsIGludCBuUmFuZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbk1ldGhvZCwg
ZmxvYXQgKnBmTGV2ZWwpOwoKaW50IFNjYWxpbmdMb29rdXAoaW50IG5SYW5nZSwgZmxvYXQgKnBm
TGV2ZWwsIGZsb2F0IGZQaXgpOwoKCnR5cGVkZWYgc3RydWN0CnsKICBGSUxFICogZnBfaW47CiAg
RklMRSAqIGZwX291dDsKICBpbnQgbkluQ2hhbm5lbDsKICBpbnQgbk91dENoYW5uZWw7CgogIGRv
dWJsZSBkZkxYOwogIGRvdWJsZSBkZkxZOwogIGRvdWJsZSBkZkxaOwoKICBmbG9hdCBmQWFuZzsK
ICBmbG9hdCBmRWFuZzsKCiAgZG91YmxlIGRmRUxTWjsKICBkb3VibGUgZGZDb3NaUzsKICBkb3Vi
bGUgZGZEWDsKICBkb3VibGUgZGZEWTsKCiAgZmxvYXQgKiBwZk9uZTsKICBmbG9hdCAqIHBmVHdv
OwogIGZsb2F0ICogcGZUaHJlZTsKICBmbG9hdCAqIHBmTGVmdDsKICBmbG9hdCAqIHBmUmlnaHQ7
CiAgZmxvYXQgKiBwZlRvcDsKICBmbG9hdCAqIHBmQm90dG9tOwogIGZsb2F0ICogcGZDZW50ZXI7
CiAgZmxvYXQgKiBwZlJldHVybjsKICBpbnQgbkxpbmVzOwogIGludCBuUGl4ZWxzOwogIGludCBu
SW5YT2ZmOwogIGludCBuSW5ZT2ZmOwogIGludCBuT3V0WE9mZjsKICBpbnQgbk91dFlPZmY7Cgp9
IFNoYWRvd190OwoKVEJvb2wgU2hhZG93Q2FzdCggU2hhZG93X3QgKiBwc1NoYWRvdywgSU1QUHJv
Z3Jlc3NGdW5jIHBmbkNvdW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBw
Q291bnRBcmcpOwoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICAgICAgRklMRSAqZnBJbjsKICAg
ICAgICBGSUxFICpmcE91dDsKICAgICAgICBpbnQgbkRiaWM7CiAgICAgICAgaW50IG5EYml2Owog
ICAgICAgIGludCBuU2hhcGU7CiAgICAgICAgaW50IG5PdXRWZXJ0ZXhDb3VudDsKICAgICAgICBp
bnQgbk1heFZlcnRpY2VzOwoKICAgICAgICBHREJWZXJ0ZXggKiBwYXNPdXRWZXJ0aWNlczsKCgoK
CiAgICAgICAgR0RCTGF5ZXIgc2VJbnBMYXllcjsKICAgICAgICBHREJTaGFwZUlkIHNlSW5wU2hh
cGVJZDsKICAgICAgICBHREJWZXJ0ZXggc2VJbnBWZXJ0ZXg7CiAgICAgICAgaW50IG5NYXhWZXJ0
OwoKCgoKICAgICAgICBkb3VibGUgYWRmRGlwWzJdOwoKICAgICAgICBHREJMYXllciBzZU91dExh
eWVyOwoKICAgICAgICBmbG9hdCBmQmFja1ZhbDsKICAgICAgICBmbG9hdCBmUmFkaXVzOwogICAg
ICAgIGludCBhbkRiaXdbNF07CiAgICAgICAgZG91YmxlIGRmQTEsIGRmQTIsIGRmQjEsIGRmQjM7
CiAgICAgICAgVEJvb2wgYlJhZGl1czsKICAgICAgICBUQm9vbCBiRGlwOwp9CkNvbnRFeHRQYXJh
bVR5cGU7CgpUQm9vbCBDb250YWN0RXh0ZW5zaW9uKENvbnRFeHRQYXJhbVR5cGUgKnBzUGFyYW1z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIgcGZuQ291bnRlcik7
ClRCb29sIENoZWNrRm9yU2hhcGUoQ29udEV4dFBhcmFtVHlwZSAqcHNQYXJhbXMpOwoKdm9pZCBV
bml0MlBpeGVsIChDb250RXh0UGFyYW1UeXBlICpwc1BhcmFtcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlICpwZGZYVW5pdCwgZG91YmxlICpwZGZZVW5pdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlICpwZGZYUGl4ZWwsIGRvdWJsZSAqcGRmWVBpeGVsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCBiVG9QaXhlbCk7Cgp9CiMgMjQ0ICIuLi8uLi8u
Li9saWIvcGNpLmgiIDIKIyA2OSAiLi4vLi4vLi4vbGliL3BjbC5oaCIgMgojIDEwMCAiLi4vLi4v
Li4vbGliL3BjbC5oaCIKdm9pZCAqIG9wZXJhdG9yIG5ldyhzaXplX3QsIGNoYXIgKiwgaW50KTsK
dm9pZCBEZWxldGVTZXR1cChjaGFyICosaW50KTsKCmNoYXIgKiBHZXREZWxldGVGaWxlKHZvaWQp
OwppbnQgR2V0RGVsZXRlTGluZSh2b2lkKTsKIyAxMzYgIi4uLy4uLy4uL2xpYi9wY2wuaGgiCnR5
cGVkZWYgZW51bSB7IGtleVN0cmluZywga2V5SW50LCBrZXlJbnZhbGlkIH0gS2V5VHlwZTsKCmNs
YXNzIFBDTEtleQp7CnByaXZhdGU6CiAgICBLZXlUeXBlIHR5cGU7CiAgICB1bmlvbgogICAgewog
ICAgICAgIGNvbnN0IGNoYXIgKnM7CiAgICAgICAgaW50IGk7CiAgICB9IHU7CgpwdWJsaWM6CiAg
ICBQQ0xLZXkoKTsKICAgIFBDTEtleShjb25zdCBQQ0xLZXkgJik7CiAgICBQQ0xLZXkoY29uc3Qg
Y2hhciAqKTsKICAgIFBDTEtleShpbnQpOwogICAgflBDTEtleSgpOwoKCiAgICBpbnQgY29tcGFy
ZShjb25zdCBjaGFyICopIGNvbnN0OwogICAgaW50IGNvbXBhcmUoaW50KSBjb25zdDsKICAgIGlu
dCBjb21wYXJlKGNvbnN0IFBDTEtleSAmKSBjb25zdDsKfTsKIyAxNjggIi4uLy4uLy4uL2xpYi9w
Y2wuaGgiCmNsYXNzIFBDTE9iamVjdAp7CiAgcHVibGljOgogICAgaW5saW5lIFBDTE9iamVjdCgg
UENMT2JqZWN0IGNvbnN0ICYpIHt9CgogICAgICAgICAgICAgICAgICAgICAgICBQQ0xPYmplY3Qo
KSB7fTsKICAgIHZpcnR1YWwgflBDTE9iamVjdCgpIHt9OwoKICAgIHZpcnR1YWwgVEJvb2wgVmFs
aWRhdGUoIHZvaWQgKSBjb25zdCB7IHJldHVybiAxOyB9CgogICAgdmlydHVhbCB2b2lkIER1bXAo
IEZJTEUgKiApIGNvbnN0OwogICAgdmlydHVhbCBjb25zdCBjaGFyICpHZXRDbGFzc05hbWUoKSBj
b25zdCA9IDA7CiAgICB2aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0IFBDTEtleSAmKSBjb25zdCB7
IHJldHVybiggMCApOyB9CiAgICB2aXJ0dWFsIGludCBDb21wYXJlKGNoYXIgKikgY29uc3QgeyBy
ZXR1cm4oIDAgKTsgfQogICAgdmlydHVhbCBpbnQgQ29tcGFyZShpbnQgKikgY29uc3QgeyByZXR1
cm4oIDAgKTsgfQogICAgdmlydHVhbCBjb25zdCBQQ0xLZXkgS2V5KCkgY29uc3QgeyBQQ0xLZXkg
YTsgcmV0dXJuKGEpOyB9Cn07Cgp0eXBlZGVmIFBDTE9iamVjdCAqIFBDTE9iamVjdFB0cjsKIyAy
MDAgIi4uLy4uLy4uL2xpYi9wY2wuaGgiCmNsYXNzIFBDTEl0ZXI7CgpjbGFzcyBQQ0xDb250YWlu
ZXIgOiBwdWJsaWMgUENMT2JqZWN0CnsKCiAgICBmcmllbmQgY2xhc3MgUENMSXRlcjsKCiAgICB2
aXJ0dWFsIFBDTE9iamVjdCAqIFN0YXJ0KCBQQ0xJdGVyICogKSBjb25zdCA9IDA7CiAgICB2aXJ0
dWFsIFBDTE9iamVjdCAqIE5leHQoIFBDTEl0ZXIgKiApIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwg
dm9pZCBEZXN0cm95SXRlcmF0b3IoIFBDTEl0ZXIgKiApIGNvbnN0IHt9Cgpwcm90ZWN0ZWQ6CiAg
ICBpbnQgbkNvdW50OwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICBQQ0xDb250YWlu
ZXIoKSB7IG5Db3VudCA9IDA7IH0KCiAgICAgICAgICAgIFRCb29sIElzRW1wdHkoIHZvaWQgKSBj
b25zdCB7IHJldHVybiggbkNvdW50ID09IDAgKTsgfQogICAgICAgICAgICBpbnQgR2V0Q291bnQo
IHZvaWQgKSBjb25zdCB7IHJldHVybiggbkNvdW50ICk7IH0KCiAgICB2aXJ0dWFsIFRCb29sIElz
TWVtYmVyKCBjb25zdCBQQ0xPYmplY3QgKiApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBBZGQoIFBD
TE9iamVjdCAqICkgPSAwOwogICAgdmlydHVhbCBUQm9vbCBSZW1vdmUoIGNvbnN0IFBDTE9iamVj
dCAqICkgPSAwOwoKICAgIHZvaWQgQWRkQ29udGFpbmVyKCBjb25zdCBQQ0xDb250YWluZXIgKiAp
OwogICAgdm9pZCBEZXN0cm95Q29udGVudHMoKTsKCiAgICB2aXJ0dWFsIHZvaWQgRHVtcCggRklM
RSAqZnAgKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBFbXB0eSggdm9pZCApOwogICAgdmlydHVh
bCBUQm9vbCBWYWxpZGF0ZSggdm9pZCApIGNvbnN0Owp9OwojIDIzOSAiLi4vLi4vLi4vbGliL3Bj
bC5oaCIKY2xhc3MgUENMSXRlciA6IHB1YmxpYyBQQ0xPYmplY3QKewogICAgZnJpZW5kIGNsYXNz
IFBDTENvbnRhaW5lcjsKCiAgICBjb25zdCBQQ0xDb250YWluZXIgKnBvQ29udGFpbmVyOwogICAg
UENMT2JqZWN0ICogcG9DdXJyZW50T2JqZWN0OwoKcHVibGljOgogICAgdm9pZCAqIHBTdGF0ZTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIFBDTEl0ZXIoIGNvbnN0IFBDTENvbnRhaW5lciAqICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIFBDTEl0ZXIoKTsKCiAgICB2aXJ0dWFsIH5QQ0xJdGVy
KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBHZXRDbGFzc05hbWUoIHZvaWQgKSBjb25zdDsK
CiAgICB2b2lkIFNldFRhcmdldCggY29uc3QgUENMQ29udGFpbmVyICogKTsKCiAgICBQQ0xPYmpl
Y3QgKiBTdGFydCggY29uc3QgUENMQ29udGFpbmVyICogPSAwICk7CiAgICBQQ0xPYmplY3QgKiBO
ZXh0KCk7CiAgICBQQ0xPYmplY3QgKiBDdXJyZW50KCkgY29uc3Q7Cn07CiMgMjcxICIuLi8uLi8u
Li9saWIvcGNsLmhoIgpjbGFzcyBQQ0xUcmVlIDogcHVibGljIFBDTENvbnRhaW5lcgp7CiAgICBj
bGFzcyBQQ0xUcmVlTm9kZQogICAgewoKCiAgICBwdWJsaWM6CiAgICAgICAgUENMVHJlZU5vZGUg
KiBwb0xlZnQ7CiAgICAgICAgUENMVHJlZU5vZGUgKiBwb1JpZ2h0OwogICAgICAgIFBDTFRyZWVO
b2RlICogcG9QYXJlbnQ7CiAgICAgICAgUENMT2JqZWN0ICogcG9EYXRhOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgUENMVHJlZU5vZGUoIFBDTE9iamVjdCAqcG9EYXRhICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH5QQ0xUcmVlTm9kZSggdm9pZCApOwoKICAgICAgICB2b2lkIER1bXAoIEZJ
TEUgKmZwICkgY29uc3Q7CgogICAgICAgIFBDTFRyZWVOb2RlICogRmluZCggY29uc3QgUENMT2Jq
ZWN0ICogKTsKICAgIH07CgogICAgUENMVHJlZU5vZGUgKnBvUm9vdDsKCiAgICB2aXJ0dWFsIFBD
TE9iamVjdCAqIFN0YXJ0KCBQQ0xJdGVyICogKSBjb25zdDsKICAgIHZpcnR1YWwgUENMT2JqZWN0
ICogTmV4dCggUENMSXRlciAqICkgY29uc3Q7CgpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgIFBDTFRyZWUgKHZvaWQpOwogICAgdmlydHVhbCB+UENMVHJlZSAodm9pZCk7CgogICAgdmly
dHVhbCBjb25zdCBjaGFyICogR2V0Q2xhc3NOYW1lKCB2b2lkICkgY29uc3QgeyByZXR1cm4oICJQ
Q0xUcmVlIiApOyB9CgogICAgdmlydHVhbCBUQm9vbCBJc01lbWJlciggY29uc3QgUENMT2JqZWN0
ICogKTsKICAgIHZpcnR1YWwgdm9pZCBBZGQoIFBDTE9iamVjdCAqICk7CiAgICB2aXJ0dWFsIFRC
b29sIFJlbW92ZSggY29uc3QgUENMT2JqZWN0ICogKTsKCiAgICB2aXJ0dWFsIHZvaWQgRHVtcCgg
RklMRSAqZnAgKSBjb25zdDsKfTsKIyAzMTYgIi4uLy4uLy4uL2xpYi9wY2wuaGgiCmNsYXNzIFBD
TEFycmF5IDogcHVibGljIFBDTENvbnRhaW5lcgp7CiAgcHJvdGVjdGVkOgogICAgaW50IG5BcnJh
eVNpemU7CiAgICBpbnQgbkFycmF5VXNlZDsKICAgIFBDTE9iamVjdCAqKiBwYXBvT2JqZWN0QXJy
YXk7CgogICAgdmlydHVhbCBQQ0xPYmplY3QgKiBTdGFydCggUENMSXRlciAqICkgY29uc3Q7CiAg
ICB2aXJ0dWFsIFBDTE9iamVjdCAqIE5leHQoIFBDTEl0ZXIgKiApIGNvbnN0OwoKICAgIHZvaWQg
RXhwYW5kVG9Ib2xkKCBpbnQgbk1heCApOwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICBQQ0xBcnJheSAodm9pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIFBDTEFycmF5KCBQQ0xD
b250YWluZXIgKiApOwogICAgUENMQXJyYXkgJiBvcGVyYXRvciA9IChjb25zdCBQQ0xBcnJheSAm
KTsKCiAgICB2aXJ0dWFsIH5QQ0xBcnJheSAodm9pZCk7CiAgICBQQ0xPYmplY3QgKiBvcGVyYXRv
cltdIChpbnQgbkluZGV4KSBjb25zdDsKICAgIHZvaWQgU2V0QXQoIGludCBuSW5kZXgsIFBDTE9i
amVjdCAqIHBvT2JqZWN0ICk7CiAgICBpbnQgR2V0TWF4SW5kZXgoKSBjb25zdDsKICAgIHZvaWQg
UGFjaygpOwogICAgdm9pZCBTb3J0KFFTQ01QKTsKICAgIHZvaWQgU3RhbmRhcnRTb3J0KFFTQ01Q
KTsKICAgIHZvaWQgSW5zZXJ0QXQoIGludCBuSW5kZXgsIFBDTE9iamVjdCAqIHBvT2JqZWN0ICk7
CiAgICBpbnQgR2V0SW5kZXgoIFBDTE9iamVjdCAqIHBvT2JqZWN0ICk7CgogICAgdm9pZCBSZXZl
cnNlKCB2b2lkICk7CgoKICAgIHZpcnR1YWwgVEJvb2wgSXNNZW1iZXIoIGNvbnN0IFBDTE9iamVj
dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgQWRkKCBQQ0xPYmplY3QgKiApOwogICAgdmlydHVhbCBU
Qm9vbCBSZW1vdmUoIGNvbnN0IFBDTE9iamVjdCAqICk7CgoKICAgIHZpcnR1YWwgdm9pZCBEdW1w
KCBGSUxFICogKSBjb25zdDsKICAgIHZpcnR1YWwgY29uc3QgY2hhciAqR2V0Q2xhc3NOYW1lKCB2
b2lkICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIEVtcHR5KCB2b2lkICk7CiAgICB2aXJ0dWFs
IHZvaWQgRGVzdHJveUNvbnRlbnRzKCk7Cn07CgpjbGFzcyBQQ0xQYWNrZWRBcnJheSA6IHB1Ymxp
YyBQQ0xBcnJheQp7CiAgcHVibGljOgogIFBDTFBhY2tlZEFycmF5ICh2b2lkKTpQQ0xBcnJheSgp
IHsgfQogIFBDTFBhY2tlZEFycmF5KCBQQ0xDb250YWluZXIgKiBwb0NvbnRhaW5lcik6UENMQXJy
YXkocG9Db250YWluZXIpIHsgfQoKICB2aXJ0dWFsIFRCb29sIFJlbW92ZSggY29uc3QgUENMT2Jq
ZWN0ICogKTsKCiAgdmlydHVhbCBjb25zdCBjaGFyICpHZXRDbGFzc05hbWUoIHZvaWQgKSBjb25z
dCB7IHJldHVybiAiUENMUGFja2VkQXJyYXkiOyB9Cn07CgoKCgoKCgpjbGFzcyBQQ0xCYWcgOiBw
dWJsaWMgUENMQ29udGFpbmVyCnsKICAgIGludCBuT2JqZWN0Q291bnQ7CiAgICBpbnQgbk9iamVj
dE1heDsKICAgIFBDTE9iamVjdCAqKiBwYXBvT2JqZWN0QXJyYXk7CgogICAgdmlydHVhbCBQQ0xP
YmplY3QgKiBTdGFydCggUENMSXRlciAqICkgY29uc3Q7CiAgICB2aXJ0dWFsIFBDTE9iamVjdCAq
IE5leHQoIFBDTEl0ZXIgKiApIGNvbnN0OwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICBQQ0xCYWcgKHZvaWQpOwogICAgICAgICAgICAgICAgICAgICAgICBQQ0xCYWcoIFBDTENvbnRh
aW5lciAqICk7CiAgICB2aXJ0dWFsIH5QQ0xCYWcgKHZvaWQpOwoKICAgIHZpcnR1YWwgVEJvb2wg
SXNNZW1iZXIoIGNvbnN0IFBDTE9iamVjdCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgQWRkKCBQQ0xP
YmplY3QgKiApOwogICAgdmlydHVhbCBUQm9vbCBSZW1vdmUoIGNvbnN0IFBDTE9iamVjdCAqICk7
CiAgICB2aXJ0dWFsIHZvaWQgRW1wdHkoIHZvaWQgKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIg
KkdldENsYXNzTmFtZSggdm9pZCApIGNvbnN0Owp9OwoKCgoKCgoKY2xhc3MgUENMTGlzdE5vZGUK
ewpwdWJsaWM6CgogICAgUENMT2JqZWN0KiBwb09iamVjdDsKICAgIFBDTExpc3ROb2RlKiBwb05l
eHQ7CiAgICBQQ0xMaXN0Tm9kZSogcG9QcmV2Owp9OwojIDQxOSAiLi4vLi4vLi4vbGliL3BjbC5o
aCIKY2xhc3MgUENMTGlua2VkTGlzdCA6IHB1YmxpYyBQQ0xDb250YWluZXIKewoKcHVibGljOgoK
ICAgIFBDTExpbmtlZExpc3QgKHZvaWQpOwogICAgdmlydHVhbCB+UENMTGlua2VkTGlzdCAodm9p
ZCk7CgogICAgUENMTGlzdE5vZGUqIEZpbmQoY29uc3QgUENMT2JqZWN0KiBwb09iamVjdCk7CiAg
ICB2b2lkIEluc2VydChQQ0xPYmplY3QqIHBvT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQQ0xMaXN0Tm9kZSogcG9Ob2RlKTsKICAgIHZvaWQgUmVtb3ZlKFBD
TExpc3ROb2RlKiBwb05vZGUpOwogICAgdm9pZCBEZXN0cm95Q29udGVudHModm9pZCk7CgogICAg
dm9pZCBBcHBlbmQoUENMT2JqZWN0KiBwb09iamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7IEluc2VydChwb09iamVjdCwgRW5kTm9kZSgpKTsgfQoKICAgIHZvaWQgUHJlcGVu
ZChQQ0xPYmplY3QqIHBvT2JqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
SW5zZXJ0KHBvT2JqZWN0LCBTdGFydE5vZGUoKSk7IH0KCiAgICBQQ0xMaXN0Tm9kZSogU3RhcnRO
b2RlKHZvaWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gcG9IZWFk
LT5wb05leHQ7IH0KCiAgICBQQ0xMaXN0Tm9kZSogRW5kTm9kZSh2b2lkKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHBvSGVhZDsgfQoKCiAgICB2aXJ0dWFsIFRCb29s
IElzTWVtYmVyKGNvbnN0IFBDTE9iamVjdCogcG9PYmplY3QpOwogICAgdmlydHVhbCB2b2lkIEFk
ZChQQ0xPYmplY3QqIHBvT2JqZWN0KTsKICAgIHZpcnR1YWwgVEJvb2wgUmVtb3ZlKGNvbnN0IFBD
TE9iamVjdCogcG9PYmplY3QpOwogICAgdmlydHVhbCB2b2lkIEVtcHR5KHZvaWQpOwoKCiAgICB2
aXJ0dWFsIHZvaWQgRHVtcChGSUxFKiBmcCkgY29uc3Q7CgogICAgdmlydHVhbCBjb25zdCBjaGFy
KiBHZXRDbGFzc05hbWUoIHZvaWQgKSBjb25zdAogICAgewogICAgICAgIHJldHVybiggIlBDTExp
bmtlZExpc3QiICk7CiAgICB9Cgpwcml2YXRlOgoKICAgIHZpcnR1YWwgUENMT2JqZWN0ICogU3Rh
cnQoIFBDTEl0ZXIgKiApIGNvbnN0OwogICAgdmlydHVhbCBQQ0xPYmplY3QgKiBOZXh0KCBQQ0xJ
dGVyICogKSBjb25zdDsKCiAgICBQQ0xMaXN0Tm9kZSogcG9IZWFkOwp9OwojIDQ4MCAiLi4vLi4v
Li4vbGliL3BjbC5oaCIKY2xhc3MgUENMU3RyaW5nCnsKCnB1YmxpYzoKCgoKCiAgICBQQ0xTdHJp
bmcgKHZvaWQpOwogICAgUENMU3RyaW5nIChjb25zdCBQQ0xTdHJpbmcmIG9TcmNTdHJpbmcpOwog
ICAgUENMU3RyaW5nIChjaGFyIGNoU3JjRGF0YSwgaW50IG5SZXBlYXQgPSAxKTsKICAgIFBDTFN0
cmluZyAoY29uc3QgY2hhciogcHN6U3JjRGF0YSk7CiAgICBQQ0xTdHJpbmcgKGNvbnN0IGNoYXIq
IHBhY2hTcmNEYXRhLCBpbnQgbkxlbmd0aCk7CgogICAgflBDTFN0cmluZyAodm9pZCk7CgogICAg
Y2hhciAqR2V0QnVmZmVyUmVmKCkge3JldHVybihwc3pEYXRhKTt9CgoKCgogICAgaW50IEdldExl
bmd0aCAodm9pZCkgY29uc3Q7CiAgICB2b2lkIFNldExlbmd0aCAoaW50IG5MZW5ndGgpOwogICAg
aW50IElzRW1wdHkgKHZvaWQpIGNvbnN0OwogICAgdm9pZCBFbXB0eSAodm9pZCk7CiAgICBjaGFy
IEdldEF0IChpbnQgbkluZGV4KSBjb25zdDsKICAgIHZvaWQgU2V0QXQgKGludCBuSW5kZXgsIGNo
YXIgY2hTcmNEYXRhKTsKICAgIGNoYXImIG9wZXJhdG9yW10gKGludCBuSW5kZXgpOwoKICAgIGNo
YXIgb3BlcmF0b3JbXSAoaW50IG5JbmRleCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgY2hh
ciogKHZvaWQpIGNvbnN0OwoKCgoKICAgIGNvbnN0IFBDTFN0cmluZyYgb3BlcmF0b3I9IChjb25z
dCBQQ0xTdHJpbmcmIG9FcXVTdHJpbmcpOwogICAgY29uc3QgUENMU3RyaW5nJiBvcGVyYXRvcj0g
KGNvbnN0IGNoYXIqIHBzekVxdURhdGEpOwogICAgY29uc3QgUENMU3RyaW5nJiBvcGVyYXRvcj0g
KGNoYXIgY2hFcXVEYXRhKTsKCiAgICB2b2lkIEZvcm1hdCAoY29uc3QgY2hhciogcHN6Rm9ybWF0
LCAuLi4gKTsKCgoKCiAgICBmcmllbmQgUENMU3RyaW5nCiAgICAgICAgb3BlcmF0b3IrIChjb25z
dCBQQ0xTdHJpbmcmIG9TcmNTdHJpbmcxLAogICAgICAgICAgICAgICAgICAgY29uc3QgUENMU3Ry
aW5nJiBvU3JjU3RyaW5nMik7CiAgICBmcmllbmQgUENMU3RyaW5nCiAgICAgICAgb3BlcmF0b3Ir
IChjb25zdCBQQ0xTdHJpbmcmIG9TcmNTdHJpbmcsIGNoYXIgY2hTcmNEYXRhKTsKICAgIGZyaWVu
ZCBQQ0xTdHJpbmcKICAgICAgICBvcGVyYXRvcisgKGNoYXIgY2hTcmNEYXRhLCBjb25zdCBQQ0xT
dHJpbmcmIG9TcmNTdHJpbmcpOwogICAgZnJpZW5kIFBDTFN0cmluZwogICAgICAgIG9wZXJhdG9y
KyAoY29uc3QgUENMU3RyaW5nJiBvU3JjU3RyaW5nLAogICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogcHN6U3JjRGF0YSk7CiAgICBmcmllbmQgUENMU3RyaW5nCiAgICAgICAgb3BlcmF0b3Ir
IChjb25zdCBjaGFyKiBwc3pTcmNEYXRhLAogICAgICAgICAgICAgICAgICAgY29uc3QgUENMU3Ry
aW5nJiBvU3JjU3RyaW5nKTsKCiAgICBjb25zdCBQQ0xTdHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0
IFBDTFN0cmluZyYgb0FkZFN0cmluZyk7CiAgICBjb25zdCBQQ0xTdHJpbmcmIG9wZXJhdG9yKz0g
KGNvbnN0IGNoYXIqIHBzekFkZERhdGEpOwogICAgY29uc3QgUENMU3RyaW5nJiBvcGVyYXRvcis9
IChjaGFyIGNoQWRkRGF0YSk7CgoKCgogICAgaW50IENvbXBhcmUgKGNvbnN0IGNoYXIqIHBzekNt
cERhdGEpIGNvbnN0OwogICAgaW50IENvbXBhcmVOb0Nhc2UgKGNvbnN0IGNoYXIqIHBzekNtcERh
dGEpIGNvbnN0OwogICAgaW50IENvbGxhdGUgKGNvbnN0IGNoYXIqIHBzekNtcERhdGEpIGNvbnN0
OwoKICAgIGludCBvcGVyYXRvciEgKHZvaWQpIGNvbnN0OwoKICAgIGZyaWVuZCBpbnQgb3BlcmF0
b3I9PSAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMik7CiAgICBmcmllbmQgaW50IG9wZXJhdG9yPT0g
KGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZywgY29uc3QgY2hhciogcHN6RGF0YSk7CiAgICBmcmll
bmQgaW50IG9wZXJhdG9yPT0gKGNvbnN0IGNoYXIqIHBzekRhdGEsIGNvbnN0IFBDTFN0cmluZyYg
b1N0cmluZyk7CgogICAgZnJpZW5kIGludCBvcGVyYXRvciE9IChjb25zdCBQQ0xTdHJpbmcmIG9T
dHJpbmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQQ0xTdHJpbmcmIG9TdHJp
bmcyKTsKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IhPSAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5n
LCBjb25zdCBjaGFyKiBwc3pEYXRhKTsKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IhPSAoY29uc3Qg
Y2hhciogcHN6RGF0YSwgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nKTsKCiAgICBmcmllbmQgaW50
IG9wZXJhdG9yPCAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMik7CiAgICBmcmllbmQgaW50IG9wZXJh
dG9yPCAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nLCBjb25zdCBjaGFyKiBwc3pEYXRhKTsKICAg
IGZyaWVuZCBpbnQgb3BlcmF0b3I8IChjb25zdCBjaGFyKiBwc3pEYXRhLCBjb25zdCBQQ0xTdHJp
bmcmIG9TdHJpbmcpOwoKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3I8PSAoY29uc3QgUENMU3RyaW5n
JiBvU3RyaW5nMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUENMU3RyaW5nJiBv
U3RyaW5nMik7CiAgICBmcmllbmQgaW50IG9wZXJhdG9yPD0gKGNvbnN0IFBDTFN0cmluZyYgb1N0
cmluZywgY29uc3QgY2hhciogcHN6RGF0YSk7CiAgICBmcmllbmQgaW50IG9wZXJhdG9yPD0gKGNv
bnN0IGNoYXIqIHBzekRhdGEsIGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZyk7CgogICAgZnJpZW5k
IGludCBvcGVyYXRvcj4gKGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzIpOwogICAgZnJpZW5kIGludCBv
cGVyYXRvcj4gKGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZywgY29uc3QgY2hhciogcHN6RGF0YSk7
CiAgICBmcmllbmQgaW50IG9wZXJhdG9yPiAoY29uc3QgY2hhciogcHN6RGF0YSwgY29uc3QgUENM
U3RyaW5nJiBvU3RyaW5nKTsKCiAgICBmcmllbmQgaW50IG9wZXJhdG9yPj0gKGNvbnN0IFBDTFN0
cmluZyYgb1N0cmluZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBDTFN0cmlu
ZyYgb1N0cmluZzIpOwogICAgZnJpZW5kIGludCBvcGVyYXRvcj49IChjb25zdCBQQ0xTdHJpbmcm
IG9TdHJpbmcsIGNvbnN0IGNoYXIqIHBzekRhdGEpOwogICAgZnJpZW5kIGludCBvcGVyYXRvcj49
IChjb25zdCBjaGFyKiBwc3pEYXRhLCBjb25zdCBQQ0xTdHJpbmcmIG9TdHJpbmcpOwoKCgoKICAg
IFBDTFN0cmluZyBNaWQgKGludCBuSW5kZXgsIGludCBuQ291bnQgPSAtMSkgY29uc3Q7CiAgICBQ
Q0xTdHJpbmcgTGVmdCAoaW50IG5Db3VudCkgY29uc3Q7CiAgICBQQ0xTdHJpbmcgUmlnaHQgKGlu
dCBuQ291bnQpIGNvbnN0OwoKCgoKICAgIFBDTFN0cmluZyYgTWFrZVVwcGVyICh2b2lkKTsKICAg
IFBDTFN0cmluZyYgTWFrZUxvd2VyICh2b2lkKTsKICAgIGludCBUb0ludCAodm9pZCkgY29uc3Q7
CiAgICBkb3VibGUgVG9Eb3VibGUgKHZvaWQpIGNvbnN0OwoKCgoKICAgIGludCBGaW5kIChjaGFy
IGNoU2VhcmNoRGF0YSkgY29uc3Q7CiAgICBpbnQgRmluZCAoY29uc3QgY2hhciogcHN6U2VhcmNo
RGF0YSkgY29uc3Q7CiAgICBpbnQgUmV2ZXJzZUZpbmQgKGNoYXIgY2hTZWFyY2hEYXRhKSBjb25z
dDsKIyA2MTIgIi4uLy4uLy4uL2xpYi9wY2wuaGgiCnByaXZhdGU6CgoKCgoKICAgIHN0YXRpYyBj
b25zdCBjaGFyIGNoTmlsOwoKCgoKICAgIGNoYXIqIHBzekRhdGE7CiAgICBpbnQgbkRhdGFMZW5n
dGg7CiAgICBpbnQgbkFsbG9jTGVuZ3RoOwoKCgoKICAgIHZvaWQgSW5pdCAodm9pZCk7CiAgICB2
b2lkIEFsbG9jIChpbnQgblNpemUpOwogICAgdm9pZCBFbnN1cmUgKGludCBuU2l6ZSwgaW50IGJG
b3JjZUNvcHkpOwogICAgdm9pZCBBcHBlbmQgKGNvbnN0IGNoYXIqIHBjaERhdGEsIGludCBuTGVu
Z3RoKTsKICAgIHZvaWQgQWRkIChjb25zdCBjaGFyKiBwY2hTcmMxRGF0YSwgaW50IG5TcmMxTGVu
Z3RoLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBjaFNyYzJEYXRhLCBpbnQgblNy
YzJMZW5ndGgpOwogICAgdm9pZCBBc3NpZ24gKGNvbnN0IGNoYXIqIHBhY2hTcmNEYXRhLCBpbnQg
blNyY0xlbmd0aCk7Cn07CgpQQ0xTdHJpbmcgUENMRm9ybWF0KCBjb25zdCBjaGFyICosIC4uLiAp
OwoKCgoKCmlubGluZSBpbnQgUENMU3RyaW5nOjpHZXRMZW5ndGggKHZvaWQpIGNvbnN0CnsKICAg
IHJldHVybihuRGF0YUxlbmd0aCk7Cn0KCmlubGluZSBpbnQgUENMU3RyaW5nOjpJc0VtcHR5ICh2
b2lkKSBjb25zdAp7CiAgICByZXR1cm4obkRhdGFMZW5ndGg9PTApOwp9CgppbmxpbmUgY2hhciBQ
Q0xTdHJpbmc6OkdldEF0IChpbnQgbkluZGV4KSBjb25zdAp7CiAgICAoSU1QQ2hlY2tFeHByKCJu
SW5kZXggPj0gMCIsICIuLi8uLi8uLi9saWIvcGNsLmhoIiwgNjU3KSwgKG5JbmRleCA+PSAwKSA/
ICgwKSA6IF9JTVBBc3NlcnQoIm5JbmRleCA+PSAwIiwiLi4vLi4vLi4vbGliL3BjbC5oaCIsNjU3
KSk7CiAgICAoSU1QQ2hlY2tFeHByKCJuSW5kZXggPCBuRGF0YUxlbmd0aCIsICIuLi8uLi8uLi9s
aWIvcGNsLmhoIiwgNjU4KSwgKG5JbmRleCA8IG5EYXRhTGVuZ3RoKSA/ICgwKSA6IF9JTVBBc3Nl
cnQoIm5JbmRleCA8IG5EYXRhTGVuZ3RoIiwiLi4vLi4vLi4vbGliL3BjbC5oaCIsNjU4KSk7CiAg
ICByZXR1cm4ocHN6RGF0YVtuSW5kZXhdKTsKfQoKaW5saW5lIGNoYXImIFBDTFN0cmluZzo6b3Bl
cmF0b3JbXSAoaW50IG5JbmRleCkKewogICAgKElNUENoZWNrRXhwcigibkluZGV4ID49IDAiLCAi
Li4vLi4vLi4vbGliL3BjbC5oaCIsIDY2NCksIChuSW5kZXggPj0gMCkgPyAoMCkgOiBfSU1QQXNz
ZXJ0KCJuSW5kZXggPj0gMCIsIi4uLy4uLy4uL2xpYi9wY2wuaGgiLDY2NCkpOwogICAgKElNUENo
ZWNrRXhwcigibkluZGV4IDwgbkRhdGFMZW5ndGgiLCAiLi4vLi4vLi4vbGliL3BjbC5oaCIsIDY2
NSksIChuSW5kZXggPCBuRGF0YUxlbmd0aCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJuSW5kZXggPCBu
RGF0YUxlbmd0aCIsIi4uLy4uLy4uL2xpYi9wY2wuaGgiLDY2NSkpOwogICAgcmV0dXJuKHBzekRh
dGFbbkluZGV4XSk7Cn0KCmlubGluZSBjaGFyIFBDTFN0cmluZzo6b3BlcmF0b3JbXSAoaW50IG5J
bmRleCkgY29uc3QKewogICAgKElNUENoZWNrRXhwcigibkluZGV4ID49IDAiLCAiLi4vLi4vLi4v
bGliL3BjbC5oaCIsIDY3MSksIChuSW5kZXggPj0gMCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJuSW5k
ZXggPj0gMCIsIi4uLy4uLy4uL2xpYi9wY2wuaGgiLDY3MSkpOwogICAgKElNUENoZWNrRXhwcigi
bkluZGV4IDwgbkRhdGFMZW5ndGgiLCAiLi4vLi4vLi4vbGliL3BjbC5oaCIsIDY3MiksIChuSW5k
ZXggPCBuRGF0YUxlbmd0aCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJuSW5kZXggPCBuRGF0YUxlbmd0
aCIsIi4uLy4uLy4uL2xpYi9wY2wuaGgiLDY3MikpOwogICAgcmV0dXJuKHBzekRhdGFbbkluZGV4
XSk7Cn0KCmlubGluZSBQQ0xTdHJpbmc6Om9wZXJhdG9yIGNvbnN0IGNoYXIqICh2b2lkKSBjb25z
dAp7CiAgICByZXR1cm4oKGNvbnN0IGNoYXIgKikgcHN6RGF0YSk7Cn0KCgoKCgppbmxpbmUgaW50
IFBDTFN0cmluZzo6Q29tcGFyZSAoY29uc3QgY2hhciogcHN6Q21wRGF0YSkgY29uc3QKewogICAg
cmV0dXJuKHN0cmNtcChwc3pEYXRhLCBwc3pDbXBEYXRhKSk7Cn0KCmlubGluZSBpbnQgUENMU3Ry
aW5nOjpDb21wYXJlTm9DYXNlIChjb25zdCBjaGFyKiBwc3pDbXBEYXRhKSBjb25zdAp7CiAgICBy
ZXR1cm4oc3RyY2FzZWNtcChwc3pEYXRhLCBwc3pDbXBEYXRhKSk7Cn0KCmlubGluZSBpbnQgUENM
U3RyaW5nOjpDb2xsYXRlIChjb25zdCBjaGFyKiBwc3pDbXBEYXRhKSBjb25zdAp7CiAgICByZXR1
cm4oQ29tcGFyZU5vQ2FzZShwc3pDbXBEYXRhKSk7Cn0KCmlubGluZSBpbnQgUENMU3RyaW5nOjpv
cGVyYXRvciEgKHZvaWQpIGNvbnN0CnsKICAgIHJldHVybihJc0VtcHR5KCkpOwp9CiMgNzE0ICIu
Li8uLi8uLi9saWIvcGNsLmhoIgppbmxpbmUgaW50IG9wZXJhdG9yPT0gKGNvbnN0IFBDTFN0cmlu
ZyYgb1N0cmluZzEsIGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzIpCnsKICAgIHJldHVybiAob1N0
cmluZzEuQ29tcGFyZU5vQ2FzZShvU3RyaW5nMikgPT0gMCk7Cn0KCmlubGluZSBpbnQgb3BlcmF0
b3I9PSAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nLCBjb25zdCBjaGFyKiBwc3pEYXRhKQp7CiAg
ICByZXR1cm4gKG9TdHJpbmcuQ29tcGFyZU5vQ2FzZShwc3pEYXRhKSA9PSAwKTsKfQoKaW5saW5l
IGludCBvcGVyYXRvcj09IChjb25zdCBjaGFyKiBwc3pEYXRhLCBjb25zdCBQQ0xTdHJpbmcmIG9T
dHJpbmcpCnsKICAgIHJldHVybiAob1N0cmluZy5Db21wYXJlTm9DYXNlKHBzekRhdGEpID09IDAp
Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yIT0gKGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzEsIGNv
bnN0IFBDTFN0cmluZyYgb1N0cmluZzIpCnsKICAgIHJldHVybiAob1N0cmluZzEuQ29tcGFyZU5v
Q2FzZShvU3RyaW5nMikgIT0gMCk7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3IhPSAoY29uc3QgUENM
U3RyaW5nJiBvU3RyaW5nLCBjb25zdCBjaGFyKiBwc3pEYXRhKQp7CiAgICByZXR1cm4gKG9TdHJp
bmcuQ29tcGFyZU5vQ2FzZShwc3pEYXRhKSAhPSAwKTsKfQoKaW5saW5lIGludCBvcGVyYXRvciE9
IChjb25zdCBjaGFyKiBwc3pEYXRhLCBjb25zdCBQQ0xTdHJpbmcmIG9TdHJpbmcpCnsKICAgIHJl
dHVybiAob1N0cmluZy5Db21wYXJlTm9DYXNlKHBzekRhdGEpICE9IDApOwp9CgppbmxpbmUgaW50
IG9wZXJhdG9yPCAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMSwgY29uc3QgUENMU3RyaW5nJiBv
U3RyaW5nMikKewogICAgcmV0dXJuIChvU3RyaW5nMS5Db21wYXJlTm9DYXNlKG9TdHJpbmcyKSA8
IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPCAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nLCBj
b25zdCBjaGFyKiBwc3pEYXRhKQp7CiAgICByZXR1cm4gKG9TdHJpbmcuQ29tcGFyZU5vQ2FzZShw
c3pEYXRhKSA8IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPCAoY29uc3QgY2hhciogcHN6RGF0
YSwgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nKQp7CiAgICByZXR1cm4gKG9TdHJpbmcuQ29tcGFy
ZU5vQ2FzZShwc3pEYXRhKSA+IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPD0gKGNvbnN0IFBD
TFN0cmluZyYgb1N0cmluZzEsIGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzIpCnsKICAgIHJldHVy
biAob1N0cmluZzEuQ29tcGFyZU5vQ2FzZShvU3RyaW5nMikgPD0gMCk7Cn0KCmlubGluZSBpbnQg
b3BlcmF0b3I8PSAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nLCBjb25zdCBjaGFyKiBwc3pEYXRh
KQp7CiAgICByZXR1cm4gKG9TdHJpbmcuQ29tcGFyZU5vQ2FzZShwc3pEYXRhKSA8PSAwKTsKfQoK
aW5saW5lIGludCBvcGVyYXRvcjw9IChjb25zdCBjaGFyKiBwc3pEYXRhLCBjb25zdCBQQ0xTdHJp
bmcmIG9TdHJpbmcpCnsKICAgIHJldHVybiAob1N0cmluZy5Db21wYXJlTm9DYXNlKHBzekRhdGEp
ID49IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPiAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5n
MSwgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMikKewogICAgcmV0dXJuIChvU3RyaW5nMS5Db21w
YXJlTm9DYXNlKG9TdHJpbmcyKSA+IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPiAoY29uc3Qg
UENMU3RyaW5nJiBvU3RyaW5nLCBjb25zdCBjaGFyKiBwc3pEYXRhKQp7CiAgICByZXR1cm4gKG9T
dHJpbmcuQ29tcGFyZU5vQ2FzZShwc3pEYXRhKSA+IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9y
PiAoY29uc3QgY2hhciogcHN6RGF0YSwgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nKQp7CiAgICBy
ZXR1cm4gKG9TdHJpbmcuQ29tcGFyZU5vQ2FzZShwc3pEYXRhKSA8IDApOwp9CgppbmxpbmUgaW50
IG9wZXJhdG9yPj0gKGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzEsIGNvbnN0IFBDTFN0cmluZyYg
b1N0cmluZzIpCnsKICAgIHJldHVybiAob1N0cmluZzEuQ29tcGFyZU5vQ2FzZShvU3RyaW5nMikg
Pj0gMCk7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I+PSAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5n
LCBjb25zdCBjaGFyKiBwc3pEYXRhKQp7CiAgICByZXR1cm4gKG9TdHJpbmcuQ29tcGFyZU5vQ2Fz
ZShwc3pEYXRhKSA+PSAwKTsKfQoKaW5saW5lIGludCBvcGVyYXRvcj49IChjb25zdCBjaGFyKiBw
c3pEYXRhLCBjb25zdCBQQ0xTdHJpbmcmIG9TdHJpbmcpCnsKICAgIHJldHVybiAob1N0cmluZy5D
b21wYXJlTm9DYXNlKHBzekRhdGEpIDw9IDApOwp9CgoKCgoKCgppbmxpbmUgUENMU3RyaW5nJiBQ
Q0xTdHJpbmc6Ok1ha2VVcHBlciAodm9pZCkKewogICAgVUNhc2VTdHJpbmcocHN6RGF0YSk7CiAg
ICByZXR1cm4oKnRoaXMpOwp9CgppbmxpbmUgUENMU3RyaW5nJiBQQ0xTdHJpbmc6Ok1ha2VMb3dl
ciAodm9pZCkKewogICAgTENhc2VTdHJpbmcocHN6RGF0YSk7CiAgICByZXR1cm4oKnRoaXMpOwp9
CgppbmxpbmUgaW50IFBDTFN0cmluZzo6VG9JbnQgKHZvaWQpIGNvbnN0CnsKICAgIHJldHVybihh
dG9pKHBzekRhdGEpKTsKfQoKaW5saW5lIGRvdWJsZSBQQ0xTdHJpbmc6OlRvRG91YmxlICh2b2lk
KSBjb25zdAp7CiAgICByZXR1cm4oU2NhbkRvdWJsZShwc3pEYXRhLCBuRGF0YUxlbmd0aCkpOwp9
CiMgODU0ICIuLi8uLi8uLi9saWIvcGNsLmhoIgpjbGFzcyBQQ0xEYXRlCnsKcHVibGljOgogICAg
UENMRGF0ZSAoKTsKICAgIFBDTERhdGUgKGludCBtbiwgaW50IGR5LCBpbnQgeXIpOwogICAgflBD
TERhdGUoKTsKCiAgICBpbnQgR2V0TW9udGggKCkgY29uc3Qge3JldHVybiBtb250aDt9CiAgICBp
bnQgR2V0RGF5ICgpIGNvbnN0IHtyZXR1cm4gZGF5O30KICAgIGludCBHZXRZZWFyICgpIGNvbnN0
IHtyZXR1cm4geWVhcjt9CiAgICBpbnQgR2V0RGF5T2ZZZWFyICgpIGNvbnN0OwogICAgY2hhciAq
R2V0U3RyaW5nIChjaGFyICpzdHJpbmcpIGNvbnN0OwogICAgaW50IEdldERpZmZlcmVuY2UgKFBD
TERhdGUgb3RoZXIpIGNvbnN0OwoKICAgIHZvaWQgU2V0TW9udGggKGludCBtbik7CiAgICB2b2lk
IFNldERheSAoaW50IGR5KTsKICAgIHZvaWQgU2V0WWVhciAoaW50IHlyKTsKICAgIHZvaWQgU2V0
RGF0ZSAoaW50IG1uLCBpbnQgZHksIGludCB5cik7CiAgICB2b2lkIFNldFRvZGF5ICgpOwogICAg
dm9pZCBTZXREYXlPZlllYXIgKGludCBkb3kpOwogICAgdm9pZCBhZGREYXkgKGludCBkYXlzKTsK
CiAgICBQQ0xEYXRlICZvcGVyYXRvcisrICgpOwogICAgUENMRGF0ZSAmb3BlcmF0b3ItLSAoKTsK
CiAgICBpbnQgb3BlcmF0b3I8IChjb25zdCBQQ0xEYXRlICZvdGhlcikgY29uc3Q7CiAgICBpbnQg
b3BlcmF0b3I+IChjb25zdCBQQ0xEYXRlICZvdGhlcikgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3I8
PSAoY29uc3QgUENMRGF0ZSAmb3RoZXIpIGNvbnN0OwogICAgaW50IG9wZXJhdG9yPj0gKGNvbnN0
IFBDTERhdGUgJm90aGVyKSBjb25zdDsKICAgIGludCBvcGVyYXRvcj09IChjb25zdCBQQ0xEYXRl
ICZvdGhlcikgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3IhPSAoY29uc3QgUENMRGF0ZSAmb3RoZXIp
IGNvbnN0OwoKCgoKCgogICAgc3RhdGljIGludCBHZXREYXlzSW5Nb250aCAoaW50IG1uLCBpbnQg
eXIpOwogICAgc3RhdGljIGludCBMZWFwWWVhciAoaW50IHlyKTsKCnByaXZhdGU6CiAgICBpbnQg
bW9udGgsIGRheSwgeWVhcjsKfTsKCgoKCgoKCmNsYXNzIFBDTEluZGV4ZWREYXRhIDogcHVibGlj
IFBDTE9iamVjdAp7CnB1YmxpYzoKICAgIGludCBpSW5kZXg7CiAgICB2b2lkICpwRGF0YTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIFBDTEluZGV4ZWREYXRhKCBpbnQgaUluZGV4Miwgdm9pZCAq
cERhdGEyICkKICAgICAgICAgICAgICAgICAgICAgICAgeyBpSW5kZXggPSBpSW5kZXgyOyB0aGlz
LT5wRGF0YSA9IHBEYXRhMjsgfQogICAgdmlydHVhbCBjb25zdCBQQ0xLZXkgS2V5KCkgY29uc3Qg
eyByZXR1cm4oIFBDTEtleSggaUluZGV4ICkgKTsgfQogICAgdmlydHVhbCBjb25zdCBjaGFyICpH
ZXRDbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiggIlBDTEluZGV4ZWREYXRhIiApOyB9CiAgICB2
aXJ0dWFsIHZvaWQgRHVtcCggRklMRSAqZnAgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAg
ICB7IGZwcmludGYoZnAsIlBDTEluZGV4ZWREYXRhOiVkOiVwXG4iLGlJbmRleCxwRGF0YSk7IH0K
fTsKIyA5MjkgIi4uLy4uLy4uL2xpYi9wY2wuaGgiCmNsYXNzIFBDTENvbG9yIDogcHVibGljIFBD
TE9iamVjdCB7CgogIHB1YmxpYzoKICAgIHVuc2lnbmVkIGNoYXIgYnlSZWQ7CiAgICB1bnNpZ25l
ZCBjaGFyIGJ5R3JlZW47CiAgICB1bnNpZ25lZCBjaGFyIGJ5Qmx1ZTsKCiAgICAgICAgICAgICAg
ICBQQ0xDb2xvcigpOwogICAgICAgICAgICAgICAgUENMQ29sb3IoIGludCBuUmVkLCBpbnQgbkdy
ZWVuLCBpbnQgbkJsdWUgKTsKICAgICAgICAgICAgICAgIFBDTENvbG9yKCBjb25zdCBQQ0xDb2xv
ciAmIG9TcmNDb2xvciApOwogICAgdmlydHVhbCB+UENMQ29sb3IoKSB7fTsKCiAgICB2b2lkIFNl
dFJHQiggaW50IG5SZWQsIGludCBuR3JlZW4sIGludCBuQmx1ZSApOwogICAgVEJvb2wgU2V0QnlO
YW1lKCBjb25zdCBjaGFyICogcHN6Q29sb3JOYW1lICk7CiAgICBpbnQgR2V0UmVkKCkgY29uc3Q7
CiAgICBpbnQgR2V0R3JlZW4oKSBjb25zdDsKICAgIGludCBHZXRCbHVlKCkgY29uc3Q7CiAgICBQ
Q0xTdHJpbmcgR2V0TmFtZSggdm9pZCApIGNvbnN0OwogICAgUENMU3RyaW5nIEdldFJHQk5hbWUo
IHZvaWQgKSBjb25zdDsKICAgIGNvbnN0IFBDTENvbG9yJiBvcGVyYXRvcj0gKGNvbnN0IFBDTENv
bG9yJiBvU3JjQ29sb3IpOwogICAgZnJpZW5kIGludAogICAgICAgICAgICAgICAgb3BlcmF0b3I9
PSAoY29uc3QgUENMQ29sb3ImIG9Db2xvcjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBQQ0xDb2xvciYgb0NvbG9yMik7CgoKCgoKCiAgICBpbmxpbmUgZnJpZW5kIGludCBvcGVy
YXRvciE9IChjb25zdCBQQ0xDb2xvciYgb0NvbG9yMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUENMQ29sb3ImIG9Db2xvcjIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHty
ZXR1cm4oICEob0NvbG9yMT09b0NvbG9yMikgKTt9CgoKCgogICAgdmlydHVhbCB2b2lkIER1bXAo
IEZJTEUgKiApIGNvbnN0OwogICAgdmlydHVhbCBjb25zdCBjaGFyICpHZXRDbGFzc05hbWUoIHZv
aWQgKSBjb25zdDsKfTsKCmNoYXIgKipHZXROYW1lZENvbG9ycyggdm9pZCApOwp2b2lkIEFkZE5h
bWVkQ29sb3IoIGNvbnN0IGNoYXIgKiwgUENMQ29sb3IgKTsKCgoKCgoKY2xhc3MgUENMQ21kTGlu
ZU9wdGlvbiA6IHB1YmxpYyBQQ0xPYmplY3QKewpwdWJsaWM6CiAgICBQQ0xDbWRMaW5lT3B0aW9u
IChjaGFyKiBwc3pPcHRpb24pOwogICAgflBDTENtZExpbmVPcHRpb24gKHZvaWQpOwoKCiAgICBj
b25zdCBjaGFyKiBHZXRDbGFzc05hbWUgKHZvaWQpIGNvbnN0OwoKICAgIGNoYXIqIHBzek9wdGlv
bjsKICAgIGNoYXIqKiBwYXN6QXJnOwogICAgaW50IG5Db3VudDsKfTsKCmNsYXNzIFBDTENtZExp
bmUgOiBwdWJsaWMgUENMT2JqZWN0CnsKcHVibGljOgoKICAgICAgICAgICAgICAgIFBDTENtZExp
bmUgKGludCBuQXJnYywgY2hhciogcGFzekFyZ3ZbXSk7CiAgICAgICAgICAgICAgICBQQ0xDbWRM
aW5lIChjaGFyKiBwc3pDb21tYW5kTGluZSk7CiAgICAgICAgICAgICAgICB+UENMQ21kTGluZSAo
dm9pZCk7CgoKICAgIGNvbnN0IGNoYXIqIEdldENsYXNzTmFtZSAodm9pZCkgY29uc3Q7CgogICAg
VEJvb2wgRXhpc3QgKGNoYXIqIHBzek9wdGlvbik7CiAgICBpbnQgQ291bnQgKGNoYXIqIHBzek9w
dGlvbik7CiAgICBpbnQgR2V0SW50IChjaGFyKiBwc3pPcHRpb24sIGludCBuRGVmYXVsdCA9IDAs
IGludCBuQXJnID0gMCk7CiAgICBmbG9hdCBHZXRGbG9hdCAoY2hhciogcHN6T3B0aW9uLCBmbG9h
dCBmRGVmYXVsdCA9IDAuMCwgaW50IG5BcmcgPSAwKTsKICAgIGNoYXIqIEdldFN0cmluZyAoY2hh
ciogcHN6T3B0aW9uLCBjaGFyKiBwc3pEZWZhdWx0ID0gIiIsIGludCBuQXJnID0gMCk7Cgpwcml2
YXRlOgoKCiAgICBQQ0xBcnJheSBvT3B0aW9uOwoKICAgIHZvaWQgR2VuZXJhdGUgKGludCBuQXJn
YywgY2hhciogcGFzekFyZ3ZbXSk7CiAgICBQQ0xDbWRMaW5lT3B0aW9uKiBGaW5kT3B0aW9uIChj
aGFyKiBwc3pPcHRpb24pOwp9OwoKCgoKCgpjbGFzcyBQQ0xUcmFuc2xhdGUgewogIHB1YmxpYzoK
ICAgIFBDTFRyYW5zbGF0ZSh2b2lkKTsKICAgIHZvaWQgU2V0U3JjUmVjdChkb3VibGUgZExvd2Vy
TGVmdFgsIGRvdWJsZSBkTG93ZXJMZWZ0WSwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBk
VXBwZXJSaWdodFgsIGRvdWJsZSBkVXBwZXJSaWdodFkpOwoKICAgIHZvaWQgU2V0RGVzdFJlY3Qo
ZG91YmxlIGRMb3dlckxlZnRYLCBkb3VibGUgZExvd2VyTGVmdFksCiAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBkVXBwZXJSaWdodFgsIGRvdWJsZSBkVXBwZXJSaWdodFkpOwoKICAgIHZvaWQg
U3JjMkRlc3QoZG91YmxlICpwZFgsIGRvdWJsZSAqcGRZKTsKICAgIHZvaWQgRGVzdDJTcmMoZG91
YmxlICpwZFgsIGRvdWJsZSAqcGR5KTsKCiAgICBkb3VibGUgU3JjMkRlc3RYKGRvdWJsZSBkWCkg
e3JldHVybiBkWCAqIGRYU2NhbGUgKyBkWE9mZnNldDt9OwogICAgZG91YmxlIFNyYzJEZXN0WShk
b3VibGUgZFkpIHtyZXR1cm4gZFkgKiBkWVNjYWxlICsgZFlPZmZzZXQ7fTsKCiAgICBkb3VibGUg
RGVzdDJTcmNYKGRvdWJsZSBkWCkKICAgICAgICB7IHJldHVybiBkWFNjYWxlID8gKGRYLWRYT2Zm
c2V0KS9kWFNjYWxlIDogMDsgfTsKICAgIGRvdWJsZSBEZXN0MlNyY1koZG91YmxlIGRZKQogICAg
ICAgIHsgcmV0dXJuIGRZU2NhbGUgPyAoZFktZFlPZmZzZXQpL2RZU2NhbGUgOiAwOyB9OwoKICAg
IHZvaWQgR2V0U3JjUmVjdChkb3VibGUgKnBkWDEsIGRvdWJsZSAqcGRZMSwgZG91YmxlICpwZFgy
LCBkb3VibGUgKnBkWTIpOwogICAgdm9pZCBHZXREZXN0UmVjdChkb3VibGUgKnBkWDEsIGRvdWJs
ZSAqcGRZMSwgZG91YmxlICpwZFgyLGRvdWJsZSAqcGRZMik7CgogIHByaXZhdGU6CgogICAgdm9p
ZCBDYWxjdWxhdGVUcmFuc2Zvcm0odm9pZCk7CgogICAgZG91YmxlIGRYU2NhbGU7CiAgICBkb3Vi
bGUgZFhPZmZzZXQ7CgogICAgZG91YmxlIGRZU2NhbGU7CiAgICBkb3VibGUgZFlPZmZzZXQ7Cgog
ICAgZG91YmxlIGRTcmNYMSxkU3JjWTE7CiAgICBkb3VibGUgZFNyY1gyLGRTcmNZMjsKCiAgICBk
b3VibGUgZERlc3RYMSxkRGVzdFkxOwogICAgZG91YmxlIGREZXN0WDIsZERlc3RZMjsKfTsKCgoK
Cgp2b2lkIEJ1ZmZlckxpbmUodW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLCBpbnQgbkJ1ZmZlclhT
aXplLCBpbnQKbkJ1ZmZlcllTaXplLAogICAgICAgICAgICAgICAgaW50IG5YMSwgaW50IG5ZMSwg
aW50IG5YMiwgaW50IG5ZMiwgdW5zaWduZWQgY2hhciBieUxpbmVDb2xvciwKICAgICAgICAgICAg
ICAgIGludCBuV2lkdGgpOwojIDg1ICJ2ZWNjbGVhbi5jcHAiIDIKCiMgMSAic3RsaW5jbC5oIiAx
CiMgNDMgInN0bGluY2wuaCIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2xpc3QiIDEg
MwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2xpc3QiIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMSAzCiMgNjAgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29u
ZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3VuLXNvbGFy
aXMyLjcvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMiAzCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2xpbWl0
cy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zcGFyY3Y5LXN1bi1zb2xh
cmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDY1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX3BhaXIuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfcGFpci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCnRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlw
ZWRlZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCgoKICBw
YWlyKCkgOiBmaXJzdCgpLCBzZWNvbmQoKSB7fQoKCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBj
b25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUg
PGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkg
OiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxf
VDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3gu
Zmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4g
X194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJz
dCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg
Y2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf
X3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsK
fQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsK
ICByZXR1cm4gX195IDwgX194Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVtcGxhdGUg
PGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8
X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShf
X3ggPCBfX3kpOwp9CiMgMTM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Bh
aXIuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1Qx
LCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1Qx
LCBfVDI+KF9feCwgX195KTsKfQoKfQojIDY3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvdHlwZV90cmFpdHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NwYXJj
djktc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNTAgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAyIDMKIyA4NiAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKdGVtcGxhdGUgPGJvb2wgX1RydXRo
PiBzdHJ1Y3QgX0Jvb2wge307CnR5cGVkZWYgX0Jvb2w8dHJ1ZT4gX190cnVlX3R5cGU7CnR5cGVk
ZWYgX0Jvb2w8ZmFsc2U+IF9fZmFsc2VfdHlwZTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJl
cl9tdXN0X2JlX2ZpcnN0OwojIDExMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5
cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25l
ZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlw
ZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25l
ZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
X3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E
X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcg
bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9J
c19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190
cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2No
YXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAg
dHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf
aW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Ig
ewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBzdGQgewog
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNz
IF9fbm9ybWFsX2l0ZXJhdG9yOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl
bmFtZSBfQ29udGFpbmVyPgpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgc3RkOjpfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9Ob3JtYWw7Cn07CiMgNzAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0cmluZy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RyaW5nLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRk
ZWYuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl
Zi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43
LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6
cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEg
MyA0CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAy
IDMKIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMK
bmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVz
aW5nIDo6c3RyY3B5OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2lu
ZyA6OnN0cm5jYXQ7CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcg
OjpzdHJjb2xsOwogIHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcg
OjpzdHJjc3BuOwogIHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6
bWVtc2V0OwogIHVzaW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6
bWVtY2hyOwoKICBpbmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXpl
X3QgX19uKQogIHsgcmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBf
X2MsIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihj
aGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2Fz
dDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxp
bmUgY2hhcioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1
cm4gX19idWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIp
OyB9CgogIHVzaW5nIDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBf
X3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29u
c3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hh
cioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1
aWx0aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMg
NzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDEgMwojIDM4
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMwojIDEgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRl
L2xpbWl0cy5oIiAxIDMgNAojIDExICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3Vu
LXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzbGltaXRz
LmgiIDEgMyA0CiMgMjUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJp
czIuNy8zLjAuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWxp
bWl0cy5oCTEuNDgJOTgvMDcvMjAgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVf
dGVzdHMuaCIgMSAzIDQKIyAyOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z
b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAojIDI5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw
YXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKIyA0
MCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2lu
Y2x1ZGUvc3lzbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5o
IiAxIDMgNAojIDkgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQKI3ByYWdtYSBp
ZGVudCAiQCgjKWludF9saW1pdHMuaAkxLjUJOTgvMDEvMDYgU01JIgojIDQ0ICIvdXNyL2luY2x1
ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5o
IiAxIDMgNAojIDQ1ICIvdXNyL2luY2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMiAzIDQKCgpleHRl
cm4gIkMiIHsKIyAxNjIgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQKfQojIDQx
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5j
bHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CiMgMzA3ICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXNsaW1p
dHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIgMSAzIDQKIyAzMDggIi91
c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRl
L3N5c2xpbWl0cy5oIiAyIDMgNAojIDMxOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5
LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNApleHRlcm4gbG9u
ZyBfc3lzY29uZihpbnQpOwojIDMyOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1
bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAp9CiMgMTIgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL2xp
bWl0cy5oIiAyIDMgNAojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Ns
aW1pdHMuaCIgMiAzCiMgNzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk
bGliLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRs
aWIuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJp
czIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdGRsaWIuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1z
dW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMgNAojIDQyICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgNzMgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNp
bmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRv
aTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwog
IHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpn
ZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsK
ICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAg
dXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5n
IDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpz
dHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3
Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7
IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxk
aXYoX19pLCBfX2opOyB9Cn0KIyA3NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NzdGRkZWYuaCIgMSAzCiMgNzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9uZXciIDEgMwoj
IDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvY3N0ZGRlZiIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
bmV3IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMg
MzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7
CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgog
ICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93
KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsK
CgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6
CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRp
b24oKSB0aHJvdygpOwogIH07CgoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikg
KCk7CgogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgoKICB0ZXJtaW5h
dGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOwoKCiAg
dm9pZCB0ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKICB1bmV4
cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygp
OwoKCiAgdm9pZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoj
IDk1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVn
aHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKfQojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKICBjbGFzcyBi
YWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygp
IHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0
cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgog
IHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hh
bmRsZXIobmV3X2hhbmRsZXIpOwp9CiMgNzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3
IiAzCnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9j
KTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxv
Yyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBk
ZWxldGVbXSh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwg
Y29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6
OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRl
bGV0ZSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRv
ciBkZWxldGVbXSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxp
bmUgdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7
IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qs
IHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cgp9CiMgNzYgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMK
IyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyAzOCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAzCgojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZp
Zy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVj
dCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47CgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAg
ICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmlu
ZzsKCgoKfQojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyAz
OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAx
IDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43
L2JpdHMvYysraW8uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3N0ZGlvIiAx
IDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9jc3RkaW8iIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyAzNyAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMK
IyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM5
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyA0MSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwojIDEgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0
ZGlvLmgiIDEgMyA0CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
ZGlvLmgiIDIgMwojIDg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRp
by5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsK
CiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAg
dXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2lu
ZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6
ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVh
ZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsK
ICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1
c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6
OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRj
aGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsK
ICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVz
aW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNp
bmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5n
IDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAz
MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9jc3RkaW8iIDIgMwojIDM2ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwojIDM3ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcv
Yml0cy9ndGhyLmgiIDEgMwojIDk4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjkt
c3VuLXNvbGFyaXMyLjcvYml0cy9ndGhyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2d0
aHItZGVmYXVsdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z
b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMgNAojIDE4ICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9wdGhyZWFk
LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpcHRocmVhZC5oCTEuMjYJOTgvMDQvMTIgU01JIgoK
CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4z
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjIgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
c3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKIyAx
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDIzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CiMg
MSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMyA0CiMgMTEgIi91c3IvaW5jbHVkZS9zY2hlZC5o
IiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXNjaGVkLmgJMS45CTk4LzAxLzE2IFNNSSIKCiMgMSAi
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMTQgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMgNAoj
IDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMTUgIi91c3IvaW5jbHVkZS9zY2hlZC5o
IiAyIDMgNAoKCmV4dGVybiAiQyIgewoKCnN0cnVjdCBzY2hlZF9wYXJhbSB7CiAgICAgICAgaW50
IHNjaGVkX3ByaW9yaXR5OwogICAgICAgIGludCBzY2hlZF9uaWNlbGltOwogICAgICAgIGludCBz
Y2hlZF9uaWNlOwogICAgICAgIGludCBzY2hlZF9wYWRbNl07CgoKCn07CiMgNDQgIi91c3IvaW5j
bHVkZS9zY2hlZC5oIiAzIDQKaW50IHNjaGVkX2dldHBhcmFtKHBpZF90IHBpZCwgc3RydWN0IHNj
aGVkX3BhcmFtICpwYXJhbSk7CmludCBzY2hlZF9zZXRwYXJhbShwaWRfdCBwaWQsIGNvbnN0IHN0
cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOwppbnQgc2NoZWRfZ2V0c2NoZWR1bGVyKHBpZF90IHBp
ZCk7CmludCBzY2hlZF9zZXRzY2hlZHVsZXIocGlkX3QgcGlkLCBpbnQgcG9saWN5LAogICAgICAg
ICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7CmludCBzY2hlZF95aWVs
ZCh2b2lkKTsKaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoaW50IHBvbGljeSk7CmludCBzY2hl
ZF9nZXRfcHJpb3JpdHlfbWluKGludCBwb2xpY3kpOwppbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFs
KHBpZF90IHBpZCwgc3RydWN0IHRpbWVzcGVjICppbnRlcnZhbCk7CiMgNjUgIi91c3IvaW5jbHVk
ZS9zY2hlZC5oIiAzIDQKfQojIDI0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3Vu
LXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIg
ewojIDEwMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMu
MC4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX2NsZWFudXAgewogICAg
ICAgIHVpbnRwdHJfdCBwdGhyZWFkX2NsZWFudXBfcGFkWzRdOwp9IF9jbGVhbnVwX3Q7CgoKCnZv
aWQgX19wdGhyZWFkX2NsZWFudXBfcHVzaCh2b2lkICgqcm91dGluZSkodm9pZCAqKSwgdm9pZCAq
YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgZnAs
IF9jbGVhbnVwX3QgKmluZm8pOwp2b2lkIF9fcHRocmVhZF9jbGVhbnVwX3BvcChpbnQgZXgsIF9j
bGVhbnVwX3QgKmluZm8pOwpjYWRkcl90IF9nZXRmcCh2b2lkKTsKIyAxMzcgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3B0aHJlYWQu
aCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQocHRocmVhZF9hdHRyX3QgKik7CmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kocHRocmVhZF9hdHRyX3QgKik7CmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZShwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QpOwpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUoY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kiwgc2l6ZV90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIocHRocmVh
ZF9hdHRyX3QgKiwgdm9pZCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRy
KGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHZvaWQgKiopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9zZXRkZXRhY2hzdGF0ZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9nZXRkZXRhY2hzdGF0ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlKHB0aHJlYWRfYXR0cl90ICosIGludCk7CmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIGlu
dCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkKHB0aHJlYWRfYXR0
cl90ICosIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZChjb25z
dCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNj
aGVkcG9saWN5KHB0aHJlYWRfYXR0cl90ICosIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X2dldHNjaGVkcG9saWN5KGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbShwdGhyZWFkX2F0dHJfdCAqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICop
OwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtKGNvbnN0IHB0aHJlYWRfYXR0
cl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKik7CmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICosIGNvbnN0
IHB0aHJlYWRfYXR0cl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
ICgqKSh2b2lkICopLCB2b2lkICopOwpleHRlcm4gaW50IHB0aHJlYWRfb25jZShwdGhyZWFkX29u
Y2VfdCAqLCB2b2lkICgqKSh2b2lkKSk7CmV4dGVybiBpbnQgcHRocmVhZF9qb2luKHB0aHJlYWRf
dCwgdm9pZCAqKik7CmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2gocHRocmVhZF90KTsKZXh0ZXJu
IHZvaWQgcHRocmVhZF9leGl0KHZvaWQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwocHRo
cmVhZF90KTsKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0ocHRocmVhZF90LCBpbnQs
IGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVk
cGFyYW0ocHRocmVhZF90LCBpbnQgKiwgc3RydWN0IHNjaGVkX3BhcmFtICopOwpleHRlcm4gaW50
IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoaW50LCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9z
ZXRjYW5jZWx0eXBlKGludCwgaW50ICopOwpleHRlcm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwo
dm9pZCk7CmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbChwdGhyZWFkX3QsIHB0aHJlYWRfdCk7CmV4
dGVybiBpbnQgcHRocmVhZF9rZXlfY3JlYXRlKHB0aHJlYWRfa2V5X3QgKiwgdm9pZCAoKikodm9p
ZCAqKSk7CmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlKHB0aHJlYWRfa2V5X3QpOwpleHRl
cm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCwgY29uc3Qgdm9pZCAqKTsK
ZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCk7CmV4dGVybiBw
dGhyZWFkX3QgcHRocmVhZF9zZWxmKHZvaWQpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRl
eGF0dHJfZGVzdHJveShwdGhyZWFkX211dGV4YXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf
bXV0ZXhhdHRyX3NldHBzaGFyZWQocHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwpleHRlcm4g
aW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9tdXRleGF0dHJf
dCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHJvdG9jb2wocHRo
cmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dl
dHByb3RvY29sKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50
IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwg
aW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwcmlvY2VpbGluZyhjb25zdCBw
dGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2lu
aXQocHRocmVhZF9tdXRleF90ICosIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7CmV4dGVy
biBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4X2xvY2socHRocmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJl
YWRfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf
c2V0cHJpb2NlaWxpbmcocHRocmVhZF9tdXRleF90ICosIGludCwgaW50ICopOwpleHRlcm4gaW50
IHB0aHJlYWRfbXV0ZXhfZ2V0cHJpb2NlaWxpbmcocHRocmVhZF9tdXRleF90ICosIGludCAqKTsK
ZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQocHRocmVhZF9jb25kYXR0cl90ICopOwpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveShwdGhyZWFkX2NvbmRhdHRyX3QgKik7
CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJf
dCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZChjb25zdCBw
dGhyZWFkX2NvbmRhdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0
KHB0aHJlYWRfY29uZF90ICosIGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqKTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NvbmRfZGVzdHJveShwdGhyZWFkX2NvbmRfdCAqKTsKZXh0ZXJuIGludCBwdGhy
ZWFkX2NvbmRfYnJvYWRjYXN0KHB0aHJlYWRfY29uZF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZF9zaWduYWwocHRocmVhZF9jb25kX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dh
aXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJl
YWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9tdXRleF90ICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNw
ZWMgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJkc2l6ZShjb25zdCBwdGhyZWFk
X2F0dHJfdCAqLCBzaXplX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6
ZShwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QpOwpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y29uY3Vy
cmVuY3kodm9pZCk7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJyZW5jeShpbnQgbmV3dmFs
KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKHB0aHJlYWRfbXV0ZXhhdHRy
X3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBlKGNvbnN0IHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2lu
aXQocHRocmVhZF9yd2xvY2tfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rl
c3Ryb3kocHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxv
Y2socHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxv
Y2socHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2so
cHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2so
cHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2socHRo
cmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdChwdGhy
ZWFkX3J3bG9ja2F0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJv
eShwdGhyZWFkX3J3bG9ja2F0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJf
Z2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBp
bnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQocHRocmVhZF9yd2xvY2thdHRyX3QgKiwg
aW50KTsKIyAzMTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIu
Ny8zLjAuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0Cn0KIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMwoK
dHlwZWRlZiBwdGhyZWFkX2tleV90IF9fZ3RocmVhZF9rZXlfdDsKdHlwZWRlZiBwdGhyZWFkX29u
Y2VfdCBfX2d0aHJlYWRfb25jZV90Owp0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRf
bXV0ZXhfdDsKCgoKCgoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfb25jZQojcHJhZ21hIHdlYWsgcHRo
cmVhZF9rZXlfY3JlYXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUKI3ByYWdtYSB3
ZWFrIHB0aHJlYWRfZ2V0c3BlY2lmaWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfc2V0c3BlY2lmaWMK
I3ByYWdtYSB3ZWFrIHB0aHJlYWRfY3JlYXRlCgojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9s
b2NrCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sKI3ByYWdtYSB3ZWFrIHB0aHJl
YWRfbXV0ZXhfdW5sb2NrCiMgODAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1z
dW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyB2b2lkICpfX2d0aHJl
YWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsKCnN0YXRpYyBpbmxpbmUg
aW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZl
X3B0ciAhPSAwOwp9CiMgNDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3Vu
LXNvbGFyaXMyLjcvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0
aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkK
ewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChv
bmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9f
Z3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2
b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3Rh
dGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2
b2lkICpwdHIpCnsKCiAgaWYgKHB0cikKICAgIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChr
ZXksIDApOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJl
YWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2tl
eV9kZWxldGUgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVj
aWZpYyAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmlj
IChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3Ro
cmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikKewogIHJldHVybiBwdGhyZWFkX3NldHNw
ZWNpZmljIChrZXksIHB0cik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9s
b2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9w
ICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJl
dHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19n
dGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAg
IHJldHVybiBwdGhyZWFkX211dGV4X3RyeWxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4g
MDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFk
X211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVy
biBwdGhyZWFkX211dGV4X3VubG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CiMg
OTkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRz
L2d0aHIuaCIgMiAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4t
c29sYXJpczIuNy9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYg
bG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCgoKICB0eXBl
ZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9f
Y19sb2NrOwoKCgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZV90eXBlOwoKCiAgc3RydWN0IF9faW9z
X2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zp
eGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBz
dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRp
ZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAw
eDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsK
CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgy
MDsKICB9Owp9CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDEgMwoj
IDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43L2JpdHMvYysr
Y29uZmlnLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3
Y2hhci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRk
ZWYuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFy
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIg
MSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMwoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAz
OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMKIyA0MCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMSAzIDQKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jdGltZS5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jdGltZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6
OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRp
bWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsK
ICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwog
IHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jd2NoYXIuaCIgMiAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNv
bGFyaXMyLjcvMy4wLjMvaW5jbHVkZS93Y2hhci5oIiAxIDMgNAojIDE4ICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS93Y2hhci5oIiAz
IDQKI3ByYWdtYSBpZGVudCAiQCgjKXdjaGFyLmgJMS4zMQk5OC8wNS8wNCBTTUkiCgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDIxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS93Y2hhci5oIiAy
IDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQKIyAyMiAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvd2No
YXIuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW9fdGFnLmgiIDEgMyA0CiMgMjMgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRl
L3djaGFyLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyX2ltcGwuaCIgMSAzIDQKIyA5
ICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXdjaGFy
X2ltcGwuaAkxLjIJOTgvMDIvMjcgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZz
LmgiIDEgMyA0CiMgMTIgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDIgMyA0CgoKZXh0ZXJu
ICJDIiB7CgoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICAgICAgbG9uZyBfX2ZpbGxlcls0XTsKCgoK
fSBfX21ic3RhdGVfdDsKCgoKfQojIDI0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjkt
c3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAojIDEgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDEgMyA0CiMgMjUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1z
dW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CgoKCgojIDEgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0
ZGlvLmgiIDEgMyA0CiMgMzAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29s
YXJpczIuNy8zLjAuMy9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDEgMyA0CiMgMzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4t
c29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMyA0CiMgMzUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIu
Ny8zLjAuMy9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Zh
X2xpc3QuaCIgMSAzIDQKIyAzOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z
b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyA1
OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2lu
Y2x1ZGUvd2NoYXIuaCIgMyA0CnR5cGVkZWYgaW50IHdpbnRfdDsKCgoKCgoKCnR5cGVkZWYgaW50
IHdjdHlwZV90OwojIDEwMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xh
cmlzMi43LzMuMC4zL2luY2x1ZGUvd2NoYXIuaCIgMyA0CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJz
dGF0ZV90OwojIDExMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlz
Mi43LzMuMC4zL2luY2x1ZGUvd2NoYXIuaCIgMyA0CmV4dGVybiBpbnQgaXN3YWxwaGEod2ludF90
KTsKZXh0ZXJuIGludCBpc3d1cHBlcih3aW50X3QpOwpleHRlcm4gaW50IGlzd2xvd2VyKHdpbnRf
dCk7CmV4dGVybiBpbnQgaXN3ZGlnaXQod2ludF90KTsKZXh0ZXJuIGludCBpc3d4ZGlnaXQod2lu
dF90KTsKZXh0ZXJuIGludCBpc3dhbG51bSh3aW50X3QpOwpleHRlcm4gaW50IGlzd3NwYWNlKHdp
bnRfdCk7CmV4dGVybiBpbnQgaXN3cHVuY3Qod2ludF90KTsKZXh0ZXJuIGludCBpc3dwcmludCh3
aW50X3QpOwpleHRlcm4gaW50IGlzd2dyYXBoKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3Y250cmwo
d2ludF90KTsKZXh0ZXJuIGludCBpc3djdHlwZSh3aW50X3QsIHdjdHlwZV90KTsKZXh0ZXJuIHdp
bnRfdCB0b3dsb3dlcih3aW50X3QpOwpleHRlcm4gd2ludF90IHRvd3VwcGVyKHdpbnRfdCk7CmV4
dGVybiB3aW50X3QgZmdldHdjKF9fRklMRSAqKTsKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyh3Y2hh
cl90ICosIGludCwgX19GSUxFICopOwpleHRlcm4gd2ludF90IGZwdXR3Yyh3aW50X3QsIF9fRklM
RSAqKTsKZXh0ZXJuIGludCBmcHV0d3MoY29uc3Qgd2NoYXJfdCAqLCBfX0ZJTEUgKik7CmV4dGVy
biB3aW50X3QgdW5nZXR3Yyh3aW50X3QsIF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Yyhf
X0ZJTEUgKik7CmV4dGVybiB3aW50X3QgZ2V0d2NoYXIodm9pZCk7CmV4dGVybiB3aW50X3QgcHV0
d2Mod2ludF90LCBfX0ZJTEUgKik7CmV4dGVybiB3aW50X3QgcHV0d2NoYXIod2ludF90KTsKZXh0
ZXJuIGRvdWJsZSB3Y3N0b2QoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKZXh0ZXJuIGxv
bmcgd2NzdG9sKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgd2NzdG91bChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCk7CmV4dGVy
biB3Y2hhcl90ICp3Y3NjYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gd2No
YXJfdCAqd2NzY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7CmV4dGVybiBpbnQgd2NzY21w
KGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIGludCB3Y3Njb2xsKGNv
bnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSh3
Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzY3Nwbihjb25zdCB3
Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzbGVuKGNvbnN0IHdj
aGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJf
dCAqLCBzaXplX3QpOwpleHRlcm4gaW50IHdjc25jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3
Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5KHdjaGFyX3QgKiwgY29u
c3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayhjb25zdCB3Y2hh
cl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3Y3NyY2hyKGNvbnN0IHdj
aGFyX3QgKiwgd2NoYXJfdCk7CmV4dGVybiBzaXplX3Qgd2Nzc3BuKGNvbnN0IHdjaGFyX3QgKiwg
Y29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyhjb25zdCB3Y2hhcl90ICos
IGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2Nzd2lkdGgoY29uc3Qgd2NoYXJfdCAqLCBz
aXplX3QpOwpleHRlcm4gc2l6ZV90IHdjc3hmcm0od2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICos
IHNpemVfdCk7CmV4dGVybiBpbnQgd2N3aWR0aChjb25zdCB3Y2hhcl90KTsKZXh0ZXJuIHdjdHlw
ZV90IHdjdHlwZShjb25zdCBjaGFyICopOwojIDE2OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z
cGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvd2NoYXIuaCIgMyA0CmV4dGVybiB3
Y2hhcl90ICpfX3djc3Rva194cGc1KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90
ICoqKTsKZXh0ZXJuIHNpemVfdCBfX3djc2Z0aW1lX3hwZzUod2NoYXJfdCAqLCBzaXplX3QsIGNv
bnN0IHdjaGFyX3QgKiwKICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKik7CiMgMTgwICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS93Y2hh
ci5oIiAzIDQKZXh0ZXJuIHdpbnRfdCBidG93YyhpbnQpOwpleHRlcm4gaW50IGZ3cHJpbnRmKF9f
RklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CmV4dGVybiBpbnQgZndzY2FuZihfX0ZJTEUg
KiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IGZ3aWRlKF9fRklMRSAqLCBpbnQp
OwpleHRlcm4gaW50IG1ic2luaXQoY29uc3QgbWJzdGF0ZV90ICopOwpleHRlcm4gc2l6ZV90IG1i
cmxlbihjb25zdCBjaGFyICosIHNpemVfdCwgbWJzdGF0ZV90ICopOwpleHRlcm4gc2l6ZV90IG1i
cnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbWJzdGF0ZV90ICopOwpleHRl
cm4gc2l6ZV90IG1ic3J0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiosIHNpemVfdCwgbWJz
dGF0ZV90ICopOwpleHRlcm4gaW50IHN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3
Y2hhcl90ICosIC4uLik7CmV4dGVybiBpbnQgc3dzY2FuZihjb25zdCB3Y2hhcl90ICosIGNvbnN0
IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJuIGludCB2ZndwcmludGYoX19GSUxFICosIGNvbnN0IHdj
aGFyX3QgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludCB2d3ByaW50Zihjb25zdCB3Y2hhcl90ICos
IF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdnN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25z
dCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7CmV4dGVybiBzaXplX3Qgd2NydG9tYihjaGFyICosIHdj
aGFyX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMoY2hhciAqLCBjb25z
dCB3Y2hhcl90ICoqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc3N0
cihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2N0b2Iod2lu
dF90KTsKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBz
aXplX3QpOwpleHRlcm4gaW50IHdtZW1jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90
ICosIHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2No
YXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUod2NoYXJfdCAqLCBjb25z
dCB3Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0KHdjaGFyX3QgKiwg
d2NoYXJfdCwgc2l6ZV90KTsKZXh0ZXJuIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiwgLi4u
KTsKZXh0ZXJuIGludCB3c2NhbmYoY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwojIDMxOCAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvd2No
YXIuaCIgMyA0CmV4dGVybiB3aW50X3QgX19mZ2V0d2NfeHBnNShfX0ZJTEUgKik7CmV4dGVybiB3
aW50X3QgX19nZXR3Y194cGc1KF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBfX2dldHdjaGFyX3hw
ZzUodm9pZCk7CmV4dGVybiB3aW50X3QgX19mcHV0d2NfeHBnNSh3aW50X3QsIF9fRklMRSAqKTsK
ZXh0ZXJuIHdpbnRfdCBfX3B1dHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7CmV4dGVybiB3aW50
X3QgX19wdXR3Y2hhcl94cGc1KHdpbnRfdCk7CmV4dGVybiB3Y2hhcl90ICpfX2ZnZXR3c194cGc1
KHdjaGFyX3QgKiwgaW50LCBfX0ZJTEUgKik7CmV4dGVybiBpbnQgX19mcHV0d3NfeHBnNShjb25z
dCB3Y2hhcl90ICosIF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBfX3VuZ2V0d2NfeHBnNSh3aW50
X3QsIF9fRklMRSAqKTsKIyAzNTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4t
c29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3djaGFyLmgiIDMgNAp9CiMgNDQgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDU4ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n
IDo6bWJzdGF0ZV90Owp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9z
LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4K
ICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBf
X3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAg
X19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAg
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUo
X19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01f
b2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhz
dHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAg
IDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1v
ZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y
Kz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0g
X19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFt
b2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAr
PSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9w
ZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7
CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAg
IGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRv
ciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19w
b3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2Zm
IF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3Rh
dGVfdD4gc3RyZWFtcG9zOwoKCgp9CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9m
dW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9k
ZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2Vw
dGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZv
aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9v
Zl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
CiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQzICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3Ry
ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog
ICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVuYW1l
IF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU
PiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAg
IHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29z
dHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxs
b2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
aWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0
b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7
CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFz
aWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBv
c3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmlu
Z3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVh
bTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+
IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0
eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2Zz
dHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJl
YW07CiMgMTI5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAz
Cn0KIyA3OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2Vf
dHlwZXMuaCIgMSAzCiMgNjkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRl
cmF0b3JfYmFzZV90eXBlcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA3MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKc3RydWN0
IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307CnN0
cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307
CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJh
dG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBpbnB1dF9p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50
ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRfaXRlcmF0b3Ig
ewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsK
ICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVm
ZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3Qg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0
eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9DYXRlZ29yeSwgY2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICBjbGFzcyBfUG9p
bnRlciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmPgpzdHJ1Y3QgaXRlcmF0b3Igewog
IHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Bv
aW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVm
IHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5cGVkZWYgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKfTsK
IyAxNzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90
eXBlcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnkoY29u
c3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojpp
dGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1
cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBfSXRl
ciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
Pjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRvcl9j
YXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
aSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXIm
IF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
SXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUq
CnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9faSk7
IH0KCn0KIyA3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jh
c2VfZnVuY3MuaCIgMSAzCiMgNjkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
aXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9jb25jZXB0X2NoZWNrLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9z
cGFyY3Y5LXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM2ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAyIDMKIyA3MCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0
YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmly
c3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KQp7CgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0
ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICBpZiAoX19uID4gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUg
KF9fbisrKSAtLV9faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX2kgKz0g
X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQp7
CgogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0KIyA4
MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDYz
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRf
aXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAg
dHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5
cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9D
b250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs
dWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tf
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29u
dGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRh
aW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90
eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxp
Y2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZf
X3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShj
b25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250
YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250
X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7
IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJl
dHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0
b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5l
cj4KaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRl
cihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRf
aXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1l
IF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIg
Y29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j
ZTsKCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5l
cjo6aXRlcmF0b3IgX19pKQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgaXRlciA9IGNvbnRhaW5lci0+aW5z
ZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgKytpdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBp
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9
CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRo
aXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJl
dHVybiAqdGhpczsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVy
YXRvcj4KaW5saW5lCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFp
bmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6
Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9f
eCwgX19pdGVyKF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9E
aXN0YW5jZSA9IHB0cmRpZmZfdD4KY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
IHsKICB0eXBlZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFs
SXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAg
dHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJl
bmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAg
PSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVyIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9TZWxmJiBvcGVyYXRvcisrKCkg
ewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisr
KGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVy
biBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3Rt
cCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0
IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0
YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0
IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0
YW5jZT4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CiMgMjIyICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9J
dGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3Ig
Y3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
YXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAg
ICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAg
ICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVuY2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0
ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7
CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVy
YXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVy
YXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHt9CiAgdGVtcGxh
dGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKICBpdGVyYXRvcl90
eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9y
KigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0t
X190bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0
b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0
dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAg
PSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9w
ZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxm
IG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50
OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlw
ZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1Nl
bGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCAtPSBfX247
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUg
X19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCArIF9fbik7CiAgfQogIF9TZWxm
JiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5
cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5i
YXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJu
IF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9f
eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2Uo
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPgpvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9f
eC5iYXNlKCkgLSBfX24pOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNz
IF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAg
ICAgICAgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+CmNsYXNzIGlzdHJlYW1faXRlcmF0b3Igewpw
dWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFt
X3R5cGU7CgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVy
ZW5jZTsKCiAgaXN0cmVhbV9pdGVyYXRvcigpIDogX01fc3RyZWFtKDApLCBfTV9vayhmYWxzZSkg
e30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19z
KSB7IF9NX3JlYWQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
X01fdmFsdWU7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJh
dG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fcmVh
ZCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9yIG9wZXJhdG9yKyso
aW50KSB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7
CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBib29sIF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRl
cmF0b3ImIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01fb2spICYmICgh
X01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0pOyB9Cgpwcml2YXRlOgogIGlzdHJl
YW1fdHlwZSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9NX29rOwoKICB2b2lk
IF9NX3JlYWQoKSB7CiAgICBfTV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVl
IDogZmFsc2U7CiAgICBpZiAoX01fb2spIHsKICAgICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsK
ICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8gdHJ1ZSA6IGZhbHNlOwogICAgfQogIH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rp
c3Q+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9D
aGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVy
YXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4gX194Ll9N
X2VxdWFsKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3Mg
X1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgaXN0cmVh
bV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAg
Y29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kp
IHsKICByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwK
ICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KY2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBv
dXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBv
aW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3Ry
ZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQogIG9zdHJl
YW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQogICAgOiBf
TV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+
JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgICAqX01fc3RyZWFtIDw8IF9fdmFs
dWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVy
biAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVy
biAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJu
ICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1
cm4gKnRoaXM7IH0KcHJpdmF0ZToKICBvc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsKICBjb25zdCBf
Q2hhclQqIF9NX3N0cmluZzsKfTsKIyA0NDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1l
IF9Db250YWluZXI+CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRlcmF0b3I8
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAg
ICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAg
ICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUs
CiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIs
CiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5j
ZT4KewoKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgogIHR5cGVk
ZWYgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxfaXRlcmF0
b3JfdHlwZTsKICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5
cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVl
X3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZl
cmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190
eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpy
ZWZlcmVuY2UgcmVmZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChf
SXRlcmF0b3IoKSkgeyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVy
YXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0K
CgogIHJlZmVyZW5jZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9
CgogIHBvaW50ZXIKICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoK
ICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJl
dHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKysoaW50KSB7
IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3JtYWxfaXRl
cmF0b3JfdHlwZSYKICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsg
fQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25v
cm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVyYXRvcltd
KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1cnJlbnRb
X19uXTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0IGRpZmZl
cmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoK
ICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUm
IF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19u
KTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVu
Y2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICBu
b3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f
bikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsg
fQoKICBkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5
cGUmIF9faSkgY29uc3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0K
CiAgY29uc3QgX0l0ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9
Cn07CgoKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs
IHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyBy
ZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5s
aW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBf
Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsg
fQoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0
eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVy
biBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBi
b29sCm9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFp
bmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS
LCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250
YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX3JocyA8
IF9fbGhzKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh
dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAg
ICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhz
KQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+Cm9wZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24p
OyB9Cgp9CiMgODEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2su
aCIgMSAzCiMgODIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEs
IGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAo
X0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKQp7CiAgX1RwIF9fdG1w
ID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3
YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2l0ZXJf
c3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX190bXAg
PSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg
X19iKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYg
X19hLCBjb25zdCBfVHAmIF9fYikgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBf
X2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpp
bmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29t
cGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVy
biBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29u
c3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2Nv
bXApIHsKCiAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0K
IyAxNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3Rh
bmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJz
dCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3Rh
bmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1
bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVy
biBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3Ry
aXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3Vs
dCkKewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAt
IF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0
cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9f
ZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAg
ICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4Mihf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJu
IF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgy
KF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBf
X2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBf
X2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091
dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1Rw
KikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1
eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0
ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90
eXBlKQp7CiAgcmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90
eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgo
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBf
T3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X190cnVlX3R5cGUpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091
dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3Qu
YmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1
dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFs
c2VfdHlwZSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0
SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
bm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4g
X19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2Jh
Y2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9f
biA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVz
dWx0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9f
Y29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0
OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+
OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVj
dGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQp
IHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4Kewog
IHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwg
X1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2Zp
cnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICog
X051bSk7CiAgICByZXR1cm4gX19yZXN1bHQgLSBfTnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwg
X190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29u
c3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dh
cmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3Mg
X0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEg
X19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRz
PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAg
ICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBf
VHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9U
cml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK
fQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9f
Y29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3
YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJk
X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3Vs
dCwgX19mYWxzZV90eXBlKXsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9C
STI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ
MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYg
dHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICBy
ZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNl
KCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9C
STEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3Jt
YWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5
cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3Jt
YWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJh
dG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmly
c3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05v
cm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVy
YXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0
ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
YXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0
dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4K
aW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJz
dCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0
ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0
SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19j
b3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwg
X19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNs
YXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29w
eV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1
bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwg
X19yZXN1bHQpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
Pgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv
bnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJ
dGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192
YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2Zp
cnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGlu
ZSB2b2lkIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0
LAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVk
IGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2Zp
cnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNo
YXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAg
c2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZp
bGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFy
IF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+Cmlu
bGluZSB1bnNpZ25lZCBjaGFyKiBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUg
X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9f
YykKewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJz
dCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZp
bGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24s
IF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4K
aW5saW5lIGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXIm
IF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19m
aXJzdCArIF9fbjsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lu
cHV0SXRlcjI+CnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0Mikg
ewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1
dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0
ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAq
X19maXJzdDIpKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJu
IHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9v
bCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmly
c3QyKQogICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxz
ZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f
Zmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9f
Zmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFw
aGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICgg
OyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsr
X19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAg
ICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0
dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz
dDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2Zp
cnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNp
emVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9
IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJz
dDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0g
MCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNv
Z3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmly
c3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29t
cGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoK
CgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpp
bnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0
MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp
cnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9
CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9f
bGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19s
ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19m
aXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBj
b25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4x
LCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAg
ICAgICAgICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8g
LTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNv
bnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIp
CnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmly
c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop
IF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21w
YXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDYy
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA1NyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lk
CiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Fs
bG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBf
X3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBj
aGFyKiBfX3MpOwp9CiMgNTggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxs
b2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVm
LmgiIDEgMwojIDU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAx
IDMKIyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMg
NjEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDEgMwojIDM3ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9hc3NlcnQuaCIgMSAzIDQKIyAxMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzIDQK
I3ByYWdtYSBpZGVudCAiQCgjKWFzc2VydC5oCTEuOQk5Mi8wNy8xNCBTTUkiCgoKZXh0ZXJuICJD
IiB7CgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBp
bnQpOwoKCgoKCn0KIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNz
ZXJ0LmgiIDIgMwojIDYyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9j
LmgiIDIgMwoKCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJl
YWRzLmgiIDEgMwojIDYyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh
ZHMuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJp
czIuNy9iaXRzL2d0aHIuaCIgMSAzCiMgNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfdGhyZWFkcy5oIiAyIDMKIyA4MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgOTUgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfUmVmY291bnRfQmFzZQp7CgoK
CgogIHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCgogICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291
bnQ7CgoKCgogIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwogIF9SZWZjb3Vu
dF9CYXNlKF9SQ190IF9fbikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhy
ZWFkX211dGV4X3QgX190bXAgPSB7e3swfSwgMH0sIHt7ezB9fX0sIDB9OwogICAgICBfTV9yZWZf
Y291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9CiMgMTQxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsKICAgIF9fZ3Ro
cmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICArK19NX3JlZl9jb3VudDsK
ICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICB9CiAgX1JD
X3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9j
ayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgX19ndGhy
ZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KIyAxOTIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAz
Cn07CiMgMzEzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIg
Mwp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kc3RydWN0IF9TVExfbXV0ZXhfc3BpbiB7CiAgZW51bSB7
IF9fbG93X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9OwoKCiAgc3RhdGljIHVuc2lnbmVk
IF9fbWF4OwogIHN0YXRpYyB1bnNpZ25lZCBfX2xhc3Q7Cn07Cgp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbWF4ID0gX1NUTF9tdXRleF9z
cGluPF9faW5zdD46Ol9fbG93X21heDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNpZ25lZCBf
U1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sYXN0ID0gMDsKIyAzNDAgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfU1RMX211dGV4X2xvY2sK
ewoKCgoKCgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwogIHZvaWQgX01faW5pdGlhbGl6
ZSgpIHsKIyAzNzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o
IiAzCiAgfQogIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211dGV4
X2xvY2soJl9NX2xvY2spOwogIH0KICB2b2lkIF9NX3JlbGVhc2VfbG9jaygpIHsKCgoKICAgIF9f
Z3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogIH0KIyA0ODIgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCn07CiMgNTIxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sK
ewogIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRl
eF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWly
ZV9sb2NrKCk7IH0KICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2Nr
KCk7IH0KCnByaXZhdGU6CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsK
ICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwp9OwoKfQojIDY4ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDk3ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoK
CnRlbXBsYXRlIDxpbnQgX19pbnN0PgpjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZSB7Cgpw
cml2YXRlOgoKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogIHN0YXRpYyB2
b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCAoKiBfX21h
bGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9j
YXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAg
IGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgIHJl
dHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBz
aXplX3QgKQogIHsKICAgIGZyZWUoX19wKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRl
KHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIHZvaWQqIF9fcmVz
dWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jl
c3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgcmV0dXJuIF9fcmVzdWx0
OwogIH0KCiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZiko
KSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVybihfX29s
ZCk7CiAgfQoKfTsKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCogX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoK
dGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19o
YW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9f
bXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBp
ZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsg
fQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1h
bGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0K
fQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAo
KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7
OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFu
ZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJv
d19iYWRfYWxsb2MoKTsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAg
ICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0
dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTww
PiBtYWxsb2NfYWxsb2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3Mg
c2ltcGxlX2FsbG9jIHsKCnB1YmxpYzoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVfdCBf
X24pCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRl
KF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQpCiAg
ICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KICAg
IHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYg
KDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9
CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6ZGVh
bGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KfTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9B
bGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCiAgZW51bSB7X1NfZXh0cmEgPSA4
fTsKCgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAg
ICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9T
X2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3Vs
dCArIChpbnQpIF9TX2V4dHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBf
X3AsIHNpemVfdCBfX24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGlu
dCkgX1NfZXh0cmE7CiAgICAodm9pZCkoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24pIHx8IChf
X2Fzc2VydCgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiIsICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyMTkpLCAwKSk7CiAgICBfQWxsb2M6OmRlYWxsb2Nh
dGUoX19yZWFsX3AsIF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2b2lkKiBy
ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAg
ewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAo
dm9pZCkoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeikgfHwgKF9fYXNzZXJ0KCIqKHNp
emVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oiLCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGxvYy5oIiwgMjI2KSwgMCkpOwogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciop
CiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19l
eHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiArIChpbnQp
IF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAgcmV0dXJu
IF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKfTsKIyAyNzAgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBp
bnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgoKICBl
bnVtIHtfQUxJR04gPSA4fTsKICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICBlbnVtIHtfTkZS
RUVMSVNUUyA9IDE2fTsKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0
ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAmIH4oKHNp
emVfdCkgX0FMSUdOIC0gMSkpOyB9CgogIHVuaW9uIF9PYmogewogICAgICAgIHVuaW9uIF9PYmoq
IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07CiAgfTsK
CiAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFtdOwoKICBzdGF0aWMgc2l6ZV90
IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAgcmV0dXJuICgoKF9f
Ynl0ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsKICB9CgoKICBz
dGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCiAgc3RhdGljIGNoYXIqIF9TX2No
dW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKICBzdGF0aWMgY2hhciog
X1Nfc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgc3RhdGljIHNpemVf
dCBfU19oZWFwX3NpemU7CgoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nfbm9kZV9hbGxv
Y2F0b3JfbG9jazsKCgoKCgogICAgY2xhc3MgX0xvY2s7CiAgICBmcmllbmQgY2xhc3MgX0xvY2s7
CiAgICBjbGFzcyBfTG9jayB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICBfTG9jaygpIHsg
eyBpZiAodGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsg
fTsgfQogICAgICAgICAgICB+X0xvY2soKSB7IHsgaWYgKHRocmVhZHMpIF9TX25vZGVfYWxsb2Nh
dG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH07IH0KICAgIH07CgpwdWJsaWM6CgoKICBzdGF0
aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3JldCA9IDA7Cgog
ICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgX19yZXQgPSBtYWxsb2Nf
YWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX09iaiogdm9sYXRp
bGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9fbik7CgoKCgoKICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgICAgX09i
aiogX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgIGlmIChfX3Jlc3VsdCA9PSAwKQog
ICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICBlbHNlIHsK
ICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsK
ICAgICAgICBfX3JldCA9IF9fcmVzdWx0OwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIF9fcmV0
OwogIH07CgoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikK
ICB7CiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgbWFsbG9jX2FsbG9j
OjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgIGVsc2UgewogICAgICBfT2JqKiB2b2xhdGlsZSog
X19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k
ZXgoX19uKTsKICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsKCgoKCiAgICAgIF9Mb2NrIF9f
bG9ja19pbnN0YW5jZTsKCiAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2Zy
ZWVfbGlzdDsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwoKICAgIH0KICB9CgogIHN0YXRp
YyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19u
ZXdfc3opOwoKfSA7Cgp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiBh
bGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IHNpbmdsZV9j
bGllbnRfYWxsb2M7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh
dGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
IF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3Ro
cmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh
ZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgX19ub2Jq
cykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6
ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19z
dGFydF9mcmVlOwoKICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190b3RhbF9ieXRlcykgewogICAg
ICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFydF9mcmVlICs9IF9f
dG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxzZSBpZiAoX19i
eXRlc19sZWZ0ID49IF9fc2l6ZSkgewogICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xl
ZnQvX19zaXplKTsKICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAg
ICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBf
X3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgewogICAg
ICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAyICogX190b3RhbF9ieXRlcyAr
IF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAgICAgaWYgKF9fYnl0ZXNfbGVm
dCA+IDApIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAg
ICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19i
eXRlc19sZWZ0KTsKCiAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJl
ZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICpfX215X2ZyZWVfbGlz
dCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgIH0KICAgICAgICBfU19zdGFydF9mcmVl
ID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgaWYgKDAgPT0gX1Nfc3Rh
cnRfZnJlZSkgewogICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAgICAgICBfT2JqKiB2b2xh
dGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAg
ICAgZm9yIChfX2kgPSBfX3NpemU7CiAgICAgICAgICAgICAgICAgX19pIDw9IChzaXplX3QpIF9N
QVhfQllURVM7CiAgICAgICAgICAgICAgICAgX19pICs9IChzaXplX3QpIF9BTElHTikgewogICAg
ICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9p
bmRleChfX2kpOwogICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAg
ICAgICAgICAgaWYgKDAgIT0gX19wKSB7CiAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9s
aXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgIF9TX3N0
YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0g
X1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtf
YWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUg
PSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKCiAgICAg
ICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19l
bmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4o
X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KCgoKCgp0ZW1wbGF0ZSA8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQp7CiAgICBpbnQgX19u
b2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jq
cyk7CiAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3Vs
dDsKICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2JqOwogICAgaW50
IF9faTsKCiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAgICBfX215X2Zy
ZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAg
X19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0
X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2kr
KykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9v
YmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2Jq
cyAtIDEgPT0gX19pKSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0
X2xpbmsgPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAg
ICB9CiAgICAgIH0KICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxib29sIHRocmVh
ZHMsIGludCBpbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5z
dD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQp7CiAgICB2
b2lkKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX2NvcHlfc3o7CgogICAgaWYgKF9fb2xkX3N6ID4g
KHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsK
ICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7CiAgICB9CiAgICBpZiAoX1Nf
cm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9fcCk7
CiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6KTsKICAgIF9fY29weV9zeiA9IF9fbmV3
X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICBtZW1jcHkoX19yZXN1bHQs
IF9fcCwgX19jb3B5X3N6KTsKICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7CiAgICByZXR1
cm4oX19yZXN1bHQpOwp9CgoKICAgIHRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z
dD4KICAgIF9TVExfbXV0ZXhfbG9jawogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jawogICAgICAgID0geyB7e3swfSwg
MH0sIHt7ezB9fX0sIDB9IH07CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z
dD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf
c3RhcnRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNo
YXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9m
cmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9
IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnR5cGVuYW1lIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCl9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3Rb
CiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfTkZSRUVM
SVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IH07CiMgNTU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9B
bGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRp
ZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBj
b25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBl
ZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7
CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxs
b2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHt9CiAgYWxsb2NhdG9yKGNv
bnN0IGFsbG9jYXRvciYpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGFsbG9jYXRvcihjb25z
dCBhbGxvY2F0b3I8X1RwMT4mKSB7fQogIH5hbGxvY2F0b3IoKSB7fQoKICBwb2ludGVyIGFkZHJl
c3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIg
YWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAg
X1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVy
biBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6
ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2Nh
dGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShf
X3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAog
ICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0
KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0K
ICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRl
PD4KY2xhc3MgYWxsb2NhdG9yPHZvaWQ+IHsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVf
dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lk
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVm
IHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQg
ewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxsb2Nh
dG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZhbHNl
Owp9CiMgNjMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3Igewog
IF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
ICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50
ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJl
ZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg
X1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsK
ICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2Fs
bG9jYXRvcigpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkKICAgIDog
X191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVtcGxhdGUg
PGNsYXNzIF9UcDE+CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9j
PiYgX19hKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykg
e30KICB+X19hbGxvY2F0b3IoKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkg
Y29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZl
cmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVf
dHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAg
PyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6
ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBf
X3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9f
cCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAg
ICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3Qo
cG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQog
IHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAgdHlwZWRl
ZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2lu
dGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4g
c3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3Ro
ZXI7CiAgfTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7
CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2Fs
bG9jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJl
dHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsK
fQoKCgoKCnRlbXBsYXRlIDxpbnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBf
X21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRl
bXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2Fs
bG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9B
bGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7
Cn0KIyA3NjEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0
cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2Nh
dG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25z
dCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf
VHAsIGFsbG9jYXRvcjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl
c3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190eXBl
OwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0
YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8
X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnN0cnVj
dCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg
X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog
IHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2Nh
dG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAg
ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsK
ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2lt
cGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVk
ZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7
Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1
Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9U
cDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3Qg
Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwg
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2Nh
dG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3Ro
ciwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAg
ICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBj
b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8
X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBf
QWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9j
X3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsK
ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2lt
cGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVk
ZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7
Cn07Cgp9CiMgNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAx
IDMKIyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAxIDMKIyA2NCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMiAzCgpuYW1lc3BhY2Ugc3Rk
CnsKIyA3NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIg
Mwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3Qo
X1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgewpuZXcgKCh2b2lkKikgX19wKSBfVDEoX192
YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1Qx
KiBfX3ApIHsKICBuZXcgKCh2b2lkKikgX19wKSBfVDEoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KaW5saW5lIHZvaWQgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsKICBfX3BvaW50ZXItPn5f
VHAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQKX19kZXN0cm95
X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBf
X2ZhbHNlX3R5cGUpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICBkZXN0cm95KCYqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
PgppbmxpbmUgdm9pZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRl
cmF0b3IsIF9fdHJ1ZV90eXBlKSB7fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3Is
IGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxf
ZGVzdHJ1Y3RvcigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGlu
ZSB2b2lkIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QpIHsKICBfX2Rlc3Ryb3koX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m
aXJzdCkpOwp9CgppbmxpbmUgdm9pZCBfRGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2
b2lkIF9EZXN0cm95KGludCosIGludCopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGxvbmcqLCBs
b25nKikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3koZmxvYXQqLCBmbG9hdCopIHt9CmlubGluZSB2
b2lkIF9EZXN0cm95KGRvdWJsZSosIGRvdWJsZSopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KHdj
aGFyX3QqLCB3Y2hhcl90Kikge30KCgoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBf
Q29uc3RydWN0KF9fcCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2
b2lkIGNvbnN0cnVjdChfVDEqIF9fcCkgewogIF9Db25zdHJ1Y3QoX19wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9EZXN0
cm95KF9fcG9pbnRlcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxp
bmUgdm9pZCBkZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QpIHsKICBfRGVzdHJveShfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp9CiMgNjQgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjMgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDY0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zvcndh
cmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVl
X3R5cGUpCnsKICByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVy
Cl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9f
Y3VyID0gX19yZXN1bHQ7CiAgICAgICAgICAgIHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJz
dCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1RwPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRp
YWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBf
Rm9yd2FyZEl0ZXIKICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX3Jlc3VsdCkp
Owp9CgppbmxpbmUgY2hhciogdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3Qs
IGNvbnN0IGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
KiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmly
c3QpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHdj
aGFyX3QqCnVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3
Y2hhcl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKewog
IG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBf
X2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVy
PgpwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihf
SW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZykKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICAgICAgICB7
CiAgICBmb3IgKCA7IF9fY291bnQgPiAwIDsgLS1fX2NvdW50LCArK19fZmlyc3QsICsrX19jdXIp
CiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIHBhaXI8X0lu
cHV0SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2N1cik7CiAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxf
UmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0ID0gX19m
aXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJk
SXRlcj4oCiAgICAgICAgICAgICAgICAgX19sYXN0LAogICAgICAgICAgICAgICAgIHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFp
cjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0
LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIs
IF9Gb3J3YXJkSXRlcj4KdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQp
IHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+
CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX194LCBfX3RydWVfdHlwZSkKewogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQKX191bmluaXRpYWxp
emVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKewog
IF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgICAgICAgIHsKICAgIGZvciAoIDsg
X19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7
CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSB2b2lk
IF9fdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCwg
X1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BPRF90
eXBlIF9Jc19QT0Q7CiAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X194LCBfSXNfUE9EKCkpOwoKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwPgppbmxpbmUgdm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBfX3VuaW5pdGlh
bGl6ZWRfZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1Rw
PgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX194LCBfX3RydWVfdHlwZSkKewogIHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBf
X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3Mg
X1RwPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3gsIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAg
ICAgICAgICAgIHsKICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCiAgICAgIF9D
b25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSBfRm9yd2Fy
ZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUg
X19uLCBjb25zdCBfVHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90
cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXpl
ZF9maWxsX25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0Zvcndh
cmRJdGVyCnVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBf
X24sIGNvbnN0IF9UcCYgX194KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19m
aXJzdCwgX19uLCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KIyAyNjAgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4K
aW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJkSXRlciBfX21p
ZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAg
ICAgICAgICB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3Qy
LCBfX21pZCk7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfSW5w
dXRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0Zv
cndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKewogIHVuaW5pdGlhbGl6ZWRfZmlsbChf
X3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgICAgICAgIHsKICAgIHJldHVybiB1bmluaXRpYWxp
emVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6
ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAg
X0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0
MSwgX19maXJzdDIpOwogICAgICAgICAgICB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQy
LCBfX2xhc3QyLCBfX3gpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwp9Cgp9CiMgNjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlz
dC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIg
MSAzCiMgNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfbGlzdC5oIiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMg
NjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfbGlzdC5oIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewoKc3RydWN0IF9MaXN0X25vZGVfYmFzZSB7CiAgX0xpc3Rfbm9kZV9iYXNlKiBf
TV9uZXh0OwogIF9MaXN0X25vZGVfYmFzZSogX01fcHJldjsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBfTGlzdF9ub2RlIDogcHVibGljIF9MaXN0X25vZGVfYmFzZSB7CiAgX1RwIF9N
X2RhdGE7Cn07CgpzdHJ1Y3QgX0xpc3RfaXRlcmF0b3JfYmFzZSB7CiAgdHlwZWRlZiBzaXplX3Qg
c2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICBfTGlzdF9u
b2RlX2Jhc2UqIF9NX25vZGU7CgogIF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX0xpc3Rfbm9kZV9iYXNl
KiBfX3gpIDogX01fbm9kZShfX3gpIHt9CiAgX0xpc3RfaXRlcmF0b3JfYmFzZSgpIHt9CgogIHZv
aWQgX01faW5jcigpIHsgX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7IH0KICB2b2lkIF9NX2Rl
Y3IoKSB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9wcmV2OyB9CgogIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9ub2Rl
ID09IF9feC5fTV9ub2RlOwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0xpc3RfaXRlcmF0
b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsK
ICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVj
dCBfTGlzdF9pdGVyYXRvciA6IHB1YmxpYyBfTGlzdF9pdGVyYXRvcl9iYXNlIHsKICB0eXBlZGVm
IF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX0xpc3Rf
aXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CiAgdHlw
ZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1JlZixfUHRyPiBfU2VsZjsKCiAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWYgcmVmZXJl
bmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwoKICBfTGlzdF9pdGVyYXRvcihf
Tm9kZSogX194KSA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194KSB7fQogIF9MaXN0X2l0ZXJhdG9y
KCkge30KICBfTGlzdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KSA6IF9MaXN0X2l0ZXJh
dG9yX2Jhc2UoX194Ll9NX25vZGUpIHt9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiAoKF9Ob2RlKikgX01fbm9kZSktPl9NX2RhdGE7IH0KICBwb2ludGVyIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3Ir
KygpIHsKICAgIHRoaXMtPl9NX2luY3IoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg
b3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICB0aGlzLT5fTV9p
bmNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAg
dGhpcy0+X01fZGVjcigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0t
KGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIHRoaXMtPl9NX2RlY3IoKTsKICAg
IHJldHVybiBfX3RtcDsKICB9Cn07CiMgMTQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2xpc3QuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yLCBi
b29sIF9Jc1N0YXRpYz4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUK
ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3I7IH0KCiAgX0xpc3RfYWxsb2NfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9Ob2RlX2FsbG9jYXRvcihfX2EpIHt9Cgpwcm90
ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpCiAgIHsgcmV0dXJuIF9Ob2Rl
X2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxf
VHA+KiBfX3ApCiAgICB7IF9Ob2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KCnBy
b3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9j
YXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgX05vZGVfYWxsb2NhdG9yOwogIF9MaXN0
X25vZGU8X1RwPiogX01fbm9kZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jYXRvcj4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsK
cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5
cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAg
X0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpIHt9Cgpwcm90ZWN0ZWQ6CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9jYXRv
cj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKICBfTGlzdF9ub2RlPF9UcD4q
IF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CiAgdm9p
ZCBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkgeyBfQWxsb2NfdHlwZTo6ZGVhbGxv
Y2F0ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9ub2RlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfTGlzdF9iYXNlCiAg
OiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsK
cHVibGljOgogIHR5cGVkZWYgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNl
bGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRv
cl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfTGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl
JiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9ub2RlID0gX01fZ2V0X25vZGUoKTsKICAgIF9N
X25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7
CiAgfQogIH5fTGlzdF9iYXNlKCkgewogICAgY2xlYXIoKTsKICAgIF9NX3B1dF9ub2RlKF9NX25v
ZGUpOwogIH0KCiAgdm9pZCBjbGVhcigpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4Kdm9pZApfTGlzdF9iYXNlPF9UcCxfQWxsb2M+OjpjbGVhcigpCnsKICBfTGlzdF9u
b2RlPF9UcD4qIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9NX25vZGUtPl9NX25leHQ7CiAg
d2hpbGUgKF9fY3VyICE9IF9NX25vZGUpIHsKICAgIF9MaXN0X25vZGU8X1RwPiogX190bXAgPSBf
X2N1cjsKICAgIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9fY3VyLT5fTV9uZXh0OwogICAg
X0Rlc3Ryb3koJl9fdG1wLT5fTV9kYXRhKTsKICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICB9CiAg
X01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4K
Y2xhc3MgbGlzdCA6IHByb3RlY3RlZCBfTGlzdF9iYXNlPF9UcCwgX0FsbG9jPgp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVk
ZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIHZv
aWQqIF9Wb2lkX3BvaW50ZXI7CgpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBj
b25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYg
Y29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxf
VHA+IF9Ob2RlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90
eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgpwdWJsaWM6CiAgdHlwZWRlZiBf
TGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0X2l0
ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwoKICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0
b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9y
OwoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9w
dXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7Cgpwcm90ZWN0ZWQ6CiAgX05vZGUq
IF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9UcCYgX194KQogIHsKICAgIF9Ob2RlKiBfX3AgPSBfTV9n
ZXRfbm9kZSgpOwogICAgICAgICAgICAgIHsKICAgICAgX0NvbnN0cnVjdCgmX19wLT5fTV9kYXRh
LCBfX3gpOwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgcmV0
dXJuIF9fcDsKICB9CgogIF9Ob2RlKiBfTV9jcmVhdGVfbm9kZSgpCiAgewogICAgX05vZGUqIF9f
cCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgICAgICAgewogICAgICBfQ29uc3RydWN0KCZfX3At
Pl9NX2RhdGEpOwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
cmV0dXJuIF9fcDsKICB9CgpwdWJsaWM6CiAgZXhwbGljaXQgbGlzdChjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHt9CgogIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gKF9Ob2RlKikoX01fbm9kZS0+X01fbmV4dCk7IH0KICBjb25zdF9p
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIChfTm9kZSopKF9NX25vZGUtPl9NX25leHQp
OyB9CgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX25vZGU7IH0KICBjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJl
Z2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2
ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcihlbmQoKSk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJu
IHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl
bmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsg
fQoKICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZS0+X01fbmV4dCA9PSBfTV9u
b2RlOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7CiAgICBzaXplX3R5cGUgX19yZXN1bHQg
PSAwOwogICAgZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCksIF9fcmVzdWx0KTsKICAgIHJldHVybiBf
X3Jlc3VsdDsKICB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90
eXBlKC0xKTsgfQoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQogIGNv
bnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgcmVmZXJl
bmNlIGJhY2soKSB7IHJldHVybiAqKC0tZW5kKCkpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGJhY2so
KSBjb25zdCB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogIHZvaWQgc3dhcChsaXN0PF9UcCwgX0Fs
bG9jPiYgX194KSB7IHN0ZDo6c3dhcChfTV9ub2RlLCBfX3guX01fbm9kZSk7IH0KCiAgaXRlcmF0
b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7CiAgICBfTm9k
ZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAgX190bXAtPl9NX25leHQgPSBfX3Bv
c2l0aW9uLl9NX25vZGU7CiAgICBfX3RtcC0+X01fcHJldiA9IF9fcG9zaXRpb24uX01fbm9kZS0+
X01fcHJldjsKICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fdG1w
OwogICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7CiAgICByZXR1cm4gX190
bXA7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IHJldHVybiBp
bnNlcnQoX19wb3NpdGlvbiwgX1RwKCkpOyB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4K
ICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBf
SW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAg
IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9feCk7CiAgfQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0
Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZmFsc2VfdHlwZSk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2
b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1
dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChf
X3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB2b2lkIGluc2VydChp
dGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2Zp
bGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KICB2b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogIHZvaWQgcHVzaF9m
cm9udChjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQoYmVnaW4oKSwgX194KTsgfQogIHZvaWQgcHVz
aF9mcm9udCgpIHtpbnNlcnQoYmVnaW4oKSk7fQogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYg
X194KSB7IGluc2VydChlbmQoKSwgX194KTsgfQogIHZvaWQgcHVzaF9iYWNrKCkge2luc2VydChl
bmQoKSk7fQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBfTGlz
dF9ub2RlX2Jhc2UqIF9fbmV4dF9ub2RlID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9uZXh0Owog
ICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3ByZXZfbm9kZSA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01f
cHJldjsKICAgIF9Ob2RlKiBfX24gPSAoX05vZGUqKSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICBf
X3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV4dF9ub2RlOwogICAgX19uZXh0X25vZGUtPl9NX3By
ZXYgPSBfX3ByZXZfbm9kZTsKICAgIF9EZXN0cm95KCZfX24tPl9NX2RhdGEpOwogICAgX01fcHV0
X25vZGUoX19uKTsKICAgIHJldHVybiBpdGVyYXRvcigoX05vZGUqKSBfX25leHRfbm9kZSk7CiAg
fQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CiAg
dm9pZCBjbGVhcigpIHsgX0Jhc2U6OmNsZWFyKCk7IH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBl
IF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19u
ZXdfc2l6ZSkgeyB0aGlzLT5yZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CgogIHZvaWQgcG9w
X2Zyb250KCkgeyBlcmFzZShiZWdpbigpKTsgfQogIHZvaWQgcG9wX2JhY2soKSB7CiAgICBpdGVy
YXRvciBfX3RtcCA9IGVuZCgpOwogICAgZXJhc2UoLS1fX3RtcCk7CiAgfQogIGxpc3Qoc2l6ZV90
eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkKICAgIHsgaW5zZXJ0KGJl
Z2luKCksIF9fbiwgX192YWx1ZSk7IH0KICBleHBsaWNpdCBsaXN0KHNpemVfdHlwZSBfX24pCiAg
ICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IGluc2VydChiZWdpbigpLCBfX24sIF9U
cCgpKTsgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBsaXN0KF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgIGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAg
ICB7IGluc2VydChiZWdpbigpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIGxpc3QoY29uc3QgbGlz
dDxfVHAsIF9BbGxvYz4mIF9feCkgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBp
bnNlcnQoYmVnaW4oKSwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7IH0KCiAgfmxpc3QoKSB7IH0K
CiAgbGlzdDxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYg
X194KTsKCnB1YmxpYzoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9U
cCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KCiAgdm9pZCBfTV9maWxs
X2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdl
cjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlz
cGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50
ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3R5cGUp
IF9fbiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKTsK
CnByb3RlY3RlZDoKICB2b2lkIHRyYW5zZmVyKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGl0ZXJhdG9y
IF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaWYgKF9fcG9zaXRpb24gIT0gX19sYXN0
KSB7CgogICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fcG9zaXRpb24u
X01fbm9kZTsKICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19sYXN0
Ll9NX25vZGU7CiAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9f
Zmlyc3QuX01fbm9kZTsKCgogICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1wID0gX19wb3NpdGlv
bi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBf
X2xhc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAgX19sYXN0Ll9NX25vZGUtPl9NX3ByZXYgPSBf
X2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiA9
IF9fdG1wOwogICAgfQogIH0KCnB1YmxpYzoKICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0
aW9uLCBsaXN0JiBfX3gpIHsKICAgIGlmICghX194LmVtcHR5KCkpCiAgICAgIHRoaXMtPnRyYW5z
ZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogIH0KICB2b2lkIHNwbGlj
ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19pKSB7CiAgICBpdGVyYXRv
ciBfX2ogPSBfX2k7CiAgICArK19fajsKICAgIGlmIChfX3Bvc2l0aW9uID09IF9faSB8fCBfX3Bv
c2l0aW9uID09IF9faikgcmV0dXJuOwogICAgdGhpcy0+dHJhbnNmZXIoX19wb3NpdGlvbiwgX19p
LCBfX2opOwogIH0KICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRl
cmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpZiAoX19maXJzdCAhPSBfX2xh
c3QpCiAgICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CiAg
fQogIHZvaWQgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CiAgdm9pZCB1bmlxdWUoKTsKICB2
b2lkIG1lcmdlKGxpc3QmIF9feCk7CiAgdm9pZCByZXZlcnNlKCk7CiAgdm9pZCBzb3J0KCk7Cgog
IHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiB2b2lkIHJlbW92ZV9pZihfUHJlZGljYXRlKTsK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4gdm9pZCB1bmlxdWUoX0JpbmFyeVBy
ZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+IHZvaWQgbWVy
Z2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwogIHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0
V2Vha09yZGVyaW5nPiB2b2lkIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyk7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3Qg
bGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCnsKICB0
eXBlZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yOwogIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9feC5lbmQoKTsKICBjb25zdF9pdGVy
YXRvciBfX2VuZDIgPSBfX3kuZW5kKCk7CgogIGNvbnN0X2l0ZXJhdG9yIF9faTEgPSBfX3guYmVn
aW4oKTsKICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJlZ2luKCk7CiAgd2hpbGUgKF9faTEg
IT0gX19lbmQxICYmIF9faTIgIT0gX19lbmQyICYmICpfX2kxID09ICpfX2kyKSB7CiAgICArK19f
aTE7CiAgICArK19faTI7CiAgfQogIHJldHVybiBfX2kxID09IF9fZW5kMSAmJiBfX2kyID09IF9f
ZW5kMjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvcjwoY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNh
bF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsX0Fs
bG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4m
IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBsaXN0PF9UcCxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kp
IHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu
ICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgdm9pZApzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIGxpc3Q8X1RwLCBfQWxsb2M+JiBf
X3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkCmxpc3Q8X1RwLCBfQWxsb2M+Ojpf
TV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewog
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGluc2VydChfX3Bvc2l0
aW9uLCAqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p
ZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9U
cCYgX194KQp7CiAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAgIGluc2VydChfX3Bvc2l0aW9u
LCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIGxp
c3Q8X1RwLF9BbGxvYz46Oml0ZXJhdG9yIGxpc3Q8X1RwLCBfQWxsb2M+OjplcmFzZShpdGVyYXRv
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXRlcmF0b3IgX19sYXN0KQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KQogICAgZXJhc2UoX19maXJzdCsrKTsKICByZXR1cm4gX19sYXN0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnJlc2l6ZShz
aXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpCnsKICBpdGVyYXRvciBfX2kgPSBi
ZWdpbigpOwogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYg
X19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytfX2xlbikKICAgIDsKICBpZiAoX19sZW4gPT0g
X19uZXdfc2l6ZSkKICAgIGVyYXNlKF9faSwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQo
KSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+Cmxpc3Q8X1RwLCBfQWxsb2M+JiBsaXN0PF9UcCwgX0FsbG9jPjo6b3BlcmF0b3I9
KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAodGhpcyAhPSAmX194KSB7CiAg
ICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5k
KCk7CiAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAgY29uc3Rf
aXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICpfX2ZpcnN0MSsrID0gKl9fZmlyc3Qy
Kys7CiAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgZXJhc2UoX19maXJzdDEsIF9f
bGFzdDEpOwogICAgZWxzZQogICAgICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIp
OwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwg
Y29uc3QgX1RwJiBfX3ZhbCkgewogIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAgZm9yICggOyBf
X2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ksIC0tX19uKQogICAgKl9faSA9IF9fdmFsOwog
IGlmIChfX24gPiAwKQogICAgaW5zZXJ0KGVuZCgpLCBfX24sIF9fdmFsKTsKICBlbHNlCiAgICBl
cmFzZShfX2ksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fYXNz
aWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdDIsIF9JbnB1dEl0ZXIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCnsKICBpdGVy
YXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogIGZv
ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmly
c3QxLCArK19fZmlyc3QyKQogICAgKl9fZmlyc3QxID0gKl9fZmlyc3QyOwogIGlmIChfX2ZpcnN0
MiA9PSBfX2xhc3QyKQogICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogIGVsc2UKICAgIGlu
c2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmVtb3ZlKGNvbnN0IF9UcCYg
X192YWx1ZSkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFz
dCA9IGVuZCgpOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19u
ZXh0ID0gX19maXJzdDsKICAgICsrX19uZXh0OwogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUp
IGVyYXNlKF9fZmlyc3QpOwogICAgX19maXJzdCA9IF9fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6dW5pcXVlKCkK
ewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgp
OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGl0ZXJhdG9yIF9fbmV4dCA9IF9f
Zmlyc3Q7CiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKCpfX2ZpcnN0ID09
ICpfX25leHQpCiAgICAgIGVyYXNlKF9fbmV4dCk7CiAgICBlbHNlCiAgICAgIF9fZmlyc3QgPSBf
X25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjptZXJnZShsaXN0PF9UcCwgX0Fs
bG9jPiYgX194KQp7CiAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9f
bGFzdDEgPSBlbmQoKTsKICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogIGl0ZXJh
dG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAg
ICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgIHRyYW5zZmVyKF9fZmlyc3QxLCBf
X2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2ZpcnN0MiA9IF9fbmV4dDsKICAgIH0KICAgIGVs
c2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikgdHJhbnNmZXIo
X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9CgppbmxpbmUgdm9pZCBfX0xpc3RfYmFzZV9y
ZXZlcnNlKF9MaXN0X25vZGVfYmFzZSogX19wKQp7CiAgX0xpc3Rfbm9kZV9iYXNlKiBfX3RtcCA9
IF9fcDsKICBkbyB7CiAgICBzdGQ6OnN3YXAoX190bXAtPl9NX25leHQsIF9fdG1wLT5fTV9wcmV2
KTsKICAgIF9fdG1wID0gX190bXAtPl9NX3ByZXY7CiAgfSB3aGlsZSAoX190bXAgIT0gX19wKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBsaXN0PF9U
cCwgX0FsbG9jPjo6cmV2ZXJzZSgpCnsKICBfX0xpc3RfYmFzZV9yZXZlcnNlKHRoaXMtPl9NX25v
ZGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAs
IF9BbGxvYz46OnNvcnQoKQp7CgogIGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYg
X01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0Fs
bG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGlu
dCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNl
KF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAg
ICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAg
ICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jYXJyeSk7CiAgICAgICAgX19jYXJyeS5zd2FwKF9f
Y291bnRlcltfX2krK10pOwogICAgICB9CiAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19p
XSk7CiAgICAgIGlmIChfX2kgPT0gX19maWxsKSArK19fZmlsbDsKICAgIH0KCiAgICBmb3IgKGlu
dCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJn
ZShfX2NvdW50ZXJbX19pLTFdKTsKICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfUHJl
ZGljYXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpyZW1vdmVfaWYoX1ByZWRpY2F0ZSBfX3By
ZWQpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBl
bmQoKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9
IF9fZmlyc3Q7CiAgICArK19fbmV4dDsKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBlcmFzZShf
X2ZpcnN0KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgp2b2lkIGxp
c3Q8X1RwLCBfQWxsb2M+Ojp1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7
CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7
CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgaXRlcmF0b3IgX19uZXh0ID0gX19m
aXJzdDsKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoX19iaW5hcnlfcHJl
ZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIGVyYXNlKF9fbmV4dCk7CiAgICBlbHNlCiAgICAg
IF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRl
cmluZz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6bWVyZ2UobGlzdDxfVHAsIF9BbGxvYz4mIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2Nv
bXApCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0MSA9
IGVuZCgpOwogIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CiAgaXRlcmF0b3IgX19s
YXN0MiA9IF9feC5lbmQoKTsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAg
ICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgIHRyYW5zZmVyKF9fZmlyc3QxLCBf
X2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2ZpcnN0MiA9IF9fbmV4dDsKICAgIH0KICAgIGVs
c2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikgdHJhbnNmZXIo
X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgp2b2lkIGxpc3Q8
X1RwLCBfQWxsb2M+Ojpzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogIGlmIChf
TV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAh
PSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAs
IF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFl
bXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJl
Z2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFf
X2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19j
YXJyeSwgX19jb21wKTsKICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAg
ICAgIH0KICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKICAgICAgaWYgKF9faSA9
PSBfX2ZpbGwpICsrX19maWxsOwogICAgfQoKICAgIGZvciAoaW50IF9faSA9IDE7IF9faSA8IF9f
ZmlsbDsgKytfX2kpCiAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0s
IF9fY29tcCk7CiAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwogIH0KfQoKfQojIDY2ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMzIgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvbGlzdCIgMiAzCiMgNDQgInN0bGluY2wuaCIgMgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbWFwIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9tYXAiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21h
cC5oIiAxIDMKIyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIg
MwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgiIDEgMwoj
IDg1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgODYgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg3ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgODggIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBl
ZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1
Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7
CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQg
cmVzdWx0X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgbXVsdGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAqIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggLyBfX3k7IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0
eV9lbGVtZW50KHBsdXM8X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNz
IF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJl
dHVybiBfVHAoMSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbmVnYXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyBy
ZXR1cm4gLV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195
OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg
eyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxl
c3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCA8PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2Fu
ZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYm
IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkg
Y29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNs
YXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVk
aWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01f
cHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBf
X3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9Q
cmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVk
KF9feCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9u
ZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1
cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UHJlZGljYXRlPgpjbGFzcyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRl
IF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNh
dGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5h
bWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAogICAgICAgICAgICAgICAg
ICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBj
b25zdAogIHsKICAgIHJldHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIo
Y29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRp
Y2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRl
cjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29u
ZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVy
YXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVu
YW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5k
ZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBf
T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFs
dWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3Io
KShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29u
ZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsK
ICB9Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJp
bmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0
IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVu
dF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX2ZuLCBf
QXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmlu
ZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly
c3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3Bl
cmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBl
bmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJp
bmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1l
IF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwg
dmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0
b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3Bl
cmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly
c3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7
CiAgfQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBi
aW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25z
dCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3Vt
ZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4s
IF9BcmcyX3R5cGUoX194KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFz
cyBfT3BlcmF0aW9uMj4KY2xhc3MgdW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4Kewpwcm90ZWN0ZWQ6
CiAgX09wZXJhdGlvbjEgX01fZm4xOwogIF9PcGVyYXRpb24yIF9NX2ZuMjsKcHVibGljOgogIHVu
YXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9f
eSkKICAgIDogX01fZm4xKF9feCksIF9NX2ZuMihfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlv
bjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6
YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fZm4xKF9NX2ZuMihfX3gp
KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24y
PgppbmxpbmUgdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4KY29tcG9zZTEo
Y29uc3QgX09wZXJhdGlvbjEmIF9fZm4xLCBjb25zdCBfT3BlcmF0aW9uMiYgX19mbjIpCnsKICBy
ZXR1cm4gdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4oX19mbjEsIF9fZm4y
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xh
c3MgX09wZXJhdGlvbjM+CmNsYXNzIGJpbmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVu
Y3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPiB7CnByb3RlY3Rl
ZDoKICBfT3BlcmF0aW9uMSBfTV9mbjE7CiAgX09wZXJhdGlvbjIgX01fZm4yOwogIF9PcGVyYXRp
b24zIF9NX2ZuMzsKcHVibGljOgogIGJpbmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBf
X3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3ksCiAgICAgICAgICAgICAgICAgY29uc3QgX09wZXJh
dGlvbjMmIF9feikKICAgIDogX01fZm4xKF9feCksIF9NX2ZuMihfX3kpLCBfTV9mbjMoX196KSB7
IH0KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0
IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfTV9mbjEoX01fZm4yKF9feCksIF9NX2ZuMyhfX3gpKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4K
aW5saW5lIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLCBfT3BlcmF0aW9uMiwgX09wZXJhdGlv
bjM+CmNvbXBvc2UyKGNvbnN0IF9PcGVyYXRpb24xJiBfX2ZuMSwgY29uc3QgX09wZXJhdGlvbjIm
IF9fZm4yLAogICAgICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX19mbjMpCnsKICByZXR1cm4gYmlu
YXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19m
bjEsIF9fZm4yLCBfX2ZuMyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0
PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpw
dWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRl
cl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7
fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9f
eCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9p
bnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpf
X3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jl
c3VsdD4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3Mg
X1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVzdWx0
ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFyeV9m
dW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVz
dWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVz
dWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJu
IF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz
IF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248
X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIp
KSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1
bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gp
IGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1
Y3QgaWRlbnRpdHkgOiBwdWJsaWMgX0lkZW50aXR5PF9UcD4ge307CgoKdGVtcGxhdGUgPGNsYXNz
IF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwg
dHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlw
ZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0Owog
IH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBf
UGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWlyOjpz
ZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194
LnNlY29uZDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRv
cigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDFzdCA6IHB1YmxpYyBfU2Vs
ZWN0MXN0PF9QYWlyPiB7fTsKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0Mm5k
IDogcHVibGljIF9TZWxlY3QybmQ8X1BhaXI+IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwg
Y2xhc3MgX0FyZzI+CnN0cnVjdCBfUHJvamVjdDFzdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X0FyZzEsIF9BcmcyLCBfQXJnMT4gewogIF9BcmcxIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmIF9f
eCwgY29uc3QgX0FyZzImKSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBfUHJvamVjdDJuZCA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfQXJnMj4gewogIF9BcmcyIG9wZXJhdG9yKCkoY29uc3Qg
X0FyZzEmLCBjb25zdCBfQXJnMiYgX195KSBjb25zdCB7IHJldHVybiBfX3k7IH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0MXN0IDogcHVibGlj
IF9Qcm9qZWN0MXN0PF9BcmcxLCBfQXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNs
YXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwg
X0FyZzI+IHt9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgX0NvbnN0YW50
X3ZvaWRfZnVuIHsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUg
X01fdmFsOwoKICBfQ29uc3RhbnRfdm9pZF9mdW4oY29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBf
TV92YWwoX192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyBy
ZXR1cm4gX01fdmFsOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZ3Vt
ZW50PgpzdHJ1Y3QgX0NvbnN0YW50X3VuYXJ5X2Z1biB7CiAgdHlwZWRlZiBfQXJndW1lbnQgYXJn
dW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUg
X01fdmFsOwoKICBfQ29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDog
X01fdmFsKF9fdikge30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfQXJn
dW1lbnQmKSBjb25zdCB7IHJldHVybiBfTV92YWw7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVz
dWx0LCBjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBfQ29uc3RhbnRfYmluYXJ5X2Z1
biB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIg
c2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIF9S
ZXN1bHQgX01fdmFsOwoKICBfQ29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3Yp
IDogX01fdmFsKF9fdikge30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBf
QXJnMSYsIGNvbnN0IF9BcmcyJikgY29uc3QgewogICAgcmV0dXJuIF9NX3ZhbDsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGNvbnN0YW50X3ZvaWRfZnVuIDogcHVibGlj
IF9Db25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiB7CiAgY29uc3RhbnRfdm9pZF9mdW4oY29uc3Qg
X1Jlc3VsdCYgX192KSA6IF9Db25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PihfX3YpIHt9Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJndW1lbnQgPSBfUmVz
dWx0PgpzdHJ1Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVibGljIF9Db25zdGFudF91bmFyeV9m
dW48X1Jlc3VsdCwgX0FyZ3VtZW50Pgp7CiAgY29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1
bHQmIF9fdikKICAgIDogX0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+KF9f
dikge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwKICAgICAgICAgIGNsYXNzIF9Bcmcx
ID0gX1Jlc3VsdCwKICAgICAgICAgIGNsYXNzIF9BcmcyID0gX0FyZzE+CnN0cnVjdCBjb25zdGFu
dF9iaW5hcnlfZnVuCiAgOiBwdWJsaWMgX0NvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCwgX0Fy
ZzEsIF9BcmcyPgp7CiAgY29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCiAg
ICA6IF9Db25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4oX192KSB7fQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxfUmVz
dWx0PiBjb25zdGFudDAoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRf
dm9pZF9mdW48X1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5s
aW5lIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+IGNvbnN0YW50MShjb25zdCBf
UmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVz
dWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRf
YmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4KY29uc3RhbnQyKGNvbnN0IF9SZXN1
bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0
LF9SZXN1bHQ+KF9fdmFsKTsKfQoKCgpjbGFzcyBzdWJ0cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5h
cnlfZnVuY3Rpb248dW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNp
Z25lZCBpbnQgX01fdGFibGVbNTVdOwogIHNpemVfdCBfTV9pbmRleDE7CiAgc2l6ZV90IF9NX2lu
ZGV4MjsKcHVibGljOgogIHVuc2lnbmVkIGludCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX2xp
bWl0KSB7CiAgICBfTV9pbmRleDEgPSAoX01faW5kZXgxICsgMSkgJSA1NTsKICAgIF9NX2luZGV4
MiA9IChfTV9pbmRleDIgKyAxKSAlIDU1OwogICAgX01fdGFibGVbX01faW5kZXgxXSA9IF9NX3Rh
YmxlW19NX2luZGV4MV0gLSBfTV90YWJsZVtfTV9pbmRleDJdOwogICAgcmV0dXJuIF9NX3RhYmxl
W19NX2luZGV4MV0gJSBfX2xpbWl0OwogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplKHVuc2lnbmVk
IGludCBfX3NlZWQpCiAgewogICAgdW5zaWduZWQgaW50IF9fayA9IDE7CiAgICBfTV90YWJsZVs1
NF0gPSBfX3NlZWQ7CiAgICBzaXplX3QgX19pOwogICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NDsg
X19pKyspIHsKICAgICAgICBzaXplX3QgX19paSA9ICgyMSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7
CiAgICAgICAgX01fdGFibGVbX19paV0gPSBfX2s7CiAgICAgICAgX19rID0gX19zZWVkIC0gX19r
OwogICAgICAgIF9fc2VlZCA9IF9NX3RhYmxlW19faWldOwogICAgfQogICAgZm9yIChpbnQgX19s
b29wID0gMDsgX19sb29wIDwgNDsgX19sb29wKyspIHsKICAgICAgICBmb3IgKF9faSA9IDA7IF9f
aSA8IDU1OyBfX2krKykKICAgICAgICAgICAgX01fdGFibGVbX19pXSA9IF9NX3RhYmxlW19faV0g
LSBfTV90YWJsZVsoMSArIF9faSArIDMwKSAlIDU1XTsKICAgIH0KICAgIF9NX2luZGV4MSA9IDA7
CiAgICBfTV9pbmRleDIgPSAzMTsKICB9CgogIHN1YnRyYWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQg
X19zZWVkKSB7IF9NX2luaXRpYWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0aXZlX3JuZygpIHsg
X01faW5pdGlhbGl6ZSgxNjE4MDMzOTh1KTsgfQp9OwojIDU2MiAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChf
X3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNv
bnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipf
TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Jl
Zl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9S
ZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpj
bGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0
PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9f
cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9U
cDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj
bGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAq
LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6Oipf
X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBf
QXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBf
UmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9t
ZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyBy
ZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf
QXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy
ZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6Oipf
X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBf
QXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9S
ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m
dW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVy
biAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykg
Y29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1Rw
PiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9w
ZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2
b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3Rf
bWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2
b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19w
ZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCog
X19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01f
ZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8
dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikg
e30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpw
cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpj
bGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9p
ZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lk
IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lk
IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9U
cCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgog
IHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp
dCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2Yo
X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25z
dCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0Fy
ZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1f
ZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9U
cDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBf
X3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lk
IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf
bWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3Bm
KSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsg
KF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNv
bnN0Owp9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1l
bV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4g
bWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6
Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90
PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVt
X2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9S
ZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9S
ZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBf
QXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6
Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29u
c3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0Fy
ZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2Yp
OyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUg
bWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19m
KShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29u
c3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoq
X19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9U
cCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBf
QXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6
OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsg
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNv
bnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShf
QXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9f
Zik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGlu
ZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoq
X19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2Yp
OyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUg
Y29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bjFfcmVmKF9SZXQgKF9U
cDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1Jl
dCxfVHAsX0FyZz4oX19mKTsgfQoKfQojIDg5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3RyZWUuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnR5cGVkZWYgYm9vbCBfUmJfdHJl
ZV9Db2xvcl90eXBlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVfcmVkID0g
ZmFsc2U7CmNvbnN0IF9SYl90cmVlX0NvbG9yX3R5cGUgX1NfcmJfdHJlZV9ibGFjayA9IHRydWU7
CgpzdHJ1Y3QgX1JiX3RyZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5
cGUgX0NvbG9yX3R5cGU7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsK
CiAgX0NvbG9yX3R5cGUgX01fY29sb3I7CiAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICBfQmFzZV9w
dHIgX01fbGVmdDsKICBfQmFzZV9wdHIgX01fcmlnaHQ7CgogIHN0YXRpYyBfQmFzZV9wdHIgX1Nf
bWluaW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0gMCkg
X194ID0gX194LT5fTV9sZWZ0OwogICAgcmV0dXJuIF9feDsKICB9CgogIHN0YXRpYyBfQmFzZV9w
dHIgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0
ICE9IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAgICByZXR1cm4gX194OwogIH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVmFsdWU+CnN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVl
X25vZGVfYmFzZQp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7
CiAgX1ZhbHVlIF9NX3ZhbHVlX2ZpZWxkOwp9OwoKCnN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJh
dG9yCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsK
ICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICBfQmFzZV9wdHIgX01fbm9kZTsK
CiAgdm9pZCBfTV9pbmNyZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSAw
KSB7CiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9NX25v
ZGUtPl9NX2xlZnQgIT0gMCkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAg
IH0KICAgIGVsc2UgewogICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50Owog
ICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX3JpZ2h0KSB7CiAgICAgICAgX01fbm9kZSA9
IF9feTsKICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBpZiAoX01f
bm9kZS0+X01fcmlnaHQgIT0gX195KQogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgfQoK
ICB2b2lkIF9NX2RlY3JlbWVudCgpCiAgewogICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09IF9T
X3JiX3RyZWVfcmVkICYmCiAgICAgICAgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0g
X01fbm9kZSkKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgZWxzZSBpZiAo
X01fbm9kZS0+X01fbGVmdCAhPSAwKSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5f
TV9sZWZ0OwogICAgICB3aGlsZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICAgIF9feSA9IF9f
eS0+X01fcmlnaHQ7CiAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgICBlbHNlIHsKICAgICAg
X0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUg
PT0gX195LT5fTV9sZWZ0KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBfX3kgPSBf
X3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBfTV9ub2RlID0gX195OwogICAgfQogIH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBf
UmJfdHJlZV9pdGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBl
ZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRl
ZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1
ZSYsIF9WYWx1ZSo+CiAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9W
YWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4KICAgIGNvbnN0X2l0ZXJhdG9yOwog
IHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPgogICAgX1NlbGY7
CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CgogIF9SYl90cmVl
X2l0ZXJhdG9yKCkge30KICBfUmJfdHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBfTV9u
b2RlID0gX194OyB9CiAgX1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpIHsg
X01fbm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qg
eyByZXR1cm4gX0xpbmtfdHlwZShfTV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7IH0KICBwb2ludGVy
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYg
b3BlcmF0b3IrKygpIHsgX01faW5jcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9w
ZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01faW5jcmVtZW50
KCk7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsgX01fZGVj
cmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBf
U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01fZGVjcmVtZW50KCk7CiAgICByZXR1cm4gX190bXA7
CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9S
ZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRl
cmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlID09
IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29u
c3QgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9p
dGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9N
X25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWU+CmlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBf
VmFsdWUqPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJh
dG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feSkgewogIHJldHVy
biBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwg
Y2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfUmJf
dHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX195KSB7
CiAgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9W
YWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+
JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVmFsdWU+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRl
cmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3Qg
X1ZhbHVlKj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoK
aW5saW5lIHZvaWQKX1JiX3RyZWVfcm90YXRlX2xlZnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gs
IF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9SYl90cmVlX25vZGVfYmFzZSogX195
ID0gX194LT5fTV9yaWdodDsKICBfX3gtPl9NX3JpZ2h0ID0gX195LT5fTV9sZWZ0OwogIGlmIChf
X3ktPl9NX2xlZnQgIT0wKQogICAgX195LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3g7CiAgX195
LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICBf
X3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQog
ICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJl
bnQtPl9NX3JpZ2h0ID0gX195OwogIF9feS0+X01fbGVmdCA9IF9feDsKICBfX3gtPl9NX3BhcmVu
dCA9IF9feTsKfQoKaW5saW5lIHZvaWQKX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9SYl90cmVlX25v
ZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfUmJfdHJlZV9u
b2RlX2Jhc2UqIF9feSA9IF9feC0+X01fbGVmdDsKICBfX3gtPl9NX2xlZnQgPSBfX3ktPl9NX3Jp
Z2h0OwogIGlmIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICBfX3ktPl9NX3JpZ2h0LT5fTV9wYXJl
bnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9
PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFy
ZW50LT5fTV9yaWdodCkKICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBlbHNl
CiAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICBfX3ktPl9NX3JpZ2h0ID0gX194
OwogIF9feC0+X01fcGFyZW50ID0gX195Owp9CgppbmxpbmUgdm9pZApfUmJfdHJlZV9yZWJhbGFu
Y2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkK
ewogIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICB3aGlsZSAoX194ICE9IF9fcm9v
dCAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgIGlm
IChfX3gtPl9NX3BhcmVudCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7
CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVu
dC0+X01fcmlnaHQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfU19yYl90cmVl
X3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxh
Y2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194
LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAg
ICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICB9CiAgICAgIGVsc2Ugewog
ICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KSB7CiAgICAgICAgICBf
X3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwg
X19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1Nf
cmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xv
ciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gtPl9N
X3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAg
ICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5f
TV9sZWZ0OwogICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQp
IHsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwog
ICAgICAgIF9feS0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01f
cGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX194
ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAg
ICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAgICBfX3ggPSBf
X3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gsIF9fcm9v
dCk7CiAgICAgICAgfQogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3Ry
ZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf
U19yYl90cmVlX3JlZDsKICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gtPl9NX3BhcmVu
dC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAgfQogIF9fcm9vdC0+X01fY29s
b3IgPSBfU19yYl90cmVlX2JsYWNrOwp9CgppbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNlKgpfUmJf
dHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX2xlZnRtb3N0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRt
b3N0KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7CiAgX1JiX3RyZWVfbm9kZV9i
YXNlKiBfX3ggPSAwOwogIF9SYl90cmVlX25vZGVfYmFzZSogX194X3BhcmVudCA9IDA7CiAgaWYg
KF9feS0+X01fbGVmdCA9PSAwKQogICAgX194ID0gX195LT5fTV9yaWdodDsKICBlbHNlCiAgICBp
ZiAoX195LT5fTV9yaWdodCA9PSAwKQogICAgICBfX3ggPSBfX3ktPl9NX2xlZnQ7CiAgICBlbHNl
IHsKICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9feS0+X01fbGVmdCAh
PSAwKQogICAgICAgIF9feSA9IF9feS0+X01fbGVmdDsKICAgICAgX194ID0gX195LT5fTV9yaWdo
dDsKICAgIH0KICBpZiAoX195ICE9IF9feikgewogICAgX196LT5fTV9sZWZ0LT5fTV9wYXJlbnQg
PSBfX3k7CiAgICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAgICBpZiAoX195ICE9IF9f
ei0+X01fcmlnaHQpIHsKICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICBp
ZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICBfX3ktPl9NX3Bh
cmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgX195LT5fTV9yaWdodCA9IF9fei0+X01fcmlnaHQ7
CiAgICAgIF9fei0+X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feTsKICAgIH0KICAgIGVsc2UKICAg
ICAgX194X3BhcmVudCA9IF9feTsKICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICBfX3Jvb3Qg
PSBfX3k7CiAgICBlbHNlIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAg
IF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgZWxzZQogICAgICBfX3otPl9NX3Bh
cmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9fei0+X01fcGFyZW50
OwogICAgc3RkOjpzd2FwKF9feS0+X01fY29sb3IsIF9fei0+X01fY29sb3IpOwogICAgX195ID0g
X196OwoKICB9CiAgZWxzZSB7CiAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICBp
ZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgaWYgKF9fcm9vdCA9
PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feDsKICAgIGVsc2UKICAgICAgaWYgKF9fei0+X01fcGFy
ZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9f
eDsKICAgICAgZWxzZQogICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feDsKICAg
IGlmIChfX2xlZnRtb3N0ID09IF9feikKICAgICAgaWYgKF9fei0+X01fcmlnaHQgPT0gMCkKICAg
ICAgICBfX2xlZnRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICBlbHNlCiAgICAgICAgX19s
ZWZ0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOwogICAgaWYgKF9f
cmlnaHRtb3N0ID09IF9feikKICAgICAgaWYgKF9fei0+X01fbGVmdCA9PSAwKQogICAgICAgIF9f
cmlnaHRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICBlbHNlCiAgICAgICAgX19yaWdodG1v
c3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsKICB9CiAgaWYgKF9feS0+
X01fY29sb3IgIT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgIHdoaWxlIChfX3ggIT0gX19yb290ICYm
IChfX3ggPT0gMCB8fCBfX3gtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKQogICAgICBp
ZiAoX194ID09IF9feF9wYXJlbnQtPl9NX2xlZnQpIHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jh
c2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgIGlmIChfX3ctPl9NX2NvbG9y
ID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJl
ZV9ibGFjazsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7
CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAg
ICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmICgo
X193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3Ig
PT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0gMCB8
fAogICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFj
aykpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAg
IF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01f
cGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCA9PSAw
IHx8CiAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9i
bGFjaykgewogICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KSBfX3ctPl9NX2xlZnQtPl9NX2Nv
bG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3Ji
X3RyZWVfcmVkOwogICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3Qp
OwogICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgIH0KICAg
ICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9f
eF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ct
Pl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAg
ICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAg
ICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF9SYl90cmVlX25vZGVf
YmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICBpZiAoX193LT5fTV9jb2xv
ciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3Ry
ZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVk
OwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAg
ICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAo
KF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29s
b3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fbGVmdCA9PSAw
IHx8CiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxh
Y2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAg
ICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9N
X3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAw
IHx8CiAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2Js
YWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9j
b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19y
Yl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3Qp
OwogICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgfQogICAg
ICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgX194
X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgaWYgKF9fdy0+
X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAg
ICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAg
IGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgaWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9T
X3JiX3RyZWVfYmxhY2s7CiAgfQogIHJldHVybiBfX3k7Cn0KCgoKCgoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYywgYm9vbCBfU19pbnN0YW5jZWxlc3M+CmNsYXNzIF9SYl90cmVl
X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9U
cCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5
cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9Cgog
IF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01f
bm9kZV9hbGxvY2F0b3IoX19hKSwgX01faGVhZGVyKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5h
bWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46OmFsbG9jYXRvcl90
eXBlCiAgICAgICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBf
TV9oZWFkZXI7CgogIF9SYl90cmVlX25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICAgeyByZXR1
cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9S
Yl90cmVlX25vZGU8X1RwPiogX19wKQogICAgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRl
KF9fcCwgMSk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNz
IF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsIHRydWU+IHsKcHVibGljOgogIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFs
bG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxs
b2NhdG9yX3R5cGUmKSA6IF9NX2hlYWRlcigwKSB7fQoKcHJvdGVjdGVkOgogIF9SYl90cmVlX25v
ZGU8X1RwPiogX01faGVhZGVyOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1Ji
X3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5
cGU7CgogIF9SYl90cmVlX25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICAgeyByZXR1cm4gX0Fs
bG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2Rl
PF9UcD4qIF9fcCkKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1JiX3RyZWVfYmFzZQog
IDogcHVibGljIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs
ZXNzPgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5z
dGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxs
b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9SYl90cmVlX2Jhc2UoY29uc3QgYWxsb2Nh
dG9yX3R5cGUmIF9fYSkKICAgIDogX0Jhc2UoX19hKSB7IF9NX2hlYWRlciA9IF9NX2dldF9ub2Rl
KCk7IH0KICB+X1JiX3RyZWVfYmFzZSgpIHsgX01fcHV0X25vZGUoX01faGVhZGVyKTsgfQoKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwg
Y2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbHVl
PiA+CmNsYXNzIF9SYl90cmVlIDogcHJvdGVjdGVkIF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxs
b2M+IHsKICB0eXBlZGVmIF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxsb2M+IF9CYXNlOwpwcm90
ZWN0ZWQ6CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKICB0eXBlZGVm
IF9SYl90cmVlX25vZGU8X1ZhbHVlPiBfUmJfdHJlZV9ub2RlOwogIHR5cGVkZWYgX1JiX3RyZWVf
Q29sb3JfdHlwZSBfQ29sb3JfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsK
ICB0eXBlZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRl
cjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2
YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9y
ZWZlcmVuY2U7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlKiBfTGlua190eXBlOwogIHR5cGVkZWYg
c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Cgog
IHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwog
IGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0
X2FsbG9jYXRvcigpOyB9Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwog
IHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01faGVhZGVyOwoKcHJv
dGVjdGVkOgoKICBfTGlua190eXBlIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9f
eCkKICB7CiAgICBfTGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICAgICAg
ICB7CiAgICAgIGNvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOwogICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICByZXR1cm4gX190bXA7CiAg
fQoKICBfTGlua190eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgewogICAgX0xp
bmtfdHlwZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAg
X190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsK
ICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICB2b2lkIGRl
c3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICB7CiAgICBkZXN0cm95KCZfX3AtPl9NX3ZhbHVl
X2ZpZWxkKTsKICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgfQoKcHJvdGVjdGVkOgogIHNpemVfdHlw
ZSBfTV9ub2RlX2NvdW50OwogIF9Db21wYXJlIF9NX2tleV9jb21wYXJlOwoKICBfTGlua190eXBl
JiBfTV9yb290KCkgY29uc3QKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5f
TV9wYXJlbnQ7IH0KICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgpIGNvbnN0CiAgICB7IHJldHVy
biAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQogIF9MaW5rX3R5cGUmIF9NX3Jp
Z2h0bW9zdCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01f
cmlnaHQ7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0xpbmtfdHlwZSBfX3gpCiAg
ICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KICBzdGF0aWMgX0xpbmtf
dHlwZSYgX1NfcmlnaHQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYp
KF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3BhcmVudChfTGlua190
eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAg
c3RhdGljIHJlZmVyZW5jZSBfU192YWx1ZShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9f
eC0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3QgX0tleSYgX1Nfa2V5KF9MaW5rX3R5
cGUgX194KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQogIHN0
YXRpYyBfQ29sb3JfdHlwZSYgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAo
X0NvbG9yX3R5cGUmKShfX3gtPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSYgX1Nf
bGVmdChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xl
ZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpCiAgICB7
IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5
cGUmIF9TX3BhcmVudChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShf
X3gtPl9NX3BhcmVudCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9CYXNlX3B0ciBf
X3gpCiAgICB7IHJldHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KICBz
dGF0aWMgY29uc3QgX0tleSYgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiBfS2V5
T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30KICBzdGF0aWMgX0NvbG9yX3R5
cGUmIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9yX3R5cGUmKShf
TGlua190eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19taW5p
bXVtKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25v
ZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOyB9CgogIHN0YXRpYyBfTGlua190eXBlIF9TX21heGlt
dW0oX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9k
ZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7IH0KCnB1YmxpYzoKICB0eXBlZGVmIF9SYl90cmVlX2l0
ZXJhdG9yPHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgdHlwZWRl
ZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3Bv
aW50ZXI+CiAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh
dG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2
ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnByaXZhdGU6CiAgaXRl
cmF0b3IgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVl
X3R5cGUmIF9fdik7CiAgX0xpbmtfdHlwZSBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190
eXBlIF9fcCk7CiAgdm9pZCBfTV9lcmFzZShfTGlua190eXBlIF9feCk7CgpwdWJsaWM6CgogIF9S
Yl90cmVlKCkKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQoMCks
IF9NX2tleV9jb21wYXJlKCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90
cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkp
LCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApCiAgICB7IF9NX2VtcHR5
X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfQmFzZShfX2EpLCBfTV9ub2RlX2NvdW50KDAp
LCBfTV9rZXlfY29tcGFyZShfX2NvbXApCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoK
ICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpLAogICAgICBf
TV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBhcmUpCiAgewog
ICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkKICAgICAgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOwog
ICAgZWxzZSB7CiAgICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfU19yYl90cmVlX3JlZDsKICAg
ICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICBf
TV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICBfTV9yaWdodG1vc3Qo
KSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgIH0KICAgIF9NX25vZGVfY291bnQgPSBfX3gu
X01fbm9kZV9jb3VudDsKICB9CiAgfl9SYl90cmVlKCkgeyBjbGVhcigpOyB9CiAgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29u
c3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194
KTsKCnByaXZhdGU6CiAgdm9pZCBfTV9lbXB0eV9pbml0aWFsaXplKCkgewogICAgX1NfY29sb3Io
X01faGVhZGVyKSA9IF9TX3JiX3RyZWVfcmVkOwoKICAgIF9NX3Jvb3QoKSA9IDA7CiAgICBfTV9s
ZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAg
fQoKcHVibGljOgoKICBfQ29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX2tleV9j
b21wYXJlOyB9CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01faGVhZGVyOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gX01faGVhZGVyOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o
KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IgcmJlZ2luKCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
ZW5kKCkpOwogIH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0
ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3Qg
ewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfQogIGJvb2wg
ZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2NvdW50ID09IDA7IH0KICBzaXplX3R5cGUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7IH0KICBzaXplX3R5cGUgbWF4X3Np
emUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogIHZvaWQgc3dhcChfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3QpIHsKICAgIHN0
ZDo6c3dhcChfTV9oZWFkZXIsIF9fdC5fTV9oZWFkZXIpOwogICAgc3RkOjpzd2FwKF9NX25vZGVf
Y291bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgIHN0ZDo6c3dhcChfTV9rZXlfY29tcGFyZSwg
X190Ll9NX2tleV9jb21wYXJlKTsKICB9CgpwdWJsaWM6CgogIHBhaXI8aXRlcmF0b3IsYm9vbD4g
aW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIGluc2VydF9l
cXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICBpdGVyYXRvciBpbnNlcnRfdW5pcXVlKGl0
ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAgaXRlcmF0b3IgaW5z
ZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydF91bmlxdWUoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKCiAgdm9pZCBlcmFzZShpdGVyYXRvciBf
X3Bvc2l0aW9uKTsKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgdm9p
ZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQgZXJhc2Uo
Y29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90eXBlKiBfX2xhc3QpOwogIHZvaWQg
Y2xlYXIoKSB7CiAgICBpZiAoX01fbm9kZV9jb3VudCAhPSAwKSB7CiAgICAgIF9NX2VyYXNlKF9N
X3Jvb3QoKSk7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIF9NX3Jvb3Qo
KSA9IDA7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICBfTV9ub2RlX2Nv
dW50ID0gMDsKICAgIH0KICB9CgpwdWJsaWM6CgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5
cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z
dDsKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0
b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgbG93
ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgdXBwZXJfYm91
bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29u
c3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxf
cmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3Rf
aXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKcHVibGlj
OgoKICBib29sIF9fcmJfdmVyaWZ5KCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgIGNv
bnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkKewogIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwo
X194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCBfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9f
eC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9f
eS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wKb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09
IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlP
ZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv
b2wKb3BlcmF0b3I+KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0
b3I8PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAg
ICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49
KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAg
ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZApzd2FwKF9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICBfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICBf
X3guc3dhcChfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xh
c3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgpfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpvcGVyYXRvcj0o
Y29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewoKICAgIGNsZWFyKCk7CiAgICBfTV9ub2RlX2Nv
dW50ID0gMDsKICAgIF9NX2tleV9jb21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOwogICAgaWYg
KF9feC5fTV9yb290KCkgPT0gMCkgewogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9sZWZ0
bW9zdCgpID0gX01faGVhZGVyOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAg
IH0KICAgIGVsc2UgewogICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9N
X2hlYWRlcik7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAg
ICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgICBfTV9ub2Rl
X2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICB9CiAgfQogIHJldHVybiAqdGhpczsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAg
ICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9pbnNlcnQo
X0Jhc2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsdWUmIF9fdikKewogIF9M
aW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgX0xpbmtfdHlwZSBfX3kgPSAoX0xp
bmtfdHlwZSkgX195XzsKICBfTGlua190eXBlIF9fejsKCiAgaWYgKF9feSA9PSBfTV9oZWFkZXIg
fHwgX194ICE9IDAgfHwKICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBf
U19rZXkoX195KSkpIHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19sZWZ0
KF9feSkgPSBfX3o7CgogICAgaWYgKF9feSA9PSBfTV9oZWFkZXIpIHsKICAgICAgX01fcm9vdCgp
ID0gX196OwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsKICAgIH0KICAgIGVsc2UgaWYgKF9f
eSA9PSBfTV9sZWZ0bW9zdCgpKQogICAgICBfTV9sZWZ0bW9zdCgpID0gX196OwogIH0KICBlbHNl
IHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19yaWdodChfX3kpID0gX196
OwogICAgaWYgKF9feSA9PSBfTV9yaWdodG1vc3QoKSkKICAgICAgX01fcmlnaHRtb3N0KCkgPSBf
X3o7CiAgfQogIF9TX3BhcmVudChfX3opID0gX195OwogIF9TX2xlZnQoX196KSA9IDA7CiAgX1Nf
cmlnaHQoX196KSA9IDA7CiAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5fTV9w
YXJlbnQpOwogICsrX01fbm9kZV9jb3VudDsKICByZXR1cm4gaXRlcmF0b3IoX196KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAg
ICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwo
Y29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlu
a190eXBlIF9feCA9IF9NX3Jvb3QoKTsKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9f
eDsKICAgIF9feCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9f
eCkpID8KICAgICAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAgcmV0
dXJuIF9NX2luc2VydChfX3gsIF9feSwgX192KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwKICAgICBib29sPgpfUmJfdHJlZTxfS2V5
LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfdW5pcXVlKGNv
bnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtf
dHlwZSBfX3ggPSBfTV9yb290KCk7CiAgYm9vbCBfX2NvbXAgPSB0cnVlOwogIHdoaWxlIChfX3gg
IT0gMCkgewogICAgX195ID0gX194OwogICAgX19jb21wID0gX01fa2V5X2NvbXBhcmUoX0tleU9m
VmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICBfX3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9f
eCkgOiBfU19yaWdodChfX3gpOwogIH0KICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwog
IGlmIChfX2NvbXApCiAgICBpZiAoX19qID09IGJlZ2luKCkpCiAgICAgIHJldHVybiBwYWlyPGl0
ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICBlbHNlCiAg
ICAgIC0tX19qOwogIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19qLl9NX25vZGUpLCBfS2V5
T2ZWYWx1ZSgpKF9fdikpKQogICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX01faW5zZXJ0
KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX2os
IGZhbHNlKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS2V5
T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1l
IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRl
cmF0b3IKX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+
CiAgOjppbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikK
ewogIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KSB7CiAgICBp
ZiAoc2l6ZSgpID4gMCAmJgogICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3Yp
LCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19w
b3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgZWxzZQogICAg
ICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0gZWxzZSBpZiAoX19wb3NpdGlv
bi5fTV9ub2RlID09IF9NX2hlYWRlcikgewogICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShf
TV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVybiBfTV9pbnNl
cnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRf
dW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19w
b3NpdGlvbjsKICAgIC0tX19iZWZvcmU7CiAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9f
YmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgJiYgX01fa2V5X2Nv
bXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpIHsK
ICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgcmV0dXJu
IF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAg
cmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwg
X192KTsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsK
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2Vx
dWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKewogIGlmIChfX3Bvc2l0
aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KSB7CiAgICBpZiAoc2l6ZSgpID4gMCAm
JgogICAgICAgICFfTV9rZXlfY29tcGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwgX0tl
eU9mVmFsdWUoKShfX3YpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25v
ZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNl
cnRfZXF1YWwoX192KTsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFk
ZXIpIHsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXko
X01fcmlnaHRtb3N0KCkpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3Qo
KSwgX192KTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0gZWxz
ZSB7CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwog
ICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9y
ZS5fTV9ub2RlKSkKICAgICAgICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24u
X01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpIHsKICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVm
b3JlLl9NX25vZGUpID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5f
TV9ub2RlLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0
aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICB9IGVsc2UKICAgICAg
cmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0
ZTxjbGFzcyBfSUk+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAg
OjppbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCnsKICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NtcCwg
Y2xhc3MgX0FsbG9jPgogIHRlbXBsYXRlPGNsYXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBf
X2xhc3QpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNl
cnRfdW5pcXVlKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1
ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgX0xpbmtfdHlwZSBf
X3kgPQogICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX19wb3Np
dGlvbi5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX01faGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3JpZ2h0KTsKICBkZXN0cm95X25v
ZGUoX195KTsKICAtLV9NX25vZGVfY291bnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKewogIHBhaXI8aXRlcmF0
b3IsaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7
CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIGVyYXNlKF9fcC5maXJz
dCwgX19wLnNlY29uZCk7CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVu
YW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190
eXBlCl9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2NvcHko
X0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKQp7CgogIF9MaW5rX3R5cGUgX190b3AgPSBf
TV9jbG9uZV9ub2RlKF9feCk7CiAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKCiAgICAgICAgICAg
IHsKICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICBfX3RvcC0+X01fcmlnaHQgPSBfTV9jb3B5
KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgIF9fcCA9IF9fdG9wOwogICAgX194ID0gX1NfbGVm
dChfX3gpOwoKICAgIHdoaWxlIChfX3ggIT0gMCkgewogICAgICBfTGlua190eXBlIF9feSA9IF9N
X2Nsb25lX25vZGUoX194KTsKICAgICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICBfX3ktPl9N
X3BhcmVudCA9IF9fcDsKICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgX195LT5fTV9y
aWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKICAgICAgX19wID0gX195OwogICAg
ICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICB9CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICByZXR1cm4gX190b3A7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+CiAgOjpfTV9lcmFzZShfTGlua190eXBlIF9feCkKewoKICB3aGlsZSAoX194ICE9IDAp
IHsKICAgIF9NX2VyYXNlKF9TX3JpZ2h0KF9feCkpOwogICAgX0xpbmtfdHlwZSBfX3kgPSBfU19s
ZWZ0KF9feCk7CiAgICBkZXN0cm95X25vZGUoX194KTsKICAgIF9feCA9IF9feTsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX2Zp
cnN0LCBpdGVyYXRvciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFz
dCA9PSBlbmQoKSkKICAgIGNsZWFyKCk7CiAgZWxzZQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSBlcmFzZShfX2ZpcnN0KyspOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPgogIDo6ZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29uc3QgX0tleSogX19sYXN0KQp7
CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZSgqX19maXJzdCsrKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAg
ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5
LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9f
aykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01f
cm9vdCgpOwoKICB3aGlsZSAoX194ICE9IDApCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tl
eShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVs
c2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3Io
X195KTsKICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tl
eShfX2ouX01fbm9kZSkpKSA/CiAgICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spIGNv
bnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9N
X3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9T
X2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg
IGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgX19q
ID0gY29uc3RfaXRlcmF0b3IoX195KTsKICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlf
Y29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICBlbmQoKSA6IF9fajsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAg
ICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUKX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6Y291bnQoY29u
c3QgX0tleSYgX19rKSBjb25zdAp7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0
b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9fayk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFu
Y2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3Qg
X0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBf
X3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkKICAgIGlmICghX01fa2V5X2NvbXBh
cmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gp
OwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICByZXR1cm4gaXRlcmF0b3Io
X195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9m
VmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9p
dGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
CiAgOjpsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9f
eSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9f
eCAhPSAwKQogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAg
X195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3Jp
Z2h0KF9feCk7CgogIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OnVwcGVyX2JvdW5kKGNvbnN0IF9LZXkm
IF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0g
X01fcm9vdCgpOwoKICAgd2hpbGUgKF9feCAhPSAwKQogICAgIGlmIChfTV9rZXlfY29tcGFyZShf
X2ssIF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwog
ICAgIGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICByZXR1cm4gaXRlcmF0b3Io
X195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9m
VmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9p
dGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9f
eSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgIHdoaWxlIChf
X3ggIT0gMCkKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAg
ICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBf
U19yaWdodChfX3gpOwoKICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lCnBhaXI8dHlwZW5hbWUgX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAg
ICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6aXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykKewogIHJldHVybiBwYWly
PGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwgdXBwZXJfYm91bmQoX19rKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9Lb1YsIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZQpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9L
ZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yLAogICAg
IHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46
OmNvbnN0X2l0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBf
QWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICByZXR1cm4g
cGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQoX19r
KSk7Cn0KCmlubGluZSBpbnQKX19ibGFja19jb3VudChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fbm9k
ZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCnsKICBpZiAoX19ub2RlID09IDApCiAgICBy
ZXR1cm4gMDsKICBpbnQgX19zdW0gPSAwOwogIGRvIHsKICAgIGlmIChfX25vZGUtPl9NX2NvbG9y
ID09IF9TX3JiX3RyZWVfYmxhY2spCiAgICAgICsrX19zdW07CiAgICBpZiAoX19ub2RlID09IF9f
cm9vdCkKICAgICAgYnJlYWs7CiAgICBfX25vZGUgPSBfX25vZGUtPl9NX3BhcmVudDsKICB9IHdo
aWxlICgxKTsKICByZXR1cm4gX19zdW07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9BbGxvYz4KYm9vbCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CnsKICBpZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8
IGJlZ2luKCkgPT0gZW5kKCkpCiAgICByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwICYmIGJlZ2lu
KCkgPT0gZW5kKCkgJiYKICAgICAgX01faGVhZGVyLT5fTV9sZWZ0ID09IF9NX2hlYWRlciAmJiBf
TV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsKCiAgaW50IF9fbGVuID0gX19ibGFja19j
b3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwogIGZvciAoY29uc3RfaXRlcmF0b3IgX19p
dCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7ICsrX19pdCkgewogICAgX0xpbmtfdHlwZSBfX3gg
PSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0
KF9feCk7CiAgICBfTGlua190eXBlIF9fUiA9IF9TX3JpZ2h0KF9feCk7CgogICAgaWYgKF9feC0+
X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpCiAgICAgIGlmICgoX19MICYmIF9fTC0+X01fY29s
b3IgPT0gX1NfcmJfdHJlZV9yZWQpIHx8CiAgICAgICAgICAoX19SICYmIF9fUi0+X01fY29sb3Ig
PT0gX1NfcmJfdHJlZV9yZWQpKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoX19MICYm
IF9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfU19rZXkoX19MKSkpCiAgICAgIHJldHVybiBm
YWxzZTsKICAgIGlmIChfX1IgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShf
X3gpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGlmICghX19MICYmICFfX1IgJiYgX19ibGFj
a19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4pCiAgICAgIHJldHVybiBmYWxzZTsKICB9
CgogIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShf
TV9yb290KCkpKQogICAgcmV0dXJuIGZhbHNlOwogIGlmIChfTV9yaWdodG1vc3QoKSAhPSBfUmJf
dHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsK
CiAgcmV0dXJuIHRydWU7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs
IGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxv
YyA9IGFsbG9jYXRvcjxfVmFsdWU+ID4Kc3RydWN0IHJiX3RyZWUgOiBwdWJsaWMgX1JiX3RyZWU8
X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4KewogIHR5cGVkZWYg
X1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4gX0Jh
c2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5
cGU7CgogIHJiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCiAgICAg
ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDog
X0Jhc2UoX19jb21wLCBfX2EpIHt9CgogIH5yYl90cmVlKCkge30KfTsKCn0KIyA2MyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfbWFwLmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX21hcC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfbWFwLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBj
bGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBt
YXAKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHVibGljOgoKICB0eXBlZGVmIF9LZXkga2V5
X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBl
OwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBf
Q29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZQogICAgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsKICBmcmllbmQg
Y2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkIDoKICAgIF9D
b21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykg
e30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBj
b25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbXAoX194LmZpcnN0
LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5
X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5
cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7CnB1
YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9y
OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVf
dHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2Vf
dHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9j
YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKCgogIG1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBh
bGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG1hcChjb25zdCBfQ29tcGFyZSYgX19jb21w
LAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5
cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01f
dC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgIGNvbnN0IGFsbG9jYXRvcl90
eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IF9N
X3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbWFwKGNvbnN0IG1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkge30KCiAgbWFwPF9L
ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG1hcDxfS2V5LCBfVHAs
IF9Db21wYXJlLCBfQWxsb2M+JiBfX3gpCiAgewogICAgX01fdCA9IF9feC5fTV90OwogICAgcmV0
dXJuICp0aGlzOwogIH0KCgoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJu
IF9NX3Qua2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsg
cmV0dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFsbG9jYXRvcl90eXBl
IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsgfQoK
ICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5k
KCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIF9NX3QuZW5kKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJu
IF9NX3QucmJlZ2luKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJl
dHVybiBfTV90LnJlbmQoKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0
IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9N
X3QuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXpl
KCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXpl
KCk7IH0KICBfVHAmIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUmIF9faykgewogICAgaXRlcmF0
b3IgX19pID0gbG93ZXJfYm91bmQoX19rKTsKCiAgICBpZiAoX19pID09IGVuZCgpIHx8IGtleV9j
b21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQogICAgICBfX2kgPSBpbnNlcnQoX19pLCB2YWx1ZV90
eXBlKF9faywgX1RwKCkpKTsKICAgIHJldHVybiAoKl9faSkuc2Vjb25kOwogIH0KICB2b2lkIHN3
YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9N
X3QpOyB9CgoKCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYg
X194KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVlKF9feCk7IH0KICBpdGVyYXRvciBp
bnNlcnQoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgcmV0
dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShwb3NpdGlvbiwgX194KTsgfQogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBf
X2xhc3QpOwogIH0KCiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJh
c2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkg
eyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0
LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQog
IHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qg
a2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRv
ciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gp
OyB9CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7CiAgfQogIGl0ZXJhdG9y
IGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3Vu
ZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0
b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2Jv
dW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYg
X194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KCiAgcGFp
cjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewog
ICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRv
cixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3I9PSAoY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVtcGxhdGUgPGNs
YXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBv
cGVyYXRvcjwgKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs
bG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs
bG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
IG9wZXJhdG9yPihjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0o
Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0
dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBt
YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShf
X3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2NSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9tdWx0aW1hcC5oIiAxIDMKIyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfbXVsdGltYXAuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlID0gbGVzczxf
S2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxwYWlyPGNvbnN0IF9LZXks
IF9UcD4gPiA+CmNsYXNzIG11bHRpbWFwOwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9U
cCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195
KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9LZXks
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xhc3MgbXVsdGltYXAK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHVibGljOgoKCgogIHR5cGVkZWYgX0tleSBrZXlf
dHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7
CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9D
b21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21wYXJlIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNsYXNz
IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkOgogICAgX0Nv
bXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7
fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNv
bnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gY29tcChfX3guZmlyc3Qs
IF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlf
dHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBl
Piwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJs
aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5
cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5
cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgp
LCBhbGxvY2F0b3JfdHlwZSgpKSB7IH0KICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFy
ZSYgX19jb21wLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Eg
PSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0
b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX0NvbXBh
cmUmIF9fY29tcCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2Nh
dG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVhbChf
X2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGltYXAoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHsgfQoKICBtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVy
biAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBf
TV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJl
dHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBn
ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCiAg
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgp
IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBf
TV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7
IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1
cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7
IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90
LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgp
OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgp
OyB9CiAgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkg
eyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CgoKCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVl
X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsgfQogIGl0ZXJhdG9y
IGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAg
IHJldHVybiBfTV90Lmluc2VydF9lcXVhbChfX3Bvc2l0aW9uLCBfX3gpOwogIH0KICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF9lcXVhbChfX2Zp
cnN0LCBfX2xhc3QpOwogIH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01f
dC5lcmFzZShfX3Bvc2l0aW9uKTsgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYg
X194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9f
Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3Qp
OyB9CiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgoKCiAgaXRlcmF0b3IgZmluZChj
b25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGNvbnN0X2l0
ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5k
KF9feCk7IH0KICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5
X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVy
YXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
X01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBr
ZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0
ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQogICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBl
cXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9y
YW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBlcXVh
bF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVh
bF9yYW5nZShfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFz
cyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBtdWx0aW1h
cDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBt
dWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xh
c3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNv
bnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9N
X3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9
PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgbXVsdGltYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8
IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195
IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh
cmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBtdWx0aW1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEo
X194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9UcCxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbXVsdGltYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY2ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21hcC5oIiAyIDMKIyAzMiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9tYXAiIDIgMwojIDQ1ICJzdGxpbmNsLmgiIDIKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL3NldCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvc2V0IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zZXQuaCIg
MSAzCiMgNjAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc2V0LmgiIDMKCgoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAxIDMKIyA2MyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zZXQuaCIgMiAzCgojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfc2V0LmgiIDEgMwojIDYzICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3NldC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfc2V0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFz
cyBfQWxsb2MgPSBhbGxvY2F0b3I8X0tleT4gPgpjbGFzcyBzZXQ7Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2V0CnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgpwdWJsaWM6CgogIHR5cGVkZWYgX0tleSBrZXlfdHlw
ZTsKICB0eXBlZGVmIF9LZXkgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21w
YXJlOwogIHR5cGVkZWYgX0NvbXBhcmUgdmFsdWVfY29tcGFyZTsKcHJpdmF0ZToKICB0eXBlZGVm
IF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICBfSWRlbnRp
dHk8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5
cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2lu
dGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIg
Y29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJl
bmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJl
bmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3Rf
aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
UmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5
cGU7CgoKCiAgc2V0KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAg
ZXhwbGljaXQgc2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgIGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29t
cCwgX19hKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgc2V0KF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29t
cGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJz
dCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgc2V0KF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBh
cmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90
eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmly
c3QsIF9fbGFzdCk7IH0KCiAgc2V0KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9f
eCkgOiBfTV90KF9feC5fTV90KSB7fQogIHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIG9wZXJh
dG9yPShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCkKICB7CiAgICBfTV90
ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtleV9j
b21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2
YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigp
OyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRl
cmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVyc2Vf
aXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7
IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3YXAoc2V0PF9LZXksX0NvbXBhcmUs
X0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgogIHBhaXI8aXRlcmF0b3Is
Ym9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcGFpcjx0eXBlbmFtZSBf
UmVwX3R5cGU6Oml0ZXJhdG9yLCBib29sPiBfX3AgPSBfTV90Lmluc2VydF91bmlxdWUoX194KTsK
ICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwog
IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlw
ZSYgX194KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9p
dGVyYXRvcjsKICAgIHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoKF9SZXBfaXRlcmF0b3ImKV9f
cG9zaXRpb24sIF9feCk7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2
b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qp
IHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwogIH0KICB2b2lkIGVy
YXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
OjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1JlcF9pdGVyYXRvciYp
X19wb3NpdGlvbik7CiAgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7
CiAgICByZXR1cm4gX01fdC5lcmFzZShfX3gpOwogIH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9f
Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilf
X2ZpcnN0LCAoX1JlcF9pdGVyYXRvciYpX19sYXN0KTsKICB9CiAgdm9pZCBjbGVhcigpIHsgX01f
dC5jbGVhcigpOyB9CgoKCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7CiAg
fQoKCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5m
aW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29u
c3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9
CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0b3IgdXBwZXJf
Ym91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQo
X194KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiAgcGFpcjxp
dGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAg
cmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixj
b25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgMjE5ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3NldC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xh
c3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3Qgc2V0PF9L
MSxfQzEsX0ExPiYsIGNvbnN0IHNldDxfSzEsX0MxLF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0sxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0
IHNldDxfSzEsX0MxLF9BMT4mLCBjb25zdCBzZXQ8X0sxLF9DMSxfQTE+Jik7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
cmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHNl
dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9f
eS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxs
b2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUs
X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9f
eSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0Fs
bG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJl
LF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g
IShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
X194LnN3YXAoX195KTsKfQoKfQojIDY1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX3NldC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX211
bHRpc2V0LmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX211
bHRpc2V0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9j
aGVjay5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9tdWx0
aXNldC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2Nh
dG9yPF9LZXk+ID4KY2xhc3MgbXVsdGlzZXQ7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0
aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmNsYXNz
IG11bHRpc2V0CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgpwdWJsaWM6CgoKCiAgdHlwZWRl
ZiBfS2V5IGtleV90eXBlOwogIHR5cGVkZWYgX0tleSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Nv
bXBhcmUga2V5X2NvbXBhcmU7CiAgdHlwZWRlZiBfQ29tcGFyZSB2YWx1ZV9jb21wYXJlOwpwcml2
YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAg
ICAgICAgIF9JZGVudGl0eTx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90
eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OmNvbnN0X3BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpjb25zdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
UmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6
ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlw
ZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aXNldCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxv
Y2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG11bHRpc2V0KGNvbnN0IF9Db21wYXJlJiBfX2Nv
bXAsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUo
KSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2Nv
bXAsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl
KCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwg
X19sYXN0KTsgfQoKICBtdWx0aXNldChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxv
Yz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQoKICBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9B
bGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYg
X194KSB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtl
eV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAg
dmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgp
OyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
Z2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01f
dC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsg
fQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4o
KTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgp
OyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQogIHNpemVf
dHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXplX3R5cGUgbWF4
X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3YXAobXVs
dGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsg
fQoKCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcmV0dXJu
IF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgcmV0dXJuIF9NX3QuaW5zZXJ0
X2VxdWFsKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9uLCBfX3gpOwogIH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJz
dCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9N
X3QuZXJhc2UoKF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRpb24pOwogIH0KICBzaXplX3R5cGUgZXJh
c2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsKICB9
CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01f
dC5lcmFzZSgoX1JlcF9pdGVyYXRvciYpX19maXJzdCwgKF9SZXBfaXRlcmF0b3ImKV9fbGFzdCk7
CiAgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgogIHNpemVfdHlwZSBjb3Vu
dChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0K
CgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmlu
ZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z
dCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0
IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQog
IGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9yIHVwcGVyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9f
eCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQogIHBhaXI8aXRl
cmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJl
dHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29u
c3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQojIDIyMCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9tdWx0aXNldC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwg
Y2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVs
dGlzZXQ8X0sxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0
aXNldDxfSzEsX0MxLF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfQzEsIGNs
YXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IG11bHRpc2V0PF9LMSxfQzEs
X0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfSzEsX0MxLF9B
MT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUs
X0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXks
X0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxf
QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBt
dWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9f
eSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tl
eSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv
b2wgb3BlcmF0b3I+PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxv
Yz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRpc2V0
PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG11bHRpc2V0PF9L
ZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY2ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3NldC5oIiAyIDMKIyAzMiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9zZXQiIDIgMwojIDQ2ICJzdGxpbmNsLmgiIDIKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvdmVjdG9yIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF92ZWN0b3IuaCIgMSAzCiMgNjAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
dmVjdG9yLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhj
ZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl
cHQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMu
aCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZv
aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
aW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5n
dGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lk
CiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNjIgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjMgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY1ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjYgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Ro
cm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9p
ZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3df
YmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
cnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9f
cyk7Cn0KIyA2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIg
MSAzCiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDIg
MwoKbmFtZXNwYWNlIHN0ZAp7CiMgNzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvciwgYm9v
bCBfSXNTdGF0aWM+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUK
ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfVmVjdG9yX2FsbG9jX2Jh
c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19h
KSwgX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoK
cHJvdGVjdGVkOgogIGFsbG9jYXRvcl90eXBlIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9UcCogX01f
c3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgX1Rw
KiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3Iu
YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9f
bikKICAgIHsgaWYgKF9fcCkgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIF9fbik7
IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX1Zl
Y3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBl
CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfVmVjdG9yX2FsbG9jX2Jh
c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDAp
LCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgX1RwKiBfTV9zdGFydDsK
ICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUgX0FsbG9j
X3R5cGU7CiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9j
X3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNp
emVfdCBfX24pCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfVmVjdG9yX2Jhc2UKICA6
IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+
CnsKICB0eXBlZGVmIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs
ZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9y
X3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9WZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHsKICAgIF9NX3N0YXJ0ID0gX01fYWxs
b2NhdGUoX19uKTsKICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0OwogICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfTV9zdGFydCArIF9fbjsKICB9CgogIH5fVmVjdG9yX2Jhc2UoKSB7IF9NX2RlYWxsb2Nh
dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOyB9Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgpjbGFzcyB2ZWN0
b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPgp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgpwcml2YXRlOgogIHR5
cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKICB0eXBlZGVmIHZlY3Rvcjxf
VHAsIF9BbGxvYz4gdmVjdG9yX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5
cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCB2
ZWN0b3JfdHlwZT4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9w
b2ludGVyLCB2ZWN0b3JfdHlwZT4gY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB2YWx1ZV90eXBl
JiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7
CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
Y2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2Nh
dG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv
bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnByb3RlY3RlZDoKICB1c2luZyBf
QmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGU7CiAgdXNpbmcg
X0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7CiAgdXNpbmcgX0Jhc2U6
Ol9NX2VuZF9vZl9zdG9yYWdlOwoKcHJvdGVjdGVkOgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVy
YXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0
ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g
aXRlcmF0b3IgKF9NX3N0YXJ0KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKICAg
IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9zdGFydCk7IH0KICBpdGVyYXRvciBlbmQoKSB7
IHJldHVybiBpdGVyYXRvciAoX01fZmluaXNoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9CgogIHJldmVyc2VfaXRl
cmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAg
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQogICAg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJl
Z2luKCkpOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlw
ZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QKICAgIHsg
cmV0dXJuIHNpemVfdHlwZSgtMSkgLyBzaXplb2YoX1RwKTsgfQogIHNpemVfdHlwZSBjYXBhY2l0
eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29m
X3N0b3JhZ2UpIC0gYmVnaW4oKSk7IH0KICBib29sIGVtcHR5KCkgY29uc3QKICAgIHsgcmV0dXJu
IGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f
bikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRv
cltdKHNpemVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KCiAg
dm9pZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICBpZiAoX19uID49
IHRoaXMtPnNpemUoKSkKICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3RvciIpOwogIH0K
CiAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7
IHJldHVybiAoKnRoaXMpW19fbl07IH0KICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9f
bikgY29uc3QKICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsg
fQoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNv
bnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAgeyBfTV9maW5pc2ggPSB1
bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQoKICBleHBsaWNp
dCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoX19uLCBhbGxvY2F0b3JfdHlwZSgp
KQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBf
VHAoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKICAgIDog
X0Jhc2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgX01fZmluaXNoID0g
dW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsgfQoK
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZlY3RvcihfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkgewogICAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdy
YWw7CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK
ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRpYWxpemVfYXV4
KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5cGUpIHsKICAgIF9NX3N0
YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg
KyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19u
LCBfX3ZhbHVlKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk
IF9NX2luaXRpYWxpemVfYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01f
cmFuZ2VfaW5pdGlhbGl6ZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m
aXJzdCkpOwogIH0KCiAgfnZlY3RvcigpIHsgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsg
fQoKICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0Fs
bG9jPiYgX194KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgaWYgKGNhcGFj
aXR5KCkgPCBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7
CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX24sIF9NX3N0YXJ0
LCBfTV9maW5pc2gpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBf
TV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAg
ICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0gX190bXAgKyBfX29sZF9zaXpl
OwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgfQogIH0KCgoK
CgoKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7IF9NX2Zp
bGxfYXNzaWduKF9fbiwgX192YWwpOyB9CiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUg
X19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46
Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19s
YXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9p
ZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVl
X3R5cGUpCiAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwp
OyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3Bh
dGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkK
ICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdCkpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N
X2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAq
YmVnaW4oKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdp
bigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICBjb25z
dF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQoKICB2b2lk
IHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRf
b2Zfc3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19N
X2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsK
ICB9CiAgdm9pZCBwdXNoX2JhY2soKSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9z
dG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19NX2ZpbmlzaDsK
ICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSk7CiAgfQogIHZvaWQgc3dh
cCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIHsKICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194
Ll9NX3N0YXJ0KTsKICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAg
c3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0K
CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7
CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmlu
aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAg
Y29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBl
bHNlCiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IoX19wb3NpdGlvbiksIF9feCk7CiAgICBy
ZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z
aXRpb24pIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlm
IChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkg
ewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAg
ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IoX19wb3NpdGlvbikpOwogICAgcmV0
dXJuIGJlZ2luKCkgKyBfX247CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf
SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNlcnRfZGlzcGF0
Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z
LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19u
LCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv
aWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX3JhbmdlX2luc2Vy
dChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK
ICB9CgogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3Qg
X1RwJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KCiAgdm9p
ZCBfTV9maWxsX2luc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9U
cCYgX194KTsKCiAgdm9pZCBwb3BfYmFjaygpIHsKICAgIC0tX01fZmluaXNoOwogICAgZGVzdHJv
eShfTV9maW5pc2gpOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7
CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNvcHkoX19wb3NpdGlvbiAr
IDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgIC0tX01fZmluaXNoOwogICAgZGVzdHJveShfTV9m
aW5pc2gpOwogICAgcmV0dXJuIF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJh
dG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19pKGNvcHkoX19s
YXN0LCBlbmQoKSwgX19maXJzdCkpOwogICAgZGVzdHJveShfX2ksIGVuZCgpKTsKICAgIF9NX2Zp
bmlzaCA9IF9NX2ZpbmlzaCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX2ZpcnN0
OwogIH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194
KSB7CiAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgZXJhc2UoYmVnaW4oKSArIF9f
bmV3X3NpemUsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXpl
IC0gc2l6ZSgpLCBfX3gpOwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkg
eyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVn
aW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yPgogIHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwgX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogIHsKICAgIHBvaW50ZXIgX19y
ZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgICAgICAgICAgIHsKICAgICAgdW5pbml0aWFs
aXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9p
bml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2Zp
cnN0KTsKICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9N
X3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90
YWcpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9fbik7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAg
ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChp
dGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gs
IGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgpID09
IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195
LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sCm9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rv
cjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShf
X3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgdmVjdG9yPF9U
cCwgX0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAs
IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu
ICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3Qg
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9KGNvbnN0
IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195
KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4m
IF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwg
X195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2ZWN0b3I8X1RwLF9B
bGxvYz4mCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feCkKewogIGlmICgmX194ICE9IHRoaXMpIHsKICAgIGNvbnN0IHNpemVfdHlwZSBf
X3hsZW4gPSBfX3guc2l6ZSgpOwogICAgaWYgKF9feGxlbiA+IGNhcGFjaXR5KCkpIHsKICAgICAg
cG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9feGxlbiwgX194LmJlZ2luKCks
IF9feC5lbmQoKSk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9N
X2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAg
ICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsg
X194bGVuOwogICAgfQogICAgZWxzZSBpZiAoc2l6ZSgpID49IF9feGxlbikgewogICAgICBpdGVy
YXRvciBfX2koY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKSk7CiAgICAgIGRl
c3Ryb3koX19pLCBlbmQoKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29weShfX3guYmVnaW4o
KSwgX194LmJlZ2luKCkgKyBzaXplKCksIF9NX3N0YXJ0KTsKICAgICAgdW5pbml0aWFsaXplZF9j
b3B5KF9feC5iZWdpbigpICsgc2l6ZSgpLCBfX3guZW5kKCksIF9NX2ZpbmlzaCk7CiAgICB9CiAg
ICBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9feGxlbjsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9j
Pjo6X01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpCnsK
ICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVjdG9yPF9UcCwgX0FsbG9jPiBfX3RtcChf
X24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAgX190bXAuc3dhcCgqdGhpcyk7CiAgfQog
IGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmlsbChiZWdpbigpLCBlbmQoKSwgX192YWwp
OwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBz
aXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9fbiwg
X192YWwpLCBlbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNz
aWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgaXRl
cmF0b3IgX19jdXIoYmVnaW4oKSk7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1
ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICBlbHNlCiAg
ICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4Kdm9pZAp2ZWN0b3I8
X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0
LCBfX2xhc3QsIF9fbGVuKTsKCiAgaWYgKF9fbGVuID4gY2FwYWNpdHkoKSkgewogICAgcG9pbnRl
ciBfX3RtcChfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19sYXN0KSk7CiAg
ICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFy
dCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fdG1wOwog
ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9fbGVuOwogIH0K
ICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4pIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpKTsKICAgIGRlc3Ryb3koX19uZXdfZmluaXNo
LCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogIH0KICBlbHNl
IHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkLCBz
aXplKCkpOwogICAgY29weShfX2ZpcnN0LCBfX21pZCwgX01fc3RhcnQpOwogICAgX01fZmluaXNo
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9j
Pjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKewog
IGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChfTV9m
aW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBfVHAgX194X2Nv
cHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zpbmlz
aCAtIDIpLCBpdGVyYXRvcihfTV9maW5pc2gtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0gX194X2Nv
cHk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7
CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRf
c2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xlbikpOwog
ICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgICAgICAgICB7CiAg
ICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCks
IF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25l
d19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2guYmFzZSgpLCBfX3gpOwogICAg
ICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5
KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICBkZXN0cm95KGJl
Z2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y
YWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICBf
TV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf
X25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJh
dG9yIF9fcG9zaXRpb24pCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7
CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmlu
aXNoOwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAy
KSwKICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9z
aXRpb24gPSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6
ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/
IDIgKiBfX29sZF9zaXplIDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0
ZShfX2xlbik7CiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgICAg
ICAgICAgIHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9y
KF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCk7CiAgICAg
ICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko
X19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgZGVzdHJveShiZWdpbigpLCBl
bmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N
X3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25l
d19maW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwg
X0FsbG9jPjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
eCkKewogIGlmIChfX24gIT0gMCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFn
ZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAg
IGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRl
ciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9N
X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNv
cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gp
OwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2Zpbmlz
aCwgX19uIC0gX19lbGVtc19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBf
X24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9u
LCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNf
YWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsK
ICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXpl
ID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4
KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRl
KF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJl
Z2luKCksIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1
bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25l
d19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgp
LCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBf
TV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFn
ZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICAg
IF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4Kdm9p
ZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICBfX3Bv
cyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytfX3BvczsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0
b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBz
aXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAg
IGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewog
ICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsK
ICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2VsZW1z
X2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9f
biwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAg
ICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2Zp
bmlzaCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICB9
CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0Owog
ICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNfYWZ0ZXIpOwogICAgICAgIHVuaW5pdGlhbGl6
ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBf
X24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9u
LCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNf
YWZ0ZXI7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgX19wb3NpdGlvbik7CiAgICAgIH0K
ICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUo
KTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9z
aXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xlbikp
OwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICAgICAgICAg
ICAgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihf
TV9zdGFydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9z
aXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX25ld19maW5pc2gpOwogICAgICAgIF9fbmV3X2Zpbmlz
aAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01f
ZmluaXNoKSwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgZGVzdHJveShfTV9z
dGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgp
OwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKfQojIDY3
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgNjMgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBz
dGQKewoKc3RhdGljIGNvbnN0IGludCBfX1dPUkRfQklUID0gaW50KDgqc2l6ZW9mKHVuc2lnbmVk
IGludCkpOwoKc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAg
dW5zaWduZWQgaW50IF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gs
IHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJs
aWM6CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9y
ZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194KSAqX01fcCB8PSBf
TV9tYXNrOwogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQog
ICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
X0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIGJvb2woKnRoaXMpID09IGJv
b2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiAhYm9vbCgqdGhpcykgJiYgYm9vbChfX3gpOwogIH0KICB2b2lkIGZs
aXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0KfTsKCmlubGluZSB2b2lkIHN3YXAoX0JpdF9yZWZl
cmVuY2UgX194LCBfQml0X3JlZmVyZW5jZSBfX3kpCnsKICBib29sIF9fdG1wID0gX194OwogIF9f
eCA9IF9feTsKICBfX3kgPSBfX3RtcDsKfQoKc3RydWN0IF9CaXRfaXRlcmF0b3JfYmFzZSA6IHB1
YmxpYyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHVuc2lnbmVk
IGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jh
c2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwg
X01fb2Zmc2V0KF9feSkge30KCiAgdm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9NX29mZnNl
dCsrID09IF9fV09SRF9CSVQgLSAxKSB7CiAgICAgIF9NX29mZnNldCA9IDA7CiAgICAgICsrX01f
cDsKICAgIH0KICB9CiAgdm9pZCBfTV9idW1wX2Rvd24oKSB7CiAgICBpZiAoX01fb2Zmc2V0LS0g
PT0gMCkgewogICAgICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsKICAgICAgLS1fTV9wOwog
ICAgfQogIH0KCiAgdm9pZCBfTV9pbmNyKHB0cmRpZmZfdCBfX2kpIHsKICAgIGRpZmZlcmVuY2Vf
dHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09SRF9CSVQ7
CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsKICAgICAgX01f
b2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsKICAgICAgLS1fTV9wOwog
ICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAg
cmV0dXJuIF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAg
fQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7
CiAgICByZXR1cm4gX01fcCA8IF9faS5fTV9wIHx8IChfTV9wID09IF9faS5fTV9wICYmIF9NX29m
ZnNldCA8IF9faS5fTV9vZmZzZXQpOwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9p
dGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzID09IF9faSk7CiAg
fQogIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7
CiAgICByZXR1cm4gX19pIDwgKnRoaXM7CiAgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0
X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwog
IH0KICBib29sIG9wZXJhdG9yPj0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0
IHsKICAgIHJldHVybiAhKCp0aGlzIDwgX19pKTsKICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9w
ZXJhdG9yLShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRv
cl9iYXNlJiBfX3kpIHsKICByZXR1cm4gX19XT1JEX0JJVCAqIChfX3guX01fcCAtIF9feS5fTV9w
KSArIF9feC5fTV9vZmZzZXQgLSBfX3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0IF9CaXRfaXRlcmF0
b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNl
IHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYg
X0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRv
cl9iYXNlKDAsIDApIHt9CiAgX0JpdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWdu
ZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQoKICByZWZl
cmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9N
X29mZnNldCk7IH0KICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0
ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7
CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRv
ciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAg
fQogIGl0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2lu
Y3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlm
ZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAg
IGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBp
dGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0
b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVu
Y2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19p
KTsgfQp9OwoKaW5saW5lIF9CaXRfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNv
bnN0IF9CaXRfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9C
aXRfY29uc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVm
IGJvb2wgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRl
ZiBjb25zdCBib29sKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25z
dF9pdGVyYXRvcjsKCiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNl
KDAsIDApIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWdu
ZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQogIF9CaXRf
Y29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQogICAgOiBfQml0X2l0ZXJh
dG9yX2Jhc2UoX194Ll9NX3AsIF9feC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3JlZmVyZW5jZSBv
cGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVUgPDwg
X01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9i
dW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9y
KysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91
cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItLSgp
IHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVy
YXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsK
ICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRv
ciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVu
Y2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAg
ICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsK
ICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0
IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0g
X19pOwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19p
KSB7CiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7CiAgfQp9OwoKaW5saW5lIF9CaXRfY29uc3Rf
aXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfY29uc3RfaXRlcmF0
b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxs
b2NhdG9yLCBib29sIF9faXNfc3RhdGljPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsKcHVi
bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6
YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBl
IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBf
QnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2Rh
dGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3Rv
cmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVf
dCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19X
T1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAg
aWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01f
c3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zf
c3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1
bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgX01fZGF0
YV9hbGxvY2F0b3I7CiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9N
X2ZpbmlzaDsKICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3Is
IHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBf
QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFs
bG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlw
ZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAg
OiBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3Rl
Y3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxs
b2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICB1bnNpZ25lZCBp
bnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFs
bG9jYXRlKChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0KICB2b2lkIF9NX2Rl
YWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9jX3R5cGU6OmRl
YWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f
ZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRlcmF0b3IgX01f
c3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRf
b2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jh
c2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs
ZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5j
ZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6
OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBf
QmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07Cgp9CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAyIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0FsbG9jPgogIGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9C
dmVjdG9yX2Jhc2U8X0FsbG9jPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGJvb2wgdmFsdWVf
dHlwZTsKICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwog
ICAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVu
Y2UqIHBvaW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogICAg
dHlwZWRlZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25z
dF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHR5cGVuYW1l
IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAg
ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgewogICAgICByZXR1cm4gX0J2
ZWN0b3JfYmFzZTxfQWxsb2M+OjpnZXRfYWxsb2NhdG9yKCk7CiAgICB9CgogIHByb3RlY3RlZDoK
ICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fYml0X2FsbG9jOwogICAgdXNpbmcg
X0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOwogICAgdXNpbmcgX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+OjpfTV9zdGFydDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6
X01fZmluaXNoOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3Rv
cmFnZTsKCiAgcHJvdGVjdGVkOgogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24p
IHsKICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01f
ZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7
CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01fZmluaXNoID0gX01f
c3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIHZvaWQgX01faW5zZXJ0X2F1
eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9N
X3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRp
b24sIF9NX2ZpbmlzaCwgX01fZmluaXNoICsgMSk7CiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7
CiAgICAgICAgKytfTV9maW5pc2g7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90
eXBlIF9fbGVuID0gc2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgICAgdW5z
aWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9f
aSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAg
Kl9faSsrID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCks
IF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01f
c3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRv
cigpOwogICAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFn
ZSA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAg
ICBwdXNoX2JhY2soKl9fZmlyc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAg
ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgX01faW5pdGlhbGl6ZShf
X24pOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0
ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5w
dXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkgewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAg
KytfX3BvczsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZykgewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19u
ID0gMDsKICAgICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAgICAgaWYg
KGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9f
cG9zaXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAg
ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgICAgICBfTV9maW5p
c2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAg
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAg
ICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0
ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7
CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9N
X2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFs
bG9jYXRlKCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9f
V09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihf
X3EsIDApOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICBwdWJsaWM6CiAgICBpdGVyYXRvciBi
ZWdpbigpIHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9m
aW5pc2g7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2Zpbmlz
aDsgfQoKICAgIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVy
YXRvcihlbmQoKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3Qg
ewogICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgICB9CiAgICBy
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkp
OyB9CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICAgIHJldHVy
biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogICAgfQoKICAgIHNpemVfdHlwZSBz
aXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICAgIHNp
emVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICAgIHNp
emVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0IHsKICAgICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9p
dGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigpKTsKICAgIH0KICAgIGJvb2wg
ZW1wdHkoKSBjb25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CgogICAgcmVmZXJlbmNl
IG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlm
ZmVyZW5jZV90eXBlKF9fbikpOyB9CiAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXpl
X3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5
cGUoX19uKSk7IH0KCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0
IHsKICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19yYW5nZV9l
cnJvcigidmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBf
X24pCiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQog
ICAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFu
Z2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rv
cihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBf
QnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBi
b29sIF9fdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsK
ICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2Vu
ZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0
b3Ioc2l6ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9y
X3R5cGUoKSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0
YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3Qg
dmVjdG9yJiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkp
IHsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4o
KSwgX194LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
dGVnZXI+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50
ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAg
ZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAg
IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRp
YWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAg
ICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y
eShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
ICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFs
OwogICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFs
KCkpOwogICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25z
dCB2ZWN0b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAg
ICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUo
KTsKICAgICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHko
X194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2lu
KCkgKyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCgoKCgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsK
ICAgICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01f
ZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24g
LSBzaXplKCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4o
KSArIF9fbiwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0
b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXpl
X3QgX19uLCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAg
IF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0K
CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRj
aChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9m
aWxsX2Fzc2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3Np
Z25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0K
CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9h
dXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1
ciA9IGJlZ2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0g
ZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAg
ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAg
ICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9Cgog
ICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9h
dXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5
cGUgX19sZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICAg
ICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGNvcHkoX19maXJzdCwgX19sYXN0
LCBiZWdpbigpKSwgZW5kKCkpOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y
IF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICAg
IGNvcHkoX19maXJzdCwgX19taWQsIGJlZ2luKCkpOwogICAgICAgIGluc2VydChlbmQoKSwgX19t
aWQsIF9fbGFzdCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9f
bikgewogICAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIHVuc2lnbmVkIGludCog
X19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigp
LCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAg
ICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFn
ZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgfQogICAg
fQoKICAgIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBjb25zdF9y
ZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgcmVmZXJlbmNl
IGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNr
KCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1c2hfYmFjayhib29s
IF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAg
ICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1
eChlbmQoKSwgX194KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYg
X194KSB7CiAgICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3Rk
Ojpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcChfTV9lbmRf
b2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KICAgIGl0ZXJhdG9yIGlu
c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBkaWZm
ZXJlbmNlX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICAgIGlmIChfTV9maW5p
c2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAg
ICAgICpfTV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgo
X19wb3NpdGlvbiwgX194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChp
dGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgICBfTV9maWxsX2luc2VydChfX3Bvcywg
X19uLCBfX3gpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAg
IHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2lu
c2VydF9yYW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2
b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwog
ICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50
ZWdyYWwoKSk7CiAgICB9CgogICAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0
aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID09IDApIHJldHVy
bjsKICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9i
YWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9f
bikpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlw
ZShfX24pLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsK
ICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBt
YXgoc2l6ZSgpLCBfX24pOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9j
KF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24s
IGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAg
ICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5
cGUoX19uKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9y
YWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAg
X01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNl
cnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAg
X01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9w
X2JhY2soKSB7IC0tX01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bv
c2l0aW9uKSB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5
KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgICAgLS1fTV9maW5pc2g7
CiAgICAgIHJldHVybiBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0
b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19s
YXN0LCBlbmQoKSwgX19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9p
ZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAg
IGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJl
bmNlX3R5cGUoX19uZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChl
bmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsK
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQqIF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9l
bmRfb2Zfc3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZv
aWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0
b3I8Ym9vbCwgYWxsb2M+IGJpdF92ZWN0b3I7Cgp9CiMgNjggIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL3ZlY3RvciIgMiAzCiMgNDcgInN0bGluY2wuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvc3RhY2siIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3N0YWNr
IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdGFjay5oIiAxIDMK
IyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdGFjay5oIiAzCgojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjIg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA2MyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdGFjay5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdGFjay5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjUgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAxIDMKIyA2MCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgNjEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfZGVxdWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDYyICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2RlcXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2MyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAyIDMKIyAxMDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoK
aW5saW5lIHNpemVfdCBfX2RlcXVlX2J1Zl9zaXplKHNpemVfdCBfX3NpemUpIHsKICByZXR1cm4g
X19zaXplIDwgNTEyID8gc2l6ZV90KDUxMiAvIF9fc2l6ZSkgOiBzaXplX3QoMSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfRGVxdWVfaXRl
cmF0b3IgewogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gaXRlcmF0
b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAq
PiBjb25zdF9pdGVyYXRvcjsKICBzdGF0aWMgc2l6ZV90IF9TX2J1ZmZlcl9zaXplKCkgeyByZXR1
cm4gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7IH0KCiAgdHlwZWRlZiByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAg
dHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIF9UcCoqIF9NYXBfcG9pbnRlcjsKCiAgdHlwZWRlZiBfRGVxdWVfaXRl
cmF0b3IgX1NlbGY7CgogIF9UcCogX01fY3VyOwogIF9UcCogX01fZmlyc3Q7CiAgX1RwKiBfTV9s
YXN0OwogIF9NYXBfcG9pbnRlciBfTV9ub2RlOwoKICBfRGVxdWVfaXRlcmF0b3IoX1RwKiBfX3gs
IF9NYXBfcG9pbnRlciBfX3kpCiAgICA6IF9NX2N1cihfX3gpLCBfTV9maXJzdCgqX195KSwKICAg
ICAgX01fbGFzdCgqX195ICsgX1NfYnVmZmVyX3NpemUoKSksIF9NX25vZGUoX195KSB7fQogIF9E
ZXF1ZV9pdGVyYXRvcigpIDogX01fY3VyKDApLCBfTV9maXJzdCgwKSwgX01fbGFzdCgwKSwgX01f
bm9kZSgwKSB7fQogIF9EZXF1ZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KQogICAgOiBf
TV9jdXIoX194Ll9NX2N1ciksIF9NX2ZpcnN0KF9feC5fTV9maXJzdCksCiAgICAgIF9NX2xhc3Qo
X194Ll9NX2xhc3QpLCBfTV9ub2RlKF9feC5fTV9ub2RlKSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0
b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cjsgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuIF9NX2N1cjsgfQoKICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0
IF9TZWxmJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVy
X3NpemUoKSkgKiAoX01fbm9kZSAtIF9feC5fTV9ub2RlIC0gMSkgKwogICAgICAoX01fY3VyIC0g
X01fZmlyc3QpICsgKF9feC5fTV9sYXN0IC0gX194Ll9NX2N1cik7CiAgfQoKICBfU2VsZiYgb3Bl
cmF0b3IrKygpIHsKICAgICsrX01fY3VyOwogICAgaWYgKF9NX2N1ciA9PSBfTV9sYXN0KSB7CiAg
ICAgIF9NX3NldF9ub2RlKF9NX25vZGUgKyAxKTsKICAgICAgX01fY3VyID0gX01fZmlyc3Q7CiAg
ICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBf
U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKysqdGhpczsKICAgIHJldHVybiBfX3RtcDsKICB9Cgog
IF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgaWYgKF9NX2N1ciA9PSBfTV9maXJzdCkgewogICAg
ICBfTV9zZXRfbm9kZShfTV9ub2RlIC0gMSk7CiAgICAgIF9NX2N1ciA9IF9NX2xhc3Q7CiAgICB9
CiAgICAtLV9NX2N1cjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShp
bnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLSp0aGlzOwogICAgcmV0dXJuIF9f
dG1wOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICB7CiAg
ICBkaWZmZXJlbmNlX3R5cGUgX19vZmZzZXQgPSBfX24gKyAoX01fY3VyIC0gX01fZmlyc3QpOwog
ICAgaWYgKF9fb2Zmc2V0ID49IDAgJiYgX19vZmZzZXQgPCBkaWZmZXJlbmNlX3R5cGUoX1NfYnVm
ZmVyX3NpemUoKSkpCiAgICAgIF9NX2N1ciArPSBfX247CiAgICBlbHNlIHsKICAgICAgZGlmZmVy
ZW5jZV90eXBlIF9fbm9kZV9vZmZzZXQgPQogICAgICAgIF9fb2Zmc2V0ID4gMCA/IF9fb2Zmc2V0
IC8gZGlmZmVyZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkpCiAgICAgICAgICAgICAgICAgICA6
IC1kaWZmZXJlbmNlX3R5cGUoKC1fX29mZnNldCAtIDEpIC8gX1NfYnVmZmVyX3NpemUoKSkgLSAx
OwogICAgICBfTV9zZXRfbm9kZShfTV9ub2RlICsgX19ub2RlX29mZnNldCk7CiAgICAgIF9NX2N1
ciA9IF9NX2ZpcnN0ICsKICAgICAgICAoX19vZmZzZXQgLSBfX25vZGVfb2Zmc2V0ICogZGlmZmVy
ZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkpKTsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9
CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogIHsKICAgIF9T
ZWxmIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19uOwogIH0KCiAgX1NlbGYm
IG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikgeyByZXR1cm4gKnRoaXMgKz0gLV9fbjsg
fQoKICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgX1Nl
bGYgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX247CiAgfQoKICByZWZlcmVu
Y2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlz
ICsgX19uKTsgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QgeyBy
ZXR1cm4gX01fY3VyID09IF9feC5fTV9jdXI7IH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX1Nl
bGYmIF9feCkgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBfX3gpOyB9CiAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgX1NlbGYmIF9feCkgY29uc3QgewogICAgcmV0dXJuIChfTV9ub2RlID09IF9feC5f
TV9ub2RlKSA/CiAgICAgIChfTV9jdXIgPCBfX3guX01fY3VyKSA6IChfTV9ub2RlIDwgX194Ll9N
X25vZGUpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfU2VsZiYgX194KSBjb25zdCB7IHJl
dHVybiBfX3ggPCAqdGhpczsgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfU2VsZiYgX194KSBj
b25zdCB7IHJldHVybiAhKF9feCA8ICp0aGlzKTsgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBf
U2VsZiYgX194KSBjb25zdCB7IHJldHVybiAhKCp0aGlzIDwgX194KTsgfQoKICB2b2lkIF9NX3Nl
dF9ub2RlKF9NYXBfcG9pbnRlciBfX25ld19ub2RlKSB7CiAgICBfTV9ub2RlID0gX19uZXdfbm9k
ZTsKICAgIF9NX2ZpcnN0ID0gKl9fbmV3X25vZGU7CiAgICBfTV9sYXN0ID0gX01fZmlyc3QgKyBk
aWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAs
IF9SZWYsIF9QdHI+Cm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfRGVxdWVfaXRlcmF0
b3I8X1RwLCBfUmVmLCBfUHRyPiYgX194KQp7CiAgcmV0dXJuIF9feCArIF9fbjsKfQojIDIzOCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYywgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0RlcXVlX2Fs
bG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCxf
QWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBn
ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgX0Rl
cXVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fbm9kZV9h
bGxvY2F0b3IoX19hKSwgX01fbWFwX2FsbG9jYXRvcihfX2EpLAogICAgICBfTV9tYXAoMCksIF9N
X21hcF9zaXplKDApCiAge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190
cmFpdHM8X1RwKiwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NYXBfYWxsb2Nh
dG9yX3R5cGU7CgogIGFsbG9jYXRvcl90eXBlIF9NX25vZGVfYWxsb2NhdG9yOwogIF9NYXBfYWxs
b2NhdG9yX3R5cGUgX01fbWFwX2FsbG9jYXRvcjsKCiAgX1RwKiBfTV9hbGxvY2F0ZV9ub2RlKCkg
ewogICAgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKF9fZGVxdWVfYnVmX3NpemUo
c2l6ZW9mKF9UcCkpKTsKICB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX25vZGUoX1RwKiBfX3ApIHsK
ICAgIF9NX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX2RlcXVlX2J1Zl9zaXplKHNp
emVvZihfVHApKSk7CiAgfQogIF9UcCoqIF9NX2FsbG9jYXRlX21hcChzaXplX3QgX19uKQogICAg
eyByZXR1cm4gX01fbWFwX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFs
bG9jYXRlX21hcChfVHAqKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IF9NX21hcF9hbGxvY2F0b3Iu
ZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KCiAgX1RwKiogX01fbWFwOwogIHNpemVfdCBfTV9tYXBf
c2l6ZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9EZXF1
ZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLCB0cnVlPgp7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8X1RwLF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90
eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxv
Y2F0b3JfdHlwZSgpOyB9CgogIF9EZXF1ZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl
JikgOiBfTV9tYXAoMCksIF9NX21hcF9zaXplKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X0FsbG9jX3R5cGUgX05vZGVfYWxs
b2NfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwKiwgX0FsbG9jPjo6
X0FsbG9jX3R5cGUgX01hcF9hbGxvY190eXBlOwoKICBfVHAqIF9NX2FsbG9jYXRlX25vZGUoKSB7
CiAgICByZXR1cm4gX05vZGVfYWxsb2NfdHlwZTo6YWxsb2NhdGUoX19kZXF1ZV9idWZfc2l6ZShz
aXplb2YoX1RwKSkpOwogIH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbm9kZShfVHAqIF9fcCkgewog
ICAgX05vZGVfYWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fZGVxdWVfYnVmX3NpemUoc2l6
ZW9mKF9UcCkpKTsKICB9CiAgX1RwKiogX01fYWxsb2NhdGVfbWFwKHNpemVfdCBfX24pCiAgICB7
IHJldHVybiBfTWFwX2FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxs
b2NhdGVfbWFwKF9UcCoqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX01hcF9hbGxvY190eXBlOjpk
ZWFsbG9jYXRlKF9fcCwgX19uKTsgfQoKICBfVHAqKiBfTV9tYXA7CiAgc2l6ZV90IF9NX21hcF9z
aXplOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfRGVxdWVf
YmFzZQogIDogcHVibGljIF9EZXF1ZV9hbGxvY19iYXNlPF9UcCxfQWxsb2MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5j
ZWxlc3M+CnsKcHVibGljOgogIHR5cGVkZWYgX0RlcXVlX2FsbG9jX2Jhc2U8X1RwLF9BbGxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6
X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFz
ZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0
b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1Rw
LGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CgogIF9EZXF1ZV9iYXNlKGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EsIHNpemVfdCBfX251bV9lbGVtZW50cykKICAgIDogX0Jh
c2UoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCkKICAgIHsgX01faW5pdGlhbGl6ZV9tYXAo
X19udW1fZWxlbWVudHMpOyB9CiAgX0RlcXVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSkKICAgIDogX0Jhc2UoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCkge30KICB+X0RlcXVl
X2Jhc2UoKTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luaXRpYWxpemVfbWFwKHNpemVfdCk7CiAg
dm9pZCBfTV9jcmVhdGVfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCk7CiAg
dm9pZCBfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpOwog
IGVudW0geyBfU19pbml0aWFsX21hcF9zaXplID0gOCB9OwoKcHJvdGVjdGVkOgogIGl0ZXJhdG9y
IF9NX3N0YXJ0OwogIGl0ZXJhdG9yIF9NX2ZpbmlzaDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgpfRGVxdWVfYmFzZTxfVHAsX0FsbG9jPjo6fl9EZXF1ZV9iYXNlKCkg
ewogIGlmIChfTV9tYXApIHsKICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fc3RhcnQuX01fbm9kZSwg
X01fZmluaXNoLl9NX25vZGUgKyAxKTsKICAgIF9NX2RlYWxsb2NhdGVfbWFwKF9NX21hcCwgX01f
bWFwX3NpemUpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk
Cl9EZXF1ZV9iYXNlPF9UcCxfQWxsb2M+OjpfTV9pbml0aWFsaXplX21hcChzaXplX3QgX19udW1f
ZWxlbWVudHMpCnsKICBzaXplX3QgX19udW1fbm9kZXMgPQogICAgX19udW1fZWxlbWVudHMgLyBf
X2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKSArIDE7CgogIF9NX21hcF9zaXplID0gbWF4KChz
aXplX3QpIF9TX2luaXRpYWxfbWFwX3NpemUsIF9fbnVtX25vZGVzICsgMik7CiAgX01fbWFwID0g
X01fYWxsb2NhdGVfbWFwKF9NX21hcF9zaXplKTsKCiAgX1RwKiogX19uc3RhcnQgPSBfTV9tYXAg
KyAoX01fbWFwX3NpemUgLSBfX251bV9ub2RlcykgLyAyOwogIF9UcCoqIF9fbmZpbmlzaCA9IF9f
bnN0YXJ0ICsgX19udW1fbm9kZXM7CgogICAgICAgICAgICB7CiAgICBfTV9jcmVhdGVfbm9kZXMo
X19uc3RhcnQsIF9fbmZpbmlzaCk7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgogIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9fbnN0YXJ0KTsKICBfTV9m
aW5pc2guX01fc2V0X25vZGUoX19uZmluaXNoIC0gMSk7CiAgX01fc3RhcnQuX01fY3VyID0gX01f
c3RhcnQuX01fZmlyc3Q7CiAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdCAr
CiAgICAgICAgICAgICAgIF9fbnVtX2VsZW1lbnRzICUgX19kZXF1ZV9idWZfc2l6ZShzaXplb2Yo
X1RwKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfRGVxdWVf
YmFzZTxfVHAsX0FsbG9jPjo6X01fY3JlYXRlX25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBf
X25maW5pc2gpCnsKICBfVHAqKiBfX2N1cjsKICAgICAgICAgICAgewogICAgZm9yIChfX2N1ciA9
IF9fbnN0YXJ0OyBfX2N1ciA8IF9fbmZpbmlzaDsgKytfX2N1cikKICAgICAgKl9fY3VyID0gX01f
YWxsb2NhdGVfbm9kZSgpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk
Cl9EZXF1ZV9iYXNlPF9UcCxfQWxsb2M+OjpfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0
LCBfVHAqKiBfX25maW5pc2gpCnsKICBmb3IgKF9UcCoqIF9fbiA9IF9fbnN0YXJ0OyBfX24gPCBf
X25maW5pc2g7ICsrX19uKQogICAgX01fZGVhbGxvY2F0ZV9ub2RlKCpfX24pOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIGRlcXVl
IDogcHJvdGVjdGVkIF9EZXF1ZV9iYXNlPF9UcCwgX0FsbG9jPiB7CgoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0eXBlZGVmIF9EZXF1
ZV9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVf
dHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0
eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBl
ZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxv
Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxv
Y2F0b3IoKTsgfQoKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIGl0
ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0
X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiBy
ZXZlcnNlX2l0ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHR5cGVkZWYgcG9pbnRlciogX01hcF9wb2lu
dGVyOwogIHN0YXRpYyBzaXplX3QgX1NfYnVmZmVyX3NpemUoKSB7IHJldHVybiBfX2RlcXVlX2J1
Zl9zaXplKHNpemVvZihfVHApKTsgfQoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9pbml0
aWFsaXplX21hcDsKICB1c2luZyBfQmFzZTo6X01fY3JlYXRlX25vZGVzOwogIHVzaW5nIF9CYXNl
OjpfTV9kZXN0cm95X25vZGVzOwogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZV9ub2RlOwogIHVz
aW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlX25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRl
X21hcDsKICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZV9tYXA7CgogIHVzaW5nIF9CYXNlOjpf
TV9tYXA7CiAgdXNpbmcgX0Jhc2U6Ol9NX21hcF9zaXplOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFy
dDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gX01fc3RhcnQ7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7
IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAg
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVy
c2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihfTV9maW5pc2gp
OyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihf
TV9zdGFydCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7
IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy
YXRvcihfTV9zdGFydCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikK
ICAgIHsgcmV0dXJuIF9NX3N0YXJ0W2RpZmZlcmVuY2VfdHlwZShfX24pXTsgfQogIGNvbnN0X3Jl
ZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IHJldHVybiBfTV9z
dGFydFtkaWZmZXJlbmNlX3R5cGUoX19uKV07IH0KCiAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXpl
X3R5cGUgX19uKSBjb25zdCB7CiAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgX190
aHJvd19yYW5nZV9lcnJvcigiZGVxdWUiKTsKICB9CgogIHJlZmVyZW5jZSBhdChzaXplX3R5cGUg
X19uKQogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAg
Y29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2No
ZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgcmVmZXJlbmNlIGZyb250KCkgeyBy
ZXR1cm4gKl9NX3N0YXJ0OyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7CiAgICBpdGVyYXRvciBfX3Rt
cCA9IF9NX2ZpbmlzaDsKICAgIC0tX190bXA7CiAgICByZXR1cm4gKl9fdG1wOwogIH0KICBjb25z
dF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqX01fc3RhcnQ7IH0KICBjb25zdF9y
ZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX01fZmlu
aXNoOwogICAgLS1fX3RtcDsKICAgIHJldHVybiAqX190bXA7CiAgfQoKICBzaXplX3R5cGUgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaCAtIF9NX3N0YXJ0OyB9CiAgc2l6ZV90eXBlIG1h
eF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogIGJvb2wgZW1wdHkoKSBj
b25zdCB7IHJldHVybiBfTV9maW5pc2ggPT0gX01fc3RhcnQ7IH0KCnB1YmxpYzoKICBleHBsaWNp
dCBkZXF1ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAg
IDogX0Jhc2UoX19hLCAwKSB7fQogIGRlcXVlKGNvbnN0IGRlcXVlJiBfX3gpIDogX0Jhc2UoX194
LmdldF9hbGxvY2F0b3IoKSwgX194LnNpemUoKSkKICAgIHsgdW5pbml0aWFsaXplZF9jb3B5KF9f
eC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsgfQogIGRlcXVlKHNpemVfdHlwZSBfX24s
IGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUsCiAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hLCBfX24pCiAgICB7IF9NX2ZpbGxf
aW5pdGlhbGl6ZShfX3ZhbHVlKTsgfQogIGV4cGxpY2l0IGRlcXVlKHNpemVfdHlwZSBfX24pIDog
X0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSwgX19uKQogICAgeyBfTV9maWxsX2luaXRpYWxpemUodmFs
dWVfdHlwZSgpKTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGRlcXVl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2Ep
IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50
ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xh
c3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lk
IF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1
ZV90eXBlKSB7CiAgICBfTV9pbml0aWFsaXplX21hcChfX24pOwogICAgX01fZmlsbF9pbml0aWFs
aXplKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2lu
aXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5n
ZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7CiAgfQoKICB+ZGVxdWUoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0KCiAg
ZGVxdWUmIG9wZXJhdG9yPSAoY29uc3QgZGVxdWUmIF9feCkgewogICAgY29uc3Qgc2l6ZV90eXBl
IF9fbGVuID0gc2l6ZSgpOwogICAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgICBpZiAoX19sZW4g
Pj0gX194LnNpemUoKSkKICAgICAgICBlcmFzZShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks
IF9NX3N0YXJ0KSwgX01fZmluaXNoKTsKICAgICAgZWxzZSB7CiAgICAgICAgY29uc3RfaXRlcmF0
b3IgX19taWQgPSBfX3guYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX2xlbik7CiAgICAgICAg
Y29weShfX3guYmVnaW4oKSwgX19taWQsIF9NX3N0YXJ0KTsKICAgICAgICBpbnNlcnQoX01fZmlu
aXNoLCBfX21pZCwgX194LmVuZCgpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICp0aGlzOwog
IH0KCiAgdm9pZCBzd2FwKGRlcXVlJiBfX3gpIHsKICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194
Ll9NX3N0YXJ0KTsKICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAg
c3RkOjpzd2FwKF9NX21hcCwgX194Ll9NX21hcCk7CiAgICBzdGQ6OnN3YXAoX01fbWFwX3NpemUs
IF9feC5fTV9tYXBfc2l6ZSk7CiAgfQoKcHVibGljOgoKCgoKCiAgdm9pZCBfTV9maWxsX2Fzc2ln
bihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgICBpZiAoX19uID4gc2l6ZSgp
KSB7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgICAgaW5zZXJ0KGVuZCgp
LCBfX24gLSBzaXplKCksIF9fdmFsKTsKICAgIH0KICAgIGVsc2UgewogICAgICBlcmFzZShiZWdp
bigpICsgX19uLCBlbmQoKSk7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAg
IH0KICB9CgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsK
ICAgIF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1
dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5w
dXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2go
X19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKcHJpdmF0ZToKCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwg
X0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90
eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlw
ZSkgewogICAgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv
cnkoX19maXJzdCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv
aWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0gMDsK
ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogICAgaWYgKF9fbGVuID4gc2l6
ZSgpKSB7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICBhZHZh
bmNlKF9fbWlkLCBzaXplKCkpOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsK
ICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgIH0KICAgIGVsc2UKICAgICAg
ZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgfQoKcHVibGlj
OgoKICB2b2lkIHB1c2hfYmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3QpIHsKICAgIGlmIChfTV9m
aW5pc2guX01fY3VyICE9IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkgewogICAgICBjb25zdHJ1Y3Qo
X01fZmluaXNoLl9NX2N1ciwgX190KTsKICAgICAgKytfTV9maW5pc2guX01fY3VyOwogICAgfQog
ICAgZWxzZQogICAgICBfTV9wdXNoX2JhY2tfYXV4KF9fdCk7CiAgfQoKICB2b2lkIHB1c2hfYmFj
aygpIHsKICAgIGlmIChfTV9maW5pc2guX01fY3VyICE9IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkg
ewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLl9NX2N1cik7CiAgICAgICsrX01fZmluaXNoLl9N
X2N1cjsKICAgIH0KICAgIGVsc2UKICAgICAgX01fcHVzaF9iYWNrX2F1eCgpOwogIH0KCiAgdm9p
ZCBwdXNoX2Zyb250KGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkgewogICAgaWYgKF9NX3N0YXJ0Ll9N
X2N1ciAhPSBfTV9zdGFydC5fTV9maXJzdCkgewogICAgICBjb25zdHJ1Y3QoX01fc3RhcnQuX01f
Y3VyIC0gMSwgX190KTsKICAgICAgLS1fTV9zdGFydC5fTV9jdXI7CiAgICB9CiAgICBlbHNlCiAg
ICAgIF9NX3B1c2hfZnJvbnRfYXV4KF9fdCk7CiAgfQoKICB2b2lkIHB1c2hfZnJvbnQoKSB7CiAg
ICBpZiAoX01fc3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2ZpcnN0KSB7CiAgICAgIGNvbnN0
cnVjdChfTV9zdGFydC5fTV9jdXIgLSAxKTsKICAgICAgLS1fTV9zdGFydC5fTV9jdXI7CiAgICB9
CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfZnJvbnRfYXV4KCk7CiAgfQoKCiAgdm9pZCBwb3BfYmFj
aygpIHsKICAgIGlmIChfTV9maW5pc2guX01fY3VyICE9IF9NX2ZpbmlzaC5fTV9maXJzdCkgewog
ICAgICAtLV9NX2ZpbmlzaC5fTV9jdXI7CiAgICAgIGRlc3Ryb3koX01fZmluaXNoLl9NX2N1cik7
CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3BvcF9iYWNrX2F1eCgpOwogIH0KCiAgdm9pZCBwb3Bf
ZnJvbnQoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2xhc3QgLSAx
KSB7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyKTsKICAgICAgKytfTV9zdGFydC5fTV9j
dXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3BvcF9mcm9udF9hdXgoKTsKICB9CgpwdWJsaWM6
CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYg
X194KSB7CiAgICBpZiAocG9zaXRpb24uX01fY3VyID09IF9NX3N0YXJ0Ll9NX2N1cikgewogICAg
ICBwdXNoX2Zyb250KF9feCk7CiAgICAgIHJldHVybiBfTV9zdGFydDsKICAgIH0KICAgIGVsc2Ug
aWYgKHBvc2l0aW9uLl9NX2N1ciA9PSBfTV9maW5pc2guX01fY3VyKSB7CiAgICAgIHB1c2hfYmFj
ayhfX3gpOwogICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2ZpbmlzaDsKICAgICAgLS1fX3RtcDsK
ICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogICAgZWxzZSB7CiAgICAgIHJldHVybiBfTV9pbnNl
cnRfYXV4KHBvc2l0aW9uLCBfX3gpOwogICAgfQogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zaXRpb24pCiAgICB7IHJldHVybiBpbnNlcnQoX19wb3NpdGlvbiwgdmFsdWVfdHlw
ZSgpKTsgfQoKICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29u
c3QgdmFsdWVfdHlwZSYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gp
OyB9CgogIHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24s
IGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdl
cjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNlcnRfZGlz
cGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9f
cG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkgewogICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9f
biwgKHZhbHVlX3R5cGUpIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgaW5zZXJ0
KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwog
IH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUm
IF9feCkgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpOwogICAgaWYgKF9fbmV3
X3NpemUgPCBfX2xlbikKICAgICAgZXJhc2UoX01fc3RhcnQgKyBfX25ld19zaXplLCBfTV9maW5p
c2gpOwogICAgZWxzZQogICAgICBpbnNlcnQoX01fZmluaXNoLCBfX25ld19zaXplIC0gX19sZW4s
IF9feCk7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgbmV3X3NpemUpIHsgcmVzaXplKG5l
d19zaXplLCB2YWx1ZV90eXBlKCkpOyB9CgpwdWJsaWM6CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0
b3IgX19wb3MpIHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fcG9zOwogICAgKytfX25leHQ7CiAg
ICBzaXplX3R5cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgICBpZiAoX19pbmRleCA8
IChzaXplKCkgPj4gMSkpIHsKICAgICAgY29weV9iYWNrd2FyZChfTV9zdGFydCwgX19wb3MsIF9f
bmV4dCk7CiAgICAgIHBvcF9mcm9udCgpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX19u
ZXh0LCBfTV9maW5pc2gsIF9fcG9zKTsKICAgICAgcG9wX2JhY2soKTsKICAgIH0KICAgIHJldHVy
biBfTV9zdGFydCArIF9faW5kZXg7CiAgfQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2Zp
cnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKTsKCnByb3RlY3RlZDoKCiAgdm9p
ZCBfTV9maWxsX2luaXRpYWxpemUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSk7CgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKcHJvdGVjdGVkOgoKICB2b2lkIF9NX3B1c2hfYmFja19h
dXgoY29uc3QgdmFsdWVfdHlwZSYpOwogIHZvaWQgX01fcHVzaF9iYWNrX2F1eCgpOwogIHZvaWQg
X01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYpOwogIHZvaWQgX01fcHVzaF9mcm9u
dF9hdXgoKTsKICB2b2lkIF9NX3BvcF9iYWNrX2F1eCgpOwogIHZvaWQgX01fcG9wX2Zyb250X2F1
eCgpOwoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bv
cywKICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgaXRlcmF0
b3IgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KTsK
ICBpdGVyYXRvciBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zKTsKICB2b2lkIF9NX2luc2Vy
dF9hdXgoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9f
eCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0
X2F1eChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIF9fbik7CgogIGl0ZXJhdG9yIF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQo
c2l6ZV90eXBlIF9fbikgewogICAgc2l6ZV90eXBlIF9fdmFjYW5jaWVzID0gX01fc3RhcnQuX01f
Y3VyIC0gX01fc3RhcnQuX01fZmlyc3Q7CiAgICBpZiAoX19uID4gX192YWNhbmNpZXMpCiAgICAg
IF9NX25ld19lbGVtZW50c19hdF9mcm9udChfX24gLSBfX3ZhY2FuY2llcyk7CiAgICByZXR1cm4g
X01fc3RhcnQgLSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9CgogIGl0ZXJhdG9yIF9NX3Jlc2Vy
dmVfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUgX19uKSB7CiAgICBzaXplX3R5cGUgX192YWNh
bmNpZXMgPSAoX01fZmluaXNoLl9NX2xhc3QgLSBfTV9maW5pc2guX01fY3VyKSAtIDE7CiAgICBp
ZiAoX19uID4gX192YWNhbmNpZXMpCiAgICAgIF9NX25ld19lbGVtZW50c19hdF9iYWNrKF9fbiAt
IF9fdmFjYW5jaWVzKTsKICAgIHJldHVybiBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19u
KTsKICB9CgogIHZvaWQgX01fbmV3X2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19l
bGVtZW50cyk7CiAgdm9pZCBfTV9uZXdfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUgX19uZXdf
ZWxlbWVudHMpOwoKcHJvdGVjdGVkOgoKCgoKCiAgdm9pZCBfTV9yZXNlcnZlX21hcF9hdF9iYWNr
IChzaXplX3R5cGUgX19ub2Rlc190b19hZGQgPSAxKSB7CiAgICBpZiAoX19ub2Rlc190b19hZGQg
KyAxID4gX01fbWFwX3NpemUgLSAoX01fZmluaXNoLl9NX25vZGUgLSBfTV9tYXApKQogICAgICBf
TV9yZWFsbG9jYXRlX21hcChfX25vZGVzX3RvX2FkZCwgZmFsc2UpOwogIH0KCiAgdm9pZCBfTV9y
ZXNlcnZlX21hcF9hdF9mcm9udCAoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkID0gMSkgewogICAg
aWYgKF9fbm9kZXNfdG9fYWRkID4gc2l6ZV90eXBlKF9NX3N0YXJ0Ll9NX25vZGUgLSBfTV9tYXAp
KQogICAgICBfTV9yZWFsbG9jYXRlX21hcChfX25vZGVzX3RvX2FkZCwgdHJ1ZSk7CiAgfQoKICB2
b2lkIF9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25vZGVzX3RvX2FkZCwgYm9vbCBfX2Fk
ZF9hdF9mcm9udCk7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQgZGVxdWU8X1RwLCBfQWxsb2M+CiAgOjpfTV9h
c3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGlucHV0X2l0
ZXJhdG9yX3RhZykKewogIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAq
X19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1
ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCwgX0FsbG9j
Pjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsK
ICBpZiAoX19wb3MuX01fY3VyID09IF9NX3N0YXJ0Ll9NX2N1cikgewogICAgaXRlcmF0b3IgX19u
ZXdfc3RhcnQgPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Zyb250KF9fbik7CiAgICAgICAgICAg
ICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19uZXdfc3RhcnQsIF9NX3N0YXJ0LCBfX3gp
OwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IH0KICBlbHNlIGlmIChfX3Bvcy5fTV9jdXIgPT0gX01fZmluaXNoLl9NX2N1cikgewogICAgaXRl
cmF0b3IgX19uZXdfZmluaXNoID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAg
ICAgICAgICAgICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX01fZmluaXNoLCBfX25ld19m
aW5pc2gsIF9feCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICB9CiAgZWxzZQogICAgX01faW5zZXJ0X2F1eChfX3BvcywgX19uLCBfX3gpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIGRlcXVlPF9UcCxfQWxsb2M+Ojpp
dGVyYXRvcgpkZXF1ZTxfVHAsX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0
b3IgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gX01fc3RhcnQgJiYgX19sYXN0ID09IF9NX2Zp
bmlzaCkgewogICAgY2xlYXIoKTsKICAgIHJldHVybiBfTV9maW5pc2g7CiAgfQogIGVsc2Ugewog
ICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICBkaWZmZXJlbmNl
X3R5cGUgX19lbGVtc19iZWZvcmUgPSBfX2ZpcnN0IC0gX01fc3RhcnQ7CiAgICBpZiAoc3RhdGlj
X2Nhc3Q8c2l6ZV90eXBlPihfX2VsZW1zX2JlZm9yZSkgPCAoc2l6ZSgpIC0gX19uKSAvIDIpIHsK
ICAgICAgY29weV9iYWNrd2FyZChfTV9zdGFydCwgX19maXJzdCwgX19sYXN0KTsKICAgICAgaXRl
cmF0b3IgX19uZXdfc3RhcnQgPSBfTV9zdGFydCArIF9fbjsKICAgICAgZGVzdHJveShfTV9zdGFy
dCwgX19uZXdfc3RhcnQpOwogICAgICBfTV9kZXN0cm95X25vZGVzKF9NX3N0YXJ0Ll9NX25vZGUs
IF9fbmV3X3N0YXJ0Ll9NX25vZGUpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAg
fQogICAgZWxzZSB7CiAgICAgIGNvcHkoX19sYXN0LCBfTV9maW5pc2gsIF9fZmlyc3QpOwogICAg
ICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9maW5pc2ggLSBfX247CiAgICAgIGRlc3Ryb3ko
X19uZXdfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICBfTV9kZXN0cm95X25vZGVzKF9fbmV3X2Zp
bmlzaC5fTV9ub2RlICsgMSwgX01fZmluaXNoLl9NX25vZGUgKyAxKTsKICAgICAgX01fZmluaXNo
ID0gX19uZXdfZmluaXNoOwogICAgfQogICAgcmV0dXJuIF9NX3N0YXJ0ICsgX19lbGVtc19iZWZv
cmU7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8
X1RwLF9BbGxvYz46OmNsZWFyKCkKewogIGZvciAoX01hcF9wb2ludGVyIF9fbm9kZSA9IF9NX3N0
YXJ0Ll9NX25vZGUgKyAxOwogICAgICAgX19ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAg
ICArK19fbm9kZSkgewogICAgZGVzdHJveSgqX19ub2RlLCAqX19ub2RlICsgX1NfYnVmZmVyX3Np
emUoKSk7CiAgICBfTV9kZWFsbG9jYXRlX25vZGUoKl9fbm9kZSk7CiAgfQoKICBpZiAoX01fc3Rh
cnQuX01fbm9kZSAhPSBfTV9maW5pc2guX01fbm9kZSkgewogICAgZGVzdHJveShfTV9zdGFydC5f
TV9jdXIsIF9NX3N0YXJ0Ll9NX2xhc3QpOwogICAgZGVzdHJveShfTV9maW5pc2guX01fZmlyc3Qs
IF9NX2ZpbmlzaC5fTV9jdXIpOwogICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9m
aXJzdCk7CiAgfQogIGVsc2UKICAgIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyLCBfTV9maW5pc2gu
X01fY3VyKTsKCiAgX01fZmluaXNoID0gX01fc3RhcnQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9maWxsX2luaXRpYWxp
emUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSkgewogIF9NYXBfcG9pbnRlciBfX2N1cjsKICAg
ICAgICAgICAgewogICAgZm9yIChfX2N1ciA9IF9NX3N0YXJ0Ll9NX25vZGU7IF9fY3VyIDwgX01f
ZmluaXNoLl9NX25vZGU7ICsrX19jdXIpCiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbCgqX19jdXIs
ICpfX2N1ciArIF9TX2J1ZmZlcl9zaXplKCksIF9fdmFsdWUpOwogICAgdW5pbml0aWFsaXplZF9m
aWxsKF9NX2ZpbmlzaC5fTV9maXJzdCwgX01fZmluaXNoLl9NX2N1ciwgX192YWx1ZSk7CiAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcmFuZ2VfaW5pdGlhbGl6
ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfTV9pbml0aWFs
aXplX21hcCgwKTsKICAgICAgICAgICAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KICAgICAgICAgICAgICAg
ICAgICAgICA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3Jhbmdl
X2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn
KQp7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24p
OwogIF9NX2luaXRpYWxpemVfbWFwKF9fbik7CgogIF9NYXBfcG9pbnRlciBfX2N1cl9ub2RlOwog
ICAgICAgICAgICB7CiAgICBmb3IgKF9fY3VyX25vZGUgPSBfTV9zdGFydC5fTV9ub2RlOwogICAg
ICAgICBfX2N1cl9ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAgICAgICsrX19jdXJfbm9k
ZSkgewogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5j
ZShfX21pZCwgX1NfYnVmZmVyX3NpemUoKSk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp
cnN0LCBfX21pZCwgKl9fY3VyX25vZGUpOwogICAgICBfX2ZpcnN0ID0gX19taWQ7CiAgICB9CiAg
ICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9maW5pc2guX01fZmlyc3Qp
OwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfYmFja19hdXgoY29uc3QgdmFsdWVfdHlw
ZSYgX190KQp7CiAgdmFsdWVfdHlwZSBfX3RfY29weSA9IF9fdDsKICBfTV9yZXNlcnZlX21hcF9h
dF9iYWNrKCk7CiAgKihfTV9maW5pc2guX01fbm9kZSArIDEpID0gX01fYWxsb2NhdGVfbm9kZSgp
OwogICAgICAgICAgICB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLl9NX2N1ciwgX190X2NvcHkp
OwogICAgX01fZmluaXNoLl9NX3NldF9ub2RlKF9NX2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICBf
TV9maW5pc2guX01fY3VyID0gX01fZmluaXNoLl9NX2ZpcnN0OwogIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9w
dXNoX2JhY2tfYXV4KCkKewogIF9NX3Jlc2VydmVfbWFwX2F0X2JhY2soKTsKICAqKF9NX2Zpbmlz
aC5fTV9ub2RlICsgMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgICAgICAgICAgIHsKICAgIGNv
bnN0cnVjdChfTV9maW5pc2guX01fY3VyKTsKICAgIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9m
aW5pc2guX01fbm9kZSArIDEpOwogICAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9m
aXJzdDsKICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p
ZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYg
X190KQp7CiAgdmFsdWVfdHlwZSBfX3RfY29weSA9IF9fdDsKICBfTV9yZXNlcnZlX21hcF9hdF9m
cm9udCgpOwogICooX01fc3RhcnQuX01fbm9kZSAtIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwog
ICAgICAgICAgICB7CiAgICBfTV9zdGFydC5fTV9zZXRfbm9kZShfTV9zdGFydC5fTV9ub2RlIC0g
MSk7CiAgICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9sYXN0IC0gMTsKICAgIGNvbnN0
cnVjdChfTV9zdGFydC5fTV9jdXIsIF9fdF9jb3B5KTsKICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0K
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxv
Yz46Ol9NX3B1c2hfZnJvbnRfYXV4KCkKewogIF9NX3Jlc2VydmVfbWFwX2F0X2Zyb250KCk7CiAg
KihfTV9zdGFydC5fTV9ub2RlIC0gMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgICAgICAgICAg
IHsKICAgIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKTsKICAgIF9N
X3N0YXJ0Ll9NX2N1ciA9IF9NX3N0YXJ0Ll9NX2xhc3QgLSAxOwogICAgY29uc3RydWN0KF9NX3N0
YXJ0Ll9NX2N1cik7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9wb3BfYmFja19hdXgo
KQp7CiAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9maXJzdCk7CiAgX01fZmluaXNo
Ll9NX3NldF9ub2RlKF9NX2ZpbmlzaC5fTV9ub2RlIC0gMSk7CiAgX01fZmluaXNoLl9NX2N1ciA9
IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMTsKICBkZXN0cm95KF9NX2ZpbmlzaC5fTV9jdXIpOwp9CgoK
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxs
b2M+OjpfTV9wb3BfZnJvbnRfYXV4KCkKewogIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyKTsKICBf
TV9kZWFsbG9jYXRlX25vZGUoX01fc3RhcnQuX01fZmlyc3QpOwogIF9NX3N0YXJ0Ll9NX3NldF9u
b2RlKF9NX3N0YXJ0Ll9NX25vZGUgKyAxKTsKICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5f
TV9maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Omluc2VydChpdGVy
YXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGNvcHkoX19maXJzdCwgX19sYXN0LCBpbnNl
cnRlcigqdGhpcywgX19wb3MpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9j
Pjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19uID0g
MDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgaWYgKF9fcG9zLl9NX2N1ciA9
PSBfTV9zdGFydC5fTV9jdXIpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2
ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwogICAgICAgICAgICAgIHsKICAgICAgdW5pbml0aWFs
aXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfc3RhcnQpOwogICAgICBfTV9zdGFydCA9
IF9fbmV3X3N0YXJ0OwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIH0KICBlbHNlIGlmIChfX3Bv
cy5fTV9jdXIgPT0gX01fZmluaXNoLl9NX2N1cikgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNo
ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAgICAgICAgICAgICAgewogICAg
ICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICBf
TV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgfQogIGVsc2UKICAgIF9NX2lu
c2VydF9hdXgoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxvYz46Oml0ZXJhdG9y
CmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBjb25zdCB2
YWx1ZV90eXBlJiBfX3gpCnsKICBkaWZmZXJlbmNlX3R5cGUgX19pbmRleCA9IF9fcG9zIC0gX01f
c3RhcnQ7CiAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKICBpZiAoc3RhdGljX2Nhc3Q8c2l6
ZV90eXBlPihfX2luZGV4KSA8IHNpemUoKSAvIDIpIHsKICAgIHB1c2hfZnJvbnQoZnJvbnQoKSk7
CiAgICBpdGVyYXRvciBfX2Zyb250MSA9IF9NX3N0YXJ0OwogICAgKytfX2Zyb250MTsKICAgIGl0
ZXJhdG9yIF9fZnJvbnQyID0gX19mcm9udDE7CiAgICArK19fZnJvbnQyOwogICAgX19wb3MgPSBf
TV9zdGFydCArIF9faW5kZXg7CiAgICBpdGVyYXRvciBfX3BvczEgPSBfX3BvczsKICAgICsrX19w
b3MxOwogICAgY29weShfX2Zyb250MiwgX19wb3MxLCBfX2Zyb250MSk7CiAgfQogIGVsc2Ugewog
ICAgcHVzaF9iYWNrKGJhY2soKSk7CiAgICBpdGVyYXRvciBfX2JhY2sxID0gX01fZmluaXNoOwog
ICAgLS1fX2JhY2sxOwogICAgaXRlcmF0b3IgX19iYWNrMiA9IF9fYmFjazE7CiAgICAtLV9fYmFj
azI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAgIGNvcHlfYmFja3dhcmQoX19w
b3MsIF9fYmFjazIsIF9fYmFjazEpOwogIH0KICAqX19wb3MgPSBfX3hfY29weTsKICByZXR1cm4g
X19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgZGVx
dWU8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4
KGl0ZXJhdG9yIF9fcG9zKQp7CiAgZGlmZmVyZW5jZV90eXBlIF9faW5kZXggPSBfX3BvcyAtIF9N
X3N0YXJ0OwogIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW5kZXgpIDwgc2l6ZSgpIC8g
MikgewogICAgcHVzaF9mcm9udChmcm9udCgpKTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQxID0gX01f
c3RhcnQ7CiAgICArK19fZnJvbnQxOwogICAgaXRlcmF0b3IgX19mcm9udDIgPSBfX2Zyb250MTsK
ICAgICsrX19mcm9udDI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAgIGl0ZXJh
dG9yIF9fcG9zMSA9IF9fcG9zOwogICAgKytfX3BvczE7CiAgICBjb3B5KF9fZnJvbnQyLCBfX3Bv
czEsIF9fZnJvbnQxKTsKICB9CiAgZWxzZSB7CiAgICBwdXNoX2JhY2soYmFjaygpKTsKICAgIGl0
ZXJhdG9yIF9fYmFjazEgPSBfTV9maW5pc2g7CiAgICAtLV9fYmFjazE7CiAgICBpdGVyYXRvciBf
X2JhY2syID0gX19iYWNrMTsKICAgIC0tX19iYWNrMjsKICAgIF9fcG9zID0gX01fc3RhcnQgKyBf
X2luZGV4OwogICAgY29weV9iYWNrd2FyZChfX3BvcywgX19iYWNrMiwgX19iYWNrMSk7CiAgfQog
ICpfX3BvcyA9IHZhbHVlX3R5cGUoKTsKICByZXR1cm4gX19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1
eChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHZhbHVlX3R5cGUmIF9feCkKewogIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zX2JlZm9y
ZSA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgc2l6ZV90eXBlIF9fbGVuZ3RoID0gdGhpcy0+c2l6ZSgp
OwogIHZhbHVlX3R5cGUgX194X2NvcHkgPSBfX3g7CiAgaWYgKF9fZWxlbXNfYmVmb3JlIDwgZGlm
ZmVyZW5jZV90eXBlKF9fbGVuZ3RoIC8gMikpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0g
X01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwogICAgaXRlcmF0b3IgX19vbGRfc3Rh
cnQgPSBfTV9zdGFydDsKICAgIF9fcG9zID0gX01fc3RhcnQgKyBfX2VsZW1zX2JlZm9yZTsKICAg
ICAgICAgICAgICB7CiAgICAgIGlmIChfX2VsZW1zX2JlZm9yZSA+PSBkaWZmZXJlbmNlX3R5cGUo
X19uKSkgewogICAgICAgIGl0ZXJhdG9yIF9fc3RhcnRfbiA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5j
ZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3N0YXJ0
X24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICAg
IGNvcHkoX19zdGFydF9uLCBfX3BvcywgX19vbGRfc3RhcnQpOwogICAgICAgIGZpbGwoX19wb3Mg
LSBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX19wb3MsIF9feF9jb3B5KTsKICAgICAgfQogICAgICBl
bHNlIHsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9NX3N0YXJ0LCBfX3Bvcywg
X19uZXdfc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9zdGFydCwg
X194X2NvcHkpOwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgZmlsbChf
X29sZF9zdGFydCwgX19wb3MsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogIH0KICBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVf
ZWxlbWVudHNfYXRfYmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmlu
aXNoOwogICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPQogICAgICBkaWZm
ZXJlbmNlX3R5cGUoX19sZW5ndGgpIC0gX19lbGVtc19iZWZvcmU7CiAgICBfX3BvcyA9IF9NX2Zp
bmlzaCAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgICAgICAgewogICAgICBpZiAoX19lbGVtc19h
ZnRlciA+IGRpZmZlcmVuY2VfdHlwZShfX24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19maW5pc2hf
biA9IF9NX2ZpbmlzaCAtIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6
ZWRfY29weShfX2ZpbmlzaF9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmlu
aXNoID0gX19uZXdfZmluaXNoOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fZmluaXNo
X24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3BvcywgX19wb3MgKyBkaWZmZXJlbmNl
X3R5cGUoX19uKSwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fdW5p
bml0aWFsaXplZF9maWxsX2NvcHkoX01fZmluaXNoLCBfX3BvcyArIGRpZmZlcmVuY2VfdHlwZShf
X24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX194X2NvcHksIF9fcG9zLCBf
TV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBmaWxs
KF9fcG9zLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVy
YXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fbikKewogIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zYmVm
b3JlID0gX19wb3MgLSBfTV9zdGFydDsKICBzaXplX3R5cGUgX19sZW5ndGggPSBzaXplKCk7CiAg
aWYgKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19lbGVtc2JlZm9yZSkgPCBfX2xlbmd0aCAvIDIp
IHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9u
dChfX24pOwogICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9zdGFydDsKICAgIF9fcG9zID0g
X01fc3RhcnQgKyBfX2VsZW1zYmVmb3JlOwogICAgICAgICAgICAgIHsKICAgICAgaWYgKF9fZWxl
bXNiZWZvcmUgPj0gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX3N0
YXJ0X24gPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlh
bGl6ZWRfY29weShfTV9zdGFydCwgX19zdGFydF9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX01f
c3RhcnQgPSBfX25ld19zdGFydDsKICAgICAgICBjb3B5KF9fc3RhcnRfbiwgX19wb3MsIF9fb2xk
X3N0YXJ0KTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MgLSBkaWZmZXJlbmNl
X3R5cGUoX19uKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRv
ciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgZGlmZmVyZW5jZV90eXBl
KF9fbikgLSBfX2VsZW1zYmVmb3JlKTsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5
KF9NX3N0YXJ0LCBfX3BvcywgX19maXJzdCwgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsK
ICAgICAgICBjb3B5KF9fbWlkLCBfX2xhc3QsIF9fb2xkX3N0YXJ0KTsKICAgICAgfQogICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogIH0KICBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9
IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmlu
aXNoID0gX01fZmluaXNoOwogICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNhZnRlciA9
CiAgICAgIGRpZmZlcmVuY2VfdHlwZShfX2xlbmd0aCkgLSBfX2VsZW1zYmVmb3JlOwogICAgX19w
b3MgPSBfTV9maW5pc2ggLSBfX2VsZW1zYWZ0ZXI7CiAgICAgICAgICAgICAgewogICAgICBpZiAo
X19lbGVtc2FmdGVyID4gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBf
X2ZpbmlzaF9uID0gX01fZmluaXNoIC0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5p
bml0aWFsaXplZF9jb3B5KF9fZmluaXNoX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAg
ICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvcywg
X19maW5pc2hfbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19wb3MpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19t
aWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNhZnRlcik7CiAgICAg
ICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfX21pZCwgX19sYXN0LCBfX3BvcywgX01fZmlu
aXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAg
ICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvcyk7CiAgICAgIH0KICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB9Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9j
Pjo6X01fbmV3X2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19lbGVtcykKewogIHNp
emVfdHlwZSBfX25ld19ub2RlcwogICAgICA9IChfX25ld19lbGVtcyArIF9TX2J1ZmZlcl9zaXpl
KCkgLSAxKSAvIF9TX2J1ZmZlcl9zaXplKCk7CiAgX01fcmVzZXJ2ZV9tYXBfYXRfZnJvbnQoX19u
ZXdfbm9kZXMpOwogIHNpemVfdHlwZSBfX2k7CiAgICAgICAgICAgIHsKICAgIGZvciAoX19pID0g
MTsgX19pIDw9IF9fbmV3X25vZGVzOyArK19faSkKICAgICAgKihfTV9zdGFydC5fTV9ub2RlIC0g
X19pKSA9IF9NX2FsbG9jYXRlX25vZGUoKTsKICB9CgoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX25ld19lbGVtZW50
c19hdF9iYWNrKHNpemVfdHlwZSBfX25ld19lbGVtcykKewogIHNpemVfdHlwZSBfX25ld19ub2Rl
cwogICAgICA9IChfX25ld19lbGVtcyArIF9TX2J1ZmZlcl9zaXplKCkgLSAxKSAvIF9TX2J1ZmZl
cl9zaXplKCk7CiAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFjayhfX25ld19ub2Rlcyk7CiAgc2l6ZV90
eXBlIF9faTsKICAgICAgICAgICAgewogICAgZm9yIChfX2kgPSAxOyBfX2kgPD0gX19uZXdfbm9k
ZXM7ICsrX19pKQogICAgICAqKF9NX2ZpbmlzaC5fTV9ub2RlICsgX19pKSA9IF9NX2FsbG9jYXRl
X25vZGUoKTsKICB9CgoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25v
ZGVzX3RvX2FkZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBfX2FkZF9hdF9mcm9udCkKewogIHNpemVfdHlwZSBfX29sZF9udW1fbm9kZXMgPSBfTV9maW5p
c2guX01fbm9kZSAtIF9NX3N0YXJ0Ll9NX25vZGUgKyAxOwogIHNpemVfdHlwZSBfX25ld19udW1f
bm9kZXMgPSBfX29sZF9udW1fbm9kZXMgKyBfX25vZGVzX3RvX2FkZDsKCiAgX01hcF9wb2ludGVy
IF9fbmV3X25zdGFydDsKICBpZiAoX01fbWFwX3NpemUgPiAyICogX19uZXdfbnVtX25vZGVzKSB7
CiAgICBfX25ld19uc3RhcnQgPSBfTV9tYXAgKyAoX01fbWFwX3NpemUgLSBfX25ld19udW1fbm9k
ZXMpIC8gMgogICAgICAgICAgICAgICAgICAgICArIChfX2FkZF9hdF9mcm9udCA/IF9fbm9kZXNf
dG9fYWRkIDogMCk7CiAgICBpZiAoX19uZXdfbnN0YXJ0IDwgX01fc3RhcnQuX01fbm9kZSkKICAg
ICAgY29weShfTV9zdGFydC5fTV9ub2RlLCBfTV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3X25z
dGFydCk7CiAgICBlbHNlCiAgICAgIGNvcHlfYmFja3dhcmQoX01fc3RhcnQuX01fbm9kZSwgX01f
ZmluaXNoLl9NX25vZGUgKyAxLAogICAgICAgICAgICAgICAgICAgIF9fbmV3X25zdGFydCArIF9f
b2xkX251bV9ub2Rlcyk7CiAgfQogIGVsc2UgewogICAgc2l6ZV90eXBlIF9fbmV3X21hcF9zaXpl
ID0KICAgICAgX01fbWFwX3NpemUgKyBtYXgoX01fbWFwX3NpemUsIF9fbm9kZXNfdG9fYWRkKSAr
IDI7CgogICAgX01hcF9wb2ludGVyIF9fbmV3X21hcCA9IF9NX2FsbG9jYXRlX21hcChfX25ld19t
YXBfc2l6ZSk7CiAgICBfX25ld19uc3RhcnQgPSBfX25ld19tYXAgKyAoX19uZXdfbWFwX3NpemUg
LSBfX25ld19udW1fbm9kZXMpIC8gMgogICAgICAgICAgICAgICAgICAgICAgICAgKyAoX19hZGRf
YXRfZnJvbnQgPyBfX25vZGVzX3RvX2FkZCA6IDApOwogICAgY29weShfTV9zdGFydC5fTV9ub2Rl
LCBfTV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3X25zdGFydCk7CiAgICBfTV9kZWFsbG9jYXRl
X21hcChfTV9tYXAsIF9NX21hcF9zaXplKTsKCiAgICBfTV9tYXAgPSBfX25ld19tYXA7CiAgICBf
TV9tYXBfc2l6ZSA9IF9fbmV3X21hcF9zaXplOwogIH0KCiAgX01fc3RhcnQuX01fc2V0X25vZGUo
X19uZXdfbnN0YXJ0KTsKICBfTV9maW5pc2guX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0ICsgX19v
bGRfbnVtX25vZGVzIC0gMSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewog
IHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJl
Z2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYg
X195KSB7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3gu
ZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3ku
ZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3gg
PT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj4oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBf
X3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9f
eCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2Fw
KGRlcXVlPF9UcCxfQWxsb2M+JiBfX3gsIGRlcXVlPF9UcCxfQWxsb2M+JiBfX3kpIHsKICBfX3gu
c3dhcChfX3kpOwp9Cgp9CiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
c3RhY2suaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zdGFj
ay5oIiAxIDMKIyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zdGFjay5o
IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIg
MSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfc3RhY2suaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNz
IF9TZXF1ZW5jZSA9IGRlcXVlPF9UcD4gPgpjbGFzcyBzdGFjazsKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9TZXE+CmJvb2wgb3BlcmF0b3I9PShjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9f
eCwgY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX1NlcT4KYm9vbCBvcGVyYXRvcjwoY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0
IHN0YWNrPF9UcCxfU2VxPiYgX195KTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2Vx
dWVuY2U+CmNsYXNzIHN0YWNrCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2Vx
dWVuY2U6OnZhbHVlX3R5cGUgX1NlcXVlbmNlX3ZhbHVlX3R5cGU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDEsIGNsYXNzIF9TZXExPgogIGZyaWVuZCBib29sIG9wZXJh
dG9yPT0gKGNvbnN0IHN0YWNrPF9UcDEsIF9TZXExPiYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RhY2s8X1RwMSwgX1NlcTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDEsIGNs
YXNzIF9TZXExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3Qgc3RhY2s8X1RwMSwgX1Nl
cTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrPF9UcDEsIF9TZXExPiYp
OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsK
ICB0eXBlZGVmIF9TZXF1ZW5jZSBjb250YWluZXJfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBf
U2VxdWVuY2U6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVu
Y2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CnByb3RlY3RlZDoKICBfU2VxdWVu
Y2UgYzsKcHVibGljOgogIHN0YWNrKCkgOiBjKCkge30KICBleHBsaWNpdCBzdGFjayhjb25zdCBf
U2VxdWVuY2UmIF9fcykgOiBjKF9fcykge30KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IGMuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gYy5zaXplKCk7
IH0KICByZWZlcmVuY2UgdG9wKCkgeyByZXR1cm4gYy5iYWNrKCk7IH0KICBjb25zdF9yZWZlcmVu
Y2UgdG9wKCkgY29uc3QgeyByZXR1cm4gYy5iYWNrKCk7IH0KICB2b2lkIHB1c2goY29uc3QgdmFs
dWVfdHlwZSYgX194KSB7IGMucHVzaF9iYWNrKF9feCk7IH0KICB2b2lkIHBvcCgpIHsgYy5wb3Bf
YmFjaygpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJh
dG9yPT0oY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYg
X195KQp7CiAgcmV0dXJuIF9feC5jID09IF9feS5jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPChjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29u
c3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kpCnsKICByZXR1cm4gX194LmMgPCBfX3kuYzsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvciE9KGNvbnN0IHN0YWNr
PF9UcCxfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAh
KF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9w
ZXJhdG9yPihjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLF9TZXE+
JiBfX3kpCnsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfU2VxPgpib29sIG9wZXJhdG9yPD0oY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0
IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcj49KGNvbnN0IHN0YWNrPF9U
cCxfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAhKF9f
eCA8IF9feSk7Cn0KCn0KIyA2NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z
dGFjay5oIiAyIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdGFjayIgMiAzCiMg
NDggInN0bGluY2wuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYWxnb3JpdGht
IiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9hbGdvcml0aG0iIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAxIDMKIyA2MCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMwoKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDYyICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2MyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwoj
IDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMg
NjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVz
cGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+Cl9f
Z2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAgaWYgKF9fbGVu
ID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0
ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX1RwKiBfX3Rt
cCA9IChfVHAqKSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsKICAgIGlmIChf
X3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xl
bik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90Pigo
X1RwKikwLCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRy
ZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pIHsKICByZXR1cm4g
X19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9CgoKCgoKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9i
dWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9i
dWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kdm9pZCByZXR1
cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkgewogIGZyZWUoX19wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xhc3MgX1RlbXBvcmFyeV9idWZm
ZXIgewpwcml2YXRlOgogIHB0cmRpZmZfdCBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90IF9N
X2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAg
ICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChf
TV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9s
ZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsK
ICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAg
ICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAg
fQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlw
ZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNl
X3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwp
OwogIH0KCnB1YmxpYzoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsg
fQogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFs
X2xlbjsgfQogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KICBfVHAqIGVuZCgp
IHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgICAgICAgICAgIHsKICAgICAgX01f
bGVuID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfTV9sZW4pOwogICAgICBf
TV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDApCiAgICAgICAgX01faW5p
dGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgfQoKICB+
X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBkZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsg
X01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5
X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvciwKICAgICAgICAgIGNsYXNzIF9UcAogICAgICAgICAgICAgICAgICAgID0gdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAg
ID4Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMgX1RlbXBvcmFyeV9idWZmZXI8X0Zv
cndhcmRJdGVyYXRvciwgX1RwPgp7CiAgdGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgOiBfVGVtcG9yYXJ5X2J1ZmZl
cjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkge30KICB+dGVtcG9yYXJ5
X2J1ZmZlcigpIHt9Cn07Cgp9CiMgNjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxnby5oIiAxIDMKIyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGdvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAuaCIg
MSAzCiMgNjIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAzCm5h
bWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBj
bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZApfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlz
dGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAo
X19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAm
JiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hv
bGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICBfX2hvbGVJbmRleCA9IF9fcGFy
ZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgfQogICooX19maXJz
dCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3B1
c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19w
dXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlz
dGFuY2UoMCksCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQKcHVzaF9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19w
dXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5j
ZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcCwKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgIF9EaXN0YW5j
ZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNl
IF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+
IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsK
ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAg
IF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEp
IC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAg
ICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19wdXNoX2hlYXBfYXV4
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wLAogICAgICAgICAgICAgICAgX0Rp
c3RhbmNlKiwgX1RwKikKewogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0
IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgIF9UcCgqKF9fbGFz
dCAtIDEpKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9f
cHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwKICAgICAgICAgICAgICAgICAg
X19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9UcD4Kdm9pZApfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
RGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAg
X192YWx1ZSkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3Rh
bmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChfX3NlY29u
ZENoaWxkIDwgX19sZW4pIHsKICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICoo
X19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQogICAgICBfX3NlY29uZENoaWxkLS07CiAg
ICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsK
ICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgIF9fc2Vjb25kQ2hpbGQgPSAyICog
KF9fc2Vjb25kQ2hpbGQgKyAxKTsKICB9CiAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsK
ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxk
IC0gMSkpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICB9CiAgX19wdXNo
X2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0
ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0
YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19wb3BfaGVhcF9hdXgo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgIF9UcCopCnsKICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAt
IDEsIF9fbGFzdCAtIDEsCiAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAxKSksIF9fZGlzdGFu
Y2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+CmlubGluZSB2b2lkIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19wb3BfaGVh
cF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAg
ICBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAg
ICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlz
dGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxk
ID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7
CiAgICBpZiAoX19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAo
X19zZWNvbmRDaGlsZCAtIDEpKSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJz
dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xl
SW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRD
aGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2Zp
cnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAg
ICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2Zp
cnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBf
Q29tcGFyZSBfX2NvbXAsCiAgICAgICAgICAgX0Rpc3RhbmNlKikKewogICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2Uo
X19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1Rw
KiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBf
X2xhc3QgLSAxLCBfVHAoKihfX2xhc3QgLSAxKSksIF9fY29tcCwKICAgICAgICAgICAgIF9fZGlz
dGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApwb3BfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwg
X0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
X19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9f
Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9U
cCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LAogICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAq
LCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgX0Rp
c3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAo
X19sZW4gLSAyKS8yOwoKICB3aGlsZSAodHJ1ZSkgewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0
LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgIGlmIChf
X3BhcmVudCA9PSAwKSByZXR1cm47CiAgICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQKbWFrZV9oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19tYWtl
X2hlYXAoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0
KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNz
IF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1
cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19w
YXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGlsZSAodHJ1ZSkgewogICAgX19hZGp1c3RfaGVh
cChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLAog
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsK
ICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwg
X0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
X19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAgICAgX192YWx1
ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgp2b2lkIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2xh
c3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQK
c29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAg
cG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7Cn0KCn0KIyA2NCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsK
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgX19tZWRpYW4oY29uc3Qg
X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgaWYg
KF9fYSA8IF9fYikKICAgIGlmIChfX2IgPCBfX2MpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNl
IGlmIChfX2EgPCBfX2MpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVybiBf
X2E7CiAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2Ig
PCBfX2MpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJgpfX21lZGlhbihj
b25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBf
X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgaWYgKF9fY29tcChfX2EsIF9fYikp
CiAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgcmV0dXJuIF9fYjsKICAgIGVsc2UgaWYg
KF9fY29tcChfX2EsIF9fYykpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVy
biBfX2E7CiAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgIHJldHVybiBfX2E7CiAgZWxz
ZSBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgIHJldHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJu
IF9fYjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+Cl9G
dW5jdGlvbiBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBf
RnVuY3Rpb24gX19mKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgIF9fZigqX19maXJzdCk7CiAgcmV0dXJuIF9fZjsKfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkp
CiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmly
c3QpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9f
bGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190
cmlwX2NvdW50KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Owog
ICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7
CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz
dDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp
cnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBj
YXNlIDM6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytf
X2ZpcnN0OwogIGNhc2UgMjoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy
ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJl
dHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9QcmVkaWNhdGU+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0
IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBf
Y291bnQpIHsKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr
X19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg
KytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAg
ICsrX19maXJzdDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgog
ICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog
IGNhc2UgMjoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr
X19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0
OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9J
bnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1By
ZWRpY2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwg
X19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19u
ZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19m
aXJzdCA9PSAqX19uZXh0KQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25l
eHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3
YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewog
ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICByZXR1cm4gX19m
aXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCgoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lk
IGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg
X192YWx1ZSwKICAgICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbHVlKQogICAgICArK19fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9TaXplPgp2b2lkIGNvdW50X2lmKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAg
IF9TaXplJiBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICArK19fbjsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnQoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgp0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudF9pZihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsK
fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+
Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg
X0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgoKCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikK
ICAgIHJldHVybiBfX2ZpcnN0MTsKCgogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwog
ICsrX190bXA7CiAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0
MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCgoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAg
X19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19m
aXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZp
bmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19s
YXN0MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVu
dCA9IF9fZmlyc3QxOwogICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgIHJldHVy
biBfX2xhc3QxOwoKICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsKICAgICAgaWYgKCsr
X19wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1
cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19f
Zmlyc3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJ
dGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRl
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgaWYgKF9fZmlyc3Qx
ID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2ZpcnN0MTsK
CgogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAgaWYgKF9fdG1w
ID09IF9fbGFzdDIpIHsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRp
Y2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICByZXR1cm4g
X19maXJzdDE7CiAgfQoKCgogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICBfX3AxID0gX19m
aXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxKSB7CiAgICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAg
ICAgYnJlYWs7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19f
Zmlyc3QxOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3Qx
OwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlmICgrK19f
Y3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoX19wcmVkaWNh
dGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAg
ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAg
ICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwogIH0KICByZXR1cm4g
X19maXJzdDE7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVn
ZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19j
b3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBp
ZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0
ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f
bGFzdCkgewogICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFz
dCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAg
LS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0
OwogICAgICBlbHNlCiAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsK
ICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3MgX1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0Zvcndh
cmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3Zh
bCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19m
aXJzdDsKICBlbHNlIHsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBpZiAo
X19iaW5hcnlfcHJlZCgqX19maXJzdCwgX192YWwpKQogICAgICAgIGJyZWFrOwogICAgICArK19f
Zmlyc3Q7CiAgICB9CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVn
ZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0Owog
ICAgICArK19faTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19i
aW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICArK19faTsKICAgICAgICAtLV9fbjsK
ICAgICAgfQogICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
IGVsc2UgewogICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19i
aW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytf
X2k7CiAgICAgICAgfQogICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgIH0KICAgIH0KICAgIHJl
dHVybiBfX2xhc3Q7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFz
cyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIyIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEg
X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f
bGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9f
Zmlyc3QyKTsKICByZXR1cm4gX19maXJzdDI7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVW5hcnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVy
IHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3Vu
YXJ5X29wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3Qp
OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5
T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5
T3BlcmF0aW9uIF9fYmluYXJ5X29wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgZm9y
ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVz
dWx0KQogICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwog
IHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfVHA+CnZvaWQgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19u
ZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9f
b2xkX3ZhbHVlKQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFj
ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKl9fZmlyc3QgPSBf
X25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3Zh
bHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0
OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJl
cGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1
ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19u
ZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4Kdm9pZCBnZW5lcmF0ZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4KX091dHB1dEl0ZXIgZ2VuZXJhdGVfbihf
T3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCnsKCgoKCgoK
ICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2Vu
KCk7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBp
ZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsK
ICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX091
dHB1dEl0ZXIgcmVtb3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Q
cmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19y
ZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0Zvcndh
cmRJdGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0
LCBfX3ZhbHVlKTsKICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJz
dCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3Zl
X2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciByZW1vdmVfaWYo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogIF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICBfRm9yd2Fy
ZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFz
dCwgX19maXJzdCwgX19wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CgogIF9UcCBfX3ZhbHVlID0gKl9fZmly
c3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkK
ICAgIGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgIF9fdmFsdWUgPSAqX19maXJz
dDsKICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQogIHJldHVybiArK19fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu
ZSBfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3Jf
dGFnKQp7CgogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs
IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKCiAgKl9fcmVzdWx0
ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoISgqX19y
ZXN1bHQgPT0gKl9fZmlyc3QpKQogICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVy
biArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1
dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX091dHB1
dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwgX1RwKikK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsK
ICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAg
aWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0g
Kl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4gKytf
X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQp7CgogIHJldHVybiBf
X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmlu
YXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCgogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0g
X19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+
CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl
IF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
IHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4K
X0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19maXJzdCA9IGFkamFjZW50
X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19s
YXN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Jp
bmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl
IF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2ZpcnN0
ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogIHJldHVy
biB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CnZvaWQgX19yZXZlcnNlKF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKQog
ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgIHJl
dHVybjsKICAgIGVsc2UKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3Qp
CiAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KSB7CiAgICAtLV9fbGFzdDsKICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAr
K19fcmVzdWx0OwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9F
dWNsaWRlYW5SaW5nRWxlbWVudD4KX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fZ2NkKF9FdWNsaWRl
YW5SaW5nRWxlbWVudCBfX20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRXVjbGlkZWFu
UmluZ0VsZW1lbnQgX19uKQp7CiAgd2hpbGUgKF9fbiAhPSAwKSB7CiAgICBfRXVjbGlkZWFuUmlu
Z0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgX19tID0gX19uOwogICAgX19uID0gX190Owog
IH0KICByZXR1cm4gX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
RGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UqLAogICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAo
X19maXJzdCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCA9PSBf
X21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoKICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBf
X21pZGRsZTsKICBkbyB7CiAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlm
IChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogIH0gd2hp
bGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogIF9Gb3J3YXJkSXRlciBfX25ld19taWRkbGUgPSBf
X2ZpcnN0OwoKICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICB3aGlsZSAoX19maXJzdDIgIT0gX19s
YXN0KSB7CiAgICBzd2FwICgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJz
dCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgIGVsc2UgaWYgKF9f
Zmlyc3QyID09IF9fbGFzdCkKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKICB9CgogIHJldHVy
biBfX25ld19taWRkbGU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj
bGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFsSXRlciBfX3JvdGF0ZShfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkK
ICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBf
X2ZpcnN0OwoKICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnKCkpOwogIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZygpKTsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRk
bGUgIT0gX19sYXN0KQogICAgc3dhcCAoKl9fZmlyc3QrKywgKi0tX19sYXN0KTsKCiAgaWYgKF9f
Zmlyc3QgPT0gX19taWRkbGUpIHsKICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBfX2xhc3Q7CiAgfQogIGVsc2Ug
ewogICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZygpKTsKICAgIHJldHVybiBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0
ZXIgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlICosIF9UcCAqKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19rID0gX19t
aWRkbGUgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CiAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fbWlkZGxlKTsKCiAgaWYg
KF9fayA9PSAwKQogICAgcmV0dXJuIF9fbGFzdDsKCiAgZWxzZSBpZiAoX19rID09IF9fbCkgewog
ICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKICAgIHJldHVybiBf
X3Jlc3VsdDsKICB9CgogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogIGZvciAo
X0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgIF9UcCBfX3RtcCA9ICpf
X2ZpcnN0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICBpZiAoX19r
IDwgX19sKSB7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9f
aisrKSB7CiAgICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICpfX3Ag
PSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgIH0KCiAgICAgICAg
Kl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICBfX3AgKz0gX19rOwogICAgICB9CiAgICB9Cgog
ICAgZWxzZSB7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAx
OyBfX2ogKyspIHsKICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAq
X19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgX19wICs9IF9fazsKICAgICAgICB9CgogICAg
ICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgIF9fcCAtPSBfX2w7CiAgICAgIH0KICAg
IH0KCiAgICAqX19wID0gX190bXA7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19yZXN1
bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIg
cm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogIHJldHVybiBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAog
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAg
ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgcm90YXRlX2NvcHkoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShf
X21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgX0Rpc3RhbmNlIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKSB7Cgog
IHJldHVybiBscmFuZDQ4KCkgJSBfX247CgoKCn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyPgppbmxpbmUgdm9pZCByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7
IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFu
ZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4Kdm9pZCByYW5kb21f
c2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
IHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kg
IT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9f
aSAtIF9fZmlyc3QpICsgMSkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1w
bGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19u
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0g
bWluKF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFu
ZG9tX251bWJlcihfX3JlbWFpbmluZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7
CiAgICAgICsrX19vdXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAg
ICArK19fZmlyc3Q7CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNs
YXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWlu
KF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFuZChf
X3JlbWFpbmluZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19v
dXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7
CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9f
cmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAg
X0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19f
bV0gPSAqX19maXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsK
ICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmRvbV9udW1iZXIoX190KTsKICAgIGlmIChfX00gPCBf
X24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJl
dHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNl
IF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19m
aXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0
YW5jZSBfX00gPSBfX3JhbmQoX190KTsKICAgIGlmIChfX00gPCBfX24pCiAgICAgIF9fb3V0W19f
TV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX291dCArIF9fbTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgpp
bmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0KQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3Qs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2ZpcnN0LCBfX291dF9sYXN0
IC0gX19vdXRfZmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4K
aW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291
dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCwKICAgICAgICAgICAgICBfUmFu
ZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fcmFuZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9fcGFydGl0
aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICB3aGlsZSAoX19wcmVkKCpfX2Zp
cnN0KSkKICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgX0Zv
cndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3Qp
CiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgIHN3YXAoKl9fZmlyc3QsICpfX25leHQp
OwogICAgICArK19fZmlyc3Q7CiAgICB9CgogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfQmlkaXJlY3Rpb25h
bEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewogIHdoaWxlICh0cnVl
KSB7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg
ICsrX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgLS1fX2xhc3Q7CiAgICB3
aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBf
X2ZpcnN0OwogICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgIC0tX19sYXN0
OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0
KTsKICAgICsrX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIgcGFydGl0aW9uKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3Qs
IF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9EaXN0YW5j
ZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk
aWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCnsKICBpZiAoX19sZW4gPT0gMSkKICAgIHJl
dHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsKICBfRm9yd2FyZEl0ZXIg
X19taWRkbGUgPSBfX2ZpcnN0OwogIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgcmV0
dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwg
X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4g
LyAyKSwKICAgICAgICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgX19pbnBsYWNl
X3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9QcmVkaWNh
dGUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3N0YWJsZV9wYXJ0
aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9f
bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f
YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSBfX2J1ZmZlcl9zaXplKQp7CiAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgX1BvaW50ZXIgX19yZXN1bHQyID0g
X19idWZmZXI7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAg
ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsK
ICAgICAgICArK19fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICAqX19yZXN1
bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDI7CiAgICAgIH0KICAgIGNvcHkoX19i
dWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgfQog
IGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2Uo
X19taWRkbGUsIF9fbGVuIC8gMik7CiAgICByZXR1cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRpdGlv
bl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0LCBfX21pZGRsZSwg
X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwgX19idWZmZXIsIF9f
YnVmZmVyX3NpemUpLAogICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSk7CiAgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHAsIGNs
YXNzIF9EaXN0YW5jZT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBv
cmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAg
aWYgKF9fYnVmLnNpemUoKSA+IDApCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0
aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7
CiAgZWxzZQogICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9f
bGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIgc3RhYmxlX3BhcnRp
dGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZQogICAg
cmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRv
bUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAg
X19waXZvdCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90
KQogICAgICArK19fZmlyc3Q7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlIChfX3Bpdm90IDwgKl9f
bGFzdCkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19m
aXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfQ29tcGFyZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9u
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hp
bGUgKHRydWUpIHsKICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3QsIF9fcGl2b3QpKQogICAgICAr
K19fZmlyc3Q7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFz
dCkpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJl
dHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmly
c3Q7CiAgfQp9Cgpjb25zdCBpbnQgX19zdGxfdGhyZXNob2xkID0gMTY7CgoKCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVh
cl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpCnsKICBfUmFuZG9t
QWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fdmFsIDwg
Kl9fbmV4dCkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7CiAg
ICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJk
ZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAtLV9fbmV4dDsKICB3aGlsZSAoX19jb21wKF9f
dmFsLCAqX19uZXh0KSkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25l
eHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5z
ZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBfVHAgX192YWwgPSAqX19sYXN0
OwogIGlmIChfX3ZhbCA8ICpfX2ZpcnN0KSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9f
bGFzdCwgX19sYXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBf
X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2
b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFy
ZSBfX2NvbXApCnsKICBfVHAgX192YWwgPSAqX19sYXN0OwogIGlmIChfX2NvbXAoX192YWwsICpf
X2ZpcnN0KSkgewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEp
OwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFy
X2luc2VydChfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXI+CnZvaWQgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
IHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kg
IT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFs
dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf
Q29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3Ig
KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19f
aSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZShfX2ZpcnN0
KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
VHA+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX1RwKikKewogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m
aXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0
KF9faSwgX1RwKCpfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgpp
bmxpbmUgdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCkgewogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xh
c3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNl
cnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBmb3Ig
KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQog
ICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSwgX19jb21wKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5l
IHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCnsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19s
YXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBf
X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19s
YXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkKTsKICAgIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCk7CiAgfQogIGVsc2UK
ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ZpbmFsX2luc2VydGlv
bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChf
X2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fY29tcCk7CiAgICBfX3VuZ3Vh
cmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9f
Y29tcCk7CiAgfQogIGVsc2UKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf
X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSBfU2l6ZSBfX2xnKF9TaXpl
IF9fbikKewogIF9TaXplIF9fazsKICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEp
ICsrX19rOwogIHJldHVybiBfX2s7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0
KQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlm
IChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFz
dCwgX19sYXN0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJz
dCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwg
X19sYXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1pdCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf
U2l6ZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfVHAqLAogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0Nv
bXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hv
bGQpIHsKICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICByZXR1cm47CiAgICB9CiAgICAt
LV9fZGVwdGhfbGltaXQ7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5n
dWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAog
ICAgICAgX19jb21wKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCop
IDAsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0
KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICBfX2xnKF9f
bGFzdCAtIF9fZmlyc3QpICogMik7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fbGFzdCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgdm9pZCBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAg
ICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCiAgICAgICAgICAgICAgICAgICAgIF9f
Y29tcCk7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21w
KTsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5w
bGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19sYXN0IC0g
X19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAg
ICByZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChf
X2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9f
bWlkZGxlKTsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19sYXN0IC0gX19taWRkbGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwg
MTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAg
cmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19s
YXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21p
ZGRsZSwgX19jb21wKTsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwg
X19jb21wKTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21l
cmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQp7CiAg
X0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwg
X19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19z
dGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICBfX3Jl
c3VsdCk7CiAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgfQoKICBfX3N0ZXBfc2l6ZSA9IG1p
bihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICBtZXJnZShfX2Zp
cnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0
LAogICAgICAgIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
MSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBj
bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rp
c3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJz
dCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAg
ICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9
IF9fdHdvX3N0ZXA7CiAgfQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBf
X2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVw
X3NpemUsCiAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgX19y
ZXN1bHQsCiAgICAgICAgX19jb21wKTsKfQoKY29uc3QgaW50IF9fc3RsX2NodW5rX3NpemUgPSA3
OwoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZv
aWQgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfRGlzdGFu
Y2UgX19jaHVua19zaXplKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19z
aXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3Np
emUpOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3Nv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0
LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgX19maXJzdCArPSBfX2NodW5r
X3NpemU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz
cyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm
ZXIsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog
IF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFuY2Ug
X19zdGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9f
bGVuKSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBf
X3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3Ao
X19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKICAgIF9fc3Rl
cF9zaXplICo9IDI7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4K
dm9pZCBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf
UG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
KiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJz
dDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3Rh
bmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogIHdoaWxlIChfX3N0
ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3Qs
IF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAg
ICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19z
dGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNl
Pgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Bv
aW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19i
dWZmZXJfc2l6ZSkKewogIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkg
LyAyOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlm
IChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19m
aXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fc3RhYmxlX3Nv
cnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwog
IH0KICBlbHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRs
ZSwgX19idWZmZXIsIChfRGlzdGFuY2UqKTApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVy
KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICB9CiAgX19tZXJn
ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUg
LSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRs
ZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xh
c3MgX0NvbXBhcmU+CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSBfX2J1ZmZlcl9zaXplLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19s
ZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21p
ZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAg
ICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19i
dWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fc3Rh
YmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3Np
emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAg
X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9E
aXN0YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBf
X21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlz
dGFuY2UqKTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBf
X21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21p
ZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9f
bWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFu
ZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2lu
KCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIGVs
c2UKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4o
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0
YW5jZSwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRv
bUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigp
ID09IDApCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp
OwogIGVsc2UKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYu
YmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3N0
YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1
ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp
cnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh
cmU+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUg
X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBf
X3N0YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192
YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIG1ha2VfaGVh
cChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21p
ZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAg
IF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kpLAogICAgICAgICAg
ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9f
bWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9p
ZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3BhcnRpYWxfc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwK
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21w
YXJlIF9fY29tcCkKewogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBm
b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19p
KQogICAgaWYgKF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgIF9fcG9wX2hlYXAoX19maXJz
dCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kpLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgX19k
aXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9f
Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh
cmU+CmlubGluZSB2b2lkIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9f
Y29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19w
YXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmly
c3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX1JhbmRv
bUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1
bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0
X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0
X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYm
IF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAqX19yZXN1bHRfcmVh
bF9sYXN0ID0gKl9fZmlyc3Q7CiAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICsrX19maXJz
dDsKICB9CiAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwog
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0
X2ZpcnN0KQogICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCks
CiAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVz
dWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfVHAoKl9fZmlyc3QpKTsKICAgICsrX19m
aXJzdDsKICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3Qp
OwogIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBh
cnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t
cGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNz
SXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs
dF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKiwgX1RwKikKewogIGlmIChfX3Jl
c3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFu
ZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGls
ZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFz
dCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9y
ZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwg
X19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg
ewogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgX19hZGp1
c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAg
ICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwog
ICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3Jl
YWxfbGFzdCwgX19jb21wKTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21w
YXJlPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fcmVzdWx0X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9f
cGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1
bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0X2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1l
bnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICB3aGls
ZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0K
ICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkp
KTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxz
ZQogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lk
IG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19udGhfZWxl
bWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh
cmU+CnZvaWQgX19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg
PiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh
cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo
X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbXApOwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7
CiAgICBlbHNlCiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX250aF9lbGVtZW50KF9f
Zmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoK
CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
Y2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
dmFsLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2Zp
cnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBf
X21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsK
ICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAg
ICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAg
ICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAg
ZWxzZQogICAgICBfX2xlbiA9IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciBs
b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFz
dCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7
CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVu
KTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUg
KF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19m
aXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21p
ZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0
OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAg
X19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJ
dGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21w
YXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBy
ZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAg
ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJk
SXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFu
Y2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs
IF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAg
d2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxl
ID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX192YWwg
PCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fZmly
c3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19o
YWxmIC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9f
bGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2Ug
X19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewog
ICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFu
Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQog
ICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7
CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9
CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5k
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX191cHBlcl9i
b3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAg
ICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y
d2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewog
IF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7
CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19y
aWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAg
IF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBp
ZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAr
K19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxz
ZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7
CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAg
ICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQo
KytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0
ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBh
aXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9Gb3J3YXJk
SXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICByZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAog
ICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9EaXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVhbF9yYW5n
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf
X3ZhbCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBfRGlz
dGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9E
aXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7
CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21p
ZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9f
Y29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBl
bHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgIF9fbGVuID0gX19oYWxmOwog
ICAgZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X3ZhbCwgX19jb21wKTsKICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmln
aHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAg
ICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdo
dCk7CiAgICB9CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihf
X2ZpcnN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0
ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2Uo
X19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcD4KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91
bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShf
X3ZhbCA8ICpfX2kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFs
LAogICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYm
ICFfX2NvbXAoX192YWwsICpfX2kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg
Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBtZXJnZShf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVz
dWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFy
ZT4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBh
cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYg
KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQog
IHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBf
X3Jlc3VsdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNz
IF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E
aXN0YW5jZSBfX2xlbjIpCnsKICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICBy
ZXR1cm47CiAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoKl9fbWlkZGxlIDwg
Kl9fZmlyc3QpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47
CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjEx
ID0gMDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewog
ICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjEx
KTsKICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2Zp
cnN0X2N1dCk7CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsK
ICB9CiAgZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNv
bmRfY3V0LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwg
X19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9j
dXQsIF9fbGVuMTEpOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAgICA9
IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJnZV93
aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgX19tZXJnZV93aXRob3V0X2J1
ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjEx
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMik7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBh
cmU+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2Ug
X19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAg
aWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEg
KyBfX2xlbjIgPT0gMikgewogICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAg
ICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsKICB9CiAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0
YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICBfX2xlbjExID0g
X19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgX19zZWNv
bmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2Nv
bXApOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQog
IGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1
dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlk
ZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJz
dF9jdXQsIF9fbGVuMTEpOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAg
ICA9IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJn
ZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xl
bjExLCBfX2xlbjIyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVu
MSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBf
X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICBpZiAoX19sZW4xID4gX19sZW4yICYm
IF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlk
ZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRk
bGUsIF9fbGFzdCk7CiAgICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2Zp
cnN0KTsKICB9CiAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVm
ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIGNvcHkoX19t
aWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZl
ciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICByZXR1cm4gcm90YXRlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcjM+Cl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19y
ZXN1bHQpCnsKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFz
dDIpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp
OwogIC0tX19sYXN0MTsKICAtLV9fbGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmICgqX19s
YXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgIGlm
IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly
c3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgfQogICAgZWxz
ZSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEs
IF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QyOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAg
ICBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzLCBjbGFzcyBfQ29tcGFyZT4KX0JpZGlyZWN0aW9u
YWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MSA9PSBfX2xh
c3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0
KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3
aGlsZSAodHJ1ZSkgewogICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAg
ICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQog
ICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0
KTsKICAgICAgLS1fX2xhc3QxOwogICAgfQogICAgZWxzZSB7CiAgICAgICotLV9fcmVzdWx0ID0g
Kl9fbGFzdDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBj
b3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xh
c3QyOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh
c3MgX0Rpc3RhbmNlLCBjbGFzcyBfUG9pbnRlcj4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5j
ZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3Rh
bmNlIF9fYnVmZmVyX3NpemUpCnsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0g
X19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwg
X19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1
ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBf
X2xhc3QsIF9fYnVmZmVyKTsKICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUs
IF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UgewogICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAg
IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAg
X19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEp
OwogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19m
aXJzdF9jdXQpOwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIy
KTsKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgYWR2
YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2Jv
dW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgZGlzdGFuY2UoX19m
aXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQogICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21p
ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0
aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAg
ICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVy
Z2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g
X19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
ciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfUG9pbnRlciwKICAgICAgICAgIGNsYXNzIF9Db21w
YXJlPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAg
ICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xlbjEgPD0gX19sZW4y
ICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQg
PSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwg
X19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogIH0KICBl
bHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJf
ZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3
YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Nl
Y29uZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0
YW5jZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4x
MSA9IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAg
ICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9j
dXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVu
MjIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBh
ZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJf
Ym91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgIGRp
c3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0
X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19t
ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjEx
LAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwg
X19jb21wKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs
IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0g
X19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgfQp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIHZvaWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t
aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAw
OwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVm
ZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlm
IChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICBlbHNlCiAgICBfX21lcmdlX2Fk
YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAg
ICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwKICAgICAgICAg
IGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9faW5wbGFjZV9t
ZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5j
ZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAg
X0Rpc3RhbmNlIF9fbGVuMSA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVu
MSk7CiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7CiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwg
X19sZW4yKTsKCiAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9f
YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVy
Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xl
bjIsIF9fY29tcCk7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVn
aW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIGlu
cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21p
ZGRsZSA9PSBfX2xhc3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0
LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9f
Zmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgaW5wbGFjZV9tZXJn
ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl
IHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVl
X3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAg
ICAgICAgIF9fY29tcCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMj4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9f
Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlIGlmKCpfX2Zp
cnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UKICAgICAgKytfX2Zp
cnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJl
Pgpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlm
IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBl
bHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAg
ICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9
PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19f
Zmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAg
fQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3Qx
LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1
dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0
cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAg
ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg
KytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7
CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0
OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19s
YXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rp
b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9f
Zmlyc3QyKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmly
c3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3Vs
dDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3Mg
X0NvbXBhcmU+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz
dDIsICpfX2ZpcnN0MSkpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAg
ICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRw
dXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAo
Kl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICArK19f
Zmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+
Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19y
ZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQog
ICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19m
aXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3Mg
X091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsK
ICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9
CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICBy
ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
MiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0
ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2Zp
cnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr
X19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg
KytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19f
Zmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBf
X2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAo
Kl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4g
X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJl
PgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19m
aXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmly
c3QgIT0gX19sYXN0KQogICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1
bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcj4KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2Zp
cnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX2ZpcnN0IDwgKl9f
cmVzdWx0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVy
IG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0Zvcndh
cmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkK
ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgIF9fcmVzdWx0ID0gX19m
aXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXI+CmJvb2wgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsK
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09
IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZv
cig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAg
IGlmICgqX19pIDwgKl9faWkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFz
dDsKICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9z
d2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4g
dHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIG5leHRfcGVybXV0
YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAg
cmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19p
OwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsK
ICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsK
ICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19q
KSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9f
aWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2Zp
cnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNl
OwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBw
cmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0
dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKCpfX2lpIDwgKl9f
aSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAo
ISgqLS1fX2ogPCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog
ICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAg
aWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rp
b25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBf
X2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3Io
OzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBp
ZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0g
X19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQogICAgICAgIHt9CiAg
ICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg
ICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2
ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9JbnB1dEl0
ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJk
SXRlciBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsg
X19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9f
aXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmICgq
X19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9f
bGFzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJ
dGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf
X2ZpcnN0MSkKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIg
IT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVy
KSkKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0KIyAzNDE5ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBfX2Zp
bmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn
LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAg
cmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19s
YXN0MTsKICAgIHdoaWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAg
ICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAg
ICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19m
aXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIs
CiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9l
bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZv
cndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2xh
c3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3
aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2Vh
cmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAg
aWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg
ICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJz
dDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0K
fQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIyPgpfQmlkaXJlY3Rpb25hbEl0ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4g
X1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIy
PiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIy
IF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJ
dGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0
MSkKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFu
Y2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIy
LAogICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyMQpf
X2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlk
aXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRl
cjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJ
dGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJ
dGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChf
UmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29tcCk7CgogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4g
X19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3Jy
ZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBf
X2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgX0ZvcndhcmRJdGVyMQpm
aW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQo
X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRl
PgppbmxpbmUgX0ZvcndhcmRJdGVyMQpmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf
Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G
b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX2ZpbmRfZW5k
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+
CmJvb2wgX19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24p
CnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAx
OyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8
IF9fZmlyc3RbX19jaGlsZF0pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAm
IDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmlj
dFdlYWtPcmRlcmluZz4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXAsCiAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24p
CnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAx
OyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3Bh
cmVudF0sIF9fZmlyc3RbX19jaGlsZF0pKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9f
Y2hpbGQgJiAxKSA9PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJz
dCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19jb21wLCBf
X2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmJv
b2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJu
IHRydWU7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7
IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAo
Kl9fbmV4dCA8ICpfX2ZpcnN0KQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1
ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRl
cmluZz4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiB0cnVl
OwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsrX19uZXh0OyBfX25l
eHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewogICAgaWYgKF9fY29t
cCgqX19uZXh0LCAqX19maXJzdCkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0
cnVlOwp9Cgp9CiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3Jp
dGhtLmgiIDIgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2FsZ29yaXRobSIgMiAz
CiMgNDkgInN0bGluY2wuaCIgMgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIyA4NyAidmVjY2xlYW4u
Y3BwIiAyCiMgMSAidmVjY2xlYW4uaCIgMQojIDU4ICJ2ZWNjbGVhbi5oIgojIDEgIi4uLy4uLy4u
L3BjaXN5cy5oIiAxCiMgNTkgInZlY2NsZWFuLmgiIDIKIyAxICJzdGxpbmNsLmgiIDEKIyA2MCAi
dmVjY2xlYW4uaCIgMgoKCgoKCmlubGluZSBpbnQgVkNMREJMQ29tcCggZG91YmxlIGRmMSwgZG91
YmxlIGRmMiwgaW50IG5TaWdGaWdzID0gMTMgKQp7CiAgICAgICAgZG91YmxlIGRmMzsKCiAgICAg
ICAgZGYzID0gZmFicyggZGYxICk7CiAgICAgICAgaW50IG5EaWdpdHMgPSAwOwogICAgICAgIHdo
aWxlIChkZjMgPj0gMS4wKQogICAgICAgIHsKICAgICAgICAgICAgbkRpZ2l0cysrOwogICAgICAg
ICAgICBkZjMgPSBkZjMgLyAxMC4wOwogICAgICAgIH0KCiAgICAgICAgZG91YmxlIGRmTXVsdCA9
IHBvdygoIGludCApIDEwLCBuU2lnRmlncyAtIG5EaWdpdHMgKTsKICAgICAgICBkZjMgPSAoIGRm
MSAtIGRmMiApICogZGZNdWx0OwoKICAgICAgICBpZiAoZmFicyggZGYzICkgPCAxLjApCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIGVsc2UgaWYgKGRm
MyA8IDAuMCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KfQoKaW5s
aW5lIGludCBWQ0xGTFRDb21wKCBmbG9hdCBkZjEsIGZsb2F0IGRmMiwgaW50IG5TaWdGaWdzID0g
NSApCnsKICAgICAgICBmbG9hdCBkZjM7CgogICAgICAgIGRmMyA9IGZhYnMoIGRmMSApOwogICAg
ICAgIGludCBuRGlnaXRzID0gMDsKICAgICAgICB3aGlsZSAoZGYzID49IDEuMCkKICAgICAgICB7
CiAgICAgICAgICAgIG5EaWdpdHMrKzsKICAgICAgICAgICAgZGYzID0gZGYzIC8gMTAuMDsKICAg
ICAgICB9CgogICAgICAgIGZsb2F0IGRmTXVsdCA9IHBvdygoIGludCApIDEwLCBuU2lnRmlncyAt
IG5EaWdpdHMgKTsKICAgICAgICBkZjMgPSAoIGRmMSAtIGRmMiApICogZGZNdWx0OwoKICAgICAg
ICBpZiAoZmFicyggZGYzICkgPCAxLjApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICB9CgogICAgICAgIGVsc2UgaWYgKGRmMyA8IDAuMCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAxOwogICAgICAgIH0KfQojIDE0MCAidmVjY2xlYW4uaCIKY2xhc3MgQ1ZDTFBv
aW50CnsKIHB1YmxpYzoKICAgIENWQ0xQb2ludCgpOwogICAgQ1ZDTFBvaW50KCBkb3VibGUgeCwg
ZG91YmxlIHksIGRvdWJsZSB6ID0gMC4wICk7CiAgICBDVkNMUG9pbnQoIGNvbnN0IEdEQlZlcnRl
eCAmIG9WZXJ0ZXggKTsKICAgIENWQ0xQb2ludCggY29uc3QgQ1ZDTFBvaW50ICYgb1BvaW50ICk7
CgogICAgdmlydHVhbCB+Q1ZDTFBvaW50KCk7CgogICAgVEJvb2wgb3BlcmF0b3IgPT0gKCBjb25z
dCBDVkNMUG9pbnQgJiBvUG9pbnQgKSBjb25zdDsKICAgIFRCb29sIG9wZXJhdG9yICE9ICggY29u
c3QgQ1ZDTFBvaW50ICYgb1BvaW50ICkgY29uc3Q7CiAgICBUQm9vbCBvcGVyYXRvcjwgKCBjb25z
dCBDVkNMUG9pbnQgJiBvUG9pbnQgKSBjb25zdDsKICAgIFRCb29sIG9wZXJhdG9yIDw9ICggY29u
c3QgQ1ZDTFBvaW50ICYgb1BvaW50ICkgY29uc3Q7CiAgICBUQm9vbCBvcGVyYXRvcj4gKCBjb25z
dCBDVkNMUG9pbnQgJiBvUG9pbnQgKSBjb25zdDsKICAgIFRCb29sIG9wZXJhdG9yID49ICggY29u
c3QgQ1ZDTFBvaW50ICYgb1BvaW50ICkgY29uc3Q7CgogICAgZG91YmxlIHg7CiAgICBkb3VibGUg
eTsKICAgIGRvdWJsZSB6OwoKICAgIHR5cGVkZWYgdmVjdG9yPENWQ0xQb2ludD4gVkNMUG9pbnRW
ZWN0b3JfdHA7CiAgICB0eXBlZGVmIHZlY3RvcjxWQ0xQb2ludFZlY3Rvcl90cD4gVkNMUG9pbnRW
ZWN0b3JMaXN0X3RwOwoKfTsKCgpjbGFzcyBWQ0xQb2ludExlc3MKewogcHVibGljOgogICAgVEJv
b2wgb3BlcmF0b3IoKSAoIGNvbnN0IENWQ0xQb2ludCAmIG9Qb2ludDEsIGNvbnN0IENWQ0xQb2lu
dCAmIG9Qb2ludDIgKSBjb25zdAogICAgewogICAgICAgIGludCByZXMgPSBWQ0xEQkxDb21wKCBv
UG9pbnQxLnksIG9Qb2ludDIueSApOwogICAgICAgIGlmIChyZXMgPT0gMCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJlcyA9IFZDTERCTENvbXAoIG9Qb2ludDEueCwgb1BvaW50Mi54ICk7CiAgICAg
ICAgfQogICAgICAgIHJldHVybiByZXMgPCAwOwogICAgfQp9OwoKY2xhc3MgVkNMUG9pbnRFcXVh
bAp7CiBwdWJsaWM6CiAgICBUQm9vbCBvcGVyYXRvcigpICggY29uc3QgQ1ZDTFBvaW50ICYgb1Bv
aW50MSwgY29uc3QgQ1ZDTFBvaW50ICYgb1BvaW50MiApIGNvbnN0CiAgICB7CiAgICAgICAgcmV0
dXJuICFWQ0xQb2ludExlc3MoKSAoIG9Qb2ludDEsIG9Qb2ludDIgKSAmJiAhVkNMUG9pbnRMZXNz
KCkgKCBvUG9pbnQyLCBvUG9pbnQxICk7CiAgICB9Cn07CgoKY2xhc3MgQ1ZDTFJlY3QKewogcHVi
bGljOgogICAgQ1ZDTFJlY3QoIGRvdWJsZSBkZlhNaW4sIGRvdWJsZSBkZllNaW4sIGRvdWJsZSBk
ZlhNYXgsIGRvdWJsZSBkZllNYXggKTsKICAgIENWQ0xSZWN0KCBjb25zdCBHREJWZXJ0ZXggJiBz
TWluLCBjb25zdCBHREJWZXJ0ZXggJiBzTWF4ICk7CiAgICBDVkNMUmVjdCgpOwoKICAgIENWQ0xS
ZWN0IENvbXB1dGVJbnRlcnNlY3Rpb24oIGNvbnN0IENWQ0xSZWN0ICYgb1JlY3QgKTsKICAgIENW
Q0xQb2ludCBDb21wdXRlQ2VudGVyKCk7CgogICAgVEJvb2wgSW50ZXJzZWN0cyggY29uc3QgQ1ZD
TFJlY3QgJiBvUmVjdCApIGNvbnN0OwogICAgVEJvb2wgUG9pbnRJblJlY3QoIGNvbnN0IENWQ0xQ
b2ludCAmIG9Qb2ludCApIGNvbnN0OwogICAgVEJvb2wgUG9pbnRJblJlY3QoIGRvdWJsZSBkZlgs
IGRvdWJsZSBkZlkgKSBjb25zdDsKCiAgICBDVkNMUG9pbnQgR2V0TG93ZXJMZWZ0KCkgY29uc3Q7
CiAgICBDVkNMUG9pbnQgR2V0VXBwZXJSaWdodCgpIGNvbnN0OwoKICAgIGlubGluZSB2b2lkIFNl
dFhNaW4oIGRvdWJsZSBkZlhNaW4gKQp7CiAgICAgICAgbV9kZlhNaW4gPSBkZlhNaW47CiAgICB9
CiAgICBpbmxpbmUgdm9pZCBTZXRYTWF4KCBkb3VibGUgZGZYTWF4ICkKewogICAgICAgIG1fZGZY
TWF4ID0gZGZYTWF4OwogICAgfQogICAgaW5saW5lIHZvaWQgU2V0WU1pbiggZG91YmxlIGRmWU1p
biApCnsKICAgICAgICBtX2RmWU1pbiA9IGRmWU1pbjsKICAgIH0KICAgIGlubGluZSB2b2lkIFNl
dFlNYXgoIGRvdWJsZSBkZllNYXggKQp7CiAgICAgICAgbV9kZllNYXggPSBkZllNYXg7CiAgICB9
CgogICAgaW5saW5lIGRvdWJsZSBHZXRYTWluKCkgY29uc3QKewogICAgICAgIHJldHVybiBtX2Rm
WE1pbjsKICAgIH0KICAgIGlubGluZSBkb3VibGUgR2V0WE1heCgpIGNvbnN0CnsKICAgICAgICBy
ZXR1cm4gbV9kZlhNYXg7CiAgICB9CiAgICBpbmxpbmUgZG91YmxlIEdldFlNaW4oKSBjb25zdAp7
CiAgICAgICAgcmV0dXJuIG1fZGZZTWluOwogICAgfQogICAgaW5saW5lIGRvdWJsZSBHZXRZTWF4
KCkgY29uc3QKewogICAgICAgIHJldHVybiBtX2RmWU1heDsKICAgIH0KCiAgICBmcmllbmQgVEJv
b2wgb3BlcmF0b3IgPT0gKCBjb25zdCBDVkNMUmVjdCAmIG9SZWN0MSwgY29uc3QgQ1ZDTFJlY3Qg
JiBvUmVjdDIgKTsKCiBwcml2YXRlOgogICAgZG91YmxlIG1fZGZYTWluOwogICAgZG91YmxlIG1f
ZGZYTWF4OwogICAgZG91YmxlIG1fZGZZTWluOwogICAgZG91YmxlIG1fZGZZTWF4Owp9OwoKCmNs
YXNzIENWQ0xTaGFwZVByb3BzCnsKIHB1YmxpYzoKICAgIENWQ0xTaGFwZVByb3BzKCk7CiAgICB+
Q1ZDTFNoYXBlUHJvcHMoKTsKCiAgICBkb3VibGUgbV9kZk1lcmdlVG9sOwogICAgZG91YmxlIG1f
ZGZEYW5nbGVUb2w7CiAgICBkb3VibGUgbV9kZkNsaXBUb2w7CiAgICBUQm9vbCBtX2JSZXZlcnNl
ZDsKICAgIFRCb29sIG1fYlJlZmVyZW5jZTsKICAgIGludCAqcF9hdHRyaWI7CiAgICBHREJMYXll
ciBtX2hHREJMYXllckluOwogICAgR0RCU2hhcGVJZCBtX2hHREJTaGFwZUlkOwogICAgR0RCTGF5
ZXIgbV9oR0RCTGF5ZXJPdXQ7CgoKfTsKCmNsYXNzIENWQ0xTaGFwZUZhY3Rvcnk7CgoKY2xhc3Mg
Q1ZDTFNoYXBlCnsKIHB1YmxpYzoKCgogICAgdHlwZWRlZiBsb25nIFZDTFNoYXBlSWRfdHA7CgoK
ICAgIHR5cGVkZWYgdmVjdG9yPFZDTFNoYXBlSWRfdHA+IFZDTFNoYXBlSWRWZWN0b3JfdHA7CgoK
ICAgIHR5cGVkZWYgdmVjdG9yPENWQ0xTaGFwZSAqID4gVkNMU2hhcGVWZWN0b3I7CgogcHVibGlj
OgogICAgQ1ZDTFNoYXBlKCk7CiAgICBDVkNMU2hhcGUgKGNvbnN0IENWQ0xTaGFwZSAmb1NoYXBl
KTsKICAgIHZpcnR1YWwgfkNWQ0xTaGFwZSgpOwoKICAgIFRCb29sIElzTGVmdE9mKCBjb25zdCBD
VkNMUG9pbnQgJiBvUG9pbnQgKTsKICAgIFRCb29sIElzTGVmdE9uKCBjb25zdCBDVkNMUG9pbnQg
JiBvUG9pbnQgKTsKICAgIFRCb29sIElzT24oIGNvbnN0IENWQ0xQb2ludCAmIG9Qb2ludCApOwog
ICAgVEJvb2wgSXNSaWdodE9mKCBjb25zdCBDVkNMUG9pbnQgJiBvUG9pbnQgKTsKICAgIFRCb29s
IElzTW9ub3RvbmljKCk7CgogICAgZG91YmxlIENvbXB1dGVYKCBkb3VibGUgZGZZICk7CgogICAg
VkNMU2hhcGVJZF90cCBHZXRJZCgpIGNvbnN0OwogICAgQ1ZDTFNoYXBlUHJvcHMgR2V0U2hhcGVQ
cm9wcygpIGNvbnN0OwoKICAgIENWQ0xQb2ludCBHZXRGaXJzdCgpIGNvbnN0OwogICAgQ1ZDTFBv
aW50IEdldFNlY29uZCgpIGNvbnN0OwogICAgQ1ZDTFBvaW50IEdldFNlY29uZFRvTGFzdCgpIGNv
bnN0OwogICAgQ1ZDTFBvaW50IEdldExhc3QoKSBjb25zdDsKCiAgICBkb3VibGUgR2V0RGlzdGFu
Y2VGcm9tKCBDVkNMUG9pbnQgJiBvQ2xvc2VzdCwgY29uc3QgQ1ZDTFBvaW50ICYgb0Zyb21XaGVy
ZSApIGNvbnN0OwogICAgZG91YmxlIEdldFNoYXBlTGVuZ3RoKCkgY29uc3Q7CiAgICBkb3VibGUg
R2V0VXBBbmdsZSgpIHsgcmV0dXJuIG1fZGZVcEFuZ2xlOwogICAgfQogICAgQ1ZDTFJlY3QgR2V0
UmFuZ2VSZWN0KCkgY29uc3Q7CgogICAgVEJvb2wgSW50ZXJzZWN0cyggQ1ZDTFBvaW50ICYgb1do
ZXJlLCBjb25zdCBDVkNMU2hhcGUgJm9TaGFwZSApOwoKICAgIHZvaWQgSW5zZXJ0UG9pbnQoIGNv
bnN0IENWQ0xQb2ludCAmIG9Qb2ludCApOwogICAgdm9pZCBSZXBsYWNlUG9pbnRzKCBjb25zdCBD
VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvVG8sIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9p
bnRWZWN0b3JfdHAgJm9Gcm9tICk7CiAgICB2b2lkIE1vdmVFbmRQb2ludCggY29uc3QgQ1ZDTFBv
aW50ICYgb0Rlc3QsIGNvbnN0IENWQ0xQb2ludCAmIG9Tb3VyY2UgKTsKCiAgICBWQ0xTaGFwZUlk
VmVjdG9yX3RwIEJyZWFrQXRQb2ludCggY29uc3QgQ1ZDTFBvaW50ICYgb1BvaW50ICk7CiAgICBW
Q0xTaGFwZUlkVmVjdG9yX3RwIEJyZWFrQXRQb2ludHMoIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9p
bnRWZWN0b3JfdHAgJm9Qb2ludHMgKTsKICAgIFZDTFNoYXBlSWRWZWN0b3JfdHAgRXh0ZW5kVG8o
IGNvbnN0IENWQ0xQb2ludCBvTmV3UG9pbnQsIGNvbnN0IENWQ0xQb2ludCAmIG9FbmRQb2ludCAp
OwoKICAgIHZvaWQgV3JpdGUoIGNvbnN0IEdEQkxheWVyICYgb0Rlc3RpbmF0aW9uICkgY29uc3Q7
CiAgICB2b2lkIFdyaXRlKCkgY29uc3Q7CgogICAgVEJvb2wgb3BlcmF0b3IgPT0gKCBjb25zdCBD
VkNMU2hhcGUgJm9TaGFwZSApOwoKCgoKCgogcHJpdmF0ZToKICAgIENWQ0xTaGFwZSAoY29uc3Qg
Q1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb1BvaW50cywgQ1ZDTFNoYXBlUHJvcHMgb1By
b3BlcnRpZXMsIGludCBuSWQpOwoKICAgIGZyaWVuZCBjbGFzcyBDVkNMU2hhcGVGYWN0b3J5OwoK
ICAgIFZDTFNoYXBlSWRfdHAgbV9zaGFwZUlkOwogICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rv
cl90cCBtX29Qb2ludHM7CiAgICBkb3VibGUgbV9kZlVwQW5nbGU7CiAgICBDVkNMU2hhcGVQcm9w
cyBtX29Qcm9wZXJ0aWVzOwp9OwoKCmNsYXNzIENWQ0xTaGFwZUZhY3RvcnkKewogcHVibGljOgog
ICAgQ1ZDTFNoYXBlRmFjdG9yeSgpOwogICAgdmlydHVhbCB+Q1ZDTFNoYXBlRmFjdG9yeSgpOwoK
ICAgIHN0YXRpYyBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgTWFrZVNoYXBlKCBjb25z
dCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgJm9JbnB1dFNoYXBlcywgY29uc3QgQ1ZD
TFNoYXBlUHJvcHMgJiBvUHJvcGVydGllcywgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAm
YnJlYWtQb2ludHMgKTsKICAgIHN0YXRpYyBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgTWFrZU1v
bm90b25pY1NoYXBlKCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvUG9pbnRz
LCBjb25zdCBDVkNMU2hhcGVQcm9wcyAmIG9Qcm9wZXJ0aWVzICk7CiAgICBzdGF0aWMgQ1ZDTFNo
YXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIE1ha2VNb25vdG9uaWNTaGFwZXMoIEdEQlNoYXBlSWQg
aEdEQlNoYXBlSWQsIEdEQkxheWVyIGhHREJMYXllciwgY29uc3QgQ1ZDTFNoYXBlUHJvcHMgJiBv
UHJvcGVydGllcyApOwogICAgc3RhdGljIHZvaWQgR2V0QVNoYXBlKCBDVkNMU2hhcGUgKiZzaGFw
ZSwgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIG5TaGFwZSApOwogICAgc3RhdGljIHZvaWQgUk1B
KCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgblNoYXBlICk7CgogICAgc3RhdGljIHZvaWQgUG93
ZXJEb3duKCk7CiBwcml2YXRlOgogICAgc3RhdGljIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBH
ZXRBU2hpZCgpOwogICAgc3RhdGljIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBtX25TaGFwZXM7
CiAgICBzdGF0aWMgdmVjdG9yPENWQ0xTaGFwZSAqID4gKm1fc2hhcGVUYWJsZTsKICAgIHN0YXRp
YyBzZXQ8Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwLCBsZXNzPENWQ0xTaGFwZTo6VkNMU2hhcGVJ
ZF90cD4gPiAqbV9hdmFpbFNoYXBlSWRzOwoKfTsKCgpjbGFzcyBDVkNMTm9kZVRhYmxlOwoKY2xh
c3MgQ1ZDTE5vZGUKewoKIHB1YmxpYzoKICAgIHR5cGVkZWYgaW50IFZDTE5vZGVJZF90cDsKICAg
IHR5cGVkZWYgc2V0PFZDTE5vZGVJZF90cCwgbGVzczxWQ0xOb2RlSWRfdHA+ID4gVkNMTm9kZVNl
dF90cDsKCiBwdWJsaWM6CiAgICBDVkNMTm9kZSggY29uc3QgQ1ZDTE5vZGUgJiBvTm9kZSApOwog
ICAgQ1ZDTE5vZGUoKTsKICAgIHZpcnR1YWwgfkNWQ0xOb2RlKCk7CgogICAgVkNMTm9kZUlkX3Rw
IEdldElkKCkgY29uc3Q7CiAgICBDVkNMUG9pbnQgR2V0UG9pbnQoKSBjb25zdDsKCiAgICBDVkNM
U2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgR2V0U2hpZHMoKSBjb25zdDsKICAgIENWQ0xTaGFw
ZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBHZXRVcFNoaWRzKCkgY29uc3Q7CiAgICBDVkNMU2hhcGU6
OlZDTFNoYXBlSWRWZWN0b3JfdHAgR2V0RG93blNoaWRzKCkgY29uc3Q7CgogICAgVEJvb2wgSXNE
YW5nbGUoKSBjb25zdDsKCiAgICBUQm9vbCBBZGQoIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBu
U2hhcGVJZCApOwogICAgdm9pZCBSZW1vdmUoIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBuSWQg
KTsKICAgIGludCBTaGFwZUNvdW50KCkgY29uc3Q7CgogICAgdm9pZCBNb3ZlTm9kZSggY29uc3Qg
Q1ZDTFBvaW50ICYgb0Rlc3QgKTsKCiAgICBDVkNMTm9kZSAmb3BlcmF0b3IgPSAoIGNvbnN0IENW
Q0xOb2RlICYgb05vZGUgKTsKICAgIFRCb29sIG9wZXJhdG9yID09ICggY29uc3QgQ1ZDTE5vZGUg
JiBvTm9kZSApOwoKICAgIHN0YXRpYyB2b2lkIFBvd2VyRG93bigpOwoKCgoKCgogcHJpdmF0ZToK
ICAgIENWQ0xOb2RlKCBjb25zdCBDVkNMUG9pbnQgJiBvUG9pbnQgKTsKCiAgICBmcmllbmQgY2xh
c3MgQ1ZDTE5vZGVUYWJsZTsKCgogICAgQ1ZDTFBvaW50IG1fb1BvaW50OwoKCiAgICBpbnQgbV9u
b2RlSWQ7CgoKICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBtX29TaGFwZXM7Cn07
CgoKY2xhc3MgQ1ZDTE5vZGVUYWJsZQp7CiBwdWJsaWM6CiAgICBDVkNMTm9kZVRhYmxlKCk7CiAg
ICB+Q1ZDTE5vZGVUYWJsZSgpOwoKICAgIFRCb29sIEFkZCggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlk
X3RwICk7CiAgICB2b2lkIFJlbW92ZSggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwICk7CgogICAg
Q1ZDTE5vZGUgKkZpcnN0KCkgY29uc3Q7CiAgICBDVkNMTm9kZSAqTmV4dCggY29uc3QgQ1ZDTE5v
ZGUgJiBvQ3VycmVudCApIGNvbnN0OwogICAgQ1ZDTE5vZGUgKlByZXYoIGNvbnN0IENWQ0xOb2Rl
ICYgb0N1cnJlbnQgKSBjb25zdDsKICAgIENWQ0xOb2RlICpGaW5kKCBjb25zdCBDVkNMUG9pbnQg
JiBvUG9pbnQgKSBjb25zdDsKCiAgICBpbnQgR2V0TnVtTm9kZXMoKSB7IHJldHVybiBtX25Db3Vu
dDsKICAgIH0KCiAgICB2b2lkIE1lcmdlTm9kZXMoIGNvbnN0IENWQ0xQb2ludCAmIG9EZXN0LCBD
VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIG9TcmMgKTsKICAgIHZvaWQgU3RyZWFtSW4oIEdE
QkxheWVyIGhMYXllciwgY29uc3QgQ1ZDTFNoYXBlUHJvcHMgJiBvUHJvcHMsIElNUFByb2dyZXNz
RnVuYyBwZm5Qcm9ncmVzcywgdm9pZCAqcFByb2dyZXNzQXJnICk7CiAgICB2b2lkIFN0cmVhbU91
dCgpOwoKICAgIHR5cGVkZWYgcGFpcjxDVkNMUG9pbnQsIENWQ0xOb2RlICogPiBOb2RlVGFibGVF
bnRyeV90cDsKCgoKCgoKCiBwcml2YXRlOgogICAgdHlwZWRlZiBtYXA8Q1ZDTFBvaW50LCBDVkNM
Tm9kZSAqLCBWQ0xQb2ludExlc3M+IE5vZGVUYWJsZV90cDsKICAgIE5vZGVUYWJsZV90cCBtX25v
ZGVUYWJsZTsKICAgIHVuc2lnbmVkIGludCBtX25Db3VudDsKfTsKClRCb29sIFZDTE5vZGVUYWJs
ZVBvaW50TGVzcyggY29uc3QgQ1ZDTE5vZGVUYWJsZTo6Tm9kZVRhYmxlRW50cnlfdHAgJm9GaXJz
dE5vZGUsIGNvbnN0IENWQ0xOb2RlVGFibGU6Ok5vZGVUYWJsZUVudHJ5X3RwICZvU2Vjb25kTm9k
ZSApOwoKY2xhc3MgQ1ZDTFN3ZWVwCnsKIHB1YmxpYzoKICAgIENWQ0xTd2VlcCgpOwogICAgdmly
dHVhbCB+Q1ZDTFN3ZWVwKCk7CgogICAgdm9pZCBBZGQoIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZl
Y3Rvcl90cCBvU2hhcGVJZHMgKTsKICAgIHZvaWQgUmVtb3ZlKCBDVkNMU2hhcGU6OlZDTFNoYXBl
SWRfdHAgblNoYXBlSWQgKTsKCiAgICB2b2lkIEZpbmROZWlnaGJvdXJzKCBDVkNMU2hhcGU6OlZD
TFNoYXBlSWRfdHAgJm9MZWZ0LCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgJm9SaWdodCwgY29u
c3QgQ1ZDTFBvaW50ICYgb1BvaW50ICk7CiAgICB2b2lkIEZpbmRBbGwoIENWQ0xTaGFwZTo6VkNM
U2hhcGVJZFZlY3Rvcl90cCAmb1NoYXBlcyApIGNvbnN0OwoKCgoKCgogcHJpdmF0ZToKICAgIENW
Q0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBtX3N3ZWVwOwp9OwoKCnR5cGVkZWYgZW51bSBf
T3JpZW50YXRpb25fdHAgeyBlSW5jLCBlRGVjLCBlSG9yaXpJbmMsIGVIb3JpekRlYyB9IE9yaWVu
dGF0aW9uX3RwOwoKCgpPcmllbnRhdGlvbl90cCBWQ0xHZXRPcmllbnRhdGlvbiggY29uc3QgQ1ZD
TFBvaW50ICZ2MSwgY29uc3QgQ1ZDTFBvaW50ICZ2MiApOwpkb3VibGUgVkNMQXJlYTIoIGNvbnN0
IENWQ0xQb2ludCAmc0EsIGNvbnN0IENWQ0xQb2ludCAmc0IsIGNvbnN0IENWQ0xQb2ludCAmc0Mg
KTsKVEJvb2wgVkNMSXNMZWZ0KCBjb25zdCBDVkNMUG9pbnQgJnNBLCBjb25zdCBDVkNMUG9pbnQg
JnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDICk7ClRCb29sIFZDTElzTGVmdE9uKCBjb25zdCBDVkNM
UG9pbnQgJnNBLCBjb25zdCBDVkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDLCBkb3Vi
bGUgZGZUb2wgPSAwLjAgKTsKVEJvb2wgVkNMSW50ZXJzZWN0UHJvcCggY29uc3QgQ1ZDTFBvaW50
ICZzQSwgY29uc3QgQ1ZDTFBvaW50ICZzQiwgY29uc3QgQ1ZDTFBvaW50ICZzQywgY29uc3QgQ1ZD
TFBvaW50ICZzRCwgZG91YmxlIGRmVG9sICk7ClRCb29sIFZDTElzQ29sbGluZWFyKCBjb25zdCBD
VkNMUG9pbnQgJnNBLCBjb25zdCBDVkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDLCBk
b3VibGUgZGZUb2wgKTsKVEJvb2wgVkNMSW50ZXJzZWN0aW9uKCBjb25zdCBDVkNMUG9pbnQgJnNB
LCBjb25zdCBDVkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDLCBjb25zdCBDVkNMUG9p
bnQgJnNELCBDVkNMUG9pbnQgJnNQLCBkb3VibGUgZGZUb2wgKTsKVEJvb2wgVkNMRXVjbGlkaWFu
RGlzdGFuY2UoIGNvbnN0IENWQ0xQb2ludCAmb0EsIGNvbnN0IENWQ0xQb2ludCAmb0IsIGNvbnN0
IENWQ0xQb2ludCAmb1AsIGRvdWJsZSAmZGZEaXN0LCBDVkNMUG9pbnQgJm9JICk7CkNWQ0xSZWN0
IFZDTENvbXB1dGVSYW5nZVJlY3QoIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAg
Jm9TaGFwZSApOwpkb3VibGUgVkNMQ29tcHV0ZUFuZ2xlKCBjb25zdCBDVkNMUG9pbnQgJnNBLCBj
b25zdCBDVkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDICk7CmRvdWJsZSBWQ0xDb21w
dXRlTGVuZ3RoKCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUgKTsK
ZG91YmxlIFZDTERpc3RhbmNlRnJvbSggQ1ZDTFBvaW50ICZvQ2xvc2VzdCwgY29uc3QgQ1ZDTFBv
aW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb1NoYXBlLCBjb25zdCBDVkNMUG9pbnQgJmZyb21XaGVy
ZSApOwpUQm9vbCBWQ0xJbnRlcnNlY3RTaGFwZSggQ1ZDTFBvaW50ICZvV2hlcmUsIGNvbnN0IENW
Q0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZTEsIGNvbnN0IENWQ0xQb2ludDo6VkNM
UG9pbnRWZWN0b3JfdHAgJm9TaGFwZTIgKTsKQ1ZDTFBvaW50IFZDTEludGVycG9sYXRlUG9pbnQo
IENWQ0xQb2ludCB2MSwgQ1ZDTFBvaW50IHYyLCBkb3VibGUgZGZSYW5nZSwgZG91YmxlIGRmRGlz
dCApOwpUQm9vbCBWQ0xJc0xlZnRPZlNoYXBlKCBjb25zdCBDVkNMUG9pbnQgJnYsIGNvbnN0IENW
Q0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZSApOwpUQm9vbCBWQ0xJc0xlZnRPblNo
YXBlKCBjb25zdCBDVkNMUG9pbnQgJnYsIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3Jf
dHAgJm9TaGFwZSApOwpUQm9vbCBWQ0xJc1JpZ2h0T2ZTaGFwZSggY29uc3QgQ1ZDTFBvaW50ICZ2
LCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUgKTsKVEJvb2wgVkNM
SXNNb25vdG9uaWMoIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZSAp
OwpUQm9vbCBWQ0xJc0hvcml6b250YWwoIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3Jf
dHAgJm9TaGFwZSApOwp2b2lkIFZDTEJyZWFrTW9ub3RvbmljKCBDVkNMUG9pbnQ6OlZDTFBvaW50
VmVjdG9yTGlzdF90cCAmb1NoYXBlcywgY29uc3QgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90
cCAmb1NoYXBlSW4gKTsKdm9pZCBWQ0xCcmVha01vbm90b25pYyggQ1ZDTFBvaW50OjpWQ0xQb2lu
dFZlY3Rvckxpc3RfdHAgJm9TaGFwZXMsIEdEQlZlcnRleCAqcGFzVmVydGV4LCBpbnQgblZlcnRl
eCApOwpDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cCBWQ0xDb25jYXRDaGFpbnMoIENW
Q0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwICZvU2hhcGVzLCBDVkNMUG9pbnQ6OlZDTFBv
aW50VmVjdG9yX3RwICZpbnRlcnNlY3Rpb25zICk7ClRCb29sIFZDTEluc2VydENoYWluSW50b0No
YWluTGlzdCggQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmc3RsQ2hhaW5Ub0luc2VydCwg
Q1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgJnN0bFRhcmdldENoYWlucyApOwpUQm9v
bCBWQ0xJbnNlcnRDaGFpbkludG9DaGFpbkxpc3QoIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3Jf
dHAgJnN0bENoYWluVG9JbnNlcnQsIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjpp
dGVyYXRvciBpU3RhcnRWZWN0b3IsIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjpp
dGVyYXRvciBpRW5kVmVjdG9yICk7ClRCb29sIFZDTENvbXBhY3RDaGFpbnMoIENWQ0xQb2ludDo6
VkNMUG9pbnRWZWN0b3JMaXN0X3RwICZzdGxWZWN0b3JPZkNoYWlucyApOwp2b2lkIFZDTFByaW50
ZiggY2hhciAqZm10LCAuLi4gKTsKdm9pZCBWQ0xVbmlxdWVWZXJ0ZXgoIENWQ0xQb2ludDo6VkNM
UG9pbnRWZWN0b3JfdHAgJm9TaGFwZSApOwp2b2lkIFZDTFVuaXF1ZVZlcnRleCggR0RCVmVydGV4
ICosIGludCAmblZlcnRleCApOwp2b2lkIFZDTEJyZWFrQXRQb2ludHMoIENWQ0xQb2ludDo6VkNM
UG9pbnRWZWN0b3JMaXN0X3RwICZvU2hhcGVzLCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVj
dG9yX3RwICZvU2hhcGUsIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb0JyZWFrUG9pbnRz
ICk7CnZvaWQgVkNMQ2xpcCggQ1ZDTE5vZGVUYWJsZSAmb05vZGVUYWJsZSwgSU1QUHJvZ3Jlc3NG
dW5jIHBmblByb2dyZXNzLCB2b2lkICpwUHJvZ3Jlc3NBcmcgKTsKdm9pZCBWQ0xEYW5nbGUoIENW
Q0xOb2RlVGFibGUgJm9Ob2RlVGFibGUsIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzcywgdm9p
ZCAqcFByb2dyZXNzQXJnICk7CnZvaWQgVkNMSW50ZXJzZWN0KCBDVkNMTm9kZVRhYmxlICZvTm9k
ZVRhYmxlLCBJTVBQcm9ncmVzc0Z1bmMgcGZuUHJvZ3Jlc3MsIHZvaWQgKnBQcm9ncmVzc0FyZyAp
OwpUQm9vbCBWQ0xDb21wYXJlTGF5ZXJBbmRJRCggQ1ZDTE5vZGUgKmZpcnN0LCBDVkNMTm9kZSAq
c2Vjb25kICk7ClRCb29sIFZDTENvbXBhcmVTaGFwZUlEKCBHREJMYXllciBobGF5ZXIsIEdEQlNo
YXBlSWQgZmlyc3QsIEdEQlNoYXBlSWQgc2Vjb25kLCBpbnQgRmllbGRJbmRleCApOwpUQm9vbCBW
Q0xDb21wYXJlU2hhcGVBbHdheXMoIEdEQkxheWVyIGhsYXllciwgR0RCU2hhcGVJZCBmaXJzdCwg
R0RCU2hhcGVJZCBzZWNvbmQsIGludCBGaWVsZEluZGV4ICk7ClRCb29sIFZDTENvbXBhcmVTaGFw
ZU5ldmVyKCBHREJMYXllciBobGF5ZXIsIEdEQlNoYXBlSWQgZmlyc3QsIEdEQlNoYXBlSWQgc2Vj
b25kLCBpbnQgRmllbGRJbmRleCApOwp2b2lkIFZDTEltcG9ydCggQ1ZDTE5vZGVUYWJsZSAmb05v
ZGVUYWJsZSwgR0RCTGF5ZXIgJnBMYXllciwgQ1ZDTFNoYXBlUHJvcHMgJm9TaGFwZVByb3BzLCBJ
TVBQcm9ncmVzc0Z1bmMgcGZuUHJvZ3Jlc3MsIHZvaWQgKnBQcm9ncmVzc0FyZyApOwp2b2lkIFZD
TE91dHB1dCggQ1ZDTE5vZGVUYWJsZSAmb05vZGVUYWJsZSwgSU1QUHJvZ3Jlc3NGdW5jIHBmblBy
b2dyZXNzLCB2b2lkICpwUHJvZ3Jlc3NBcmcsIFRCb29sKCAqY29tcGFyZSApICggQ1ZDTE5vZGUg
KiwgQ1ZDTE5vZGUgKiApLCBUQm9vbCggKnNoYXBlY29tcGFyZSApICggR0RCTGF5ZXIsIEdEQlNo
YXBlSWQsIEdEQlNoYXBlSWQsIGludCApKTsKY2hhciBWQ0xTZWdTZWdJbnQoIGNvbnN0IEdEQlZl
cnRleCAmYSwgY29uc3QgR0RCVmVydGV4ICZiLCBjb25zdCBHREJWZXJ0ZXggJmMsIGNvbnN0IEdE
QlZlcnRleCAmZCwgR0RCVmVydGV4ICZwICk7ClRCb29sIFZDTEJldHdlZW4oIGNvbnN0IEdEQlZl
cnRleCAmYSwgY29uc3QgR0RCVmVydGV4ICZiLCBjb25zdCBHREJWZXJ0ZXggJmMgKTsKaW50IFZD
TENvbGxpbmVhciggY29uc3QgR0RCVmVydGV4ICZhLCBjb25zdCBHREJWZXJ0ZXggJmIsIGNvbnN0
IEdEQlZlcnRleCAmYyApOwojIDg4ICJ2ZWNjbGVhbi5jcHAiIDIKIyAxNDMgInZlY2NsZWFuLmNw
cCIKQ1ZDTFBvaW50OjpDVkNMUG9pbnQoKQp7CiAgICAgICAgdGhpcy0+eCA9IDAuMDsKICAgICAg
ICB0aGlzLT55ID0gMC4wOwogICAgICAgIHRoaXMtPnogPSAwLjA7Cn0KIyAxNjYgInZlY2NsZWFu
LmNwcCIKQ1ZDTFBvaW50Ojp+Q1ZDTFBvaW50KCkKewp9CiMgMTkxICJ2ZWNjbGVhbi5jcHAiCkNW
Q0xQb2ludDo6Q1ZDTFBvaW50KCBkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6ICkKewogICAg
ICAgIHRoaXMtPnggPSB4OwogICAgICAgIHRoaXMtPnkgPSB5OwogICAgICAgIHRoaXMtPnogPSB6
Owp9CiMgMjE2ICJ2ZWNjbGVhbi5jcHAiCkNWQ0xQb2ludDo6Q1ZDTFBvaW50KCBjb25zdCBHREJW
ZXJ0ZXggJm9WZXJ0ZXggKQp7CiAgICAgICAgdGhpcy0+eCA9IG9WZXJ0ZXgueDsKICAgICAgICB0
aGlzLT55ID0gb1ZlcnRleC55OwogICAgICAgIHRoaXMtPnogPSBvVmVydGV4Lno7Cn0KIyAyNDEg
InZlY2NsZWFuLmNwcCIKQ1ZDTFBvaW50OjpDVkNMUG9pbnQoIGNvbnN0IENWQ0xQb2ludCAmb1Bv
aW50ICkKewogICAgICAgIHRoaXMtPnggPSBvUG9pbnQueDsKICAgICAgICB0aGlzLT55ID0gb1Bv
aW50Lnk7CiAgICAgICAgdGhpcy0+eiA9IG9Qb2ludC56Owp9CiMgMjY2ICJ2ZWNjbGVhbi5jcHAi
ClRCb29sIENWQ0xQb2ludDo6b3BlcmF0b3IgPT0gKCBjb25zdCBDVkNMUG9pbnQgJm9Qb2ludCAp
IGNvbnN0CnsKICAgICAgICByZXR1cm4gKFZDTERCTENvbXAoIHRoaXMtPngsIG9Qb2ludC54ICkg
PT0gMCkgJiYKICAgICAgICAgICAgKCBWQ0xEQkxDb21wKCB0aGlzLT55LCBvUG9pbnQueSApID09
IDAgKTsKfQojIDI5MCAidmVjY2xlYW4uY3BwIgpUQm9vbCBDVkNMUG9pbnQ6Om9wZXJhdG9yICE9
ICggY29uc3QgQ1ZDTFBvaW50ICZvUG9pbnQgKSBjb25zdAp7CiAgICAgICAgcmV0dXJuICEoICp0
aGlzID09IG9Qb2ludCApOwp9CiMgMzEyICJ2ZWNjbGVhbi5jcHAiClRCb29sIENWQ0xQb2ludDo6
b3BlcmF0b3I8ICggY29uc3QgQ1ZDTFBvaW50ICZvUG9pbnQgKSBjb25zdAp7CiAgICAgICAgaW50
IHJlcyA9IFZDTERCTENvbXAoIHRoaXMtPnksIG9Qb2ludC55ICk7CgogICAgICAgIGlmIChyZXMg
PT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIHJlcyA9IFZDTERCTENvbXAoIHRoaXMtPngsIG9Q
b2ludC54ICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzIDwgMDsKfQojIDM0MSAidmVj
Y2xlYW4uY3BwIgpUQm9vbCBDVkNMUG9pbnQ6Om9wZXJhdG9yPiAoIGNvbnN0IENWQ0xQb2ludCAm
b1BvaW50ICkgY29uc3QKewogICAgICAgIHJldHVybiAhKCggKnRoaXMgPT0gb1BvaW50ICkgfHwg
KCAqdGhpcyA8IG9Qb2ludCApKTsKfQojIDM2MyAidmVjY2xlYW4uY3BwIgpUQm9vbCBDVkNMUG9p
bnQ6Om9wZXJhdG9yID49ICggY29uc3QgQ1ZDTFBvaW50ICZvUG9pbnQgKSBjb25zdAp7CiAgICAg
ICAgcmV0dXJuICgoICp0aGlzID4gb1BvaW50ICkgfHwgKCAqdGhpcyA9PSBvUG9pbnQgKSk7Cn0K
IyAzODUgInZlY2NsZWFuLmNwcCIKVEJvb2wgQ1ZDTFBvaW50OjpvcGVyYXRvciA8PSAoIGNvbnN0
IENWQ0xQb2ludCAmb1BvaW50ICkgY29uc3QKewogICAgICAgIHJldHVybiAoKCAqdGhpcyA8IG9Q
b2ludCApIHx8ICggKnRoaXMgPT0gb1BvaW50ICkpOwp9CiMgNDIwICJ2ZWNjbGVhbi5jcHAiCkNW
Q0xSZWN0OjpDVkNMUmVjdCggZG91YmxlIGRmWDEsIGRvdWJsZSBkZlkxLCBkb3VibGUgZGZYMiwg
ZG91YmxlIGRmWTIgKQp7CiAgICAgICAgbV9kZlhNaW4gPSAoKGRmWDEpIDwgKGRmWDIpID8gKGRm
WDEpIDogKGRmWDIpKTsKICAgICAgICBtX2RmWU1pbiA9ICgoZGZZMSkgPCAoZGZZMikgPyAoZGZZ
MSkgOiAoZGZZMikpOwogICAgICAgIG1fZGZYTWF4ID0gKChkZlgxKSA+IChkZlgyKSA/IChkZlgx
KSA6IChkZlgyKSk7CiAgICAgICAgbV9kZllNYXggPSAoKGRmWTEpID4gKGRmWTIpID8gKGRmWTEp
IDogKGRmWTIpKTsKfQojIDQ0NyAidmVjY2xlYW4uY3BwIgpDVkNMUmVjdDo6Q1ZDTFJlY3QoIGNv
bnN0IEdEQlZlcnRleCAmdjEsIGNvbnN0IEdEQlZlcnRleCAmdjIgKQp7CiAgICAgICAgbV9kZlhN
aW4gPSAoKHYxLngpIDwgKHYyLngpID8gKHYxLngpIDogKHYyLngpKTsKICAgICAgICBtX2RmWU1p
biA9ICgodjEueSkgPCAodjIueSkgPyAodjEueSkgOiAodjIueSkpOwogICAgICAgIG1fZGZYTWF4
ID0gKCh2MS54KSA+ICh2Mi54KSA/ICh2MS54KSA6ICh2Mi54KSk7CiAgICAgICAgbV9kZllNYXgg
PSAoKHYxLnkpID4gKHYyLnkpID8gKHYxLnkpIDogKHYyLnkpKTsKfQojIDQ3MSAidmVjY2xlYW4u
Y3BwIgpDVkNMUmVjdDo6Q1ZDTFJlY3QoKQp7CiAgICAgICAgbV9kZlhNaW4gPSAwLjA7CiAgICAg
ICAgbV9kZllNaW4gPSAwLjA7CiAgICAgICAgbV9kZlhNYXggPSAwLjA7CiAgICAgICAgbV9kZllN
YXggPSAwLjA7Cn0KIyA0OTggInZlY2NsZWFuLmNwcCIKVEJvb2wgQ1ZDTFJlY3Q6OlBvaW50SW5S
ZWN0KCBkb3VibGUgZGZYLCBkb3VibGUgZGZZICkgY29uc3QKewogICAgICAgIHJldHVybiBkZlgg
Pj0gbV9kZlhNaW4gJiYgZGZYIDw9IG1fZGZYTWF4ICYmCiAgICAgICAgICAgIGRmWSA+PSBtX2Rm
WU1pbiAmJiBkZlkgPD0gbV9kZllNYXg7Cn0KIyA1MjIgInZlY2NsZWFuLmNwcCIKVEJvb2wgQ1ZD
TFJlY3Q6OlBvaW50SW5SZWN0KCBjb25zdCBDVkNMUG9pbnQgJm9Qb2ludCApIGNvbnN0CnsKICAg
ICAgICByZXR1cm4gUG9pbnRJblJlY3QoIG9Qb2ludC54LCBvUG9pbnQueSApOwp9CiMgNTQ1ICJ2
ZWNjbGVhbi5jcHAiClRCb29sIENWQ0xSZWN0OjpJbnRlcnNlY3RzKCBjb25zdCBDVkNMUmVjdCAm
b1JlY3QgKSBjb25zdAp7CiAgICAgICAgcmV0dXJuICEoIG1fZGZYTWF4IDwgb1JlY3QubV9kZlhN
aW4gKSAmJgogICAgICAgICAgICAhKCBtX2RmWE1pbiA+IG9SZWN0Lm1fZGZYTWF4ICkgJiYKICAg
ICAgICAgICAgISggbV9kZllNYXggPCBvUmVjdC5tX2RmWU1pbiApICYmCiAgICAgICAgICAgICEo
IG1fZGZZTWluID4gb1JlY3QubV9kZllNYXggKTsKfQojIDU2OSAidmVjY2xlYW4uY3BwIgpDVkNM
UG9pbnQgQ1ZDTFJlY3Q6OkdldExvd2VyTGVmdCgpIGNvbnN0CnsKICAgICAgICByZXR1cm4gQ1ZD
TFBvaW50KCBtX2RmWE1pbiwgbV9kZllNaW4sIDAuMCApOwp9CiMgNTkxICJ2ZWNjbGVhbi5jcHAi
CkNWQ0xQb2ludCBDVkNMUmVjdDo6R2V0VXBwZXJSaWdodCgpIGNvbnN0CnsKICAgICAgICByZXR1
cm4gQ1ZDTFBvaW50KCBtX2RmWE1heCwgbV9kZllNYXgsIDAuMCApOwp9CiMgNjE1ICJ2ZWNjbGVh
bi5jcHAiCkNWQ0xSZWN0IENWQ0xSZWN0OjpDb21wdXRlSW50ZXJzZWN0aW9uKCBjb25zdCBDVkNM
UmVjdCAmb1JlY3QgKQp7CiAgICAgICAgcmV0dXJuIENWQ0xSZWN0KCAoKG1fZGZYTWluKSA+IChv
UmVjdC5tX2RmWE1pbikgPyAobV9kZlhNaW4pIDogKG9SZWN0Lm1fZGZYTWluKSksCiAgICAgICAg
ICAgICgobV9kZllNaW4pID4gKG9SZWN0Lm1fZGZZTWluKSA/IChtX2RmWU1pbikgOiAob1JlY3Qu
bV9kZllNaW4pKSwKICAgICAgICAgICAgKChtX2RmWE1heCkgPCAob1JlY3QubV9kZlhNYXgpID8g
KG1fZGZYTWF4KSA6IChvUmVjdC5tX2RmWE1heCkpLAogICAgICAgICAgICAoKG1fZGZZTWF4KSA8
IChvUmVjdC5tX2RmWU1heCkgPyAobV9kZllNYXgpIDogKG9SZWN0Lm1fZGZZTWF4KSkpOwp9CiMg
NjQyICJ2ZWNjbGVhbi5jcHAiClRCb29sIG9wZXJhdG9yID09ICggY29uc3QgQ1ZDTFJlY3QgJm9S
ZWN0MSwgY29uc3QgQ1ZDTFJlY3QgJm9SZWN0MiApCnsKICAgICAgICByZXR1cm4gKG9SZWN0MS5H
ZXRMb3dlckxlZnQoKSA9PSBvUmVjdDIuR2V0TG93ZXJMZWZ0KCkpICYmCiAgICAgICAgICAgICgg
b1JlY3QxLkdldFVwcGVyUmlnaHQoKSA9PSBvUmVjdDIuR2V0VXBwZXJSaWdodCgpKTsKfQojIDY2
MyAidmVjY2xlYW4uY3BwIgpDVkNMUG9pbnQgQ1ZDTFJlY3Q6OkNvbXB1dGVDZW50ZXIoKQp7CiAg
ICAgICAgcmV0dXJuIENWQ0xQb2ludCgoIG1fZGZYTWluICsgbV9kZlhNYXggKSAvIDIuMCwKICAg
ICAgICAgICAgKCBtX2RmWU1pbiArIG1fZGZZTWF4ICkgLyAyLjAgKTsKfQojIDY5NCAidmVjY2xl
YW4uY3BwIgpjb25zdCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgVkNMTlVMTFNoYXBlSWQgPSAy
MTQ3NDgzNjQ3OwoKCkNWQ0xTaGFwZTo6Q1ZDTFNoYXBlKCkKewogICAgICAgIG1fc2hhcGVJZCA9
IC0xOwogICAgICAgIG1fZGZVcEFuZ2xlID0gMC4wOwp9CiMgNzIxICJ2ZWNjbGVhbi5jcHAiCkNW
Q0xTaGFwZTo6Q1ZDTFNoYXBlKCBjb25zdCBDVkNMU2hhcGUgJm9TaGFwZSApCnsKICAgICAgICBt
X3NoYXBlSWQgPSBvU2hhcGUubV9zaGFwZUlkOwogICAgICAgIG1fb1BvaW50cyA9IG9TaGFwZS5t
X29Qb2ludHM7CiAgICAgICAgbV9vUHJvcGVydGllcyA9IG9TaGFwZS5tX29Qcm9wZXJ0aWVzOwog
ICAgICAgIG1fZGZVcEFuZ2xlID0gZm1vZCggYXRhbjIoIG1fb1BvaW50c1sgMSBdLnkgLSBtX29Q
b2ludHNbIDAgXS55LCBtX29Qb2ludHNbIDEgXS54IC0gbV9vUG9pbnRzWyAwIF0ueCApICsgMi4w
ICogMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDNFMCwgMi4wICogMy4xNDE1OTI2NTM1ODk3OTMy
Mzg0NjI2NDNFMCApOwoKICAgICAgICBpZiAoVkNMREJMQ29tcCggbV9kZlVwQW5nbGUsIDIuMCAq
IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzRTAsIDggKSA9PSAwKSBtX2RmVXBBbmdsZSA9IDA7
Cn0KIyA3NDggInZlY2NsZWFuLmNwcCIKQ1ZDTFNoYXBlOjp+Q1ZDTFNoYXBlKCkKewoKfQojIDc3
MyAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6OkNWQ0xTaGFwZSggY29uc3QgQ1ZDTFBvaW50OjpW
Q0xQb2ludFZlY3Rvcl90cCAmb1BvaW50cywgQ1ZDTFNoYXBlUHJvcHMgb1Byb3BlcnRpZXMsIGlu
dCBuSWQgKQp7CiAgICAgICAgbV9vUG9pbnRzID0gb1BvaW50czsKICAgICAgICBtX29Qcm9wZXJ0
aWVzID0gb1Byb3BlcnRpZXM7CiAgICAgICAgbV9zaGFwZUlkID0gbklkOwogICAgICAgIG1fZGZV
cEFuZ2xlID0gZm1vZCggYXRhbjIoIG1fb1BvaW50c1sgMSBdLnkgLSBtX29Qb2ludHNbIDAgXS55
LCBtX29Qb2ludHNbIDEgXS54IC0gbV9vUG9pbnRzWyAwIF0ueCApICsgMi4wICogMy4xNDE1OTI2
NTM1ODk3OTMyMzg0NjI2NDNFMCwgMi4wICogMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDNFMCAp
OwoKICAgICAgICBpZiAoVkNMREJMQ29tcCggbV9kZlVwQW5nbGUsIDIuMCAqIDMuMTQxNTkyNjUz
NTg5NzkzMjM4NDYyNjQzRTAsIDggKSA9PSAwKSBtX2RmVXBBbmdsZSA9IDA7Cn0KIyA3OTkgInZl
Y2NsZWFuLmNwcCIKVEJvb2wgQ1ZDTFNoYXBlOjpJc01vbm90b25pYygpCnsKICAgICAgICByZXR1
cm46OlZDTElzTW9ub3RvbmljKCBtX29Qb2ludHMgKTsKfQojIDgyNCAidmVjY2xlYW4uY3BwIgpU
Qm9vbCBDVkNMU2hhcGU6OklzTGVmdE9mKCBjb25zdCBDVkNMUG9pbnQgJm9Qb2ludCApCnsKICAg
ICAgICByZXR1cm46OlZDTElzTGVmdE9mU2hhcGUoIG9Qb2ludCwgbV9vUG9pbnRzICk7Cn0KIyA4
NDcgInZlY2NsZWFuLmNwcCIKVEJvb2wgQ1ZDTFNoYXBlOjpJc0xlZnRPbiggY29uc3QgQ1ZDTFBv
aW50ICZvUG9pbnQgKQp7CiAgICAgICAgcmV0dXJuOjpWQ0xJc0xlZnRPblNoYXBlKCBvUG9pbnQs
IG1fb1BvaW50cyApOwp9CiMgODY4ICJ2ZWNjbGVhbi5jcHAiClRCb29sIENWQ0xTaGFwZTo6SXNS
aWdodE9mKCBjb25zdCBDVkNMUG9pbnQgJm9Qb2ludCApCnsKICAgICAgICByZXR1cm46OlZDTElz
UmlnaHRPZlNoYXBlKCBvUG9pbnQsIG1fb1BvaW50cyApOwp9CiMgODkwICJ2ZWNjbGVhbi5jcHAi
ClRCb29sIENWQ0xTaGFwZTo6SXNPbiggY29uc3QgQ1ZDTFBvaW50ICZvUG9pbnQgKQp7CiAgICAg
ICAgcmV0dXJuICghSXNMZWZ0T2YoIG9Qb2ludCApKSAmJiAoICFJc1JpZ2h0T2YoIG9Qb2ludCAp
KTsKfQojIDkwOSAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgQ1ZDTFNo
YXBlOjpHZXRJZCgpIGNvbnN0CnsKICAgICAgICByZXR1cm4gbV9zaGFwZUlkOwp9CiMgOTI5ICJ2
ZWNjbGVhbi5jcHAiCkNWQ0xTaGFwZVByb3BzIENWQ0xTaGFwZTo6R2V0U2hhcGVQcm9wcygpIGNv
bnN0CnsKICAgICAgICByZXR1cm4gbV9vUHJvcGVydGllczsKfQojIDk0OCAidmVjY2xlYW4uY3Bw
IgpDVkNMUmVjdCBDVkNMU2hhcGU6OkdldFJhbmdlUmVjdCgpIGNvbnN0CnsKICAgICAgICByZXR1
cm46OlZDTENvbXB1dGVSYW5nZVJlY3QoIG1fb1BvaW50cyApOwp9CiMgOTY3ICJ2ZWNjbGVhbi5j
cHAiCmRvdWJsZSBDVkNMU2hhcGU6OkdldFNoYXBlTGVuZ3RoKCkgY29uc3QKewogICAgICAgIHJl
dHVybjo6VkNMQ29tcHV0ZUxlbmd0aCggbV9vUG9pbnRzICk7Cn0KIyA5OTIgInZlY2NsZWFuLmNw
cCIKZG91YmxlIENWQ0xTaGFwZTo6R2V0RGlzdGFuY2VGcm9tKCBDVkNMUG9pbnQgJm9DbG9zZXN0
LCBjb25zdCBDVkNMUG9pbnQgJm9Gcm9tV2hlcmUgKSBjb25zdAp7CiAgICAgICAgcmV0dXJuOjpW
Q0xEaXN0YW5jZUZyb20oIG9DbG9zZXN0LCBtX29Qb2ludHMsIG9Gcm9tV2hlcmUgKTsKfQojIDEw
MTEgInZlY2NsZWFuLmNwcCIKQ1ZDTFBvaW50IENWQ0xTaGFwZTo6R2V0Rmlyc3QoKSBjb25zdAp7
CiAgICAgICAgcmV0dXJuIG1fb1BvaW50c1sgMCBdOwp9CiMgMTAzMSAidmVjY2xlYW4uY3BwIgpD
VkNMUG9pbnQgQ1ZDTFNoYXBlOjpHZXRTZWNvbmQoKSBjb25zdAp7CiAgICAgICAgcmV0dXJuIG1f
b1BvaW50c1sgMSBdOwp9CiMgMTA1MiAidmVjY2xlYW4uY3BwIgpDVkNMUG9pbnQgQ1ZDTFNoYXBl
OjpHZXRTZWNvbmRUb0xhc3QoKSBjb25zdAp7CiAgICAgICAgcmV0dXJuICogKCBtX29Qb2ludHMu
cmJlZ2luKCkgKyAxICk7Cn0KIyAxMDcwICJ2ZWNjbGVhbi5jcHAiCkNWQ0xQb2ludCBDVkNMU2hh
cGU6OkdldExhc3QoKSBjb25zdAp7CiAgICAgICAgcmV0dXJuICptX29Qb2ludHMucmJlZ2luKCk7
Cn0KIyAxMTA4ICJ2ZWNjbGVhbi5jcHAiCnZvaWQgQ1ZDTFNoYXBlOjpJbnNlcnRQb2ludCggY29u
c3QgQ1ZDTFBvaW50ICZvUG9pbnQgKQp7CiAgICAgICAgKElNUENoZWNrRXhwcigiZmFsc2UiLCAi
dmVjY2xlYW4uY3BwIiwgMTExMCksIChmYWxzZSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJmYWxzZSIs
InZlY2NsZWFuLmNwcCIsMTExMCkpOwp9CiMgMTEzMCAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6
OlZDTFNoYXBlSWRWZWN0b3JfdHAgQ1ZDTFNoYXBlOjpCcmVha0F0UG9pbnQoIGNvbnN0IENWQ0xQ
b2ludCAmb1doZXJlICkKewogICAgICAgIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb0Jy
ZWFrUG9pbnQ7CiAgICAgICAgb0JyZWFrUG9pbnQucHVzaF9iYWNrKCBvV2hlcmUgKTsKICAgICAg
ICByZXR1cm4gQnJlYWtBdFBvaW50cyggb0JyZWFrUG9pbnQgKTsKfQojIDExNTUgInZlY2NsZWFu
LmNwcCIKQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIENWQ0xTaGFwZTo6QnJlYWtBdFBv
aW50cyggY29uc3QgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb0JyZWFrUG9pbnRzICkK
ewoKCgogICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBvU2hpZHM7CiAgICAg
ICAgb1NoaWRzLnB1c2hfYmFjayggdGhpcy0+R2V0SWQoKSk7CgogICAgICAgIENWQ0xQb2ludDo6
VkNMUG9pbnRWZWN0b3JMaXN0X3RwIG9QaWVjZXM7CiAgICAgICAgOjpWQ0xCcmVha0F0UG9pbnRz
KCBvUGllY2VzLCBtX29Qb2ludHMsIG9CcmVha1BvaW50cyApOwoKICAgICAgICBDVkNMUG9pbnQ6
OlZDTFBvaW50VmVjdG9yTGlzdF90cCBvTW9ub1BpZWNlczsKICAgICAgICBWQ0xCcmVha01vbm90
b25pYyggb01vbm9QaWVjZXMsIG9QaWVjZXNbIDAgXSApOwoKICAgICAgICBpbnQgbk1vbm9TaXpl
ID0gb01vbm9QaWVjZXMuc2l6ZSgpOwogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgbk1vbm9T
aXplOyBqKyspCiAgICAgICAgewoKCgogICAgICAgICAgICBWQ0xTaGFwZUlkX3RwIG5OZXdTaGFw
ZUlkID0gQ1ZDTFNoYXBlRmFjdG9yeTo6TWFrZU1vbm90b25pY1NoYXBlKCBvTW9ub1BpZWNlc1sg
aiBdLCBtX29Qcm9wZXJ0aWVzICk7CiAgICAgICAgICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAg
ICAgICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBwb1NoYXBlLCBuTmV3U2hhcGVJ
ZCApOwoKCgoKICAgICAgICAgICAgcG9TaGFwZS0+bV9vUHJvcGVydGllcy5tX2JSZXZlcnNlZCA9
IG1fb1Byb3BlcnRpZXMubV9iUmV2ZXJzZWQ7CiAgICAgICAgICAgIG9TaGlkcy5wdXNoX2JhY2so
IG5OZXdTaGFwZUlkICk7CiAgICAgICAgfQoKCgoKICAgICAgICBtX29Qb2ludHMgPSBvTW9ub1Bp
ZWNlc1sgMCBdOwoKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgblNpemUgPSBvUGllY2VzLnNpemUo
KTsKICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IG5TaXplOyBpKyspCiAgICAg
ICAgewoKICAgICAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgb1BvaW50
c0xpc3Q7CiAgICAgICAgICAgIFZDTEJyZWFrTW9ub3RvbmljKCBvUG9pbnRzTGlzdCwgb1BpZWNl
c1sgaSBdICk7CgogICAgICAgICAgICBpbnQgbk1vbm9TaXplID0gb1BvaW50c0xpc3Quc2l6ZSgp
OwogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5Nb25vU2l6ZTsgaisrKQogICAgICAg
ICAgICB7CgoKCiAgICAgICAgICAgICAgICBWQ0xTaGFwZUlkX3RwIG5OZXdTaGFwZUlkID0gQ1ZD
TFNoYXBlRmFjdG9yeTo6TWFrZU1vbm90b25pY1NoYXBlKCBvUG9pbnRzTGlzdFsgaiBdLCBtX29Q
cm9wZXJ0aWVzICk7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGUgKnBvU2hhcGU7CiAgICAgICAg
ICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBvU2hhcGUsIG5OZXdTaGFwZUlk
ICk7CgoKCgogICAgICAgICAgICAgICAgcG9TaGFwZS0+bV9vUHJvcGVydGllcy5tX2JSZXZlcnNl
ZCA9IG1fb1Byb3BlcnRpZXMubV9iUmV2ZXJzZWQ7CiAgICAgICAgICAgICAgICBvU2hpZHMucHVz
aF9iYWNrKCBuTmV3U2hhcGVJZCApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBy
ZXR1cm4gb1NoaWRzOwp9CiMgMTI0MiAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6OlZDTFNoYXBl
SWRWZWN0b3JfdHAgQ1ZDTFNoYXBlOjpFeHRlbmRUbyggY29uc3QgQ1ZDTFBvaW50IG9OZXdQb2lu
dCwgY29uc3QgQ1ZDTFBvaW50ICZvRW5kUG9pbnQgKQp7CgoKCiAgICAgICAgKElNUENoZWNrRXhw
cigiKCBvRW5kUG9pbnQgPT0gbV9vUG9pbnRzWyAwIF0gKSB8fCAoIG9FbmRQb2ludCA9PSBtX29Q
b2ludHNbIG1fb1BvaW50cy5zaXplKCkgLSAxIF0gKSIsICJ2ZWNjbGVhbi5jcHAiLCAxMjQ3KSwg
KCggb0VuZFBvaW50ID09IG1fb1BvaW50c1sgMCBdICkgfHwgKCBvRW5kUG9pbnQgPT0gbV9vUG9p
bnRzWyBtX29Qb2ludHMuc2l6ZSgpIC0gMSBdICkpID8gKDApIDogX0lNUEFzc2VydCgiKCBvRW5k
UG9pbnQgPT0gbV9vUG9pbnRzWyAwIF0gKSB8fCAoIG9FbmRQb2ludCA9PSBtX29Qb2ludHNbIG1f
b1BvaW50cy5zaXplKCkgLSAxIF0gKSIsInZlY2NsZWFuLmNwcCIsMTI0NykpOwoKICAgICAgICBD
VkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgb1NoaWRzOwoKCgoKICAgICAgICBvU2hpZHMu
cHVzaF9iYWNrKCBtX3NoYXBlSWQgKTsKCgoKCiAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZl
Y3Rvcl90cCBvUG9pbnRzID0gbV9vUG9pbnRzOwoKCgoKCiAgICAgICAgVEJvb2wgYkluc2VydCA9
IGZhbHNlOwoKCgoKICAgICAgICBpZiAobV9vUHJvcGVydGllcy5tX2JSZXZlcnNlZCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldmVyc2UoIG9Qb2ludHMuYmVnaW4oKSwgb1BvaW50cy5lbmQoKSk7
CiAgICAgICAgfQoKCgoKICAgICAgICBpZiAob0VuZFBvaW50ID09IG9Qb2ludHNbIDAgXSkKICAg
ICAgICB7CiAgICAgICAgICAgIG9Qb2ludHMuaW5zZXJ0KCBvUG9pbnRzLmJlZ2luKCksIG9OZXdQ
b2ludCApOwogICAgICAgICAgICBiSW5zZXJ0ID0gdHJ1ZTsKICAgICAgICB9CgoKCgogICAgICAg
IGVsc2UgaWYgKG9FbmRQb2ludCA9PSBvUG9pbnRzWyBvUG9pbnRzLnNpemUoKSAtIDEgXSkKICAg
ICAgICB7CiAgICAgICAgICAgIG9Qb2ludHMucHVzaF9iYWNrKCBvTmV3UG9pbnQgKTsKICAgICAg
ICB9CgoKCgoKICAgICAgICBWQ0xVbmlxdWVWZXJ0ZXgoIG9Qb2ludHMgKTsKCgoKCiAgICAgICAg
Q1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgb1BvaW50c0xpc3Q7CiAgICAgICAgVkNM
QnJlYWtNb25vdG9uaWMoIG9Qb2ludHNMaXN0LCBvUG9pbnRzICk7CgoKCgogICAgICAgIGlmIChv
UG9pbnRzTGlzdC5zaXplKCkgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIG1fb1BvaW50cyA9
IG9Qb2ludHNMaXN0WyAwIF07CiAgICAgICAgfQoKCgoKICAgICAgICBlbHNlIGlmIChvUG9pbnRz
TGlzdC5zaXplKCkgPT0gMikKICAgICAgICB7CgoKCgoKICAgICAgICAgICAgaWYgKGJJbnNlcnQp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG1fb1BvaW50cyA9IG9Qb2ludHNMaXN0WyAx
IF07CgoKCgogICAgICAgICAgICAgICAgb1NoaWRzLnB1c2hfYmFjayggQ1ZDTFNoYXBlRmFjdG9y
eTo6TWFrZU1vbm90b25pY1NoYXBlKCBvUG9pbnRzTGlzdFsgMCBdLCBtX29Qcm9wZXJ0aWVzICkp
OwogICAgICAgICAgICB9CgoKCgoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBtX29Qb2ludHMgPSBvUG9pbnRzTGlzdFsgMCBdOwoKCgoKICAgICAgICAgICAg
ICAgIG9TaGlkcy5wdXNoX2JhY2soIENWQ0xTaGFwZUZhY3Rvcnk6Ok1ha2VNb25vdG9uaWNTaGFw
ZSggb1BvaW50c0xpc3RbIDEgXSwgbV9vUHJvcGVydGllcyApKTsKICAgICAgICAgICAgfQogICAg
ICAgIH0KCgoKCgogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIChJTVBDaGVja0V4
cHIoImZhbHNlIiwgInZlY2NsZWFuLmNwcCIsIDEzNTMpLCAoZmFsc2UpID8gKDApIDogX0lNUEFz
c2VydCgiZmFsc2UiLCJ2ZWNjbGVhbi5jcHAiLDEzNTMpKTsKICAgICAgICB9CgoKCgogICAgICAg
IGlmIChtX29Qcm9wZXJ0aWVzLm1fYlJldmVyc2VkKQogICAgICAgIHsKICAgICAgICAgICAgcmV2
ZXJzZSggbV9vUG9pbnRzLmJlZ2luKCksIG1fb1BvaW50cy5lbmQoKSk7CiAgICAgICAgfQoKCgoK
ICAgICAgICByZXR1cm4gb1NoaWRzOwp9CiMgMTM4NyAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xT
aGFwZTo6UmVwbGFjZVBvaW50cyggY29uc3QgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAm
b1RvLCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvRnJvbSApCnsKCgoKICAg
ICAgICAoSU1QQ2hlY2tFeHByKCJmYWxzZSIsICJ2ZWNjbGVhbi5jcHAiLCAxMzkyKSwgKGZhbHNl
KSA/ICgwKSA6IF9JTVBBc3NlcnQoImZhbHNlIiwidmVjY2xlYW4uY3BwIiwxMzkyKSk7Cn0KIyAx
NDEzICJ2ZWNjbGVhbi5jcHAiCnZvaWQgQ1ZDTFNoYXBlOjpNb3ZlRW5kUG9pbnQoIGNvbnN0IENW
Q0xQb2ludCAmb0Rlc3QsIGNvbnN0IENWQ0xQb2ludCAmb1NvdXJjZSApCnsKCgoKICAgICAgICAo
SU1QQ2hlY2tFeHByKCJmYWxzZSIsICJ2ZWNjbGVhbi5jcHAiLCAxNDE4KSwgKGZhbHNlKSA/ICgw
KSA6IF9JTVBBc3NlcnQoImZhbHNlIiwidmVjY2xlYW4uY3BwIiwxNDE4KSk7Cn0KIyAxNDM2ICJ2
ZWNjbGVhbi5jcHAiCnZvaWQgQ1ZDTFNoYXBlOjpXcml0ZSggY29uc3QgR0RCTGF5ZXIgJm9EZXN0
aW5hdGlvbiApIGNvbnN0CnsKICAgICAgICBpZiAobV9vUG9pbnRzLnNpemUoKSA8PSAxKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCgoKCiAgICAgICAgR0RCVmVydGV4
ICpwYXNWZXJ0ZXg7CiAgICAgICAgcGFzVmVydGV4ID0gKCBHREJWZXJ0ZXggKiApIF9ITWFsbG9j
KChzaXplX3QpKG1fb1BvaW50cy5zaXplKCkgKiBzaXplb2YoIEdEQlZlcnRleCApKSwidmVjY2xl
YW4uY3BwIiwxNDQ3KTsKICAgICAgICBpZiAocGFzVmVydGV4ID09IF9fbnVsbCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgoKCgogICAgICAgIGlmIChtX29Qcm9wZXJ0
aWVzLm1fYlJldmVyc2VkKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGogPSAwOwogICAgICAg
ICAgICBmb3IgKENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHA6OmNvbnN0X3JldmVyc2VfaXRl
cmF0b3IgaSA9IG1fb1BvaW50cy5yYmVnaW4oKTsgaSAhPSBtX29Qb2ludHMucmVuZCgpOyBpKysp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBhc1ZlcnRleFsgaiBdLnggPSAoICppICku
eDsKICAgICAgICAgICAgICAgIHBhc1ZlcnRleFsgaiBdLnkgPSAoICppICkueTsKICAgICAgICAg
ICAgICAgIHBhc1ZlcnRleFsgaiBdLnogPSAoICppICkuejsKICAgICAgICAgICAgICAgIGorKzsK
CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg
ICAgIGludCBqID0gMDsKICAgICAgICAgICAgZm9yIChDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9y
X3RwOjpjb25zdF9pdGVyYXRvciBpID0gbV9vUG9pbnRzLmJlZ2luKCk7IGkgIT0gbV9vUG9pbnRz
LmVuZCgpOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBhc1ZlcnRleFsgaiBd
LnggPSAoICppICkueDsKICAgICAgICAgICAgICAgIHBhc1ZlcnRleFsgaiBdLnkgPSAoICppICku
eTsKICAgICAgICAgICAgICAgIHBhc1ZlcnRleFsgaiBdLnogPSAoICppICkuejsKICAgICAgICAg
ICAgICAgIGorKzsKICAgICAgICAgICAgfQogICAgICAgIH0KIyAxNDg4ICJ2ZWNjbGVhbi5jcHAi
CiAgICAgICAgcGFzVmVydGV4WyAwIF0ueCA9IGZsb29yKCggcGFzVmVydGV4WyAwIF0ueCAqIDFl
NyApICsgMC41ICkgLyAxZTc7CiAgICAgICAgcGFzVmVydGV4WyAwIF0ueSA9IGZsb29yKCggcGFz
VmVydGV4WyAwIF0ueSAqIDFlNyApICsgMC41ICkgLyAxZTc7CiAgICAgICAgcGFzVmVydGV4WyAw
IF0ueiA9IGZsb29yKCggcGFzVmVydGV4WyAwIF0ueiAqIDFlNyApICsgMC41ICkgLyAxZTc7Cgog
ICAgICAgIGludCBuRW5kUG9zID0gbV9vUG9pbnRzLnNpemUoKSAtIDE7CiAgICAgICAgcGFzVmVy
dGV4WyBuRW5kUG9zIF0ueCA9IGZsb29yKCggcGFzVmVydGV4WyBuRW5kUG9zIF0ueCAqIDFlNyAp
ICsgMC41ICkgLyAxZTc7CiAgICAgICAgcGFzVmVydGV4WyBuRW5kUG9zIF0ueSA9IGZsb29yKCgg
cGFzVmVydGV4WyBuRW5kUG9zIF0ueSAqIDFlNyApICsgMC41ICkgLyAxZTc7CiAgICAgICAgcGFz
VmVydGV4WyBuRW5kUG9zIF0ueiA9IGZsb29yKCggcGFzVmVydGV4WyBuRW5kUG9zIF0ueiAqIDFl
NyApICsgMC41ICkgLyAxZTc7CgoKCgogICAgICAgIEdEQlNoYXBlSWQgaFNoYXBlSWQgPSBHREJD
cmVhdGVTaGFwZSggb0Rlc3RpbmF0aW9uLCAtMSApOwogICAgICAgIEdEQlNldFZlcnRpY2VzKCBv
RGVzdGluYXRpb24sIGhTaGFwZUlkLCBtX29Qb2ludHMuc2l6ZSgpLCBwYXNWZXJ0ZXggKTsKCiAg
ICAgICAgX0hGcmVlKChwYXNWZXJ0ZXgpLCJ2ZWNjbGVhbi5jcHAiLDE1MDMpOwoKCgoKICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IEdEQkdldE51bUZpZWxkcyggb0Rlc3RpbmF0aW9uICk7IGkr
KykKICAgICAgICB7CgoKCiAgICAgICAgICAgIGludCBpRmllbGQgPSBHREJHZXRGaWVsZEluZGV4
KCBtX29Qcm9wZXJ0aWVzLm1faEdEQkxheWVySW4sIEdEQkdldEZpZWxkTmFtZSggb0Rlc3RpbmF0
aW9uLCBpICkpOwogICAgICAgICAgICBpZiAoaUZpZWxkICE9IC0xKQogICAgICAgICAgICB7CgoK
CgogICAgICAgICAgICAgICAgaWYgKEdEQkdldEZpZWxkVHlwZSggbV9vUHJvcGVydGllcy5tX2hH
REJMYXllckluLCBpRmllbGQgKSA9PSBHREJHZXRGaWVsZFR5cGUoIG9EZXN0aW5hdGlvbiwgaSAp
KQogICAgICAgICAgICAgICAgewoKCgogICAgICAgICAgICAgICAgICAgIEdEQkZpZWxkICpwdUZp
ZWxkID0gR0RCR2V0RmllbGRWYWx1ZSggbV9vUHJvcGVydGllcy5tX2hHREJMYXllckluLCBtX29Q
cm9wZXJ0aWVzLm1faEdEQlNoYXBlSWQsIGlGaWVsZCApOwogICAgICAgICAgICAgICAgICAgIChJ
TVBDaGVja0V4cHIoInB1RmllbGQgIT0gTlVMTCIsICJ2ZWNjbGVhbi5jcHAiLCAxNTI2KSwgKHB1
RmllbGQgIT0gX19udWxsKSA/ICgwKSA6IF9JTVBBc3NlcnQoInB1RmllbGQgIT0gTlVMTCIsInZl
Y2NsZWFuLmNwcCIsMTUyNikpOwogICAgICAgICAgICAgICAgICAgIEdEQlNldEZpZWxkVmFsdWUo
IG9EZXN0aW5hdGlvbiwgaFNoYXBlSWQsIGksIHB1RmllbGQgKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgIH0KfQojIDE1NDkgInZlY2NsZWFuLmNwcCIKdm9pZCBDVkNM
U2hhcGU6OldyaXRlKCkgY29uc3QKewogICAgICAgIGlmIChtX29Qcm9wZXJ0aWVzLm1faEdEQkxh
eWVyT3V0ICE9IF9fbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIENWQ0xTaGFwZTo6V3JpdGUo
IG1fb1Byb3BlcnRpZXMubV9oR0RCTGF5ZXJPdXQgKTsKICAgICAgICB9Cn0KIyAxNTc0ICJ2ZWNj
bGVhbi5jcHAiClRCb29sIENWQ0xTaGFwZTo6b3BlcmF0b3IgPT0gKCBjb25zdCBDVkNMU2hhcGUg
Jm9TaGFwZSApCnsKICAgICAgICByZXR1cm4gbV9vUG9pbnRzID09IG9TaGFwZS5tX29Qb2ludHM7
Cn0KIyAxNjAyICJ2ZWNjbGVhbi5jcHAiClRCb29sIENWQ0xTaGFwZTo6SW50ZXJzZWN0cyggQ1ZD
TFBvaW50ICZvV2hlcmUsIGNvbnN0IENWQ0xTaGFwZSAmb1NoYXBlICkKewogICAgICAgIHJldHVy
bjo6VkNMSW50ZXJzZWN0U2hhcGUoIG9XaGVyZSwgbV9vUG9pbnRzLCBvU2hhcGUubV9vUG9pbnRz
ICk7Cn0KIyAxNjI0ICJ2ZWNjbGVhbi5jcHAiCmRvdWJsZSBDVkNMU2hhcGU6OkNvbXB1dGVYKCBk
b3VibGUgZGZZICkKewogICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgbV9vUG9p
bnRzLnNpemUoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCgoVkNMREJMQ29tcCgo
bV9vUG9pbnRzWyBpIC0gMSBdLnkpLCBkZlkpIDw9IDApICYmIChWQ0xEQkxDb21wKGRmWSwgKG1f
b1BvaW50c1sgaSBdLnkpKSA8PSAwKSkpCiAgICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgICAg
ICBpZiAoVkNMREJMQ29tcCggZGZZLCBtX29Qb2ludHNbIGkgLSAxIF0ueSApID09IDApCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb1BvaW50c1sgaSAtIDEg
XS54OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2UgaWYgKFZDTERCTENv
bXAoIGRmWSwgbV9vUG9pbnRzWyBpIF0ueSApID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fb1BvaW50c1sgaSBdLng7CiAgICAgICAgICAgICAgICB9
CgoKCgoKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgZGZNID0gKCBtX29Qb2ludHNbIGkgXS55IC0gbV9vUG9pbnRzWyBpIC0g
MSBdLnkgKSAvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG1fb1Bv
aW50c1sgaSBdLnggLSBtX29Qb2ludHNbIGkgLSAxIF0ueCApOwoKICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKGRmWSAtIG1fb1BvaW50c1sgaSAtIDEgXS55KSAvIGRmTSArIG1fb1BvaW50c1sg
aSAtIDEgXS54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKCiAg
ICAgICAgKElNUENoZWNrRXhwcigiZmFsc2UiLCAidmVjY2xlYW4uY3BwIiwgMTY1OSksIChmYWxz
ZSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJmYWxzZSIsInZlY2NsZWFuLmNwcCIsMTY1OSkpOwogICAg
ICAgIHJldHVybiAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDg7Cn0KIyAxNzAyICJ2ZWNjbGVhbi5j
cHAiCkNWQ0xTaGFwZVByb3BzOjpDVkNMU2hhcGVQcm9wcygpCnsKICAgICAgICBtX2RmTWVyZ2VU
b2wgPSAwLjA7CiAgICAgICAgbV9kZkRhbmdsZVRvbCA9IDAuMDsKICAgICAgICBtX2RmQ2xpcFRv
bCA9IDAuMDsKICAgICAgICBtX2JSZXZlcnNlZCA9IGZhbHNlOwogICAgICAgIG1fYlJlZmVyZW5j
ZSA9IGZhbHNlOwogICAgICAgIG1faEdEQkxheWVySW4gPSBfX251bGw7CiAgICAgICAgbV9oR0RC
TGF5ZXJPdXQgPSBfX251bGw7CiAgICAgICAgbV9oR0RCU2hhcGVJZCA9IC0xOwp9CgpDVkNMU2hh
cGVQcm9wczo6fkNWQ0xTaGFwZVByb3BzKCkKewogICAgICAgIG1faEdEQkxheWVySW4gPSBfX251
bGw7CiAgICAgICAgbV9oR0RCTGF5ZXJPdXQgPSBfX251bGw7Cn0KCgpDVkNMU2hhcGU6OlZDTFNo
YXBlSWRfdHAgQ1ZDTFNoYXBlRmFjdG9yeTo6bV9uU2hhcGVzID0gLTE7CgoKCgp2ZWN0b3I8Q1ZD
TFNoYXBlICogPiAqQ1ZDTFNoYXBlRmFjdG9yeTo6bV9zaGFwZVRhYmxlID0gX19udWxsOwoKCgoK
c2V0PENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCwgbGVzczxDVkNMU2hhcGU6OlZDTFNoYXBlSWRf
dHA+ID4gKkNWQ0xTaGFwZUZhY3Rvcnk6Om1fYXZhaWxTaGFwZUlkcyA9IF9fbnVsbDsKIyAxNzU5
ICJ2ZWNjbGVhbi5jcHAiCkNWQ0xTaGFwZUZhY3Rvcnk6OkNWQ0xTaGFwZUZhY3RvcnkoKQp7CiAg
ICAgICAgaWYgKG1fYXZhaWxTaGFwZUlkcyA9PSBfX251bGwpIG1fYXZhaWxTaGFwZUlkcyA9IG5l
dygidmVjY2xlYW4uY3BwIiwxNzYxKSBzZXQgPCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAsIGxl
c3M8Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwPiA+OwogICAgICAgIGlmIChtX3NoYXBlVGFibGUg
PT0gX19udWxsKSBtX3NoYXBlVGFibGUgPSBuZXcoInZlY2NsZWFuLmNwcCIsMTc2MikgdmVjdG9y
IDwgQ1ZDTFNoYXBlICogPjsKfQojIDE3ODEgInZlY2NsZWFuLmNwcCIKQ1ZDTFNoYXBlRmFjdG9y
eTo6fkNWQ0xTaGFwZUZhY3RvcnkoKQp7CiAgICAgICAgUG93ZXJEb3duKCk7Cn0KIyAxODA0ICJ2
ZWNjbGVhbi5jcHAiCkNWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBDVkNMU2hhcGVGYWN0
b3J5OjpNYWtlU2hhcGUoIGNvbnN0IENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCAmb0lu
cHV0U2hhcGVzLCBjb25zdCBDVkNMU2hhcGVQcm9wcyAmb1Byb3BlcnRpZXMsIENWQ0xQb2ludDo6
VkNMUG9pbnRWZWN0b3JfdHAgJmJyZWFrUG9pbnRzICkKewogICAgICAgIENWQ0xQb2ludDo6VkNM
UG9pbnRWZWN0b3JMaXN0X3RwIG9TaGFwZVBvaW50c0xpc3Q7CgogICAgICAgIHsKICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBvSW5wdXRTaGFwZXMuc2l6ZSgpOyBpKysp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENWQ0xTaGFwZSAqb01vbm9TaGFwZTsKICAg
ICAgICAgICAgICAgIEdldEFTaGFwZSggb01vbm9TaGFwZSwgb0lucHV0U2hhcGVzWyBpIF0gKTsK
ICAgICAgICAgICAgICAgIG9TaGFwZVBvaW50c0xpc3QucHVzaF9iYWNrKCBvTW9ub1NoYXBlLT5t
X29Qb2ludHMgKTsKCiAgICAgICAgICAgICAgICBpZiAob01vbm9TaGFwZS0+bV9vUHJvcGVydGll
cy5tX2JSZXZlcnNlZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXZl
cnNlKCBvU2hhcGVQb2ludHNMaXN0WyBpIF0uYmVnaW4oKSwgb1NoYXBlUG9pbnRzTGlzdFsgaSBd
LmVuZCgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgoKCgog
ICAgICAgIENWQ0xTaGFwZVByb3BzIG9Qcm9wID0gb1Byb3BlcnRpZXM7CiAgICAgICAgb1Byb3Au
bV9iUmV2ZXJzZWQgPSBmYWxzZTsKCiAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxp
c3RfdHAgb05ld1NoYXBlUG9pbnRzTGlzdDsKCiAgICAgICAgb05ld1NoYXBlUG9pbnRzTGlzdCA9
IFZDTENvbmNhdENoYWlucyggb1NoYXBlUG9pbnRzTGlzdCwgYnJlYWtQb2ludHMgKTsKCiAgICAg
ICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9TaGFwZUlkTGlzdCggb05ld1NoYXBl
UG9pbnRzTGlzdC5zaXplKCkpOwoKCiAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIHNo
YXBlSWQ7CgogICAgICAgIHsKICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBvTmV3U2hhcGVQb2ludHNMaXN0LnNpemUoKTsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBzaGFwZUlkID0gR2V0QVNoaWQoKTsKICAgICAgICAgICAgICAgICggKm1fc2hhcGVU
YWJsZSApWyBzaGFwZUlkIF0gPSBuZXcoInZlY2NsZWFuLmNwcCIsMTg0MikgQ1ZDTFNoYXBlKCBv
TmV3U2hhcGVQb2ludHNMaXN0WyBpIF0sIG9Qcm9wLCBzaGFwZUlkICk7CiAgICAgICAgICAgICAg
ICBvU2hhcGVJZExpc3RbIGkgXSA9IHNoYXBlSWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9Cgog
ICAgICAgIHJldHVybiBvU2hhcGVJZExpc3Q7Cgp9CiMgMTg3MSAidmVjY2xlYW4uY3BwIgpDVkNM
U2hhcGU6OlZDTFNoYXBlSWRfdHAgQ1ZDTFNoYXBlRmFjdG9yeTo6TWFrZU1vbm90b25pY1NoYXBl
KCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvUG9pbnRzLCBjb25zdCBDVkNM
U2hhcGVQcm9wcyAmb1Byb3BlcnRpZXMgKQp7CgogICAgICAgIChJTVBDaGVja0V4cHIoIjo6VkNM
SXNNb25vdG9uaWMoIG9Qb2ludHMgKSIsICJ2ZWNjbGVhbi5jcHAiLCAxODc0KSwgKDo6VkNMSXNN
b25vdG9uaWMoIG9Qb2ludHMgKSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCI6OlZDTElzTW9ub3Rvbmlj
KCBvUG9pbnRzICkiLCJ2ZWNjbGVhbi5jcHAiLDE4NzQpKTsKCiAgICAgICAgT3JpZW50YXRpb25f
dHAgb3JpZW50YXRpb24gPSBWQ0xHZXRPcmllbnRhdGlvbiggb1BvaW50c1sgMCBdLCBvUG9pbnRz
WyAxIF0gKTsKCiAgICAgICAgQ1ZDTFNoYXBlUHJvcHMgb05ld1Byb3BlcnRpZXMgPSBvUHJvcGVy
dGllczsKCiAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIHNoYXBlSWQgPSBHZXRBU2hp
ZCgpOwoKICAgICAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKQogICAgICAgIHsKICAgICAgICAgICAg
Y2FzZSBlSW5jOgogICAgICAgICAgICBjYXNlIGVIb3JpekluYzoKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBvTmV3UHJvcGVydGllcy5tX2JSZXZlcnNlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICggKm1fc2hhcGVUYWJsZSApWyBzaGFwZUlkIF0gPSBuZXcoInZl
Y2NsZWFuLmNwcCIsMTg4OCkgQ1ZDTFNoYXBlKCBvUG9pbnRzLCBvTmV3UHJvcGVydGllcywgc2hh
cGVJZCApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICBjYXNlIGVEZWM6CiAgICAgICAgICAgIGNhc2UgZUhvcml6RGVjOgogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIG9OZXdQcm9wZXJ0aWVzLm1fYlJldmVyc2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIG9S
ZXZlcnNlZFBvaW50cyA9IG9Qb2ludHM7CiAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZSggb1Jl
dmVyc2VkUG9pbnRzLmJlZ2luKCksIG9SZXZlcnNlZFBvaW50cy5lbmQoKSk7CiAgICAgICAgICAg
ICAgICAgICAgKCAqbV9zaGFwZVRhYmxlIClbIHNoYXBlSWQgXSA9IG5ldygidmVjY2xlYW4uY3Bw
IiwxODk3KSBDVkNMU2hhcGUoIG9SZXZlcnNlZFBvaW50cywgb05ld1Byb3BlcnRpZXMsIHNoYXBl
SWQgKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAoSU1QQ2hlY2tFeHByKCJmYWxzZSIsICJ2
ZWNjbGVhbi5jcHAiLCAxOTAyKSwgKGZhbHNlKSA/ICgwKSA6IF9JTVBBc3NlcnQoImZhbHNlIiwi
dmVjY2xlYW4uY3BwIiwxOTAyKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9Cgog
ICAgICAgIHJldHVybiBzaGFwZUlkOwp9CiMgMTkzMSAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6
OlZDTFNoYXBlSWRWZWN0b3JfdHAgQ1ZDTFNoYXBlRmFjdG9yeTo6TWFrZU1vbm90b25pY1NoYXBl
cyggR0RCU2hhcGVJZCBoR0RCU2hhcGVJZCwgR0RCTGF5ZXIgaEdEQkxheWVyLCBjb25zdCBDVkNM
U2hhcGVQcm9wcyAmb1Byb3BlcnRpZXMgKQp7CgogICAgICAgIHZlY3RvcjxHREJTaGFwZSAqID4g
b0dEQlNoYXBlczsKCiAgICAgICAgaWYgKEdEQkdldEZpZWxkSW5kZXgoIGhHREJMYXllciwgIlJp
bmdTdGFydCIgKSAhPSAtMSkKICAgICAgICB7CiAgICAgICAgICAgIEdEQlNoYXBlICpwc1NyY1No
YXBlID0gR0RCR2V0U2hhcGUoIGhHREJMYXllciwgaEdEQlNoYXBlSWQgKTsKICAgICAgICAgICAg
aW50IG5SaW5ncyA9IEdEQkdldFJpbmdDb3VudCggaEdEQkxheWVyLCBwc1NyY1NoYXBlLCBfX251
bGwgKTsKICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuUmluZ3M7IGkr
KykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgb0dEQlNoYXBlcy5wdXNoX2JhY2soIEdE
QkdldFJpbmcoIGhHREJMYXllciwgcHNTcmNTaGFwZSwgaSwgX19udWxsICkpOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICBHREJTaGFwZUZyZWUoIGhHREJMYXllciwgcHNTcmNTaGFwZSApOwog
ICAgICAgIH0KCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgb0dEQlNoYXBlcy5w
dXNoX2JhY2soIEdEQkdldFNoYXBlKCBoR0RCTGF5ZXIsIGhHREJTaGFwZUlkICkpOwogICAgICAg
IH0KCgogICAgICAgIENWQ0xTaGFwZVByb3BzIG9UZW1wUHJvcHMgPSBvUHJvcGVydGllczsKICAg
ICAgICBvVGVtcFByb3BzLm1faEdEQkxheWVySW4gPSBoR0RCTGF5ZXI7CiAgICAgICAgb1RlbXBQ
cm9wcy5tX2hHREJTaGFwZUlkID0gaEdEQlNoYXBlSWQ7CgoKICAgICAgICBDVkNMU2hhcGU6OlZD
TFNoYXBlSWRWZWN0b3JfdHAgc2hhcGVJZHM7CgogICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgb0dEQlNoYXBlcy5zaXplKCk7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIChJ
TVBDaGVja0V4cHIoIm9HREJTaGFwZXNbIGkgXSAhPSBOVUxMIiwgInZlY2NsZWFuLmNwcCIsIDE5
NjMpLCAob0dEQlNoYXBlc1sgaSBdICE9IF9fbnVsbCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJvR0RC
U2hhcGVzWyBpIF0gIT0gTlVMTCIsInZlY2NsZWFuLmNwcCIsMTk2MykpOwoKICAgICAgICAgICAg
VkNMVW5pcXVlVmVydGV4KCBvR0RCU2hhcGVzWyBpIF0tPnBhc1ZlcnRpY2VzLCBvR0RCU2hhcGVz
WyBpIF0tPm5Db3VudCApOwoKICAgICAgICAgICAgaWYgKG9HREJTaGFwZXNbIGkgXS0+bkNvdW50
ID4gMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZl
Y3Rvckxpc3RfdHAgb1NoYXBlczsKICAgICAgICAgICAgICAgIFZDTEJyZWFrTW9ub3RvbmljKCBv
U2hhcGVzLCBvR0RCU2hhcGVzWyBpIF0tPnBhc1ZlcnRpY2VzLCBvR0RCU2hhcGVzWyBpIF0tPm5D
b3VudCApOwoKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZSA9IG9TaGFwZXMuc2l6
ZSgpOwogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5TaXplOyBpKysp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2hhcGVJZHMucHVzaF9iYWNr
KCBNYWtlTW9ub3RvbmljU2hhcGUoIG9TaGFwZXNbIGkgXSwgb1RlbXBQcm9wcyApKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgR0RCU2hhcGVGcmVlKCBoR0RC
TGF5ZXIsIG9HREJTaGFwZXNbIGkgXSApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNoYXBl
SWRzOwp9CiMgMjAwNCAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFT
aGFwZSggQ1ZDTFNoYXBlICogJnNoYXBlLCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgblNoYXBl
ICkKewogICAgICAgIChJTVBDaGVja0V4cHIoIiggblNoYXBlID49IDAgKSAmJiAoIG5TaGFwZSA8
ICggKm1fc2hhcGVUYWJsZSApLnNpemUoKSkiLCAidmVjY2xlYW4uY3BwIiwgMjAwNiksICgoIG5T
aGFwZSA+PSAwICkgJiYgKCBuU2hhcGUgPCAoICptX3NoYXBlVGFibGUgKS5zaXplKCkpKSA/ICgw
KSA6IF9JTVBBc3NlcnQoIiggblNoYXBlID49IDAgKSAmJiAoIG5TaGFwZSA8ICggKm1fc2hhcGVU
YWJsZSApLnNpemUoKSkiLCJ2ZWNjbGVhbi5jcHAiLDIwMDYpKTsKCiAgICAgICAgc2hhcGUgPSAo
ICptX3NoYXBlVGFibGUgKVsgblNoYXBlIF07Cn0KIyAyMDMxICJ2ZWNjbGVhbi5jcHAiCnZvaWQg
Q1ZDTFNoYXBlRmFjdG9yeTo6Uk1BKCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgblNoYXBlICkK
ewogICAgICAgIChJTVBDaGVja0V4cHIoIiggblNoYXBlID49IDAgKSAmJiAoIG5TaGFwZSA8ICgg
Km1fc2hhcGVUYWJsZSApLnNpemUoKSkiLCAidmVjY2xlYW4uY3BwIiwgMjAzMyksICgoIG5TaGFw
ZSA+PSAwICkgJiYgKCBuU2hhcGUgPCAoICptX3NoYXBlVGFibGUgKS5zaXplKCkpKSA/ICgwKSA6
IF9JTVBBc3NlcnQoIiggblNoYXBlID49IDAgKSAmJiAoIG5TaGFwZSA8ICggKm1fc2hhcGVUYWJs
ZSApLnNpemUoKSkiLCJ2ZWNjbGVhbi5jcHAiLDIwMzMpKTsKICAgICAgICAoSU1QQ2hlY2tFeHBy
KCIoICptX2F2YWlsU2hhcGVJZHMgKS5maW5kKCBuU2hhcGUgKSA9PSAoICptX2F2YWlsU2hhcGVJ
ZHMgKS5lbmQoKSIsICJ2ZWNjbGVhbi5jcHAiLCAyMDM0KSwgKCggKm1fYXZhaWxTaGFwZUlkcyAp
LmZpbmQoIG5TaGFwZSApID09ICggKm1fYXZhaWxTaGFwZUlkcyApLmVuZCgpKSA/ICgwKSA6IF9J
TVBBc3NlcnQoIiggKm1fYXZhaWxTaGFwZUlkcyApLmZpbmQoIG5TaGFwZSApID09ICggKm1fYXZh
aWxTaGFwZUlkcyApLmVuZCgpIiwidmVjY2xlYW4uY3BwIiwyMDM0KSk7CgoKCgogICAgICAgIERl
bGV0ZVNldHVwKCJ2ZWNjbGVhbi5jcHAiLDIwMzkpLGRlbGV0ZSggKm1fc2hhcGVUYWJsZSApWyBu
U2hhcGUgXTsKCgoKCiAgICAgICAgKCAqbV9zaGFwZVRhYmxlIClbIG5TaGFwZSBdID0gX19udWxs
OwoKCgoKICAgICAgICAoICptX2F2YWlsU2hhcGVJZHMgKS5pbnNlcnQoIG5TaGFwZSApOwp9CiMg
MjA2OSAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xTaGFwZUZhY3Rvcnk6OlBvd2VyRG93bigpCnsK
CgoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8ICggKm1fc2hhcGVUYWJsZSApLnNpemUoKTsg
aSsrKQogICAgICAgIHsKICAgICAgICAgICAgRGVsZXRlU2V0dXAoInZlY2NsZWFuLmNwcCIsMjA3
NiksZGVsZXRlKCAqbV9zaGFwZVRhYmxlIClbIGkgXTsKICAgICAgICB9CgogICAgICAgICggKm1f
c2hhcGVUYWJsZSApLnJlc2l6ZSggMCApOwogICAgICAgICggKm1fYXZhaWxTaGFwZUlkcyApLmNs
ZWFyKCk7CiAgICAgICAgbV9uU2hhcGVzID0gLTE7Cn0KCgoKQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlk
X3RwIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGlkKCkKewogICAgICAgIENWQ0xTaGFwZTo6VkNM
U2hhcGVJZF90cCBzaGFwZUlkOwoKCgoKICAgICAgICBpZiAoKCAqbV9hdmFpbFNoYXBlSWRzICku
YmVnaW4oKSA9PSAoICptX2F2YWlsU2hhcGVJZHMgKS5lbmQoKSkKICAgICAgICB7CiAgICAgICAg
ICAgIHNoYXBlSWQgPSAoICptX3NoYXBlVGFibGUgKS5zaXplKCk7CiAgICAgICAgICAgICggKm1f
c2hhcGVUYWJsZSApLnB1c2hfYmFjayggX19udWxsICk7CiAgICAgICAgICAgIG1fblNoYXBlcyA9
IHNoYXBlSWQ7CiAgICAgICAgfQoKCgoKCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg
ICAgc2hhcGVJZCA9ICooKCAqbV9hdmFpbFNoYXBlSWRzICkuYmVnaW4oKSk7CiAgICAgICAgICAg
ICggKm1fYXZhaWxTaGFwZUlkcyApLmVyYXNlKCggKm1fYXZhaWxTaGFwZUlkcyApLmJlZ2luKCkp
OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNoYXBlSWQ7Cn0KIyAyMTM3ICJ2ZWNjbGVhbi5j
cHAiCkNWQ0xTd2VlcDo6Q1ZDTFN3ZWVwKCkKewoKfQoKQ1ZDTFN3ZWVwOjp+Q1ZDTFN3ZWVwKCkK
ewoKfQojIDIxNjUgInZlY2NsZWFuLmNwcCIKdm9pZCBDVkNMU3dlZXA6OkFkZCggQ1ZDTFNoYXBl
OjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9TaGFwZUlkcyApCnsKICAgICAgICBpZiAob1NoYXBlSWRz
LnNpemUoKSA8PSAwKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAg
ICAgICAgaW50IEwgPSAwOwogICAgICAgIGludCBVID0gbV9zd2VlcC5zaXplKCkgLTE7CiAgICAg
ICAgaW50IE07CgogICAgICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICBDVkNMU2hhcGVG
YWN0b3J5OjpHZXRBU2hhcGUoIHBvU2hhcGUsIG9TaGFwZUlkc1sgMCBdICk7CiAgICAgICAgQ1ZD
TFBvaW50IG9Qb2ludCA9IHBvU2hhcGUtPkdldEZpcnN0KCk7CgogICAgICAgIENWQ0xTaGFwZTo6
VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgaXRlciA9IG1fc3dlZXAuYmVnaW4oKTsKCiAg
ICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChMID4gVSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgaWYgKEwgPj0gbV9zd2VlcC5zaXplKCkpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgY29weSggb1NoYXBlSWRzLmJlZ2luKCksIG9TaGFw
ZUlkcy5lbmQoKSwgYmFja19pbnNlcnRlciggbV9zd2VlcCApKTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgoKCgoKCgogICAgICAgICAg
ICAgICAgICAgIG1fc3dlZXAuaW5zZXJ0KCBpdGVyK0wsIG9TaGFwZUlkcy5iZWdpbigpLCBvU2hh
cGVJZHMuZW5kKCkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICB9CgogICAgICAgICAgICBNID0gKCBMICsgVSApIC8gMjsKCiAgICAgICAgICAg
IENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6R2V0QVNo
YXBlKCBwb1NoYXBlLCBtX3N3ZWVwWyBNIF0gKTsKICAgICAgICAgICAgZG91YmxlIGRmWCA9IHBv
U2hhcGUtPkNvbXB1dGVYKCBvUG9pbnQueSApOwoKICAgICAgICAgICAgaWYgKGRmWCA9PSBvUG9p
bnQueCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKElNUENoZWNrRXhwcigiZmFsc2Ui
LCAidmVjY2xlYW4uY3BwIiwgMjIxNCksIChmYWxzZSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJmYWxz
ZSIsInZlY2NsZWFuLmNwcCIsMjIxNCkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNl
IGlmIChkZlggPCBvUG9pbnQueCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTCA9IE0g
KyAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIFUgPSBNIC0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KfQojIDIyNDYgInZl
Y2NsZWFuLmNwcCIKdm9pZCBDVkNMU3dlZXA6OlJlbW92ZSggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlk
X3RwIG5TaGFwZUlkICkKewoKICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHA6
Oml0ZXJhdG9yIGl0OwoKICAgICAgICBpdCA9IHJlbW92ZSggbV9zd2VlcC5iZWdpbigpLCBtX3N3
ZWVwLmVuZCgpLCBuU2hhcGVJZCApOwogICAgICAgIG1fc3dlZXAucmVzaXplKCBpdCAtIG1fc3dl
ZXAuYmVnaW4oKSk7Cn0KIyAyMjc1ICJ2ZWNjbGVhbi5jcHAiCnZvaWQgQ1ZDTFN3ZWVwOjpGaW5k
TmVpZ2hib3VycyggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwICZvTGVmdCwgQ1ZDTFNoYXBlOjpW
Q0xTaGFwZUlkX3RwICZvUmlnaHQsIGNvbnN0IENWQ0xQb2ludCAmb1BvaW50ICkKewogICAgICAg
IG9MZWZ0ID0gVkNMTlVMTFNoYXBlSWQ7CiAgICAgICAgb1JpZ2h0ID0gVkNMTlVMTFNoYXBlSWQ7
CgogICAgICAgIGludCBMID0gMDsKICAgICAgICBpbnQgVSA9IG1fc3dlZXAuc2l6ZSgpIC0gMTsK
ICAgICAgICBpbnQgTTsKCiAgICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICAgIGlm
IChMID4gVSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKFUgPj0gMCkKICAgICAg
ICAgICAgICAgICAgICBvTGVmdCA9IG1fc3dlZXBbIFUgXTsKCiAgICAgICAgICAgICAgICBpZiAo
TCA8IG1fc3dlZXAuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgIG9SaWdodCA9IG1fc3dlZXBb
IEwgXTsKCiAgICAgICAgICAgICAgICAoSU1QQ2hlY2tFeHByKCJMID09ICggVSArIDEgKSIsICJ2
ZWNjbGVhbi5jcHAiLCAyMjk0KSwgKEwgPT0gKCBVICsgMSApKSA/ICgwKSA6IF9JTVBBc3NlcnQo
IkwgPT0gKCBVICsgMSApIiwidmVjY2xlYW4uY3BwIiwyMjk0KSk7CgogICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIE0gPSAoIEwgKyBVICkgLyAyOwoKICAg
ICAgICAgICAgQ1ZDTFNoYXBlICpwb1NoYXBlOwogICAgICAgICAgICBDVkNMU2hhcGVGYWN0b3J5
OjpHZXRBU2hhcGUoIHBvU2hhcGUsIG1fc3dlZXBbIE0gXSApOwogICAgICAgICAgICBkb3VibGUg
ZGZYID0gcG9TaGFwZS0+Q29tcHV0ZVgoIG9Qb2ludC55ICk7CgogICAgICAgICAgICBpZiAoZGZY
ID09IG9Qb2ludC54KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMID0gVSA9IE07CiAg
ICAgICAgICAgICAgICB3aGlsZSAoKCBVID49IDAgKSAmJiAoIGRmWCA9PSBvUG9pbnQueCApKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFUtLTsKICAgICAgICAgICAgICAg
ICAgICBpZiAoVSA+PSAwKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBwb1NoYXBlLCBtX3N3ZWVwWyBVIF0g
KTsKICAgICAgICAgICAgICAgICAgICAgICAgZGZYID0gcG9TaGFwZS0+Q29tcHV0ZVgoIG9Qb2lu
dC55ICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIFUrKzsKICAgICAgICAgICAgICAgIEwgPSBVIC0gMTsKCiAgICAgICAgICAgICAgICBp
ZiAoTCA+PSAwKQogICAgICAgICAgICAgICAgICAgIG9MZWZ0ID0gbV9zd2VlcFsgTCBdOwoKICAg
ICAgICAgICAgICAgIGlmIChVIDwgbV9zd2VlcC5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAg
b1JpZ2h0ID0gbV9zd2VlcFsgVSBdOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICBlbHNlIGlmIChkZlggPCBvUG9pbnQueCkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgTCA9IE0gKyAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFUgPSBNIC0gMTsKICAgICAgICAgICAgfQoK
CiAgICAgICAgfQp9CiMgMjM2MSAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xTd2VlcDo6RmluZEFs
bCggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwICZvU2hhcGVzICkgY29uc3QKewogICAg
ICAgIG9TaGFwZXMgPSBtX3N3ZWVwOwp9CiMgMjQ2NCAidmVjY2xlYW4uY3BwIgpzdGF0aWMgaW50
IG5leHROb2RlSWQgPSAwOwojIDI0NzggInZlY2NsZWFuLmNwcCIKQ1ZDTE5vZGU6OkNWQ0xOb2Rl
KCkKewogICAgICAgIG1fbm9kZUlkID0gbmV4dE5vZGVJZCsrOwp9CiMgMjQ5OSAidmVjY2xlYW4u
Y3BwIgpDVkNMTm9kZTo6Q1ZDTE5vZGUoIGNvbnN0IENWQ0xQb2ludCAmb1BvaW50ICkKewogICAg
ICAgIG1fbm9kZUlkID0gbmV4dE5vZGVJZCsrOwogICAgICAgIG1fb1BvaW50ID0gb1BvaW50Owp9
CiMgMjUyMCAidmVjY2xlYW4uY3BwIgpDVkNMTm9kZTo6Q1ZDTE5vZGUoIGNvbnN0IENWQ0xOb2Rl
ICZvTm9kZSApCnsKICAgICAgICBtX25vZGVJZCA9IG9Ob2RlLm1fbm9kZUlkOwogICAgICAgIG1f
b1BvaW50ID0gb05vZGUubV9vUG9pbnQ7CiAgICAgICAgbV9vU2hhcGVzID0gb05vZGUubV9vU2hh
cGVzOwp9CiMgMjU0MyAidmVjY2xlYW4uY3BwIgpDVkNMTm9kZSAmQ1ZDTE5vZGU6Om9wZXJhdG9y
PSAoIGNvbnN0IENWQ0xOb2RlICZvTm9kZSApCnsKICAgICAgICBpZiAoJm9Ob2RlICE9IHRoaXMp
CiAgICAgICAgewogICAgICAgICAgICBtX25vZGVJZCA9IG9Ob2RlLm1fbm9kZUlkOwogICAgICAg
ICAgICBtX29Qb2ludCA9IG9Ob2RlLm1fb1BvaW50OwogICAgICAgICAgICBtX29TaGFwZXMgPSBv
Tm9kZS5tX29TaGFwZXM7CiAgICAgICAgfQogICAgICAgIHJldHVybiAqdGhpczsKfQojIDI1Njcg
InZlY2NsZWFuLmNwcCIKQ1ZDTE5vZGU6On5DVkNMTm9kZSgpCnsKfQojIDI1ODcgInZlY2NsZWFu
LmNwcCIKVEJvb2wgQ1ZDTE5vZGU6OkFkZCggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIG5TaGFw
ZUlkICkKewoKCgogICAgICAgIENWQ0xTaGFwZSAqcG9UYXJnZXQ7CiAgICAgICAgQ1ZDTFNoYXBl
RmFjdG9yeTo6R2V0QVNoYXBlKCBwb1RhcmdldCwgblNoYXBlSWQgKTsKCiAgICAgICAgdW5zaWdu
ZWQgaW50IG5TaXplID0gbV9vU2hhcGVzLnNpemUoKTsKICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG5TaXplOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBDVkNMU2hhcGUg
KnBvU291cmNlOwogICAgICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBvU291
cmNlLCBtX29TaGFwZXNbIGkgXSApOwogICAgICAgICAgICBpZiAoKnBvU291cmNlID09ICpwb1Rh
cmdldCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICB9CiAgICAgICAgfQoKCgoKICAgICAgICBtX29TaGFwZXMucHVzaF9iYWNrKCBuU2hhcGVJ
ZCApOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKfQojIDI2MzAgInZlY2NsZWFuLmNwcCIKdm9pZCBD
VkNMTm9kZTo6UmVtb3ZlKCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgbklkICkKewogICAgICAg
IENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgaXQgPSByZW1vdmUoIG1f
b1NoYXBlcy5iZWdpbigpLCBtX29TaGFwZXMuZW5kKCksIG5JZCApOwogICAgICAgIG1fb1NoYXBl
cy5yZXNpemUoIGl0IC0gbV9vU2hhcGVzLmJlZ2luKCkpOwp9CiMgMjY1MSAidmVjY2xlYW4uY3Bw
IgpUQm9vbCBDVkNMTm9kZTo6SXNEYW5nbGUoKSBjb25zdAp7CiAgICAgICAgcmV0dXJuIFNoYXBl
Q291bnQoKSA9PSAxOwp9CiMgMjY3MCAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6OlZDTFNoYXBl
SWRWZWN0b3JfdHAgQ1ZDTE5vZGU6OkdldFNoaWRzKCkgY29uc3QKewogICAgICAgIHJldHVybiBt
X29TaGFwZXM7Cn0KIyAyNjg5ICJ2ZWNjbGVhbi5jcHAiCkNWQ0xTaGFwZTo6VkNMU2hhcGVJZFZl
Y3Rvcl90cCBDVkNMTm9kZTo6R2V0RG93blNoaWRzKCkgY29uc3QKewogICAgICAgIENWQ0xTaGFw
ZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBzaGFwZUlkczsKCiAgICAgICAgdW5zaWduZWQgaW50IG5T
aXplID0gbV9vU2hhcGVzLnNpemUoKTsKICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IG5TaXplOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBDVkNMU2hhcGUgKnBvU2hhcGU7
CiAgICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9TaGFwZSwgbV9vU2hh
cGVzWyBpIF0gKTsKICAgICAgICAgICAgaWYgKFZDTFBvaW50RXF1YWwoKSAoIHBvU2hhcGUtPkdl
dExhc3QoKSwgbV9vUG9pbnQgKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2hhcGVJ
ZHMucHVzaF9iYWNrKCBtX29TaGFwZXNbIGkgXSApOwogICAgICAgICAgICB9CiAgICAgICAgfQoK
ICAgICAgICByZXR1cm4gc2hhcGVJZHM7Cn0KIyAyNzIzICJ2ZWNjbGVhbi5jcHAiCkNWQ0xTaGFw
ZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBDVkNMTm9kZTo6R2V0VXBTaGlkcygpIGNvbnN0CnsKICAg
ICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgc2hhcGVJZHM7CgogICAgICAgIHVu
c2lnbmVkIGludCBuU2l6ZSA9IG1fb1NoYXBlcy5zaXplKCk7CiAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBuU2l6ZTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgQ1ZDTFNo
YXBlICpwb1NoYXBlOwogICAgICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBv
U2hhcGUsIG1fb1NoYXBlc1sgaSBdICk7CiAgICAgICAgICAgIGlmIChWQ0xQb2ludEVxdWFsKCkg
KCBwb1NoYXBlLT5HZXRGaXJzdCgpLCBtX29Qb2ludCApKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBzaGFwZUlkcy5wdXNoX2JhY2soIG1fb1NoYXBlc1sgaSBdICk7CiAgICAgICAgICAg
IH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBzaGFwZUlkczsKfQojIDI3NTUgInZlY2NsZWFu
LmNwcCIKaW50IENWQ0xOb2RlOjpTaGFwZUNvdW50KCkgY29uc3QKewogICAgICAgIHJldHVybiBt
X29TaGFwZXMuc2l6ZSgpOwp9CiMgMjc3NiAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xOb2RlOjpN
b3ZlTm9kZSggY29uc3QgQ1ZDTFBvaW50ICZvRGVzdCApCnsKICAgICAgICAoSU1QQ2hlY2tFeHBy
KCJmYWxzZSIsICJ2ZWNjbGVhbi5jcHAiLCAyNzc4KSwgKGZhbHNlKSA/ICgwKSA6IF9JTVBBc3Nl
cnQoImZhbHNlIiwidmVjY2xlYW4uY3BwIiwyNzc4KSk7Cn0KIyAyNzk4ICJ2ZWNjbGVhbi5jcHAi
ClRCb29sIENWQ0xOb2RlOjpvcGVyYXRvciA9PSAoIGNvbnN0IENWQ0xOb2RlICZvTm9kZSApCnsK
ICAgICAgICByZXR1cm4gbV9ub2RlSWQgPT0gb05vZGUubV9ub2RlSWQ7Cn0KIyAyODE3ICJ2ZWNj
bGVhbi5jcHAiCkNWQ0xOb2RlOjpWQ0xOb2RlSWRfdHAgQ1ZDTE5vZGU6OkdldElkKCkgY29uc3QK
ewogICAgICAgIHJldHVybiBtX25vZGVJZDsKfQojIDI4MzcgInZlY2NsZWFuLmNwcCIKdm9pZCBD
VkNMTm9kZTo6UG93ZXJEb3duKCkKewogICAgICAgIG5leHROb2RlSWQgPSAwOwp9CgoKQ1ZDTFBv
aW50IENWQ0xOb2RlOjpHZXRQb2ludCgpIGNvbnN0CnsKICAgICAgICByZXR1cm4gbV9vUG9pbnQ7
Cn0KIyAyODk3ICJ2ZWNjbGVhbi5jcHAiCkNWQ0xOb2RlVGFibGU6OkNWQ0xOb2RlVGFibGUoKQp7
CiAgICAgICAgbV9uQ291bnQgPSAwOwp9CiMgMjkxNSAidmVjY2xlYW4uY3BwIgpDVkNMTm9kZVRh
YmxlOjp+Q1ZDTE5vZGVUYWJsZSgpCnsKICAgICAgICBmb3IgKE5vZGVUYWJsZV90cDo6aXRlcmF0
b3IgaSA9IG1fbm9kZVRhYmxlLmJlZ2luKCk7IGkgIT0gbV9ub2RlVGFibGUuZW5kKCk7IGkrKykK
ICAgICAgICB7CiAgICAgICAgICAgIERlbGV0ZVNldHVwKCJ2ZWNjbGVhbi5jcHAiLDI5MTkpLGRl
bGV0ZSggKmkgKS5zZWNvbmQ7CiAgICAgICAgfQp9CiMgMjkzOSAidmVjY2xlYW4uY3BwIgp2b2lk
IENWQ0xOb2RlVGFibGU6OlN0cmVhbUluKCBHREJMYXllciBoTGF5ZXIsIGNvbnN0IENWQ0xTaGFw
ZVByb3BzICZvUHJvcHMsIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzcywgdm9pZCAqcFByb2dy
ZXNzQXJnICkKewogICAgICAgIEdEQlNoYXBlSWQgaFNoYXBlSWQ7CiAgICAgICAgZG91YmxlIG5T
aGFwZXMgPSBHREJHZXROdW1TaGFwZXMoIGhMYXllciApOwogICAgICAgIGRvdWJsZSBuID0gMC4w
OwoKICAgICAgICBpZiAocGZuUHJvZ3Jlc3MgPT0gX19udWxsKQogICAgICAgICAgICBwZm5Qcm9n
cmVzcyA9IElNUER1bW15UHJvZ3Jlc3M7CgogICAgICAgIGZvciAoaFNoYXBlSWQgPSBHREJHZXRG
aXJzdCggaExheWVyICk7CiAgICAgICAgIGhTaGFwZUlkICE9IC0xOwogICAgICAgICBoU2hhcGVJ
ZCA9IEdEQkdldE5leHQoIGhMYXllciwgaFNoYXBlSWQgKSkKICAgICAgICB7CiAgICAgICAgICAg
IGlmICghKCAqcGZuUHJvZ3Jlc3MgKSAoICsrbiAvIG5TaGFwZXMsICJSZWFkaW5nIHNoYXBlcyIs
IHBQcm9ncmVzc0FyZyApKQogICAgICAgICAgICAgICAgSU1QRXJyb3IoIDMsIDEsICJVc2VyIGNh
bmNlbGxlZCIgKTsKCiAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBv
U2hhcGVzID0gQ1ZDTFNoYXBlRmFjdG9yeTo6TWFrZU1vbm90b25pY1NoYXBlcyggaFNoYXBlSWQs
IGhMYXllciwgb1Byb3BzICk7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZSA9IG9TaGFw
ZXMuc2l6ZSgpOwogICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG5TaXpl
OyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPkFkZCggb1NoYXBlc1sg
aSBdICk7CiAgICAgICAgICAgIH0KICAgICAgICB9Cn0KIyAyOTc3ICJ2ZWNjbGVhbi5jcHAiCkNW
Q0xOb2RlICpDVkNMTm9kZVRhYmxlOjpGaXJzdCgpIGNvbnN0CnsKICAgICAgICByZXR1cm4gKCpt
X25vZGVUYWJsZS5iZWdpbigpKS5zZWNvbmQ7Cn0KCgpUQm9vbCBWQ0xOb2RlVGFibGVQb2ludExl
c3MoIGNvbnN0IENWQ0xOb2RlVGFibGU6Ok5vZGVUYWJsZUVudHJ5X3RwICZvRmlyc3ROb2RlLCBj
b25zdCBDVkNMTm9kZVRhYmxlOjpOb2RlVGFibGVFbnRyeV90cCAmb1NlY29uZE5vZGUgKQp7CiAg
ICAgICAgaW50IHJlcyA9IFZDTERCTENvbXAoIG9GaXJzdE5vZGUuZmlyc3QueSwgb1NlY29uZE5v
ZGUuZmlyc3QueSwgMTMgLSAxICk7CiAgICAgICAgaWYgKHJlcyA9PSAwKQogICAgICAgIHsKICAg
ICAgICAgICAgcmVzID0gVkNMREJMQ29tcCggb0ZpcnN0Tm9kZS5maXJzdC54LCBvU2Vjb25kTm9k
ZS5maXJzdC54LCAxMyAtIDEgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlcyA8IDA7Cn07
CiMgMzAwOSAidmVjY2xlYW4uY3BwIgpDVkNMTm9kZSAqQ1ZDTE5vZGVUYWJsZTo6TmV4dCggY29u
c3QgQ1ZDTE5vZGUgJm9DdXJyZW50ICkgY29uc3QKewogICAgICAgIENWQ0xQb2ludCBvUG9pbnQg
PSBvQ3VycmVudC5tX29Qb2ludDsKICAgICAgICBOb2RlVGFibGVfdHA6OmNvbnN0X2l0ZXJhdG9y
IE5vZGVpdDsKCiAgICAgICAgTm9kZWl0ID0gbV9ub2RlVGFibGUubG93ZXJfYm91bmQoIG9DdXJy
ZW50Lm1fb1BvaW50ICk7CiAgICAgICAgKElNUENoZWNrRXhwcigiTm9kZWl0ICE9IG1fbm9kZVRh
YmxlLmVuZCgpIiwgInZlY2NsZWFuLmNwcCIsIDMwMTUpLCAoTm9kZWl0ICE9IG1fbm9kZVRhYmxl
LmVuZCgpKSA/ICgwKSA6IF9JTVBBc3NlcnQoIk5vZGVpdCAhPSBtX25vZGVUYWJsZS5lbmQoKSIs
InZlY2NsZWFuLmNwcCIsMzAxNSkpOwogICAgICAgIHZlY3RvcjxOb2RlVGFibGVFbnRyeV90cD4g
RXF1YWxOb2RlTGlzdDsKCiAgICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAgIG9Qb2ludCA9
IE5vZGVpdC0+Zmlyc3Q7CiAgICAgICAgICAgIEVxdWFsTm9kZUxpc3QucHVzaF9iYWNrKCggKk5v
ZGVpdCApKTsKICAgICAgICAgICAgTm9kZWl0Kys7CiAgICAgICAgfSB3aGlsZSAoKCBOb2RlaXQg
IT0gbV9ub2RlVGFibGUuZW5kKCkpICYmICggb1BvaW50ID09IE5vZGVpdC0+Zmlyc3QgKSk7Cgog
ICAgICAgIHNvcnQoIEVxdWFsTm9kZUxpc3QuYmVnaW4oKSwgRXF1YWxOb2RlTGlzdC5lbmQoKSwg
VkNMTm9kZVRhYmxlUG9pbnRMZXNzICk7CgogICAgICAgIHZlY3RvcjxOb2RlVGFibGVFbnRyeV90
cD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gRXF1YWxOb2RlTGlzdC5iZWdpbigpOwoKICAgICAgICB3
aGlsZSAoKCAqaXQgKS5zZWNvbmQtPkdldElkKCkgIT0gb0N1cnJlbnQuR2V0SWQoKSkKICAgICAg
ICB7CiAgICAgICAgICAgIGl0Kys7CiAgICAgICAgfQoKICAgICAgICBpdCsrOwoKICAgICAgICB3
aGlsZSAoKCBpdCAhPSBFcXVhbE5vZGVMaXN0LmVuZCgpKSAmJiAoKCAqaXQgKS5zZWNvbmQtPlNo
YXBlQ291bnQoKSA8PSAwICkpCiAgICAgICAgewogICAgICAgICAgICBpdCsrOwogICAgICAgIH0K
CgogICAgICAgIGlmIChpdCA9PSBFcXVhbE5vZGVMaXN0LmVuZCgpKQogICAgICAgIHsKICAgICAg
ICAgICAgaWYgKE5vZGVpdCA9PSBtX25vZGVUYWJsZS5lbmQoKSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgcmV0dXJuIF9fbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBFcXVh
bE5vZGVMaXN0LmNsZWFyKCk7CiAgICAgICAgICAgIE5vZGVpdCA9IG1fbm9kZVRhYmxlLmxvd2Vy
X2JvdW5kKCBOb2RlaXQtPmZpcnN0ICk7CiAgICAgICAgICAgIChJTVBDaGVja0V4cHIoIk5vZGVp
dCAhPSBtX25vZGVUYWJsZS5lbmQoKSIsICJ2ZWNjbGVhbi5jcHAiLCAzMDUwKSwgKE5vZGVpdCAh
PSBtX25vZGVUYWJsZS5lbmQoKSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJOb2RlaXQgIT0gbV9ub2Rl
VGFibGUuZW5kKCkiLCJ2ZWNjbGVhbi5jcHAiLDMwNTApKTsKCiAgICAgICAgICAgIGRvCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIG9Qb2ludCA9IE5vZGVpdC0+Zmlyc3Q7CiAgICAgICAg
ICAgICAgICBFcXVhbE5vZGVMaXN0LnB1c2hfYmFjaygoICpOb2RlaXQgKSk7CiAgICAgICAgICAg
ICAgICBOb2RlaXQrKzsKICAgICAgICAgICAgfSB3aGlsZSAoKCBOb2RlaXQgIT0gbV9ub2RlVGFi
bGUuZW5kKCkpICYmICggb1BvaW50ID09IE5vZGVpdC0+Zmlyc3QgKSk7CgogICAgICAgICAgICBz
b3J0KCBFcXVhbE5vZGVMaXN0LmJlZ2luKCksIEVxdWFsTm9kZUxpc3QuZW5kKCksIFZDTE5vZGVU
YWJsZVBvaW50TGVzcyApOwoKICAgICAgICAgICAgaXQgPSBFcXVhbE5vZGVMaXN0LmJlZ2luKCk7
CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25kOwp9CiMgMzA4MyAidmVjY2xl
YW4uY3BwIgpDVkNMTm9kZSAqQ1ZDTE5vZGVUYWJsZTo6UHJldiggY29uc3QgQ1ZDTE5vZGUgJm9D
dXJyZW50ICkgY29uc3QKewogICAgICAgIE5vZGVUYWJsZV90cDo6Y29uc3RfaXRlcmF0b3IgaXQ7
CgogICAgICAgIGl0ID0gbV9ub2RlVGFibGUuZmluZCggb0N1cnJlbnQubV9vUG9pbnQgKTsKCiAg
ICAgICAgaWYgKGl0ID09IG1fbm9kZVRhYmxlLmJlZ2luKCkpCiAgICAgICAgICAgIHJldHVybiBf
X251bGw7CgogICAgICAgIGl0LS07CgogICAgICAgIHdoaWxlICgoIGl0ICE9IG1fbm9kZVRhYmxl
LmJlZ2luKCkpICYmICgoICppdCApLnNlY29uZC0+U2hhcGVDb3VudCgpIDw9IDAgKSkKICAgICAg
ICB7CiAgICAgICAgICAgIGl0LS07CiAgICAgICAgfQoKICAgICAgICBpZiAoKCAqaXQgKS5zZWNv
bmQtPlNoYXBlQ291bnQoKSA+IDApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCppdCku
c2Vjb25kOwogICAgICAgIH0KCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIF9fbnVsbDsKICAgICAgICB9Cn0KIyAzMTI2ICJ2ZWNjbGVhbi5jcHAiClRCb29sIENWQ0xO
b2RlVGFibGU6OkFkZCggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIG5TaGFwZUlkICkKewogICAg
ICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hh
cGUoIHBvU2hhcGUsIG5TaGFwZUlkICk7CgogICAgICAgIChJTVBDaGVja0V4cHIoInBvU2hhcGUt
PklzTW9ub3RvbmljKCkiLCAidmVjY2xlYW4uY3BwIiwgMzEzMSksIChwb1NoYXBlLT5Jc01vbm90
b25pYygpKSA/ICgwKSA6IF9JTVBBc3NlcnQoInBvU2hhcGUtPklzTW9ub3RvbmljKCkiLCJ2ZWNj
bGVhbi5jcHAiLDMxMzEpKTsKCiAgICAgICAgQ1ZDTFBvaW50IG9GaXJzdFBvaW50ID0gcG9TaGFw
ZS0+R2V0Rmlyc3QoKTsKICAgICAgICBDVkNMTm9kZSAqcG9GaXJzdE5vZGUgPSBGaW5kKCBvRmly
c3RQb2ludCApOwoKICAgICAgICBDVkNMUG9pbnQgb0xhc3RQb2ludCA9IHBvU2hhcGUtPkdldExh
c3QoKTsKICAgICAgICBDVkNMTm9kZSAqcG9MYXN0Tm9kZSA9IEZpbmQoIG9MYXN0UG9pbnQgKTsK
CgogICAgICAgIGlmIChwb0ZpcnN0Tm9kZSA9PSBfX251bGwpCiAgICAgICAgewogICAgICAgICAg
ICBwYWlyPE5vZGVUYWJsZV90cDo6aXRlcmF0b3IsIFRCb29sPiBwID0gbV9ub2RlVGFibGUuaW5z
ZXJ0KCBOb2RlVGFibGVfdHA6OnZhbHVlX3R5cGUoIG9GaXJzdFBvaW50LCBuZXcoInZlY2NsZWFu
LmNwcCIsMzE0MikgQ1ZDTE5vZGUoIG9GaXJzdFBvaW50ICkpKTsKICAgICAgICAgICAgcG9GaXJz
dE5vZGUgPSAoICooIHAuZmlyc3QgKSkuc2Vjb25kOwogICAgICAgICAgICBtX25Db3VudCsrOwog
ICAgICAgIH0KCiAgICAgICAgVEJvb2wgYkFkZGVkID0gcG9GaXJzdE5vZGUtPkFkZCggblNoYXBl
SWQgKTsKCiAgICAgICAgaWYgKGJBZGRlZCkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChwb0xh
c3ROb2RlID09IF9fbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcGFpcjxOb2Rl
VGFibGVfdHA6Oml0ZXJhdG9yLCBUQm9vbD4gcCA9IG1fbm9kZVRhYmxlLmluc2VydCggTm9kZVRh
YmxlX3RwOjp2YWx1ZV90eXBlKCBvTGFzdFBvaW50LCBuZXcoInZlY2NsZWFuLmNwcCIsMzE1Mykg
Q1ZDTE5vZGUoIG9MYXN0UG9pbnQgKSkpOwogICAgICAgICAgICAgICAgcG9MYXN0Tm9kZSA9ICgg
KiggcC5maXJzdCApKS5zZWNvbmQ7CiAgICAgICAgICAgICAgICBtX25Db3VudCsrOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGJBZGRlZCA9IHBvTGFzdE5vZGUtPkFkZCggblNoYXBlSWQgKTsK
ICAgICAgICAgICAgKElNUENoZWNrRXhwcigiYkFkZGVkIiwgInZlY2NsZWFuLmNwcCIsIDMxNTgp
LCAoYkFkZGVkKSA/ICgwKSA6IF9JTVBBc3NlcnQoImJBZGRlZCIsInZlY2NsZWFuLmNwcCIsMzE1
OCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYkFkZGVkOwp9CiMgMzE4MCAidmVjY2xlYW4u
Y3BwIgp2b2lkIENWQ0xOb2RlVGFibGU6OlJlbW92ZSggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3Rw
IG5TaGFwZUlkICkKewogICAgICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICBDVkNMU2hh
cGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBvU2hhcGUsIG5TaGFwZUlkICk7CgogICAgICAgIENWQ0xQ
b2ludCBvRmlyc3RQb2ludCA9IHBvU2hhcGUtPkdldEZpcnN0KCk7CiAgICAgICAgQ1ZDTE5vZGUg
KnBvRmlyc3ROb2RlID0gRmluZCggb0ZpcnN0UG9pbnQgKTsKICAgICAgICAoSU1QQ2hlY2tFeHBy
KCJwb0ZpcnN0Tm9kZSAhPSBOVUxMIiwgInZlY2NsZWFuLmNwcCIsIDMxODcpLCAocG9GaXJzdE5v
ZGUgIT0gX19udWxsKSA/ICgwKSA6IF9JTVBBc3NlcnQoInBvRmlyc3ROb2RlICE9IE5VTEwiLCJ2
ZWNjbGVhbi5jcHAiLDMxODcpKTsKICAgICAgICBwb0ZpcnN0Tm9kZS0+UmVtb3ZlKCBuU2hhcGVJ
ZCApOwoKICAgICAgICBDVkNMUG9pbnQgb0xhc3RQb2ludCA9IHBvU2hhcGUtPkdldExhc3QoKTsK
ICAgICAgICBDVkNMTm9kZSAqcG9TZWNvbmROb2RlID0gRmluZCggb0xhc3RQb2ludCApOwogICAg
ICAgIChJTVBDaGVja0V4cHIoInBvU2Vjb25kTm9kZSAhPSBOVUxMIiwgInZlY2NsZWFuLmNwcCIs
IDMxOTIpLCAocG9TZWNvbmROb2RlICE9IF9fbnVsbCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJwb1Nl
Y29uZE5vZGUgIT0gTlVMTCIsInZlY2NsZWFuLmNwcCIsMzE5MikpOwogICAgICAgIHBvU2Vjb25k
Tm9kZS0+UmVtb3ZlKCBuU2hhcGVJZCApOwp9CiMgMzIxMyAidmVjY2xlYW4uY3BwIgpDVkNMTm9k
ZSAqQ1ZDTE5vZGVUYWJsZTo6RmluZCggY29uc3QgQ1ZDTFBvaW50ICZvUG9pbnQgKSBjb25zdAp7
CiAgICAgICAgTm9kZVRhYmxlX3RwOjpjb25zdF9pdGVyYXRvciBpdDsKCiAgICAgICAgaXQgPSBt
X25vZGVUYWJsZS5maW5kKCBvUG9pbnQgKTsKCiAgICAgICAgaWYgKGl0ID09IG1fbm9kZVRhYmxl
LmVuZCgpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIF9fbnVsbDsKICAgICAgICB9Cgog
ICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQ7CiAg
ICAgICAgfQp9CgoKdm9pZCBDVkNMTm9kZVRhYmxlOjpNZXJnZU5vZGVzKCBjb25zdCBDVkNMUG9p
bnQgJm9EZXN0LCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIG9TcmMgKQp7CgoKCiAgICAg
ICAgKElNUENoZWNrRXhwcigiZmFsc2UiLCAidmVjY2xlYW4uY3BwIiwgMzIzNiksIChmYWxzZSkg
PyAoMCkgOiBfSU1QQXNzZXJ0KCJmYWxzZSIsInZlY2NsZWFuLmNwcCIsMzIzNikpOwp9CiMgMzI1
NSAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xOb2RlVGFibGU6OlN0cmVhbU91dCgpCnsKICAgICAg
ICBmb3IgKENWQ0xOb2RlICogcG9Ob2RlID0gdGhpcy0+Rmlyc3QoKTsgcG9Ob2RlICE9IF9fbnVs
bDsgcG9Ob2RlID0gdGhpcy0+TmV4dCggKnBvTm9kZSApKQogICAgICAgIHsKICAgICAgICAgICAg
Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9TaGFwZXNJZHMgPSBwb05vZGUtPkdldFVw
U2hpZHMoKTsKCiAgICAgICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZSA9IG9TaGFwZXNJZHMuc2l6
ZSgpOwogICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG5TaXplOyBpKysp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAg
ICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9TaGFwZSwgb1NoYXBlc0lk
c1sgaSBdICk7CiAgICAgICAgICAgICAgICBwb1NoYXBlLT5Xcml0ZSgpOwogICAgICAgICAgICB9
CiAgICAgICAgfQp9CiMgMzQxMCAidmVjY2xlYW4uY3BwIgpPcmllbnRhdGlvbl90cCBWQ0xHZXRP
cmllbnRhdGlvbiggY29uc3QgQ1ZDTFBvaW50ICZ2MSwgY29uc3QgQ1ZDTFBvaW50ICZ2MiApCnsK
ICAgICAgICBpZiAoVkNMREJMQ29tcCggdjEueSwgdjIueSApID09IC0xKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIGVJbmM7CiAgICAgICAgfQoKICAgICAgICBlbHNlIGlmIChWQ0xEQkxD
b21wKCB2MS55LCB2Mi55ICkgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBlRGVj
OwogICAgICAgIH0KCiAgICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICAgIGlmIChWQ0xE
QkxDb21wKCB2MS54LCB2Mi54ICkgPT0gLTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiBlSG9yaXpJbmM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGVIb3JpekRlYzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KfQojIDM0NTcgInZlY2NsZWFuLmNwcCIKdm9pZCBWQ0xCcmVha01vbm90b25pYygg
Q1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgJm9TaGFwZXMsIGNvbnN0IENWQ0xQb2lu
dDo6VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZUluICkKewogICAgICAgIENWQ0xQb2ludDo6VkNM
UG9pbnRWZWN0b3JfdHAgb1NoYXBlOwogICAgICAgIE9yaWVudGF0aW9uX3RwIG9PcmllbnQ7CiAg
ICAgICAgZG91YmxlIGRmRmlyc3RZOwoKICAgICAgICBvU2hhcGVzLmNsZWFyKCk7CgogICAgICAg
IHVuc2lnbmVkIGludCBuU2l6ZSA9IG9TaGFwZUluLnNpemUoKTsKICAgICAgICBpZiAoblNpemUg
Pj0gMikKICAgICAgICB7CiAgICAgICAgICAgIG9TaGFwZS5wdXNoX2JhY2soIG9TaGFwZUluWyAw
IF0gKTsKICAgICAgICAgICAgb1NoYXBlLnB1c2hfYmFjayggb1NoYXBlSW5bIDEgXSApOwogICAg
ICAgICAgICBvT3JpZW50ID0gVkNMR2V0T3JpZW50YXRpb24oIG9TaGFwZUluWyAwIF0sIG9TaGFw
ZUluWyAxIF0gKTsKICAgICAgICAgICAgZGZGaXJzdFkgPSBvU2hhcGVJblsgMCBdLnk7CgogICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMjsgaSA8IG5TaXplOyBpKyspCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIGlmICgoKCBvT3JpZW50ICE9IFZDTEdldE9yaWVudGF0aW9u
KCBvU2hhcGVJblsgaSAtIDEgXSwgb1NoYXBlSW5bIGkgXSApKSB8fAogICAgICAgICAgICAgICAg
ICAgICgoKCBvT3JpZW50ID09IGVIb3JpekluYyApIHx8ICggb09yaWVudCA9PSBlSG9yaXpEZWMg
KSkgJiYgKCBWQ0xEQkxDb21wKCBkZkZpcnN0WSwgb1NoYXBlSW5bIGkgXS55ICkgIT0gMCApKSkp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb1NoYXBlcy5wdXNoX2JhY2so
IG9TaGFwZSApOwogICAgICAgICAgICAgICAgICAgIG9TaGFwZS5jbGVhcigpOwogICAgICAgICAg
ICAgICAgICAgIG9TaGFwZS5wdXNoX2JhY2soIG9TaGFwZUluWyBpIC0gMSBdICk7CiAgICAgICAg
ICAgICAgICAgICAgZGZGaXJzdFkgPSBvU2hhcGVJblsgaSAtIDEgXS55OwogICAgICAgICAgICAg
ICAgICAgIG9PcmllbnQgPSBWQ0xHZXRPcmllbnRhdGlvbiggb1NoYXBlSW5bIGkgLSAxIF0sIG9T
aGFwZUluWyBpIF0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBvU2hhcGUu
cHVzaF9iYWNrKCBvU2hhcGVJblsgaSBdICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG9T
aGFwZXMucHVzaF9iYWNrKCBvU2hhcGUgKTsKICAgICAgICB9Cn0KIyAzNTE0ICJ2ZWNjbGVhbi5j
cHAiCnZvaWQgVkNMQnJlYWtNb25vdG9uaWMoIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0
X3RwICZvU2hhcGVzLCBHREJWZXJ0ZXggKnBhc1ZlcnRleCwgaW50IG5WZXJ0ZXggKQp7CiAgICAg
ICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCBvU2hhcGU7CiAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBuVmVydGV4OyBpKyspCiAgICAgICAgewogICAgICAgICAgICBvU2hhcGUucHVz
aF9iYWNrKCBwYXNWZXJ0ZXhbIGkgXSApOwogICAgICAgIH0KCiAgICAgICAgVkNMQnJlYWtNb25v
dG9uaWMoIG9TaGFwZXMsIG9TaGFwZSApOwp9CgoKCgoKCnN0YXRpYyBUQm9vbCBYb3IoIFRCb29s
IHgsIFRCb29sIHkgKQp7CiAgICAgICAgcmV0dXJuIFRCb29sKCAheCBeICF5ICk7Cn0KIyAzNTUy
ICJ2ZWNjbGVhbi5jcHAiCmRvdWJsZSBWQ0xBcmVhMiggY29uc3QgQ1ZDTFBvaW50ICZzQSwgY29u
c3QgQ1ZDTFBvaW50ICZzQiwgY29uc3QgQ1ZDTFBvaW50ICZzQyApCnsKICAgICAgICByZXR1cm4g
c0EueCAqIHNCLnkgLSBzQS55ICogc0IueCArCiAgICAgICAgICAgIHNBLnkgKiBzQy54IC0gc0Eu
eCAqIHNDLnkgKwogICAgICAgICAgICBzQi54ICogc0MueSAtIHNDLnggKiBzQi55Owp9Cgpkb3Vi
bGUgVkNMQXJlYTIoIGNvbnN0IEdEQlZlcnRleCAmc0EsIGNvbnN0IEdEQlZlcnRleCAmc0IsIGNv
bnN0IEdEQlZlcnRleCAmc0MgKQp7CiAgICAgICAgcmV0dXJuIHNBLnggKiBzQi55IC0gc0EueSAq
IHNCLnggKwogICAgICAgICAgICBzQS55ICogc0MueCAtIHNBLnggKiBzQy55ICsKICAgICAgICAg
ICAgc0IueCAqIHNDLnkgLSBzQy54ICogc0IueTsKfQojIDM1ODMgInZlY2NsZWFuLmNwcCIKVEJv
b2wgVkNMSXNMZWZ0KCBjb25zdCBDVkNMUG9pbnQgJnNBLCBjb25zdCBDVkNMUG9pbnQgJnNCLCBj
b25zdCBDVkNMUG9pbnQgJnNDICkKewoKICAgICAgICByZXR1cm4gVkNMQXJlYTIoIHNBLCBzQiwg
c0MgKSA+IDAuMDsKfQoKVEJvb2wgVkNMSXNMZWZ0KCBjb25zdCBHREJWZXJ0ZXggJnNBLCBjb25z
dCBHREJWZXJ0ZXggJnNCLCBjb25zdCBHREJWZXJ0ZXggJnNDICkKewoKICAgICAgICByZXR1cm4g
VkNMQXJlYTIoIHNBLCBzQiwgc0MgKSA+IDAuMDsKfQojIDM2MTIgInZlY2NsZWFuLmNwcCIKVEJv
b2wgVkNMSXNMZWZ0T24oIGNvbnN0IENWQ0xQb2ludCAmc0EsIGNvbnN0IENWQ0xQb2ludCAmc0Is
IGNvbnN0IENWQ0xQb2ludCAmc0MsIGRvdWJsZSBkZlRvbCApCnsKICAgICAgICByZXR1cm4gVkNM
SXNMZWZ0KCBzQSwgc0IsIHNDICkgfHwgVkNMSXNDb2xsaW5lYXIoIHNBLCBzQiwgc0MsIGRmVG9s
ICk7Cn0KIyAzNjM1ICJ2ZWNjbGVhbi5jcHAiClRCb29sIFZDTElzQ29sbGluZWFyKCBjb25zdCBD
VkNMUG9pbnQgJnNBLCBjb25zdCBDVkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDLCBk
b3VibGUgZGZUb2wgKQp7CiAgICAgICAgcmV0dXJuIChzQSA9PSBzQykgfHwgKCBzQiA9PSBzQyAp
IHx8IGZhYnMoIFZDTEFyZWEyKCBzQSwgc0IsIHNDICkpIDw9IGZhYnMoIGRmVG9sICk7Cn0KIyAz
NjY1ICJ2ZWNjbGVhbi5jcHAiClRCb29sIFZDTEludGVyc2VjdFByb3AoIGNvbnN0IENWQ0xQb2lu
dCAmc0EsIGNvbnN0IENWQ0xQb2ludCAmc0IsCiAgICAgICAgICAgICBjb25zdCBDVkNMUG9pbnQg
JnNDLCBjb25zdCBDVkNMUG9pbnQgJnNELCBkb3VibGUgZGZUb2wgKQp7CiAgICAgICAgaWYgKFZD
TElzQ29sbGluZWFyKCBzQSwgc0IsIHNDLCBkZlRvbCApIHx8CiAgICAgICAgVkNMSXNDb2xsaW5l
YXIoIHNBLCBzQiwgc0QsIGRmVG9sICkgfHwKICAgICAgICBWQ0xJc0NvbGxpbmVhciggc0MsIHNE
LCBzQSwgZGZUb2wgKSB8fAogICAgICAgIFZDTElzQ29sbGluZWFyKCBzQywgc0QsIHNCLCBkZlRv
bCApKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiBYb3IoIFZDTElz
TGVmdCggc0EsIHNCLCBzQyApLCBWQ0xJc0xlZnQoIHNBLCBzQiwgc0QgKSkgJiYKICAgICAgICAg
ICAgWG9yKCBWQ0xJc0xlZnQoIHNDLCBzRCwgc0EgKSwgVkNMSXNMZWZ0KCBzQywgc0QsIHNCICkp
Owp9CiMgMzY5NyAidmVjY2xlYW4uY3BwIgpUQm9vbCBWQ0xJbnRlcnNlY3Rpb24oIGNvbnN0IENW
Q0xQb2ludCAmc0EsIGNvbnN0IENWQ0xQb2ludCAmc0IsIGNvbnN0IENWQ0xQb2ludCAmc0MsIGNv
bnN0IENWQ0xQb2ludCAmc0QsIENWQ0xQb2ludCAmc1AsIGRvdWJsZSBkZlRvbCApCnsKICAgICAg
ICBkb3VibGUgZGZTLCBkZlQ7CiAgICAgICAgZG91YmxlIGRmRGVub207CgogICAgICAgIGRmRGVu
b20gPSBzQS54ICogKCBzRC55IC0gc0MueSApICsKICAgICAgICAgICAgc0IueCAqICggc0MueSAt
IHNELnkgKSArCiAgICAgICAgICAgIHNELnggKiAoIHNCLnkgLSBzQS55ICkgKwogICAgICAgICAg
ICBzQy54ICogKCBzQS55IC0gc0IueSApOwoKICAgICAgICAoSU1QQ2hlY2tFeHByKCJkZlRvbCA+
PSAwLjAiLCAidmVjY2xlYW4uY3BwIiwgMzcwNyksIChkZlRvbCA+PSAwLjApID8gKDApIDogX0lN
UEFzc2VydCgiZGZUb2wgPj0gMC4wIiwidmVjY2xlYW4uY3BwIiwzNzA3KSk7CgoKCgogICAgICAg
IGlmIChmYWJzKCBkZkRlbm9tICkgPD0gZGZUb2wpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgfQoKCgoKICAgICAgICBkZlMgPSAoIHNBLnggKiAoIHNELnkgLSBz
Qy55ICkgKwogICAgICAgICAgICBzQy54ICogKCBzQS55IC0gc0QueSApICsKICAgICAgICAgICAg
c0QueCAqICggc0MueSAtIHNBLnkgKSkgLyBkZkRlbm9tOwoKICAgICAgICBkZlQgPSAtKCBzQS54
ICogKCBzQy55IC0gc0IueSApICsKICAgICAgICAgICAgIHNCLnggKiAoIHNBLnkgLSBzQy55ICkg
KwogICAgICAgICAgICAgc0MueCAqICggc0IueSAtIHNBLnkgKSkgLyBkZkRlbm9tOwoKICAgICAg
ICBzUC54ID0gc0EueCArIGRmUyAqICggc0IueCAtIHNBLnggKTsKICAgICAgICBzUC55ID0gc0Eu
eSArIGRmUyAqICggc0IueSAtIHNBLnkgKTsKICAgICAgICBzUC56ID0gMC4wOwoKICAgICAgICBp
ZiAoKCAwLjAgPD0gZGZTICkgJiYgKCBkZlMgPD0gMS4wICkgJiYKICAgICAgICAoIDAuMCA8PSBk
ZlQgKSAmJiAoIGRmVCA8PSAxLjAgKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgIH0KCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgIH0KfQojIDM3NjQgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMRXVjbGlkaWFu
RGlzdGFuY2UoIGNvbnN0IENWQ0xQb2ludCAmb0EsIGNvbnN0IENWQ0xQb2ludCAmb0IsIGNvbnN0
IENWQ0xQb2ludCAmb1AsIGRvdWJsZSAmZGZEaXN0LCBDVkNMUG9pbnQgJm9JICkKewoKCgogICAg
ICAgIGRvdWJsZSBkZkEyLCBkZlMsIGRmVDsKICAgICAgICBDVkNMUG9pbnQgc0EsIHNCLCBzUCwg
c0ksIHNROwoKICAgICAgICBzQSA9ICgob0EpIDwgKG9CKSA/IChvQSkgOiAob0IpKTsKICAgICAg
ICBzQiA9ICgob0EpID4gKG9CKSA/IChvQSkgOiAob0IpKTsKICAgICAgICBzUCA9IG9QOwoKCgoK
ICAgICAgICBkZlQgPSAoIHNQLnggLSBzQS54ICkgKiAoIHNCLnggLSBzQS54ICkgKwogICAgICAg
ICAgICAoIHNQLnkgLSBzQS55ICkgKiAoIHNCLnkgLSBzQS55ICk7CgogICAgICAgIGlmIChkZlQg
PCAwLjApCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCgoKCiAgICAgICAgZGZUID0gKCBzQi54
IC0gc1AueCApICogKCBzQi54IC0gc0EueCApICsKICAgICAgICAgICAgKCBzQi55IC0gc1AueSAp
ICogKCBzQi55IC0gc0EueSApOwoKICAgICAgICBpZiAoZGZUIDwgMC4wKQogICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CgoKCgogICAgICAgIGRmQTIgPSAoIHNQLnkgLSBzQS55ICkgKiAoIHNCLngg
LSBzQS54ICkgLQogICAgICAgICAgICAoIHNQLnggLSBzQS54ICkgKiAoIHNCLnkgLSBzQS55ICk7
CgogICAgICAgIGRmRGlzdCA9IHNxcnQoKCBkZkEyICogZGZBMiApIC8gKCggc0IueCAtIHNBLngg
KSAqICggc0IueCAtIHNBLnggKSArICggc0IueSAtIHNBLnkgKSAqICggc0IueSAtIHNBLnkgKSkp
OwoKCgoKCiAgICAgICAgZGZTID0gc0IueCAtIHNBLng7CiAgICAgICAgZGZUID0gc0IueSAtIHNB
Lnk7CgoKCgoKICAgICAgICBzUS54ID0gc1AueCAtIGRmVCAqIDEuMDsKICAgICAgICBzUS55ID0g
c1AueSArIGRmUyAqIDEuMDsKIyAzODIzICJ2ZWNjbGVhbi5jcHAiCiAgICAgICAgVkNMSW50ZXJz
ZWN0aW9uKCBzQSwgc0IsIG9QLCBzUSwgc0ksIDAuMCApOwogICAgICAgIG9JID0gc0k7CgogICAg
ICAgIHJldHVybiB0cnVlOwp9CiMgMzg0OSAidmVjY2xlYW4uY3BwIgpDVkNMUG9pbnQgVkNMSW50
ZXJwb2xhdGVQb2ludCggQ1ZDTFBvaW50IHYxLCBDVkNMUG9pbnQgdjIsIGRvdWJsZSBkZlJhbmdl
LCBkb3VibGUgZGZEaXN0ICkKewogICAgICAgIGlmIChkZlJhbmdlID09IDAuMCkKICAgICAgICB7
CiAgICAgICAgICAgIGRmUmFuZ2UgPSAyLjA7CiAgICAgICAgICAgIGRmRGlzdCA9IDEuMDsKICAg
ICAgICB9CgogICAgICAgIHJldHVybiBDVkNMUG9pbnQoIHYxLnggKyAoIHYyLnggLSB2MS54ICkg
KiBkZkRpc3QgLyBkZlJhbmdlLAogICAgICAgICAgICAgICAgICB2MS55ICsgKCB2Mi55IC0gdjEu
eSApICogZGZEaXN0IC8gZGZSYW5nZSApOwp9CiMgMzg3OCAidmVjY2xlYW4uY3BwIgpDVkNMUmVj
dCBWQ0xDb21wdXRlUmFuZ2VSZWN0KCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3Rw
ICZvU2hhcGUgKQp7CiAgICAgICAgZG91YmxlIGRmWE1pbiwgZGZYTWF4LCBkZllNaW4sIGRmWU1h
eDsKCiAgICAgICAgZGZYTWluID0gMS43OTc2OTMxMzQ4NjIzMTU3RSszMDg7CiAgICAgICAgZGZZ
TWluID0gMS43OTc2OTMxMzQ4NjIzMTU3RSszMDg7CiAgICAgICAgZGZYTWF4ID0gLTEuNzk3Njkz
MTM0ODYyMzE1N0UrMzA4OwogICAgICAgIGRmWU1heCA9IC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMw
ODsKCiAgICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb1NoYXBlLnNpemUoKTsKICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG5TaXplOyBpKyspCiAgICAgICAgewogICAgICAg
ICAgICBkZlhNaW4gPSAoKG9TaGFwZVsgaSBdLngpIDwgKGRmWE1pbikgPyAob1NoYXBlWyBpIF0u
eCkgOiAoZGZYTWluKSk7CiAgICAgICAgICAgIGRmWU1pbiA9ICgob1NoYXBlWyBpIF0ueSkgPCAo
ZGZZTWluKSA/IChvU2hhcGVbIGkgXS55KSA6IChkZllNaW4pKTsKICAgICAgICAgICAgZGZYTWF4
ID0gKChvU2hhcGVbIGkgXS54KSA+IChkZlhNYXgpID8gKG9TaGFwZVsgaSBdLngpIDogKGRmWE1h
eCkpOwogICAgICAgICAgICBkZllNYXggPSAoKG9TaGFwZVsgaSBdLnkpID4gKGRmWU1heCkgPyAo
b1NoYXBlWyBpIF0ueSkgOiAoZGZZTWF4KSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gQ1ZD
TFJlY3QoIGRmWE1pbiwgZGZZTWluLCBkZlhNYXgsIGRmWU1heCApOwp9CiMgMzkxOCAidmVjY2xl
YW4uY3BwIgpkb3VibGUgVkNMQ29tcHV0ZUxlbmd0aCggY29uc3QgQ1ZDTFBvaW50OjpWQ0xQb2lu
dFZlY3Rvcl90cCAmb1NoYXBlICkKewogICAgICAgIGRvdWJsZSBkZkxlbmd0aCA9IDAuMDsKCiAg
ICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb1NoYXBlLnNpemUoKTsKICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMTsgaSA8IG5TaXplOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBk
Zkxlbmd0aCArPSAoc3FydCgoKG9TaGFwZVsgaSBdKS54IC0gKG9TaGFwZVsgaSAtIDEgXSkueCkg
KiAoKG9TaGFwZVsgaSBdKS54IC0gKG9TaGFwZVsgaSAtIDEgXSkueCkgKyAoKG9TaGFwZVsgaSBd
KS55IC0gKG9TaGFwZVsgaSAtIDEgXSkueSkgKiAoKG9TaGFwZVsgaSBdKS55IC0gKG9TaGFwZVsg
aSAtIDEgXSkueSkpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBkZkxlbmd0aDsKfQojIDM5
NDggInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMSXNNb25vdG9uaWMoIGNvbnN0IENWQ0xQb2ludDo6
VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZSApCnsKICAgICAgICB1bnNpZ25lZCBpbnQgblNpemUg
PSBvU2hhcGUuc2l6ZSgpOwogICAgICAgIChJTVBDaGVja0V4cHIoIm5TaXplID49IDIiLCAidmVj
Y2xlYW4uY3BwIiwgMzk1MSksIChuU2l6ZSA+PSAyKSA/ICgwKSA6IF9JTVBBc3NlcnQoIm5TaXpl
ID49IDIiLCJ2ZWNjbGVhbi5jcHAiLDM5NTEpKTsKCiAgICAgICAgT3JpZW50YXRpb25fdHAgZU9y
aWVudCA9IFZDTEdldE9yaWVudGF0aW9uKCBvU2hhcGVbIDAgXSwgb1NoYXBlWyAxIF0gKTsKCiAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDI7IGkgPCBuU2l6ZTsgaSsrKQogICAgICAgIHsK
ICAgICAgICAgICAgaWYgKGVPcmllbnQgIT0gVkNMR2V0T3JpZW50YXRpb24oIG9TaGFwZVsgaSAt
IDEgXSwgb1NoYXBlWyBpIF0gKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKfQoj
IDM5ODUgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMSXNMZWZ0T2ZTaGFwZSggY29uc3QgQ1ZDTFBv
aW50ICZ2LCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUgKQp7CiAg
ICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb1NoYXBlLnNpemUoKTsKICAgICAgICAoSU1QQ2hl
Y2tFeHByKCJuU2l6ZSA+PSAyIiwgInZlY2NsZWFuLmNwcCIsIDM5ODgpLCAoblNpemUgPj0gMikg
PyAoMCkgOiBfSU1QQXNzZXJ0KCJuU2l6ZSA+PSAyIiwidmVjY2xlYW4uY3BwIiwzOTg4KSk7Cgog
ICAgICAgIChJTVBDaGVja0V4cHIoIklOX1JBTkdFKCB2LnksIG9TaGFwZVsgMCBdLnksIG9TaGFw
ZVsgblNpemUgLSAxIF0ueSApIiwgInZlY2NsZWFuLmNwcCIsIDM5OTApLCAoKChWQ0xEQkxDb21w
KChvU2hhcGVbIDAgXS55KSwgdi55KSA8PSAwKSAmJiAoVkNMREJMQ29tcCh2LnksIChvU2hhcGVb
IG5TaXplIC0gMSBdLnkpKSA8PSAwKSkpID8gKDApIDogX0lNUEFzc2VydCgiSU5fUkFOR0UoIHYu
eSwgb1NoYXBlWyAwIF0ueSwgb1NoYXBlWyBuU2l6ZSAtIDEgXS55ICkiLCJ2ZWNjbGVhbi5jcHAi
LDM5OTApKTsKCiAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCBuU2l6ZTsgaSsr
KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCgoVkNMREJMQ29tcCgob1NoYXBlWyBpIC0gMSBd
LnkpLCB2LnkpIDw9IDApICYmIChWQ0xEQkxDb21wKHYueSwgKG9TaGFwZVsgaSBdLnkpKSA8PSAw
KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBWQ0xJc0xlZnQoIG9TaGFw
ZVsgaSAtIDEgXSwgb1NoYXBlWyBpIF0sIHYgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAg
ICAgICAgKElNUENoZWNrRXhwcigiZmFsc2UiLCAidmVjY2xlYW4uY3BwIiwgNDAwMCksIChmYWxz
ZSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJmYWxzZSIsInZlY2NsZWFuLmNwcCIsNDAwMCkpOwogICAg
ICAgIHJldHVybiBmYWxzZTsKfQojIDQwMjEgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMSXNMZWZ0
T25TaGFwZSggY29uc3QgQ1ZDTFBvaW50ICZ2LCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVj
dG9yX3RwICZvU2hhcGUgKQp7CiAgICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb1NoYXBlLnNp
emUoKTsKICAgICAgICAoSU1QQ2hlY2tFeHByKCJuU2l6ZSA+PSAyIiwgInZlY2NsZWFuLmNwcCIs
IDQwMjQpLCAoblNpemUgPj0gMikgPyAoMCkgOiBfSU1QQXNzZXJ0KCJuU2l6ZSA+PSAyIiwidmVj
Y2xlYW4uY3BwIiw0MDI0KSk7CgogICAgICAgIGRvdWJsZSBsb3cgPSBvU2hhcGVbIDAgXS55Owog
ICAgICAgIGRvdWJsZSBoaWdoID0gb1NoYXBlWyBuU2l6ZSAtIDEgXS55OwoKICAgICAgICAoSU1Q
Q2hlY2tFeHByKCJJTl9SQU5HRSggdi55LCBvU2hhcGVbIDAgXS55LCBvU2hhcGVbIG5TaXplIC0g
MSBdLnkgKSIsICJ2ZWNjbGVhbi5jcHAiLCA0MDI5KSwgKCgoVkNMREJMQ29tcCgob1NoYXBlWyAw
IF0ueSksIHYueSkgPD0gMCkgJiYgKFZDTERCTENvbXAodi55LCAob1NoYXBlWyBuU2l6ZSAtIDEg
XS55KSkgPD0gMCkpKSA/ICgwKSA6IF9JTVBBc3NlcnQoIklOX1JBTkdFKCB2LnksIG9TaGFwZVsg
MCBdLnksIG9TaGFwZVsgblNpemUgLSAxIF0ueSApIiwidmVjY2xlYW4uY3BwIiw0MDI5KSk7Cgog
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgblNpemU7IGkrKykKICAgICAgICB7
CiAgICAgICAgICAgIGlmICgoKFZDTERCTENvbXAoKG9TaGFwZVsgaSAtIDEgXS55KSwgdi55KSA8
PSAwKSAmJiAoVkNMREJMQ29tcCh2LnksIChvU2hhcGVbIGkgXS55KSkgPD0gMCkpKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVkNMSXNMZWZ0T24oIG9TaGFwZVsgaSAtIDEg
XSwgb1NoYXBlWyBpIF0sIHYgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgKElN
UENoZWNrRXhwcigiZmFsc2UiLCAidmVjY2xlYW4uY3BwIiwgNDAzOSksIChmYWxzZSkgPyAoMCkg
OiBfSU1QQXNzZXJ0KCJmYWxzZSIsInZlY2NsZWFuLmNwcCIsNDAzOSkpOwogICAgICAgIHJldHVy
biBmYWxzZTsKfQojIDQwNjAgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMSXNSaWdodE9mU2hhcGUo
IGNvbnN0IENWQ0xQb2ludCAmdiwgY29uc3QgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAm
b1NoYXBlICkKewogICAgICAgIHJldHVybiAhVkNMSXNMZWZ0T25TaGFwZSggdiwgb1NoYXBlICk7
Cn0KIyA0MDgyICJ2ZWNjbGVhbi5jcHAiCnZvaWQgVkNMVW5pcXVlVmVydGV4KCBDVkNMUG9pbnQ6
OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUgKQp7CiAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2lu
dFZlY3Rvcl90cDo6aXRlcmF0b3IgaXQgPSB1bmlxdWUoIG9TaGFwZS5iZWdpbigpLCBvU2hhcGUu
ZW5kKCksIFZDTFBvaW50RXF1YWwoKSk7CiAgICAgICAgb1NoYXBlLnJlc2l6ZSggaXQgLSBvU2hh
cGUuYmVnaW4oKSk7Cn0KCgp2b2lkIFZDTFVuaXF1ZVZlcnRleCggR0RCVmVydGV4ICpwYXNWZXJ0
ZXgsIGludCAmblZlcnRleCApCnsKICAgICAgICBpbnQgbjsKCiAgICAgICAgbiA9IDA7CiAgICAg
ICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuVmVydGV4OyBpKyspCiAgICAgICAgewogICAgICAgICAg
ICBpZiAoKCBwYXNWZXJ0ZXhbIG4gXS54ICE9IHBhc1ZlcnRleFsgaSBdLnggKSB8fCAoIHBhc1Zl
cnRleFsgbiBdLnkgIT0gcGFzVmVydGV4WyBpIF0ueSApKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBuKys7CiAgICAgICAgICAgICAgICBwYXNWZXJ0ZXhbIG4gXSA9IHBhc1ZlcnRleFsg
aSBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBuVmVydGV4ID0gbiArIDE7Cn0K
IyA0MTQ3ICJ2ZWNjbGVhbi5jcHAiClRCb29sIFZDTE1lcmdlU2hhcGVzKCBjb25zdCBDVkNMUG9p
bnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUxLCBkb3VibGUgZGZUb2wxLCBjb25zdCBDVkNM
UG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUyLCBkb3VibGUgZGZUb2wyLAogICAgICAg
ICAgICAgICBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cCAmc2hhcGUxTGlzdE91dCwg
Q1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgJnNoYXBlMkxpc3RPdXQsIENWQ0xQb2lu
dDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwICZkZXJpdmVkU2hhcGVMaXN0T3V0ICkKewoKCgoKICAg
ICAgICBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIGRlcml2ZWRTaGFwZTsKCgoKCiAgICAg
ICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCBvTmV3U2hhcGUxOwoKCgoKICAgICAgICBD
VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIG9OZXdTaGFwZTI7CgoKCgoKICAgICAgICBDVkNM
UG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwOjppdGVyYXRvciBzaGFwZTFpdDsKCgoKICAgICAgICBD
VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwOjppdGVyYXRvciBzaGFwZTJpdDsKCgoKCgoKICAg
ICAgICBDVkNMUG9pbnQgb0Nsb3NlOwogICAgICAgIENWQ0xQb2ludCBvTWluQ2xvc2U7CgoKCiAg
ICAgICAgQ1ZDTFBvaW50IG9JbnRlcnNlY3Q7CgoKCiAgICAgICAgZG91YmxlIGRmRGlzdCA9IC0x
OwoKCgogICAgICAgIGRvdWJsZSBkZlRvdGFsVG9sID0gZGZUb2wxICsgZGZUb2wyOwoKCgoKCiAg
ICAgICAgc2hhcGUxTGlzdE91dC5jbGVhcigpOwogICAgICAgIHNoYXBlMkxpc3RPdXQuY2xlYXIo
KTsKICAgICAgICBkZXJpdmVkU2hhcGVMaXN0T3V0LmNsZWFyKCk7CgoKCgogICAgICAgIENWQ0xQ
b2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb1NoYXBlMUNvcHkgPSBvU2hhcGUxOwoKICAgICAgICBD
VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIG9TaGFwZTJDb3B5ID0gb1NoYXBlMjsKCgoKICAg
ICAgICBzaGFwZTFpdCA9IG9TaGFwZTFDb3B5LmJlZ2luKCk7CiAgICAgICAgc2hhcGUyaXQgPSBv
U2hhcGUyQ29weS5iZWdpbigpOwoKICAgICAgICBvTWluQ2xvc2UgPSAoKG9TaGFwZTFDb3B5WyAw
IF0pID4gKG9TaGFwZTJDb3B5WyAwIF0pID8gKG9TaGFwZTFDb3B5WyAwIF0pIDogKG9TaGFwZTJD
b3B5WyAwIF0pKTsKCgoKCiAgICAgICAgaWYgKCpzaGFwZTFpdCA8ICpzaGFwZTJpdCkKICAgICAg
ICB7CiAgICAgICAgICAgIG9OZXdTaGFwZTEucHVzaF9iYWNrKCAqc2hhcGUxaXQgKTsKICAgICAg
ICAgICAgc2hhcGUxaXQrKzsKICAgICAgICB9CgogICAgICAgIGVsc2UgaWYgKCpzaGFwZTFpdCA+
ICpzaGFwZTJpdCkKICAgICAgICB7CiAgICAgICAgICAgIG9OZXdTaGFwZTIucHVzaF9iYWNrKCAq
c2hhcGUyaXQgKTsKICAgICAgICAgICAgc2hhcGUyaXQrKzsKICAgICAgICB9CgoKCgogICAgICAg
IGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGRlcml2ZWRTaGFwZS5wdXNoX2JhY2soICpzaGFw
ZTFpdCApOwogICAgICAgICAgICBzaGFwZTFpdCsrOwogICAgICAgICAgICBzaGFwZTJpdCsrOwog
ICAgICAgIH0KCgoKCgoKICAgICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgICAgVEJv
b2wgYkludGVyc2VjdCA9IGZhbHNlOwoKCgoKICAgICAgICAgICAgaWYgKCggc2hhcGUxaXQgPT0g
b1NoYXBlMUNvcHkuZW5kKCkpIHx8CiAgICAgICAgICAgICAgICAoIHNoYXBlMml0ID09IG9TaGFw
ZTJDb3B5LmVuZCgpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgIH0KCgoKCiAgICAgICAgICAgIGVsc2UgaWYgKCpzaGFwZTFpdCA9PSAqc2hhcGUyaXQp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGJJbnRlcnNlY3QgPSB0cnVlOwogICAgICAg
ICAgICAgICAgb0ludGVyc2VjdCA9ICpzaGFwZTFpdDsKICAgICAgICAgICAgfQoKCgoKCiAgICAg
ICAgICAgIGVsc2UgaWYgKCggc2hhcGUxaXQgIT0gb1NoYXBlMUNvcHkuYmVnaW4oKSkgJiYKICAg
ICAgICAgICAgICAgICAgKCBzaGFwZTJpdCAhPSBvU2hhcGUyQ29weS5iZWdpbigpKSAmJgogICAg
ICAgICAgICAgICAgICAoIFZDTEludGVyc2VjdFByb3AoICooIHNoYXBlMWl0IC0gMSApLCAqc2hh
cGUxaXQsICooIHNoYXBlMml0IC0gMSApLCAqc2hhcGUyaXQsIDAuMDAwMDAwMDAwMDEgKSkpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGJJbnRlcnNlY3QgPSB0cnVlOwogICAgICAgICAg
ICAgICAgQ1ZDTFBvaW50IHNJbnRlcnNlY3Q7CiAgICAgICAgICAgICAgICBiSW50ZXJzZWN0ID0g
VkNMSW50ZXJzZWN0aW9uKCAqKCBzaGFwZTFpdCAtIDEgKSwgKnNoYXBlMWl0LCAqKCBzaGFwZTJp
dCAtIDEgKSwgKnNoYXBlMml0LCBzSW50ZXJzZWN0LCAwLjAwMDAwMDAwMDAxICk7CiAgICAgICAg
ICAgICAgICBvSW50ZXJzZWN0ID0gc0ludGVyc2VjdDsKICAgICAgICAgICAgICAgIChJTVBDaGVj
a0V4cHIoImJJbnRlcnNlY3QiLCAidmVjY2xlYW4uY3BwIiwgNDI4MiksIChiSW50ZXJzZWN0KSA/
ICgwKSA6IF9JTVBBc3NlcnQoImJJbnRlcnNlY3QiLCJ2ZWNjbGVhbi5jcHAiLDQyODIpKTsKICAg
ICAgICAgICAgfQoKCgoKICAgICAgICAgICAgZWxzZSBpZiAoKCBzaGFwZTFpdCAhPSBvU2hhcGUx
Q29weS5iZWdpbigpKSAmJgogICAgICAgICAgICAgICAgICggVkNMRXVjbGlkaWFuRGlzdGFuY2Uo
ICooIHNoYXBlMWl0IC0gMSApLCAqc2hhcGUxaXQsICpzaGFwZTJpdCwgZGZEaXN0LCBvQ2xvc2Ug
KSkgJiYKICAgICAgICAgICAgICAgICAoIGRmRGlzdCA8PSBkZlRvdGFsVG9sICkpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIG9JbnRlcnNlY3QgPSBWQ0xJbnRlcnBvbGF0ZVBvaW50KCBv
Q2xvc2UsICpzaGFwZTJpdCwgZGZUb3RhbFRvbCwgZGZUb2wxICk7CiAgICAgICAgICAgICAgICBp
ZiAob0ludGVyc2VjdCA+PSBvTWluQ2xvc2UpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgYkludGVyc2VjdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgKnNoYXBlMml0
ID0gb0ludGVyc2VjdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCgoKICAgICAg
ICAgICAgZWxzZSBpZiAoKCBzaGFwZTJpdCAhPSBvU2hhcGUyQ29weS5iZWdpbigpKSAmJgogICAg
ICAgICAgICAgICAgICggVkNMRXVjbGlkaWFuRGlzdGFuY2UoICooIHNoYXBlMml0IC0gMSApLCAq
c2hhcGUyaXQsICpzaGFwZTFpdCwgZGZEaXN0LCBvQ2xvc2UgKSkgJiYKICAgICAgICAgICAgICAg
ICAoIGRmRGlzdCA8PSBkZlRvdGFsVG9sICkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IG9JbnRlcnNlY3QgPSBWQ0xJbnRlcnBvbGF0ZVBvaW50KCBvQ2xvc2UsICpzaGFwZTFpdCwgZGZU
b3RhbFRvbCwgZGZUb2wyICk7CiAgICAgICAgICAgICAgICBpZiAob0ludGVyc2VjdCA+PSBvTWlu
Q2xvc2UpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYkludGVyc2VjdCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgKnNoYXBlMWl0ID0gb0ludGVyc2VjdDsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgaWYgKGJJbnRlcnNlY3Qp
CiAgICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgICBpZiAoZGVyaXZlZFNoYXBlLnNpemUo
KSA9PSAwKQogICAgICAgICAgICAgICAgewoKCgoKICAgICAgICAgICAgICAgICAgICBvTmV3U2hh
cGUxLnB1c2hfYmFjayggb0ludGVyc2VjdCApOwogICAgICAgICAgICAgICAgICAgIFZDTFVuaXF1
ZVZlcnRleCggb05ld1NoYXBlMSApOwogICAgICAgICAgICAgICAgICAgIGlmIChvTmV3U2hhcGUx
LnNpemUoKSA+IDEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICBzaGFwZTFMaXN0T3V0LnB1c2hfYmFjayggb05ld1NoYXBlMSApOwogICAgICAgICAgICAgICAg
ICAgIH0KCgoKCiAgICAgICAgICAgICAgICAgICAgb05ld1NoYXBlMi5wdXNoX2JhY2soIG9JbnRl
cnNlY3QgKTsKICAgICAgICAgICAgICAgICAgICBWQ0xVbmlxdWVWZXJ0ZXgoIG9OZXdTaGFwZTIg
KTsKICAgICAgICAgICAgICAgICAgICBpZiAob05ld1NoYXBlMi5zaXplKCkgPiAxKQogICAgICAg
ICAgICAgICAgICAgICAgICBzaGFwZTJMaXN0T3V0LnB1c2hfYmFjayggb05ld1NoYXBlMiApOwog
ICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgICAgIGRlcml2ZWRTaGFwZS5wdXNoX2Jh
Y2soIG9JbnRlcnNlY3QgKTsKCgoKCgogICAgICAgICAgICAgICAgb05ld1NoYXBlMS5jbGVhcigp
OwogICAgICAgICAgICAgICAgb05ld1NoYXBlMS5wdXNoX2JhY2soIG9JbnRlcnNlY3QgKTsKCiAg
ICAgICAgICAgICAgICBvTmV3U2hhcGUyLmNsZWFyKCk7CiAgICAgICAgICAgICAgICBvTmV3U2hh
cGUyLnB1c2hfYmFjayggb0ludGVyc2VjdCApOwogICAgICAgICAgICB9CgoKCgogICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgICBWQ0xVbmlxdWVWZXJ0ZXgo
IGRlcml2ZWRTaGFwZSApOwogICAgICAgICAgICAgICAgaWYgKGRlcml2ZWRTaGFwZS5zaXplKCkg
PiAxKQogICAgICAgICAgICAgICAgewoKCgogICAgICAgICAgICAgICAgICAgIGRlcml2ZWRTaGFw
ZUxpc3RPdXQucHVzaF9iYWNrKCBkZXJpdmVkU2hhcGUgKTsKICAgICAgICAgICAgICAgIH0KCgoK
CiAgICAgICAgICAgICAgICBkZXJpdmVkU2hhcGUuY2xlYXIoKTsKICAgICAgICAgICAgfQoKCgoK
CiAgICAgICAgICAgIGlmICgqc2hhcGUxaXQgPCAqc2hhcGUyaXQpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIG9OZXdTaGFwZTEucHVzaF9iYWNrKCAqc2hhcGUxaXQgKTsKICAgICAgICAg
ICAgICAgIHNoYXBlMWl0Kys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKCpz
aGFwZTFpdCA+ICpzaGFwZTJpdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgb05ld1No
YXBlMi5wdXNoX2JhY2soICpzaGFwZTJpdCApOwogICAgICAgICAgICAgICAgc2hhcGUyaXQrKzsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBvTmV3U2hhcGUxLnB1c2hfYmFjayggKnNoYXBlMWl0ICk7CiAgICAgICAgICAgICAgICBv
TmV3U2hhcGUyLnB1c2hfYmFjayggKnNoYXBlMml0ICk7CiAgICAgICAgICAgICAgICBzaGFwZTFp
dCsrOwogICAgICAgICAgICAgICAgc2hhcGUyaXQrKzsKICAgICAgICAgICAgfQogICAgICAgIH0K
CgoKCiAgICAgICAgY29weSggc2hhcGUxaXQsIG9TaGFwZTFDb3B5LmVuZCgpLCBiYWNrX2luc2Vy
dGVyKCBvTmV3U2hhcGUxICkpOwoKCgoKICAgICAgICBWQ0xVbmlxdWVWZXJ0ZXgoIG9OZXdTaGFw
ZTEgKTsKCgoKCiAgICAgICAgaWYgKG9OZXdTaGFwZTEuc2l6ZSgpID4gMSkKICAgICAgICB7CiAg
ICAgICAgICAgIHNoYXBlMUxpc3RPdXQucHVzaF9iYWNrKCBvTmV3U2hhcGUxICk7CiAgICAgICAg
fQoKCgoKICAgICAgICBjb3B5KCBzaGFwZTJpdCwgb1NoYXBlMkNvcHkuZW5kKCksIGJhY2tfaW5z
ZXJ0ZXIoIG9OZXdTaGFwZTIgKSk7CgoKCgogICAgICAgIFZDTFVuaXF1ZVZlcnRleCggb05ld1No
YXBlMiApOwoKCgoKICAgICAgICBpZiAob05ld1NoYXBlMi5zaXplKCkgPiAxKQogICAgICAgIHsK
ICAgICAgICAgICAgc2hhcGUyTGlzdE91dC5wdXNoX2JhY2soIG9OZXdTaGFwZTIgKTsKICAgICAg
ICB9CgoKCgogICAgICAgIHJldHVybiAoKCBzaGFwZTFMaXN0T3V0LnNpemUoKSA+IDEgKSB8fCAo
IHNoYXBlMkxpc3RPdXQuc2l6ZSgpID4gMSApIHx8ICggZGVyaXZlZFNoYXBlTGlzdE91dC5zaXpl
KCkgPiAwICkpOwp9CiMgNDQ3MiAidmVjY2xlYW4uY3BwIgpkb3VibGUgVkNMRGlzdGFuY2VGcm9t
KCBDVkNMUG9pbnQgJm9DbG9zZXN0LCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3Rw
ICZvU2hhcGUsIGNvbnN0IENWQ0xQb2ludCAmZnJvbVdoZXJlICkKewoKICAgICAgICB1bnNpZ25l
ZCBpbnQgblNpemUgPSBvU2hhcGUuc2l6ZSgpOwogICAgICAgIChJTVBDaGVja0V4cHIoIm5TaXpl
ID4gMCIsICJ2ZWNjbGVhbi5jcHAiLCA0NDc2KSwgKG5TaXplID4gMCkgPyAoMCkgOiBfSU1QQXNz
ZXJ0KCJuU2l6ZSA+IDAiLCJ2ZWNjbGVhbi5jcHAiLDQ0NzYpKTsKCiAgICAgICAgZG91YmxlIGRm
RGlzdCA9IChzcXJ0KCgoZnJvbVdoZXJlKS54IC0gKG9TaGFwZVsgMCBdKS54KSAqICgoZnJvbVdo
ZXJlKS54IC0gKG9TaGFwZVsgMCBdKS54KSArICgoZnJvbVdoZXJlKS55IC0gKG9TaGFwZVsgMCBd
KS55KSAqICgoZnJvbVdoZXJlKS55IC0gKG9TaGFwZVsgMCBdKS55KSkpOwogICAgICAgIG9DbG9z
ZXN0ID0gb1NoYXBlWyAwIF07CgogICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwg
blNpemU7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGRvdWJsZSBkZk5ld0Rpc3QgPSAoc3Fy
dCgoKGZyb21XaGVyZSkueCAtIChvU2hhcGVbIGkgXSkueCkgKiAoKGZyb21XaGVyZSkueCAtIChv
U2hhcGVbIGkgXSkueCkgKyAoKGZyb21XaGVyZSkueSAtIChvU2hhcGVbIGkgXSkueSkgKiAoKGZy
b21XaGVyZSkueSAtIChvU2hhcGVbIGkgXSkueSkpKTsKCgoKCiAgICAgICAgICAgIGlmIChkZk5l
d0Rpc3QgPCBkZkRpc3QpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRmRGlzdCA9IGRm
TmV3RGlzdDsKICAgICAgICAgICAgICAgIG9DbG9zZXN0ID0gb1NoYXBlWyBpIF07CiAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgIENWQ0xQb2ludCBvTmV3UG9pbnQ7CiAgICAgICAgICAgIGlmIChW
Q0xFdWNsaWRpYW5EaXN0YW5jZSggb1NoYXBlWyBpIC0gMSBdLCBvU2hhcGVbIGkgXSwgZnJvbVdo
ZXJlLCBkZk5ld0Rpc3QsIG9OZXdQb2ludCApKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBpZiAoZGZOZXdEaXN0IDwgZGZEaXN0KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIGRmRGlzdCA9IGRmTmV3RGlzdDsKICAgICAgICAgICAgICAgICAgICBvQ2xvc2VzdCA9
IG9OZXdQb2ludDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAg
ICAgICAgcmV0dXJuIGRmRGlzdDsKfQojIDQ1MzAgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMSW50
ZXJzZWN0U2hhcGUoIENWQ0xQb2ludCAmb1doZXJlLAogICAgICAgICAgICAgIGNvbnN0IENWQ0xQ
b2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZTEsCiAgICAgICAgICAgICAgY29uc3QgQ1ZD
TFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb1NoYXBlMiApCnsKICAgICAgICB1bnNpZ25lZCBp
bnQgaTEgPSAxOwogICAgICAgIHVuc2lnbmVkIGludCBpMiA9IDE7CiAgICAgICAgZG91YmxlIGRm
RGlzdCA9IDAuMDsKCiAgICAgICAgdW5zaWduZWQgaW50IG5TaXplMSA9IG9TaGFwZTEuc2l6ZSgp
OwogICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZTIgPSBvU2hhcGUyLnNpemUoKTsKCgoKCiAgICAg
ICAgZm9yICg7OykKICAgICAgICB7CgoKCgogICAgICAgICAgICBpZiAoaTEgPT0gblNpemUxKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVkNMRXVjbGlkaWFuRGlzdGFuY2Uo
IG9TaGFwZTJbIGkyIC0gMSBdLCBvU2hhcGUyWyBpMiBdLCBvU2hhcGUxWyBpMSAtIDEgXSwgZGZE
aXN0LCBvV2hlcmUgKSAmJgogICAgICAgICAgICAgICAgICAgICggZGZEaXN0IDw9IDAuMDAwMDAw
MDAwMDEgKSAmJgogICAgICAgICAgICAgICAgICAgICggIVZDTFBvaW50RXF1YWwoKSAoIG9XaGVy
ZSwgb1NoYXBlMlsgMCBdICkpICYmCiAgICAgICAgICAgICAgICAgICAgKCAhVkNMUG9pbnRFcXVh
bCgpICggb1doZXJlLCBvU2hhcGUyWyBuU2l6ZTIgLSAxIF0gKSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGVsc2UgaWYgKGkyID09IG5TaXplMikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgcmV0dXJuIFZDTEV1Y2xpZGlhbkRpc3RhbmNlKCBvU2hhcGUxWyBpMSAtIDEgXSwgb1No
YXBlMVsgaTEgXSwgb1NoYXBlMlsgaTIgLSAxIF0sIGRmRGlzdCwgb1doZXJlICkgJiYKICAgICAg
ICAgICAgICAgICAgICAoIGRmRGlzdCA8PSAwLjAwMDAwMDAwMDAxICkgJiYKICAgICAgICAgICAg
ICAgICAgICAoICFWQ0xQb2ludEVxdWFsKCkgKCBvV2hlcmUsIG9TaGFwZTFbIDAgXSApKSAmJgog
ICAgICAgICAgICAgICAgICAgICggIVZDTFBvaW50RXF1YWwoKSAoIG9XaGVyZSwgb1NoYXBlMVsg
blNpemUxIC0gMSBdICkpOwogICAgICAgICAgICB9CgoKCgoKICAgICAgICAgICAgZWxzZSBpZiAo
VkNMSW50ZXJzZWN0UHJvcCggb1NoYXBlMVsgaTEgLSAxIF0sIG9TaGFwZTFbIGkxIF0sIG9TaGFw
ZTJbIGkyIC0gMSBdLCBvU2hhcGUyWyBpMiBdLCAwLjAwMDAwMDAwMDAxICkgJiYKICAgICAgICAg
ICAgICAgICBWQ0xJbnRlcnNlY3Rpb24oIG9TaGFwZTFbIGkxIC0gMSBdLCBvU2hhcGUxWyBpMSBd
LCBvU2hhcGUyWyBpMiAtIDEgXSwgb1NoYXBlMlsgaTIgXSwgb1doZXJlLCAwLjAwMDAwMDAwMDAx
ICkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICB9CgoKCgogICAgICAgICAgICBlbHNlIGlmIChWQ0xFdWNsaWRpYW5EaXN0YW5jZSggb1NoYXBl
MVsgaTEgLSAxIF0sIG9TaGFwZTFbIGkxIF0sIG9TaGFwZTJbIGkyIC0gMSBdLCBkZkRpc3QsIG9X
aGVyZSApICYmCiAgICAgICAgICAgICAgICAgKCBkZkRpc3QgPD0gMC4wMDAwMDAwMDAwMSApICYm
CiAgICAgICAgICAgICAgICAgKCAhVkNMUG9pbnRFcXVhbCgpICggb1doZXJlLCBvU2hhcGUxWyAw
IF0gKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICB9CgoKCgogICAgICAgICAgICBlbHNlIGlmIChWQ0xFdWNsaWRpYW5EaXN0YW5jZSggb1No
YXBlMlsgaTIgLSAxIF0sIG9TaGFwZTJbIGkyIF0sIG9TaGFwZTFbIGkxIC0gMSBdLCBkZkRpc3Qs
IG9XaGVyZSApICYmCiAgICAgICAgICAgICAgICAgKCBkZkRpc3QgPD0gMC4wMDAwMDAwMDAwMSAp
ICYmCiAgICAgICAgICAgICAgICAgKCAhVkNMUG9pbnRFcXVhbCgpICggb1doZXJlLCBvU2hhcGUy
WyAwIF0gKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICB9CgoKCgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIGlmIChvU2hhcGUxWyBpMSBdIDwgb1NoYXBlMlsgaTIgXSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBpMSsrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpMisrOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQp9CiMgNDY1MCAidmVjY2xlYW4u
Y3BwIgpkb3VibGUgVkNMQ29tcHV0ZUFuZ2xlKCBjb25zdCBDVkNMUG9pbnQgJnNBLCBjb25zdCBD
VkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDICkKewogICAgICAgIGRvdWJsZSBhdDEg
PSBhdGFuMiggc0EueSAtIHNCLnksIHNBLnggLSBzQi54ICk7CiAgICAgICAgZG91YmxlIGF0MiA9
IGF0YW4yKCBzQy55IC0gc0IueSwgc0MueCAtIHNCLnggKTsKCiAgICAgICAgZG91YmxlIGRmUmV0
dXJuVmFsdWUgPSBmbW9kKCggYXQyIC0gYXQxICkgKyAyICogMy4xNDE1OTI2NTM1ODk3OTMyMzg0
NjI2NDNFMCwgMiAqIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzRTAgKTsKCgoKCgoKICAgICAg
ICBpZiAoVkNMREJMQ29tcCggZGZSZXR1cm5WYWx1ZSwgMi4wICogMy4xNDE1OTI2NTM1ODk3OTMy
Mzg0NjI2NDNFMCwgOCApID09IDApIGRmUmV0dXJuVmFsdWUgPSAwLjA7CiAgICAgICAgZWxzZSBp
ZiAoVkNMREJMQ29tcCggZGZSZXR1cm5WYWx1ZSwgLTIuMCAqIDMuMTQxNTkyNjUzNTg5NzkzMjM4
NDYyNjQzRTAsIDggKSA9PSAwKSBkZlJldHVyblZhbHVlID0gMC4wOwoKICAgICAgICByZXR1cm4g
ZGZSZXR1cm5WYWx1ZTsKfQojIDQ2OTAgInZlY2NsZWFuLmNwcCIKdm9pZCBWQ0xCcmVha0F0UG9p
bnRzKCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cCAmb1NoYXBlcywgY29uc3QgQ1ZD
TFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb1NoYXBlLCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVj
dG9yX3RwIG9CcmVha1BvaW50cyApCnsKICAgICAgICBvU2hhcGVzLmNsZWFyKCk7CgogICAgICAg
IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb01lcmdlU2hhcGUsIG9OZXdTaGFwZTsKCgoK
CgogICAgICAgIG9NZXJnZVNoYXBlID0gb1NoYXBlOwogICAgICAgIGNvcHkoIG9CcmVha1BvaW50
cy5iZWdpbigpLCBvQnJlYWtQb2ludHMuZW5kKCksIGJhY2tfaW5zZXJ0ZXIoIG9NZXJnZVNoYXBl
ICkpOwoKCgoKCiAgICAgICAgc29ydCggb01lcmdlU2hhcGUuYmVnaW4oKSwgb01lcmdlU2hhcGUu
ZW5kKCkpOwogICAgICAgIFZDTFVuaXF1ZVZlcnRleCggb01lcmdlU2hhcGUgKTsKCgoKCgogICAg
ICAgIHNvcnQoIG9CcmVha1BvaW50cy5iZWdpbigpLCBvQnJlYWtQb2ludHMuZW5kKCkpOwogICAg
ICAgIFZDTFVuaXF1ZVZlcnRleCggb0JyZWFrUG9pbnRzICk7CgoKCgoKICAgICAgICBvQnJlYWtQ
b2ludHMucHVzaF9iYWNrKCBDVkNMUG9pbnQoIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAxLjc5
NzY5MzEzNDg2MjMxNTdFKzMwOCApKTsKCiAgICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb01l
cmdlU2hhcGUuc2l6ZSgpOwogICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBqID0gMDsg
aSA8IG5TaXplOyBpKyspCiAgICAgICAgewoKICAgICAgICAgICAgaWYgKFZDTFBvaW50RXF1YWwo
KSAoIG9NZXJnZVNoYXBlWyBpIF0sIG9CcmVha1BvaW50c1sgaiBdICkpCiAgICAgICAgICAgIHsK
CgoKCiAgICAgICAgICAgICAgICBvTmV3U2hhcGUucHVzaF9iYWNrKCBvQnJlYWtQb2ludHNbIGog
XSApOwoKICAgICAgICAgICAgICAgIGlmIChvTmV3U2hhcGUuc2l6ZSgpID4gMSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBvU2hhcGVzLnB1c2hfYmFjayggb05ld1NoYXBl
ICk7CiAgICAgICAgICAgICAgICB9CgoKCgogICAgICAgICAgICAgICAgb05ld1NoYXBlLmNsZWFy
KCk7CgoKCgogICAgICAgICAgICAgICAgb05ld1NoYXBlLnB1c2hfYmFjayggb0JyZWFrUG9pbnRz
WyBqIF0gKTsKCgoKCgogICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICB9CgogICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG9OZXdTaGFwZS5wdXNoX2Jh
Y2soIG9NZXJnZVNoYXBlWyBpIF0gKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg
aWYgKG9OZXdTaGFwZS5zaXplKCkgPiAxKQogICAgICAgIHsKICAgICAgICAgICAgb1NoYXBlcy5w
dXNoX2JhY2soIG9OZXdTaGFwZSApOwogICAgICAgIH0KfQojIDQ4MDQgInZlY2NsZWFuLmNwcCIK
dHlwZWRlZiBwYWlyPENWQ0xQb2ludCwgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHA6
Oml0ZXJhdG9yPiBQb2ludEhhbmRsZVBhaXI7CnR5cGVkZWYgbXVsdGltYXA8Q1ZDTFBvaW50LCBD
VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cDo6aXRlcmF0b3IsIGxlc3M8Q1ZDTFBvaW50
PiA+IFBvaW50TXVsdGltYXA7CnR5cGVkZWYgbXVsdGltYXA8Q1ZDTFBvaW50LCBDVkNMUG9pbnQ6
OlZDTFBvaW50VmVjdG9yTGlzdF90cDo6aXRlcmF0b3IsIGxlc3M8Q1ZDTFBvaW50PiA+OjppdGVy
YXRvciBQb2ludE11bHRpbWFwSXRlcjsKc3RhdGljIHZvaWQgR3Jvd1BvaW50VmVjdG9yKCBQb2lu
dE11bHRpbWFwSXRlciAmUE1NSXRlciwgUG9pbnRNdWx0aW1hcCAmb1BvaW50c01hcCwgQ1ZDTFBv
aW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb05ld1BvaW50VmVjdG9yLCBDVkNMUG9pbnQ6OlZDTFBv
aW50VmVjdG9yX3RwICZpbnRlcnNlY3Rpb25zLCBUQm9vbCBBZGRUb0Zyb250ICk7CiMgNDg1NSAi
dmVjY2xlYW4uY3BwIgpDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cCBWQ0xDb25jYXRD
aGFpbnMoIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwICZvU2hhcGVzLCBDVkNMUG9p
bnQ6OlZDTFBvaW50VmVjdG9yX3RwICZpbnRlcnNlY3Rpb25zICkKewoKICAgICAgICBQb2ludE11
bHRpbWFwIG9Qb2ludHNNYXA7CiAgICAgICAgUG9pbnRIYW5kbGVQYWlyIG9UZW1wUGFpcjsKICAg
ICAgICBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cCBvT3V0cHV0UFZzOwogICAgICAg
IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjppdGVyYXRvciBvQ3VycmVudFBvaW50
VmVjdG9yOwogICAgICAgIENWQ0xQb2ludCBvQ3VycmVudFBvaW50OwojIDQ4NzEgInZlY2NsZWFu
LmNwcCIKICAgICAgICBmb3IgKG9DdXJyZW50UG9pbnRWZWN0b3IgPSBvU2hhcGVzLmJlZ2luKCk7
IG9DdXJyZW50UG9pbnRWZWN0b3IgIT0gb1NoYXBlcy5lbmQoKTsgb0N1cnJlbnRQb2ludFZlY3Rv
cisrKQogICAgICAgIHsKICAgICAgICAgICAgb1RlbXBQYWlyLmZpcnN0ID0gKCAqKCAqb0N1cnJl
bnRQb2ludFZlY3RvciApLmJlZ2luKCkpOwogICAgICAgICAgICBvVGVtcFBhaXIuc2Vjb25kID0g
b0N1cnJlbnRQb2ludFZlY3RvcjsKICAgICAgICAgICAgb1BvaW50c01hcC5pbnNlcnQoIG9UZW1w
UGFpciApOwogICAgICAgICAgICBvVGVtcFBhaXIuZmlyc3QgPSAoICooICpvQ3VycmVudFBvaW50
VmVjdG9yICkucmJlZ2luKCkpOwogICAgICAgICAgICBvUG9pbnRzTWFwLmluc2VydCggb1RlbXBQ
YWlyICk7CiAgICAgICAgfQoKCgoKCgogICAgICAgIHdoaWxlICghb1BvaW50c01hcC5lbXB0eSgp
KQogICAgICAgIHsKIyA0ODk2ICJ2ZWNjbGVhbi5jcHAiCiAgICAgICAgICAgIFRCb29sIGJBZGRU
b0Zyb250ID0gZmFsc2U7CiAgICAgICAgICAgIFRCb29sIGJNaWRkbGVPZkxpbmUgPSBmYWxzZTsK
CgoKCiAgICAgICAgICAgIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb05ld1BvaW50VmVj
dG9yOwoKCgoKCiAgICAgICAgICAgIFBvaW50TXVsdGltYXBJdGVyIFBNTUl0ZXIgPSBvUG9pbnRz
TWFwLmJlZ2luKCk7CiAgICAgICAgICAgIG9DdXJyZW50UG9pbnQgPSAoICpQTU1JdGVyICkuZmly
c3Q7CgoKCgoKICAgICAgICAgICAgaWYgKG9Qb2ludHNNYXAuc2l6ZSgpID4gMSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgUG9pbnRNdWx0aW1hcEl0ZXIgUE1NSXRlclNlY29uZCA9IFBN
TUl0ZXI7CgoKCiAgICAgICAgICAgICAgICBQTU1JdGVyU2Vjb25kKys7CiAgICAgICAgICAgICAg
ICAoSU1QQ2hlY2tFeHByKCJQTU1JdGVyICE9IFBNTUl0ZXJTZWNvbmQiLCAidmVjY2xlYW4uY3Bw
IiwgNDkyMiksIChQTU1JdGVyICE9IFBNTUl0ZXJTZWNvbmQpID8gKDApIDogX0lNUEFzc2VydCgi
UE1NSXRlciAhPSBQTU1JdGVyU2Vjb25kIiwidmVjY2xlYW4uY3BwIiw0OTIyKSk7CiMgNDkzMiAi
dmVjY2xlYW4uY3BwIgogICAgICAgICAgICAgICAgaWYgKCggKlBNTUl0ZXJTZWNvbmQgKS5maXJz
dCA9PSBvQ3VycmVudFBvaW50KQogICAgICAgICAgICAgICAgICAgIGJNaWRkbGVPZkxpbmUgPSB0
cnVlOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGJNaWRkbGVPZkxp
bmUgPSBmYWxzZTsKCgoKCgogICAgICAgICAgICAgICAgaWYgKG9Qb2ludHNNYXAuc2l6ZSgpID4g
MikKICAgICAgICAgICAgICAgIHsKCgoKICAgICAgICAgICAgICAgICAgICBQTU1JdGVyU2Vjb25k
Kys7CiMgNDk1NiAidmVjY2xlYW4uY3BwIgogICAgICAgICAgICAgICAgICAgIGlmICgoICpQTU1J
dGVyU2Vjb25kICkuZmlyc3QgPT0gb0N1cnJlbnRQb2ludCkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbnMucHVzaF9iYWNrKCBvQ3VycmVu
dFBvaW50ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJNaWRkbGVPZkxpbmUgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgoK
CgogICAgICAgICAgICBpZiAoKCAqKCggKlBNTUl0ZXIgKS5zZWNvbmQgKSlbIDAgXSA9PSBvQ3Vy
cmVudFBvaW50KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBiQWRkVG9Gcm9udCA9IGZh
bHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgYkFkZFRvRnJvbnQgPSB0cnVlOwogICAgICAgICAgICB9CgoKCgoKICAgICAgICAg
ICAgR3Jvd1BvaW50VmVjdG9yKCBQTU1JdGVyLCBvUG9pbnRzTWFwLCBvTmV3UG9pbnRWZWN0b3Is
IGludGVyc2VjdGlvbnMsIGJBZGRUb0Zyb250ICk7CgoKCgoKCgogICAgICAgICAgICBpZiAoKCBi
TWlkZGxlT2ZMaW5lICkgJiYgKCAhb1BvaW50c01hcC5lbXB0eSgpKSkKICAgICAgICAgICAgewoj
IDQ5OTkgInZlY2NsZWFuLmNwcCIKICAgICAgICAgICAgICAgIFBvaW50TXVsdGltYXBJdGVyIFBN
TUl0ZXIgPSBvUG9pbnRzTWFwLmJlZ2luKCk7CiAgICAgICAgICAgICAgICBpZiAob0N1cnJlbnRQ
b2ludCA9PSAoICpQTU1JdGVyICkuZmlyc3QpCiAgICAgICAgICAgICAgICB7CgoKCgoKCgogICAg
ICAgICAgICAgICAgICAgIEdyb3dQb2ludFZlY3RvciggUE1NSXRlciwgb1BvaW50c01hcCwgb05l
d1BvaW50VmVjdG9yLCBpbnRlcnNlY3Rpb25zLCAhYkFkZFRvRnJvbnQgKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgVkNMVW5pcXVlVmVydGV4KCBvTmV3
UG9pbnRWZWN0b3IgKTsKICAgICAgICAgICAgb091dHB1dFBWcy5wdXNoX2JhY2soIG9OZXdQb2lu
dFZlY3RvciApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb091dHB1dFBWczsKfQojIDUwNTIg
InZlY2NsZWFuLmNwcCIKc3RhdGljIHZvaWQgR3Jvd1BvaW50VmVjdG9yKCBQb2ludE11bHRpbWFw
SXRlciAmUE1NSXRlciwgUG9pbnRNdWx0aW1hcCAmb1BvaW50c01hcCwgQ1ZDTFBvaW50OjpWQ0xQ
b2ludFZlY3Rvcl90cCAmb05ld1BvaW50VmVjdG9yLCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9y
X3RwICZpbnRlcnNlY3Rpb25zLCBUQm9vbCBBZGRUb0Zyb250ICkKewogICAgICAgIFBvaW50TXVs
dGltYXBJdGVyIG9DdXJyZW50UGFpcjsKICAgICAgICBQb2ludE11bHRpbWFwSXRlciBvTmV4dFBh
aXI7CiAgICAgICAgVEJvb2wgYkRvbmUgPSBmYWxzZTsKCgoKCgogICAgICAgIENWQ0xQb2ludDo6
VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjppdGVyYXRvciBvQ3VycmVudFBvaW50VmVjdG9yID0gKCAq
UE1NSXRlciApLnNlY29uZDsKICAgICAgICBDVkNMUG9pbnQgb0N1cnJlbnRQb2ludCA9ICggKlBN
TUl0ZXIgKS5maXJzdDsKICAgICAgICBvUG9pbnRzTWFwLmVyYXNlKCBQTU1JdGVyICk7CgogICAg
ICAgIGRvCiAgICAgICAgewoKCgoKICAgICAgICAgICAgQ1ZDTFBvaW50IG9PdGhlckVuZFBvaW50
ID0gKCgob0N1cnJlbnRQb2ludCkgPT0gKCggKm9DdXJyZW50UG9pbnRWZWN0b3IgKVsgMCBdKSkg
PyAoKCAqb0N1cnJlbnRQb2ludFZlY3RvciApWyAoICpvQ3VycmVudFBvaW50VmVjdG9yICkuc2l6
ZSgpIC0gMSBdKSA6ICgoICpvQ3VycmVudFBvaW50VmVjdG9yIClbIDAgXSkpOwoKCgoKCiAgICAg
ICAgICAgIGlmIChBZGRUb0Zyb250KQogICAgICAgICAgICAgICAgb05ld1BvaW50VmVjdG9yLmlu
c2VydCggb05ld1BvaW50VmVjdG9yLmJlZ2luKCksICggKm9DdXJyZW50UG9pbnRWZWN0b3IgKS5i
ZWdpbigpLCAoICpvQ3VycmVudFBvaW50VmVjdG9yICkuZW5kKCkpOwogICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICBvTmV3UG9pbnRWZWN0b3IuaW5zZXJ0KCBvTmV3UG9pbnRWZWN0b3Iu
ZW5kKCksICggKm9DdXJyZW50UG9pbnRWZWN0b3IgKS5iZWdpbigpLCAoICpvQ3VycmVudFBvaW50
VmVjdG9yICkuZW5kKCkpOwoKCgoKCgoKICAgICAgICAgICAgcGFpcjxQb2ludE11bHRpbWFwSXRl
ciwgUG9pbnRNdWx0aW1hcEl0ZXI+IHJhbmdlID0gb1BvaW50c01hcC5lcXVhbF9yYW5nZSggb090
aGVyRW5kUG9pbnQgKTsKICAgICAgICAgICAgKElNUENoZWNrRXhwcigicmFuZ2UuZmlyc3QgIT0g
b1BvaW50c01hcC5lbmQoKSIsICJ2ZWNjbGVhbi5jcHAiLCA1MDkwKSwgKHJhbmdlLmZpcnN0ICE9
IG9Qb2ludHNNYXAuZW5kKCkpID8gKDApIDogX0lNUEFzc2VydCgicmFuZ2UuZmlyc3QgIT0gb1Bv
aW50c01hcC5lbmQoKSIsInZlY2NsZWFuLmNwcCIsNTA5MCkpOwoKICAgICAgICAgICAgaW50IG5O
dW1iZXJPZk9jY3VyYW5jZXMgPSAwOwogICAgICAgICAgICBvTmV4dFBhaXIgPSBvUG9pbnRzTWFw
LmVuZCgpOwogICAgICAgICAgICB3aGlsZSAoKCByYW5nZS5maXJzdCAhPSBvUG9pbnRzTWFwLmVu
ZCgpKSAmJiAoIHJhbmdlLmZpcnN0ICE9IHJhbmdlLnNlY29uZCApKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBuTnVtYmVyT2ZPY2N1cmFuY2VzKys7CgoKCgoKCiAgICAgICAgICAgICAg
ICBpZiAoKCAqcmFuZ2UuZmlyc3QgKS5zZWNvbmQgPT0gb0N1cnJlbnRQb2ludFZlY3RvcikKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBvQ3VycmVudFBhaXIgPSByYW5nZS5m
aXJzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICBvTmV4dFBhaXIgPSByYW5nZS5maXJzdDsKICAgICAg
ICAgICAgICAgIH0KCgoKCiAgICAgICAgICAgICAgICByYW5nZS5maXJzdCsrOwogICAgICAgICAg
ICB9CgoKCgoKICAgICAgICAgICAgaWYgKGZpbmQoIGludGVyc2VjdGlvbnMuYmVnaW4oKSwgaW50
ZXJzZWN0aW9ucy5lbmQoKSwgb090aGVyRW5kUG9pbnQgKSAhPSBpbnRlcnNlY3Rpb25zLmVuZCgp
KQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgb05leHRQYWlyID0gb1BvaW50c01hcC5l
bmQoKTsKICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgZWxzZSBpZiAobk51bWJlck9mT2Nj
dXJhbmNlcyA+IDIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbnMu
cHVzaF9iYWNrKCBvT3RoZXJFbmRQb2ludCApOwoKICAgICAgICAgICAgICAgIG9OZXh0UGFpciA9
IG9Qb2ludHNNYXAuZW5kKCk7CiAgICAgICAgICAgIH0KCgoKCgogICAgICAgICAgICBpZiAoKCBv
TmV4dFBhaXIgIT0gb1BvaW50c01hcC5lbmQoKSkgJiYgKCggKm9OZXh0UGFpciApLmZpcnN0ID09
IG9PdGhlckVuZFBvaW50ICkpCiAgICAgICAgICAgICAgICBiRG9uZSA9IGZhbHNlOwogICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICBiRG9uZSA9IHRydWU7CgoKCgoKCiAgICAgICAgICAg
IG9Qb2ludHNNYXAuZXJhc2UoIG9DdXJyZW50UGFpciApOwoKICAgICAgICAgICAgaWYgKCFiRG9u
ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKElNUENoZWNrRXhwcigiIW9Qb2ludHNN
YXAuZW1wdHkoKSIsICJ2ZWNjbGVhbi5jcHAiLCA1MTU2KSwgKCFvUG9pbnRzTWFwLmVtcHR5KCkp
ID8gKDApIDogX0lNUEFzc2VydCgiIW9Qb2ludHNNYXAuZW1wdHkoKSIsInZlY2NsZWFuLmNwcCIs
NTE1NikpOwoKCgoKCgoKICAgICAgICAgICAgICAgIG9OZXh0UGFpciA9IG9Qb2ludHNNYXAubG93
ZXJfYm91bmQoIG9PdGhlckVuZFBvaW50ICk7CgoKCgoKCiAgICAgICAgICAgICAgICBvQ3VycmVu
dFBvaW50ID0gKCAqb05leHRQYWlyICkuZmlyc3Q7CiAgICAgICAgICAgICAgICBvQ3VycmVudFBv
aW50VmVjdG9yID0gKCAqb05leHRQYWlyICkuc2Vjb25kOwogICAgICAgICAgICAgICAgb1BvaW50
c01hcC5lcmFzZSggb05leHRQYWlyICk7CgogICAgICAgICAgICAgICAgKElNUENoZWNrRXhwcigi
IW9Qb2ludHNNYXAuZW1wdHkoKSIsICJ2ZWNjbGVhbi5jcHAiLCA1MTc1KSwgKCFvUG9pbnRzTWFw
LmVtcHR5KCkpID8gKDApIDogX0lNUEFzc2VydCgiIW9Qb2ludHNNYXAuZW1wdHkoKSIsInZlY2Ns
ZWFuLmNwcCIsNTE3NSkpOwoKICAgICAgICAgICAgICAgIGlmIChvUG9pbnRzTWFwLnNpemUoKSA9
PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGJEb25lID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9IHdoaWxlICghYkRvbmUp
Owp9CiMgNTIwMSAidmVjY2xlYW4uY3BwIgpUQm9vbCBWQ0xJbnNlcnRDaGFpbkludG9DaGFpbkxp
c3QoIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgJnN0bENoYWluVG9JbnNlcnQsIENWQ0xQ
b2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjppdGVyYXRvciBpU3RhcnRWZWN0b3IsIENWQ0xQ
b2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjppdGVyYXRvciBpRW5kVmVjdG9yICkKewogICAg
ICAgIGlmIChpU3RhcnRWZWN0b3IgPT0gaUVuZFZlY3RvcikgcmV0dXJuIDA7CgoKCgoKICAgICAg
ICAoSU1QQ2hlY2tFeHByKCJzdGxDaGFpblRvSW5zZXJ0LnNpemUoKSA+IDEiLCAidmVjY2xlYW4u
Y3BwIiwgNTIwOSksIChzdGxDaGFpblRvSW5zZXJ0LnNpemUoKSA+IDEpID8gKDApIDogX0lNUEFz
c2VydCgic3RsQ2hhaW5Ub0luc2VydC5zaXplKCkgPiAxIiwidmVjY2xlYW4uY3BwIiw1MjA5KSk7
CiAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHA6Oml0ZXJhdG9yIFNoYXBl
SXRlcjsKICAgICAgICBmb3IgKFNoYXBlSXRlciA9IGlTdGFydFZlY3RvcjsKICAgICAgICAgU2hh
cGVJdGVyICE9IGlFbmRWZWN0b3I7CiAgICAgICAgIFNoYXBlSXRlcisrKQogICAgICAgIHsKCgoK
CgogICAgICAgICAgICBpZiAoKiggU2hhcGVJdGVyLT5lbmQoKSAtIDEgKSA9PSAqc3RsQ2hhaW5U
b0luc2VydC5iZWdpbigpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDVkNMUG9pbnQ6
OlZDTFBvaW50VmVjdG9yX3RwOjppdGVyYXRvciBWZXJ0ZXhJdGVyID0gc3RsQ2hhaW5Ub0luc2Vy
dC5iZWdpbigpOwogICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgIHsKCgoKCiAgICAg
ICAgICAgICAgICAgICAgVmVydGV4SXRlcisrOwogICAgICAgICAgICAgICAgICAgIFNoYXBlSXRl
ci0+cHVzaF9iYWNrKCAqVmVydGV4SXRlciApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgd2hpbGUgKFZlcnRleEl0ZXIgIT0gc3RsQ2hhaW5Ub0luc2VydC5lbmQoKSAtIDEpOwog
ICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KCgoKCgogICAgICAgICAgICBl
bHNlIGlmICgqKCBTaGFwZUl0ZXItPmVuZCgpIC0gMSApID09ICooIHN0bENoYWluVG9JbnNlcnQu
ZW5kKCkgLSAxICkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENWQ0xQb2ludDo6VkNM
UG9pbnRWZWN0b3JfdHA6Oml0ZXJhdG9yIFZlcnRleEl0ZXI7CiAgICAgICAgICAgICAgICBWZXJ0
ZXhJdGVyID0gc3RsQ2hhaW5Ub0luc2VydC5lbmQoKSAtMTsKICAgICAgICAgICAgICAgIGRvCiAg
ICAgICAgICAgICAgICB7CgoKCgogICAgICAgICAgICAgICAgICAgIFZlcnRleEl0ZXItLTsKICAg
ICAgICAgICAgICAgICAgICBTaGFwZUl0ZXItPnB1c2hfYmFjayggKlZlcnRleEl0ZXIgKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlIChWZXJ0ZXhJdGVyICE9IHN0bENo
YWluVG9JbnNlcnQuYmVnaW4oKSk7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAg
ICAgfQoKCgoKCiAgICAgICAgICAgIGVsc2UgaWYgKCpTaGFwZUl0ZXItPmJlZ2luKCkgPT0gKigg
c3RsQ2hhaW5Ub0luc2VydC5lbmQoKSAtIDEgKSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cDo6aXRlcmF0b3IgVmVydGV4SXRlciA9IHN0
bENoYWluVG9JbnNlcnQuZW5kKCk7CgoKCgogICAgICAgICAgICAgICAgVmVydGV4SXRlciA9IFZl
cnRleEl0ZXIgLSAxOwoKCgoKICAgICAgICAgICAgICAgIFNoYXBlSXRlci0+aW5zZXJ0KCBTaGFw
ZUl0ZXItPmJlZ2luKCksIHN0bENoYWluVG9JbnNlcnQuYmVnaW4oKSwgVmVydGV4SXRlciApOwog
ICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KCgoKCgoKICAgICAgICAgICAg
ZWxzZSBpZiAoKlNoYXBlSXRlci0+YmVnaW4oKSA9PSAqc3RsQ2hhaW5Ub0luc2VydC5iZWdpbigp
KQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICBDVkNMUG9pbnQgb0ludmFsaWRQb2lu
dCggLTEuMCwgLTEuMCwgLTEuMCApOwoKICAgICAgICAgICAgICAgIGludDMyIG4zMk51bWJlck9m
UG9pbnRzVG9JbnNlcnQgPSBzdGxDaGFpblRvSW5zZXJ0LnNpemUoKSAtIDE7CgoKCgoKCiAgICAg
ICAgICAgICAgICBTaGFwZUl0ZXItPmluc2VydCggU2hhcGVJdGVyLT5iZWdpbigpLCBuMzJOdW1i
ZXJPZlBvaW50c1RvSW5zZXJ0LCBvSW52YWxpZFBvaW50ICk7CgoKCiAgICAgICAgICAgICAgICBD
VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwOjppdGVyYXRvciBTb3VyY2VWZXJ0ZXhJdGVyID0g
c3RsQ2hhaW5Ub0luc2VydC5lbmQoKSAtIDE7CgoKCiAgICAgICAgICAgICAgICBDVkNMUG9pbnQ6
OlZDTFBvaW50VmVjdG9yX3RwOjppdGVyYXRvciBUYXJnZXRWZXJ0ZXhJdGVyID0gU2hhcGVJdGVy
LT5iZWdpbigpOwoKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjMyTnVtYmVy
T2ZQb2ludHNUb0luc2VydDsgaSsrKQogICAgICAgICAgICAgICAgewoKCgogICAgICAgICAgICAg
ICAgICAgICpUYXJnZXRWZXJ0ZXhJdGVyID0gKlNvdXJjZVZlcnRleEl0ZXI7CgoKCiAgICAgICAg
ICAgICAgICAgICAgU291cmNlVmVydGV4SXRlci0tOwoKCgogICAgICAgICAgICAgICAgICAgIFRh
cmdldFZlcnRleEl0ZXIrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVy
biAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwp9CgoKCgoKCgpU
Qm9vbCBWQ0xJbnNlcnRDaGFpbkludG9DaGFpbkxpc3QoIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0
b3JfdHAgJnN0bENoYWluVG9JbnNlcnQsIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3Rw
ICZzdGxUYXJnZXRDaGFpbnMgKQp7CiAgICAgICAgaWYgKCFWQ0xJbnNlcnRDaGFpbkludG9DaGFp
bkxpc3QoIHN0bENoYWluVG9JbnNlcnQsIHN0bFRhcmdldENoYWlucy5iZWdpbigpLCBzdGxUYXJn
ZXRDaGFpbnMuZW5kKCkpKQogICAgICAgIHsKCgoKICAgICAgICAgICAgc3RsVGFyZ2V0Q2hhaW5z
LnB1c2hfYmFjayggc3RsQ2hhaW5Ub0luc2VydCApOwogICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICB9CiAgICAgICAgZWxzZSByZXR1cm4gMTsKfQojIDUzNjIgInZlY2NsZWFuLmNwcCIKVEJv
b2wgVkNMQ29tcGFjdENoYWlucyggQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgJnN0
bFZlY3Rvck9mQ2hhaW5zICkKewogICAgICAgIGlmIChzdGxWZWN0b3JPZkNoYWlucy5zaXplKCkg
PCAyKSByZXR1cm4gMDsKICAgICAgICBUQm9vbCBiUmV0dXJuVmFsdWUgPSAwOwoKICAgICAgICBD
VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cDo6aXRlcmF0b3IgU2hhcGVJdGVyOwogICAg
ICAgIFNoYXBlSXRlciA9IHN0bFZlY3Rvck9mQ2hhaW5zLmVuZCgpIC0xOwoKICAgICAgICBkbwog
ICAgICAgIHsKICAgICAgICAgICAgaWYgKFZDTEluc2VydENoYWluSW50b0NoYWluTGlzdCggKlNo
YXBlSXRlciwgc3RsVmVjdG9yT2ZDaGFpbnMuYmVnaW4oKSwgU2hhcGVJdGVyICkpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHN0bFZlY3Rvck9mQ2hhaW5zLmVyYXNlKCBTaGFwZUl0ZXIg
KTsKICAgICAgICAgICAgICAgIGJSZXR1cm5WYWx1ZSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgIFNoYXBlSXRlci0tOwoKICAgICAgICB9IHdoaWxlIChTaGFwZUl0ZXIgIT0gc3RsVmVj
dG9yT2ZDaGFpbnMuYmVnaW4oKSk7CiAgICAgICAgcmV0dXJuIGJSZXR1cm5WYWx1ZTsKfQoKCnN0
YXRpYyBUQm9vbCBDb21wYXJlVXBBbmdsZSggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIG5TaGFw
ZTEsIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBuU2hhcGUyICkKewogICAgICAgIENWQ0xTaGFw
ZSAqb1NoYXBlMTsKICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIG9TaGFwZTEs
IG5TaGFwZTEgKTsKICAgICAgICBDVkNMU2hhcGUgKm9TaGFwZTI7CiAgICAgICAgQ1ZDTFNoYXBl
RmFjdG9yeTo6R2V0QVNoYXBlKCBvU2hhcGUyLCBuU2hhcGUyICk7CgogICAgICAgIHJldHVybiAo
VkNMREJMQ29tcCggb1NoYXBlMS0+R2V0VXBBbmdsZSgpLCBvU2hhcGUyLT5HZXRVcEFuZ2xlKCkp
ID09IDEpOwp9CiMgNTQ2MiAidmVjY2xlYW4uY3BwIgp2b2lkIFZDTEludGVyc2VjdCggQ1ZDTE5v
ZGVUYWJsZSAmb05vZGVUYWJsZSwgSU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzLCB2b2lkICpw
UHJvZ3Jlc3NBcmcgKQp7CgoKCgogICAgICAgIENWQ0xTd2VlcCBvU3dlZXA7CgoKCgogICAgICAg
IGlmIChwZm5Qcm9ncmVzcyA9PSBfX251bGwpCiAgICAgICAgICAgIHBmblByb2dyZXNzID0gSU1Q
RHVtbXlQcm9ncmVzczsKCiAgICAgICAgaW50IG4gPSAwOwoKCgoKCgoKICAgICAgICBmb3IgKENW
Q0xOb2RlICogcG9Ob2RlID0gb05vZGVUYWJsZS5GaXJzdCgpOwogICAgICAgICBwb05vZGUgIT0g
X19udWxsOwogICAgICAgICBwb05vZGUgPSBvTm9kZVRhYmxlLk5leHQoICpwb05vZGUgKSkKICAg
ICAgICB7CiMgNTUwMSAidmVjY2xlYW4uY3BwIgogICAgICAgICAgICBpZiAoKytuICUgMjAgPT0g
MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCEoICpwZm5Qcm9ncmVzcyApICgg
KytuIC8gZG91YmxlIChvTm9kZVRhYmxlLkdldE51bU5vZGVzKCkpLCAiSW50ZXJzZWN0aW5nIiwg
cFByb2dyZXNzQXJnICkpCiAgICAgICAgICAgICAgICAgICAgSU1QRXJyb3IoIDMsIDEsICJVc2Vy
IGNhbmNlbGxlZCIgKTsKICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgVEJvb2wgYkludGVy
c2VjdCA9IGZhbHNlOwogICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgbkxlZnQs
IG5SaWdodDsKCiAgICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGJJ
bnRlcnNlY3QgPSBmYWxzZTsKCgoKCiAgICAgICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBl
SWRWZWN0b3JfdHAgb0Rvd25TaGlkcyA9IHBvTm9kZS0+R2V0RG93blNoaWRzKCk7CiAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgblNpemUgPSBvRG93blNoaWRzLnNpemUoKTsKICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgblNpemU7IGorKykKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBvU3dlZXAuUmVtb3ZlKCBvRG93blNoaWRzWyBq
IF0gKTsKICAgICAgICAgICAgICAgIH0KCgoKCgoKICAgICAgICAgICAgICAgIG9Td2VlcC5GaW5k
TmVpZ2hib3VycyggbkxlZnQsIG5SaWdodCwgcG9Ob2RlLT5HZXRQb2ludCgpKTsKCgoKCiAgICAg
ICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgb1VwU2hpZHM7CiAgICAg
ICAgICAgICAgICBvVXBTaGlkcyA9IHBvTm9kZS0+R2V0VXBTaGlkcygpOwoKCgoKCiAgICAgICAg
ICAgICAgICBzb3J0KCBvVXBTaGlkcy5iZWdpbigpLCBvVXBTaGlkcy5lbmQoKSwgQ29tcGFyZVVw
QW5nbGUgKTsKCgoKCgogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9y
X3RwIEw7CiAgICAgICAgICAgICAgICBpZiAobkxlZnQgIT0gVkNMTlVMTFNoYXBlSWQpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTC5wdXNoX2JhY2soIG5MZWZ0ICk7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29weSggb1VwU2hpZHMuYmVnaW4oKSwg
b1VwU2hpZHMuZW5kKCksIGJhY2tfaW5zZXJ0ZXIoIEwgKSk7CgogICAgICAgICAgICAgICAgaWYg
KG5SaWdodCAhPSBWQ0xOVUxMU2hhcGVJZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBMLnB1c2hfYmFjayggblJpZ2h0ICk7CiAgICAgICAgICAgICAgICB9CgoKCgoKICAg
ICAgICAgICAgICAgIG5TaXplID0gTC5zaXplKCk7CiAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMTsgaSA8IG5TaXplOyBpKyspCiAgICAgICAgICAgICAgICB7CgoKCgogICAg
ICAgICAgICAgICAgICAgIENWQ0xTaGFwZSAqcG9MZWZ0OwogICAgICAgICAgICAgICAgICAgIENW
Q0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9MZWZ0LCBMWyBpIC0gMSBdICk7CiAgICAgICAg
ICAgICAgICAgICAgQ1ZDTFNoYXBlICpwb0N1cnI7CiAgICAgICAgICAgICAgICAgICAgQ1ZDTFNo
YXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBwb0N1cnIsIExbIGkgXSApOwoKCgoKICAgICAgICAgICAg
ICAgICAgICBDVkNMUG9pbnQgb1doZXJlOwogICAgICAgICAgICAgICAgICAgIGlmIChwb0xlZnQt
PkludGVyc2VjdHMoIG9XaGVyZSwgKnBvQ3VyciApKQogICAgICAgICAgICAgICAgICAgIHsKCgoK
CgogICAgICAgICAgICAgICAgICAgICAgICBvTm9kZVRhYmxlLlJlbW92ZSggcG9MZWZ0LT5HZXRJ
ZCgpKTsKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZl
Y3Rvcl90cCBvQnJva2VuU2hhcGUgPSBwb0xlZnQtPkJyZWFrQXRQb2ludCggb1doZXJlICk7CgoK
CgogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgblNpemUgPSBvQnJva2VuU2hh
cGUuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBiSW50ZXJzZWN0ID0gblNpemUgPiAx
OwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IG5TaXplOyBqKyspCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvTm9kZVRh
YmxlLkFkZCggb0Jyb2tlblNoYXBlWyBqIF0gKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9Td2VlcC5SZW1vdmUo
IG9Ccm9rZW5TaGFwZVsgaiBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgoK
CgoKICAgICAgICAgICAgICAgICAgICAgICAgb05vZGVUYWJsZS5SZW1vdmUoIHBvQ3Vyci0+R2V0
SWQoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICBvQnJva2VuU2hhcGUgPSBwb0N1cnItPkJy
ZWFrQXRQb2ludCggb1doZXJlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5TaXplID0gb0Jy
b2tlblNoYXBlLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYkludGVyc2VjdCA9IGJJ
bnRlcnNlY3QgfHwgblNpemUgPiAxOwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IG5TaXplOyBq
KyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFvTm9kZVRhYmxlLkFkZCggb0Jyb2tlblNoYXBlWyBqIF0gKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9Td2VlcC5SZW1vdmUoIG9Ccm9rZW5TaGFwZVsgaiBdICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgfSB3aGlsZSAoYkludGVyc2VjdCk7CgoKICAgICAgICAgICAgQ1ZDTFNo
YXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9VcFNoaWRzOwoKCgoKCiAgICAgICAgICAgIG9VcFNo
aWRzID0gcG9Ob2RlLT5HZXRVcFNoaWRzKCk7CgogICAgICAgICAgICBpZiAoKCBvVXBTaGlkcy5z
aXplKCkgPT0gMCApICYmICggbkxlZnQgIT0gVkNMTlVMTFNoYXBlSWQgKSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlICpwb1NoYXBlOwogICAgICAgICAgICAgICAgQ1ZD
TFNoYXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBwb1NoYXBlLCBuTGVmdCApOwogICAgICAgICAgICAg
ICAgaWYgKHBvU2hhcGUtPklzT24oIHBvTm9kZS0+R2V0UG9pbnQoKSkgJiYKICAgICAgICAgICAg
ICAgICggcG9Ob2RlLT5HZXRQb2ludCgpICE9IHBvU2hhcGUtPkdldEZpcnN0KCkpICYmCiAgICAg
ICAgICAgICAgICAoIHBvTm9kZS0+R2V0UG9pbnQoKSAhPSBwb1NoYXBlLT5HZXRMYXN0KCkpKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG9Ob2RlVGFibGUuUmVtb3ZlKCBu
TGVmdCApOwogICAgICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90
cCBvQnJva2VuU2hhcGUgPSBwb1NoYXBlLT5CcmVha0F0UG9pbnQoIHBvTm9kZS0+R2V0UG9pbnQo
KSk7CiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb0Jyb2tlblNoYXBl
LnNpemUoKTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8
IG5TaXplOyBqKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIW9Ob2RlVGFibGUuQWRkKCBvQnJva2VuU2hhcGVbIGogXSApKQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvU3dlZXAuUmVtb3ZlKCBv
QnJva2VuU2hhcGVbIGogXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCgogICAgICAgICAg
ICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgb0Rvd25TaGlkcyA9IHBvTm9kZS0+R2V0
RG93blNoaWRzKCk7CgogICAgICAgICAgICB1bnNpZ25lZCBpbnQgblNpemUgPSBvRG93blNoaWRz
LnNpemUoKTsKICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBuU2l6ZTsg
aisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBvU3dlZXAuUmVtb3ZlKCBvRG93blNo
aWRzWyBqIF0gKTsKICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgb1VwU2hpZHMgPSBwb05v
ZGUtPkdldFVwU2hpZHMoKTsKICAgICAgICAgICAgc29ydCggb1VwU2hpZHMuYmVnaW4oKSwgb1Vw
U2hpZHMuZW5kKCksIENvbXBhcmVVcEFuZ2xlICk7CiAgICAgICAgICAgIG9Td2VlcC5BZGQoIG9V
cFNoaWRzICk7CiAgICAgICAgfQojIDU2OTEgInZlY2NsZWFuLmNwcCIKfQojIDU3NTQgInZlY2Ns
ZWFuLmNwcCIKY2xhc3MgQ0RhbmdsZUZpeAp7CiAgcHVibGljOgoKCgoKICAgIENEYW5nbGVGaXgg
KENWQ0xOb2RlICpwb05vZGUsIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBuSWQsIGNvbnN0IENW
Q0xQb2ludCAmb0Nsb3NlKTsKCgoKCiAgICBDRGFuZ2xlRml4IChjb25zdCBDRGFuZ2xlRml4ICZv
Rml4KTsKCgoKCiAgICBDRGFuZ2xlRml4KCk7CgoKCgogICAgQ1ZDTE5vZGUgKm1fcG9EYW5nbGVO
b2RlOwoKCgoKICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBtX3RhcmdldFNoaWQ7CgoKCgog
ICAgQ1ZDTFBvaW50IG1fdGFyZ2V0UG9pbnQ7CgoKCgoKICAgIGZyaWVuZCBUQm9vbCBvcGVyYXRv
cjwgKCBjb25zdCBDRGFuZ2xlRml4ICZvRGFuZ2xlMSwgY29uc3QgQ0RhbmdsZUZpeCAmb0Rhbmds
ZTIgKTsKICAgIGZyaWVuZCBUQm9vbCBvcGVyYXRvciA9PSAoIGNvbnN0IENEYW5nbGVGaXggJm9E
YW5nbGUxLCBjb25zdCBDRGFuZ2xlRml4ICZvRGFuZ2xlMiApOwoKICAgIHR5cGVkZWYgdmVjdG9y
PENEYW5nbGVGaXg+IERhbmdsZUZpeFZlY3Rvcl90cDsKfTsKCgpDRGFuZ2xlRml4OjpDRGFuZ2xl
Rml4IChDVkNMTm9kZSAqcG9Ob2RlLCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgbklkLCBjb25z
dCBDVkNMUG9pbnQgJm9DbG9zZSkKewogICAgICAgIG1fcG9EYW5nbGVOb2RlID0gcG9Ob2RlOwog
ICAgICAgIG1fdGFyZ2V0U2hpZCA9IG5JZDsKICAgICAgICBtX3RhcmdldFBvaW50ID0gb0Nsb3Nl
Owp9CgoKQ0RhbmdsZUZpeDo6Q0RhbmdsZUZpeCAoY29uc3QgQ0RhbmdsZUZpeCAmb0ZpeCkKewog
ICAgICAgIG1fcG9EYW5nbGVOb2RlID0gb0ZpeC5tX3BvRGFuZ2xlTm9kZTsKICAgICAgICBtX3Rh
cmdldFNoaWQgPSBvRml4Lm1fdGFyZ2V0U2hpZDsKICAgICAgICBtX3RhcmdldFBvaW50ID0gb0Zp
eC5tX3RhcmdldFBvaW50Owp9CgoKQ0RhbmdsZUZpeDo6Q0RhbmdsZUZpeCgpCnsKICAgICAgICBt
X3BvRGFuZ2xlTm9kZSA9IF9fbnVsbDsKICAgICAgICBtX3RhcmdldFNoaWQgPSAtMTsKICAgICAg
ICBtX3RhcmdldFBvaW50ID0gQ1ZDTFBvaW50ICgxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgMS43
OTc2OTMxMzQ4NjIzMTU3RSszMDgpOwp9CgoKVEJvb2wgb3BlcmF0b3I8ICggY29uc3QgQ0Rhbmds
ZUZpeCAmb0RhbmdsZTEsIGNvbnN0IENEYW5nbGVGaXggJm9EYW5nbGUyICkKewogICAgICAgIHJl
dHVybiBvRGFuZ2xlMS5tX3BvRGFuZ2xlTm9kZS0+R2V0UG9pbnQoKSA8IG9EYW5nbGUyLm1fcG9E
YW5nbGVOb2RlLT5HZXRQb2ludCgpOwp9CgoKVEJvb2wgb3BlcmF0b3IgPT0gKCBjb25zdCBDRGFu
Z2xlRml4ICZvRGFuZ2xlMSwgY29uc3QgQ0RhbmdsZUZpeCAmb0RhbmdsZTIgKQp7CiAgICAgICAg
cmV0dXJuIG9EYW5nbGUxLm1fcG9EYW5nbGVOb2RlLT5HZXRQb2ludCgpID09IG9EYW5nbGUyLm1f
cG9EYW5nbGVOb2RlLT5HZXRQb2ludCgpOwp9CiMgNTg1NiAidmVjY2xlYW4uY3BwIgpzdGF0aWMg
Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIEZpbmRDbG9zZVNoYXBlcyggY29uc3QgQ1ZD
TE5vZGUgKnBvTm9kZSwgY29uc3QgQ1ZDTFN3ZWVwICZvU3dlZXAsIENWQ0xOb2RlVGFibGUgJm9O
b2RlVGFibGUgKQp7CgoKCiAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9D
bG9zZVNoYXBlczsKCgoKCiAgICAgICAgKElNUENoZWNrRXhwcigicG9Ob2RlLT5TaGFwZUNvdW50
KCkgPT0gMSIsICJ2ZWNjbGVhbi5jcHAiLCA1ODY2KSwgKHBvTm9kZS0+U2hhcGVDb3VudCgpID09
IDEpID8gKDApIDogX0lNUEFzc2VydCgicG9Ob2RlLT5TaGFwZUNvdW50KCkgPT0gMSIsInZlY2Ns
ZWFuLmNwcCIsNTg2NikpOwogICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBv
U2hpZHMgPSBwb05vZGUtPkdldFNoaWRzKCk7CiAgICAgICAgQ1ZDTFNoYXBlICpwb0RhbmdsZTsK
ICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBvRGFuZ2xlLCBvU2hpZHNbIDAg
XSApOwogICAgICAgIGRvdWJsZSBkZkRhbmdsZVRvbCA9IHBvRGFuZ2xlLT5HZXRTaGFwZVByb3Bz
KCkubV9kZkRhbmdsZVRvbDsKCgoKCgogICAgICAgIENWQ0xSZWN0IG9EYW5nbGVSZWN0KCBwb05v
ZGUtPkdldFBvaW50KCkueCAtIGRmRGFuZ2xlVG9sLAogICAgICAgICAgICAgICAgICBwb05vZGUt
PkdldFBvaW50KCkueSAtIGRmRGFuZ2xlVG9sLAogICAgICAgICAgICAgICAgICBwb05vZGUtPkdl
dFBvaW50KCkueCArIGRmRGFuZ2xlVG9sLAogICAgICAgICAgICAgICAgICBwb05vZGUtPkdldFBv
aW50KCkueSArIGRmRGFuZ2xlVG9sICk7CgoKCgoKICAgICAgICBvU3dlZXAuRmluZEFsbCggb1No
aWRzICk7CgogICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZSA9IG9TaGlkcy5zaXplKCk7CiAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuU2l6ZTsgaSsrKQogICAgICAgIHsKCgoK
CiAgICAgICAgICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICAgICAgQ1ZDTFNoYXBlRmFj
dG9yeTo6R2V0QVNoYXBlKCBwb1NoYXBlLCBvU2hpZHNbIGkgXSApOwogICAgICAgICAgICBpZiAo
KCBwb1NoYXBlLT5HZXRJZCgpICE9IHBvRGFuZ2xlLT5HZXRJZCgpKSAmJiBwb1NoYXBlLT5HZXRS
YW5nZVJlY3QoKS5JbnRlcnNlY3RzKCBvRGFuZ2xlUmVjdCApKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBvQ2xvc2VTaGFwZXMucHVzaF9iYWNrKCBvU2hpZHNbIGkgXSApOwogICAgICAg
ICAgICB9CiAgICAgICAgfQoKCgoKCgoKICAgICAgICBDVkNMTm9kZSAqcG9DdXJyZW50Tm9kZSA9
ICggQ1ZDTE5vZGUgKiApIHBvTm9kZTsKICAgICAgICB3aGlsZSAoKCBwb0N1cnJlbnROb2RlLT5H
ZXRQb2ludCgpLnkgPiBwb05vZGUtPkdldFBvaW50KCkueSAtIGRmRGFuZ2xlVG9sICkgJiYKICAg
ICAgICAgICAgKCBwb0N1cnJlbnROb2RlICE9IG9Ob2RlVGFibGUuRmlyc3QoKSkpCiAgICAgICAg
ewogICAgICAgICAgICBwb0N1cnJlbnROb2RlID0gb05vZGVUYWJsZS5QcmV2KCAqcG9DdXJyZW50
Tm9kZSApOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKCggcG9DdXJyZW50Tm9kZSAhPSBfX251
bGwgKSAmJgogICAgICAgICAgICAoIHBvQ3VycmVudE5vZGUtPkdldFBvaW50KCkueSA8IHBvTm9k
ZS0+R2V0UG9pbnQoKS55ICsgZGZEYW5nbGVUb2wgKSkKICAgICAgICB7CgoKCiAgICAgICAgICAg
IG9TaGlkcyA9IHBvQ3VycmVudE5vZGUtPkdldFNoaWRzKCk7CiAgICAgICAgICAgIHVuc2lnbmVk
IGludCBuU2l6ZSA9IG9TaGlkcy5zaXplKCk7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgblNpemU7IGkrKykKICAgICAgICAgICAgewoKCgoKICAgICAgICAgICAgICAg
IENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6Okdl
dEFTaGFwZSggcG9TaGFwZSwgb1NoaWRzWyBpIF0gKTsKICAgICAgICAgICAgICAgIGlmICgoIHBv
U2hhcGUtPkdldElkKCkgIT0gcG9EYW5nbGUtPkdldElkKCkpICYmIHBvU2hhcGUtPkdldFJhbmdl
UmVjdCgpLkludGVyc2VjdHMoIG9EYW5nbGVSZWN0ICkpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgb0Nsb3NlU2hhcGVzLnB1c2hfYmFjayggb1NoaWRzWyBpIF0gKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcG9DdXJyZW50Tm9kZSA9
IG9Ob2RlVGFibGUuTmV4dCggKnBvQ3VycmVudE5vZGUgKTsKICAgICAgICB9CgoKCgogICAgICAg
IHNvcnQoIG9DbG9zZVNoYXBlcy5iZWdpbigpLCBvQ2xvc2VTaGFwZXMuZW5kKCkpOwogICAgICAg
IENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgaXQgPSB1bmlxdWUoIG9D
bG9zZVNoYXBlcy5iZWdpbigpLCBvQ2xvc2VTaGFwZXMuZW5kKCkpOwogICAgICAgIG9DbG9zZVNo
YXBlcy5yZXNpemUoIGl0IC0gb0Nsb3NlU2hhcGVzLmJlZ2luKCkpOwogICAgICAgIHJldHVybiBv
Q2xvc2VTaGFwZXM7Cn0KIyA1OTcwICJ2ZWNjbGVhbi5jcHAiCnN0YXRpYyBUQm9vbCBTaW1wbGVQ
YXRoVG9Ob2RlKCBjb25zdCBDVkNMTm9kZVRhYmxlICZvTm9kZVRhYmxlLAogICAgICAgICAgICAg
ICAgICAgY29uc3QgQ1ZDTE5vZGUgKnBvU3RhcnROb2RlLAogICAgICAgICAgICAgICAgICAgY29u
c3QgQ1ZDTE5vZGUgKnBvVGFyZ2V0Tm9kZSApCnsKICAgICAgICAoSU1QQ2hlY2tFeHByKCJwb1N0
YXJ0Tm9kZS0+SXNEYW5nbGUoKSIsICJ2ZWNjbGVhbi5jcHAiLCA1OTc0KSwgKHBvU3RhcnROb2Rl
LT5Jc0RhbmdsZSgpKSA/ICgwKSA6IF9JTVBBc3NlcnQoInBvU3RhcnROb2RlLT5Jc0RhbmdsZSgp
IiwidmVjY2xlYW4uY3BwIiw1OTc0KSk7CiAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVj
dG9yX3RwIG9TaGlkcyA9IHBvU3RhcnROb2RlLT5HZXRTaGlkcygpOwogICAgICAgIChJTVBDaGVj
a0V4cHIoIm9TaGlkcy5zaXplKCkgPT0gMSIsICJ2ZWNjbGVhbi5jcHAiLCA1OTc2KSwgKG9TaGlk
cy5zaXplKCkgPT0gMSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJvU2hpZHMuc2l6ZSgpID09IDEiLCJ2
ZWNjbGVhbi5jcHAiLDU5NzYpKTsKCiAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIG9T
aGlkID0gb1NoaWRzWyAwIF07CiAgICAgICAgQ1ZDTFNoYXBlICpwb1NoYXBlOwogICAgICAgIENW
Q0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9TaGFwZSwgb1NoaWQgKTsKCgoKCgogICAgICAg
IENWQ0xOb2RlICpwb05vZGUgPSAoKChwb1N0YXJ0Tm9kZSkgPT0gKG9Ob2RlVGFibGUuRmluZCgg
cG9TaGFwZS0+R2V0Rmlyc3QoKSkpKSA/IChvTm9kZVRhYmxlLkZpbmQoIHBvU2hhcGUtPkdldExh
c3QoKSkpIDogKG9Ob2RlVGFibGUuRmluZCggcG9TaGFwZS0+R2V0Rmlyc3QoKSkpKTsKCgoKCgog
ICAgICAgIHdoaWxlICgoIHBvTm9kZS0+U2hhcGVDb3VudCgpID09IDIgKSAmJgogICAgICAgICAg
ICAhKCAqcG9Ob2RlID09ICpwb1N0YXJ0Tm9kZSApICYmCiAgICAgICAgICAgICEoICpwb05vZGUg
PT0gKnBvVGFyZ2V0Tm9kZSApKQogICAgICAgIHsKICAgICAgICAgICAgb1NoaWQgPSAoKChvU2hp
ZCkgPT0gKHBvTm9kZS0+R2V0U2hpZHMoKVsgMCBdKSkgPyAocG9Ob2RlLT5HZXRTaGlkcygpWyAx
IF0pIDogKHBvTm9kZS0+R2V0U2hpZHMoKVsgMCBdKSk7CiAgICAgICAgICAgIENWQ0xTaGFwZUZh
Y3Rvcnk6OkdldEFTaGFwZSggcG9TaGFwZSwgb1NoaWQgKTsKICAgICAgICAgICAgcG9Ob2RlID0g
KCgocG9Ob2RlKSA9PSAob05vZGVUYWJsZS5GaW5kKCBwb1NoYXBlLT5HZXRGaXJzdCgpKSkpID8g
KG9Ob2RlVGFibGUuRmluZCggcG9TaGFwZS0+R2V0TGFzdCgpKSkgOiAob05vZGVUYWJsZS5GaW5k
KCBwb1NoYXBlLT5HZXRGaXJzdCgpKSkpOwogICAgICAgIH0KCgoKCiAgICAgICAgaWYgKCpwb05v
ZGUgPT0gKnBvVGFyZ2V0Tm9kZSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgIH0KCgoKCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgIH0KfQojIDYwMjUgInZlY2NsZWFuLmNwcCIKc3RhdGljIHZvaWQgRmluZENs
b3Nlc3RTaGFwZSggQ1ZDTFBvaW50ICZvQ2xvc2VzdFBvaW50LCBkb3VibGUgJmRmQ2xvc2VzdERp
c3QsIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCAmbkNsb3Nlc3RTaGFwZSwKICAgICAgICAgICAg
ICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9DbG9zZVNoYXBlcywgY29uc3Qg
Q1ZDTFBvaW50ICZvRnJvbVdoZXJlLCBjb25zdCBDVkNMTm9kZVRhYmxlICZvTm9kZVRhYmxlICkK
ewoKCgogICAgICAgIG5DbG9zZXN0U2hhcGUgPSBWQ0xOVUxMU2hhcGVJZDsKICAgICAgICBvQ2xv
c2VzdFBvaW50ID0gQ1ZDTFBvaW50ICgxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgMS43OTc2OTMx
MzQ4NjIzMTU3RSszMDgpOwogICAgICAgIGRmQ2xvc2VzdERpc3QgPSAxLjc5NzY5MzEzNDg2MjMx
NTdFKzMwODsKCgoKCgogICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZSA9IG9DbG9zZVNoYXBlcy5z
aXplKCk7CiAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuU2l6ZTsgaSsrKQog
ICAgICAgIHsKICAgICAgICAgICAgQ1ZDTFBvaW50IG9DbG9zZVBvaW50OwogICAgICAgICAgICBD
VkNMU2hhcGUgKnBvU2hhcGU7CiAgICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFw
ZSggcG9TaGFwZSwgb0Nsb3NlU2hhcGVzWyBpIF0gKTsKICAgICAgICAgICAgZG91YmxlIGRmRGlz
dCA9IHBvU2hhcGUtPkdldERpc3RhbmNlRnJvbSggb0Nsb3NlUG9pbnQsIG9Gcm9tV2hlcmUgKTsK
CgoKCiAgICAgICAgICAgIGlmIChkZkRpc3QgPCBkZkNsb3Nlc3REaXN0KQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBDVkNMTm9kZSAqcG9DbG9zZU5vZGUgPSBvTm9kZVRhYmxlLkZpbmQo
IG9DbG9zZVBvaW50ICk7CiAgICAgICAgICAgICAgICBDVkNMTm9kZSAqcG9EYW5nbGVOb2RlID0g
b05vZGVUYWJsZS5GaW5kKCBvRnJvbVdoZXJlICk7CgoKCgoKICAgICAgICAgICAgICAgIGlmICgo
IHBvQ2xvc2VOb2RlID09IF9fbnVsbCApIHx8ICggIVNpbXBsZVBhdGhUb05vZGUoIG9Ob2RlVGFi
bGUsIHBvRGFuZ2xlTm9kZSwgcG9DbG9zZU5vZGUgKSkpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgb0Nsb3Nlc3RQb2ludCA9IG9DbG9zZVBvaW50OwogICAgICAgICAgICAg
ICAgICAgIG5DbG9zZXN0U2hhcGUgPSBwb1NoYXBlLT5HZXRJZCgpOwogICAgICAgICAgICAgICAg
ICAgIGRmQ2xvc2VzdERpc3QgPSBkZkRpc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9Cn0KIyA2MDc3ICJ2ZWNjbGVhbi5jcHAiCnN0YXRpYyBUQm9vbCBTaG91bGRT
bmFwRGFuZ2xlKCBjb25zdCBDVkNMU2hhcGUgKnBvRGFuZ2xlLCBDVkNMUG9pbnQgb0VuZFBvaW50
LCBDVkNMUG9pbnQgb1NuYXBQb2ludCApCnsKICAgICAgICBDVkNMUG9pbnQgb1N0YXJ0UG9pbnQ7
CgoKCgoKICAgICAgICBpZiAob0VuZFBvaW50ID09IHBvRGFuZ2xlLT5HZXRGaXJzdCgpKQogICAg
ICAgIHsKICAgICAgICAgICAgb1N0YXJ0UG9pbnQgPSBwb0RhbmdsZS0+R2V0U2Vjb25kKCk7CiAg
ICAgICAgfQoKICAgICAgICBlbHNlIGlmIChvRW5kUG9pbnQgPT0gcG9EYW5nbGUtPkdldExhc3Qo
KSkKICAgICAgICB7CiAgICAgICAgICAgIG9TdGFydFBvaW50ID0gcG9EYW5nbGUtPkdldFNlY29u
ZFRvTGFzdCgpOwogICAgICAgIH0KCgoKCgogICAgICAgIGRvdWJsZSBkZkFuZ2xlID0gVkNMQ29t
cHV0ZUFuZ2xlKCBvU3RhcnRQb2ludCwgb0VuZFBvaW50LCBvU25hcFBvaW50ICk7CgogICAgICAg
IHJldHVybiAoKFZDTERCTENvbXAoKDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzRTAgLyAyLjAp
LCBkZkFuZ2xlKSA8PSAwKSAmJiAoVkNMREJMQ29tcChkZkFuZ2xlLCAoMy4xNDE1OTI2NTM1ODk3
OTMyMzg0NjI2NDNFMCAqIDMuMCAvIDIuMCkpIDw9IDApKTsKfQoKCgoKCgpzdGF0aWMgVEJvb2wg
Q29tcGFyZVNoaWRzKCBjb25zdCBDRGFuZ2xlRml4ICZvRml4MSwgY29uc3QgQ0RhbmdsZUZpeCAm
b0ZpeDIgKQp7CiAgICAgICAgcmV0dXJuIG9GaXgxLm1fdGFyZ2V0U2hpZCA8IG9GaXgyLm1fdGFy
Z2V0U2hpZDsKfQojIDYxMzYgInZlY2NsZWFuLmNwcCIKdm9pZCBWQ0xEYW5nbGUoIENWQ0xOb2Rl
VGFibGUgJm9Ob2RlVGFibGUsIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzcywgdm9pZCAqcFBy
b2dyZXNzQXJnICkKewoKICAgICAgICBDVkNMU3dlZXAgb1N3ZWVwOwoKICAgICAgICBDVkNMTm9k
ZTo6VkNMTm9kZVNldF90cCBvUHJvY2Vzc2VkTm9kZXM7CiAgICAgICAgQ0RhbmdsZUZpeDo6RGFu
Z2xlRml4VmVjdG9yX3RwIG9GaXhlczsKCiAgICAgICAgaWYgKHBmblByb2dyZXNzID09IF9fbnVs
bCkKICAgICAgICAgICAgcGZuUHJvZ3Jlc3MgPSBJTVBEdW1teVByb2dyZXNzOwoKICAgICAgICBk
b3VibGUgbk5vZGVzID0gb05vZGVUYWJsZS5HZXROdW1Ob2RlcygpOwogICAgICAgIGRvdWJsZSBu
ID0gMC4wOwoKCgoKCgogICAgICAgIGZvciAoQ1ZDTE5vZGUgKiBwb05vZGUgPSBvTm9kZVRhYmxl
LkZpcnN0KCk7CiAgICAgICAgIHBvTm9kZSAhPSBfX251bGw7CiAgICAgICAgIHBvTm9kZSA9IG9O
b2RlVGFibGUuTmV4dCggKnBvTm9kZSApKQogICAgICAgIHsKCiAgICAgICAgICAgIGlmICghKCAq
cGZuUHJvZ3Jlc3MgKSAoICsrbiAvIG5Ob2RlcywgIkZpeGluZyBkYW5nbGVzIiwgcFByb2dyZXNz
QXJnICkpCiAgICAgICAgICAgICAgICBJTVBFcnJvciggMywgMSwgIlVzZXIgY2FuY2VsbGVkIiAp
OwoKCgoKCgogICAgICAgICAgICBpZiAocG9Ob2RlLT5Jc0RhbmdsZSgpICYmICggb1Byb2Nlc3Nl
ZE5vZGVzLmZpbmQoIHBvTm9kZS0+R2V0SWQoKSkgPT0gb1Byb2Nlc3NlZE5vZGVzLmVuZCgpKSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIGlE
YW5nbGUgPSBwb05vZGUtPkdldFNoaWRzKClbIDAgXTsKICAgICAgICAgICAgICAgIENWQ0xTaGFw
ZSAqcG9EYW5nbGU7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUo
IHBvRGFuZ2xlLCBpRGFuZ2xlICk7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGVQcm9wcyBvRGFu
Z2xlUHJvcHMgPSBwb0RhbmdsZS0+R2V0U2hhcGVQcm9wcygpOwoKCgoKCgoKICAgICAgICAgICAg
ICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBvQ2xvc2VTaGFwZXMgPSBGaW5kQ2xv
c2VTaGFwZXMoIHBvTm9kZSwgb1N3ZWVwLCBvTm9kZVRhYmxlICk7CgoKCgogICAgICAgICAgICAg
ICAgQ1ZDTFBvaW50IG9DbG9zZXN0UG9pbnQ7CiAgICAgICAgICAgICAgICBkb3VibGUgZGZDbG9z
ZXN0RGlzdDsKICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBpQ2xvc2Vz
dFNoYXBlOwogICAgICAgICAgICAgICAgRmluZENsb3Nlc3RTaGFwZSggb0Nsb3Nlc3RQb2ludCwg
ZGZDbG9zZXN0RGlzdCwgaUNsb3Nlc3RTaGFwZSwgb0Nsb3NlU2hhcGVzLCBwb05vZGUtPkdldFBv
aW50KCksIG9Ob2RlVGFibGUgKTsKCgoKCgogICAgICAgICAgICAgICAgaWYgKCggZGZDbG9zZXN0
RGlzdCA8PSBvRGFuZ2xlUHJvcHMubV9kZkRhbmdsZVRvbCApICYmCiAgICAgICAgICAgICAgICBT
aG91bGRTbmFwRGFuZ2xlKCBwb0RhbmdsZSwgcG9Ob2RlLT5HZXRQb2ludCgpLCBvQ2xvc2VzdFBv
aW50ICkpCiAgICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICAgICAgb0ZpeGVzLnB1
c2hfYmFjayggQ0RhbmdsZUZpeCAocG9Ob2RlLCBpQ2xvc2VzdFNoYXBlLCBvQ2xvc2VzdFBvaW50
KSk7CgoKCgogICAgICAgICAgICAgICAgICAgIENWQ0xOb2RlICpwb0Nsb3NlTm9kZSA9IG9Ob2Rl
VGFibGUuRmluZCggb0Nsb3Nlc3RQb2ludCApOwoKICAgICAgICAgICAgICAgICAgICBpZiAocG9D
bG9zZU5vZGUgIT0gX19udWxsKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgb1Byb2Nlc3NlZE5vZGVzLmluc2VydCggcG9DbG9zZU5vZGUtPkdldElkKCkpOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCgoK
ICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9TaGlkczsKICAgICAg
ICAgICAgb1NoaWRzID0gcG9Ob2RlLT5HZXREb3duU2hpZHMoKTsKCiAgICAgICAgICAgIHVuc2ln
bmVkIGludCBuU2l6ZSA9IG9TaGlkcy5zaXplKCk7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGogPSAwOyBqIDwgblNpemU7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
b1N3ZWVwLlJlbW92ZSggb1NoaWRzWyBqIF0gKTsKICAgICAgICAgICAgfQoKCgoKICAgICAgICAg
ICAgb1NoaWRzID0gcG9Ob2RlLT5HZXRVcFNoaWRzKCk7CiAgICAgICAgICAgIHNvcnQoIG9TaGlk
cy5iZWdpbigpLCBvU2hpZHMuZW5kKCksIENvbXBhcmVVcEFuZ2xlICk7CiAgICAgICAgICAgIG5T
aXplID0gb1NoaWRzLnNpemUoKTsKICAgICAgICAgICAgb1N3ZWVwLkFkZCggb1NoaWRzICk7CgoK
CgoKCiAgICAgICAgfQoKCgoKCiAgICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb0ZpeGVzLnNp
emUoKTsKICAgICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
blNpemU7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xT
aGFwZUlkX3RwIGlEYW5nbGUgPSBvRml4ZXNbIGkgXS5tX3BvRGFuZ2xlTm9kZS0+R2V0U2hpZHMo
KVsgMCBdOwogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlICpwb0RhbmdsZTsKICAgICAgICAgICAg
ICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9EYW5nbGUsIGlEYW5nbGUgKTsKICAg
ICAgICAgICAgICAgIENWQ0xTaGFwZVByb3BzIG9EYW5nbGVQcm9wcyA9IHBvRGFuZ2xlLT5HZXRT
aGFwZVByb3BzKCk7CgoKCgoKICAgICAgICAgICAgICAgIG9Ob2RlVGFibGUuUmVtb3ZlKCBpRGFu
Z2xlICk7CgogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9O
ZXdTaGlkcyA9IHBvRGFuZ2xlLT5FeHRlbmRUbyggb0ZpeGVzWyBpIF0ubV90YXJnZXRQb2ludCwg
b0ZpeGVzWyBpIF0ubV9wb0RhbmdsZU5vZGUtPkdldFBvaW50KCkpOwoKCgoKICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBvTmV3U2l6ZSA9IG9OZXdTaGlkcy5zaXplKCk7CiAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IG9OZXdTaXplOyBqKyspCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFvTm9kZVRhYmxlLkFkZCggb05ld1No
aWRzWyBqIF0gKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
IENWQ0xTaGFwZUZhY3Rvcnk6OlJNQSggb05ld1NoaWRzWyBqIF0gKTsKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCgogICAg
ICAgIHNvcnQoIG9GaXhlcy5iZWdpbigpLCBvRml4ZXMuZW5kKCksIENvbXBhcmVTaGlkcyApOwog
ICAgICAgIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb0JyZWFrUG9pbnRzOwogICAgICAg
IENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBpU2hpZCA9ICggb0ZpeGVzLnNpemUoKSA+IDAgKSA/
IG9GaXhlc1sgMCBdLm1fdGFyZ2V0U2hpZCA6IC0xOwoKCgoKICAgICAgICBuU2l6ZSA9IG9GaXhl
cy5zaXplKCk7CiAgICAgICAgewogICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IG5TaXplOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChvRml4ZXNb
IGkgXS5tX3RhcmdldFNoaWQgIT0gaVNoaWQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgaWYgKG9CcmVha1BvaW50cy5zaXplKCkgPiAwKQogICAgICAgICAgICAgICAgICAg
IHsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgb05vZGVUYWJsZS5SZW1vdmUoIGlTaGlkICk7
CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgQ1ZDTFNoYXBlICpwb1NoYXBlOwogICAgICAg
ICAgICAgICAgICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBvU2hhcGUsIGlT
aGlkICk7CiAgICAgICAgICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rv
cl90cCBvTmV3U2hpZHMgPSBwb1NoYXBlLT5CcmVha0F0UG9pbnRzKCBvQnJlYWtQb2ludHMgKTsK
CgoKCgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8
IG9OZXdTaGlkcy5zaXplKCk7IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFvTm9kZVRhYmxlLkFkZCggb05ld1NoaWRzWyBqIF0g
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpSTUEoIG9OZXdTaGlkc1sgaiBdICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgIG9CcmVha1BvaW50cy5jbGVhcigpOwogICAgICAgICAgICAgICAgICAg
ICAgICBpU2hpZCA9IG9GaXhlc1sgaSBdLm1fdGFyZ2V0U2hpZDsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgb0JyZWFrUG9pbnRzLnB1c2hf
YmFjayggb0ZpeGVzWyBpIF0ubV90YXJnZXRQb2ludCApOwogICAgICAgICAgICB9CiAgICAgICAg
fQoKICAgICAgICBpZiAob0JyZWFrUG9pbnRzLnNpemUoKSA+IDApCiAgICAgICAgewogICAgICAg
ICAgICBvTm9kZVRhYmxlLlJlbW92ZSggaVNoaWQgKTsKCgoKCgogICAgICAgICAgICBDVkNMU2hh
cGUgKnBvU2hhcGU7CiAgICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9T
aGFwZSwgaVNoaWQgKTsKICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3Rw
IG9OZXdTaGlkcyA9IHBvU2hhcGUtPkJyZWFrQXRQb2ludHMoIG9CcmVha1BvaW50cyApOwoKCgoK
CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgb05ld1NoaWRzLnNpemUo
KTsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIW9Ob2RlVGFibGUuQWRk
KCBvTmV3U2hpZHNbIGkgXSApKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IENWQ0xTaGFwZUZhY3Rvcnk6OlJNQSggb05ld1NoaWRzWyBpIF0gKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgoKCgp9CiMgNjQwNyAidmVjY2xlYW4uY3BwIgp0
eXBlZGVmIHBhaXI8Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwLCBkb3VibGU+IENsaXBT
aGFwZXM7CnR5cGVkZWYgdmVjdG9yPENsaXBTaGFwZXM+IENsaXBMaXN0OwoKdm9pZCBWQ0xDbGlw
KCBDVkNMTm9kZVRhYmxlICZvTm9kZVRhYmxlLCBJTVBQcm9ncmVzc0Z1bmMgcGZuUHJvZ3Jlc3Ms
IHZvaWQgKnBQcm9ncmVzc0FyZyApCnsKCiAgICAgICAgZG91YmxlIG5Ob2RlcyA9IG9Ob2RlVGFi
bGUuR2V0TnVtTm9kZXMoKTsKICAgICAgICBkb3VibGUgbiA9IDAuMDsKCiAgICAgICAgaWYgKHBm
blByb2dyZXNzID09IF9fbnVsbCkKICAgICAgICAgICAgcGZuUHJvZ3Jlc3MgPSBJTVBEdW1teVBy
b2dyZXNzOwoKICAgICAgICBDbGlwTGlzdCBvQ2xpcExpc3Q7CgoKCgoKICAgICAgICBmb3IgKENW
Q0xOb2RlICogcG9Ob2RlID0gb05vZGVUYWJsZS5GaXJzdCgpOyBwb05vZGUgIT0gX19udWxsOyBw
b05vZGUgPSBvTm9kZVRhYmxlLk5leHQoICpwb05vZGUgKSkKICAgICAgICB7CgogICAgICAgICAg
ICBpZiAoISggKnBmblByb2dyZXNzICkgKCArK24gLyBuTm9kZXMsICJDbGlwcGluZyIsIHBQcm9n
cmVzc0FyZyApKQogICAgICAgICAgICAgICAgSU1QRXJyb3IoIDMsIDEsICJVc2VyIGNhbmNlbGxl
ZCIgKTsKCgoKCgogICAgICAgICAgICBpZiAocG9Ob2RlLT5Jc0RhbmdsZSgpKQogICAgICAgICAg
ICB7CgogICAgICAgICAgICAgICAgZG91YmxlIGRmQWNjdW11bGF0ZWRMZW5ndGggPSAwLjA7CiAg
ICAgICAgICAgICAgICBkb3VibGUgZGZNaW5pbXVtVG9sbGVyYW5jZSA9IDEuNzk3NjkzMTM0ODYy
MzE1N0UrMzA4OwogICAgICAgICAgICAgICAgQ1ZDTE5vZGUgKnBvQ3VycmVudE5vZGUgPSBwb05v
ZGU7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgRGFuZ2xlU2hhcGVJ
ZCA9IFZDTE5VTExTaGFwZUlkOwogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlICpwb0RhbmdsZVNo
YXBlID0gX19udWxsOwogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9y
X3RwIFNoYXBlc0luRGFuZ2xlOwoKCgoKICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIFNo
YXBlSWRzID0gcG9DdXJyZW50Tm9kZS0+R2V0U2hpZHMoKTsKICAgICAgICAgICAgICAgICAgICAo
SU1QQ2hlY2tFeHByKCJTaGFwZUlkcy5zaXplKCkgPj0gMSIsICJ2ZWNjbGVhbi5jcHAiLCA2NDUx
KSwgKFNoYXBlSWRzLnNpemUoKSA+PSAxKSA/ICgwKSA6IF9JTVBBc3NlcnQoIlNoYXBlSWRzLnNp
emUoKSA+PSAxIiwidmVjY2xlYW4uY3BwIiw2NDUxKSk7CgoKCiAgICAgICAgICAgICAgICAgICAg
U2hhcGVJZHMucHVzaF9iYWNrKCBWQ0xOVUxMU2hhcGVJZCApOwoKICAgICAgICAgICAgICAgICAg
ICBEYW5nbGVTaGFwZUlkID0gKCgoRGFuZ2xlU2hhcGVJZCkgPT0gKFNoYXBlSWRzWyAwIF0pKSA/
IChTaGFwZUlkc1sgMSBdKSA6IChTaGFwZUlkc1sgMCBdKSk7CiAgICAgICAgICAgICAgICAgICAg
Q1ZDTFNoYXBlICpwU2hhcGU7CiAgICAgICAgICAgICAgICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6
R2V0QVNoYXBlKCBwU2hhcGUsIERhbmdsZVNoYXBlSWQgKTsKICAgICAgICAgICAgICAgICAgICAo
SU1QQ2hlY2tFeHByKCJwU2hhcGUiLCAidmVjY2xlYW4uY3BwIiwgNjQ2MCksIChwU2hhcGUpID8g
KDApIDogX0lNUEFzc2VydCgicFNoYXBlIiwidmVjY2xlYW4uY3BwIiw2NDYwKSk7CgoKCgoKICAg
ICAgICAgICAgICAgICAgICBTaGFwZXNJbkRhbmdsZS5wdXNoX2JhY2soIERhbmdsZVNoYXBlSWQg
KTsKCgoKCgogICAgICAgICAgICAgICAgICAgIGRmQWNjdW11bGF0ZWRMZW5ndGggKz0gcFNoYXBl
LT5HZXRTaGFwZUxlbmd0aCgpOwoKICAgICAgICAgICAgICAgICAgICBDVkNMU2hhcGVQcm9wcyBv
U2hhcGVQcm9wZXJ0aWVzID0gcFNoYXBlLT5HZXRTaGFwZVByb3BzKCk7CiAgICAgICAgICAgICAg
ICAgICAgaWYgKG9TaGFwZVByb3BlcnRpZXMubV9kZkNsaXBUb2wgPCBkZk1pbmltdW1Ub2xsZXJh
bmNlKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGZNaW5p
bXVtVG9sbGVyYW5jZSA9IG9TaGFwZVByb3BlcnRpZXMubV9kZkNsaXBUb2w7CiAgICAgICAgICAg
ICAgICAgICAgfQoKCgoKCgogICAgICAgICAgICAgICAgICAgIHBvQ3VycmVudE5vZGUgPSBvTm9k
ZVRhYmxlLkZpbmQoICgoKHBvQ3VycmVudE5vZGUtPkdldFBvaW50KCkpID09IChwU2hhcGUtPkdl
dEZpcnN0KCkpKSA/IChwU2hhcGUtPkdldExhc3QoKSkgOiAocFNoYXBlLT5HZXRGaXJzdCgpKSkp
OwogICAgICAgICAgICAgICAgfSB3aGlsZSAocG9DdXJyZW50Tm9kZS0+U2hhcGVDb3VudCgpID09
IDIpOwoKICAgICAgICAgICAgICAgIChJTVBDaGVja0V4cHIoImRmQWNjdW11bGF0ZWRMZW5ndGgg
Pj0gMC4wIiwgInZlY2NsZWFuLmNwcCIsIDY0ODgpLCAoZGZBY2N1bXVsYXRlZExlbmd0aCA+PSAw
LjApID8gKDApIDogX0lNUEFzc2VydCgiZGZBY2N1bXVsYXRlZExlbmd0aCA+PSAwLjAiLCJ2ZWNj
bGVhbi5jcHAiLDY0ODgpKTsKICAgICAgICAgICAgICAgIENsaXBTaGFwZXMgb0NsaXBTaGFwZXMo
IFNoYXBlc0luRGFuZ2xlLCBkZkFjY3VtdWxhdGVkTGVuZ3RoIC0gZGZNaW5pbXVtVG9sbGVyYW5j
ZSApOwogICAgICAgICAgICAgICAgb0NsaXBMaXN0LnB1c2hfYmFjayggb0NsaXBTaGFwZXMgKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIChDbGlwTGlzdDo6aXRlcmF0b3Ig
aSA9IG9DbGlwTGlzdC5iZWdpbigpOyBpICE9IG9DbGlwTGlzdC5lbmQoKTsgaSsrKQogICAgICAg
IHsKCgoKCgogICAgICAgICAgICBpZiAoKCAqaSApLnNlY29uZCA8PSAwLjApCiAgICAgICAgICAg
IHsKCgoKCiAgICAgICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgU2hh
cGVzSW5EYW5nbGUoKCAqaSApLmZpcnN0ICk7CiAgICAgICAgICAgICAgICBmb3IgKENWQ0xTaGFw
ZTo6VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgaXQgPSBTaGFwZXNJbkRhbmdsZS5iZWdp
bigpOyBpdCAhPSBTaGFwZXNJbkRhbmdsZS5lbmQoKTsgaXQrKykKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBvTm9kZVRhYmxlLlJlbW92ZSggKml0ICk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCgp9CiMgNjU0OSAidmVjY2xlYW4uY3Bw
Igp2b2lkIFZDTEltcG9ydCggQ1ZDTE5vZGVUYWJsZSAmb05vZGVUYWJsZSwgR0RCTGF5ZXIgJnBM
YXllciwgQ1ZDTFNoYXBlUHJvcHMgJm9TaGFwZVByb3BzLCBJTVBQcm9ncmVzc0Z1bmMgcGZuUHJv
Z3Jlc3MsIHZvaWQgKnBQcm9ncmVzc0FyZyApCnsKICAgICAgICBvTm9kZVRhYmxlLlN0cmVhbUlu
KCBwTGF5ZXIsIG9TaGFwZVByb3BzLCBwZm5Qcm9ncmVzcywgcFByb2dyZXNzQXJnICk7Cn0KIyA2
NjI3ICJ2ZWNjbGVhbi5jcHAiClRCb29sIFZDTENvbXBhcmVMYXllckFuZElEKCBDVkNMTm9kZSAq
Zmlyc3QsIENWQ0xOb2RlICpzZWNvbmQgKQp7CgogICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJ
ZFZlY3Rvcl90cCBvU2hhcGVJZHMgPSBmaXJzdC0+R2V0U2hpZHMoKTsKICAgICAgICBDVkNMU2hh
cGU6OlZDTFNoYXBlVmVjdG9yIG9TaGFwZXMoIDIgKTsKICAgICAgICBDVkNMU2hhcGVGYWN0b3J5
OjpHZXRBU2hhcGUoIG9TaGFwZXNbIDAgXSwgb1NoYXBlSWRzWyAwIF0gKTsKCiAgICAgICAgb1No
YXBlSWRzID0gc2Vjb25kLT5HZXRTaGlkcygpOwogICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6Okdl
dEFTaGFwZSggb1NoYXBlc1sgMSBdLCBvU2hhcGVJZHNbIDAgXSApOwoKICAgICAgICBDVkNMU2hh
cGVQcm9wcyBTaGFwZVByb3BzWyAyIF07CiAgICAgICAgU2hhcGVQcm9wc1sgMCBdID0gb1NoYXBl
c1sgMCBdLT5HZXRTaGFwZVByb3BzKCk7CiAgICAgICAgU2hhcGVQcm9wc1sgMSBdID0gb1NoYXBl
c1sgMSBdLT5HZXRTaGFwZVByb3BzKCk7CgogICAgICAgIGlmIChTaGFwZVByb3BzWyAwIF0ubV9o
R0RCTGF5ZXJJbiA8IFNoYXBlUHJvcHNbIDEgXS5tX2hHREJMYXllckluKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKFNoYXBlUHJv
cHNbIDAgXS5tX2hHREJMYXllckluID09IFNoYXBlUHJvcHNbIDEgXS5tX2hHREJMYXllckluKQog
ICAgICAgIHsKICAgICAgICAgICAgaWYgKFNoYXBlUHJvcHNbIDAgXS5tX2hHREJTaGFwZUlkIDwg
U2hhcGVQcm9wc1sgMSBdLm1faEdEQlNoYXBlSWQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBm
YWxzZTsKfQojIDY2NzggInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMQ29tcGFyZVNoYXBlSUQoIEdE
QkxheWVyIGhsYXllciwgR0RCU2hhcGVJZCBmaXJzdCwgR0RCU2hhcGVJZCBzZWNvbmQsIGludCBG
aWVsZEluZGV4ICkKewoKICAgICAgICByZXR1cm4gZmlyc3QgPT0gc2Vjb25kOwoKfQojIDY3MTAg
InZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMQ29tcGFyZVNoYXBlQWx3YXlzKCBHREJMYXllciBobGF5
ZXIsIEdEQlNoYXBlSWQgZmlyc3QsIEdEQlNoYXBlSWQgc2Vjb25kLCBpbnQgRmllbGRJbmRleCAp
CnsKICAgICAgICByZXR1cm4gdHJ1ZTsKfQojIDY3NDAgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNM
Q29tcGFyZVNoYXBlTmV2ZXIoIEdEQkxheWVyIGhsYXllciwgR0RCU2hhcGVJZCBmaXJzdCwgR0RC
U2hhcGVJZCBzZWNvbmQsIGludCBGaWVsZEluZGV4ICkKewogICAgICAgIHJldHVybiBmYWxzZTsK
fQoKdHlwZWRlZiB2ZWN0b3I8Q1ZDTE5vZGUgKiA+IE5vZGVMaXN0Owp0eXBlZGVmIHBhaXI8Tm9k
ZUxpc3Q6Oml0ZXJhdG9yLCBOb2RlTGlzdDo6aXRlcmF0b3I+IE5vZGVSYW5nZTsKdHlwZWRlZiBz
ZXQ8Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwLCBsZXNzPENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90
cD4gPiBTaElkU2V0OwojIDY3ODQgInZlY2NsZWFuLmNwcCIKdm9pZCBWQ0xPdXRwdXQoIENWQ0xO
b2RlVGFibGUgJm9Ob2RlVGFibGUsIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzcywgdm9pZCAq
cFByb2dyZXNzQXJnLCBUQm9vbCggKmNvbXBhcmUgKSAoIENWQ0xOb2RlICosIENWQ0xOb2RlICog
KSwgVEJvb2woICpzaGFwZWNvbXBhcmUgKSAoIEdEQkxheWVyLCBHREJTaGFwZUlkLCBHREJTaGFw
ZUlkLCBpbnQgKSkKewogICAgICAgIE5vZGVMaXN0IENvbWJpbmVTaGFwZXM7CiAgICAgICAgU2hJ
ZFNldCBXcml0dGVuU2hhcGVzOwoKICAgICAgICBpZiAocGZuUHJvZ3Jlc3MgPT0gX19udWxsKQog
ICAgICAgICAgICBwZm5Qcm9ncmVzcyA9IElNUER1bW15UHJvZ3Jlc3M7CgogICAgICAgIGRvdWJs
ZSBuTm9kZXMgPSBvTm9kZVRhYmxlLkdldE51bU5vZGVzKCk7CiAgICAgICAgZG91YmxlIG4gPSAw
LjA7CiMgNjgwMiAidmVjY2xlYW4uY3BwIgogICAgICAgIENWQ0xOb2RlICpwb05vZGU7CiAgICAg
ICAgZm9yIChwb05vZGUgPSBvTm9kZVRhYmxlLkZpcnN0KCk7IHBvTm9kZSAhPSBfX251bGw7IHBv
Tm9kZSA9IG9Ob2RlVGFibGUuTmV4dCggKnBvTm9kZSApKQogICAgICAgIHsKCiAgICAgICAgICAg
IGlmICghKCAqcGZuUHJvZ3Jlc3MgKSAoICsrbiAvIG5Ob2RlcywgIlNjYW5uaW5nIHNoYXBlcyIs
IHBQcm9ncmVzc0FyZyApKQogICAgICAgICAgICAgICAgSU1QRXJyb3IoIDMsIDEsICJVc2VyIGNh
bmNlbGxlZCIgKTsKCgoKCgoKICAgICAgICAgICAgaWYgKHBvTm9kZS0+U2hhcGVDb3VudCgpID09
IDIpCiAgICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBl
SWRWZWN0b3JfdHAgb1NoYXBlSWRzID0gcG9Ob2RlLT5HZXRTaGlkcygpOwoKCgoKCiAgICAgICAg
ICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlVmVjdG9yIG9TaGFwZXMoIDIgKTsKICAgICAgICAg
ICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggb1NoYXBlc1sgMCBdLCBvU2hhcGVJ
ZHNbIDAgXSApOwogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBv
U2hhcGVzWyAxIF0sIG9TaGFwZUlkc1sgMSBdICk7CiAgICAgICAgICAgICAgICAoSU1QQ2hlY2tF
eHByKCJvU2hhcGVzWyAwIF0iLCAidmVjY2xlYW4uY3BwIiwgNjgyOSksIChvU2hhcGVzWyAwIF0p
ID8gKDApIDogX0lNUEFzc2VydCgib1NoYXBlc1sgMCBdIiwidmVjY2xlYW4uY3BwIiw2ODI5KSk7
CiAgICAgICAgICAgICAgICAoSU1QQ2hlY2tFeHByKCJvU2hhcGVzWyAxIF0iLCAidmVjY2xlYW4u
Y3BwIiwgNjgzMCksIChvU2hhcGVzWyAxIF0pID8gKDApIDogX0lNUEFzc2VydCgib1NoYXBlc1sg
MSBdIiwidmVjY2xlYW4uY3BwIiw2ODMwKSk7CgoKCgogICAgICAgICAgICAgICAgQ1ZDTFNoYXBl
UHJvcHMgU2hhcGVQcm9wc1sgMiBdOwogICAgICAgICAgICAgICAgU2hhcGVQcm9wc1sgMCBdID0g
b1NoYXBlc1sgMCBdLT5HZXRTaGFwZVByb3BzKCk7CiAgICAgICAgICAgICAgICBTaGFwZVByb3Bz
WyAxIF0gPSBvU2hhcGVzWyAxIF0tPkdldFNoYXBlUHJvcHMoKTsKCgoKCgogICAgICAgICAgICAg
ICAgaWYgKCggU2hhcGVQcm9wc1sgMCBdLm1faEdEQkxheWVySW4gPT0gU2hhcGVQcm9wc1sgMSBd
Lm1faEdEQkxheWVySW4gKSAmJgogICAgICAgICAgICAgICAgKCBzaGFwZWNvbXBhcmUoIFNoYXBl
UHJvcHNbIDAgXS5tX2hHREJMYXllckluLCBTaGFwZVByb3BzWyAwIF0ubV9oR0RCU2hhcGVJZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcGVQcm9wc1sgMSBdLm1faEdEQlNoYXBlSWQs
IDAgKSkpCiAgICAgICAgICAgICAgICB7CgoKCgoKICAgICAgICAgICAgICAgICAgICBDb21iaW5l
U2hhcGVzLnB1c2hfYmFjayggcG9Ob2RlICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9CgogICAgICAgIGlmIChDb21iaW5lU2hhcGVzLnNpemUoKSA+IDApCiAgICAg
ICAgewoKCgoKICAgICAgICAgICAgc29ydCggQ29tYmluZVNoYXBlcy5iZWdpbigpLCBDb21iaW5l
U2hhcGVzLmVuZCgpLCBjb21wYXJlICk7CgogICAgICAgICAgICBOb2RlUmFuZ2Ugb1VuaXF1ZU5v
ZGVSYW5nZTsKICAgICAgICAgICAgb1VuaXF1ZU5vZGVSYW5nZS5maXJzdCA9IENvbWJpbmVTaGFw
ZXMuYmVnaW4oKTsKICAgICAgICAgICAgb1VuaXF1ZU5vZGVSYW5nZS5zZWNvbmQgPSBDb21iaW5l
U2hhcGVzLmJlZ2luKCk7CgogICAgICAgICAgICB3aGlsZSAob1VuaXF1ZU5vZGVSYW5nZS5zZWNv
bmQgIT0gQ29tYmluZVNoYXBlcy5lbmQoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9VbmlxdWVTaGlkczsKCgoKCiAgICAgICAg
ICAgICAgICBvVW5pcXVlTm9kZVJhbmdlID0gZXF1YWxfcmFuZ2UoIG9VbmlxdWVOb2RlUmFuZ2Uu
Zmlyc3QsIENvbWJpbmVTaGFwZXMuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiggb1VuaXF1ZU5vZGVSYW5nZS5zZWNvbmQgKSwgY29tcGFyZSApOwoKCiAgICAgICAgICAg
ICAgICBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIGJyZWFrUG9pbnRzOwoKCgoKCiAgICAg
ICAgICAgICAgICBOb2RlTGlzdDo6aXRlcmF0b3Igb0N1cnJlbnROb2RlID0gb1VuaXF1ZU5vZGVS
YW5nZS5maXJzdDsKICAgICAgICAgICAgICAgIHdoaWxlIChvQ3VycmVudE5vZGUgIT0gb1VuaXF1
ZU5vZGVSYW5nZS5zZWNvbmQpCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAg
IENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBvU2hhcGVJZHMgPSAoICoqb0N1cnJlbnRO
b2RlICkuR2V0U2hpZHMoKTsKCgoKCiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCAyOyBpKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICBvVW5pcXVlU2hpZHMucHVzaF9iYWNrKCBvU2hhcGVJZHNbIGkgXSApOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgQ1ZDTFNoYXBlICpzaDsKICAgICAgICAgICAgICAgICAgICAgICAgQ1ZDTFNo
YXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBzaCwgb1NoYXBlSWRzWyBpIF0gKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgKElNUENoZWNrRXhwcigic2giLCAidmVjY2xlYW4uY3BwIiwgNjkwMSksIChz
aCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJzaCIsInZlY2NsZWFuLmNwcCIsNjkwMSkpOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCggb05vZGVUYWJsZS5GaW5kKCBzaC0+R2V0Rmlyc3QoKSkp
LT5TaGFwZUNvdW50KCkgPiAyKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVha1BvaW50cy5wdXNoX2JhY2soIHNoLT5HZXRGaXJzdCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
ICgoIG9Ob2RlVGFibGUuRmluZCggc2gtPkdldExhc3QoKSkpLT5TaGFwZUNvdW50KCkgPiAyKQog
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
a1BvaW50cy5wdXNoX2JhY2soIHNoLT5HZXRMYXN0KCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG9DdXJyZW50Tm9k
ZSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc29ydCggb1VuaXF1ZVNoaWRz
LmJlZ2luKCksIG9VbmlxdWVTaGlkcy5lbmQoKSk7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGU6
OlZDTFNoYXBlSWRWZWN0b3JfdHA6Oml0ZXJhdG9yIGl0ID0gdW5pcXVlKCBvVW5pcXVlU2hpZHMu
YmVnaW4oKSwgb1VuaXF1ZVNoaWRzLmVuZCgpKTsKICAgICAgICAgICAgICAgIG9VbmlxdWVTaGlk
cy5yZXNpemUoIGl0IC0gb1VuaXF1ZVNoaWRzLmJlZ2luKCkpOwoKCgoKCiAgICAgICAgICAgICAg
ICBXcml0dGVuU2hhcGVzLmluc2VydCggb1VuaXF1ZVNoaWRzLmJlZ2luKCksIG9VbmlxdWVTaGlk
cy5lbmQoKSk7CgoKCgoKCgogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlICpzaGFwZTsKICAgICAg
ICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggc2hhcGUsIG9VbmlxdWVTaGlk
c1sgMCBdICk7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGVQcm9wcyBvUHJvcHMgPSBzaGFwZS0+
R2V0U2hhcGVQcm9wcygpOwoKICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZl
Y3Rvcl90cCBvTmV3U2hpZHMgPSBDVkNMU2hhcGVGYWN0b3J5OjpNYWtlU2hhcGUoIG9VbmlxdWVT
aGlkcywgb1Byb3BzLCBicmVha1BvaW50cyApOwoKCgoKCiAgICAgICAgICAgICAgICBmb3IgKENW
Q0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgSXQgPSBvTmV3U2hpZHMuYmVn
aW4oKTsgSXQgIT0gb05ld1NoaWRzLmVuZCgpOyBJdCsrKQogICAgICAgICAgICAgICAgewoKCgoK
CiAgICAgICAgICAgICAgICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBzaGFwZSwg
Kkl0ICk7CiAgICAgICAgICAgICAgICAgICAgc2hhcGUtPldyaXRlKCk7CiAgICAgICAgICAgICAg
ICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6Uk1BKCAqSXQgKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgIH0KCgoKCgoKCiAgICAgICAgbiA9IDAuODsKCiAgICAgICAgZm9y
IChwb05vZGUgPSBvTm9kZVRhYmxlLkZpcnN0KCk7IHBvTm9kZSAhPSBfX251bGw7IHBvTm9kZSA9
IG9Ob2RlVGFibGUuTmV4dCggKnBvTm9kZSApKQogICAgICAgIHsKCiAgICAgICAgICAgIGlmICgh
KCAqcGZuUHJvZ3Jlc3MgKSAoICsrbiAvIG5Ob2RlcywgIldyaXRpbmcgc2hhcGVzIiwgcFByb2dy
ZXNzQXJnICkpCiAgICAgICAgICAgICAgICBJTVBFcnJvciggMywgMSwgIlVzZXIgY2FuY2VsbGVk
IiApOwoKCgoKICAgICAgICAgICAgaWYgKGZpbmQoIENvbWJpbmVTaGFwZXMuYmVnaW4oKSwgQ29t
YmluZVNoYXBlcy5lbmQoKSwgcG9Ob2RlICkgPT0gQ29tYmluZVNoYXBlcy5lbmQoKSkKICAgICAg
ICAgICAgewoKCgoKICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90
cCBvU2hpZHMgPSBwb05vZGUtPkdldFVwU2hpZHMoKTsKCiAgICAgICAgICAgICAgICBmb3IgKENW
Q0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgSXQgPSBvU2hpZHMuYmVnaW4o
KTsgSXQgIT0gb1NoaWRzLmVuZCgpOyBJdCsrKQogICAgICAgICAgICAgICAgewoKCgoKICAgICAg
ICAgICAgICAgICAgICBpZiAoV3JpdHRlblNoYXBlcy5maW5kKCAqSXQgKSA9PSBXcml0dGVuU2hh
cGVzLmVuZCgpKQogICAgICAgICAgICAgICAgICAgIHsKCgoKCgogICAgICAgICAgICAgICAgICAg
ICAgICBDVkNMU2hhcGUgKnNoYXBlOwogICAgICAgICAgICAgICAgICAgICAgICBDVkNMU2hhcGVG
YWN0b3J5OjpHZXRBU2hhcGUoIHNoYXBlLCAqSXQgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
c2hhcGUtPldyaXRlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICB9CiAgICAgICAgfQp9CiMgNzAxOSAidmVjY2xlYW4uY3BwIgpzdGF0aWMgY2hh
ciBQYXJhbGxlbEludCggY29uc3QgR0RCVmVydGV4ICZhLCBjb25zdCBHREJWZXJ0ZXggJmIsIGNv
bnN0CkdEQlZlcnRleCAmYywgY29uc3QgR0RCVmVydGV4ICZkLCBHREJWZXJ0ZXggJnAgKTsKCnN0
YXRpYyBpbnQgQXJlYVNpZ24oIGNvbnN0IEdEQlZlcnRleCAmYSwgY29uc3QgR0RCVmVydGV4ICZi
LCBjb25zdCBHREJWZXJ0ZXggJmMgKQp7CiAgICAgICAgZG91YmxlIGFyZWEyOwoKICAgICAgICBh
cmVhMiA9ICggYi54IC0gYS54ICkgKiAoIGRvdWJsZSApICggYy55IC0gYS55ICkgLQogICAgICAg
ICAgICAoIGMueCAtIGEueCApICogKCBkb3VibGUgKSAoIGIueSAtIGEueSApOwoKCgoKICAgICAg
ICBpZiAoYXJlYTIgPiAwLjUpIHJldHVybiAxOwogICAgICAgIGVsc2UgaWYgKGFyZWEyIDwgLTAu
NSkgcmV0dXJuIC0xOwogICAgICAgIGVsc2UgcmV0dXJuIDA7Cn0KCgpjaGFyIFBhcmFsbGVsSW50
KCBjb25zdCBHREJWZXJ0ZXggJmEsIGNvbnN0IEdEQlZlcnRleCAmYiwgY29uc3QgR0RCVmVydGV4
ICZjLCBjb25zdCBHREJWZXJ0ZXggJmQsIEdEQlZlcnRleCAmcCApCnsKICAgICAgICBpZiAoIVZD
TENvbGxpbmVhciggYSwgYiwgYyApKQogICAgICAgICAgICByZXR1cm4gJzAnOwoKICAgICAgICBp
ZiAoVkNMQmV0d2VlbiggYSwgYiwgYyApKQogICAgICAgIHsKICAgICAgICAgICAgcCA9IGM7CiAg
ICAgICAgICAgIHJldHVybiAnZSc7CiAgICAgICAgfQogICAgICAgIGlmIChWQ0xCZXR3ZWVuKCBh
LCBiLCBkICkpCiAgICAgICAgewogICAgICAgICAgICBwID0gZDsKICAgICAgICAgICAgcmV0dXJu
ICdlJzsKICAgICAgICB9CiAgICAgICAgaWYgKFZDTEJldHdlZW4oIGMsIGQsIGEgKSkKICAgICAg
ICB7CiAgICAgICAgICAgIHAgPSBhOwogICAgICAgICAgICByZXR1cm4gJ2UnOwogICAgICAgIH0K
ICAgICAgICBpZiAoVkNMQmV0d2VlbiggYywgZCwgYiApKQogICAgICAgIHsKICAgICAgICAgICAg
cCA9IGI7CiAgICAgICAgICAgIHJldHVybiAnZSc7CiAgICAgICAgfQogICAgICAgIHJldHVybiAn
MCc7Cn0KIyA3MDc5ICJ2ZWNjbGVhbi5jcHAiCmNoYXIgVkNMU2VnU2VnSW50KCBjb25zdCBHREJW
ZXJ0ZXggJmEsIGNvbnN0IEdEQlZlcnRleCAmYiwgY29uc3QgR0RCVmVydGV4ICZjLCBjb25zdCBH
REJWZXJ0ZXggJmQsIEdEQlZlcnRleCAmcCApCnsKICAgICAgICBkb3VibGUgcywgdDsKICAgICAg
ICBkb3VibGUgbnVtLCBkZW5vbTsKICAgICAgICBjaGFyIGNvZGUgPSAnPyc7CgogICAgICAgIGRl
bm9tID0gYS54ICogKCBkb3VibGUgKSAoIGQueSAtIGMueSApICsKICAgICAgICAgICAgYi54ICog
KCBkb3VibGUgKSAoIGMueSAtIGQueSApICsKICAgICAgICAgICAgZC54ICogKCBkb3VibGUgKSAo
IGIueSAtIGEueSApICsKICAgICAgICAgICAgYy54ICogKCBkb3VibGUgKSAoIGEueSAtIGIueSAp
OwoKCgoKCiAgICAgICAgaWYgKGRlbm9tID09IDAuMCkKICAgICAgICAgICAgcmV0dXJuIFBhcmFs
bGVsSW50KCBhLCBiLCBjLCBkLCBwICk7CgogICAgICAgIGVsc2UgaWYgKFZDTENvbGxpbmVhcigg
YywgZCwgYSApICkKICAgICAgICB7CiAgICAgICAgICAgIHAgPSBhOwogICAgICAgICAgICByZXR1
cm4gJ3YnOwogICAgICAgIH0KCiAgICAgICAgZWxzZSBpZiAoVkNMQ29sbGluZWFyKCBjLCBkLCBi
ICkgKQogICAgICAgIHsKICAgICAgICAgICAgcCA9IGI7CiAgICAgICAgICAgIHJldHVybiAndic7
CiAgICAgICAgfQoKICAgICAgICBlbHNlIGlmIChWQ0xDb2xsaW5lYXIoIGEsIGIsIGMgKSApCiAg
ICAgICAgewogICAgICAgICAgICBwID0gYzsKICAgICAgICAgICAgcmV0dXJuICd2JzsKICAgICAg
ICB9CgogICAgICAgIGVsc2UgaWYgKFZDTENvbGxpbmVhciggYSwgYiwgZCApICkKICAgICAgICB7
CiAgICAgICAgICAgIHAgPSBkOwogICAgICAgICAgICByZXR1cm4gJ3YnOwogICAgICAgIH0KCiAg
ICAgICAgbnVtID0gYS54ICogKCBkb3VibGUgKSAoIGQueSAtIGMueSApICsKICAgICAgICAgICAg
Yy54ICogKCBkb3VibGUgKSAoIGEueSAtIGQueSApICsKICAgICAgICAgICAgZC54ICogKCBkb3Vi
bGUgKSAoIGMueSAtIGEueSApOwogICAgICAgIGlmICgoIG51bSA9PSAwLjAgKSB8fCAoIG51bSA9
PSBkZW5vbSApKSBjb2RlID0gJ3YnOwogICAgICAgIHMgPSBudW0gLyBkZW5vbTsKCiAgICAgICAg
bnVtID0gLSggYS54ICogKCBkb3VibGUgKSAoIGMueSAtIGIueSApICsKICAgICAgICAgICAgIGIu
eCAqICggZG91YmxlICkgKCBhLnkgLSBjLnkgKSArCiAgICAgICAgICAgICBjLnggKiAoIGRvdWJs
ZSApICggYi55IC0gYS55ICkpOwogICAgICAgIGlmICgoIG51bSA9PSAwLjAgKSB8fCAoIG51bSA9
PSBkZW5vbSApKSBjb2RlID0gJ3YnOwogICAgICAgIHQgPSBudW0gLyBkZW5vbTsKCiAgICAgICAg
aWYgKCggMC4wIDwgcyApICYmICggcyA8IDEuMCApICYmCiAgICAgICAgICggMC4wIDwgdCApICYm
ICggdCA8IDEuMCApKQogICAgICAgICAgICBjb2RlID0gJzEnOwogICAgICAgIGVsc2UgaWYgKCgg
MC4wID4gcyApIHx8ICggcyA+IDEuMCApIHx8CiAgICAgICAgICAgICAgKCAwLjAgPiB0ICkgfHwg
KCB0ID4gMS4wICkpCiAgICAgICAgICAgIGNvZGUgPSAnMCc7CgogICAgICAgIGlmIChjb2RlID09
ICcxJykKICAgICAgICB7CiAgICAgICAgICAgIHAueCA9IGEueCArIHMgKiAoIGIueCAtIGEueCAp
OwogICAgICAgICAgICBwLnkgPSBhLnkgKyBzICogKCBiLnkgLSBhLnkgKTsKICAgICAgICB9CgoK
ICAgICAgICByZXR1cm4gY29kZTsKfQoKCgoKCgoKVEJvb2wgVkNMQmV0d2VlbiggY29uc3QgR0RC
VmVydGV4ICZhLCBjb25zdCBHREJWZXJ0ZXggJmIsIGNvbnN0IEdEQlZlcnRleCAmYyApCnsKCgoK
ICAgICAgICBpZiAoYS54ICE9IGIueCkKICAgICAgICAgICAgcmV0dXJuICgoIGEueCA8PSBjLngg
KSAmJiAoIGMueCA8PSBiLnggKSkgfHwKICAgICAgICAgICAgKCggYS54ID49IGMueCApICYmICgg
Yy54ID49IGIueCApKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAoKCBhLnkgPD0g
Yy55ICkgJiYgKCBjLnkgPD0gYi55ICkpIHx8CiAgICAgICAgICAgICgoIGEueSA+PSBjLnkgKSAm
JiAoIGMueSA+PSBiLnkgKSk7Cn0KCgoKCmludCBWQ0xDb2xsaW5lYXIoIGNvbnN0IEdEQlZlcnRl
eCAmYSwgY29uc3QgR0RCVmVydGV4ICZiLCBjb25zdCBHREJWZXJ0ZXggJmMgKQp7CiAgICAgICAg
cmV0dXJuIEFyZWFTaWduKCBhLCBiLCBjICkgPT0gMDsKfQo=


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

* Re: c++/5667: Internal compiler error
@ 2002-04-19 13:53 pme
  0 siblings, 0 replies; 2+ messages in thread
From: pme @ 2002-04-19 13:53 UTC (permalink / raw)
  To: cheng, gcc-bugs, gcc-prs, nobody

Synopsis: Internal compiler error

State-Changed-From-To: open->closed
State-Changed-By: pme
State-Changed-When: Fri Apr 19 13:53:35 2002
State-Changed-Why:
    Thank you for your bug report.
    
    Using 3.1 prerelease sources, I get lots of errors, but
    no crash at the end, so this appers fixed:
    
    232% g++ 5667_vecclean.ii
    In file included from vecclean.cpp:84:
    ../../../lib/pcl.hh:100: `operator new' takes type `size_t' (`unsigned int') as
       first parameter
    In file included from /usr/local/include/g++-v3/bits/stl_algobase.h:75,
                     from /usr/local/include/g++-v3/bits/std_list.h:61,
                     from /usr/local/include/g++-v3/list:31,
                     from stlincl.h:43,
                     from vecclean.cpp:86:
    /usr/local/include/g++-v3/new:76: `operator new' takes type `size_t' (`unsigned
       int') as first parameter
    /usr/local/include/g++-v3/new:77: `operator new' takes type `size_t' (`unsigned
       int') as first parameter
    /usr/local/include/g++-v3/new:80: `operator new' takes type `size_t' (`unsigned
       int') as first parameter
    /usr/local/include/g++-v3/new:81: `operator new' takes type `size_t' (`unsigned
       int') as first parameter
    /usr/local/include/g++-v3/new:86: `operator new' takes type `size_t' (`unsigned
       int') as first parameter
    /usr/local/include/g++-v3/new:87: `operator new' takes type `size_t' (`unsigned
       int') as first parameter
    In file included from /usr/local/include/g++-v3/bits/std_list.h:61,
                     from /usr/local/include/g++-v3/list:31,
                     from stlincl.h:43,
                     from vecclean.cpp:86:
    /usr/local/include/g++-v3/bits/stl_algobase.h: In function `void
       std::fill(unsigned char*, unsigned char*, const unsigned char&)':
    /usr/local/include/g++-v3/bits/stl_algobase.h:479: call of overloaded `memset(
       unsigned char*&, unsigned char&, int)' is ambiguous
    <internal>:479: candidates are: void* std::memset(void*, int, unsigned int)
    /usr/include/string.h:69:                 void* memset(void*, int, long
       unsigned int)
    /usr/local/include/g++-v3/bits/stl_algobase.h: In function `void
       std::fill(signed char*, signed char*, const signed char&)':
    /usr/local/include/g++-v3/bits/stl_algobase.h:486: call of overloaded `memset(
       signed char*&, unsigned char&, int)' is ambiguous
    <internal>:486: candidates are: void* std::memset(void*, int, unsigned int)
    /usr/include/string.h:69:                 void* memset(void*, int, long
       unsigned int)
    /usr/local/include/g++-v3/bits/stl_algobase.h: In function `void
       std::fill(char*, char*, const char&)':
    /usr/local/include/g++-v3/bits/stl_algobase.h:492: call of overloaded `memset(
       char*&, unsigned char&, int)' is ambiguous
    <internal>:492: candidates are: void* std::memset(void*, int, unsigned int)
    /usr/include/string.h:69:                 void* memset(void*, int, long
       unsigned int)
    /usr/local/include/g++-v3/bits/stl_algobase.h: In function `int
       std::__lexicographical_compare_3way(const unsigned char*, const unsigned
       char*, const unsigned char*, const unsigned char*)':
    /usr/local/include/g++-v3/bits/stl_algobase.h:691: call of overloaded `memcmp(
       const unsigned char*&, const unsigned char*&, const long int&)' is ambiguous
    <internal>:691: candidates are: int std::memcmp(const <anonymous>*, const
       <anonymous>*, unsigned int)
    /usr/include/string.h:51:                 int memcmp(const void*, const void*,
       long unsigned int)
    233%

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=5667


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

end of thread, other threads:[~2002-04-19 20:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-02-12  6:56 c++/5667: Internal compiler error cheng
2002-04-19 13:53 pme

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