public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/2455: 'g++ A0439589.C' results in Internal error (core) in cc1plus
@ 2001-08-11 11:46 gdr
  0 siblings, 0 replies; 2+ messages in thread
From: gdr @ 2001-08-11 11:46 UTC (permalink / raw)
  To: Andreas.Krakowczyk, Erwin.Unruh, gcc-bugs, gcc-prs, gdr, nobody

Synopsis: 'g++ A0439589.C' results in Internal error (core) in cc1plus

Responsible-Changed-From-To: unassigned->gdr
Responsible-Changed-By: gdr
Responsible-Changed-When: Sat Aug 11 11:46:25 2001
Responsible-Changed-Why:
    Analyzed.
State-Changed-From-To: open->analyzed
State-Changed-By: gdr
State-Changed-When: Sat Aug 11 11:46:25 2001
State-Changed-Why:
    Confirm as a bug.  g++ goes into an infinite loop on the simplified
    program snippet.

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


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

* c++/2455: 'g++ A0439589.C' results in Internal error (core) in cc1plus
@ 2001-04-02  1:36 Andreas.Krakowczyk
  0 siblings, 0 replies; 2+ messages in thread
From: Andreas.Krakowczyk @ 2001-04-02  1:36 UTC (permalink / raw)
  To: gcc-gnats; +Cc: Erwin.Unruh

>Number:         2455
>Category:       c++
>Synopsis:       'g++ A0439589.C' results in Internal error (core) in cc1plus
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Apr 02 01:36:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Andreas Krakowczyk
>Release:        gcc-20010320
>Organization:
>Environment:
sparc-sun-solaris2.8
>Description:
When compiling file A0439589.C, g++ reports 
g++: Internal error: Segmentation Fault (program cc1plus)
Doesn't work with gcc-2.95.3 either.
>How-To-Repeat:
g++ -c A0439589.i
>Fix:

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

IyA3ICJBMDQzOTU4OS5DIgojaWRlbnQgIiVXJSBvZiAlRSUiCgojIDEgIi9ob21lNS9rcmFrb3cv
Z251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p
bmNsdWRlL2crKy9pb3N0cmVhbS5oIiAxIDMKIyAzMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu
MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr
L2lvc3RyZWFtLmgiIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9z
dHJlYW0uaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pb3N0
cmVhbS5oIiAzCgojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJp
czIuOC9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu
MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr
L3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvaG9tZTUva3Jh
a293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z
LjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9vc19kZWZpbmVzLmgiIDEg
MwojIDM1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0
cy9jKytjb25maWcuaCIgMiAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9pb3N0cmVhbS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRf
b3N0cmVhbS5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX29z
dHJlYW0uaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgi
IDEgMwojIDM4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDMKCiMg
MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAzOCAi
L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCgojIDEgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2NvbmZpZy5o
IiAxIDMKIyA0MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAy
IDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDEgMwoj
IDM5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAxICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25m
aWcuaCIgMSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIu
aCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIg
MSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMK
IyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAxNDcgIi9ob21lNS9r
cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44
LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDE5OSAi
L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCBz
aXplX3Q7CiMgNDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXpl
X3Q7Cn0KIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAy
IDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwoj
IDM5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDMKIyAxICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25m
aWcuaCIgMSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkaW8u
aCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRhcmcuaCIg
MSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkYXJnLmgiIDMK
IyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzIDQKIyA0MyAiL2hvbWU1L2ty
YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
My4wL2luY2x1ZGUvc3RkYXJnLmgiIDMgNAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251
Y192YV9saXN0OwojIDkwICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVk
ZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu
MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RkX2NzdGRhcmcuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnZhX2xp
c3Q7Cn0KIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAy
IDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMK
IyA0MiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyA0
NCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAzCiMgMSAiL2hv
bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzIDQKIyAxNCAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvc3RkaW8uaCIgMyA0CiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0
CiMgMTUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CiMgMzQgIi9ob21lNS9r
cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44
LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW8uaAkxLjc4
CTk5LzEyLzA4IFNNSSIKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5o
IiAxIDMgNAojIDQxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDMgNAoj
cHJhZ21hIGlkZW50ICJAKCMpc3RkaW9faXNvLmgJMS4yCTk5LzEwLzI1IFNNSSIKCgojIDEgIi9o
b21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzMuMC9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMjIgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNAojcHJhZ21hIGlkZW50ICJA
KCMpZmVhdHVyZV90ZXN0cy5oCTEuMTgJOTkvMDcvMjYgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL2lzYV9kZWZzLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAz
IDQKI3ByYWdtYSBpZGVudCAiQCgjKWlzYV9kZWZzLmgJMS4yMAk5OS8wNS8wNCBTTUkiCiMgMTU4
ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNApleHRlcm4gIkMiIHsKIyAzODAgIi91
c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0Cn0KIyAyNSAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyAxOTAgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNAp9CiMgNDUgIi9ob21lNS9r
cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44
LzMuMC9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L3ZhX2xpc3QuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xpc3QuaCIgMyA0CiNw
cmFnbWEgaWRlbnQgIkAoIyl2YV9saXN0LmgJMS4xMgk5OS8wNS8wNCBTTUkiCiMgMjIgIi91c3Iv
aW5jbHVkZS9zeXMvdmFfbGlzdC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCnR5cGVkZWYgdm9pZCAq
X192YV9saXN0OwoKCgoKCn0KIyA0NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lz
by5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zdGRpb190YWcuaCIgMSAzIDQKIyA5ICIvdXNy
L2luY2x1ZGUvc3RkaW9fdGFnLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW9fdGFnLmgJ
MS4zCTk4LzA0LzIwIFNNSSIKCgpleHRlcm4gIkMiIHsKIyAyMSAiL3Vzci9pbmNsdWRlL3N0ZGlv
X3RhZy5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgRklMRSBfX0ZJTEU7CgoKCn0KIyA0NyAiL2hvbWU1
L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9z
dGRpb19pbXBsLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CiNw
cmFnbWEgaWRlbnQgIkAoIylzdGRpb19pbXBsLmgJMS44CTk5LzA2LzEwIFNNSSIKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAojIDEyICIvdXNyL2luY2x1ZGUvc3RkaW9f
aW1wbC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewoKCgoKCgoKdHlwZWRlZiBpbnQgc3NpemVfdDsK
IyAzOCAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CnN0cnVjdCBGSUxFCnsKCgoKCiAg
ICAgICAgc3NpemVfdCBfY250OwogICAgICAgIHVuc2lnbmVkIGNoYXIgKl9wdHI7CgogICAgICAg
IHVuc2lnbmVkIGNoYXIgKl9iYXNlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgX2ZsYWc7CiAgICAg
ICAgdW5zaWduZWQgY2hhciBfZmlsZTsKICAgICAgICB1bnNpZ25lZCBfX29yaWVudGF0aW9uOjI7
CiAgICAgICAgdW5zaWduZWQgX19pb25vbG9jazoxOwogICAgICAgIHVuc2lnbmVkIF9fZmlsbGVy
OjU7Cn07CgoKCgp9CiMgNDggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIg
MiAzIDQKIyA1OCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKZXh0
ZXJuICJDIiB7CiMgNjggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0
CnR5cGVkZWYgbG9uZyBsb25nIF9fbG9uZ2xvbmdfdDsKIyA4NCAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKdHlwZWRlZiBfX0ZJTEUgRklMRTsKIyA5NyAiL2hvbWU1
L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKdHlwZWRlZiBsb25nIGZwb3NfdDsK
IyAxNTYgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CmV4dGVybiBf
X0ZJTEUgX19pb2JbMjBdOwojIDE3MyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGlvX2lz
by5oIiAzIDQKZXh0ZXJuIGludCByZW1vdmUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCByZW5h
bWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqdG1wZmlsZSh2b2lk
KTsKZXh0ZXJuIGNoYXIgKnRtcG5hbShjaGFyICopOwpleHRlcm4gaW50IGZjbG9zZShGSUxFICop
OwpleHRlcm4gaW50IGZmbHVzaChGSUxFICopOwpleHRlcm4gRklMRSAqZm9wZW4oY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqZnJlb3Blbihjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIHZvaWQgc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsK
ZXh0ZXJuIGludCBzZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNpemVfdCk7CgpleHRlcm4g
aW50IGZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CgpleHRlcm4gaW50IGZzY2Fu
ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNo
YXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc2NhbmYoY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJu
IGludCBzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJuIGludCBzc2Nh
bmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgdmZwcmludGYo
RklMRSAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdnByaW50Zihjb25z
dCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdnNwcmludGYoY2hhciAqLCBjb25zdCBj
aGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgZmdldGMoRklMRSAqKTsKZXh0ZXJuIGNoYXIg
KmZnZXRzKGNoYXIgKiwgaW50LCBGSUxFICopOwpleHRlcm4gaW50IGZwdXRjKGludCwgRklMRSAq
KTsKZXh0ZXJuIGludCBmcHV0cyhjb25zdCBjaGFyICosIEZJTEUgKik7CgoKZXh0ZXJuIGludCBn
ZXRjKEZJTEUgKik7CmV4dGVybiBpbnQgcHV0YyhpbnQsIEZJTEUgKik7CgoKCmV4dGVybiBpbnQg
Z2V0Y2hhcih2b2lkKTsKZXh0ZXJuIGludCBwdXRjaGFyKGludCk7CgpleHRlcm4gY2hhciAqZ2V0
cyhjaGFyICopOwpleHRlcm4gaW50IHB1dHMoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCB1bmdl
dGMoaW50LCBGSUxFICopOwpleHRlcm4gc2l6ZV90IGZyZWFkKHZvaWQgKiwgc2l6ZV90LCBzaXpl
X3QsIEZJTEUgKik7CmV4dGVybiBzaXplX3QgZndyaXRlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBz
aXplX3QsIEZJTEUgKik7CmV4dGVybiBpbnQgZmdldHBvcyhGSUxFICosIGZwb3NfdCAqKTsKZXh0
ZXJuIGludCBmc2VlayhGSUxFICosIGxvbmcsIGludCk7CmV4dGVybiBpbnQgZnNldHBvcyhGSUxF
ICosIGNvbnN0IGZwb3NfdCAqKTsKZXh0ZXJuIGxvbmcgZnRlbGwoRklMRSAqKTsKZXh0ZXJuIHZv
aWQgcmV3aW5kKEZJTEUgKik7CgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIoRklMRSAqKTsKZXh0ZXJu
IGludCBmZW9mKEZJTEUgKik7CmV4dGVybiBpbnQgZmVycm9yKEZJTEUgKik7CgpleHRlcm4gdm9p
ZCBwZXJyb3IoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gaW50IF9fZmlsYnVmKEZJTEUgKik7CmV4
dGVybiBpbnQgX19mbHNidWYoaW50LCBGSUxFICopOwojIDM0NSAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKfQojIDM3ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y
MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRp
by5oIiAyIDMgNAojIDk4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJu
ICJDIiB7CgoKCgoKCnR5cGVkZWYgbG9uZyBvZmZfdDsKCgoKCgoKCnR5cGVkZWYgX19sb25nbG9u
Z190IG9mZjY0X3Q7CiMgMTIzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQKdHlw
ZWRlZiBfX2xvbmdsb25nX3QgZnBvczY0X3Q7CiMgMTM0ICIvaG9tZTUva3Jha293L2dudS9sb2Nh
bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9z
dGRpby5oIiAzIDQKdHlwZWRlZiBfX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwojIDE1MSAiL2hv
bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9zaWJ1
ZltdLCBfc29idWZbXTsKIyAxOTMgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNApl
eHRlcm4gdW5zaWduZWQgY2hhciAqX2J1ZmVuZHRhYltdOwpleHRlcm4gRklMRSAqX2xhc3RidWY7
CiMgMjI1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGNoYXIgKnRt
cG5hbV9yKGNoYXIgKik7CgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlcihGSUxFICosIGNoYXIgKiwg
c2l6ZV90KTsKZXh0ZXJuIGludCBzZXRsaW5lYnVmKEZJTEUgKik7CgoKCgoKZXh0ZXJuIGludCBz
bnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwoKCgoKZXh0ZXJuIGlu
dCB2c25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3Qp
OwojIDI1MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFICpm
ZG9wZW4oaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqY3Rlcm1pZChjaGFyICopOwpl
eHRlcm4gaW50IGZpbGVubyhGSUxFICopOwojIDI2MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu
MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3Rk
aW8uaCIgMyA0CmV4dGVybiB2b2lkIGZsb2NrZmlsZShGSUxFICopOwpleHRlcm4gaW50IGZ0cnls
b2NrZmlsZShGSUxFICopOwpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZShGSUxFICopOwpleHRlcm4g
aW50IGdldGNfdW5sb2NrZWQoRklMRSAqKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkKHZv
aWQpOwpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQoaW50LCBGSUxFICopOwpleHRlcm4gaW50IHB1
dGNoYXJfdW5sb2NrZWQoaW50KTsKIyAyNzYgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGlvLmgi
IDMgNApleHRlcm4gRklMRSAqcG9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRl
cm4gY2hhciAqY3VzZXJpZChjaGFyICopOwpleHRlcm4gY2hhciAqdGVtcG5hbShjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwg
Y29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKZXh0ZXJuIGludCBvcHRpbmQs
IG9wdGVyciwgb3B0b3B0OwpleHRlcm4gaW50IGdldHcoRklMRSAqKTsKZXh0ZXJuIGludCBwdXR3
KGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBwY2xvc2UoRklMRSAqKTsKCgoKCgoKCmV4dGVybiBp
bnQgZnNlZWtvKEZJTEUgKiwgb2ZmX3QsIGludCk7CmV4dGVybiBvZmZfdCBmdGVsbG8oRklMRSAq
KTsKIyAzMDUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAq
Zm9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFICpmcmVvcGVu
NjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CmV4dGVybiBGSUxFICp0bXBm
aWxlNjQodm9pZCk7CmV4dGVybiBpbnQgZmdldHBvczY0KEZJTEUgKiwgZnBvczY0X3QgKik7CmV4
dGVybiBpbnQgZnNldHBvczY0KEZJTEUgKiwgY29uc3QgZnBvczY0X3QgKik7CmV4dGVybiBpbnQg
ZnNlZWtvNjQoRklMRSAqLCBvZmY2NF90LCBpbnQpOwpleHRlcm4gb2ZmNjRfdCBmdGVsbG82NChG
SUxFICopOwojIDQxMiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0Cn0KIyA0NSAi
L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyA5NCAiL2hv
bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgZXh0ZXJuICJDIiBpbnQgcmVt
b3ZlKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGludCByZW5hbWUoY29uc3QgY2hhciosIGNv
bnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIEZJTEUqIHRtcGZpbGUodm9pZCk7CiAgZXh0ZXJuICJD
IiBjaGFyKiB0bXBuYW0oY2hhciopOwogIGV4dGVybiAiQyIgaW50IGZjbG9zZShGSUxFKik7CiAg
ZXh0ZXJuICJDIiBpbnQgZmZsdXNoKEZJTEUqKTsKICBleHRlcm4gIkMiIEZJTEUqIGZvcGVuKGNv
bnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBGSUxFKiBmcmVvcGVuKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKiwgRklMRSopOwogIGV4dGVybiAiQyIgdm9pZCBzZXRidWYoRklM
RSosIGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBzZXR2YnVmKEZJTEUqLCBjaGFyKiwgaW50LCBz
aXplX3QpOwogIGV4dGVybiAiQyIgaW50IGZwcmludGYoRklMRSosIGNvbnN0IGNoYXIqLCAuLi4p
OwogIGV4dGVybiAiQyIgaW50IGZzY2FuZihGSUxFKiwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0
ZXJuICJDIiBpbnQgcHJpbnRmKGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNj
YW5mKGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNucHJpbnRmKGNoYXIgKiwg
c2l6ZV90LCBjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBzcHJpbnRmKGNoYXIg
KiwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIq
LCBjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCB2ZnByaW50ZihGSUxFKiwgY29u
c3QgY2hhciosIHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZmc2NhbmYoRklMRSosIGNvbnN0
IGNoYXIqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2cHJpbnRmKGNvbnN0IGNoYXIqLCB2
YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2c2NhbmYoY29uc3QgY2hhciosIHZhX2xpc3QpOwog
IGV4dGVybiAiQyIgaW50IHZzbnByaW50ZihjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgdmFf
bGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnNwcmludGYoY2hhciosIGNvbnN0IGNoYXIqLCB2YV9s
aXN0KTsKICBleHRlcm4gIkMiIGludCB2c3NjYW5mKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwg
dmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgZmdldGMoRklMRSAqKTsKICBleHRlcm4gIkMiIGNo
YXIgKmZnZXRzKGNoYXIqLCBpbnQsIEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmcHV0YyhpbnQs
IEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmcHV0cyhjb25zdCBjaGFyKiwgRklMRSopOwogIGV4
dGVybiAiQyIgaW50IGdldGMoRklMRSopOwogIGV4dGVybiAiQyIgaW50IGdldGNoYXIodm9pZCk7
CiAgZXh0ZXJuICJDIiBjaGFyICpnZXRzKGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBwdXRjKGlu
dCwgRklMRSopOwogIGV4dGVybiAiQyIgaW50IHB1dGNoYXIoaW50KTsKICBleHRlcm4gIkMiIGlu
dCBwdXRzKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGludCB1bmdldGMoaW50LCBGSUxFKik7
CiAgZXh0ZXJuICJDIiBzaXplX3QgZnJlYWQodm9pZCosIHNpemVfdCwgc2l6ZV90LCBGSUxFKik7
CiAgZXh0ZXJuICJDIiBzaXplX3QgZndyaXRlKGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCwg
RklMRSopOwogIGV4dGVybiAiQyIgaW50IGZnZXRwb3MoRklMRSosIGZwb3NfdCopOwogIGV4dGVy
biAiQyIgaW50IGZzZWVrKEZJTEUqLCBsb25nIGludCwgaW50KTsKICBleHRlcm4gIkMiIGludCBm
c2V0cG9zKEZJTEUqLCBjb25zdCBmcG9zX3QqKTsKICBleHRlcm4gIkMiIGxvbmcgaW50IGZ0ZWxs
KEZJTEUqKTsKICBleHRlcm4gIkMiIHZvaWQgcmV3aW5kKEZJTEUqKTsKICBleHRlcm4gIkMiIHZv
aWQgY2xlYXJlcnIoRklMRSopOwogIGV4dGVybiAiQyIgaW50IGZlb2YoRklMRSopOwogIGV4dGVy
biAiQyIgaW50IGZlcnJvcihGSUxFKik7CiAgZXh0ZXJuICJDIiB2b2lkIHBlcnJvcihjb25zdCBj
aGFyKik7Cn0KIyA0MiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5o
IiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGFyZy5oIiAx
IDMKIyA0MyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMK
IyA0NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAi
L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyAxOCAiL2hvbWU1L2tyYWtvdy9n
bnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu
Y2x1ZGUvd2NoYXIuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl3Y2hhci5oCTEuMzMJOTkvMDgv
MzAgU01JIgoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDEgMyA0
CiMgMzAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CiNwcmFnbWEg
aWRlbnQgIkAoIyl3Y2hhcl9pc28uaAkxLjIJOTkvMTEvMTAgU01JIgoKIyAxICIvaG9tZTUva3Jh
a293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z
LjAvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDMzICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3Rh
Zy5oIiAxIDMgNAojIDM0ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDIg
MyA0CiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyX2ltcGwuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1
ZGUvd2NoYXJfaW1wbC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXdjaGFyX2ltcGwuaAkxLjMJ
OTkvMDcvMjYgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0CiMg
MTIgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CgoKCgp0
eXBlZGVmIHN0cnVjdCBfX21ic3RhdGVfdCB7CgoKCiAgICAgICAgaW50IF9fZmlsbGVyWzZdOwoK
fSBfX21ic3RhdGVfdDsKCgoKfQojIDM1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJf
aXNvLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2lzby90aW1lX2lzby5oIiAxIDMgNAojIDI4
ICIvdXNyL2luY2x1ZGUvaXNvL3RpbWVfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdGlt
ZV9pc28uaAkxLjEJOTkvMDgvMDkgU01JIgoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y
MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMv
ZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDMxICIvdXNyL2luY2x1ZGUvaXNvL3RpbWVfaXNvLmgi
IDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNTkgIi91c3IvaW5jbHVkZS9pc28vdGltZV9pc28uaCIg
MyA0CnR5cGVkZWYgbG9uZyBjbG9ja190OwoKCgoKdHlwZWRlZiBsb25nIHRpbWVfdDsKCgoKCnN0
cnVjdCB0bSB7CiAgICAgICAgaW50IHRtX3NlYzsKICAgICAgICBpbnQgdG1fbWluOwogICAgICAg
IGludCB0bV9ob3VyOwogICAgICAgIGludCB0bV9tZGF5OwogICAgICAgIGludCB0bV9tb247CiAg
ICAgICAgaW50IHRtX3llYXI7CiAgICAgICAgaW50IHRtX3dkYXk7CiAgICAgICAgaW50IHRtX3lk
YXk7CiAgICAgICAgaW50IHRtX2lzZHN0Owp9OwoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUoY29u
c3Qgc3RydWN0IHRtICopOwpleHRlcm4gY2xvY2tfdCBjbG9jayh2b2lkKTsKZXh0ZXJuIGNoYXIg
KmN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSh0aW1lX3QsIHRp
bWVfdCk7CmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiBz
dHJ1Y3QgdG0gKmxvY2FsdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiB0aW1lX3QgbWt0aW1l
KHN0cnVjdCB0bSAqKTsKZXh0ZXJuIHRpbWVfdCB0aW1lKHRpbWVfdCAqKTsKZXh0ZXJuIHNpemVf
dCBzdHJmdGltZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0g
Kik7CiMgMTEzICIvdXNyL2luY2x1ZGUvaXNvL3RpbWVfaXNvLmgiIDMgNAp9CiMgMzYgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMiAzIDQKCgoKCiMgMSAiL2hvbWU1L2ty
YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
My4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzIDQKIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu
MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNv
L3djaGFyX2lzby5oIiAyIDMgNAoKCgojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2N0eXBlLmgi
IDEgMyA0CiMgMjUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2N0eXBlLmgiIDMgNAojcHJhZ21hIGlk
ZW50ICJAKCMpY3R5cGUuaAkxLjMzCTk5LzA4LzEwIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL2lz
by9jdHlwZV9pc28uaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28uaCIg
MyA0CiNwcmFnbWEgaWRlbnQgIkAoIyljdHlwZV9pc28uaAkxLjEJOTkvMDgvMDkgU01JIgoKIyAx
ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDMxICIv
dXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDYzICIv
dXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAzIDQKZXh0ZXJuIGludCBpc2FsbnVtKGludCk7
CmV4dGVybiBpbnQgaXNhbHBoYShpbnQpOwpleHRlcm4gaW50IGlzY250cmwoaW50KTsKZXh0ZXJu
IGludCBpc2RpZ2l0KGludCk7CmV4dGVybiBpbnQgaXNncmFwaChpbnQpOwpleHRlcm4gaW50IGlz
bG93ZXIoaW50KTsKZXh0ZXJuIGludCBpc3ByaW50KGludCk7CmV4dGVybiBpbnQgaXNwdW5jdChp
bnQpOwpleHRlcm4gaW50IGlzc3BhY2UoaW50KTsKZXh0ZXJuIGludCBpc3VwcGVyKGludCk7CmV4
dGVybiBpbnQgaXN4ZGlnaXQoaW50KTsKCgoKCgoKCmV4dGVybiBpbnQgdG9sb3dlcihpbnQpOwpl
eHRlcm4gaW50IHRvdXBwZXIoaW50KTsKCgoKCgpleHRlcm4gdW5zaWduZWQgY2hhciBfX2N0eXBl
W107CmV4dGVybiB1bnNpZ25lZCBpbnQgKl9fY3R5cGVfbWFzazsKZXh0ZXJuIGludCAqX190cmFu
c191cHBlcjsKZXh0ZXJuIGludCAqX190cmFuc19sb3dlcjsKIyAxODYgIi91c3IvaW5jbHVkZS9p
c28vY3R5cGVfaXNvLmgiIDMgNAp9CiMgMjggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2N0eXBlLmgi
IDIgMyA0CiMgNTAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gIkMi
IHsKCgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaShpbnQpOwpleHRlcm4gaW50IHRvYXNjaWkoaW50
KTsKZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IF90b3VwcGVyKGludCk7CiMg
OTkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2N0eXBlLmgiIDMgNAp9CiMgNDUgIi9ob21lNS9rcmFr
b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
MC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMiAzIDQKIyAxICIvaG9tZTUva3Jha293L2dudS9s
b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzIDQKIyA0NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3djaGFyX2lz
by5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiMgNDkg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMiAzIDQKCgpleHRlcm4gIkMi
IHsKIyA3NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKdHlwZWRl
ZiBsb25nIHdpbnRfdDsKIyAxMTMgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28u
aCIgMyA0CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDEyNCAiL2hvbWU1L2tyYWtv
dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w
L2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKZXh0ZXJuIHdpbnRfdCBmZ2V0d2MoX19GSUxF
ICopOwpleHRlcm4gd2NoYXJfdCAqZmdldHdzKHdjaGFyX3QgKiwgaW50LCBfX0ZJTEUgKik7CmV4
dGVybiB3aW50X3QgZnB1dHdjKHdpbnRfdCwgX19GSUxFICopOwpleHRlcm4gaW50IGZwdXR3cyhj
b25zdCB3Y2hhcl90ICosIF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCB1bmdldHdjKHdpbnRfdCwg
X19GSUxFICopOwpleHRlcm4gd2ludF90IGdldHdjKF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBn
ZXR3Y2hhcih2b2lkKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Yyh3aW50X3QsIF9fRklMRSAqKTsKZXh0
ZXJuIHdpbnRfdCBwdXR3Y2hhcih3aW50X3QpOwpleHRlcm4gZG91YmxlIHdjc3RvZChjb25zdCB3
Y2hhcl90ICosIHdjaGFyX3QgKiopOwpleHRlcm4gbG9uZyB3Y3N0b2woY29uc3Qgd2NoYXJfdCAq
LCB3Y2hhcl90ICoqLCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyB3Y3N0b3VsKGNvbnN0IHdj
aGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCh3Y2hhcl90
ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwg
Y29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIGludCB3Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKiwgY29u
c3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdj
aGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzY3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdj
aGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzbGVuKGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3
Y2hhcl90ICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRl
cm4gaW50IHdjc25jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7
CmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXpl
X3QpOwpleHRlcm4gc2l6ZV90IHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg
Kik7CmV4dGVybiBzaXplX3Qgd2NzeGZybSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6
ZV90KTsKIyAxNjcgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CmV4
dGVybiB3Y2hhcl90ICp3Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKZXh0ZXJuIHdj
aGFyX3QgKndjc3BicmsoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4g
d2NoYXJfdCAqd2NzcmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOwojIDE4MyAiL2hvbWU1
L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4wL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKZXh0ZXJuIHdjaGFyX3QgKl9fd2Nz
dG9rX3hwZzUod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwpleHRlcm4g
c2l6ZV90IF9fd2NzZnRpbWVfeHBnNSh3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAq
LAogICAgICAgIGNvbnN0IHN0cnVjdCB0bSAqKTsKIyAxOTQgIi9ob21lNS9rcmFrb3cvZ251L2xv
Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl
L2lzby93Y2hhcl9pc28uaCIgMyA0CmV4dGVybiB3aW50X3QgYnRvd2MoaW50KTsKZXh0ZXJuIGlu
dCBmd3ByaW50ZihfX0ZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IGZ3
c2NhbmYoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJuIGludCBmd2lkZShf
X0ZJTEUgKiwgaW50KTsKZXh0ZXJuIGludCBtYnNpbml0KGNvbnN0IG1ic3RhdGVfdCAqKTsKZXh0
ZXJuIHNpemVfdCBtYnJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0
ZXJuIHNpemVfdCBtYnJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3Rh
dGVfdCAqKTsKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICoq
LCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIGludCBzd3ByaW50Zih3Y2hhcl90ICosIHNp
emVfdCwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IHN3c2NhbmYoY29uc3Qgd2No
YXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CmV4dGVybiBpbnQgdmZ3cHJpbnRmKF9fRklM
RSAqLCBjb25zdCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdndwcmludGYoY29u
c3Qgd2NoYXJfdCAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50IHZzd3ByaW50Zih3Y2hhcl90ICos
IHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gc2l6ZV90IHdjcnRv
bWIoY2hhciAqLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzcnRvbWJz
KGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CmV4dGVybiBp
bnQgd2N0b2Iod2ludF90KTsKZXh0ZXJuIGludCB3bWVtY21wKGNvbnN0IHdjaGFyX3QgKiwgY29u
c3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbWNweSh3Y2hhcl90ICos
IGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlKHdjaGFy
X3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbXNldCh3
Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7CmV4dGVybiBpbnQgd3ByaW50Zihjb25zdCB3Y2hh
cl90ICosIC4uLik7CmV4dGVybiBpbnQgd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKIyAy
MzAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CmV4dGVybiB3Y2hh
cl90ICp3Y3NzdHIoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gd2No
YXJfdCAqd21lbWNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7CiMgMzI5ICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDMgNApleHRlcm4gd2ludF90IF9f
ZmdldHdjX3hwZzUoX19GSUxFICopOwpleHRlcm4gd2ludF90IF9fZ2V0d2NfeHBnNShfX0ZJTEUg
Kik7CmV4dGVybiB3aW50X3QgX19nZXR3Y2hhcl94cGc1KHZvaWQpOwpleHRlcm4gd2ludF90IF9f
ZnB1dHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7CmV4dGVybiB3aW50X3QgX19wdXR3Y194cGc1
KHdpbnRfdCwgX19GSUxFICopOwpleHRlcm4gd2ludF90IF9fcHV0d2NoYXJfeHBnNSh3aW50X3Qp
OwpleHRlcm4gd2NoYXJfdCAqX19mZ2V0d3NfeHBnNSh3Y2hhcl90ICosIGludCwgX19GSUxFICop
OwpleHRlcm4gaW50IF9fZnB1dHdzX3hwZzUoY29uc3Qgd2NoYXJfdCAqLCBfX0ZJTEUgKik7CmV4
dGVybiB3aW50X3QgX191bmdldHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7CiMgMzY3ICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDMgNAp9CiMgMjEgIi9ob21lNS9rcmFr
b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
MC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CiMgOTAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw
MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3djaGFy
LmgiIDMgNApleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIGludCB3Y3R5cGVfdDsKCgoKCgoKZXh0
ZXJuIGludCBpc3dhbHBoYSh3aW50X3QpOwpleHRlcm4gaW50IGlzd3VwcGVyKHdpbnRfdCk7CmV4
dGVybiBpbnQgaXN3bG93ZXIod2ludF90KTsKZXh0ZXJuIGludCBpc3dkaWdpdCh3aW50X3QpOwpl
eHRlcm4gaW50IGlzd3hkaWdpdCh3aW50X3QpOwpleHRlcm4gaW50IGlzd2FsbnVtKHdpbnRfdCk7
CmV4dGVybiBpbnQgaXN3c3BhY2Uod2ludF90KTsKZXh0ZXJuIGludCBpc3dwdW5jdCh3aW50X3Qp
OwpleHRlcm4gaW50IGlzd3ByaW50KHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3Z3JhcGgod2ludF90
KTsKZXh0ZXJuIGludCBpc3djbnRybCh3aW50X3QpOwpleHRlcm4gaW50IGlzd2N0eXBlKHdpbnRf
dCwgd2N0eXBlX3QpOwpleHRlcm4gd2ludF90IHRvd2xvd2VyKHdpbnRfdCk7CmV4dGVybiB3aW50
X3QgdG93dXBwZXIod2ludF90KTsKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyhjb25zdCB3Y2hhcl90
ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2Nzd2lkdGgoY29uc3Qgd2NoYXJfdCAq
LCBzaXplX3QpOwpleHRlcm4gaW50IHdjd2lkdGgoY29uc3Qgd2NoYXJfdCk7CmV4dGVybiB3Y3R5
cGVfdCB3Y3R5cGUoY29uc3QgY2hhciAqKTsKIyAxNDkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2Fs
LjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3dj
aGFyLmgiIDMgNAp9CiMgNDcgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2No
YXIuaCIgMiAzCiMgNjIgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIu
aCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDQxICIvaG9tZTUv
a3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi9ob21lNS9rcmFr
b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
MC9pbmNsdWRlL2crKy9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9n
bnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RyaW5nZndkLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9j
YWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv
ZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdHJpbmdmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3Rk
CnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwK
ICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFz
cyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmluZzsKCgoK
fQojIDQyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDIgMwoj
IDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0
ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL2hv
bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMy4wL2luY2x1ZGUvZysrL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBz
dGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9f
dGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7
CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19s
b2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5k
ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFp
bHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDMgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw
MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF9pb3Nmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8PiBjbGFz
cyBjaGFyX3RyYWl0czxjaGFyPjsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVh
bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAg
ICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9
IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBl
bmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdz
dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19v
ZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g
Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
b3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKCgogIHRlbXBsYXRlPGNs
YXNzIF9TdGF0ZT4gc3RydWN0IGZwb3M7CgoKCgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBz
dHJlYW1wb3M7CgoKCgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBi
YXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxj
aGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJp
bmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFy
PiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3Ry
aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2lj
X2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4g
b2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CiMgMTQ3ICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDMKfQojIDQwICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9ob21lNS9rcmFr
b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
MC9pbmNsdWRlL2crKy9leGNlcHRpb24iIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2dudS9sb2Nh
bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n
KysvZXhjZXB0aW9uIiAzCiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMr
KyIgewoKbmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAg
IGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygp
IHsgfQogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoK
ICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg
ICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24o
KSB0aHJvdygpIHsgfQogIH07CgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAo
KTsKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKICB0ZXJtaW5hdGVf
aGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQg
dGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICB1bmV4cGVjdGVk
X2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygpOwogIHZv
aWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAgYm9vbCB1
bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgp9CiMgNDEgIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu
MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr
L2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw
MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i
aXRzL2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz
MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2N3Y2hhci5oIiAxIDMKIyA0MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY2hh
cl90cmFpdHMuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz
dHJpbmcuaCIgMSAzCiMgMzkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3Ry
aW5nLmgiIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw
MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF9jc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz
L3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGRfY3N0cmluZy5oIiAyIDMKIyA0MyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk
X2NzdHJpbmcuaCIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNAoj
IDI1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAo
IylzdHJpbmcuaAkxLjI0CTk5LzA4LzEwIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby9zdHJp
bmdfaXNvLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAzIDQK
I3ByYWdtYSBpZGVudCAiQCgjKXN0cmluZ19pc28uaAkxLjIJOTkvMTEvMDkgU01JIgoKCiMgMSAi
L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAzMiAiL3Vz
ci9pbmNsdWRlL2lzby9zdHJpbmdfaXNvLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNjAgIi91
c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAzIDQKZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qg
dm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lkICptZW1jcHkodm9pZCAq
LCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lkICptZW1tb3ZlKHZvaWQgKiwgY29u
c3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50LCBzaXpl
X3QpOwpleHRlcm4gY2hhciAqc3RyY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGlu
dCBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RyY3B5
KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBzdHJjb2xsKGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqKTsKZXh0ZXJuIHNpemVfdCBzdHJjc3BuKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cmVycm9yKGludCk7CmV4dGVybiBzaXplX3Qgc3RybGVu
KGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAq
LCBzaXplX3QpOwpleHRlcm4gaW50IHN0cm5jbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos
IHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJuY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXpl
X3QpOwpleHRlcm4gc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4
dGVybiBjaGFyICpzdHJ0b2soY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gc2l6ZV90IHN0
cnhmcm0oY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiMgMTEyICIvdXNyL2luY2x1ZGUv
aXNvL3N0cmluZ19pc28uaCIgMyA0CmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqLCBp
bnQsIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqLCBpbnQpOwpleHRl
cm4gY2hhciAqc3RycGJyayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFy
ICpzdHJyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7CiMgMTUxICIvdXNyL2luY2x1ZGUvaXNvL3N0cmluZ19pc28u
aCIgMyA0Cn0KIyAyOCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RyaW5nLmgiIDIgMyA0CiMgNjAg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0cmluZy5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoKCmV4
dGVybiBjaGFyICpzdHJ0b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CgoKCgpl
eHRlcm4gdm9pZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwoK
CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbChpbnQpOwpleHRlcm4gaW50IGZmcyhpbnQpOwpleHRl
cm4gaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50
IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4g
c2l6ZV90IHN0cmxjcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXpl
X3Qgc3RybGNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCgoKCgpleHRlcm4gY2hh
ciAqc3RyZHVwKGNvbnN0IGNoYXIgKik7CiMgMTIyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y
MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdHJp
bmcuaCIgMyA0Cn0KIyA0NCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdHJp
bmcuaCIgMiAzCiMgNjkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RyaW5n
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZXh0ZXJuICJDIiB2b2lkKiBtZW1jcHkodm9pZCosIGNv
bnN0IHZvaWQqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgdm9pZCogbWVtbW92ZSh2b2lkKiwgY29u
c3Qgdm9pZCosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBjaGFyKiBzdHJjcHkoY2hhciosIGNvbnN0
IGNoYXIqKTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cm5jcHkoY2hhciosIGNvbnN0IGNoYXIqLCBz
aXplX3QpOwogIGV4dGVybiAiQyIgY2hhciogc3RyY2F0KGNoYXIqLCBjb25zdCBjaGFyKik7CiAg
ZXh0ZXJuICJDIiBjaGFyKiBzdHJuY2F0KGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBl
eHRlcm4gIkMiIGludCBtZW1jbXAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOwog
IGV4dGVybiAiQyIgaW50IHN0cmNtcChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVy
biAiQyIgaW50IHN0cmNvbGwoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMi
IGludCBzdHJuY21wKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4g
IkMiIHNpemVfdCBzdHJ4ZnJtKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4g
IkMiIHZvaWQqIG1lbWNocihjb25zdCB2b2lkKiwgaW50LCBzaXplX3QpOwogIGV4dGVybiAiQyIg
Y2hhciogc3RyY2hyKGNvbnN0IGNoYXIqLCBpbnQpOwogIGV4dGVybiAiQyIgc2l6ZV90IHN0cmNz
cG4oY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cnBicmso
Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cnJjaHIoY29u
c3QgY2hhciosIGludCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIqLCBj
b25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBjaGFyKiBzdHJzdHIoY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqKTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cnRvayhjaGFyKiwgY29uc3QgY2hhciopOwog
IGV4dGVybiAiQyIgdm9pZCogbWVtc2V0KHZvaWQqLCBpbnQsIHNpemVfdCk7CiAgZXh0ZXJuICJD
IiBjaGFyKiBzdHJlcnJvcihpbnQpOwogIGV4dGVybiAiQyIgc2l6ZV90IHN0cmxlbihjb25zdCBj
aGFyKik7Cn0KIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY2hhcl90cmFpdHMu
aCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAxIDMKIyAz
OCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAzCgoKCgojIDEgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2lvLmgiIDEg
MwojIDM1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0
cy9jKytpby5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzIDQKIyAz
NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysr
aW8uaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzcg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2lv
LmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIu
OC9iaXRzL2MrK3RocmVhZHMuaCIgMSAzCiMgNDggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw
MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9z
cGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3RkIHsK
CiAgc3RydWN0IF9fbnVsbF9tdXRleHQgeyB9OwogIHR5cGVkZWYgX19udWxsX211dGV4dCBfX211
dGV4dF90eXBlOwoKfQojIDM4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxv
bmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgoKCgogIHR5cGVk
ZWYgZnBvc190IF9fY19zdHJlYW1wb3M7CgoKCgogIHR5cGVkZWYgaW50IF9fY19sb2NrOwoKCgoK
ICB0eXBlZGVmIEZJTEUgX19jX2ZpbGVfdHlwZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsK
ICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19k
ZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAw
NDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0g
MHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEw
MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBl
cmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVs
ZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
ZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4
MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4
MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQoj
IDQzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZCB7CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoKICAg
IHByaXZhdGU6CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdDsKICAgICAgc3RyZWFtb2ZmIF9NX29m
ZjsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0
KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX3N0KF9fc3RhdGVfdHlwZSgp
KSwgX01fb2ZmKHN0cmVhbW9mZigpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBf
X3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX3N0KF9fc3QpLCBf
TV9vZmYoX19vZmYpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1
cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29m
ZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAg
b3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29u
c3QgeyByZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBv
cGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdCB7IHJldHVybiBfTV9vZmYgIT0gX19w
b3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2Zm
IF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
U3RhdGU+CiAgICBpbmxpbmUgZnBvczxfU3RhdGU+CiAgICBvcGVyYXRvcisoY29uc3QgZnBvczxf
U3RhdGU+JiBfX3Bvcywgc3RyZWFtb2ZmIF9fb2ZmKQogICAgewogICAgICBmcG9zPF9TdGF0ZT4g
dChfX3Bvcyk7CiAgICAgIHJldHVybiB0ICs9IF9fb2ZmOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfU3RhdGU+CiAgICBpbmxpbmUgZnBvczxfU3RhdGU+CiAgICBvcGVyYXRvci0oY29uc3Qg
ZnBvczxfU3RhdGU+JiBfX3Bvcywgc3RyZWFtb2ZmIF9fb2ZmKQogICAgewogICAgICBmcG9zPF9T
dGF0ZT4gdChfX3Bvcyk7CiAgICAgIHJldHVybiB0IC09IF9fb2ZmOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfU3RhdGU+CiAgICBpbmxpbmUgc3RyZWFtb2ZmCiAgICBvcGVyYXRvci0oY29u
c3QgZnBvczxfU3RhdGU+JiBfX3BvczEsIGNvbnN0IGZwb3M8X1N0YXRlPiYgX19wb3MyKQogICAg
eyByZXR1cm4gX19wb3MxLl9NX3Bvc2l0aW9uKCkgLSBfX3BvczIuX01fcG9zaXRpb24oKTsgfQoK
fQojIDQyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMK
Cm5hbWVzcGFjZSBzdGQgewoKCgoKCgoKICAgIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVh
bXBvczsKIyA2MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY2hhcl90cmFpdHMuaCIg
MwogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0cwogICAgewog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBl
ZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlw
ZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0
IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJv
b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp
CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg
bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg
cmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u
c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg
ICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQogICAg
ICAgICAgaWYgKCFlcShfX3MxW19faV0sIF9fczJbX19pXSkpCiAgICAgICAgICAgIHJldHVybiBs
dChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAg
IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19z
KQogICAgICB7CiAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7CiAgICAgICAgd2hp
bGUgKCpfX3ApICsrX19wOwogICAgICAgIHJldHVybiAoX19wIC0gX19zKTsKICAgICAgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9f
cywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsKICAgICAgICBmb3Ig
KGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOyBzaXplX3QoX19wIC0gX19zKSA8IF9fbjsgKytf
X3ApCiAgICAgICAgICBpZiAoKl9fcCA9PSBfX2EpIHJldHVybiBfX3A7CiAgICAgICAgcmV0dXJu
IDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBl
KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJu
IChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUp
KTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEs
IGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gKGNoYXJf
dHlwZSopIG1lbWNweShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAg
ICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90
IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgewogICAgICAgIGZvciAoY2hhcl90eXBlKiBfX3Ag
PSBfX3M7IF9fcCA8IF9fcyArIF9fbjsgKytfX3ApCiAgICAgICAgICBhc3NpZ24oKl9fcCwgX19h
KTsKICAgICAgICByZXR1cm4gX19zOwogICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAg
ICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBjaGFy
X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNv
bnN0IGNoYXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBzdGF0
aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50
X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGlj
IGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7
IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBf
X2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gaW50X3R5cGUoMCkg
OiBfX2M7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNo
YXI+CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgaW50
IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRl
ZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7
CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29s
CiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQog
ICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0
KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJl
dHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0
IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAg
ICB7IHJldHVybiBtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVf
dAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHN0cmxl
bihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0
IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBf
X24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9f
czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAg
c3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf
dHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90
eXBlKj4obWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl
KgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2Ep
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwg
X19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0
IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19j
KTsgfQoKCgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hh
cl90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFf
aW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAg
ICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBl
b2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRp
YyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0
dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CiMgMjc4ICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9nKysvYml0cy9jaGFyX3RyYWl0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRjaAogICAg
ewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25z
dCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShfQ2hh
clQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQogICAgfTsK
Cn0KIyA0MiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAx
ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQzICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9ob21lNS9r
cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44
LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtv
dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w
L2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL2hvbWU1
L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrbG9jYWxlLmgi
IDEgMwojIDM2ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
Yml0cy9jKytsb2NhbGUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0eXBlZGVmIGludCogX19jX2xv
Y2FsZTsKfQojIDQxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVmd2QuaCIg
MiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAz
CiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbGltaXRzLmgiIDMKIyAx
ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMSAiL2hvbWU1L2tyYWtv
dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w
L2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5c2xpbWl0
cy5oIiAxIDMgNAojIDI1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0CiNw
cmFnbWEgaWRlbnQgIkAoIylsaW1pdHMuaAkxLjUxCTk5LzEwLzA4IFNNSSIKCiMgMSAiL2hvbWU1
L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4wL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAyOCAiL2hvbWU1L2ty
YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
My4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2Ff
ZGVmcy5oIiAxIDMgNAojIDI5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAz
IDQKIyAxICIvdXNyL2luY2x1ZGUvaXNvL2xpbWl0c19pc28uaCIgMSAzIDQKIyAyOCAiL3Vzci9p
bmNsdWRlL2lzby9saW1pdHNfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbGltaXRzX2lz
by5oCTEuMQk5OS8wOC8wOSBTTUkiCgoKZXh0ZXJuICJDIiB7CiMgNzUgIi91c3IvaW5jbHVkZS9p
c28vbGltaXRzX2lzby5oIiAzIDQKfQojIDMwICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXNsaW1p
dHMuaCIgMiAzIDQKIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAoj
IDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy9pbnRfbGltaXRzLmgiIDEgMyA0CiMgMTggIi9o
b21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzMuMC9pbmNsdWRlL3N5cy9pbnRfbGltaXRzLmgiIDMgNAojcHJhZ21hIGlkZW50ICJA
KCMpaW50X2xpbWl0cy5oCTEuNgk5OS8wOC8wNiBTTUkiCiMgNTMgIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL3N5cy9pbnRfbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMu
aCIgMSAzIDQKIyA1NCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMiAz
IDQKCgpleHRlcm4gIkMiIHsKIyAxNzEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy9pbnRfbGlt
aXRzLmgiIDMgNAp9CiMgNDIgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMg
NAoKCgpleHRlcm4gIkMiIHsKIyAyNDYgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5o
IiAzIDQKZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsKIyAyNjggIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL3N5c2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAxIDMg
NAojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgj
KXVuaXN0ZC5oCTEuMzcJOTgvMTAvMjggU01JIgoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2Nh
bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9z
eXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5o
IiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDI2NSAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIg
MyA0Cn0KIyAyNjkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMgNAojIDI3
OSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNApleHRlcm4gbG9uZyBfc3lz
Y29uZihpbnQpOwojIDI4OSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAp9
CiMgMTIgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDQxICIvaG9tZTUv
a3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2xpbWl0cy5oIiAyIDMKIyA0MiAiL2hvbWU1L2ty
YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
My4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cv
Z251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p
bmNsdWRlL2crKy9iaXRzL3N0ZF9zdHJpbmcuaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0ZF9zdHJpbmcuaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2Nh
bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n
Kysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL2hvbWU1L2ty
YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
My4wL2luY2x1ZGUvZysrL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQxICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL2crKy9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDQyICIvaG9tZTUva3Jha293L2dudS9s
b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk
ZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2Fs
LjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr
Ky9iaXRzL3N0ZF9pdGVyYXRvci5oIiAxIDMKIyAzMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu
MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAw
MTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvc3RsX2NvbmZpZy5oIiAxIDMKIyAzMyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz
MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9jc3RkZGVmLmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRf
aXRlcmF0b3IuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lv
c2Z3ZC5oIiAxIDMKIyAzNSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2l0ZXJh
dG9yLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlLmgiIDEgMwojIDM4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRl
cmF0b3JfYmFzZS5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2Vw
dF9jaGVja3MuaCIgMSAzCiMgMjMyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9jb25j
ZXB0X2NoZWNrcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfTXV0YWJsZV90cmFp
dCB7CiAgdHlwZWRlZiBfVHAgX1R5cGU7Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBf
TXV0YWJsZV90cmFpdDxjb25zdCBfVHA+IHsKICB0eXBlZGVmIF9UcCBfVHlwZTsKfTsKCgoKdGVt
cGxhdGUgPGNsYXNzIF9UeXBlPgp2b2lkIF9fc2lua191bnVzZWRfd2FybmluZyhfVHlwZSkgeyB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGVYLCBjbGFzcyBfVHlwZVk+CnN0cnVjdCBfU1RMX0NPTlZF
UlRfRVJST1IgewogIHN0YXRpYyB2b2lkCiAgX190eXBlX1hfaXNfbm90X2NvbnZlcnRpYmxlX3Rv
X3R5cGVfWShfVHlwZVggX194LCBfVHlwZVkpIHsKICAgIF9UeXBlWSBfX3kgPSBfX3g7CiAgICBf
X3NpbmtfdW51c2VkX3dhcm5pbmcoX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UeXBl
PiBzdHJ1Y3QgX19jaGVja19lcXVhbCB7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGVYLCBjbGFz
cyBfVHlwZVk+CnN0cnVjdCBfU1RMX1NBTUVfVFlQRV9FUlJPUiB7CiAgc3RhdGljIHZvaWQKICBf
X3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1koX1R5cGVYICwgX1R5cGVZICkgewogICAgX19jaGVj
a19lcXVhbDxfVHlwZVg+IHQxID0gX19jaGVja19lcXVhbDxfVHlwZVk+KCk7CiAgfQp9OwoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9GdW5jLCBjbGFzcyBfUmV0PgpzdHJ1Y3QgX1NUTF9HRU5FUkFUT1Jf
RVJST1IgewogIHN0YXRpYyBfUmV0IF9fZ2VuZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihf
RnVuYyYgX19mKSB7CiAgICByZXR1cm4gX19mKCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9G
dW5jPgpzdHJ1Y3QgX1NUTF9HRU5FUkFUT1JfRVJST1I8X0Z1bmMsIHZvaWQ+IHsKICBzdGF0aWMg
dm9pZCBfX2dlbmVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0Z1bmMmIF9fZikgewogICAg
X19mKCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xhc3MgX1JldCwgY2xhc3Mg
X0FyZz4Kc3RydWN0IF9TVExfVU5BUllfRlVOQ1RJT05fRVJST1IgewogIHN0YXRpYyBfUmV0CiAg
X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0Z1bmMmIF9fZiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FyZyYgX19hcmcpIHsK
ICAgIHJldHVybiBfX2YoX19hcmcpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xh
c3MgX0FyZz4Kc3RydWN0IF9TVExfVU5BUllfRlVOQ1RJT05fRVJST1I8X0Z1bmMsIHZvaWQsIF9B
cmc+IHsKICBzdGF0aWMgdm9pZAogIF9fdW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0
aW9uKF9GdW5jJiBfX2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9BcmcmIF9fYXJnKSB7CiAgICBfX2YoX19hcmcpOwogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfRnVuYywgY2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPgpzdHJ1
Y3QgX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1IgewogIHN0YXRpYyBfUmV0CiAgX19iaW5hcnlf
ZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9GdW5jJiBfX2YsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9GaXJzdCYgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1NlY29uZCYgX19zZWNv
bmQpIHsKICAgIHJldHVybiBfX2YoX19maXJzdCwgX19zZWNvbmQpOwogIH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfRnVuYywgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPgpzdHJ1Y3QgX1NUTF9C
SU5BUllfRlVOQ1RJT05fRVJST1I8X0Z1bmMsIHZvaWQsIF9GaXJzdCwgX1NlY29uZD4gewogIHN0
YXRpYyB2b2lkCiAgX19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9GdW5j
JiBfX2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9G
aXJzdCYgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsKICAgIF9fZihfX2ZpcnN0LCBfX3NlY29uZCk7CiAg
fQp9OwojIDMzOCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVja3Mu
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPiBz
dHJ1Y3QgX1NUTF9CSU5BUllfT1BfRVFVQUxfRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2Jp
bmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0
LCBjb25zdCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA9PSBfX3NlY29uZDsg
fSBzdGF0aWMgX1JldCBfX2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0Zp
cnN0JiBfX2ZpcnN0LCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA9PSBfX3Nl
Y29uZDsgfSB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vj
b25kPiBzdHJ1Y3QgX1NUTF9CSU5BUllfT1BfTk9UX0VRVUFMX0VSUk9SIHsgc3RhdGljIF9SZXQg
X19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKGNvbnN0IF9GaXJz
dCYgX19maXJzdCwgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmlyc3QgIT0g
X19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmly
c3QgIT0gX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJzdCwg
Y2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX0xFU1NfVEhBTl9FUlJPUiB7IHN0
YXRpYyBfUmV0IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihj
b25zdCBfRmlyc3QmIF9fZmlyc3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBf
X2ZpcnN0IDwgX19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0
dXJuIF9fZmlyc3QgPCBfX3NlY29uZDsgfSB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X0ZpcnN0LCBjbGFzcyBfU2Vjb25kPiBzdHJ1Y3QgX1NUTF9CSU5BUllfT1BfTEVTU19FUVVBTF9F
UlJPUiB7IHN0YXRpYyBfUmV0IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbihjb25zdCBfRmlyc3QmIF9fZmlyc3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7
IHJldHVybiBfX2ZpcnN0IDw9IF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vj
b25kKSB7IHJldHVybiBfX2ZpcnN0IDw9IF9fc2Vjb25kOyB9IH07CnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+IHN0cnVjdCBfU1RMX0JJTkFSWV9PUF9H
UkVBVEVSX1RIQU5fRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25k
JiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA+IF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9f
YmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9T
ZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0ID4gX19zZWNvbmQ7IH0gfTsKdGVtcGxh
dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExf
QklOQVJZX09QX0dSRUFURVJfRVFVQUxfRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFy
eV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBj
b25zdCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA+PSBfX3NlY29uZDsgfSBz
dGF0aWMgX1JldCBfX2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0ZpcnN0
JiBfX2ZpcnN0LCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA+PSBfX3NlY29u
ZDsgfSB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25k
PiBzdHJ1Y3QgX1NUTF9CSU5BUllfT1BfUExVU19FUlJPUiB7IHN0YXRpYyBfUmV0IF9fY29uc3Rf
YmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihjb25zdCBfRmlyc3QmIF9fZmly
c3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0ICsgX19zZWNvbmQ7
IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9G
aXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmlyc3QgKyBfX3Nl
Y29uZDsgfSB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vj
b25kPiBzdHJ1Y3QgX1NUTF9CSU5BUllfT1BfVElNRVNfRVJST1IgeyBzdGF0aWMgX1JldCBfX2Nv
bnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBf
X2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCAqIF9fc2Vj
b25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0ICog
X19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJzdCwgY2xhc3Mg
X1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX0RJVklERV9FUlJPUiB7IHN0YXRpYyBfUmV0
IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihjb25zdCBfRmly
c3QmIF9fZmlyc3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0IC8g
X19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmly
c3QgLyBfX3NlY29uZDsgfSB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBj
bGFzcyBfU2Vjb25kPiBzdHJ1Y3QgX1NUTF9CSU5BUllfT1BfU1VCVFJBQ1RfRVJST1IgeyBzdGF0
aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oY29u
c3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19m
aXJzdCAtIF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVy
biBfX2ZpcnN0IC0gX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9G
aXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX01PRF9FUlJPUiB7IHN0
YXRpYyBfUmV0IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihj
b25zdCBfRmlyc3QmIF9fZmlyc3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJldHVybiBf
X2ZpcnN0ICUgX19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0
dXJuIF9fZmlyc3QgJSBfX3NlY29uZDsgfSB9OwojIDM2MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9j
YWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv
ZysrL2JpdHMvY29uY2VwdF9jaGVja3MuaCIgMwpzdHJ1Y3QgX1NUTF9FUlJPUiB7CgogIHRlbXBs
YXRlIDxjbGFzcyBfVHlwZT4KICBzdGF0aWMgX1R5cGUKICBfX2RlZmF1bHRfY29uc3RydWN0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlKSB7CiAgICByZXR1cm4gX1R5cGUoKTsKICB9CiAg
dGVtcGxhdGUgPGNsYXNzIF9UeXBlPgogIHN0YXRpYyBfVHlwZQogIF9fYXNzaWdubWVudF9vcGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX1R5cGUgX19hKSB7CiAgICBfX2EgPSBfX2E7CiAg
ICByZXR1cm4gX19hOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CiAgc3RhdGljIF9UeXBl
CiAgX19jb3B5X2NvbnN0cnVjdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfVHlwZSBfX2EpIHsK
ICAgIF9UeXBlIF9fYyhfX2EpOwogICAgcmV0dXJuIF9fYzsKICB9CiAgdGVtcGxhdGUgPGNsYXNz
IF9UeXBlPgogIHN0YXRpYyBfVHlwZQogIF9fY29uc3RfcGFyYW1ldGVyX3JlcXVpcmVkX2Zvcl9j
b3B5X2NvbnN0cnVjdG9yKF9UeXBlICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHlwZSYgX19iKSB7CiAgICBfVHlwZSBfX2MoX19iKTsK
ICAgIHJldHVybiBfX2M7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfVHlwZT4KICBzdGF0aWMgX1R5
cGUKICBfX2NvbnN0X3BhcmFtZXRlcl9yZXF1aXJlZF9mb3JfYXNzaWdubWVudF9vcGVyYXRvcihf
VHlwZSBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1R5cGUmIF9fYikgewogICAgX19hID0gX19iOwogICAgcmV0dXJuIF9fYTsK
ICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UeXBlPgogIHN0YXRpYyBfVHlwZQogIF9fbGVzc190aGFu
X2NvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSwgX1R5cGUgX19iKSB7
CiAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19hOwogICAgcmV0dXJuIF9fYjsKICB9CiAgdGVt
cGxhdGUgPGNsYXNzIF9UeXBlPgogIHN0YXRpYyBfVHlwZQogIF9fZXF1YWxpdHlfY29tcGFyYWJs
ZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX1R5cGUgX19hLCBfVHlwZSBfX2IpIHsKICAgIGlmIChf
X2EgPT0gX19iIHx8IF9fYSAhPSBfX2IpIHJldHVybiBfX2E7CiAgICByZXR1cm4gX19iOwogIH0K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgogIHN0YXRpYyB2b2lkCiAgX19kZXJlZmVyZW5j
ZV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSkgewogICAgX19z
aW5rX3VudXNlZF93YXJuaW5nKCpfX2kpOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y
PgogIHN0YXRpYyB2b2lkCiAgX19kZXJlZmVyZW5jZV9vcGVyYXRvcl9hbmRfYXNzaWdubWVudF9y
ZXF1aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSkgewogICAgKl9faSA9ICpfX2k7CiAg
fQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CiAgc3RhdGljIHZvaWQKICBfX3ByZWluY3Jl
bWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSkgewogICAg
KytfX2k7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CiAgc3RhdGljIHZvaWQKICBf
X3Bvc3RpbmNyZW1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVyYXRvciBf
X2kpIHsKICAgIF9faSsrOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgogIHN0YXRp
YyB2b2lkCiAgX19wcmVkZWNyZW1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9J
dGVyYXRvciBfX2kpIHsKICAgIC0tX19pOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y
PgogIHN0YXRpYyB2b2lkCiAgX19wb3N0ZGVjcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbihfSXRlcmF0b3IgX19pKSB7CiAgICBfX2ktLTsKICB9CiAgdGVtcGxhdGUgPGNsYXNz
IF9JdGVyYXRvciwgY2xhc3MgX1R5cGU+CiAgc3RhdGljIHZvaWQKICBfX3Bvc3RpbmNyZW1lbnRf
b3BlcmF0b3JfYW5kX2Fzc2lnbm1lbnRfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVyYXRvciBf
X2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfVHlwZSBfX3QpIHsKICAgICpfX2krKyA9IF9fdDsKICB9CiAgdGVtcGxhdGUg
PGNsYXNzIF9JdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgogIHN0YXRpYyBfSXRlcmF0b3IKICBf
X2l0ZXJhdG9yX2FkZGl0aW9uX2Fzc2lnbm1lbnRfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVy
YXRvciBfX2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UgX19uKSB7CiAgICBfX2kgKz0gX19uOwogICAgcmV0dXJuIF9faTsK
ICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgogIHN0YXRp
YyBfSXRlcmF0b3IKICBfX2l0ZXJhdG9yX2FkZGl0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihf
SXRlcmF0b3IgX19pLCBfRGlzdGFuY2UgX19uKSB7CiAgICBfX2kgPSBfX2kgKyBfX247CiAgICBf
X2kgPSBfX24gKyBfX2k7CiAgICByZXR1cm4gX19pOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CiAgc3RhdGljIF9JdGVyYXRvcgogIF9faXRlcmF0b3Jf
c3VidHJhY3Rpb25fYXNzaWdubWVudF9yZXF1aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9f
aSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX24pIHsKICAgIF9faSAtPSBfX247CiAgICByZXR1cm4gX19pOwogIH0K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CiAgc3RhdGljIF9J
dGVyYXRvcgogIF9faXRlcmF0b3Jfc3VidHJhY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9J
dGVyYXRvciBfX2ksIF9EaXN0YW5jZSBfX24pIHsKICAgIF9faSA9IF9faSAtIF9fbjsKICAgIHJl
dHVybiBfX2k7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j
ZT4KICBzdGF0aWMgX0Rpc3RhbmNlCiAgX19kaWZmZXJlbmNlX29wZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbihfSXRlcmF0b3IgX19pLCBfSXRlcmF0b3IgX19qLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikgewogICAgX19uID0g
X19pIC0gX19qOwogICAgcmV0dXJuIF9fbjsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9FeHAsIGNs
YXNzIF9UeXBlLCBjbGFzcyBfRGlzdGFuY2U+CiAgc3RhdGljIF9UeXBlCiAgX19lbGVtZW50X2Fj
Y2Vzc19vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0V4cCBfX3gsIF9UeXBlKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug
X19uKSB7CiAgICByZXR1cm4gX194W19fbl07CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfRXhwLCBj
bGFzcyBfVHlwZSwgY2xhc3MgX0Rpc3RhbmNlPgogIHN0YXRpYyB2b2lkCiAgX19lbGVtZW50X2Fz
c2lnbm1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9FeHAgX194LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHlwZSogX190
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2UgX19uKSB7CiAgICBfX3hbX19uXSA9ICpfX3Q7CiAgfQoKfTsKCgoKbmFtZXNwYWNl
IHN0ZCB7CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+IHN0cnVjdCBpdGVyYXRvcl90cmFpdHM7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4Kc3RydWN0IF9fdmFsdWVfdHlwZV90eXBlX2RlZmlu
aXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsKICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRl
cmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9JdGVyPgpzdHJ1Y3QgX19kaWZmZXJlbmNlX3R5cGVfdHlwZV9kZWZpbml0aW9uX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbiB7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3Ry
YWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgpzdHJ1Y3QgX19yZWZlcmVuY2VfdHlwZV9kZWZpbml0
aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJh
dG9yX3RyYWl0czxfSXRlcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0l0ZXI+CnN0cnVjdCBfX3BvaW50ZXJfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbiB7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcj46
OnBvaW50ZXIgcG9pbnRlcjsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4Kc3RydWN0IF9faXRl
cmF0b3JfY2F0ZWdvcnlfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7CiAg
dHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2Nh
dGVnb3J5CiAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFz
cyBfVHlwZT4Kc3RydWN0IF9Bc3NpZ25hYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7CiAgc3Rh
dGljIHZvaWQgX0Fzc2lnbmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSkgewog
ICAgX1NUTF9FUlJPUjo6X19hc3NpZ25tZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bihfX2EpOwogICAgX1NUTF9FUlJPUjo6X19jb3B5X2NvbnN0cnVjdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbihfX2EpOwogICAgX1NUTF9FUlJPUjo6X19jb25zdF9wYXJhbWV0ZXJfcmVxdWlyZWRf
Zm9yX2NvcHlfY29uc3RydWN0b3IoX19hLF9fYSk7CiAgICBfU1RMX0VSUk9SOjpfX2NvbnN0X3Bh
cmFtZXRlcl9yZXF1aXJlZF9mb3JfYXNzaWdubWVudF9vcGVyYXRvcihfX2EsX19hKTsKICB9Cn07
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CnN0cnVjdCBfRGVmYXVsdENvbnN0cnVjdGlibGVf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uIHsKICBzdGF0aWMgdm9pZCBfRGVmYXVsdENvbnN0cnVjdGli
bGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSkgewogICAgX1NUTF9FUlJPUjo6X19k
ZWZhdWx0X2NvbnN0cnVjdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2EpOwogIH0KfTsKCgoK
dGVtcGxhdGUgPGNsYXNzIF9UeXBlPgpzdHJ1Y3QgX0VxdWFsaXR5Q29tcGFyYWJsZV9jb25jZXB0
X3NwZWNpZmljYXRpb24gewogIHN0YXRpYyB2b2lkIF9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSkgewogICAgX1NUTF9FUlJPUjo6X19lcXVhbGl0eV9j
b21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2EsIF9fYSk7CiAgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHlwZT4Kc3RydWN0IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVj
aWZpY2F0aW9uIHsKICBzdGF0aWMgdm9pZCBfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbihfVHlwZSBfX2EpIHsKICAgIF9TVExfRVJST1I6Ol9fbGVzc190aGFuX2NvbXBh
cmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9fYSwgX19hKTsKICB9Cn07CgoKCnRlbXBsYXRl
IDxjbGFzcyBfVHJpdmlhbEl0ZXJhdG9yPgpzdHJ1Y3QgX1RyaXZpYWxJdGVyYXRvcl9jb25jZXB0
X3NwZWNpZmljYXRpb24gewpzdGF0aWMgdm9pZApfVHJpdmlhbEl0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbihfVHJpdmlhbEl0ZXJhdG9yIF9faSkgewogIHR5cGVkZWYgdHlwZW5hbWUKICAg
IF9fdmFsdWVfdHlwZV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9Ucml2
aWFsSXRlcmF0b3I+OjoKICAgIHZhbHVlX3R5cGUgX19UOwoKICBfQXNzaWduYWJsZV9jb25jZXB0
X3NwZWNpZmljYXRpb248X1RyaXZpYWxJdGVyYXRvcj46OgogICAgX0Fzc2lnbmFibGVfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uKF9faSk7CgogIF9EZWZhdWx0Q29uc3RydWN0aWJsZV9jb25jZXB0X3Nw
ZWNpZmljYXRpb248X1RyaXZpYWxJdGVyYXRvcj46OgogICAgX0RlZmF1bHRDb25zdHJ1Y3RpYmxl
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwoKICBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjxfVHJpdmlhbEl0ZXJhdG9yPjo6CiAgICBfRXF1YWxpdHlDb21wYXJh
YmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwoKICBfU1RMX0VSUk9SOjpfX2RlcmVmZXJl
bmNlX29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwp9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RyaXZpYWxJdGVyYXRvcj4Kc3RydWN0IF9NdXRhYmxlX1RyaXZpYWxJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb24gewpzdGF0aWMgdm9pZApfTXV0YWJsZV9Ucml2aWFsSXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9Ucml2aWFsSXRlcmF0b3IgX19pKSB7CiAgX1RyaXZp
YWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248X1RyaXZpYWxJdGVyYXRvcj46OgogICAg
X1RyaXZpYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX1NUTF9FUlJP
Ujo6X19kZXJlZmVyZW5jZV9vcGVyYXRvcl9hbmRfYXNzaWdubWVudF9yZXF1aXJlbWVudF92aW9s
YXRpb24oX19pKTsKfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnN0cnVj
dCBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb24gewpzdGF0aWMgdm9pZApfSW5w
dXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0lucHV0SXRlcmF0b3IgX19pKSB7Cgog
IF9Ucml2aWFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9JbnB1dEl0ZXJhdG9yPjo6
CiAgICBfVHJpdmlhbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwoKICBfX2Rp
ZmZlcmVuY2VfdHlwZV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9JbnB1
dEl0ZXJhdG9yPigpOwogIF9fcmVmZXJlbmNlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92
aW9sYXRpb248X0lucHV0SXRlcmF0b3I+KCk7CiAgX19wb2ludGVyX3R5cGVfZGVmaW5pdGlvbl9y
ZXF1aXJlbWVudF92aW9sYXRpb248X0lucHV0SXRlcmF0b3I+KCk7CiAgX19pdGVyYXRvcl9jYXRl
Z29yeV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9JbnB1dEl0ZXJhdG9y
PigpOwoKICBfU1RMX0VSUk9SOjpfX3ByZWluY3JlbWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb24oX19pKTsKICBfU1RMX0VSUk9SOjpfX3Bvc3RpbmNyZW1lbnRfb3BlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7Cn0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJ
dGVyYXRvcj4Kc3RydWN0IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb24gewpz
dGF0aWMgdm9pZApfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9PdXRwdXRJ
dGVyYXRvciBfX2kpIHsKCiAgX0Fzc2lnbmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9PdXRw
dXRJdGVyYXRvcj46OgogICAgX0Fzc2lnbmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7
CgogIF9faXRlcmF0b3JfY2F0ZWdvcnlfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjxfT3V0cHV0SXRlcmF0b3I+KCk7CgogIF9TVExfRVJST1I6Ol9fZGVyZWZlcmVuY2Vfb3Bl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CiAgX1NUTF9FUlJPUjo6X19wcmVpbmNy
ZW1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CiAgX1NUTF9FUlJPUjo6
X19wb3N0aW5jcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwogIF9T
VExfRVJST1I6OgogICAgX19wb3N0aW5jcmVtZW50X29wZXJhdG9yX2FuZF9hc3NpZ25tZW50X3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbihfX2ksICpfX2kpOwp9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXJhdG9yPgpzdHJ1Y3QgX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb24gewpzdGF0aWMgdm9pZApfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bihfRm9yd2FyZEl0ZXJhdG9yIF9faSkgewoKICBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248X0ZvcndhcmRJdGVyYXRvcj46OgogICAgX0lucHV0SXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uKF9faSk7Cn0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
PgpzdHJ1Y3QgX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7
CnN0YXRpYyB2b2lkCl9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b24oX0ZvcndhcmRJdGVyYXRvciBfX2kpIHsKICBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbjxfRm9yd2FyZEl0ZXJhdG9yPjo6CiAgICBfRm9yd2FyZEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbihfX2kpOwoKICBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZp
Y2F0aW9uPF9Gb3J3YXJkSXRlcmF0b3I+OjoKICAgIF9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb24oX19pKTsKfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyYXRvcj4Kc3RydWN0IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0
aW9uIHsKc3RhdGljIHZvaWQKX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2kpIHsKCiAgX0ZvcndhcmRJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb248X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OgogICAgX0Zvcndh
cmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX1NUTF9FUlJPUjo6X19w
cmVkZWNyZW1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CiAgX1NUTF9F
UlJPUjo6X19wb3N0ZGVjcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kp
Owp9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4Kc3RydWN0IF9N
dXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb24gewpzdGF0
aWMgdm9pZApfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uKAogICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2kpCnsKICBfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6
CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwoK
ICBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3I+OjoKICAgIF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb24oX19pKTsKICB0eXBlZGVmIHR5cGVuYW1lCiAgICBfX3ZhbHVlX3R5cGVfdHlw
ZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjwKICAgIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3I+Ojp2YWx1ZV90eXBlIF9fVDsKICB0eXBlbmFtZSBfTXV0YWJsZV90cmFpdDxfX1Q+Ojpf
VHlwZSogX190bXBfcHRyID0gMDsKCiAgX1NUTF9FUlJPUjo6CiAgICBfX3Bvc3RpbmNyZW1lbnRf
b3BlcmF0b3JfYW5kX2Fzc2lnbm1lbnRfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKl9fdG1wX3B0cik7Cn0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kQWNjSXRlcj4Kc3Ry
dWN0IF9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb24gewpzdGF0aWMg
dm9pZApfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9SYW5kQWNj
SXRlciBfX2kpIHsKCiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248X1JhbmRBY2NJdGVyPjo6CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbihfX2kpOwoKICBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjxfUmFuZEFjY0l0ZXI+OjoKICAgIF9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uKF9faSk7CiAgdHlwZWRlZiB0eXBlbmFtZQogICAgICAgIF9fdmFsdWVfdHlwZV90
eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9SYW5kQWNjSXRlcj4KICAgICAg
ICA6OnZhbHVlX3R5cGUKICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZQogICAgICAg
IF9fZGlmZmVyZW5jZV90eXBlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb248
X1JhbmRBY2NJdGVyPgogICAgICAgIDo6ZGlmZmVyZW5jZV90eXBlCiAgICBfRGlzdDsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9NdXRhYmxlX3RyYWl0PF9EaXN0Pjo6X1R5cGUgX011dERpc3Q7CgoKICBf
U1RMX0VSUk9SOjpfX2l0ZXJhdG9yX2FkZGl0aW9uX2Fzc2lnbm1lbnRfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uKF9faSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9NdXREaXN0KCkpOwogIF9TVExfRVJST1I6Ol9faXRlcmF0
b3JfYWRkaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTXV0RGlzdCgpKTsKICBfU1RM
X0VSUk9SOjoKICAgIF9faXRlcmF0b3Jfc3VidHJhY3Rpb25fYXNzaWdubWVudF9yZXF1aXJlbWVu
dF92aW9sYXRpb24oX19pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfTXV0RGlzdCgpKTsKICBfU1RMX0VSUk9SOjpfX2l0ZXJhdG9y
X3N1YnRyYWN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2ksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX011dERpc3QoKSk7CiAg
X1NUTF9FUlJPUjo6X19kaWZmZXJlbmNlX29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihf
X2ksIF9faSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9NdXREaXN0KCkpOwogIHR5cGVuYW1lIF9NdXRhYmxlX3RyYWl0PHZhbHVlX3R5
cGU+OjpfVHlwZSogX19kdW1teV9wdHIgPSAwOwogIF9TVExfRVJST1I6Ol9fZWxlbWVudF9hY2Nl
c3Nfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2R1bW15X3B0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTXV0RGlzdCgpKTsKfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kQWNjSXRlcj4Kc3Ry
dWN0IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7
CnN0YXRpYyB2b2lkCl9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbihfUmFuZEFjY0l0ZXIgX19pKQp7CiAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjxfUmFuZEFjY0l0ZXI+OjoKICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv
cl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX011dGFibGVfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfUmFuZEFjY0l0ZXI+OjoKICAgIF9NdXRhYmxl
X0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKICB0eXBl
ZGVmIHR5cGVuYW1lCiAgICAgICAgX192YWx1ZV90eXBlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJl
bWVudF92aW9sYXRpb248X1JhbmRBY2NJdGVyPgogICAgICAgIDo6dmFsdWVfdHlwZQogICAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lCiAgICAgICAgX19kaWZmZXJlbmNlX3R5cGVfdHlw
ZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfUmFuZEFjY0l0ZXI+CiAgICAgICAg
OjpkaWZmZXJlbmNlX3R5cGUKICAgIF9EaXN0OwoKICB0eXBlbmFtZSBfTXV0YWJsZV90cmFpdDx2
YWx1ZV90eXBlPjo6X1R5cGUqIF9fdG1wX3B0ciA9IDA7CgogIF9TVExfRVJST1I6Ol9fZWxlbWVu
dF9hc3NpZ25tZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2ksCiAgICAgICAg
ICAgICAgICAgIF9fdG1wX3B0ciwgX0Rpc3QoKSk7Cn0KfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFz
cyBUeXBlPiBzdHJ1Y3QgX192YWx1ZV90eXBlX190eXBlZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlv
biB7IHR5cGVkZWYgdHlwZW5hbWUgVHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOyB9Owp0ZW1w
bGF0ZSA8Y2xhc3MgVHlwZT4gc3RydWN0IF9fZGlmZmVyZW5jZV90eXBlX190eXBlZGVmX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbiB7IHR5cGVkZWYgdHlwZW5hbWUgVHlwZTo6ZGlmZmVyZW5jZV90eXBl
IGRpZmZlcmVuY2VfdHlwZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IHN0cnVjdCBfX3NpemVf
dHlwZV9fdHlwZWRlZl9yZXF1aXJlbWVudF92aW9sYXRpb24geyB0eXBlZGVmIHR5cGVuYW1lIFR5
cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7IH07CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBzdHJ1Y3Qg
X19yZWZlcmVuY2VfX3R5cGVkZWZfcmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsgdHlwZWRlZiB0eXBl
bmFtZSBUeXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4g
c3RydWN0IF9fY29uc3RfcmVmZXJlbmNlX190eXBlZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7
IHR5cGVkZWYgdHlwZW5hbWUgVHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsg
fTsKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IHN0cnVjdCBfX3BvaW50ZXJfX3R5cGVkZWZfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uIHsgdHlwZWRlZiB0eXBlbmFtZSBUeXBlOjpwb2ludGVyIHBvaW50ZXI7
IH07CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBzdHJ1Y3QgX19jb25zdF9wb2ludGVyX190eXBlZGVm
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7IHR5cGVkZWYgdHlwZW5hbWUgVHlwZTo6Y29uc3RfcG9p
bnRlciBjb25zdF9wb2ludGVyOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CnN0cnVjdCBf
QWxsb2NhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7CnN0YXRpYyB2b2lkCl9BbGxvY2F0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9BbGxvYyBfX2EpIHsKCiAgX0RlZmF1bHRDb25zdHJ1Y3Rp
YmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfQWxsb2M+OjoKICAgIF9EZWZhdWx0Q29uc3RydWN0
aWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX19hKTsKCiAgX0VxdWFsaXR5Q29tcGFyYWJsZV9j
b25jZXB0X3NwZWNpZmljYXRpb248X0FsbG9jPjo6CiAgICBfRXF1YWxpdHlDb21wYXJhYmxlX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbihfX2EpOwoKICBfX3ZhbHVlX3R5cGVfX3R5cGVkZWZfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uPF9BbGxvYz4oKTsKICBfX2RpZmZlcmVuY2VfdHlwZV9fdHlwZWRlZl9y
ZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIF9fc2l6ZV90eXBlX190eXBlZGVmX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjxfQWxsb2M+KCk7CiAgX19yZWZlcmVuY2VfX3R5cGVkZWZfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uPF9BbGxvYz4oKTsKICBfX2NvbnN0X3JlZmVyZW5jZV9fdHlwZWRl
Zl9yZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIF9fcG9pbnRlcl9fdHlwZWRlZl9y
ZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIF9fY29uc3RfcG9pbnRlcl9fdHlwZWRl
Zl9yZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jOjp2YWx1ZV90eXBlIF9UcDsKCgp9Cn07CiMgMzkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2Fs
LjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7CgpzdHJ1Y3Qg
aW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3Ry
dWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsK
c3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0
b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIGlucHV0X2l0
ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRl
cjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3RydWN0IG91dHB1dF9pdGVyYXRvciB7
CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk
ZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3Igewog
IHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl
ZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZl
cmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5
cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9DYXRlZ29yeSwgY2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICBjbGFzcyBfUG9p
bnRlciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmPgpzdHJ1Y3QgaXRlcmF0b3Igewog
IHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Bv
aW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5
cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5cGVkZWYg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBf
VHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsK
fTsKIyAxNDIgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNl
LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBf
SXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJh
dG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBz
dGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikK
ewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2
YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVn
b3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsg
fQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19p
KSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFs
dWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoj
IDI2NyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2UuaCIg
Mwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJh
dG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19u
OyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZykKewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0g
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yID4gOjpfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv
aWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewogIGRvIHsgdm9pZCAoKl9f
eCkoIF9JbnB1dEl0ZXJhdG9yICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9JbnB1dEl0ZXJhdG9yID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs
IF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
YXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7
CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwogIH0K
ICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpp
bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnKSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yICkg
PSBfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgPiA6Ol9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAg
ICBfQ2F0ZWdvcnk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcmF0b3IgKSA9IF9JbnB1
dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcmF0b3IgPiA6Ol9JbnB1
dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf
X2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90
YWcpIHsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNl
KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgZG8geyB2b2lkICgqX194
KSggX0JpZGlyZWN0aW9uYWxJdGVyYXRvciApID0gX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25j
ZXB0X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgPiA6Ol9CaWRpcmVjdGlv
bmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIGlmIChfX24gPj0gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hp
bGUgKF9fbisrKSAtLV9faTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgKSA9IF9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9SYW5kb21BY2Nlc3NJdGVyYXRvciA+IDo6X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfX2kgKz0gX19uOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKSB7CiAgZG8g
eyB2b2lkICgqX194KSggX0lucHV0SXRlcmF0b3IgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcmF0b3IgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfX2FkdmFuY2UoX19pLCBf
X24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9Cgp9CiMgMzYgIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9s
b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk
ZS9nKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgMzQgIi9ob21lNS9rcmFrb3cvZ251L2xv
Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQgewoKCnRlbXBsYXRlIDxj
bGFzcyBfQ29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoK
ICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29u
dGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsK
CiAgZXhwbGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRh
aW5lcigmX194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJh
dG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAg
ICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
YmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0
aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7
IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKIyA3MSAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+
CmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBiYWNrX2luc2VydGVyKF9D
b250YWluZXImIF9feCkgewogIHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgog
IHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0
eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3Io
X0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2luc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6
dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsg
fQp9OwojIDExMCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJu
IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0NvbnRhaW5lcj4KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250
YWluZXIqIGNvbnRhaW5lcjsKICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpw
dWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0
cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2lu
dGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGluc2VydF9pdGVyYXRvcihfQ29udGFp
bmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgIDogY29udGFp
bmVyKCZfX3gpLCBpdGVyKF9faSkge30KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAg
b3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUp
IHsKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICsraXRl
cjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKIyAxNTIgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfQ29udGFpbmVyLCBjbGFzcyBfSXRlcmF0b3I+CmlubGluZQppbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9
IF9UcCYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+CmNsYXNzIHJldmVy
c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9u
YWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gX1NlbGY7CnBy
b3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBl
ZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7Cgog
IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9i
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194KQogICAgOiBj
dXJyZW50KF9feCkge30KICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25zdCB7IHJl
dHVybiBjdXJyZW50OyB9CiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsK
ICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkp
OyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0
aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhp
czsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9y
LS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJh
dG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAg
cmV0dXJuIF9fdG1wOwogIH0KfTsKIyAyMzggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz
L3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNs
YXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNv
bnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9E
aXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxf
QmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgp
ID09IF9feS5iYXNlKCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KAogICAg
Y29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwg
X0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
PF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuICEoX194ID09
IF9feSk7Cn0KIyAyNjcgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRv
ci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IK
ewpwcm90ZWN0ZWQ6CiAgX0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAg
ICAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAg
ICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+Ojpwb2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNl
OwoKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7
fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVu
dChfX3gpIHt9CgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50
KF9feC5jdXJyZW50KSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAgcmV2ZXJzZV9pdGVy
YXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgOiBjdXJyZW50KF9f
eC5iYXNlKCkpIHt9CgoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJy
ZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3Rt
cCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9wZXJhdG9y
KysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJh
dG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAg
cmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxm
IF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBf
U2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9T
ZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5
cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1Nl
bGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2Vs
ZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBl
IF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJlZmVy
ZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRo
aXMgKyBfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7
CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
dGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9f
eCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJl
dHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29s
IG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kp
IHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkg
ewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
dGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpvcGVyYXRvcisodHlw
ZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAog
ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1
cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CiMgODIz
ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdCA9IHB0cmRpZmZfdD4gY2xhc3MgaXN0cmVhbV9pdGVy
YXRvcjsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0PgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mLAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mKTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0PgpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKCiAgdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX0QxPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXN0cmVhbV9pdGVyYXRvcjxfVDEsIF9EMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVDEsIF9EMT4mKTsKCgoKCgoKcHJvdGVjdGVkOgogIGlz
dHJlYW0qIF9NX3N0cmVhbTsKICBfVHAgX01fdmFsdWU7CiAgYm9vbCBfTV9lbmRfbWFya2VyOwog
IHZvaWQgX01fcmVhZCgpIHsKICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkgPyB0cnVl
IDogZmFsc2U7CiAgICBpZiAoX01fZW5kX21hcmtlcikgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsK
ICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgfQpwdWJs
aWM6CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlw
ZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0IGRpZmZlcmVuY2VfdHlwZTsKICB0
eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNl
OwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oJmNpbiksIF9NX2VuZF9tYXJrZXIo
ZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZf
X3MpIHsgX01fcmVhZCgpOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu
IF9NX3ZhbHVlOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3Bl
cmF0b3IqKCkpOyB9CgogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mIG9wZXJhdG9yKyso
KSB7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlzdHJlYW1faXRlcmF0
b3I8X1RwLCBfRGlzdD4gb3BlcmF0b3IrKyhpbnQpIHsKICAgIGlzdHJlYW1faXRlcmF0b3I8X1Rw
LCBfRGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBfX3RtcDsK
ICB9Cn07CiMgODkzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3Iu
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feCwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNl
PiYgX195KSB7CiAgcmV0dXJuIChfX3guX01fc3RyZWFtID09IF9feS5fTV9zdHJlYW0gJiYKICAg
ICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IF9feS5fTV9lbmRfbWFya2VyKSB8fAogICAgICAg
ICBfX3guX01fZW5kX21hcmtlciA9PSBmYWxzZSAmJiBfX3kuX01fZW5kX21hcmtlciA9PSBmYWxz
ZTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Rh
bmNlPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KY2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBvc3RyZWFtKiBfTV9z
dHJlYW07CiAgY29uc3QgY2hhciogX01fc3RyaW5nOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7
CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBf
X3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9y
KG9zdHJlYW0mIF9fcywgY29uc3QgY2hhciogX19jKQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9N
X3N0cmluZyhfX2MpIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3Qg
X1RwJiBfX3ZhbHVlKSB7CiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3Ry
aW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0
cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJl
YW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVh
bV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKIyA5
NTUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KY2xhc3MgX19ub3Jt
YWxfaXRlcmF0b3IKICA6IHB1YmxpYyBpdGVyYXRvcjxpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgp7Cgpwcm90ZWN0ZWQ6CiAgX0l0ZXJh
dG9yIF9NX2N1cnJlbnQ7CgpwdWJsaWM6CiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+IG5vcm1hbF9pdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyYXRvcj4gX190cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHJhaXRzX3R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk
ZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0
eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CgogIF9f
bm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgZXhwbGlj
aXQgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChf
X2kpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0
ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQog
ICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgcmVmZXJlbmNlCiAgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgcG9pbnRlcgogIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBlJgog
IG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9p
dGVyYXRvcl90eXBlCiAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9y
KF9NX2N1cnJlbnQrKyk7IH0KCgogIG5vcm1hbF9pdGVyYXRvcl90eXBlJgogIG9wZXJhdG9yLS0o
KSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBl
CiAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQt
LSk7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBf
X24pIGNvbnN0CiAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CgogIG5vcm1hbF9pdGVyYXRv
cl90eXBlJgogIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgeyBfTV9j
dXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBlCiAg
b3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9f
bm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90
eXBlJgogIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgeyBfTV9jdXJy
ZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBlCiAgb3Bl
cmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9fbm9y
bWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogIGRpZmZlcmVuY2VfdHlwZQogIG9w
ZXJhdG9yLShjb25zdCBub3JtYWxfaXRlcmF0b3JfdHlwZSYgX19pKSBjb25zdAogIHsgcmV0dXJu
IF9NX2N1cnJlbnQgLSBfX2kuX01fY3VycmVudDsgfQoKICBjb25zdCBfSXRlcmF0b3ImCiAgYmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KfTsKCgoKdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5s
aW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBf
Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19y
aHMuYmFzZSgpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl
cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAg
ICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19y
aHMpCnsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CgoKCnRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGlu
ZSBib29sCm9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29u
dGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJh
c2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y
UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgIGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyBy
ZXR1cm4gX19yaHMgPCBfX2xoczsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw
ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0
b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s
aHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh
aW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fcmhzIDwgX19saHMpOyB9Cgp0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVy
PgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuICEoX19saHMgPCBfX3Jo
cyk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
aW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4Kb3BlcmF0b3Ir
KF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlw
ZSBfX24sCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+JiBfX2kpCnsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh
aW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KCn0KIyAzNyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9j
YWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv
ZysrL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDQzICIvaG9tZTUva3Jha293L2dudS9sb2Nh
bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw
MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF9tZW1vcnkuaCIgMSAzCiMgMTkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz
L3N0ZF9tZW1vcnkuaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMSAzCiMgMzUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbmZp
Zy5oIiAxIDMKIyAzNiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDIgMwoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfcGFpci5oIiAx
IDMKIyAzNCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1l
c3BhY2Ugc3RkIHsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIg
ewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7Cgog
IF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwogIHBhaXIoKSA6IGZpcnN0KF9UMSgpKSwgc2Vjb25k
KF9UMigpKSB7fQogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0
KF9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+
CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNl
Y29uZChfX3Auc2Vjb25kKSB7fQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBw
YWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYg
X194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
VDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z
dCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8
fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3ku
c2Vjb25kKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICBy
ZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu
bGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp
cjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCgoKdGVtcGxhdGUg
PGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIo
Y29uc3QgX1QxIF9feCwgY29uc3QgX1QyIF9feSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1Qy
PihfX3gsIF9feSk7Cn0KCn0KIyAzOCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvdHlw
ZV90cmFpdHMuaCIgMSAzCiMgMTkgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3R5cGVf
dHJhaXRzLmgiIDMKCgojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9jb25m
aWcuaCIgMSAzCiMgMjIgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3R5cGVfdHJhaXRz
LmgiIDIgMwojIDU5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy90eXBlX3RyYWl0cy5o
IiAzCnRlbXBsYXRlIDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Owp0eXBlZGVmIF9Cb29s
PHRydWU+IF9fdHJ1ZV90eXBlOwp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2ZhbHNlX3R5cGU7Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyA4MyAiL2hvbWU1L2ty
YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
My4wL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKIyA5OCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFpdHMu
aCIgMwp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWdu
ZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5
cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQg
c2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
X3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9u
ZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlw
ZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91
YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CiMgMzAzICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0lu
dGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25l
ZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln
bmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
SXNfaW50ZWdlcjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUg
X05vcm1hbDsKfTsKCgpuYW1lc3BhY2Ugc3RkIHsKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsKfTsKCnRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9J
c19ub3JtYWxfaXRlcmF0b3I8IHN0ZDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDQxICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDQzICIvaG9tZTUv
a3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWU1L2ty
YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
My4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAzCiMgNDQgIi9ob21lNS9rcmFr
b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
MC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyAzOSAiL2hvbWU1L2tyYWtvdy9n
bnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xv
Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl
L2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL2hv
bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgMSAiL2hvbWU1
L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNDEgIi9ob21lNS9r
cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44
LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDQzICIvaG9tZTUva3Jh
a293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z
LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9n
bnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu
Y2x1ZGUvc3RkbGliLmgiIDEgMyA0CiMgMjUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGxpYi5o
IiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXN0ZGxpYi5oCTEuNDcJOTkvMTEvMDMgU01JIgoKIyAx
ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAxIDMgNAojIDM3ICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgj
KXN0ZGxpYl9pc28uaAkxLjEJOTkvMDgvMDkgU01JIgoKIyAxICIvaG9tZTUva3Jha293L2dudS9s
b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk
ZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDQwICIvaG9tZTUva3Jha293L2dudS9sb2Nh
bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9p
c28vc3RkbGliX2lzby5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewoKCgoKCgp0eXBlZGVmIHN0cnVj
dCB7CiAgICAgICAgaW50IHF1b3Q7CiAgICAgICAgaW50IHJlbTsKfSBkaXZfdDsKCnR5cGVkZWYg
c3RydWN0IHsKICAgICAgICBsb25nIHF1b3Q7CiAgICAgICAgbG9uZyByZW07Cn0gbGRpdl90Owoj
IDk1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAzIDQKZXh0ZXJuIHVu
c2lnbmVkIGNoYXIgX19jdHlwZVtdOwoKCmV4dGVybiB2b2lkIGFib3J0KHZvaWQpOwpleHRlcm4g
aW50IGFicyhpbnQpOwpleHRlcm4gaW50IGF0ZXhpdCh2b2lkICgqKSh2b2lkKSk7CmV4dGVybiBk
b3VibGUgYXRvZihjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGF0b2koY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgKmJzZWFyY2go
Y29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LAogICAgICAgIGludCAo
KikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKZXh0ZXJuIHZvaWQgKmNhbGxvYyhzaXpl
X3QsIHNpemVfdCk7CmV4dGVybiBkaXZfdCBkaXYoaW50LCBpbnQpOwpleHRlcm4gdm9pZCBleGl0
KGludCk7CmV4dGVybiB2b2lkIGZyZWUodm9pZCAqKTsKZXh0ZXJuIGNoYXIgKmdldGVudihjb25z
dCBjaGFyICopOwpleHRlcm4gbG9uZyBpbnQgbGFicyhsb25nKTsKZXh0ZXJuIGxkaXZfdCBsZGl2
KGxvbmcsIGxvbmcpOwpleHRlcm4gdm9pZCAqbWFsbG9jKHNpemVfdCk7CmV4dGVybiBpbnQgbWJs
ZW4oY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzKHdjaGFyX3Qg
KiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IG1idG93Yyh3Y2hhcl90ICosIGNv
bnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgcXNvcnQodm9pZCAqLCBzaXplX3QsIHNp
emVfdCwKICAgICAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4dGVy
biBpbnQgcmFuZCh2b2lkKTsKZXh0ZXJuIHZvaWQgKnJlYWxsb2Modm9pZCAqLCBzaXplX3QpOwpl
eHRlcm4gdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwpleHRlcm4gZG91YmxlIHN0cnRvZChjb25z
dCBjaGFyICosIGNoYXIgKiopOwpleHRlcm4gbG9uZyBpbnQgc3RydG9sKGNvbnN0IGNoYXIgKiwg
Y2hhciAqKiwgaW50KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hh
ciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gaW50IHN5c3RlbShjb25zdCBjaGFyICopOwpleHRl
cm4gaW50IHdjdG9tYihjaGFyICosIHdjaGFyX3QpOwpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNo
YXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwojIDE3MCAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvaXNvL3N0ZGxpYl9pc28uaCIgMyA0Cn0KIyAyOCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu
MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3Rk
bGliLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDEgMyA0CiMgMTYg
Ii91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXdhaXQuaAkx
LjIxCTk3LzA0LzA4IFNNSSIKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL2ZlYXR1cmVf
dGVzdHMuaCIgMSAzIDQKIyAxOSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CgojIDEg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAojIDI1ICIvaG9tZTUva3Jh
a293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z
LjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl0eXBlcy5oCTEu
NjUJOTkvMTEvMTUgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0
CiMgMjggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAojIDEgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMjkgIi9ob21lNS9r
cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44
LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L21hY2h0eXBlcy5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAz
IDQKI3ByYWdtYSBpZGVudCAiQCgjKW1hY2h0eXBlcy5oCTEuMTMJOTkvMDUvMDQgU01JIgoKIyAx
ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDE5ICIv
dXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDMzICIv
dXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX2xhYmVsX3Qg
eyBsb25nIHZhbFsyXTsgfSBsYWJlbF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbG9ja190
OwoKCn0KIyAzNCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CiMgNDUg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDEgMyA0CiMgMTggIi9ob21lNS9rcmFrb3cvZ251L2xv
Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl
L3N5cy9pbnRfdHlwZXMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylpbnRfdHlwZXMuaAkxLjYJ
OTcvMDgvMjAgU01JIgojIDUxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvaW50X3R5cGVzLmgi
IDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQKIyA1MiAiL2hvbWU1
L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4wL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDcx
ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDMgNAp0eXBlZGVmIGNoYXIg
aW50OF90OwoKCgoKCnR5cGVkZWYgc2hvcnQgaW50MTZfdDsKdHlwZWRlZiBpbnQgaW50MzJfdDsK
CgoKCnR5cGVkZWYgbG9uZyBsb25nIGludDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1
aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVk
IGludCB1aW50MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90Owoj
IDEwMyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQKdHlwZWRlZiBp
bnQ2NF90IGludG1heF90Owp0eXBlZGVmIHVpbnQ2NF90IHVpbnRtYXhfdDsKIyAxMTkgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgaW50IGludHB0cl90
Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50cHRyX3Q7CgoKCgoKCgp0eXBlZGVmIGNoYXIgaW50
X2xlYXN0OF90OwoKCgoKCnR5cGVkZWYgc2hvcnQgaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBpbnQg
aW50X2xlYXN0MzJfdDsKCgoKCnR5cGVkZWYgbG9uZyBsb25nIGludF9sZWFzdDY0X3Q7CgoKCnR5
cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IHVpbnRfbGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2xlYXN0MzJfdDsKCgoK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRfbGVhc3Q2NF90OwoKCgoKfQojIDQ2ICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKCgoKCmV4dGVybiAiQyIg
ewojIDYyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9u
ZyBsb25nIGxvbmdsb25nX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfbG9uZ2xvbmdf
dDsKIyA4NSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxv
bmcgdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHRfdXNjYWxhcl90OwoKCgoKCnR5
cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9y
dF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1
bG9uZ190OwoKdHlwZWRlZiBjaGFyICpjYWRkcl90Owp0eXBlZGVmIGxvbmcgZGFkZHJfdDsKdHlw
ZWRlZiBzaG9ydCBjbnRfdDsKCgp0eXBlZGVmIHVsb25nX3QgcGFkZHJfdDsKIyAxMjcgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bG9uZ190IHBmbl90Owp0
eXBlZGVmIHVsb25nX3QgcGdjbnRfdDsKdHlwZWRlZiBsb25nIHNwZ2NudF90OwoKdHlwZWRlZiB1
Y2hhcl90IHVzZV90Owp0eXBlZGVmIHNob3J0IHN5c2lkX3Q7CnR5cGVkZWYgc2hvcnQgaW5kZXhf
dDsKdHlwZWRlZiB2b2lkICp0aW1lb3V0X2lkX3Q7CnR5cGVkZWYgdm9pZCAqYnVmY2FsbF9pZF90
OwojIDE2NSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVs
b25nX3QgaW5vX3Q7CnR5cGVkZWYgbG9uZyBibGtjbnRfdDsKdHlwZWRlZiB1bG9uZ190IGZzYmxr
Y250X3Q7CnR5cGVkZWYgdWxvbmdfdCBmc2ZpbGNudF90OwojIDE4MyAiL2hvbWU1L2tyYWtvdy9n
bnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBpbm82NF90Owp0eXBl
ZGVmIGxvbmdsb25nX3QgYmxrY250NjRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3QgZnNibGtjbnQ2
NF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBmc2ZpbGNudDY0X3Q7CgoKCgoKCnR5cGVkZWYgbG9u
ZyBibGtzaXplX3Q7CgoKCnR5cGVkZWYgZW51bSB7IF9CX0ZBTFNFLCBfQl9UUlVFIH0gYm9vbGVh
bl90OwojIDIxMCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVm
IGludDY0X3QgcGFkNjRfdDsKdHlwZWRlZiB1aW50NjRfdCB1cGFkNjRfdDsKIyAyMjMgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nbG9uZ190IG9mZnNl
dF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCB1X29mZnNldF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdf
dCBsZW5fdDsKdHlwZWRlZiBsb25nbG9uZ190IGRpc2thZGRyX3Q7CiMgMjQ0ICIvaG9tZTUva3Jh
a293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z
LjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5pb24gewogICAgICAgIG9mZnNl
dF90IF9mOwogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICBpbnQzMl90IF91OwogICAg
ICAgICAgICAgICAgaW50MzJfdCBfbDsKICAgICAgICB9IF9wOwp9IGxsb2ZmX3Q7CiMgMjY0ICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5pb24gewogICAg
ICAgIGRpc2thZGRyX3QgX2Y7CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIGludDMy
X3QgX3U7CiAgICAgICAgICAgICAgICBpbnQzMl90IF9sOwogICAgICAgIH0gX3A7Cn0gbGxkYWRk
cl90OwoKCnR5cGVkZWYgdWludF90IGtfZmx0c2V0X3Q7CiMgMjg5ICIvaG9tZTUva3Jha293L2du
dS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9uZyBpZF90OwoKCgoKCgp0eXBlZGVmIHVp
bnRfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIGxvbmcgc3VzZWNvbmRzX3Q7CiMgMzEwICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdWxvbmdfdCBtYWpvcl90
Owp0eXBlZGVmIHVsb25nX3QgbWlub3JfdDsKCgoKCgp0eXBlZGVmIHNob3J0IHByaV90OwojIDMz
MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVzaG9ydF90
IG9fbW9kZV90Owp0eXBlZGVmIHNob3J0IG9fZGV2X3Q7CnR5cGVkZWYgdXNob3J0X3Qgb191aWRf
dDsKdHlwZWRlZiBvX3VpZF90IG9fZ2lkX3Q7CnR5cGVkZWYgc2hvcnQgb19ubGlua190Owp0eXBl
ZGVmIHNob3J0IG9fcGlkX3Q7CnR5cGVkZWYgdXNob3J0X3Qgb19pbm9fdDsKCgoKCgp0eXBlZGVm
IGludCBrZXlfdDsKCgoKdHlwZWRlZiB1bG9uZ190IG1vZGVfdDsKCgoKCgoKCnR5cGVkZWYgbG9u
ZyB1aWRfdDsKCgoKdHlwZWRlZiB1aWRfdCBnaWRfdDsKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgcHRocmVhZF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKdHlwZWRl
ZiBzdHJ1Y3QgX3B0aHJlYWRfbXV0ZXggewogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg
ICB1aW50MTZfdCBfX3B0aHJlYWRfbXV0ZXhfZmxhZzE7CiAgICAgICAgICAgICAgICB1aW50OF90
IF9fcHRocmVhZF9tdXRleF9mbGFnMjsKICAgICAgICAgICAgICAgIHVpbnQ4X3QgX19wdGhyZWFk
X211dGV4X2NlaWxpbmc7CiAgICAgICAgICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfbXV0ZXhf
dHlwZTsKICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9mbGFnczsKICAgICAgICB1bmlvbiB7CiAg
ICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IF9f
cHRocmVhZF9tdXRleF9wYWRbOF07CiAgICAgICAgICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9s
b2NrNjQ7CiAgICAgICAgICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfbXV0ZXhfb3duZXI2NDsK
ICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9sb2NrOwogICAgICAgIHVwYWQ2NF90IF9fcHRocmVh
ZF9tdXRleF9kYXRhOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFk
X2NvbmQgewogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1aW50OF90IF9fcHRocmVh
ZF9jb25kX2ZsYWdbNF07CiAgICAgICAgICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfY29uZF90
eXBlOwogICAgICAgIH0gX19wdGhyZWFkX2NvbmRfZmxhZ3M7CiAgICAgICAgdXBhZDY0X3QgX19w
dGhyZWFkX2NvbmRfZGF0YTsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9w
dGhyZWFkX3J3bG9jayB7CiAgICAgICAgaW50MzJfdCBfX3B0aHJlYWRfcndsb2NrX3JlYWRlcnM7
CiAgICAgICAgdWludDE2X3QgX19wdGhyZWFkX3J3bG9ja190eXBlOwogICAgICAgIHVpbnQxNl90
IF9fcHRocmVhZF9yd2xvY2tfbWFnaWM7CiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX3J3bG9j
a19wYWQxWzNdOwogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkMlsyXTsKICAg
ICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDNbMl07Cn0gcHRocmVhZF9yd2xvY2tf
dDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2F0dHIgewogICAgICAgIHZvaWQgKl9fcHRo
cmVhZF9hdHRycDsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVh
ZF9tdXRleGF0dHIgewogICAgICAgIHZvaWQgKl9fcHRocmVhZF9tdXRleGF0dHJwOwp9IHB0aHJl
YWRfbXV0ZXhhdHRyX3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfY29uZGF0dHIgewog
ICAgICAgIHZvaWQgKl9fcHRocmVhZF9jb25kYXR0cnA7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoK
CgoKdHlwZWRlZiBzdHJ1Y3QgX29uY2UgewogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9vbmNl
X3BhZFs0XTsKfSBwdGhyZWFkX29uY2VfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9y
d2xvY2thdHRyIHsKICAgICAgICB2b2lkICpfX3B0aHJlYWRfcndsb2NrYXR0cnA7Cn0gcHRocmVh
ZF9yd2xvY2thdHRyX3Q7Cgp0eXBlZGVmIHVsb25nX3QgZGV2X3Q7CgoKCgoKdHlwZWRlZiB1bG9u
Z190IG5saW5rX3Q7CnR5cGVkZWYgbG9uZyBwaWRfdDsKIyA0OTAgIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQgY2xvY2tpZF90OwoKCgoKdHlwZWRlZiBp
bnQgdGltZXJfdDsKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVuY2hhcjsKdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyB1bG9uZzsKIyA1NTYgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBl
cy5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCB1X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIHVfbG9uZzsKdHlwZWRlZiBzdHJ1Y3QgX3F1YWQgeyBpbnQgdmFsWzJdOyB9IHF1YWRf
dDsKdHlwZWRlZiBxdWFkX3QgcXVhZDsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj
dC5oIiAxIDMgNAojIDEyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzIDQKI3ByYWdtYSBp
ZGVudCAiQCgjKXNlbGVjdC5oCTEuMTYJOTgvMDQvMjcgU01JIgoKIyAxICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDE1ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0CiMg
MjIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXRpbWUu
aAkyLjY0CTk5LzEwLzA1IFNNSSIKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz
MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL2ZlYXR1
cmVfdGVzdHMuaCIgMSAzIDQKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0CgoK
CgoKCgpleHRlcm4gIkMiIHsKIyA0OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNApzdHJ1
Y3QgdGltZXZhbCB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBzdXNlY29uZHNfdCB0
dl91c2VjOwp9OwojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1l
em9uZSB7CiAgICAgICAgaW50IHR6X21pbnV0ZXN3ZXN0OwogICAgICAgIGludCB0el9kc3R0aW1l
Owp9OwoKCgoKCn0KIyAxMDAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKIyAxICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIyAxMDEgIi91c3IvaW5jbHVkZS9z
eXMvdGltZS5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKIyAxNTUgIi91c3IvaW5jbHVkZS9zeXMv
dGltZS5oIiAzIDQKc3RydWN0IGl0aW1lcnZhbCB7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRf
aW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7Cn07CiMgMjAzICIvdXNy
L2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CnR5cGVkZWYgbG9uZ2xvbmdfdCBocnRpbWVfdDsKIyAz
MTYgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKaW50IGFkanRpbWUoc3RydWN0IHRpbWV2
YWwgKiwgc3RydWN0IHRpbWV2YWwgKik7CiMgMzI3ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg
MyA0CmludCBnZXRpdGltZXIoaW50LCBzdHJ1Y3QgaXRpbWVydmFsICopOwppbnQgdXRpbWVzKGNv
bnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKik7CgppbnQgc2V0aXRpbWVyKGludCwg
Y29uc3Qgc3RydWN0IGl0aW1lcnZhbCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOwojIDM2NSAiL3Vz
ci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAppbnQgc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFs
ICosIHZvaWQgKik7CgpocnRpbWVfdCBnZXRocnRpbWUodm9pZCk7CmhydGltZV90IGdldGhydnRp
bWUodm9pZCk7CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CmludCBnZXR0aW1l
b2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKIyA0MDYgIi91c3IvaW5jbHVkZS9zeXMv
dGltZS5oIiAzIDQKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMjUg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL3RpbWUuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1l
LmgJMS4zOQk5OS8wOC8xMCBTTUkiCgojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy9mZWF0
dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMjggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3RpbWUuaCIgMiAz
IDQKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIyAyOSAiL2hv
bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMy4wL2luY2x1ZGUvdGltZS5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9pc28vdGlt
ZV9pc28uaCIgMSAzIDQKIyAzMCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvdGltZS5oIiAyIDMgNAoj
IDUyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gIkMiIHsKIyA2OSAi
L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMy4wL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1l
X3IoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKTsKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0
aW1lX3IoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ry
cHRpbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVjdCB0bSAqKTsKIyA5MiAiL2hv
bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMy4wL2luY2x1ZGUvdGltZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVf
aW1wbC5oIiAxIDMgNAojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKI3By
YWdtYSBpZGVudCAiQCgjKXRpbWVfaW1wbC5oCTEuNQk5OS8xMC8wNSBTTUkiCgojIDEgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMTggIi91c3IvaW5j
bHVkZS9zeXMvdGltZV9pbXBsLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgMzYgIi91c3IvaW5j
bHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB7CiAgICAg
ICAgdGltZV90IHR2X3NlYzsKICAgICAgICBsb25nIHR2X25zZWM7Cn0gdGltZXNwZWNfdDsKIyA2
MCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0CnR5cGVkZWYgc3RydWN0IHRpbWVz
cGVjIHRpbWVzdHJ1Y190OwojIDc5ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQK
dHlwZWRlZiBzdHJ1Y3QgaXRpbWVyc3BlYyB7CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X2lu
dGVydmFsOwogICAgICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKfSBpdGltZXJzcGVjX3Q7
CiMgMTM2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKfQojIDkzICIvaG9tZTUv
a3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
OC8zLjAvaW5jbHVkZS90aW1lLmgiIDIgMyA0CiMgMTA3ICIvaG9tZTUva3Jha293L2dudS9sb2Nh
bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS90
aW1lLmgiIDMgNAp1bmlvbiBzaWd2YWwgewogICAgICAgIGludCBzaXZhbF9pbnQ7CiAgICAgICAg
dm9pZCAqc2l2YWxfcHRyOwp9OwoKCgoKc3RydWN0IHNpZ2V2ZW50IHsKICAgICAgICBpbnQgc2ln
ZXZfbm90aWZ5OwogICAgICAgIGludCBzaWdldl9zaWdubzsKICAgICAgICB1bmlvbiBzaWd2YWwg
c2lnZXZfdmFsdWU7CiAgICAgICAgdm9pZCAoKnNpZ2V2X25vdGlmeV9mdW5jdGlvbikodW5pb24g
c2lndmFsKTsKICAgICAgICBwdGhyZWFkX2F0dHJfdCAqc2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXM7
CiAgICAgICAgaW50IF9fc2lnZXZfcGFkMjsKfTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHJlcyhj
bG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lKGNs
b2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUoY2xv
Y2tpZF90LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJfY3JlYXRl
KGNsb2NraWRfdCwgc3RydWN0IHNpZ2V2ZW50ICosIHRpbWVyX3QgKik7CmV4dGVybiBpbnQgdGlt
ZXJfZGVsZXRlKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4odGltZXJfdCk7
CmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSh0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsK
ZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1l
cnNwZWMgKiwKICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjICopOwpleHRlcm4gaW50
IG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopOwoK
CgoKZXh0ZXJuIHZvaWQgdHpzZXQodm9pZCk7CgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwojIDE1
MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIGxvbmcgdGltZXpvbmU7
CmV4dGVybiBpbnQgZGF5bGlnaHQ7CiMgMTY1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS90aW1lLmgi
IDMgNApleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlKGNvbnN0IGNoYXIgKik7CgoKCgoKCmV4dGVy
biBpbnQgZ2V0ZGF0ZV9lcnI7CiMgMjY1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS90aW1lLmgiIDMg
NApzdGF0aWMgY2hhciAqCmFzY3RpbWVfcihjb25zdCBzdHJ1Y3QgdG0gKl9fdG0sIGNoYXIgKl9f
YnVmKQp7CiAgICAgICAgZXh0ZXJuIGNoYXIgKl9fcG9zaXhfYXNjdGltZV9yKGNvbnN0IHN0cnVj
dCB0bSAqLCBjaGFyICopOwogICAgICAgIHJldHVybiAoX19wb3NpeF9hc2N0aW1lX3IoX190bSwg
X19idWYpKTsKfQpzdGF0aWMgY2hhciAqCmN0aW1lX3IoY29uc3QgdGltZV90ICpfX3RpbWUsIGNo
YXIgKl9fYnVmKQp7CiAgICAgICAgZXh0ZXJuIGNoYXIgKl9fcG9zaXhfY3RpbWVfcihjb25zdCB0
aW1lX3QgKiwgY2hhciAqKTsKICAgICAgICByZXR1cm4gKF9fcG9zaXhfY3RpbWVfcihfX3RpbWUs
IF9fYnVmKSk7Cn0KIyAzMjcgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3RpbWUuaCIgMyA0Cn0KIyA0
MDcgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNAojIDQxOSAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiMgNDIw
ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQKCgoKCgp9CiMgMTggIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewojIDQ1ICIvdXNyL2luY2x1ZGUv
c3lzL3NlbGVjdC5oIiAzIDQKdHlwZWRlZiBsb25nIGZkX21hc2s7Cgp0eXBlZGVmIGxvbmcgZmRz
X21hc2s7CiMgNzMgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAp0eXBlZGVmIHN0cnVj
dCBmZF9zZXQgewoKCgogICAgICAgIGxvbmcgZmRzX2JpdHNbKCgoMTAyNCkrKCgoc2l6ZW9mIChm
ZHNfbWFzaykgKiA4KSktMSkpLygoc2l6ZW9mIChmZHNfbWFzaykgKiA4KSkpXTsKfSBmZF9zZXQ7
CiMgOTcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNApleHRlcm4gaW50IHNlbGVjdChp
bnQsIGZkX3NldCAqLCBmZF9zZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICopOwoKCgoK
Cgp9CiMgNTY5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKIyA1ODUg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKfQojIDIxICIvdXNyL2luY2x1
ZGUvc3lzL3dhaXQuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgi
IDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CiNwcmFnbWEgaWRl
bnQgIkAoIylyZXNvdXJjZS5oCTEuMjUJOTgvMDYvMzAgU01JIgoKIyAxICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDE5ICIvdXNyL2luY2x1ZGUvc3lz
L3Jlc291cmNlLmgiIDIgMyA0CgojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5o
IiAxIDMgNAojIDIxICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDIgMyA0CiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0CiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3Vy
Y2UuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyA2NyAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJj
ZS5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHJsaW1fdDsKIyAxMDIgIi91c3IvaW5jbHVk
ZS9zeXMvcmVzb3VyY2UuaCIgMyA0CnN0cnVjdCBybGltaXQgewogICAgICAgIHJsaW1fdCBybGlt
X2N1cjsKICAgICAgICBybGltX3QgcmxpbV9tYXg7Cn07CgoKCgp0eXBlZGVmIHVfbG9uZ2xvbmdf
dCBybGltNjRfdDsKCgoKCgpzdHJ1Y3QgcmxpbWl0NjQgewogICAgICAgIHJsaW02NF90IHJsaW1f
Y3VyOwogICAgICAgIHJsaW02NF90IHJsaW1fbWF4Owp9OwojIDE0MyAiL3Vzci9pbmNsdWRlL3N5
cy9yZXNvdXJjZS5oIiAzIDQKc3RydWN0IHJ1c2FnZSB7CiAgICAgICAgc3RydWN0IHRpbWV2YWwg
cnVfdXRpbWU7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CiAgICAgICAgbG9uZyBy
dV9tYXhyc3M7CiAgICAgICAgbG9uZyBydV9peHJzczsKICAgICAgICBsb25nIHJ1X2lkcnNzOwog
ICAgICAgIGxvbmcgcnVfaXNyc3M7CiAgICAgICAgbG9uZyBydV9taW5mbHQ7CiAgICAgICAgbG9u
ZyBydV9tYWpmbHQ7CiAgICAgICAgbG9uZyBydV9uc3dhcDsKICAgICAgICBsb25nIHJ1X2luYmxv
Y2s7CiAgICAgICAgbG9uZyBydV9vdWJsb2NrOwogICAgICAgIGxvbmcgcnVfbXNnc25kOwogICAg
ICAgIGxvbmcgcnVfbXNncmN2OwogICAgICAgIGxvbmcgcnVfbnNpZ25hbHM7CiAgICAgICAgbG9u
ZyBydV9udmNzdzsKICAgICAgICBsb25nIHJ1X25pdmNzdzsKfTsKIyAxOTMgIi91c3IvaW5jbHVk
ZS9zeXMvcmVzb3VyY2UuaCIgMyA0CmV4dGVybiBpbnQgc2V0cmxpbWl0KGludCwgY29uc3Qgc3Ry
dWN0IHJsaW1pdCAqKTsKZXh0ZXJuIGludCBnZXRybGltaXQoaW50LCBzdHJ1Y3QgcmxpbWl0ICop
OwoKCgoKZXh0ZXJuIGludCBzZXRybGltaXQ2NChpbnQsIGNvbnN0IHN0cnVjdCBybGltaXQ2NCAq
KTsKZXh0ZXJuIGludCBnZXRybGltaXQ2NChpbnQsIHN0cnVjdCBybGltaXQ2NCAqKTsKCgpleHRl
cm4gaW50IGdldHByaW9yaXR5KGludCwgaWRfdCk7CmV4dGVybiBpbnQgc2V0cHJpb3JpdHkoaW50
LCBpZF90LCBpbnQpOwpleHRlcm4gaW50IGdldHJ1c2FnZShpbnQsIHN0cnVjdCBydXNhZ2UgKik7
CiMgMjI4ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNAp9CiMgMjUgIi91c3IvaW5j
bHVkZS9zeXMvd2FpdC5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAx
IDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0CiNwcmFnbWEgaWRlbnQg
IkAoIylzaWdpbmZvLmgJMS41NAk5OC8wMy8yNyBTTUkiCgojIDEgIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMTkgIi91c3IvaW5jbHVkZS9zeXMvc2ln
aW5mby5oIiAyIDMgNAojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMg
NAojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsK
IyAxMjYgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL21hY2hzaWcuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNoc2lnLmgiIDMg
NAojcHJhZ21hIGlkZW50ICJAKCMpbWFjaHNpZy5oCTEuMTUJOTkvMDgvMTUgU01JIgoKIyAxICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDE5ICIvdXNy
L2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyAxMDcgIi91c3Iv
aW5jbHVkZS9zeXMvbWFjaHNpZy5oIiAzIDQKfQojIDEyNyAiL3Vzci9pbmNsdWRlL3N5cy9zaWdp
bmZvLmgiIDIgMyA0CiMgMjA2ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0CiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMSAzIDQKIyAyMDcgIi91c3IvaW5jbHVkZS9z
eXMvc2lnaW5mby5oIiAyIDMgNAojIDIxNyAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMg
NAojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAojIDIxOCAiL3Vz
ci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0CgoKCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8g
ewoKCgogICAgICAgIGludCBzaV9zaWdubzsKICAgICAgICBpbnQgc2lfY29kZTsKICAgICAgICBp
bnQgc2lfZXJybm87CgoKCiAgICAgICAgdW5pb24gewoKICAgICAgICAgICAgICAgIGludCBfX3Bh
ZFsoKDEyOCAvIHNpemVvZiAoaW50KSkgLSAzKV07CgogICAgICAgICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191aWQ7CgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHNpZ3ZhbCBfX3ZhbHVlOwoK
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19raWxsOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbG9ja190IF9fdXRpbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19zdGF0dXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbG9ja190IF9fc3RpbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBfX2NsZDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBfX3BkYXRhOwogICAgICAgICAgICAg
ICAgfSBfX3Byb2M7CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqX19hZGRyOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190cmFwbm87
CiAgICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19wYzsKICAgICAgICAgICAgICAgIH0g
X19mYXVsdDsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fZmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgX19iYW5kOwogICAgICAg
ICAgICAgICAgfSBfX2ZpbGU7CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAg
ICAgICAgICAgICAgY2FkZHJfdCBfX2ZhZGRyOwoKCiAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWVzdHJ1Y190IF9fdHN0YW1wOwoKCgogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5
c2NhbGw7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19uc3lzYXJnOwogICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyIF9fZmF1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcg
X19zeXNhcmdbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX21zdGF0ZVsxMF07CiAg
ICAgICAgICAgICAgICB9IF9fcHJvZjsKCiAgICAgICAgfSBfX2RhdGE7Cgp9IHNpZ2luZm9fdDsK
IyAzNTQgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3Qga19z
aWdpbmZvIHsKICAgICAgICBpbnQgc2lfc2lnbm87CiAgICAgICAgaW50IHNpX2NvZGU7CiAgICAg
ICAgaW50IHNpX2Vycm5vOwoKCgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVj
dCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBpZF90IF9fcGlkOwogICAgICAgICAgICAgICAg
ICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IF9fdWlkOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gc2lndmFsIF9fdmFsdWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBfX2tpbGw7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsb2NrX3QgX191dGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX3N0YXR1czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsb2NrX3QgX19zdGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IF9fY2xkOwogICAgICAgICAgICAgICAgICAgICAgICB9IF9fcGRhdGE7CiAgICAgICAgICAgICAg
ICB9IF9fcHJvYzsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICpfX2FkZHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsK
ICAgICAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCBfX3BjOwogICAgICAgICAgICAgICAgfSBf
X2ZhdWx0OwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CgogICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19mZDsKICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfX2JhbmQ7CiAgICAgICAg
ICAgICAgICB9IF9fZmlsZTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
ICAgICAgICAgICBjYWRkcl90IF9fZmFkZHI7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWVzdHJ1Y190IF9fdHN0YW1wOwoKCgogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5
c2NhbGw7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19uc3lzYXJnOwogICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyIF9fZmF1bHQ7CgoKCiAgICAgICAgICAgICAgICB9IF9fcHJvZjsK
CiAgICAgICAgfSBfX2RhdGE7Cgp9IGtfc2lnaW5mb190OwoKdHlwZWRlZiBzdHJ1Y3Qgc2lncXVl
dWUgewogICAgICAgIHN0cnVjdCBzaWdxdWV1ZSAqc3FfbmV4dDsKICAgICAgICBrX3NpZ2luZm9f
dCBzcV9pbmZvOwogICAgICAgIHZvaWQgKCpzcV9mdW5jKShzdHJ1Y3Qgc2lncXVldWUgKik7CiAg
ICAgICAgdm9pZCAqc3FfYmFja3B0cjsKCn0gc2lncXVldWVfdDsKIyA0NTQgIi91c3IvaW5jbHVk
ZS9zeXMvc2lnaW5mby5oIiAzIDQKfQojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAz
IDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNs
dWRlL3N5cy9wcm9jc2V0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpcHJvY3NldC5oCTEuMTkJ
OTkvMDcvMTIgU01JIgoKCmV4dGVybiAiQyIgewoKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9j
YWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv
c3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0
LmgiIDIgMyA0CiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMg
MjQgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAyIDMgNAojIDQxICIvdXNyL2luY2x1ZGUv
c3lzL3Byb2NzZXQuaCIgMyA0CnR5cGVkZWYgZW51bQoKICAgICAgICBpZHR5cGUKCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgUF9QSUQsCiAgICAgICAgUF9QUElELAogICAgICAgIFBfUEdJRCwK
CiAgICAgICAgUF9TSUQsCiAgICAgICAgUF9DSUQsCiAgICAgICAgUF9VSUQsCiAgICAgICAgUF9H
SUQsCiAgICAgICAgUF9BTEwsCiAgICAgICAgUF9MV1BJRAp9IGlkdHlwZV90OwojIDY1ICIvdXNy
L2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMyA0CnR5cGVkZWYgZW51bSBpZG9wIHsKICAgICAgICBQ
T1BfRElGRiwKCgogICAgICAgIFBPUF9BTkQsCgoKICAgICAgICBQT1BfT1IsCgoKICAgICAgICBQ
T1BfWE9SCgoKfSBpZG9wX3Q7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBwcm9jc2V0IHsKICAgICAg
ICBpZG9wX3QgcF9vcDsKCgoKCiAgICAgICAgaWR0eXBlX3QgcF9saWR0eXBlOwoKCiAgICAgICAg
aWRfdCBwX2xpZDsKCiAgICAgICAgaWR0eXBlX3QgcF9yaWR0eXBlOwoKCiAgICAgICAgaWRfdCBw
X3JpZDsKfSBwcm9jc2V0X3Q7CiMgMTMwICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMyA0
Cn0KIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoj
IDg2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0CmV4dGVybiBwaWRfdCB3YWl0KGludCAq
KTsKZXh0ZXJuIHBpZF90IHdhaXRwaWQocGlkX3QsIGludCAqLCBpbnQpOwoKCmV4dGVybiBpbnQg
d2FpdGlkKGlkdHlwZV90LCBpZF90LCBzaWdpbmZvX3QgKiwgaW50KTsKZXh0ZXJuIHBpZF90IHdh
aXQzKGludCAqLCBpbnQsIHN0cnVjdCBydXNhZ2UgKik7CgoKCgpleHRlcm4gcGlkX3Qgd2FpdDQo
cGlkX3QsIGludCAqLCBpbnQsIHN0cnVjdCBydXNhZ2UgKik7CiMgMTE4ICIvdXNyL2luY2x1ZGUv
c3lzL3dhaXQuaCIgMyA0Cn0KIyAzMiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkbGliLmgiIDIg
MyA0CiMgNzMgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuICJDIiB7
CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nIGxvbmcgcXVvdDsKICAgICAgICBsb25n
IGxvbmcgcmVtOwp9IGxsZGl2X3Q7CiMgMTE4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRsaWIu
aCIgMyA0CmV4dGVybiBpbnQgcmFuZF9yKHVuc2lnbmVkIGludCAqKTsKCgpleHRlcm4gdm9pZCBf
ZXhpdGhhbmRsZSh2b2lkKTsKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCh2b2lkKTsKZXh0ZXJu
IGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gbG9uZyBqcmFuZDQ4KHVu
c2lnbmVkIHNob3J0ICopOwpleHRlcm4gdm9pZCBsY29uZzQ4KHVuc2lnbmVkIHNob3J0ICopOwpl
eHRlcm4gbG9uZyBscmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBtcmFuZDQ4KHZvaWQpOwpleHRl
cm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gdW5zaWduZWQgc2hvcnQg
KnNlZWQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsKZXh0
ZXJuIGludCBwdXRlbnYoY2hhciAqKTsKZXh0ZXJuIHZvaWQgc2V0a2V5KGNvbnN0IGNoYXIgKik7
CiMgMTU5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBpbnQgbWtz
dGVtcChjaGFyICopOwoKCgoKZXh0ZXJuIGludCBta3N0ZW1wNjQoY2hhciAqKTsKCgoKCgpleHRl
cm4gbG9uZyBhNjRsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICplY3Z0KGRvdWJsZSwgaW50
LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZmN2dChkb3VibGUsIGludCwgaW50ICosIGlu
dCAqKTsKZXh0ZXJuIGNoYXIgKmdjdnQoZG91YmxlLCBpbnQsIGNoYXIgKik7CmV4dGVybiBpbnQg
Z2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOwpleHRlcm4gaW50IGdy
YW50cHQoaW50KTsKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSh1bnNpZ25lZCwgY2hhciAqLCBzaXpl
X3QpOwpleHRlcm4gY2hhciAqbDY0YShsb25nKTsKZXh0ZXJuIGNoYXIgKm1rdGVtcChjaGFyICop
OwpleHRlcm4gY2hhciAqcHRzbmFtZShpbnQpOwpleHRlcm4gbG9uZyByYW5kb20odm9pZCk7CmV4
dGVybiBjaGFyICpyZWFscGF0aChjb25zdCBjaGFyICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpz
ZXRzdGF0ZShjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBzcmFuZG9tKHVuc2lnbmVkKTsKZXh0
ZXJuIGludCB0dHlzbG90KHZvaWQpOwpleHRlcm4gaW50IHVubG9ja3B0KGludCk7CmV4dGVybiB2
b2lkICp2YWxsb2Moc2l6ZV90KTsKCgoKCmV4dGVybiBpbnQgZHVwMihpbnQsIGludCk7CmV4dGVy
biBjaGFyICpxZWN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hh
ciAqcWZjdnQobG9uZyBkb3VibGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKnFn
Y3Z0KGxvbmcgZG91YmxlLCBpbnQsIGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRjd2QoY2hhciAq
LCBzaXplX3QpOwpleHRlcm4gY29uc3QgY2hhciAqZ2V0ZXhlY25hbWUodm9pZCk7CmV4dGVybiBj
aGFyICpnZXRsb2dpbih2b2lkKTsKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAq
LCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4gaW50IG9wdGluZCwg
b3B0ZXJyLCBvcHRvcHQ7CmV4dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKik7CmV4dGVy
biBjaGFyICpnZXRwYXNzcGhyYXNlKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0cHcodWlk
X3QsIGNoYXIgKik7CmV4dGVybiBpbnQgaXNhdHR5KGludCk7CmV4dGVybiB2b2lkICptZW1hbGln
bihzaXplX3QsIHNpemVfdCk7CmV4dGVybiBjaGFyICp0dHluYW1lKGludCk7CgoKZXh0ZXJuIGxv
bmcgbG9uZyBhdG9sbChjb25zdCBjaGFyICopOwpleHRlcm4gbG9uZyBsb25nIGxsYWJzKGxvbmcg
bG9uZyk7CmV4dGVybiBsbGRpdl90IGxsZGl2KGxvbmcgbG9uZywgbG9uZyBsb25nKTsKZXh0ZXJu
IGNoYXIgKmxsdG9zdHIobG9uZyBsb25nLCBjaGFyICopOwpleHRlcm4gbG9uZyBsb25nIHN0cnRv
bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25n
IHN0cnRvdWxsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGNoYXIgKnVsbHRv
c3RyKHVuc2lnbmVkIGxvbmcgbG9uZywgY2hhciAqKTsKIyAzMTcgIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL3N0ZGxpYi5oIiAzIDQKfQojIDQ0ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGRfY3N0ZGxpYi5oIiAyIDMKIyA4MyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk
X2NzdGRsaWIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6
bGRpdl90OwojIDEwMCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRsaWIu
aCIgMwogIGV4dGVybiAiQyIgZG91YmxlIGF0b2YoY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIg
aW50IGF0b2koY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgbG9uZyBpbnQgYXRvbChjb25zdCBj
aGFyKik7CiAgZXh0ZXJuICJDIiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIqLCBjaGFyKiopOwog
IGV4dGVybiAiQyIgZmxvYXQgc3RydG9mKGNvbnN0IGNoYXIqLCBjaGFyKiopOwogIGV4dGVybiAi
QyIgbG9uZyBpbnQgc3RydG9sKGNvbnN0IGNoYXIqLCBjaGFyKiosIGludCk7CiAgZXh0ZXJuICJD
IiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsKGNvbnN0IGNoYXIqLCBjaGFyKiosIGludCk7CiAg
ZXh0ZXJuICJDIiBpbnQgcmFuZCh2b2lkKTsKICBleHRlcm4gIkMiIHZvaWQgc3JhbmQodW5zaWdu
ZWQgaW50KTsKICBleHRlcm4gIkMiIHZvaWQqIGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CiAgZXh0
ZXJuICJDIiB2b2lkIGZyZWUodm9pZCopOwogIGV4dGVybiAiQyIgdm9pZCogbWFsbG9jKHNpemVf
dCk7CiAgZXh0ZXJuICJDIiB2b2lkKiByZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogIGV4dGVybiAi
QyIgdm9pZCBhYm9ydCh2b2lkKTsKICBleHRlcm4gIkMiIGludCBhdGV4aXQodm9pZCAoKmZ1bmMp
KHZvaWQpKTsKICBleHRlcm4gIkMiIHZvaWQgZXhpdChpbnQpOwogIGV4dGVybiAiQyIgdm9pZCBf
RXhpdChpbnQpOwogIGV4dGVybiAiQyIgY2hhcipnZXRlbnYoY29uc3QgY2hhciopOwogIGV4dGVy
biAiQyIgaW50IHN5c3RlbShjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiB2b2lkKiBic2VhcmNo
KGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90LCBzaXplX3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCAoKmNvbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CiAg
ZXh0ZXJuICJDIiB2b2lkIHFzb3J0KHZvaWQqLCBzaXplX3QsIHNpemVfdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgaW50ICgqY29tcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKICBl
eHRlcm4gIkMiIGludCBhYnMoaW50KTsKICBleHRlcm4gIkMiIGxvbmcgaW50IGxhYnMobG9uZyBp
bnQpOwogIGV4dGVybiAiQyIgZGl2X3QgZGl2KGludCwgaW50KTsKICBleHRlcm4gIkMiIGxkaXZf
dCBsZGl2KGxvbmcgaW50LCBsb25nIGludCk7CiAgZXh0ZXJuICJDIiBpbnQgbWJsZW4oY29uc3Qg
Y2hhciosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBpbnQgbWJ0b3djKHdjaGFyX3QqLCBjb25zdCBj
aGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGludCB3Y3RvbWIoY2hhciosIHdjaGFyX3QpOwog
IGV4dGVybiAiQyIgc2l6ZV90IG1ic3Rvd2NzKHdjaGFyX3QqLCBjb25zdCBjaGFyKiwgc2l6ZV90
KTsKICBleHRlcm4gIkMiIHNpemVfdCB3Y3N0b21icyhjaGFyKiwgY29uc3Qgd2NoYXJfdCosIHNp
emVfdCk7CiMgMTU2ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5o
IiAzCn0KIyA0NSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEg
MwojIDQ2ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL25ldyIgMSAzCiMgMzQgIi9ob21lNS9rcmFr
b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
MC9pbmNsdWRlL2crKy9uZXciIDMKI3ByYWdtYSBpbnRlcmZhY2UgIm5ldyIKIyAxICIvaG9tZTUv
a3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
OC8zLjAvaW5jbHVkZS9nKysvY3N0ZGRlZiIgMSAzCiMgMzYgIi9ob21lNS9rcmFrb3cvZ251L2xv
Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl
L2crKy9uZXciIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9leGNlcHRpb24iIDEg
MwojIDM3ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvbmV3IiAyIDMKCmV4dGVybiAiQysrIiB7
CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAg
ewogIHB1YmxpYzoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCkg
eyByZXR1cm4gImJhZF9hbGxvYyI7IH0KICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBl
eHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRs
ZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKTsKfQoKCnZv
aWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9p
ZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZv
aWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVb
XSh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qg
c3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVf
dCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2
b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxl
dGVbXSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9p
ZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVy
biBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQg
KnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0KIyA0NyAiL2hvbWU1L2tyYWtvdy9n
bnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgoKIyAxICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDUyICIvaG9tZTUva3Jha293L2du
dS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvaG9tZTUva3Jha293L2du
dS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZS5oIiAxIDMKIyA1NSAiL2hvbWU1L2tyYWtv
dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w
L2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cv
Z251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p
bmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAxIDMKIyA1NiAiL2hvbWU1L2tyYWtvdy9n
bnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkIHsKCgoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJk
SXRlcjIgX19iLCBfVHAqKSB7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAq
X19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9y
d2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3
YXJkSXRlcjIgX19iKSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMSApID0gX011
dGFibGVfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVy
MSA+IDo6X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIyICkg
PSBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2Fy
ZEl0ZXIyID4gOjpfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9DT05WRVJUX0VS
Uk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUg
LCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUgPjo6
X190eXBlX1hfaXNfbm90X2NvbnZlcnRpYmxlX3RvX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKCiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcjI+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcjE+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX0NPTlZFUlRfRVJST1I8IHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9pc19ub3RfY29u
dmVydGlibGVfdG9fdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBfX2l0ZXJfc3dh
cChfX2EsIF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp
bmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIGRvIHsgdm9pZCAoKl9feCko
IF9UcCApID0gX0Fzc2lnbmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAgPiA6Ol9Bc3Np
Z25hYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBf
VHAgX190bXAgPSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CiMgOTcgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CmlubGluZSBjb25zdCBfVHAmIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBf
X2IpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBpZiAoX19iIDwgX19hKSBy
ZXR1cm4gX19iOyByZXR1cm4gX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29u
c3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CiAgZG8geyB2b2lk
ICgqX194KSggX1RwICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgX1RwID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKCiAgaWYgKF9fYSA8IF9fYikgcmV0dXJuIF9fYjsgcmV0dXJu
IF9fYTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNv
bnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19j
b21wKSB7CgogIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYg
bWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7Cgog
IGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwp9CiMgMTM0ICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5s
aW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewog
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpp
bmxpbmUgX091dHB1dEl0ZXIKX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9
IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3Vs
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29u
c3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogIG1l
bW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3Qp
KTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIg
X19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5
cGUpIHsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAogICAgICAgICAgICAgICAgX19k
aXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eDIoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHJldHVybiBfX2NvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKF9UcCog
X19maXJzdCwgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29w
eV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9fY29w
eV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfT3V0cHV0
SXRlciBfX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKSB7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYXV4Mihf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfVHJpdmlhbCgpKTsKfQoKdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBf
X2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUp
IHsKICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LmJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUo
X19maXJzdCkpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091
dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsKICByZXR1cm4gX19jb3B5X2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRw
dXRJdGVyIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3Ry
dWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0
SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNl
KCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRl
ciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90
eXBlKSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVy
Pjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0
ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
dm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
bm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4g
X19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQojIDMz
MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIs
CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
Y29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
CiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJk
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7
IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
CiMgMzYzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyMiwKICAgICAgICAgIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9k
aXNwYXRjaAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9u
YWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5
cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29w
eShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpIHsKICAgIHJldHVybiBf
X2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgpLCAoX0Rpc3Rh
bmNlKikgMCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNr
d2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNv
cHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkg
ewogICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92
ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1
cm4gX19yZXN1bHQgLSBfTnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBf
X2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsK
ICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3Qs
IF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1Rw
KiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9C
STIgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9f
cmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgOjpo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1
cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAg
ICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5
cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9v
dXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQs
IF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwg
dHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxf
aXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBl
KXsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkky
IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25v
cm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2Jh
Y2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNl
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz
dWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9C
STI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ
MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsKICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAg
cmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUg
X0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0
LCBfQkkyIF9fcmVzdWx0KSB7CiAgZG8geyB2b2lkICgqX194KSggX0JJMSApID0gX0JpZGlyZWN0
aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9CSTEgPiA6Ol9CaWRpcmVjdGlv
bmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIGRvIHsgdm9pZCAoKl9feCkoIF9CSTIgKSA9IF9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9CSTIgPiA6Ol9NdXRhYmxlX0JpZGlyZWN0aW9u
YWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTE+Ojp2YWx1
ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlICkgPSBf
U1RMX0NPTlZFUlRfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkxPjo6dmFsdWVf
dHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZSA+OjpfX3R5
cGVfWF9pc19ub3RfY29udmVydGlibGVfdG9fdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwoKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwg
X19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3Io
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKfQojIDQ2MCAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0
SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7
CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7CiAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBwYWlyPF9J
bnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWly
PF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJdGVyIF9fZmlyc3QsIF9TaXplIF9f
Y291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7
CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+KF9fbGFzdCwgY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRw
dXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0
SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgZG8g
eyB2b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1
dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJ
dGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3Vs
dCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQg
ZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw
JiBfX3ZhbHVlKSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfTXV0YWJs
ZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6
Ol9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGRvIHsgdm9pZCAoKl9feCko
IF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
T3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3Qp
CiAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCgoKaW5saW5lIHZv
aWQgZmlsbCh1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKSB7CiAgdW5zaWduZWQgY2hh
ciBfX3RtcCA9IF9fYzsKICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3Qp
Owp9CgppbmxpbmUgdm9pZCBmaWxsKHNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciog
X19sYXN0LAogICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpIHsKICBzaWdu
ZWQgY2hhciBfX3RtcCA9IF9fYzsKICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChj
aGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykgewogIGNoYXIgX190
bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9f
dG1wKSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxp
bmUgdW5zaWduZWQgY2hhciogZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2Mp
IHsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmlyc3Qg
KyBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIHNpZ25lZCBjaGFyKiBmaWxs
X24oY2hhciogX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzaWduZWQgY2hhciYgX19jKSB7CiAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBf
X2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+Cmlu
bGluZSBjaGFyKiBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBjaGFyJiBf
X2MpIHsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmly
c3QgKyBfX247Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w
dXRJdGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjEg
KSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6
Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRlcmF0b3Jf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAo
Kl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUg
KSA9IF9FcXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlID4gOjpfRXF1YWxpdHlDb21w
YXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAg
ZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6
dmFsdWVfdHlwZSApID0gX0VxdWFsaXR5Q29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgPiA6Ol9F
cXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0gKl9f
Zmlyc3QyKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBh
aXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5
UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0
SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBkbyB7IHZvaWQgKCpf
X3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9u
PCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkg
PSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpf
SW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJz
dDEsICpfX2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICBy
ZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGlu
ZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGRvIHsgdm9pZCAoKl9f
eCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248
IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9
IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9J
bnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cjE+Ojp2YWx1ZV90eXBlICkgPSBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSA+
IDo6X0VxdWFsaXR5Q29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CgogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9FcXVhbGl0eUNvbXBhcmFibGVfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2
YWx1ZV90eXBlID4gOjpfRXF1YWxpdHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCpfX2ZpcnN0MSAhPSAqX19maXJzdDIpCiAg
ICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5l
IGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9f
YmluYXJ5X3ByZWQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRv
IHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3Nw
ZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpf
X2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9v
bCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0
ZXIxICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIx
ID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJh
dG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9y
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZv
aWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90
eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFu
Q29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CgogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
Mj46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID4g
OjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmICgqX19m
aXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpfX2ZpcnN0MiA8
ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJzdDEgPT0g
X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhpY29ncmFw
aGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3Jf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAo
Kl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsK
ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsK
ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7
CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7
Cn0KCmlubGluZSBib29sCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNo
YXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBf
X2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19s
YXN0MikKewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29u
c3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1
bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICBy
ZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoK
aW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEs
IGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBs
ZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikg
X19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQg
Y2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
KQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikg
ewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYg
KCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwog
ICAgKytfX2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVy
biAhKF9fZmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9
Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xl
bjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFz
dDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9f
Zmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9f
cmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAo
X19sZW4xIDwgX19sZW4yID8gLTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGlj
YWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNv
bnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVf
M3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIq
KSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVk
IGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz
aWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
b25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVf
M3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
dm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFu
Q29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZvaWQgKCpf
X3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkg
PSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFy
YWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIHJl
dHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9f
Zmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDIxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
bF9hbGxvYy5oIiAxIDMKIyA0NyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Fs
bG9jLmgiIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvbmV3IiAxIDMKIyA0OCAiL2hv
bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKIyAxICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA1MyAiL2hvbWU1
L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9ob21lNS9rcmFr
b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
MC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDU0ICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvZysrL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgNTUgIi9ob21lNS9rcmFrb3cvZ251L2xv
Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y
MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGRfY2Fzc2VydC5oIiAxIDMKIyAzNyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAw
MTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2Fzc2VydC5oIiAx
IDMgNAojIDI1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9hc3NlcnQuaCIgMyA0CmV4dGVybiAiQyIg
ewpleHRlcm4gdm9pZCBfX2VwcmludGYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNp
Z25lZCwgY29uc3QgY2hhciAqKQogICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7Cn0KIyAz
OCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAzCiMgNTYg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyA5MSAiL2hv
bWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKbmFtZXNwYWNlIHN0ZCB7
CiMgMTA4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1w
bGF0ZSA8aW50IF9faW5zdD4KY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0
ZToKCiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKICBzdGF0aWMgdm9pZCog
X1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CgoKICBzdGF0aWMgdm9pZCAoKiBfX21hbGxv
Y19hbGxvY19vb21faGFuZGxlcikoKTsKCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0
ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBp
ZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1
cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6
ZV90ICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2
b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lkKiBfX3Jlc3Vs
dCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1
bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBfX3Jlc3VsdDsK
ICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkp
KSgpCiAgewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy
OwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICByZXR1cm4oX19vbGQp
OwogIH0KCn07CgoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgoK
dGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19o
YW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9f
bXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBp
ZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHRocm93IHN0ZDo6YmFkX2FsbG9jKCk7IH0K
ICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSBtYWxs
b2MoX19uKTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0K
CnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCog
X19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzsp
IHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyB0aHJvdyBzdGQ6OmJh
ZF9hbGxvYygpOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9f
cmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4o
X19yZXN1bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1h
bGxvY19hbGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1w
bGVfYWxsb2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikK
ICAgICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19u
ICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAg
eyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAh
PSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAg
IHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9j
YXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j
PgpjbGFzcyBkZWJ1Z19hbGxvYyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19leHRyYSA9IDh9OwoK
CgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNo
YXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0
cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0dXJuIF9fcmVzdWx0ICsg
KGludCkgX1NfZXh0cmE7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwg
c2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBf
U19leHRyYTsKICAgICgodm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAo
X19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lNS9rcmFr
b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
MC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiwgMjMwLCAiKihzaXplX3QqKV9fcmVhbF9w
ID09IF9fbiIpLCAwKSkpOwogICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAo
aW50KSBfU19leHRyYSk7CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3As
IHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIGNoYXIqIF9fcmVhbF9w
ID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgKCh2b2lkKSAoKCooc2l6ZV90Kilf
X3JlYWxfcCA9PSBfX29sZF9zeikgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNz
ZXJ0aW9uIGAlcydcbiIsICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2Mu
aCIsIDIzNywgIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIpLCAwKSkpOwogICAgY2hh
ciogX19yZXN1bHQgPSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwg
X19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX25ld19zeiArIChpbnQpIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9
IF9fbmV3X3N6OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKfTsK
CgoKCnR5cGVkZWYgbWFsbG9jX2FsbG9jIGFsbG9jOwp0eXBlZGVmIG1hbGxvY19hbGxvYyBzaW5n
bGVfY2xpZW50X2FsbG9jOwojIDU4OCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0eXBl
ZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVy
ZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg
IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93
KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7
fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2Ug
X194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0
X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRl
KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8g
c3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAg
ICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9f
cCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6
ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsg
cmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2lu
dGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9p
ZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNs
YXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9p
bnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lk
IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg
IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxf
VDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxv
Y2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQoj
IDY2NCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3IgewogIF9BbGxv
YyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAg
dHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5j
ZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5
cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9jYXRv
cigpIHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJv
dygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQog
IHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9U
cDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9f
dW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50
ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3Rf
cG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7
IH0KCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAg
ICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWlu
Z19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAwOwogIH0KCgog
IHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRl
cmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6
ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAv
IHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAm
IF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBf
X3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9f
YWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2ludGVy
OwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgdmFs
dWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlw
ZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19h
bGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJs
eWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9j
YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19h
bGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5n
X2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKCnRlbXBsYXRlIDxpbnQg
aW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4K
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4g
dHJ1ZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KIyA4MDAgIi9ob21lNS9r
cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44
LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3Qg
Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0
b3I6OiByZWJpbmQ8X1RwPjo6b3RoZXIKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJh
aXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1Rw
MT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBl
ZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFsbG9j
YXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQg
X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK
ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwojIDg0MyAiL2hvbWU1L2ty
YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
My4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxv
Yz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBl
ZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsK
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRv
cl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50IF9faW5z
dD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICBfX2FsbG9j
YXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3RhdGlj
IGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxv
YzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+
IGFsbG9jYXRvcl90eXBlOwp9OwojIDg3NyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz
MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0Fs
bG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2Fs
bG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B
bGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+
ID4gYWxsb2NhdG9yX3R5cGU7Cn07CiMgODkyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGxfYWxsb2MuaCIgMwp9CiMgMjIgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Nv
bnN0cnVjdC5oIiAxIDMKIyAzNCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Nv
bnN0cnVjdC5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL25ldyIgMSAzCiMgMzUg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMiAzCgpuYW1l
c3BhY2Ugc3RkIHsKIyA0NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0
cnVjdC5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgX0Nv
bnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7Cm5ldyAoKHZvaWQqKSBfX3Ap
IF9UMShfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgX0NvbnN0
cnVjdChfVDEqIF9fcCkgewogIG5ldyAoKHZvaWQqKSBfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9fcG9p
bnRlci0+fl9UcCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApf
X2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QsIF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkKICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcmF0b3I+CmlubGluZSB2b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0Zv
cndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlw
ZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAg
ICBfVHJpdmlhbF9kZXN0cnVjdG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBf
VHJpdmlhbF9kZXN0cnVjdG9yKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4KaW5saW5lIHZvaWQgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fbGFzdCkgewogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVf
dHlwZShfX2ZpcnN0KSk7Cn0KCmlubGluZSB2b2lkIF9EZXN0cm95KGNoYXIqLCBjaGFyKikge30K
aW5saW5lIHZvaWQgX0Rlc3Ryb3koaW50KiwgaW50Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3ko
bG9uZyosIGxvbmcqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikge30K
aW5saW5lIHZvaWQgX0Rlc3Ryb3koZG91YmxlKiwgZG91YmxlKikge30KCmlubGluZSB2b2lkIF9E
ZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90Kikge30KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3Zh
bHVlKSB7CiAgX0NvbnN0cnVjdChfX3AsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
PgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBfQ29uc3RydWN0KF9fcCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50ZXIp
IHsKICBfRGVzdHJveShfX3BvaW50ZXIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
YXRvcj4KaW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX0Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsKfQoKfQoj
IDIzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlLmgiIDEgMwoj
IDI0ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEg
Ii9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90ZW1wYnVmLmgiIDEgMwojIDM0ICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBz
dGQgewoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+Cl9fZ2V0X3Rl
bXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAgaWYgKF9fbGVuID4gcHRy
ZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcg
LyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX1RwKiBfX3RtcCA9IChf
VHAqKSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsKICAgIGlmIChfX3RtcCAh
PSAwKQogICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAg
ICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikw
LCAwKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZm
X3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikgewogIHJldHVybiBfX2dl
dF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7Cn0KIyA2NyAiL2hvbWU1L2tyYWtv
dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w
L2luY2x1ZGUvZysrL2JpdHMvc3RsX3RlbXBidWYuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp
bmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZf
dCBfX2xlbiwgX1RwKikgewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAo
X1RwKikgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnZvaWQgcmV0dXJuX3RlbXBvcmFyeV9i
dWZmZXIoX1RwKiBfX3ApIHsKICBmcmVlKF9fcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyIHsKcHJpdmF0ZToK
ICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBf
TV9idWZmZXI7CgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2luYWxf
bGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0cmRp
ZmZfdCkoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0
NyAvIHNpemVvZihfVHApOwoKICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZl
ciA9IChfVHAqKSBtYWxsb2MoX01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX01fYnVm
ZmVyKQogICAgICAgIGJyZWFrOwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9CgogIHZvaWQg
X01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9CiAgdm9pZCBf
TV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBlKSB7CiAgICB1
bmluaXRpYWxpemVkX2ZpbGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9CgpwdWJsaWM6
CiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KICBwdHJkaWZmX3Qg
cmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KICBfVHAq
IGJlZ2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9CiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9i
dWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKCgoKICAgIHR5cGVkZWYgdHlwZW5h
bWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAg
ICAgICAgICAgIF9Ucml2aWFsOwoKCiAgICB0cnkgewogICAgICBfTV9sZW4gPSAwOwogICAgICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZl
cigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigq
X19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgZnJlZShfTV9idWZm
ZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwOyB0aHJvdzsgfTsKICB9CgogIH5fVGVtcG9y
YXJ5X2J1ZmZlcigpIHsKICAgIGRlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4p
OwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6CgogIF9UZW1wb3JhcnlfYnVmZmVy
KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVt
cG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
LAogICAgICAgICAgY2xhc3MgX1RwCgogICAgICAgICAgICAgICAgICAgID0gdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCgogICAgICAgICA+CnN0
cnVjdCB0ZW1wb3JhcnlfYnVmZmVyIDogcHVibGljIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJk
SXRlcmF0b3IsIF9UcD4KewogIHRlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX1RlbXBvcmFyeV9idWZmZXI8X0Zv
cndhcmRJdGVyYXRvciwgX1RwPihfX2ZpcnN0LCBfX2xhc3QpIHt9CiAgfnRlbXBvcmFyeV9idWZm
ZXIoKSB7fQp9OwoKfQojIDI1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfbWVt
b3J5LmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF91bmluaXRp
YWxpemVkLmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdW5p
bml0aWFsaXplZC5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz
dHJpbmcuaCIgMSAzCiMgMzUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF91bmlu
aXRpYWxpemVkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5p
dGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9y
d2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlw
ZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSB7CiAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIF9Db25zdHJ1Y3Qo
JipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsg
X0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2Fy
ZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfVHAq
KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9J
c19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0aWFsaXplZF9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNoYXIqIHVuaW5pdGlhbGl6ZWRf
Y29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0
LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0
IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qg
d2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXpl
b2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChf
X2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+
Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50
LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIg
PSBfX3Jlc3VsdDsKICB0cnkgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19jb3VudCwg
KytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsK
ICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIp
OwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRl
cj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6
ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWly
PF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFz
dCwKICAgICAgICAgICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNs
YXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpf
X3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwK
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9f
dW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJ
dGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRf
Y29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9j
b3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxs
KF9fZmlyc3QsIF9fbGFzdCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0
OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgX0Nv
bnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJz
dCwgX19jdXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9y
d2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5pbml0aWFs
aXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKCn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFs
aXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0
LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsK
ICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9fdW5pbml0
aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBf
Rm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fbiA+IDA7
IC0tX19uLCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICByZXR1
cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7IHRo
cm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh
c3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9m
aWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9U
cDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlw
ZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBf
X24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgp1bmluaXRpYWxpemVkX2Zp
bGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKewog
IHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBfX3ZhbHVl
X3R5cGUoX19maXJzdCkpOwp9CiMgMjMwICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfdW5pbml0aWFsaXplZC5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3Vu
aW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShf
X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFs
aXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgfQogIGNhdGNoKC4uLikgeyBf
RGVzdHJveShfX3Jlc3VsdCwgX19taWQpOyB0aHJvdzsgfTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfSW5wdXRJdGVyPgppbmxpbmUgX0Zvcndh
cmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBf
Rm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCkKewogIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7
CiAgdHJ5IHsKICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBf
X21pZCk7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOyB0aHJv
dzsgfTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1
dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlk
MiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogIHRy
eSB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOwogIH0KICBj
YXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdDIsIF9fbWlkMik7IHRocm93OyB9Owp9Cgp9CiMg
MjYgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAi
L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAz
CiMgMzQgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVy
LmgiIDMKbmFtZXNwYWNlIHN0ZCB7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwg
Y2xhc3MgX1RwPgpjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfRm9y
d2FyZEl0ZXJhdG9yIF9NX2l0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVm
IHZvaWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2Fy
ZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KICByYXdfc3RvcmFnZV9pdGVyYXRvciYg
b3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICByYXdfc3RvcmFnZV9pdGVyYXRvciYgb3Bl
cmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KSB7CiAgICBjb25zdHJ1Y3QoJipfTV9pdGVyLCBf
X2VsZW1lbnQpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxf
Rm9yd2FyZEl0ZXJhdG9yLCBfVHA+JiBvcGVyYXRvcisrKCkgewogICAgKytfTV9pdGVyOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9y
LCBfVHA+IG9wZXJhdG9yKysoaW50KSB7CiAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2Fy
ZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CiAgICArK19NX2l0ZXI7CiAgICByZXR1cm4g
X190bXA7CiAgfQp9OwojIDc1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfcmF3
X3N0b3JhZ2VfaXRlci5oIiAzCn0KIyAyNyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz
MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX21lbW9yeS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQgewoKCgoKIHRlbXBsYXRlPGNsYXNzIF9U
cDE+IHN0cnVjdCBhdXRvX3B0cl9yZWYgewogICBfVHAxKiBfTV9wdHI7CiAgIGF1dG9fcHRyX3Jl
ZihfVHAxKiBfX3ApIDogX01fcHRyKF9fcCkge30KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4g
Y2xhc3MgYXV0b19wdHIgewpwcml2YXRlOgogIF9UcCogX01fcHRyOwoKcHVibGljOgogIHR5cGVk
ZWYgX1RwIGVsZW1lbnRfdHlwZTsKCiAgZXhwbGljaXQgYXV0b19wdHIoX1RwKiBfX3AgPSAwKSB0
aHJvdygpIDogX01fcHRyKF9fcCkge30KICBhdXRvX3B0cihhdXRvX3B0ciYgX19hKSB0aHJvdygp
IDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYXV0
b19wdHIoYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgOiBfTV9wdHIoX19hLnJlbGVh
c2UoKSkge30KCgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHImIF9fYSkgdGhyb3coKSB7
CiAgICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX1RwMT4KICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBf
X2EpIHRocm93KCkgewogICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQoKCgoKCgogIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQoKICBfVHAmIG9wZXJh
dG9yKigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuICpfTV9wdHI7CiAgfQogIF9UcCogb3Bl
cmF0b3ItPigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuIF9NX3B0cjsKICB9CiAgX1RwKiBn
ZXQoKSBjb25zdCB0aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9UcCogcmVsZWFz
ZSgpIHRocm93KCkgewogICAgX1RwKiBfX3RtcCA9IF9NX3B0cjsKICAgIF9NX3B0ciA9IDA7CiAg
ICByZXR1cm4gX190bXA7CiAgfQogIHZvaWQgcmVzZXQoX1RwKiBfX3AgPSAwKSB0aHJvdygpIHsK
ICAgIGlmIChfX3AgIT0gX01fcHRyKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0
ciA9IF9fcDsKICAgIH0KICB9CiMgMTAzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGRfbWVtb3J5LmgiIDMKcHVibGljOgogIGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxfVHA+IF9fcmVm
KSB0aHJvdygpCiAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIpIHt9CgogIGF1dG9fcHRyJiBvcGVy
YXRvcj0oYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkgewogICAgaWYgKF9fcmVmLl9N
X3B0ciAhPSB0aGlzLT5nZXQoKSkgewogICAgICBkZWxldGUgX01fcHRyOwogICAgICBfTV9wdHIg
PSBfX3JlZi5fTV9wdHI7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQogICAgeyBy
ZXR1cm4gYXV0b19wdHJfcmVmPF9UcD4odGhpcy0+cmVsZWFzZSgpKTsgfQogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93KCkKICAgIHsgcmV0dXJu
IGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCgp9OwoKfQojIDQ0ICIvaG9tZTUv
a3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFr
b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
MC9pbmNsdWRlL2crKy9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDQ1ICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgNDYgIi9ob21lNS9rcmFrb3cvZ251L2xv
Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu
MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr
L2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDM4ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y
MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv
Yml0cy9iYXNpY19zdHJpbmcuaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi9ob21lNS9rcmFr
b3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
MC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2F0b21pY2l0eS5oIiAzCnR5
cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbnQKX19hdHRyaWJ1dGVfXyAoKF9fdW51
c2VkX18pKQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0s
IGludCBfX3ZhbCkKewogIHN0YXRpYyB1bnNpZ25lZCBjaGFyIF9fbG9jazsKICBfQXRvbWljX3dv
cmQgX19yZXN1bHQsIF9fdG1wOwoKICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToJbGRzdHViCVsl
MV0sICUwXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiCiAgICAg
ICAgICAgICAgICAgICAgICAgIglibmUJMWJcblx0IgogICAgICAgICAgICAgICAgICAgICAgICIJ
IG5vcCIKICAgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiIChfX3RtcCkKICAgICAgICAgICAg
ICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykKICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1v
cnkiKTsKICBfX3Jlc3VsdCA9ICpfX21lbTsKICAqX19tZW0gKz0gX192YWw7CiAgX19hc21fXyBf
X3ZvbGF0aWxlX18oInN0YgklJWcwLCBbJTBdIgogICAgICAgICAgICAgICAgICAgICAgIDoKICAg
ICAgICAgICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykKICAgICAgICAgICAgICAgICAgICAg
ICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyB2b2lkCl9fYXR0cmli
dXRlX18gKChfX3VudXNlZF9fKSkKX19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQq
IF9fbWVtLCBpbnQgX192YWwpCnsKICBzdGF0aWMgdW5zaWduZWQgY2hhciBfX2xvY2s7CiAgX0F0
b21pY193b3JkIF9fdG1wOwoKICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToJbGRzdHViCVslMV0s
ICUwXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiCiAgICAgICAg
ICAgICAgICAgICAgICAgIglibmUJMWJcblx0IgogICAgICAgICAgICAgICAgICAgICAgICIJIG5v
cCIKICAgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiIChfX3RtcCkKICAgICAgICAgICAgICAg
ICAgICAgICA6ICJyIiAoJl9fbG9jaykKICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnki
KTsKICAqX19tZW0gKz0gX192YWw7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcwLCBb
JTBdIgogICAgICAgICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgICAgICAgICA6ICJy
IiAoJl9fbG9jaykKICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKfQoKc3RhdGlj
IGludApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fY29tcGFyZV9hbmRfc3dhcCAodm9s
YXRpbGUgbG9uZyAqX19wLCBsb25nIF9fb2xkdmFsLCBsb25nIF9fbmV3dmFsKQp7CiAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgX19sb2NrOwogIGxvbmcgX19yZXQsIF9fdG1wOwoKICBfX2FzbV9fIF9f
dm9sYXRpbGVfXygiMToJbGRzdHViCVslMV0sICUwXG5cdCIKICAgICAgICAgICAgICAgICAgICAg
ICAiCWNtcAklMCwgMFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgIglibmUJMWJcblx0Igog
ICAgICAgICAgICAgICAgICAgICAgICIJIG5vcCIKICAgICAgICAgICAgICAgICAgICAgICA6ICI9
JnIiIChfX3RtcCkKICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykKICAgICAg
ICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICBpZiAoKl9fcCAhPSBfX29sZHZhbCkKICAg
IF9fcmV0ID0gMDsKICBlbHNlCiAgICB7CiAgICAgICpfX3AgPSBfX25ld3ZhbDsKICAgICAgX19y
ZXQgPSAxOwogICAgfQogIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdGIJJSVnMCwgWyUwXSIKICAg
ICAgICAgICAgICAgICAgICAgICA6CiAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgKCZfX2xv
Y2spCiAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CgogIHJldHVybiBfX3JldDsK
fQojIDQwICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9iYXNpY19zdHJpbmcuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkIHsKIyA4MiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvYmFz
aWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1
YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxv
YyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlw
ZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5
cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJl
bmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVy
ZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2lu
dGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVy
IGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwg
YmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxj
b25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7
CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRv
cjsKCiAgICBwcml2YXRlOgojIDExNyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvYmFz
aWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvYzo6cmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwoj
IDEzNSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAg
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOwogICAgICAgIHN0YXRpYyBj
b25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7CiAg
ICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5OwogICAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZl
cmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAgX01faXNfbGVha2VkKCkgY29uc3QKICAgICAg
ICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBib29sCiAgICAgICAgX01f
aXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzID4gMDsgfQoK
ICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xlYWtlZCgpCiAgICAgICAgeyBfTV9yZWZlcmVu
Y2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9zaGFyYWJsZSgpCiAgICAg
ICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVm
ZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0PF9DaGFyVCo+
ICh0aGlzICsgMSk7IH0KCiAgICAgICAgX0NoYXJUJgogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90
IF9fcykgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmRhdGEoKSBbX19zXTsgfQoKICAg
ICAgICBfQ2hhclQqCiAgICAgICAgX01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25z
dCBfQWxsb2MmIF9fYWxsb2MyKQogICAgICAgIHsgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYg
X19hbGxvYzEgPT0gX19hbGxvYzIpID8KICAgICAgICAgICAgX01fcmVmY29weSgpIDogX01fY2xv
bmUoX19hbGxvYzEpOyB9CgoKICAgICAgICBzdGF0aWMgX1JlcCoKICAgICAgICBfU19jcmVhdGUo
c2l6ZV90LCBjb25zdCBfQWxsb2MmKTsKCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rpc3Bvc2Uo
Y29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5k
X2FkZCgmX01fcmVmZXJlbmNlcywgLTEpIDw9IDApCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19h
KTsKICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxv
YyYpIHRocm93KCk7CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3co
KQogICAgICAgIHsKICAgICAgICAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAg
ICAgICAgICByZXR1cm4gX01fcmVmZGF0YSgpOwogICAgICAgIH0KCiAgICAgICAgX0NoYXJUKgog
ICAgICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOwojIDIw
NyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAg
ICBpbmxpbmUgc3RhdGljIGJvb2wKICAgICAgICBfU19leGNlc3Nfc2xvcChzaXplX3QsIHNpemVf
dCk7CgogICAgICB9OwoKCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MKICAgICAg
ewogICAgICAgIF9BbGxvY19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25zdCBfQWxsb2MmIF9fYSkK
ICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAgICAgICAgX0NoYXJUKiBf
TV9wOwogICAgICB9OwoKICAgIHB1YmxpYzoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlw
ZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7CgogICAgcHJpdmF0ZToKCiAgICAg
IG11dGFibGUgX0FsbG9jX2hpZGVyIF9NX2RhdGFwbHVzOwoKCgogICAgICBzdGF0aWMgc2l6ZV90
eXBlIF9TX2VtcHR5X3JlcF9zdG9yYWdlWyhzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSAr
IHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKICAgICAgX0NoYXJU
KgogICAgICBfTV9kYXRhKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsg
fQoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQogICAgICB7IHJldHVy
biAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7IH0KCiAgICAgIF9SZXAqCiAgICAgIF9NX3JlcCgp
IGNvbnN0CiAgICAgIHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+IChfTV9kYXRh
KCkpKVstMV0pOyB9CgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2liZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2ll
bmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9
CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWsoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9yZXAo
KS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgICBfTV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAg
ICAgaXRlcmF0b3IKICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7
CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRf
b2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6X01fY2hlY2siKTsKICAgICAgICByZXR1cm4gX01faWJl
Z2luKCkgKyBfX3BvczsKICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2ZvbGQoc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19vZmYpIGNvbnN0CiAgICAgIHsKICAgICAgICBib29s
IF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgc2l6ZV90
eXBlIF9fbmV3b2ZmID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3BvczsK
ICAgICAgICByZXR1cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25ld29mZik7CiAgICAgIH0K
CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAgIHN0YXRpYyB2b2lkCiAg
ICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRv
ciBfX2syKQogICAgICAgIHsKICAgICAgICAgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwg
KytfX3ApCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOwogICAg
ICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3As
IGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3As
IF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9T
X2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJh
dG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJh
c2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBf
X3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5
KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19j
b3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCog
X19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsg
fQoKICAgICAgdm9pZAogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19sZW4xLCBzaXplX3R5cGUgX19sZW4yKTsKCiAgICAgIHZvaWQKICAgICAgX01fbGVha19oYXJk
KCk7CgogICAgICBzdGF0aWMgX1JlcCYKICAgICAgX1NfZW1wdHlfcmVwKCkKICAgICAgeyByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBfc3RvcmFnZSk7IH0KCiAg
ICBwdWJsaWM6CgoKCgogICAgICBpbmxpbmUKICAgICAgYmFzaWNfc3RyaW5nKCk7CgogICAgICBl
eHBsaWNpdAogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpOwoKCiAgICAgIGJh
c2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKICAgICAgYmFzaWNfc3RyaW5n
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAg
ICAgICAgIHNpemVfdHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNp
emVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICAgIGJhc2ljX3N0cmluZyhjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9B
bGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBf
X3MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoc2l6
ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7Cgog
ICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmco
X0lucHV0SXRlcmF0b3IgX19iZWdpbiwgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0
cmluZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigp
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMt
PmFzc2lnbihfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hh
clQgX19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oMSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9y
CiAgICAgIGJlZ2luKCkKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4g
aXRlcmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAg
YmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9
CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKQogICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsK
ICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAg
IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVy
c2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRv
cih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJl
Z2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5l
bmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5
cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAg
ICAgIHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01f
bGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVy
biBfUmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBl
IF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19u
KSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg
IGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAg
ICB2b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9p
ZAogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAg
IGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoK
CiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3Mp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5j
ZQogICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3BvcykKICAgICAgewogICAgICAgIF9NX2xl
YWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsKICAgICAgfQoKICAgICAgY29u
c3RfcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAg
ICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAg
ICB9CgogICAgICByZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgewogICAg
ICAgIGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2Rh
dGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9f
cykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBl
KDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQq
IF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0
aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9f
biwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAg
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N
X2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAg
IHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBf
TV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3Np
Z24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9jaGVjayhf
X3BvcyksIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgICB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAg
ICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgX19zICsgX19uKTsgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRo
aXMtPmFzc2lnbihfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBf
X2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigp
LCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0
KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5y
ZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0
b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVwbGFjZShf
X3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNl
cnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgewog
ICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVw
bGFjZShfX3AsIF9fcCwgX19zdHIuX01faWJlZ2luKCksIF9fc3RyLl9NX2llbmQoKSk7CiAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2Vy
dChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAg
ICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGl0ZXJh
dG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9f
cCwgX19zdHIuX01fY2hlY2soX19wb3MyKSwKICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9N
X2ZvbGQoX19wb3MyLCBfX24pKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9j
aGVjayhfX3Bvcyk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zLCBfX3MgKyBf
X24pOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyBy
ZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9j
aGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAg
ICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hh
clQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigp
OwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19j
KTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlz
LT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7
CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9f
cG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0
YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3Np
dGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJl
Z2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwg
X01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7
CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRv
cgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsK
ICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRo
aXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAg
ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSAr
IF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAg
ewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChf
X3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuYmVnaW4oKSwg
X19zdHIuZW5kKCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo
c2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQog
ICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9m
b2xkKF9fcG9zLCBfX24xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyAr
IF9fbjIpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsKICAg
ICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3Ms
IF9fbjEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs
YWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hh
clQgX19jKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19w
b3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsKICAgICAgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19p
MSwgX19pMiwgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAg
IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCBfX3MgKyBfX24pOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19p
MSwgX19pMiwgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcyArIHRyYWl0c190
eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShp
dGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsK
CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBfX2syKQogICAgICAg
IHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwKICAgICAgICAgICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVn
b3J5KCkpOyB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19p
MSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfRndkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3Jl
cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Z3ZEl0ZXJhdG9yIF9fazEsCiAg
ICAgICAgICAgICAgICAgICBfRndkSXRlcmF0b3IgX19rMiwgZm9yd2FyZF9pdGVyYXRvcl90YWcp
OwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQq
CiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBj
b25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkK
ICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5J
dGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1
Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8
Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVj
dF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICBy
ZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCksIF9f
YSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0
aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9f
ZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAg
cmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsK
ICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMg
X0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2Vu
ZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv
cl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAgICAgICBzdGF0aWMg
X0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2VuZCwgX0Z3ZEl0ZXIgX19i
ZWcsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
dG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90
eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgcHVibGljOgoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNp
emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBzd2FwKGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAgY29uc3QgX0NoYXJU
KgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRo
aXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtfX25dLCBf
UmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsKICAgICAgfQoKICAg
ICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9
CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1
cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
cG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0ci5kYXRhKCksIF9f
cG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z
dDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
LCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmlu
ZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJm
aW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVf
dHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25z
dDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAg
ZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNf
dHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9v
ZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0
X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9z
LCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNv
bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6
ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0
X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVf
dHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBv
cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k
X2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29u
c3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZp
bmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K
CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXpl
X3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rf
bm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3Mp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgp
LCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFz
dF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp
bmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3Mp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3Bvcywg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf
bGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7Cgog
ICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVf
dHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+
c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6c3Vi
c3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywgX19wb3MsIF9fbik7CiAg
ICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp
IGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIHNpemVfdHlw
ZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBpbnQgX19yID0gdHJhaXRz
X3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgICBp
ZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgICAgcmV0dXJu
IF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsKCiAgICAgIGlu
dAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVf
dHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCog
X19zKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBf
X24yID0gbnBvcykgY29uc3Q7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKCkKICAgIDogX01fZGF0
YXBsdXMoX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpLCBfQWxsb2MoKSkgeyB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo
cykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0
cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAg
b3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3Bl
cmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz
LAogICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFw
cGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLCBfQ2hhclQgX19y
aHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6
OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cihfX2xocyk7
CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19yaHMpOwogICAgICByZXR1cm4g
X19zdHI7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg
IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykg
IT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFy
VCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0g
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4g
X19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo
cywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu
Y29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PChjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFy
ZShfX2xocykgPiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7
IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy
biBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCogX19saHMs
CiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fcmhzKQogIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID49IDA7IH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu
Y29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAog
ICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29t
cGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49
KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUo
X19saHMpIDw9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBfX2xocy5zd2FwKF9fcmhz
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
YXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7Cn0KIyA0NyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwu
MjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKCgojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw
MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF9hbGdvcml0aG0uaCIgMSAzCiMgMzEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw
MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF9hbGdvcml0aG0uaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgMzMgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz
L3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz
MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RsX2NvbnN0cnVjdC5oIiAxIDMKIyAzNCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz
MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAw
MTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyAzNiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz
MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfYWxnby5oIiAxIDMKIyAzNCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Fs
Z28uaCIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9oZWFwLmgiIDEg
MwojIDMzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVz
cGFjZSBzdGQgewoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZvaWQKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rp
c3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0g
KF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXgg
JiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgKihfX2ZpcnN0ICsgX19o
b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3Bh
cmVudDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmly
c3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19w
dXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNlKiwgX1RwKikKewogIF9f
cHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rp
c3RhbmNlKDApLAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCnB1c2hfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkK
ewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0gX011dGFibGVf
UmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSAp
ID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlID4gOjpfTGVz
c1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fcHVzaF9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7
CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChf
X2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwg
X192YWx1ZSkpIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9f
cGFyZW50KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hv
bGVJbmRleCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1
ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBh
cmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19w
dXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wLAogICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikKewogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0
YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAg
IF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCnB1c2hfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciApID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgPiA6Ol9NdXRhYmxlX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAg
ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNl
LCBjbGFzcyBfVHA+CnZvaWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
aXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl
biwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4Owog
IF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAo
X19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls
ZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgX19zZWNvbmRDaGls
ZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRD
aGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxk
ID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9f
bGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNv
bmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQog
IF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkCl9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0Rpc3RhbmNlKikKewogICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDAp
LCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcG9wX2hl
YXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICBfVHAqKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBf
X2xhc3QgLSAxLCBfX2xhc3QgLSAxLAogICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBf
X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yPgppbmxpbmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkK
ewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0gX011dGFibGVf
UmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSAp
ID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlID4gOjpfTGVz
c1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKCiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m
aXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
RGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fYWRq
dXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJ
bmRleCwKICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFy
ZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0
YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNv
bmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoX19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hp
bGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkpCiAgICAgIF9fc2Vjb25kQ2hp
bGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25k
Q2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19zZWNvbmRDaGls
ZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRDaGlsZCA9PSBf
X2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vj
b25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0K
ICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwg
X19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv
aWQKX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1
bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAsCiAgICAgICAgICAgX0Rpc3RhbmNlKikK
ewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3Rh
bmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICBfX3Zh
bHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1eChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19wb3BfaGVhcChfX2Zp
cnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVHAoKihfX2xhc3QgLSAxKSksIF9fY29tcCwK
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApwb3Bf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgZG8geyB2b2lkICgqX194KSgg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyYXRvciA+IDo6X011dGFibGVf
UmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBl
KF9fZmlyc3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikg
cmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNl
IF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0
X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQp
KSk7CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCm1ha2Vf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0g
X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpf
X3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFs
dWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBl
ID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAg
ICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9f
bGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0g
X19maXJzdDsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGlsZSAo
dHJ1ZSkgewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgq
KF9fZmlyc3QgKyBfX3BhcmVudCkpLAogICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgaWYg
KF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQK
bWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgZG8geyB2b2lkICgq
X194KSggX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyYXRvciA+IDo6X011
dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAog
ICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmly
c3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4Kdm9pZCBzb3J0
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgKSA9
IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgq
X194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZh
bHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlw
ZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9o
ZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Nv
bXBhcmUgX19jb21wKQp7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
ICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHdoaWxlIChf
X2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2Nv
bXApOwp9CgoKCgoKfQojIDM1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxn
by5oIiAyIDMKCgoKCgpuYW1lc3BhY2Ugc3RkIHsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9f
YiwgY29uc3QgX1RwJiBfX2MpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgKSA9IF9MZXNzVGhh
bkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAgPiA6Ol9MZXNzVGhhbkNvbXBh
cmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGlm
IChfX2EgPCBfX2IpCiAgICBpZiAoX19iIDwgX19jKQogICAgICByZXR1cm4gX19iOwogICAgZWxz
ZSBpZiAoX19hIDwgX19jKQogICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4g
X19hOwogIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19i
IDwgX19jKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYKX19tZWRpYW4o
Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUg
X19jb21wKSB7CiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCBfVHAmLCBjb25z
dCBfVHAmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUsIGJvb2wsIF9U
cCwgX1RwPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwogIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgaWYgKF9fY29tcChf
X2IsIF9fYykpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2Mp
KQogICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYg
KF9fY29tcChfX2EsIF9fYykpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2Is
IF9fYykpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Z1bmN0aW9uPgpfRnVuY3Rpb24gZm9yX2VhY2go
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikgewog
IGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkKICAgIF9fZigqX19maXJzdCk7CiAgcmV0dXJuIF9fZjsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRlciBm
aW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9p
dGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9
PSBfX3ZhbCkpCiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5k
X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3By
ZWQoKl9fZmlyc3QpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRl
ciBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAg
ICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3Vu
dAogICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQg
PiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu
IF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1
cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl
dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkg
cmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19m
aXJzdCkgewogIGNhc2UgMzoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy
ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoKl9fZmlyc3Qg
PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZh
dWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAg
ICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg
OyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp
cnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m
aXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBf
X2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsK
ICBjYXNlIDM6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp
cnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy
ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJl
dHVybiBfX2xhc3Q7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
VHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CiAgZG8g
eyB2b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiwgX1RwJiApID0gX1NU
TF9CSU5BUllfT1BfRVFVQUxfRVJST1I8IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSwgX1RwPjo6X19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBib29sICgqX195KSggY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgX1RwJiApID0gX1NUTF9CSU5BUllfT1Bf
RVFVQUxfRVJST1I8IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6
dmFsdWVfdHlwZSwgX1RwPjo6IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX195ID0gX195OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICByZXR1cm4gZmlu
ZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBf
SW5wdXRJdGVyIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewogIGRvIHsgdm9p
ZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9QcmVkaWNhdGUm
LCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUm
ICkgPSBfU1RMX1VOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfUHJlZGljYXRlLCBib29sLCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGU+OjpfX3VuYXJ5X2Z1bmN0
aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgcmV0
dXJuIGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRl
ciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
KSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9y
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZv
aWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf
dHlwZSApID0gX0VxdWFsaXR5Q29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfRXF1YWxp
dHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2Fy
ZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAg
IGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmly
c3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9m
aW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCko
IF9CaW5hcnlQcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9C
aW5hcnlQcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVy
biBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25l
eHQgIT0gX19sYXN0KSB7CiAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkp
CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgX19maXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJu
IF9fbGFzdDsKfQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX1NpemU+CnZvaWQgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIF9TaXplJiBfX24pIHsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgKSA9IF9FcXVhbGl0eUNv
bXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZvaWQgKCpfX3gp
KCBfVHAgKSA9IF9FcXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAg
PiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAg
IGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICArK19fbjsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9TaXplPgp2b2lkIGNvdW50X2lm
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVk
LAogICAgICAgICAgICAgIF9TaXplJiBfX24pIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJ
dGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIg
PiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfUHJlZGljYXRlJiwgY29uc3QgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9VTkFSWV9G
VU5DVElPTl9FUlJPUjwgX1ByZWRpY2F0ZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICArK19fbjsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgp0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgKSA9IF9FcXVhbGl0eUNv
bXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZvaWQgKCpfX3gp
KCBfVHAgKSA9IF9FcXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAg
PiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlm
ZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwogIHJldHVybiBf
X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgp0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudF9p
ZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJl
ZCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2Nv
bmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9f
eCkoIF9QcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX1VOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfUHJlZGljYXRl
LCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGU+
OjpfX3VuYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJl
bmNlX3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsKfQoK
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4K
X0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBf
Rm9yd2FyZEl0ZXIyIF9fbGFzdDIpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIx
ICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVy
MSA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMiApID0gX0Zvcndh
cmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjIgPiA6Ol9Gb3J3
YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIGRvIHsgYm9vbCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXIxPjo6dmFsdWVfdHlwZSYsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIy
Pjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X29w
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgYm9vbCAoKl9feSkoIGNvbnN0IHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExf
QklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXIyPjo6dmFsdWVfdHlwZT46OiBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feSA9IF9feTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgoKCiAgaWYg
KF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBf
X2ZpcnN0MTsKCgogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAg
aWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwg
Kl9fZmlyc3QyKTsKCgoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmly
c3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEs
IF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAg
cmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3Qx
OwogICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3QxOwoK
ICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsKICAgICAgaWYgKCsrX19wID09IF9fbGFz
dDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19s
YXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwogIH0K
ICByZXR1cm4gX19maXJzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFz
cyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyMSBzZWFyY2go
X0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQp7CiAgZG8geyB2
b2lkICgqX194KSggX0ZvcndhcmRJdGVyMSApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3Nw
ZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjEgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCko
IF9Gb3J3YXJkSXRlcjIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9u
PCBfRm9yd2FyZEl0ZXIyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQmluYXJ5UHJl
ZCYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVf
dHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFs
dWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQmluYXJ5UHJlZCwgYm9v
bCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGU+OjpfX2Jp
bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIp
CiAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsK
ICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAr
K19fZmlyc3QxOwogICAgcmV0dXJuIF9fZmlyc3QxOwogIH0KCgoKICBfRm9yd2FyZEl0ZXIyIF9f
cDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19j
dXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmly
c3QxLCAqX19maXJzdDIpKQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3QxOwogICAgfQog
ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3Qx
KQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwogICAgX19jdXJyZW50ID0g
X19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFzdDE7
CgogICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgIGlmICgr
K19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19j
dXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytf
X2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciBzZWFyY2hf
bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpIHsKICBkbyB7IHZv
aWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfRXF1
YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZv
aWQgKCpfX3gpKCBfVHAgKSA9IF9FcXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfVHAgPiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
KTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBfSW50ZWdlciBfX24gPSBf
X2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19p
OwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFs
KSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9
PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgICAgX19maXJzdCA9
IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVn
ZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkIF9fYmluYXJ5X3ByZWQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIg
KSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIg
PiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9CaW5hcnlQcmVkJiwgY29uc3QgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCBfVHAm
ICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0JpbmFyeVByZWQsIGJvb2wsIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlLCBfVHA+OjpfX2Jp
bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CgogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlIHsKICAg
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19m
aXJzdCwgX192YWwpKQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3Q7CiAgICB9CiAgICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAt
IDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAg
d2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJlZCgqX19pLCBf
X3ZhbCkpIHsKICAgICAgICArK19faTsKICAgICAgICAtLV9fbjsKICAgICAgfQogICAgICBpZiAo
X19uID09IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdo
aWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19pLCBf
X3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAg
ICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpf
Rm9yd2FyZEl0ZXIyIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJk
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f
Zmlyc3QyKSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMSApID0gX011dGFibGVf
Rm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyMSA+IDo6
X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIyICkgPSBfTXV0
YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIy
ID4gOjpfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9DT05WRVJUX0VSUk9SPCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgLCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUgPjo6X190eXBl
X1hfaXNfbm90X2NvbnZlcnRpYmxlX3RvX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cjI+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+
Ojp2YWx1ZV90eXBlICkgPSBfU1RMX0NPTlZFUlRfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9pc19ub3RfY29udmVydGli
bGVfdG9fdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBmb3IgKCA7IF9fZmlyc3Qx
ICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpdGVyX3N3YXAoX19maXJz
dDEsIF9fZmlyc3QyKTsKICByZXR1cm4gX19maXJzdDI7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVW5hcnlPcGVyYXRpb24+Cl9PdXRw
dXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlv
biBfX3VuYXJ5X29wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8g
eyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3Nw
ZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29w
KCpfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xh
c3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9J
bnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1
dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1
dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBk
byB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZm9yICggOyBfX2ZpcnN0MSAh
PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAgKl9fcmVz
dWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwogIHJldHVybiBfX3Jlc3Vs
dDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgcmVw
bGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBk
byB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X011dGFibGVfRm9yd2Fy
ZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICBkbyB7IGJvb2wgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
Pjo6dmFsdWVfdHlwZSYsIF9UcCYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29s
LCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSwgX1Rw
Pjo6X19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBib29sICgqX195KSgg
Y29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUm
LCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9PUF9FUVVBTF9FUlJPUjwgYm9vbCwgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUsIF9UcD46OiBfX2Nv
bnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feSA9IF9feTsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyB2b2lkICgqX194KSggX1RwICwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfQ09OVkVS
VF9FUlJPUjwgX1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh
bHVlX3R5cGUgPjo6X190eXBlX1hfaXNfbm90X2NvbnZlcnRpYmxlX3RvX3R5cGVfWTsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICBpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdf
dmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUs
IGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9U
cCYgX19uZXdfdmFsdWUpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9N
dXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRl
ciA+IDo6X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgLCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9DT05WRVJU
X0VSUk9SPCBfVHAgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs
dWVfdHlwZSA+OjpfX3R5cGVfWF9pc19ub3RfY29udmVydGlibGVfdG9fdHlwZV9ZOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9QcmVkaWNhdGUmLCBjb25zdCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9T
VExfVU5BUllfRlVOQ1RJT05fRVJST1I8IF9QcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X191bmFyeV9mdW5jdGlvbl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQog
ICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBkbyB7IHZv
aWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRl
ciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIg
PiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiwgX1RwJiApID0gX1NUTF9CSU5BUllfT1BfRVFVQUxfRVJS
T1I8IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlw
ZSwgX1RwPjo6X19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBib29sICgq
X195KSggY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90
eXBlJiwgY29uc3QgX1RwJiApID0gX1NUTF9CSU5BUllfT1BfRVFVQUxfRVJST1I8IGJvb2wsIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSwgX1RwPjo6IF9f
Y29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX195ID0gX195OyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1
ZSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUs
IGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0
SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVy
ID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
Ym9vbCAoKl9feCkoIF9QcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX1VOQVJZX0ZVTkNUSU9OX0VSUk9SPCBf
UHJlZGljYXRlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZh
bHVlX3R5cGU+OjpfX3VuYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3Zh
bHVlIDogKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9HZW5lcmF0b3I+CnZvaWQgZ2VuZXJhdGUoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pIHsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKCpfX3gpKCBfR2VuZXJhdG9y
JikgPSBfU1RMX0dFTkVSQVRPUl9FUlJPUjwgX0dlbmVyYXRvciwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGU+OjpfX2dlbmVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4KX091dHB1
dEl0ZXIgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0
b3IgX19nZW4pIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0
ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZm9y
ICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwog
IHJldHVybiBfX2ZpcnN0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
T3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZG8geyB2b2lkICgqX194
KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
SW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9P
dXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0
cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIGRvIHsgYm9vbCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
Pjo6dmFsdWVfdHlwZSYsIF9UcCYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29s
LCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUsIF9UcD46
Ol9fYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgYm9vbCAoKl9feSkoIGNv
bnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSYsIGNv
bnN0IF9UcCYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUsIF9UcD46OiBfX2NvbnN0X2Jp
bmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feSA9IF9feTsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+
Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBfUHJlZGljYXRlIF9fcHJlZCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9
IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lu
cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIGRvIHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpf
X3gpKCBfUHJlZGljYXRlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9VTkFSWV9GVU5DVElPTl9FUlJPUjwgX1ByZWRpY2F0
ZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBl
Pjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlm
ICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg
KytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fdmFsdWUpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9NdXRh
YmxlX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+
IDo6X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYsIF9UcCYgKSA9IF9TVExfQklOQVJZX09Q
X0VRVUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
Pjo6dmFsdWVfdHlwZSwgX1RwPjo6X19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBib29sICgqX195KSggY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9PUF9FUVVBTF9F
UlJPUjwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUsIF9UcD46OiBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feSA9IF9feTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyB2b2lkICgqX194
KSggX1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5
cGUgKSA9IF9TVExfQ09OVkVSVF9FUlJPUjwgX1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfaXNfbm90X2NvbnZlcnRpYmxl
X3RvX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfX2ZpcnN0ID0gZmluZChfX2Zp
cnN0LCBfX2xhc3QsIF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogIHJl
dHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiByZW1vdmVfY29weSgrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVy
IHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewogIGRvIHsgdm9pZCAoKl9f
eCkoIF9Gb3J3YXJkSXRlciApID0gX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAo
Kl9feCkoIF9QcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfVU5BUllfRlVOQ1RJT05fRVJST1I8IF9QcmVk
aWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1
ZV90eXBlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CgogIF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19w
cmVkKTsKICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJzdCA9PSBf
X2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlf
aWYoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX19wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191
bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKSB7CiAgX1RwIF9f
dmFsdWUgPSAqX19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmly
c3QgIT0gX19sYXN0KQogICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgX192
YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0
dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0
cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dF9pdGVyYXRvcl90YWcpIHsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7
CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAg
ICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQogICAgICAqKytfX3Jlc3VsdCA9ICpfX2Zp
cnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJ
dGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIg
PiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJh
dG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRv
cl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2
b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90
eXBlICkgPSBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfRXF1YWxpdHlD
b21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5p
cXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZSwKICAgICAg
ICAgIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCwgX1RwKikgewogIGRvIHsgYm9vbCAoKl9feCkoIF9CaW5hcnlQcmVkaWNh
dGUmLCBjb25zdCBfVHAmLCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJP
UjwgX0JpbmFyeVByZWRpY2F0ZSwgYm9vbCwgX1RwLCBfVHA+OjpfX2JpbmFyeV9mdW5jdGlvbl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX1RwIF9fdmFs
dWUgPSAqX19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3Qg
IT0gX19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewog
ICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAg
IH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0
ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFn
KSB7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19i
aW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQ
cmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpIHsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQmluYXJ5UHJlZGljYXRlJiwg
Y29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUm
LCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUm
ICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0JpbmFyeVByZWRpY2F0ZSwgYm9vbCwg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUsIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1
bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgog
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAg
aWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9ICpf
X2ZpcnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfT3V0
cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By
ZWQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpf
X3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4g
X19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJk
SXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsK
ICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9NdXRhYmxlX0ZvcndhcmRJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X011dGFibGVfRm9y
d2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyPjo6dmFsdWVfdHlwZSApID0gX0VxdWFsaXR5Q29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmlj
YXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBl
ID4gOjpfRXF1YWxpdHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKCiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0
KTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0Zvcndh
cmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBk
byB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X011dGFibGVfRm9yd2Fy
ZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICBkbyB7IGJvb2wgKCpfX3gpKCBfQmluYXJ5UHJlZGljYXRlJiwgY29uc3QgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZ
X0ZVTkNUSU9OX0VSUk9SPCBfQmluYXJ5UHJlZGljYXRlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBfX2ZpcnN0ID0gYWRq
YWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogIHJldHVybiB1bmlx
dWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CnZvaWQgX19yZXZlcnNlKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKQogICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgIHJldHVybjsK
ICAgIGVsc2UKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAgICBp
dGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJl
Y3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfQmlk
aXJlY3Rpb25hbEl0ZXIgKSA9IF9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0
X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFsSXRlciA+IDo6X011dGFibGVfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmly
c3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX091dHB1
dEl0ZXI+Cl9PdXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIGRvIHsgdm9p
ZCAoKl9feCkoIF9CaWRpcmVjdGlvbmFsSXRlciApID0gX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFsSXRlciA+IDo6X0JpZGlyZWN0aW9u
YWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25j
ZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkgewogICAgLS1fX2xhc3Q7CiAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAg
KytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
RXVjbGlkZWFuUmluZ0VsZW1lbnQ+Cl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChfRXVjbGlk
ZWFuUmluZ0VsZW1lbnQgX19tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0V1Y2xpZGVh
blJpbmdFbGVtZW50IF9fbikKewogIHdoaWxlIChfX24gIT0gMCkgewogICAgX0V1Y2xpZGVhblJp
bmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgIF9fbSA9IF9fbjsKICAgIF9fbiA9IF9fdDsK
ICB9CiAgcmV0dXJuIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKiwKICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgaWYg
KF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0g
X19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0g
X19taWRkbGU7CiAgZG8gewogICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBp
ZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICB9IHdo
aWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoKICBfRm9yd2FyZEl0ZXIgX19uZXdfbWlkZGxlID0g
X19maXJzdDsKCiAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgd2hpbGUgKF9fZmlyc3QyICE9IF9f
bGFzdCkgewogICAgc3dhcCAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYgKF9fZmly
c3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICBlbHNlIGlmIChf
X2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgfQoKICByZXR1
cm4gX19uZXdfbWlkZGxlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25hbEl0ZXIgX19yb3RhdGUoX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAg
ZG8geyB2b2lkICgqX194KSggX0JpZGlyZWN0aW9uYWxJdGVyICkgPSBfTXV0YWJsZV9CaWRpcmVj
dGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIg
PiA6Ol9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICBy
ZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJz
dDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZygpKTsKICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcoKSk7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9
IF9fbGFzdCkKICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlmIChfX2ZpcnN0
ID09IF9fbWlkZGxlKSB7CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19sYXN0OwogIH0KICBlbHNlIHsKICAg
IF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWco
KSk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9f
cm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSAqLCBfVHAgKikgewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVy
ICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248
IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX0Rpc3RhbmNlIF9f
biA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxlIC0gX19maXJz
dDsKICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVz
dWx0ID0gX19maXJzdCArIChfX2xhc3QgLSBfX21pZGRsZSk7CgogIGlmIChfX2sgPT0gMCkKICAg
IHJldHVybiBfX2xhc3Q7CgogIGVsc2UgaWYgKF9fayA9PSBfX2wpIHsKICAgIHN3YXBfcmFuZ2Vz
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoK
ICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICBmb3IgKF9EaXN0YW5jZSBfX2kg
PSAwOyBfX2kgPCBfX2Q7IF9faSsrKSB7CiAgICBfVHAgX190bXAgPSAqX19maXJzdDsKICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgaWYgKF9fayA8IF9fbCkgewogICAg
ICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAg
IGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wp
OwogICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICB9CgogICAgICAgICpfX3AgPSAqKF9fcCAr
IF9fayk7CiAgICAgICAgX19wICs9IF9fazsKICAgICAgfQogICAgfQoKICAgIGVsc2UgewogICAg
ICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAg
ICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgKl9fcCA9ICooX19wICsg
X19rKTsKICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgfQoKICAgICAgICAqX19wID0gKiAo
X19wIC0gX19sKTsKICAgICAgICBfX3AgLT0gX19sOwogICAgICB9CiAgICB9CgogICAgKl9fcCA9
IF9fdG1wOwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIHJvdGF0ZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX0Zvcndh
cmRJdGVyICkgPSBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9u
PCBfRm9yd2FyZEl0ZXIgPiA6Ol9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgcmV0dXJuIF9fcm90YXRlKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0
cHV0SXRlciByb3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0
cHV0SXRlciBfX3Jlc3VsdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0g
X0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6
X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVybiBj
b3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7
Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3RhbmNlIF9fcmFu
ZG9tX251bWJlcihfRGlzdGFuY2UgX19uKSB7CgoKCiAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsK
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCByYW5k
b21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBf
UmFuZG9tQWNjZXNzSXRlciApID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlciA+IDo6X011dGFibGVfUmFuZG9tQWNj
ZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgaXRlcl9zd2Fw
KF9faSwgX19maXJzdCArIF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1JhbmRvbU51bWJlckdl
bmVyYXRvcj4Kdm9pZCByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJl
ckdlbmVyYXRvciYgX19yYW5kKSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0
ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly
c3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3Qg
KyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9PdXRwdXRJdGVy
IHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBf
RGlzdGFuY2UgX19uKQp7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9y
d2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9y
d2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2Nv
bmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX0Rpc3RhbmNlIF9f
cmVtYWluaW5nID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsK
ICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4g
MCkgewogICAgaWYgKF9fcmFuZG9tX251bWJlcihfX3JlbWFpbmluZykgPCBfX20pIHsKICAgICAg
Kl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19vdXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAg
IC0tX19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0
YW5jZSwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+Cl9PdXRwdXRJdGVy
IHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBf
RGlzdGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdl
bmVyYXRvciYgX19yYW5kKQp7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBf
Rm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpf
Rm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBfRGlz
dGFuY2UgKCpfX3gpKCBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiwgY29uc3QgX0Rpc3RhbmNlJiAp
ID0gX1NUTF9VTkFSWV9GVU5DVElPTl9FUlJPUjwgX1JhbmRvbU51bWJlckdlbmVyYXRvciwgX0Rp
c3RhbmNlLCBfRGlzdGFuY2U+OjpfX3VuYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfRGlzdGFuY2UgX19yZW1haW5pbmcgPSAwOwog
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0YW5jZSBfX20g
PSBtaW4oX19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAgICBpZiAoX19y
YW5kKF9fcmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQgPSAqX19maXJzdDsKICAgICAg
KytfX291dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3JlbWFpbmluZzsKICAgICsrX19m
aXJzdDsKICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRvbUFjY2Vzc0l0
ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24p
CnsKICBfRGlzdGFuY2UgX19tID0gMDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQogICAgX19v
dXRbX19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsr
X190OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251bWJlcihfX3QpOwogICAgaWYgKF9f
TSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0K
CiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAgZG8geyBf
RGlzdGFuY2UgKCpfX3gpKCBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiwgY29uc3QgX0Rpc3RhbmNl
JiApID0gX1NUTF9VTkFSWV9GVU5DVElPTl9FUlJPUjwgX1JhbmRvbU51bWJlckdlbmVyYXRvciwg
X0Rpc3RhbmNlLCBfRGlzdGFuY2U+OjpfX3VuYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfRGlzdGFuY2UgX19tID0gMDsKICBfRGlz
dGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19tIDwgX19u
OyArK19fbSwgKytfX2ZpcnN0KQogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFu
ZChfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0Owog
ICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNj
ZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fb3V0X2xhc3QpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkg
PSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9J
bnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011dGFibGVfUmFu
ZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRl
ciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJz
dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fb3V0X2xh
c3QgLSBfX291dF9maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y
PgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
b3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0LAogICAgICAgICAgICAgIF9S
YW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1
dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRl
ciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyICkgPSBfTXV0
YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21B
Y2Nlc3NJdGVyID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBs
ZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwg
X19yYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0
KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpf
Rm9yd2FyZEl0ZXIgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0
ZXJhdG9yX3RhZykgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7Cgog
IHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQogICAgaWYgKCsrX19maXJzdCA9PSBfX2xhc3QpIHJl
dHVybiBfX2ZpcnN0OwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgd2hpbGUg
KCsrX19uZXh0ICE9IF9fbGFzdCkKICAgIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgICAgc3dh
cCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICsrX19maXJzdDsKICAgIH0KCiAgcmV0dXJuIF9f
Zmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9QcmVk
aWNhdGU+Cl9CaWRpcmVjdGlvbmFsSXRlciBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnKSB7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdoaWxlICh0cnVlKQogICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgaWYgKF9fcHJl
ZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7
CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFz
dCkpCiAgICAgICAgLS1fX2xhc3Q7CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICAgIGl0ZXJf
c3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBw
YXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkKSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBf
TXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0
ZXIgPiA6Ol9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX1ByZWRpY2F0ZSYsIGNv
bnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiAp
ID0gX1NUTF9VTkFSWV9GVU5DVElPTl9FUlJPUjwgX1ByZWRpY2F0ZSwgYm9vbCwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGU+OjpfX3VuYXJ5X2Z1bmN0
aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgcmV0
dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Q
cmVkaWNhdGUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFjZV9zdGFibGVf
cGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pIHsK
ICBpZiAoX19sZW4gPT0gMSkKICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDog
X19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogIGFkdmFuY2UoX19t
aWRkbGUsIF9fbGVuIC8gMik7CiAgcmV0dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRp
dGlvbihfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKSwKICAgICAgICAgICAgICAgIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFz
dCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4gLSBfX2xlbiAvIDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1BvaW50ZXIsIGNsYXNzIF9QcmVkaWNhdGUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9G
b3J3YXJkSXRlciBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGlj
YXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgaWYgKF9fbGVuIDw9
IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0Owog
ICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0IDsgKytfX2ZpcnN0KQogICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAg
ICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MTsKICAgICAgfQogICAg
ICBlbHNlIHsKICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3Vs
dDI7CiAgICAgIH0KICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAg
IHJldHVybiBfX3Jlc3VsdDE7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxl
ID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICByZXR1cm4g
cm90YXRlKF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGVuIC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpLAogICAgICAgICAgICAgICAgICAg
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplKSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
UHJlZGljYXRlLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9Gb3J3YXJkSXRl
cgpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfVHAq
LCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVHA+IF9f
YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLnNpemUoKSA+IDApCiAgICByZXR1cm4g
X19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVz
dGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVm
LmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgZWxzZQogICAgcmV0dXJuIF9faW5wbGFjZV9zdGFi
bGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBf
Rm9yd2FyZEl0ZXIgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewogIGRv
IHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX011dGFibGVfRm9yd2FyZEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfTXV0YWJsZV9Gb3J3YXJk
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwog
IGRvIHsgYm9vbCAoKl9feCkoIF9QcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfVU5BUllfRlVOQ1RJT05f
RVJST1I8IF9QcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAg
IHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRp
dGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCnsKICB3aGlsZSAodHJ1ZSkgewog
ICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xh
c3Q7CiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0OwogICAgaWYg
KCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2Fw
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9SYW5kb21BY2Nl
c3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2
b3QsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAoX19jb21w
KCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3
aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsKICAgIGlmICgh
KF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dhcChf
X2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50IF9fc3RsX3Ro
cmVzaG9sZCA9IDE2OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9UcD4Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX1RwIF9fdmFsKSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0Owog
IC0tX19uZXh0OwogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xhc3QgPSAqX19u
ZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xhc3QgPSBf
X3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNs
YXNzIF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LCBfVHAgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAg
LS1fX25leHQ7CiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICpfX2xhc3Qg
PSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xh
c3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
VHA+CmlubGluZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf
VHAqKSB7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19maXJzdCkgewog
ICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9fZmly
c3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2xh
c3QsIF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgX1RwIF9fdmFsID0gKl9f
bGFzdDsKICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgIGNvcHlfYmFja3dhcmQo
X19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7CiAgfQog
IGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCwgX19jb21w
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5zZXJ0aW9u
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNz
SXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVh
cl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW5zZXJ0
aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2Zp
cnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNlcnQoX19maXJz
dCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlv
bl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICBmb3Ig
KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQog
ICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0
aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3VuZ3VhcmRlZF9pbnNl
cnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmU+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Rw
KiwgX0NvbXBhcmUgX19jb21wKSB7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2Zp
cnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo
X19pLCBfVHAoKl9faSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9z
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX191bmd1YXJkZWRfaW5z
ZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hv
bGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVz
aG9sZCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhy
ZXNob2xkLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Nv
bXBhcmU+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVz
aG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhy
ZXNob2xkLCBfX2NvbXApOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCAr
IF9fc3RsX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogIH0KICBlbHNlCiAgICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9T
aXplPgppbmxpbmUgX1NpemUgX19sZyhfU2l6ZSBfX24pIHsKICBfU2l6ZSBfX2s7CiAgZm9yIChf
X2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICByZXR1cm4gX19rOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+CnZv
aWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAgICAgICAg
ICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0
ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAg
IHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybjsKICAg
IH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAg
ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsK
ICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGlt
aXQpOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemUsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f
aW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAg
ICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xh
c3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9
PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21w
KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh
c3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgIF9fY29tcCk7CiAgICBfX2ludHJvc29y
dF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwog
ICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXI+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXIg
KSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwg
X1JhbmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpf
X3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90
eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xl
c3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CgogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChf
X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0
KSwKICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAg
X19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX1Jh
bmRvbUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5B
UllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgaWYgKF9fZmly
c3QgIT0gX19sYXN0KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAg
ICAgICBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwKICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp
OwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19pbnBs
YWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChfX2xhc3QgLSBf
X2ZpcnN0IDwgMTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg
IHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19t
aWRkbGUpOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICBfX21l
cmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xhc3QgLSBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAx
NSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICBy
ZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xh
c3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2NvbXApOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBf
X2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMSwgY2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVy
Z2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpIHsKICBf
RGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0
ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVz
dWx0KTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CgogIF9fc3RlcF9zaXplID0gbWlu
KF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogIG1lcmdlKF9fZmly
c3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3Qs
CiAgICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIx
LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlz
dGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KSB7CiAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogIHdoaWxlIChf
X2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19m
aXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0
ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAg
ICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fZmlyc3QgKz0g
X190d29fc3RlcDsKICB9CiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9f
Zmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBf
c2l6ZSwKICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jl
c3VsdCwKICAgICAgICBfX2NvbXApOwp9Cgpjb25zdCBpbnQgX19zdGxfY2h1bmtfc2l6ZSA9IDc7
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9p
ZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9EaXN0YW5j
ZSBfX2NodW5rX3NpemUpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3Np
emUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6
ZSk7CiAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19jaHVua19pbnNlcnRpb25fc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9IF9fY2h1bmtf
c2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNz
IF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZl
ciwgX0Rpc3RhbmNlKikgewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAg
X1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBf
X3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19s
ZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9f
c3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3NvcnRfbG9vcChf
X2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgX19zdGVw
X3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2
b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Q
b2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uq
LCBfQ29tcGFyZSBfX2NvbXApIHsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0
OwogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFu
Y2UgX19zdGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgd2hpbGUgKF9fc3Rl
cF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwg
X19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3NpemUgKj0gMjsKICAg
IF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0
ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2U+
CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9p
bnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1
ZmZlcl9zaXplKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAv
IDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgaWYg
KF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp
cnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19zdGFibGVfc29y
dF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAg
fQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo
X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTApOwogIH0KICBfX21lcmdl
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAt
IF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxl
KSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fYnVmZmVyX3NpemUsIF9Db21wYXJlIF9fY29tcCkgewogIF9EaXN0YW5jZSBfX2xl
biA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk
ZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAg
IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19zdGFi
bGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAgICBf
X21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rp
c3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0
YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIF9f
bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlk
ZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19t
aWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikgewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5k
b21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4o
KSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgZWxz
ZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Rh
bmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9t
QWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2luKCkg
PT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7
CiAgZWxzZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5i
ZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxl
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vz
c0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVz
c1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFy
YWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIF9f
c3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3Zh
bHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9f
Zmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t
cGFyZT4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFy
ZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011
dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9t
QWNjZXNzSXRlciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9D
b21wYXJlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0Nv
bXBhcmUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46
OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46
OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBfX3N0YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw
Pgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwgX1RwKikgewogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgZm9yIChf
UmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAg
IGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUs
IF9faSwgX1RwKCpfX2kpLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
KSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxlX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0
ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1Ro
YW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJs
ZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIF9fcGFy
dGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZT4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkgewogIG1ha2VfaGVhcChf
X2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9
IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYgKF9fY29tcCgqX19pLCAqX19m
aXJzdCkpCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kp
LCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKICBz
b3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIHBhcnRpYWxfc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9feCko
IF9SYW5kb21BY2Nlc3NJdGVyICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25j
ZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0YWJsZV9SYW5kb21B
Y2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExf
QklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9u
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIF9fcGFy
dGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0
KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9SYW5kb21B
Y2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlKiwgX1RwKikgewogIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9s
YXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9y
ZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBf
X3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxf
bGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7
CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9m
aXJzdCkKICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAog
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3Vs
dF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAgICArK19fZmly
c3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsK
ICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0
aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkgewogIGRvIHsgdm9pZCAo
Kl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJ
dGVyICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lk
ICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBl
ICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlw
ZSApID0gX1NUTF9DT05WRVJUX0VSUk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX2lzX25vdF9jb252ZXJ0aWJsZV90b190eXBl
X1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9MZXNz
VGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJh
YmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8g
eyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1
ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1Ro
YW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dF9maXJzdCwgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBf
RGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXAsIF9EaXN0YW5jZSosIF9UcCopIHsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRf
bGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf
cmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYg
X19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9yZWFs
X2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2ZpcnN0
OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19j
b21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2NvbXAoKl9fZmly
c3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3Qs
IF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVh
bF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJz
dCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJzdDsKICB9CiAgc29y
dF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgcmV0
dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9SYW5kb21BY2Nl
c3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0
LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LCBfQ29t
cGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJ
dGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011dGFibGVfUmFuZG9tQWNjZXNz
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlciA+IDo6X011
dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfQ09OVkVSVF9FUlJPUjwgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVf
WF9pc19ub3RfY29udmVydGlibGVfdG9fdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoK
ICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5B
UllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgcmV0dXJuIF9f
cGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1
bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0X2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1l
bnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICB3aGls
ZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0K
ICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkp
KTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxz
ZQogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lk
IG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp
IHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011dGFibGVfUmFu
ZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRl
ciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhh
bkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxl
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgX19udGhf
ZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmU+CnZvaWQgX19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmly
c3QgPiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVk
X3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
VHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbXApOwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19j
dXQ7CiAgICBlbHNlCiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAg
ZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6
Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUm
LCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlPjo6
X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwoKCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVl
X3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3Vu
ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5j
ZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3Rh
bmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDAp
IHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBh
ZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAg
ICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9f
bGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAg
fQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0g
X0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6
X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCBfVHAs
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID46Ol9f
dHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8g
eyB2b2lkICgqX194KSggX1RwICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lm
aWNhdGlvbjwgX1RwID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0
LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3Rh
bmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7Cgog
IHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRs
ZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29t
cCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsr
X19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNl
CiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9G
b3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFs
LCBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9
IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6
Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9UcCAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgX1Rw
LCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSA+Ojpf
X3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRv
IHsgYm9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgX1RwJiwgY29uc3QgX1RwJiApID0gX1NU
TF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCBfVHAsIF9UcD46Ol9fYmlu
YXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAs
CiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+Cl9G
b3J3YXJkSXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBf
RGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRs
ZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9f
bWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAo
X192YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAg
IF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVu
IC0gX19oYWxmIC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9i
b3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKSB7CiAgZG8geyB2b2lkICgq
X194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSApID0gX1NU
TF9TQU1FX1RZUEVfRVJST1I8IF9UcCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgKSA9IF9MZXNzVGhhbkNv
bXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAgPiA6Ol9MZXNzVGhhbkNvbXBhcmFi
bGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVy
biBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9y
d2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Nv
bXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3
YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19s
ZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9f
aGFsZik7CiAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICBfX2xlbiA9IF9f
aGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJz
dDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQogIHJldHVybiBf
X2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9f
eCkoIF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX1RwICwgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExf
U0FNRV9UWVBFX0VSUk9SPCBfVHAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKCiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCBfVHAm
LCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUsIGJv
b2wsIF9UcCwgX1RwPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9f
bGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5
cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9EaXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVh
bF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg
X1RwJiBfX3ZhbCwKICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVu
ID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19o
YWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICB3aGlsZSAo
X19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2Zp
cnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmICgqX19taWRkbGUgPCBf
X3ZhbCkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAg
X19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlIGlmIChfX3ZhbCA8ICpf
X21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19sZWZ0ID0g
bG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgYWR2YW5jZShfX2Zp
cnN0LCBfX2xlbik7CiAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2Zp
cnN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy
PihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs
IF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0
ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkg
PSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4g
OjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZUEVfRVJST1I8IF9U
cCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgPjo6
X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBk
byB7IHZvaWQgKCpfX3gpKCBfVHAgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfVHAgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmly
c3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBl
KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0Zvcndh
cmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwg
X0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRk
bGUsIF9fbGVmdCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0g
X19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUs
IF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmly
c3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19o
YWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAg
ICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQo
X19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICBhZHZhbmNlKF9fZmlyc3Qs
IF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3Qs
IF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJk
SXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJ
dGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgcGFpcjxfRm9y
d2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0Zvcndh
cmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0Zvcndh
cmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CiAgZG8geyB2b2lkICgqX194KSggX1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCBfVHAsIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9Y
X25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyBib29s
ICgqX194KSggX0NvbXBhcmUmLCBjb25zdCBfVHAmLCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFS
WV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUsIGJvb2wsIF9UcCwgX1RwPjo6X19iaW5hcnlfZnVu
Y3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHJl
dHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAg
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX192YWwpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9G
b3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9G
b3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9UcCAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgX1RwLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSA+OjpfX3R5
cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRvIHsg
dm9pZCAoKl9feCkoIF9UcCApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmlj
YXRpb248IF9UcCA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5k
KF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192
YWwgPCAqX19pKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZT4KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwK
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9feCko
IF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248
IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX1RwICwgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FN
RV9UWVBFX0VSUk9SPCBfVHAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+
Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKCiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCBfVHAmLCBj
b25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUsIGJvb2ws
IF9UcCwgX1RwPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2Zp
cnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICFf
X2NvbXAoX192YWwsICpfX2kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
c3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBtZXJnZShfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRl
cjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjEg
PiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRlcmF0
b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9p
ZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZp
Y2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZUEVf
RVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUs
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgPjo6X190
eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgZG8g
eyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFs
dWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgPiA6Ol9MZXNz
VGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KSB7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0Owog
IH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0
MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w
dXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091
dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19j
b21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQg
KCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJP
UjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVf
WF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBkbyB7IHZv
aWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lm
aWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX0NvbXBh
cmUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90
eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVf
dHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0
aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlm
IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0K
ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFz
cyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBf
RGlzdGFuY2UgX19sZW4yKSB7CiAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAg
cmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgaWYgKCpfX21pZGRsZSA8
ICpfX2ZpcnN0KQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJu
OwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRp
cmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4x
MSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsK
ICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4x
MSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19m
aXJzdF9jdXQpOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7
CiAgfQogIGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vj
b25kX2N1dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3Qs
IF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3Rf
Y3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAg
PSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vfd2l0aG91dF9i
dWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4x
MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21w
YXJlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRk
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNl
IF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewog
IGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAoX19sZW4x
ICsgX19sZW4yID09IDIpIHsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAg
ICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAgfQogIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICBfRGlz
dGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgX19sZW4xMSA9
IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIF9fc2Vj
b25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19j
b21wKTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0K
ICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9j
dXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p
ZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmly
c3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQog
ICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVy
Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19s
ZW4xMSwgX19sZW4yMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgX19tZXJn
ZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xl
bjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwg
X19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlv
bmFsSXRlcjEgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEg
X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKSB7CiAg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMiAm
JiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0gY29weShfX21p
ZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xhc3QpOwogICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19m
aXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1
ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBjb3B5KF9f
bWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZm
ZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgcmV0dXJuIHJvdGF0ZShf
X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIzPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0Jp
ZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9f
cmVzdWx0KSB7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4gY29weV9iYWNr
d2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xh
c3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAgICBpZiAoKl9f
bGFzdDIgPCAqX19sYXN0MSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBp
ZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2Zp
cnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVs
c2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0g
X19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3Qx
LCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAg
ICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9CaWRpcmVjdGlv
bmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdDEgPT0gX19s
YXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3Vs
dCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChf
X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9fbGFzdDI7CiAg
d2hpbGUgKHRydWUpIHsKICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAg
ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkK
ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3Vs
dCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9
ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4g
Y29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19s
YXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs
YXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXI+CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFu
Y2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0
YW5jZSBfX2J1ZmZlcl9zaXplKSB7CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9
IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJz
dCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs
IF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19i
dWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwg
X19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlIHsKICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAg
ICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAg
IF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjEx
KTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9f
Zmlyc3RfY3V0KTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4y
Mik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFk
dmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9i
b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3RhbmNlKF9f
Zmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19t
aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFw
dGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAg
ICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21l
cmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAt
IF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVy
LCBfX2J1ZmZlcl9zaXplKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZT4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAg
ICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sZW4xIDw9IF9fbGVu
MiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5k
ID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIs
IF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICB9CiAg
ZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVy
X2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNr
d2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19z
ZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlz
dGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVu
MTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAg
ICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3Rf
Y3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xl
bjIyKTsKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAg
YWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVy
X2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJz
dF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9f
bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4x
MSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUs
IF9fY29tcCk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0
LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAt
IF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+
CmlubGluZSB2b2lkIF9faW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopIHsKICBfRGlzdGFuY2UgX19sZW4xID0gMDsKICBk
aXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2UgX19sZW4yID0g
MDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1
ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBp
ZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0
LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CiAgZWxzZQogICAgX19tZXJnZV9h
ZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAg
ICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsCiAgICAgICAg
ICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lucGxhY2Vf
bWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFu
Y2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewog
IF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xl
bjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3Qs
IF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBf
X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21l
cmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19s
ZW4yLCBfX2NvbXApOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRk
bGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJl
Z2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCBp
bnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSgg
X0JpZGlyZWN0aW9uYWxJdGVyICkgPSBfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIgPiA6Ol9NdXRhYmxlX0JpZGly
ZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRp
cmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJ
dGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl
IHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVl
X3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBpbnBs
YWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfQmlkaXJlY3Rpb25hbEl0ZXIgKSA9IF9NdXRhYmxlX0JpZGlyZWN0aW9u
YWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFsSXRlciA+IDo6
X011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBl
JiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZh
bHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUsIGJvb2ws
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBl
LCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlw
ZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9f
bGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9f
ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0K
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9v
bCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0Mikgewog
IGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0
X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSgg
X0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lu
cHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZUEVfRVJST1I8IHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfbm90X3Nh
bWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgZG8geyB2b2lkICgqX194
KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSApID0g
X0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFi
bGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZigqX19m
aXJzdDEgPCAqX19maXJzdDIpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAgICsrX19m
aXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFy
ZT4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MiwgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjEgKSA9
IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9J
bnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9f
eCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkgPSBfU1RM
X1NBTUVfVFlQRV9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6
dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVf
dHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CgoKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVO
Q1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cjI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz
dDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpf
X2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAgICsrX19maXJzdDEsICsr
X19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091
dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkg
ewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVyYXRvcl9jb25j
ZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194
KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwg
X0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0g
X091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9P
dXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46
OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBh
cmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcjE+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpf
X2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7
CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xh
c3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQg
KCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIy
ICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4g
OjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9p
ZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5
cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkg
PSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6
dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CgoKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0IHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5B
UllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcjI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEs
ICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmly
c3QxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBl
bHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAg
ICArK19fZmlyc3QyOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19m
aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRw
dXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgZG8geyB2b2lkICgqX194KSggX0lu
cHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0
SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRv
IHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICwgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1F
X1RZUEVfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVl
X3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUg
Pjo6X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoK
CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIx
Pjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRp
b248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgPiA6
Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2ZpcnN0MTsK
ICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAg
IGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAg
ICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
cyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRf
aW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVy
MSApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+
IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lk
ICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9F
UlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSA+OjpfX3R5
cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBkbyB7
IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyMT46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8
IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2
YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90
eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAg
KytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAg
ICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog
ICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAg
fQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJl
bmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICBk
byB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9J
bnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1
dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRw
dXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwog
IGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46
OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1
ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXIyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CgoKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxl
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXIxPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3Qy
KSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAg
KytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAg
ICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmly
c3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9P
dXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIHNldF9kaWZm
ZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9D
b21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5w
dXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJ
dGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAg
ZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBf
T3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091
dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25vdF9z
YW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGRvIHsgYm9vbCAoKl9f
eCkoIF9Db21wYXJlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIx
Pjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
Mj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUs
IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUs
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGU+OjpfX2Jp
bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0K
ICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICsrX19maXJz
dDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0K
ICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4K
X091dHB1dEl0ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIx
ICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4g
OjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQg
KCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VS
Uk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID46Ol9fdHlw
ZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGRvIHsg
dm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVl
X3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1Ro
YW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK
ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBp
ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsK
ICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgewogICAg
ICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmly
c3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0
SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlcgpzZXRfc3ltbWV0cmlj
X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg
X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgq
X194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiAp
ID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6
X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3Jf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQg
KCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBl
ICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0g
X1NUTF9TQU1FX1RZUEVfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
MT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZh
bHVlX3R5cGUgPjo6X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwoKCiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZ
X0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXIyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9f
Zmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7
CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq
X19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0
MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwog
ICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBj
b3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0
ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0
ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46
OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy
biBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsr
X19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgIF9f
cmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0
ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0
ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExf
QklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0
OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKF9fY29tcCgqX19yZXN1bHQs
ICpfX2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194
KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29t
cGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0
OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVz
dWx0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1p
bl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194
KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYs
IGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBl
JiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5
cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUsIGJvb2wsIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0
aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVz
dWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmIChfX2Nv
bXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1
cm4gX19yZXN1bHQ7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJv
b2wgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVjdGlvbmFsSXRl
ciApID0gX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9CaWRp
cmVjdGlvbmFsSXRlciA+IDo6X0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9M
ZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29t
cGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7Cgog
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJl
dHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19pIDwgKl9f
aWkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUg
KCEoKl9faSA8ICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsK
ICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAg
IGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAg
ICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0
aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfQmlkaXJl
Y3Rpb25hbEl0ZXIgKSA9IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIgPiA6Ol9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9f
eCkoIF9Db21wYXJlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlv
bmFsSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Jp
ZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VS
Uk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlv
bmFsSXRlcj46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rp
b25hbEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0Owog
ICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9f
bGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9
IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwg
Ki0tX19qKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZl
cnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9
PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJu
IGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4K
Ym9vbCBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX0JpZGlyZWN0aW9uYWxJ
dGVyICkgPSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0Jp
ZGlyZWN0aW9uYWxJdGVyID4gOjpfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSApID0g
X0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5D
b21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAg
cmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKCpfX2lpIDwg
Kl9faSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGls
ZSAoISgqLS1fX2ogPCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2op
OwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQog
ICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsK
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRp
cmVjdGlvbmFsSXRlciApID0gX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb248IF9CaWRpcmVjdGlvbmFsSXRlciA+IDo6X0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgq
X194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0
aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
QmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05f
RVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0
aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVj
dGlvbmFsSXRlcj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7
CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0g
X19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lp
ID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgqLS1f
X2osICpfX2kpKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJl
dmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19p
ID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1
cm4gZmFsc2U7CiAgICB9CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXI+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmly
c3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQp7CiAgZG8geyB2b2lkICgqX194
KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
SW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBf
Rm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpf
Rm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OnZhbHVlX3R5cGUmLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
Pjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfb3BlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBib29sICgqX195KSggY29uc3QgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9P
UF9FUVVBTF9FUlJPUjwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs
dWVfdHlwZT46OiBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feSA9IF9feTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgoKICBmb3IgKCA7IF9fZmlyc3Qx
ICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBf
X2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoKl9fZmlyc3Qx
ID09ICpfX2l0ZXIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
QmluYXJ5UHJlZGljYXRlPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2Zp
cnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgZG8geyB2b2lkICgqX194KSggX0lu
cHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJ
dGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2Fy
ZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2Fy
ZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICBkbyB7IGJvb2wgKCpfX3gpKCBfQmluYXJ5UHJlZGljYXRlJiwgY29uc3QgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9G
VU5DVElPTl9FUlJPUjwgX0JpbmFyeVByZWRpY2F0ZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgoKICBmb3IgKCA7IF9fZmlyc3Qx
ICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBf
X2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoX19jb21wKCpf
X2ZpcnN0MSwgKl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xh
c3QxOwp9CiMgMzA1MiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg
Mwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0Zv
cndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJz
dDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndh
cmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0MiA9
PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIx
IF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdoaWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEg
X19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3Qy
LCBfX2xhc3QyKTsKICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJl
dHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1
bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgfQogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNz
IF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2Fy
ZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg
X0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p
dGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikK
ICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9
IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3Vs
dAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Miwg
X19jb21wKTsKICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVy
biBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7
CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgfQogICAgfQogIH0KfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEs
IGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjI+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2Vu
ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9u
YWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVj
dGlvbmFsSXRlcjEgKSA9IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIxID4gOjpfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpf
X3gpKCBfQmlkaXJlY3Rpb25hbEl0ZXIyICkgPSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgX0JpZGlyZWN0aW9uYWxJdGVyMiA+IDo6X0JpZGlyZWN0aW9uYWxJ
dGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAg
dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsK
ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIy
OwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0Mihf
X2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0
MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9f
bGFzdDIpLCBfX3JsYXN0Mik7CgogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1
cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBf
X3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3Qy
LCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAg
IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29t
cCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVjdGlvbmFsSXRlcjEgKSA9IF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIx
ID4gOjpfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfQmlkaXJlY3Rpb25hbEl0ZXIy
ICkgPSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0JpZGly
ZWN0aW9uYWxJdGVyMiA+IDo6X0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y
PF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEo
X19maXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9f
cnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogIGlmIChfX3JyZXN1bHQgPT0gX19y
bGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRp
c3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9CgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5s
aW5lIF9Gb3J3YXJkSXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zvcndh
cmRJdGVyMSBfX2xhc3QxLAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2Fy
ZEl0ZXIyIF9fbGFzdDIpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIxICkgPSBf
Rm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyMSA+IDo6
X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMiApID0gX0ZvcndhcmRJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjIgPiA6Ol9Gb3J3YXJkSXRl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRv
IHsgYm9vbCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6
dmFsdWVfdHlwZSYsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFs
dWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X29wZXJhdG9y
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgYm9vbCAoKl9feSkoIGNvbnN0IHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZ
X09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIy
Pjo6dmFsdWVfdHlwZT46OiBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feSA9IF9feTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIHJldHVybiBfX2Zp
bmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAg
ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVBy
ZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2Zp
cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly
c3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19j
b21wKQp7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMSApID0gX0ZvcndhcmRJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjEgPiA6Ol9Gb3J3YXJkSXRl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRv
IHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlcjIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpf
X3gpKCBfQmluYXJ5UHJlZGljYXRlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJS
T1I8IF9CaW5hcnlQcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcjI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCgogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmly
c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmJvb2wg
X19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pCnsKICBf
RGlzdGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2No
aWxkIDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmly
c3RbX19jaGlsZF0pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09
IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtP
cmRlcmluZz4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmlj
dFdlYWtPcmRlcmluZyBfX2NvbXAsCiAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBf
RGlzdGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2No
aWxkIDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0s
IF9fZmlyc3RbX19jaGlsZF0pKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQg
JiAxKSA9PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGRvIHsgdm9p
ZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyICkgPSBfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlciA+IDo6X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBk
byB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf
dHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19sYXN0IC0g
X19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9T
dHJpY3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9T
dHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFj
Y2Vzc0l0ZXIgKSA9IF9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248
IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9T
dHJpY3RXZWFrT3JkZXJpbmcmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9O
X0VSUk9SPCBfU3RyaWN0V2Vha09yZGVyaW5nLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgcmV0dXJuIF9f
aXNfaGVhcChfX2ZpcnN0LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0
ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0
ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46
OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBy
ZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19f
bmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAg
IGlmICgqX19uZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVy
biB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vh
a09yZGVyaW5nPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsK
ICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAo
Kl9feCkoIF9TdHJpY3RXZWFrT3JkZXJpbmcmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05f
RVJST1I8IF9TdHJpY3RXZWFrT3JkZXJpbmcsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgIHJldHVybiB0cnVlOwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBm
b3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4
dCkgewogICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpCiAgICAgIHJldHVybiBmYWxz
ZTsKICB9CgogIHJldHVybiB0cnVlOwp9CgoKCgoKfQojIDM3ICIvaG9tZTUva3Jha293L2dudS9s
b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk
ZS9nKysvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDUwICIvaG9tZTUva3Jha293L2dudS9s
b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk
ZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2Fs
LjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr
Ky9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwojIDQzICIvaG9tZTUva3Jha293L2dudS9sb2Nh
bC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n
KysvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29u
c3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXpl
ID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9D
aGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0
KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVn
ID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9y
ZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNp
emVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBz
aXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9f
YnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAg
ICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0
c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3It
Pl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAg
Zm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9f
ci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQq
IF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAg
ICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBp
ZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAg
ICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAg
ICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7
CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBf
X2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAg
ICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19s
ZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAg
ICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxh
dGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCxfVHJhaXRzLF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0lu
SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNf
Y2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOwoKICAgICAgICBpZiAoX19i
ZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5
X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0
ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9TX2NvcHlfY2hhcnMoX19y
LT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAgICAg
ICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsKCiAgICAgICAg
X19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgIHJl
dHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qoc2l6
ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7CiAgICAgIGlm
IChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3Jl
cCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19u
LCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uKQogICAgICAgICAg
ICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CiAgICAg
ICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX19yLT5fTV9kZXN0cm95
KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0g
X19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAg
ICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3Jh
YihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAgICAgICBfX3N0
ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkK
ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19h
KSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1
Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFz
aWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAg
ICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01f
ZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9fYSkK
ICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25z
dCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsg
X19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29u
c3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyAr
IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmco
c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2Rh
dGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9J
bnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19j
b25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAg
ICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKICAgICAgICB7CgogICAg
ICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOwogICAgICAg
ICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0
X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAg
ICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93ICgpCiAgICB7
CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNpdHkgKyAx
KSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSkuZGVhbGxvY2F0
ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfTV9sZWFr
X2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAg
IF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNp
emVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBf
X2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkgKyBf
X3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9z
aXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp
IHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0
b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfUmVwKiBfX3IgPSBfUmVw
OjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOwogICAgICAgICAgICAgIGlm
IChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9y
ZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goLi4u
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0
b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX3Jl
cCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgp
KTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xlbjIp
CiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSArIF9fcG9z
ICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgfQogICAgICBfTV9yZXAoKS0+
X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19zaXpl
OwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJtaW5hbDsKCiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIGlmIChfX3JlcyA+IHRoaXMt
PmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIHsKICAgICAg
ICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgIF9fdGhyb3dfbGVu
Z3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUiKTsKICAgICAgICAgIGFsbG9jYXRvcl90
eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9y
ZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CiAgICAgICAgICBfTV9y
ZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5f
TV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAg
IGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9fcy5fTV9yZXAoKS0+
X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0aGlzLT5nZXRfYWxsb2NhdG9yKCkgPT0gX19z
LmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01f
ZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsKICAgICAgICAgIF9fcy5f
TV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg
YmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MuZ2V0X2FsbG9j
YXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIoX19zLl9NX2liZWdpbigpLCBf
X3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5nZXRfYWxs
b2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7CiAgICAgICAgICBfX3MgPSBfX3Rt
cDE7CiAgICAgICAgfQogICAgfQojIDM1NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAz
MjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv
YmFzaWNfc3RyaW5nLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6X1JlcCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46Ol9SZXA6OgogICAgX1NfY3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2Mm
IF9fYWxsb2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwoKCiAgICAgIGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4
X3NpemUpCgoKCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1Nf
Y3JlYXRlIik7CgoKCgogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNp
emVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwoKCiAgICAgIHZvaWQqIF9fcGxhY2UgPSBfUmF3
X2J5dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9jYXRlKF9fc2l6ZSk7CiAgICAgIF9SZXAgKl9fcCA9
IG5ldyAoX19wbGFjZSkgX1JlcDsKICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7
CiAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9fcC0+X01fbGVuZ3RoID0gMDsK
ICAgICAgcmV0dXJuIF9fcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Nsb25lKGNvbnN0IF9B
bGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQogICAgewogICAgICBfUmVwKiBfX3IgPSBf
UmVwOjpfU19jcmVhdGUoX01fbGVuZ3RoICsgX19yZXMsIF9fYWxsb2MpOwogICAgICBpZiAoX01f
bGVuZ3RoKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IHRyYWl0c190eXBl
Ojpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9NX2xlbmd0aCk7IH0KICAg
ICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGVz
dHJveShfX2FsbG9jKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7CiAgICAgIHJldHVybiBfX3ItPl9N
X3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lIGJvb2wKCgoKCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2V4Y2Vzc19zbG9wKHNp
emVfdCBfX3MsIHNpemVfdCBfX3IpCgogICAgewogICAgICByZXR1cm4gMiAqIChfX3MgPD0gMTYg
PyAxNiA6IF9fcykgPCBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf
X2MpCiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVu
Z3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFw
cGVuZChfX24gLSBfX3NpemUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAg
ICAgICB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01f
cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAg
IHsKICAgICAgICBiYXNpY19zdHJpbmcgX19zKF9fazEsIF9fazIpOwogICAgICAgIHJldHVybiB0
aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7
CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2syLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIHNp
emVfdHlwZSBfX2RvbGQgPSBfX2kyIC0gX19pMTsKICAgICAgICBzaXplX3R5cGUgX19kbWF4ID0g
dGhpcy0+bWF4X3NpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8
c2l6ZV90eXBlPihkaXN0YW5jZShfX2sxLCBfX2syKSk7CgogICAgICAgIGlmIChfX2RtYXggPD0g
X19kbmV3KQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01f
cmVwbGFjZSIpOwogICAgICAgIHNpemVfdHlwZSBfX29mZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsK
ICAgICAgICBfTV9tdXRhdGUoX19vZmYsIF9fZG9sZCwgX19kbmV3KTsKCiAgICAgICAgaWYgKF9f
ZG5ldykKICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9fazEsIF9f
azIpOwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBf
X24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19w
b3MyLCBzaXplX3R5cGUgX19uMikKICAgIHsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01f
Y2hlY2soX19wb3MxKSwgX01fZm9sZChfX3BvczEsIF9fbjEpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3N0ci5fTV9jaGVjayhfX3BvczIpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3N0ci5fTV9mb2xkKF9fcG9zMiwgX19uMikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
aXRzLF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7
CgoKCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlw
ZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+
Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9pZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIHsKCgoKICAgICAgc2l6ZV90
eXBlIF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgp
OwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2Vy
dmUoX19sZW4pOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQo
KSwgX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0
ci5fTV9mb2xkKF9fcG9zLCBfX24pKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxs
b2M+OjoKICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsK
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19s
ZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAg
ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBf
X24pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+
JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgYXBwZW5kKHNp
emVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9f
biArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAg
ICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9N
X2llbmQoKSwgX01faWVuZCgpLCBfX24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9f
bGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv
Yz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0
cyxfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdf
dHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9U
cmFpdHM6Omxlbmd0aChfX2xocyk7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9f
c3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOwogICAgICBfX3N0ci5hcHBlbmQoX19s
aHMsIF9fbGhzICsgX19sZW4pOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1
cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B
bGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsX1RyYWl0cyxfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJp
bmdfdHlwZSBfX3N0cjsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7CiAg
ICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyAxKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90
eXBlKDEpLCBfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBf
X3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBs
YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQg
X19jKQogICAgewogICAgICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOwogICAgICBzaXpl
X3R5cGUgX19vZmYxID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICBpZiAobWF4X3NpemUoKSAt
ICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9f
bjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihf
TV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewog
ICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFu
Z2UoImJhc2ljX3N0cmluZzo6Y29weSIpOwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAt
IF9fcG9zKQogICAgICAgIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRz
X3R5cGU6OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBf
X247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
bikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg
ICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9N
X2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9zKQog
ICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19u
KSA9PSAwKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQo
X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAg
ICBpZiAoX19wb3MgPCBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBf
X2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19w
b3M7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0
YSArIF9fcG9zLCBfX24sIF9fYyk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBfX3Jl
dCA9IF9fcCAtIF9fZGF0YTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKGNv
bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAg
ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX24g
PD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4oX19zaXplIC0g
X19uICxfX3Bvcyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsK
ICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6
OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgICAgICAg
cmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDAp
OwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlw
ZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo
KTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX194cG9zID0g
X19zaXplIC0gMTsKICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAgICAgICAgICAgX194
cG9zID0gX19wb3M7CgogICAgICAgICAgZm9yICgrK19feHBvczsgX194cG9zLS0gPiAwOyApCiAg
ICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAg
ICAgICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp
emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBm
aW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlzLT5zaXpl
KCk7ICsrX19wb3MpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFp
dHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CiAgICAgICAgICBpZiAo
X19wKQogICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBv
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl
KCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9f
c2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24s
IF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAg
IHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9z
ID0gX19wb3M7CiAgICAgIGZvciAoOyBfX24gJiYgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19f
eHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb
X194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXpl
X3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmlu
ZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewog
ICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5z
aXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtf
X3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAgaWYgKC0t
X19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8K
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBf
X24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mp
IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
IGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAg
ICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQog
ICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hp
bGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBj
b21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo
KTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3Bv
cyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpj
b21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19yc2l6ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBf
X24pOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAg
IGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIu
ZGF0YSgpLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBf
X29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBf
X3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAg
ICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAg
c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUg
PSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3BvczEgPiBfX3NpemUgfHwgX19wb3MyID4gX19v
c2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJl
Iik7CgogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvczEsIF9fbjEp
OwogICAgICBzaXplX3R5cGUgX19yb3NpemUgPSBtaW4oX19vc2l6ZSAtIF9fcG9zMiwgX19uMik7
CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7CiAgICAgIGlu
dCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvczEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3BvczIsIF9fbGVu
KTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwogICAg
ICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29u
c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaW50
IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX3NpemUpOwogICAg
ICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3NpemUgLSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cyk7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3Ry
aW5nIDxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgIHNpemVfdHlw
ZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
ImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBtaW4o
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUg
PSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4o
X19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShf
TV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9f
ciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICB2b2lkCiAg
ICBfU19zdHJpbmdfY29weShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3N0ciwKICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9B
bGxvYzo6c2l6ZV90eXBlIF9fYnVmc2l6KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9B
bGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9f
c3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1
ZnNpeiAtIDEpOwogICAgICBfVHJhaXRzOjpjb3B5KF9fYnVmLCBfX3N0ci5kYXRhKCksIF9fYnl0
ZXMpOwogICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOwogICAgfQoKfQojIDUxICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDQzICIvaG9tZTUv
a3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
OC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtv
dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w
L2luY2x1ZGUvZysrL2JpdHMvc3RkX2NjdHlwZS5oIiAxIDMKIyAzOSAiL2hvbWU1L2tyYWtvdy9n
bnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RkX2NjdHlwZS5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9j
YWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv
ZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2N0eXBlLmgiIDIgMwojIDQyICIvaG9tZTUv
a3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2N0eXBlLmgiIDMKIyAxICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9jdHlwZS5oIiAxIDMgNAojIDQzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGRfY2N0eXBlLmgiIDIgMwojIDYwICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGRfY2N0eXBlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZXh0ZXJuICJDIiBpbnQgaXNhbG51bShp
bnQgX19jKTsKICBleHRlcm4gIkMiIGludCBpc2FscGhhKGludCBfX2MpOwogIGV4dGVybiAiQyIg
aW50IGlzYmxhbmsoaW50IF9fYyk7CiAgZXh0ZXJuICJDIiBpbnQgaXNjbnRybChpbnQgX19jKTsK
ICBleHRlcm4gIkMiIGludCBpc2RpZ2l0KGludCBfX2MpOwogIGV4dGVybiAiQyIgaW50IGlzZ3Jh
cGgoaW50IF9fYyk7CiAgZXh0ZXJuICJDIiBpbnQgaXNsb3dlcihpbnQgX19jKTsKICBleHRlcm4g
IkMiIGludCBpc3ByaW50KGludCBfX2MpOwogIGV4dGVybiAiQyIgaW50IGlzcHVuY3QoaW50IF9f
Yyk7CiAgZXh0ZXJuICJDIiBpbnQgaXNzcGFjZShpbnQgX19jKTsKICBleHRlcm4gIkMiIGludCBp
c3VwcGVyKGludCBfX2MpOwogIGV4dGVybiAiQyIgaW50IGlzeGRpZ2l0KGludCBfX2MpOwogIGV4
dGVybiAiQyIgaW50IHRvbG93ZXIoaW50IF9fYyk7CiAgZXh0ZXJuICJDIiBpbnQgdG91cHBlcihp
bnQgX19jKTsKfQojIDQ0ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVmd2Qu
aCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIg
MSAzCiMgMzQgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMK
IyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMg
MzUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2
b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2Fz
dCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBf
X3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2Rv
bWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2Fy
Z3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93
X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0NSAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNTggIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZWZ3ZC5oIiAzCiAgdGVtcGxhdGU8dW5zaWdu
ZWQgaW50IF9OdW0sIGludCBfU2hpZnQgPSAoc2l6ZW9mKHVuc2lnbmVkKSAqIDgpLzIsCiAgICAg
ICAgICAgdW5zaWduZWQgaW50IF9NYXNrID0gKH4wdSA+PiBfU2hpZnQpID4KICAgIHN0cnVjdCBf
Q291bnRfb25lczsKCgoKICB0ZW1wbGF0ZTx1bnNpZ25lZCBpbnQgX051bSwgdW5zaWduZWQgaW50
IF9NYXNrPgogICAgc3RydWN0IF9Db3VudF9vbmVzPF9OdW0sIDAsIF9NYXNrPgogICAgewogICAg
ICBlbnVtCiAgICAgIHsKICAgICAgICBfTV9jb3VudCA9IF9OdW0KICAgICAgfTsKICAgIH07Cgog
IHRlbXBsYXRlPHVuc2lnbmVkIGludCBfTnVtLCBpbnQgX1NoaWZ0LCB1bnNpZ25lZCBpbnQgX01h
c2s+CiAgICBzdHJ1Y3QgX0NvdW50X29uZXMKICAgIHsKICAgICAgZW51bQogICAgICB7CiAgICAg
ICAgX01faGFsZmNvdW50ID0gX0NvdW50X29uZXM8X051bSwgX1NoaWZ0LzIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKF9NYXNrXigofl9NYXNrKT4+KF9TaGlmdC8yKSkpID46
Ol9NX2NvdW50LAogICAgICAgIF9NX2NvdW50ID0gKF9NX2hhbGZjb3VudCZfTWFzaykgKyAoKF9N
X2hhbGZjb3VudD4+X1NoaWZ0KSZfTWFzaykKICAgICAgfTsKICAgIH07CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIHZlY3RvcjsKICBjbGFzcyBs
b2NhbGU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg
aXNzcGFjZShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChf
Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNsb3dlcihfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2Fs
ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNw
dW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0No
YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0No
YXJUCiAgICB0b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgoKCiAgY2xhc3MgY3R5cGVf
YmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1w
bGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGNsYXNzIGN0eXBlX2J5bmFtZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+
CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFy
LCBtYnN0YXRlX3Q+OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBf
RXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+
CiAgICBjbGFzcyBudW1fcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVt
cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdF9ieW5hbWU7
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlOwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MKICAgIGNvbGxhdGVfYnluYW1lOwoKCiAgY2xhc3Mg
dGltZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9
IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldDsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lOwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy
VD4gPgogICAgY2xhc3MgdGltZV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0
aW1lX3B1dF9ieW5hbWU7CgoKICBjbGFzcyBtb25leV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+
CiAgICBjbGFzcyBtb25leV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25l
eV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAg
ICBjbGFzcyBtb25leXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50
bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU7CgoKICBjbGFzcyBtZXNzYWdl
c19iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzOwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTsKCgog
IGNsYXNzIGxvY2FsZQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgY2F0
ZWdvcnk7CgoKICAgIGNsYXNzIGZhY2V0OwogICAgY2xhc3MgaWQ7CiAgICBjbGFzcyBfSW1wbDsK
CiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7CiAgICBmcmllbmQgY2xhc3MgX0ltcGw7CgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1
c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog
ICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsK
CgoKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBub25lID0gMDsKICAgIHN0YXRpYyBjb25zdCBj
YXRlZ29yeSBjdHlwZSA9IDFMIDw8IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJp
YyA9IDFMIDw8IDE7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY29sbGF0ZSA9IDFMIDw8IDI7
CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9IDFMIDw8IDM7CiAgICBzdGF0aWMgY29u
c3QgY2F0ZWdvcnkgbW9uZXRhcnkgPSAxTCA8PCA0OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5
IG1lc3NhZ2VzID0gMUwgPDwgNTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY29s
bGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtZXJpYyB8IHRpbWUgfCBtZXNzYWdlcyk7CgoKICAgIGxvY2FsZSgpIHRo
cm93KCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICBl
eHBsaWNpdAogICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fc3RkX25hbWUpOwoKICAgIGxvY2FsZShj
b25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7Cgog
ICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRl
Z29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUo
Y29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93
KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhl
cikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQog
ICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcik7CgoKICAgIHN0cmluZwogICAgbmFt
ZSgpIGNvbnN0OwoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVy
KSBjb25zdCB0aHJvdyAoKTsKCiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBs
b2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJh
dG9yPT0oX19vdGhlcikpOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIp
IGNvbnN0OwoKCiAgICBzdGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7Cgog
ICAgc3RhdGljIGNvbnN0IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBf
SW1wbCogX01faW1wbDsKCgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0
aWMgX0ltcGwqIF9TX2dsb2JhbDsKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9jYXRl
Z29yaWVzID0gX0NvdW50X29uZXM8YWxsPjo6X01fY291bnQ7CiAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IF9TX251bV9mYWNldHMgPSAxMzsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikg
dGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAg
eyBpZiAoIV9TX2NsYXNzaWMpIGNsYXNzaWMoKTsgfQoKICAgIHN0YXRpYyBjYXRlZ29yeQogICAg
X1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9jb2FsZXNj
ZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19j
YXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJsaWM6CgogICAgdHlw
ZWRlZiB2ZWN0b3I8ZmFjZXQqLCBhbGxvY2F0b3I8ZmFjZXQqPiA+IF9fdmVjX2ZhY2V0OwoKCiAg
ICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6ZmFjZXQ7Cgog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0Jgog
ICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh
Y2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhy
b3coKTsKCiAgcHJpdmF0ZToKCiAgICBzaXplX3QgX01fcmVmZXJlbmNlczsKICAgIF9fdmVjX2Zh
Y2V0KiBfTV9mYWNldHM7CiAgICBzdHJpbmcgX01fbmFtZXNbX1NfbnVtX2NhdGVnb3JpZXNdOwog
ICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBj
b25zdCBfU19pZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9T
X2lkX251bWVyaWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9j
b2xsYXRlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtd
OwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAg
ICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0
YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1td
OwoKICAgIGlubGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyAr
K19NX3JlZmVyZW5jZXM7IH0KCiAgICBpbmxpbmUgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5j
ZSgpIHRocm93KCkKICAgIHsKICAgICAgaWYgKF9NX3JlZmVyZW5jZXMtLSA9PSAwKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBj
YXRjaCguLi4pCiAgICAgICAgICAgIHsgfQogICAgICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25z
dCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1wbChzdHJpbmcgX19uYW1lLCBzaXplX3QpOwogICB+
X0ltcGwoKSB0aHJvdygpOwoKICAgIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7
CiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IF9T
X251bV9jYXRlZ29yaWVzIC0gMTsgKytpKQogICAgICAgIF9fcmV0ICY9IF9NX25hbWVzW2ldID09
IF9NX25hbWVzW2kgKyAxXTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQogICAgdm9pZAogICAg
X01fcmVwbGFjZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQK
ICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBj
b25zdCopOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25z
dCBsb2NhbGU6OmlkKik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2Nh
bGU6OmlkKiwgZmFjZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlu
bGluZSB2b2lkCiAgICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9N
X2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVy
LCBfRmFjZXQqIF9fZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5f
TV9pbXBsLCAxKTsKICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwg
X19mKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX1NfbnVtX2NhdGVnb3JpZXM7
ICsrX19pKQogICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSAiKiI7CiAgICB9CgoKICBj
bGFzcyBsb2NhbGU6OmZhY2V0CiAgewogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVu
ZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdAogICAgZmFj
ZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRocm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0KCkg
eyB9OwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYg
X19jbG9jLCBjb25zdCBjaGFyKiBfX3MpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95
X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CgogIHByaXZhdGU6CiAgICBzaXplX3QgX01f
cmVmZXJlbmNlczsKCiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAg
ICB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25z
dCBmYWNldCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoK
CiAgY2xhc3MgbG9jYWxlOjppZAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2Fs
ZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3Qg
bG9jYWxlJik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29s
CiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxl
IHNpemVfdCBfTV9pbmRleDsKCgogICAgc3RhdGljIHNpemVfdCBfU19oaWdod2F0ZXI7CgogICAg
dm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVi
bGljOgoKCgogICAgaWQoKSB7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAg
ICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2Nh
bGUmIF9fbG9jKSB0aHJvdygpOwp9CiMgNDQgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz
L3N0ZF9pb3MuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvaW9zX2Jh
c2UuaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2lvc19iYXNlLmgi
IDMKCm5hbWVzcGFjZSBzdGQgewoKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2Zt
dGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0
b3ImKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9z
X0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7
IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBfX2Es
IF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8
aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRm
bGFncwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAg
eyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2Fz
dDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShfSW9z
X0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8
IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFn
cyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0K
CiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwg
X0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGlu
ZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0dXJu
IF9Jb3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19P
cGVubW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lv
c19PcGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBf
X2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0
aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8
KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09w
ZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0K
CiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9J
b3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50
PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9k
ZQogIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7
IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVy
YXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4g
X19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JePShf
SW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9f
YSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09wZW5t
b2RlIF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkp
OyB9CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2
IH07CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwg
X0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50
PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRl
CiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1
cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4o
X19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUg
X19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2Fz
dDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lv
c3RhdGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQog
IHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3Bl
cmF0b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBf
X2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lv
c19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4g
X19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9f
YSkKICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAg
ZW51bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAg
Y2xhc3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGlj
IGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1
cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmZh
aWx1cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkg
Y29uc3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgogICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1
NiB9OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRl
ZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29s
YWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0
YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhl
ZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX2hleCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfbGVmdCk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh
Z3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3Qg
Zm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfcmlnaHQpOwogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf
c2NpZW50aWZpYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNo
b3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9pbnQpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIHNob3dwb3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bv
cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxh
Z3M6Ol9TX3NraXB3cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZs
YWdzKF9faW9zX2ZsYWdzOjpfU191bml0YnVmKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1
cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRp
YyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19h
ZGp1c3RmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10Zmxh
Z3MoX19pb3NfZmxhZ3M6Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
ZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAg
dHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJh
ZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3Qg
aW9zdGF0ZSBlb2ZiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3Rh
dGljIGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxi
aXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAg
IHR5cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9kZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9k
ZSBhcHAgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBv
cGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBj
b25zdCBvcGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAg
IHN0YXRpYyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7
CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9T
X291dCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19m
bGFnczo6X1NfdHJ1bmMpOwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAg
c3RhdGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBz
ZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBz
ZWVrZGlyKDIpOwojIDIxNiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvaW9zX2Jhc2Uu
aCIgMwogICAgZW51bSBldmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwKICAgICAgaW1idWVf
ZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICgqZXZl
bnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAgIHJlZ2lz
dGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAgcHJvdGVj
dGVkOgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0
aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAg
ICB7CgogICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50
X2NhbGxiYWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIGludCBfTV9yZWZjb3Vu
dDsKCiAgICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfX2ZuLCBp
bnQgX19pbmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IpCiAg
ICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9y
ZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgKytf
TV9yZWZjb3VudDsgfQoKICAgICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJl
dHVybiBfTV9yZWZjb3VudC0tOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2Fs
bGJhY2tzOwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93
KCk7CgogICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAgIHN0cnVj
dCBfV29yZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01faXdvcmQ7
CiAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZHMgPSA4OwogICAgX1dv
cmRzIF9NX3dvcmRfYXJyYXlbX1NfbG9jYWxfd29yZHNdOwogICAgX1dvcmRzIF9NX2R1bW15Owog
ICAgX1dvcmRzKiBfTV93b3JkczsKICAgIGludCBfTV93b3JkX2xpbWl0OwoKICAgIF9Xb3JkcyYK
ICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9zX2xvY2Fs
ZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3MgSW5p
dAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAgIElu
aXQoKTsKICAgICAgfkluaXQoKTsKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9z
X2Jhc2VfaW5pdDsKICAgICAgc3RhdGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87CiAgICAg
IGZpbGVidWYqIF9NX2NvdXQ7CiAgICAgIGZpbGVidWYqIF9NX2NpbjsKICAgICAgZmlsZWJ1Ziog
X01fY2VycjsKCgoKCgogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncygpIGNv
bnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncyhm
bXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwog
ICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBp
bmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10
ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAg
cmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFn
cyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0g
X01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9IChf
X2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSB2
b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0K
CiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01f
cHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbihzdHJlYW1z
aXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lvbjsK
ICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9Cgog
ICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX01fd2lkdGg7
IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUpCiAg
ICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAgICAgX01fd2lkdGggPSBf
X3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAgc3lu
Y193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxvY2FsZQogICAgaW1idWUo
Y29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQogICAgZ2V0bG9jKCkgY29u
c3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMgaW50CiAgICB4YWxsb2Mo
KSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50IF9faXgpCiAgICB7CiAg
ICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQogICAgICAgICAgICAg
ICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAg
cmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZComCiAgICBwd29y
ZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRf
bGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZHNbX19peF0gOiBfTV9ncm93
X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwogICAgfQoKCiAgICB+
aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9zX2Jhc2UoKTsKCgogIHByaXZhdGU6CiAg
ICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9
KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhh
KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBo
YSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFs
cGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9v
bGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hv
d2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hv
d2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3No
b3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6
c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBz
aG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6
c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg
bm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19i
YXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz
ZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh
c2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK
ICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19i
YXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um
CiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6
OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5v
c2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6
c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBw
ZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVw
cGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5v
dXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFz
ZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um
CiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz
ZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK
ICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3Nf
YmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwog
ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6
OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNl
JgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpk
ZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp
b3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4g
X19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0Zmll
bGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRp
ZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVu
dGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQoj
IDQ1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9o
b21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMSAzCiMgMzggIi9o
b21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwoKIyAxICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25maWcu
aCIgMSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9zdHJlYW1idWYu
aCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAx
IDMKIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAy
IDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwoj
IDQyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwoj
IDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MyAi
L2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIv
aG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0NCAiL2hvbWU1
L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKCm5hbWVzcGFjZSBz
dGQgewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBz
dHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz
PiYgX2lvcywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPiogX19zYm91dCk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYKICAgIHsKICAgIHB1Ymxp
YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlw
ZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUg
cG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9m
Zl90eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3Ry
ZWFtYnVmX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJh
aXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRy
YWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0
cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJf
dHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRv
cjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZyaWVuZCBzdHJlYW1zaXplCiAgICAg
IF9fY29weV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+JiBf
X2lvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4s
X19zdHJlYW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVjdGVkOgoKCgoKCgogICAgICBj
aGFyX3R5cGUqIF9NX2J1ZjsKCgogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZTsKCgogICAgICBp
bnRfdHlwZSBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wgX01fYnVmX3VuaWZpZWQ7CgoK
CgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2N1
cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2Jl
ZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9l
bmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoKICAgICAgbG9jYWxlIF9N
X2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2luaXQ7CgoKICAgICAgY29u
c3QgX19jdHlwZV90eXBlKiBfTV9idWZfZmN0eXBlOwoKCgoKCgogICAgICBpbnRfdHlwZSBfTV9w
YmFja19zaXplOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrOwogICAgICBjaGFyX3R5cGUqIF9N
X3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZlOwogICAg
ICBib29sIF9NX3BiYWNrX2luaXQ7CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2NyZWF0
ZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAg
ICAgICAgIGludF90eXBlIF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAg
ICAgaW50X3R5cGUgX19sZW4gPSBtaW4oX01fcGJhY2tfc2l6ZSwgX19kaXN0KTsKICAgICAgICAg
ICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAg
ICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1cjsKICAgICAgICAgICAgX01fcGJhY2tf
ZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9N
X3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IHRy
dWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfZGVz
dHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKCiAg
ICAgICAgICAgIGludF90eXBlIF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwoKCiAg
ICAgICAgICAgIGludF90eXBlIF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIGludF90eXBlIF9f
cGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAgICAgICAgICAgIGludF90eXBlIF9f
c2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAgICAgaWYgKF9f
cGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQgPSBfX3BiYWNr
X2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJh
Y2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tf
ZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9f
bnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAg
IF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgfQoKCgogICAgICB2b2lk
CiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAgIGJvb2wg
X190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0gX19uOwogICAgICAg
IGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9vdXRfY3VyICs9
IF9fbjsKICAgICAgfQojIDE5NiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3N0
cmVhbWJ1Zi5oIiAzCiAgICAgIHZvaWQKICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9f
bikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7CgogICAgICAgIF9N
X291dF9jdXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RpbiAmJiBfTV9idWZfdW5pZmllZCkK
ICAgICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9v
dXRfZW5kKQogICAgICAgICAgewogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1cjsK
CiAgICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgICBfTV9pbl9lbmQgKz0gX19u
OwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICBvZmZfdHlwZQogICAgICBfTV9vdXRfYnVm
X3NpemUoKQogICAgICB7CiAgICAgICAgb2ZmX3R5cGUgX19yZXQgPSAwOwogICAgICAgIGlmIChf
TV9vdXRfY3VyKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX291dF9iZWcgPT0gX01f
YnVmKQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01f
b3V0X2N1cjsKCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9l
bmQgLSBfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAg
fQojIDIzOSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAz
CiAgICAgIHZvaWQKICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAg
ICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9i
dWYsIF9NX2J1ZiwgX01fYnVmKTsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQp
CiAgICAgICAgICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmKTsKICAgICAgfQoKICAgICAgdm9p
ZAogICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUob2ZmX3R5cGUgX19vZmYpCiAgICAgIHsKICAgICAg
ICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgICBib29sIF9f
dGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICAgIGlmIChfX3Rlc3RpbikK
ICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1ZiArIF9fb2ZmKTsKICAg
ICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYsIF9NX2J1ZiAr
IF9fb2ZmKTsKCiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2
b2lkKQogICAgICB7CiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNlOwogICAgICAgIGlmIChfTV9t
b2RlICYgaW9zX2Jhc2U6OmluKQogICAgICAgICAgX19yZXQgPSBfTV9pbl9iZWcgPT0gX01faW5f
Y3VyICYmIF9NX2luX2N1ciA9PSBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3Nf
YmFzZTo6b3V0KQogICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnID09IF9NX291dF9jdXIgJiYg
X01fb3V0X2N1ciA9PSBfTV9vdXRfZW5kOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoK
ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIHsK
ICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNlOwogICAgICAgIF9NX2J1Zl9zaXplID0gMDsK
ICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6
b3Blbm1vZGUoMCk7CiAgICAgICAgX01fYnVmX2ZjdHlwZSA9IF9fbnVsbDsKICAgICAgICBfTV9i
dWZfbG9jYWxlX2luaXQgPSBmYWxzZTsKCiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgcHVi
aW1idWUoY29uc3QgbG9jYWxlICZfX2xvYykKICAgICAgewogICAgICAgIGxvY2FsZSBfX3RtcCh0
aGlzLT5nZXRsb2MoKSk7CiAgICAgICAgdGhpcy0+aW1idWUoX19sb2MpOwogICAgICAgIHJldHVy
biBfX3RtcDsKICAgICAgfQoKICAgICAgbG9jYWxlCiAgICAgIGdldGxvYygpIGNvbnN0CiAgICAg
IHsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9pbml0KQogICAgICAgICAgcmV0dXJuIF9NX2J1
Zl9sb2NhbGU7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGxvY2FsZSgpOwogICAgICB9
CgoKICAgICAgX19zdHJlYW1idWZfdHlwZSoKICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsg
fQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jh
c2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f
bW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMt
PnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUpOyB9CgogICAgICBwb3NfdHlwZQogICAgICBw
dWJzZWVrcG9zKHBvc190eXBlIF9fc3AsCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5t
b2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJu
IHRoaXMtPnNlZWtwb3MoX19zcCwgX19tb2RlKTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMo
KSB7IHJldHVybiB0aGlzLT5zeW5jKCk7IH0KCgoKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9h
dmFpbCgpCiAgICAgIHsKICAgICAgICBzdHJlYW1zaXplIF9fcmV0OwogICAgICAgIGlmIChfTV9p
bl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgewogICAgICAgICAgICBp
ZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnRfdHlw
ZSBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9wYmFja19jdXJfc2F2ZTsKICAg
ICAgICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5fY3VyIC0gX01fcGJhY2s7
CiAgICAgICAgICAgICAgICBfX3JldCA9IF9fc2F2ZV9sZW4gLSBfX3BiYWNrX2xlbjsKICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVn
cHRyKCkgLSB0aGlzLT5ncHRyKCk7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAg
X19yZXQgPSB0aGlzLT5zaG93bWFueWMoKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0K
CiAgICAgIGludF90eXBlCiAgICAgIHNuZXh0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBf
X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICByZXR1cm4gKHRoaXMtPnNidW1wYygp
ID09IF9fZW9mID8gX19lb2YgOiB0aGlzLT5zZ2V0YygpKTsKICAgICAgfQoKICAgICAgaW50X3R5
cGUKICAgICAgc2J1bXBjKCk7CgogICAgICBpbnRfdHlwZQogICAgICBzZ2V0YygpCiAgICAgIHsK
ICAgICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1
ciA8IF9NX2luX2VuZCkKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KCpncHRyKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93
KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBzdHJlYW1zaXplCiAgICAg
IHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhp
cy0+eHNnZXRuKF9fcywgX19uKTsgfQoKCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRiYWNrYyhj
aGFyX3R5cGUgX19jKTsKCiAgICAgIGludF90eXBlCiAgICAgIHN1bmdldGMoKTsKCgogICAgICBp
bnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIHN0cmVhbXNpemUKICAg
ICAgc3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJl
dHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBiYXNp
Y19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSgwKSwKICAg
ICAgX01fYnVmX3NpemVfb3B0KHN0YXRpY19jYXN0PGludF90eXBlPigxMDI0KSksIF9NX2J1Zl91
bmlmaWVkKGZhbHNlKSwKICAgICAgX01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCksIF9NX2luX2Vu
ZCgwKSwgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwKICAgICAgX01fb3V0X2VuZCgwKSwg
X01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9idWZfbG9jYWxlKGxvY2FsZSgpKSwK
ICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01fcGJhY2tfc2l6ZSgxKSwgX01fcGJh
Y2soX19udWxsKSwKICAgICAgX01fcGJhY2tfY3VyX3NhdmUoX19udWxsKSwgX01fcGJhY2tfZW5k
X3NhdmUoX19udWxsKSwgX01fcGJhY2tfaW5pdChmYWxzZSkKICAgICAgeyBfTV9idWZfZmN0eXBl
ID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KHRoaXMtPmdldGxvYygpKTsgfQoKCiAgICAgIGNo
YXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9iZWc7IH0KCiAgICAg
IGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2N1cjsgfQoKICAg
ICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQoK
ICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciArPSBfX247IH0KCiAg
ICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0
LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsK
ICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9NX2luX2VuZCA9IF9fZ2VuZDsK
ICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4
dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsK
ICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBf
TV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVy
biBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVwcHRyKCkgY29uc3QgeyBy
ZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBwYnVtcChpbnQgX19uKSB7IF9N
X291dF9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3Bi
ZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAgICB7CiAgICAgICAgX01fb3V0X2JlZyA9IF9NX291
dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVuZDsKICAgICAgICBpZiAo
IShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVuZCkKICAgICAgICAg
IF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAgICAgfQoKCgogICAgICB2aXJ0
dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgICAgewogICAgICAg
IF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGUgIT0g
X19sb2MpCiAgICAgICAgIHsKICAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAg
ICAgICAgX01fYnVmX2ZjdHlwZSA9ICZ1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfTV9idWZfbG9j
YWxlKTsKICAgICAgICAgfQogICAgICB9CgoKICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8
Y2hhcl90eXBlLF9UcmFpdHM+KgogICAgICBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSkK
ICAgICAgeyByZXR1cm4gdGhpczsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVr
b2ZmKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAgICBpb3NfYmFzZTo6
b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBw
b3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNl
ZWtwb3MocG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jh
c2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUo
LTEpKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpIHsgcmV0dXJuIDA7IH0KCgog
ICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQoK
ICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3Ry
ZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQog
ICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICAgIHZpcnR1YWwgaW50X3R5
cGUKICAgICAgdWZsb3coKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNf
dHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0aGlzLT51bmRlcmZsb3coKSA9
PSBfX3JldDsKICAgICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5f
Y3VyIDwgX01faW5fZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBlbmRpbmcp
CiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KCpfTV9pbl9jdXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAgaWYgKF9N
X2J1Zl91bmlmaWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgICsr
X01fb3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgog
ICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRyYWl0c190
eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgoKICAgICAg
dmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3Ry
ZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxvdyhpbnRf
dHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVv
ZigpOyB9CiMgNTIxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3RyZWFtYnVm
LmgiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1
Zl90eXBlJik7CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3Qg
X19zdHJlYW1idWZfdHlwZSYpOwoKICAgIH07Cgp9CiMgNDYgIi9ob21lNS9rcmFrb3cvZ251L2xv
Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAw
MTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvYmFzaWNfaW9zLmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9i
YXNpY19pb3MuaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zYnVmX2l0
ZXIuaCIgMSAzCiMgMzYgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3NidWZfaXRlci5o
IiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcgoKCgogICAgOiBwdWJsaWMg
b3V0cHV0X2l0ZXJhdG9yCgogICAgewogICAgcHVibGljOgoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7Cgog
ICAgICBpbmxpbmUKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykg
dGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKGZhbHNlKSB7
IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cg
KCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZChmYWxzZSkgeyB9CgogICAgICBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAgICBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
ICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGlu
dCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVy
YXRvciYKICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0K
CiAgICAgIGJvb2wKICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBf
TV9mYWlsZWQ7IH0KCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsK
ICAgICAgYm9vbCBfTV9mYWlsZWQ7CiMgOTYgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz
L3NidWZfaXRlci5oIiAzCiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp
dHM+JgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcj0o
X0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKCFfTV9mYWlsZWQgJiYKICAgICAgICAgIF9UcmFp
dHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksX1RyYWl0czo6ZW9mKCkpKQogICAg
ICBfTV9mYWlsZWQgPSB0cnVlOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMTM3ICIvaG9t
ZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zYnVmX2l0ZXIuaCIgMwogIHRlbXBsYXRlPGNsYXNz
IF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3IKICAg
IDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9DaGFyVCY+
CiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry
YWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZTsKCiAgICAg
IGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01faXN0cmVhbWJ1ZihfX251
bGwpLCBfTV9jKC0yKSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBl
JiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9pc3RyZWFtYnVmKF9fcy5yZGJ1ZigpKSwgX01fYygt
MikgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRo
cm93KCkKICAgICAgOiBfTV9pc3RyZWFtYnVmKF9fcyksIF9NX2MoLTIpIHsgfQoKCgoKICAgICAg
Y2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgY2hhcl90
eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pc3RyZWFtYnVmICYmIF9NX2MgIT0gc3RhdGljX2Nh
c3Q8aW50X3R5cGU+KC0yKSkKICAgICAgICAgIF9fcmV0ID0gX01fYzsKICAgICAgICBlbHNlIGlm
IChfTV9pc3RyZWFtYnVmKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90
eXBlKF9NX2lzdHJlYW1idWYtPnNnZXRjKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0
ID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPih0cmFpdHNfdHlwZTo6ZW9mKCkpOwogICAgICAgIHJl
dHVybiBfX3JldDsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlJgogICAgICBv
cGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9pc3RyZWFtYnVmKQogICAgICAgICAg
X01faXN0cmVhbWJ1Zi0+c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgfQoKCgoKCiAgICAgIGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZQog
ICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIGlmIChfTV9pc3RyZWFtYnVmKQog
ICAgICAgICAgX01fYyA9IF9NX2lzdHJlYW1idWYtPnNidW1wYygpOwogICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgfQoKCiAgICAgIGJvb2wKICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVm
aXRlcl90eXBlJiBfX2IpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190
eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGhpc2VvZiA9ICFfTV9pc3RyZWFtYnVmIHx8IF9N
X2lzdHJlYW1idWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSAhX19i
Ll9NX2lzdHJlYW1idWYKICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYi5fTV9pc3RyZWFtYnVm
LT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8
fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgoKCiAgICAgIGJvb2wKICAgICAg
ZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBlJiBfX2IpIGNvbnN0CiAgICAgIHsKICAg
ICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9f
dGhpc2VvZiA9ICFfTV9pc3RyZWFtYnVmIHx8IF9NX2lzdHJlYW1idWYtPnNnZXRjKCkgPT0gX19l
b2Y7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSAhX19iLl9NX2lzdHJlYW1idWYKICAgICAgICAgICAg
ICAgICAgICAgIHx8IF9fYi5fTV9pc3RyZWFtYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAg
IHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7
CiAgICAgIH0KCgogICAgcHJpdmF0ZToKCgoKCgoKCiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBfTV9p
c3RyZWFtYnVmOwogICAgICBpbnRfdHlwZSBfTV9jOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAg
ICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19i
KQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u
c3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAg
ICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAg
eyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9Cgp9CiMgMzYgIi9ob21lNS9rcmFrb3cvZ251L2xv
Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl
L2crKy9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y
MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv
Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMwojIDQwICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y
MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv
Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAw
MTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvc3RkX2N0aW1lLmgiIDEgMwojIDM5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGRfY3RpbWUuaCIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29s
YXJpczIuOC9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9j
YWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv
ZysrL2JpdHMvc3RkX2N0aW1lLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw
MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGRfY3RpbWUuaCIgMiAzCiMgNDMgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9jdGltZS5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDQ0
ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3RpbWUuaCIgMiAzCiMgNTYgIi9o
b21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jdGltZS5oIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICBl
eHRlcm4gIkMiIGNsb2NrX3QgY2xvY2sodm9pZCk7CiAgZXh0ZXJuICJDIiBkb3VibGUgZGlmZnRp
bWUodGltZV90LCB0aW1lX3QpOwogIGV4dGVybiAiQyIgdGltZV90IG1rdGltZShzdHJ1Y3QgdG0q
KTsKICBleHRlcm4gIkMiIHRpbWVfdCB0aW1lKHRpbWVfdCopOwogIGV4dGVybiAiQyIgY2hhciog
YXNjdGltZShjb25zdCBzdHJ1Y3QgdG0qKTsKICBleHRlcm4gIkMiIGNoYXIqIGN0aW1lKGNvbnN0
IHRpbWVfdCopOwogIGV4dGVybiAiQyIgc3RydWN0IHRtKiBnbXRpbWUoY29uc3QgdGltZV90Kik7
CiAgZXh0ZXJuICJDIiBzdHJ1Y3QgdG0qIGxvY2FsdGltZShjb25zdCB0aW1lX3QqKTsKICBleHRl
cm4gIkMiIHNpemVfdCBzdHJmdGltZShjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgY29uc3Qg
c3RydWN0IHRtKik7Cn0KIyA0MiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxl
X2ZhY2V0cy5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9z
LmgiIDEgMwojIDQzICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRz
LmgiIDIgMwoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xv
Y2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl
L2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzCiMgMzggIi9o
b21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2N0eXBlX2Jh
c2UuaCIgMwogIHN0cnVjdCBjdHlwZV9iYXNlCiAgewoKICAgIHR5cGVkZWYgaW50KiBfX3RvX3R5
cGU7CgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBtYXNrOwogICAgc3RhdGljIGNvbnN0IG1h
c2sgdXBwZXIgPSAweDAwMDAwMDAxOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAweDAw
MDAwMDAyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSAweDAwMDA0MDAwOwogICAgc3Rh
dGljIGNvbnN0IG1hc2sgZGlnaXQgPSAweDAwMDAwMDA0OwogICAgc3RhdGljIGNvbnN0IG1hc2sg
eGRpZ2l0ID0gMHgwMDAwMDA4MDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gMHgwMDAw
MDAwODsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50ID0gMHgwMDAwODAwMDsKICAgIHN0YXRp
YyBjb25zdCBtYXNrIGdyYXBoID0gMHgwMDAwMjAwMDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNu
dHJsID0gMHgwMDAwMDAyMDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0gMHgwMDAwMDAx
MDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gKDB4MDAwMDQwMDAgfCAweDAwMDAwMDA0
KTsKICB9OwojIDU0ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRz
LmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX19jdHlwZV9h
YnN0cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlwZV9iYXNlCiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBi
b29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg
aXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUgKl9faGksIG1hc2sgKl9f
dmVjKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX2xvLCBfX2hpLCBfX3ZlYyk7
IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3NjYW5faXMoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY29uc3QgY2hh
cl90eXBlKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5f
bm90KF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b3VwcGVyKGNo
YXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19jKTsg
fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b3VwcGVyKGNoYXJfdHlwZSAqX19sb3cs
IGNvbnN0IGNoYXJfdHlwZSogX19oaWdoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190
b3VwcGVyKF9fbG93LCBfX2hpZ2gpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG9sb3dlcihj
aGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fYyk7
IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG9sb3dlcihjaGFyX3R5cGUqIF9fbG93
LCBjb25zdCBjaGFyX3R5cGUqIF9faGlnaCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
dG9sb3dlcihfX2xvdywgX19oaWdoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNo
YXIgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2MpOyB9CgogICAg
ICBjb25zdCBjaGFyKgogICAgICB3aWRlbihjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciog
X19oaWdoLCBjaGFyX3R5cGUqIF9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dp
ZGVuKF9fbG93LCBfX2hpZ2gsIF9fdG8pOyB9CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFy
X3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19u
YXJyb3coX19jLCBfX2RmYXVsdCk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgbmFy
cm93KGNvbnN0IGNoYXJfdHlwZSogX19sb3csIGNvbnN0IGNoYXJfdHlwZSogX19oaWdoLAogICAg
ICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX25hcnJvdyhfX2xvdywgX19oaWdoLCBfX2RmYXVsdCwgX190byk7IH0KCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXpl
X3QgX19yZWZzID0gMCk6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwK
ICAgICAgfl9fY3R5cGVfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCBib29sCiAg
ICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdCA9IDA7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgIG1hc2sqIF9fdmVjKSBjb25zdCA9IDA7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9f
bSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBj
aGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sb3cs
IGNvbnN0IGNoYXJfdHlwZSogX19oaWdoKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJf
dHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvdywgY29u
c3QgY2hhcl90eXBlKiBfX2hpZ2gpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwK
ICAgICAgICAgICAgICAgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1
YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9
IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0
IGNoYXJfdHlwZSogX19sb3csIGNvbnN0IGNoYXJfdHlwZSogX19oaWdoLAogICAgICAgICAgICAg
ICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3QgPSAwOwogICAgfTsKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlIDogcHVibGljIF9fY3R5cGVf
YWJzdHJhY3RfYmFzZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsK
CiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVf
YWJzdHJhY3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9CgogICAgICBzdGF0aWMgbG9jYWxlOjpp
ZCBpZDsKCiAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKSB7IH0KICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY3R5cGU8X0No
YXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTxjaGFyPiA6IHB1YmxpYyBf
X2N0eXBlX2Fic3RyYWN0X2Jhc2U8Y2hhcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgY2hhciBjaGFyX3R5cGU7CgogICAgcHJpdmF0ZToKCiAgICAgIGJvb2wgX01fZGVsOwogICAg
ICBfX3RvX3R5cGUgY29uc3QmIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBjb25zdCYgX01f
dG9sb3dlcjsKICAgICAgY29uc3QgbWFzayogY29uc3QmIF9NX2N0YWJsZTsKICAgICAgY29uc3Qg
bWFzayogX01fdGFibGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsK
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KC0xKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKGNvbnN0IG1hc2sq
IF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg
ICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAg
ICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNo
YXIqIF9faGlnaCwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIq
CiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBf
X2hpZ2gpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1h
c2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdDsKCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICBjb25zdCBt
YXNrKgogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fdGFibGU7
IH0KCiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIF9NX2N0YWJsZTsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1h
c2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog
X19sbywKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBj
b25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNo
YXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
dG91cHBlcihjaGFyX3R5cGUqIF9fbG93LCBjb25zdCBjaGFyX3R5cGUqIF9faGlnaCkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFy
X3R5cGUqIF9fbG93LCBjb25zdCBjaGFyX3R5cGUqIF9faGlnaCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIq
IF9faGlnaCwKICAgICAgICAgICAgICAgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25z
dCBjaGFyX3R5cGUqIF9fbG93LCBjb25zdCBjaGFyX3R5cGUqIF9faGlnaCwKICAgICAgICAgICAg
ICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxh
dGU8PgogICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihj
b25zdCBsb2NhbGUmIF9fbG9jKTsKIyAzNDggIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEw
MzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz
L2xvY2FsZV9mYWNldHMuaCIgMwojIDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIw
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1z
dW4tc29sYXJpczIuOC9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMKIyAzNyAiL2hvbWU1L2tyYWtv
dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w
L2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMK
ICBib29sCiAgY3R5cGU8Y2hhcj46OgogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7
IHJldHVybiBfTV90YWJsZVtfX2NdICYgX19tOyB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hh
cj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9f
dmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKICAgICAgKl9fdmVjKysg
PSBfTV90YWJsZVsqX19sb3crK107CiAgICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29uc3QgY2hh
cioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3cs
IGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gg
JiYgIShfTV90YWJsZVsqX19sb3ddICYgX19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBf
X2xvdzsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1hc2sg
X19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAg
IHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmIChfTV90YWJsZVsqX19sb3ddICYg
X19tKSAhPSAwKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyAzNDkgIi9o
b21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5
cGU8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVf
dCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBl
X2J5bmFtZSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFy
Pjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKCiMgMSAiL2hvbWU1
L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0MiAiL2hvbWU1L2tyYWtv
dy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w
L2luY2x1ZGUvZysrL2JpdHMvY29kZWN2dC5oIiAzCiMgMTczICIvaG9tZTUva3Jha293L2dudS9s
b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk
ZS9nKysvYml0cy9jb2RlY3Z0LmgiIDMKICBjbGFzcyBjb2RlY3Z0X2Jhc2UKICB7CiAgcHVibGlj
OgogICAgZW51bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRpYWwsCiAgICAgIGVy
cm9yLAogICAgICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIF9f
Y29kZWN2dF9hYnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMg
Y29kZWN2dF9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFz
ZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAg
ICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0
YXRlX3R5cGU7CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBj
b25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9f
ZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBleHRl
cm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgZXh0ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0
KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAg
cmVzdWx0CiAgICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9f
dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9f
dG9fbmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBf
X3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90
eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK
ICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAg
ICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4g
dGhpcy0+ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAg
IH0KCiAgICAgIGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAgICBhbHdheXNfbm9jb252
KCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNfbm9jb252KCk7
IH0KCiAgICAgIGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29u
c3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBf
X2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgo
X19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQKICAgICAgbWF4X2xl
bmd0aCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgp
OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2NvZGVjdnRfYWJzdHJh
Y3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9Cgog
ICAgICB2aXJ0dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAg
dmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGlu
dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9t
X2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVy
bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAg
ZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAg
ICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0
KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBl
JiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK
ICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAg
ICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1
YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0
dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkgPSAwOwoKICAg
ICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv
X21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAg
Y2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVy
blQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBj
b2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJu
X3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg
X1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg
ZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVj
dnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCxfRXh0ZXJuVCxfU3RhdGVUPiAoX19yZWZzKSB7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7IH0KICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5h
bWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9T
dGF0ZVQ+OjppZDsKIyA1OTQgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2NvZGVjdnQu
aCIgMwogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90
PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0
ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGludGVybl90eXBlOwog
ICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0
YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog
ICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp
cnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291
dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAg
ICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYg
X19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUq
IF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRl
LCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19l
bmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0
CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy
b20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRl
cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50
ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93
KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRo
cm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlw
ZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRl
cm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAog
ICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICB9OwojIDcwMCAiL2hvbWU1L2ty
YWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
My4wL2luY2x1ZGUvZysrL2JpdHMvY29kZWN2dC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29k
ZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+
CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNv
bnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBf
RXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0KICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0KICAgIH07CiMgMzcyICIvaG9tZTUva3Jha293
L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv
aW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19nZXQ7CgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX0Zvcm1hdF9jYWNoZQogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5n
X3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CgoKICAgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsK
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgICAg
ZnJpZW5kIGNsYXNzIF9OdW1lcmljX2dldDsKICAgICAgZnJpZW5kIGNsYXNzIG51bV9nZXQ8X0No
YXJUPjsKICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNs
YXNzIHRpbWVfZ2V0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9nZXQ8X0NoYXJU
PjsKICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfcHV0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFz
cyBtb25leV9wdXQ8X0NoYXJUPjsKCgoKCiAgICAgIHN0YXRpYyBpbnQgX1NfcHdvcmRfaXg7CgoK
CiAgICAgIGJvb2wgX01fdmFsaWQ7CgoKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2xpdGVy
YWxzW107CgoKCgogICAgICBlbnVtCiAgICAgIHsKICAgICAgICBfU19taW51cywKICAgICAgICBf
U19wbHVzLAogICAgICAgIF9TX3gsCiAgICAgICAgX1NfWCwKICAgICAgICBfU19kaWdpdHMsCiAg
ICAgICAgX1NfZGlnaXRzX2VuZCA9IF9TX2RpZ2l0cyArIDE2LAogICAgICAgIF9TX3VkaWdpdHMg
PSBfU19kaWdpdHNfZW5kLAogICAgICAgIF9TX3VkaWdpdHNfZW5kID0gX1NfdWRpZ2l0cyArIDE2
LAogICAgICAgIF9TX2VlID0gX1NfZGlnaXRzICsgMTQsCiAgICAgICAgX1NfRWUgPSBfU191ZGln
aXRzICsgMTQKICAgICAgfTsKCgoKCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwoK
CgoKCiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwoKCgogICAgICBzdHJpbmdfdHlw
ZSBfTV90cnVlbmFtZTsKICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKCgogICAgICBi
b29sIF9NX3VzZV9ncm91cGluZzsKCgoKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwoKICAgICAg
X0Zvcm1hdF9jYWNoZSgpOwoKICAgICAgfl9Gb3JtYXRfY2FjaGUoKSB0aHJvdygpIHsgfQoKCgoK
ICAgICAgc3RhdGljIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioKICAgICAgX1NfZ2V0KGlvc19iYXNl
JiBfX2lvcyk7CgogICAgICB2b2lkCiAgICAgIF9NX3BvcHVsYXRlKGlvc19iYXNlJik7CgogICAg
ICBzdGF0aWMgdm9pZAogICAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldmVudCwg
aW9zX2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGludCBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX3B3b3JkX2l4
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBjaGFyIF9Gb3JtYXRfY2Fj
aGU8X0NoYXJUPjo6CiAgICBfU19saXRlcmFsc1tdID0gIi0reFgwMTIzNDU2Nzg5YWJjZGVmMDEy
MzQ1Njc4OUFCQ0RFRiI7CgogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9Gb3Jt
YXRfY2FjaGUoKTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19nZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsK
CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAg
IGZyaWVuZCBjbGFzcyBudW1fZ2V0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlw
ZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX2dldDsKICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3Mg
bW9uZXlfZ2V0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRl
clQ+CiAgICAgIGZyaWVuZCBjbGFzcyBudW1fcHV0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX3B1dDsKICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmll
bmQgY2xhc3MgbW9uZXlfcHV0OwoKICAgIHByaXZhdGU6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9O
dW1lcmljX2dldCgpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X051bWVyaWNfZ2V0KCkgeyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZ2V0X2RpZ2l0cyhpdGVyX3R5cGUgX19pbiwgaXRl
cl90eXBlIF9fZW5kKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNl
dAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9D
aGFyVD4gX190cmFpdHNfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg
ZXhwbGljaXQKICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0
KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0
ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVy
biBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv
bmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBf
X2VyciwgX192KTsgfQojIDU2MyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxl
X2ZhY2V0cy5oIiAzCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dl
dChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25z
dAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1
bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdik7IH0KIyA1ODUgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIw
MDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i
aXRzL2xvY2FsZV9mYWNldHMuaCIgMwogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlw
ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19n
ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QKICAg
ICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBk
b3VibGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
LCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p
biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbCB+bnVtX2dldCgpIHsgfQoKCgoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdChpdGVy
X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsCiAgICAgICAgICAg
ICAgICAgaW50JiBfX2Jhc2UsIGJvb2wgX19mcCA9IHRydWUpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGlvc19iYXNlOjppb3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFz
ZTo6aW9zdGF0ZSYsIHNob3J0JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYsIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0IChp
dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGxvbmcm
KSBjb25zdDsKCgoKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90
eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
CiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JikgY29uc3Q7CiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmLAogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQg
bG9uZyYpIGNvbnN0OwoKCgoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp
dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
CiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg
ICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwKICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsCiAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJikgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdm9p
ZComKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCgog
IHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRv
cjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3QoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2Jl
ZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciog
X194dHJjLAogICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwgYm9vbCBfX2ZwKSBjb25zdDsKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3Mg
X051bWVyaWNfcHV0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIGV4cGxpY2l0CiAgICAgIF9OdW1lcmljX3B1dCgpIHsgfQoKICAgICAgdmlydHVhbAogICAg
ICB+X051bWVyaWNfcHV0KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbnVtX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZh
Y2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
aWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2Ys
IF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9u
ZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp
OyB9CiMgNzI5ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLmgi
IDMKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19m
LCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19w
dXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChp
dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg
bG9uZyBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9f
ZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3Qgdm9pZCogX192
KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hh
cl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25n
IF9fdikgY29uc3Q7CgoKCgoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp
dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29u
c3Q7CgoKCgoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUs
IGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf
dHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws
IGNvbnN0IHZvaWQqIF9fdikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1
bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz
dHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAg
ICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNh
bmRzX3NlcDsKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwogICAgICBzdHJpbmdfdHlwZSBfTV90
cnVlbmFtZTsKICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoKICAg
ICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm
YWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9CgogICAgICBl
eHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9
IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5j
dChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAg
ICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBkb190aG91c2FuZHNfc2Vw
KCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IGRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29u
c3QKICAgICAgeyByZXR1cm4gZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAg
ICAgZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZmFsc2VuYW1lKCk7IH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCkgeyB9CgogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7
IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAg
ZG9fdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAg
dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVt
cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgbnVtcHVuY3Q8X0NoYXJUPjo6X01f
aW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlICkKICAgIHsKCiAgICB9CgogIHRlbXBsYXRl
PD4KICAgIHZvaWQKICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9f
Y19sb2NhbGUgX19jbG9jKTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
Y2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsKICAg
ICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9udW1wdW5jdDsKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0
IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihf
X3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVt
cHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9u
dW1wdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51
bXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9u
dW1wdW5jdCk7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBjb2xsYXRlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhw
bGljaXQKICAgICAgY29sbGF0ZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9f
cmVmcykgeyB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBj
b25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNv
bnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUo
X19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0
cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsgfQoKICAgICAgbG9u
ZwogICAgICBoYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9CgogIHByb3RlY3Rl
ZDoKICAgICAgfmNvbGxhdGUoKSB7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBh
cmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAg
ICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCog
X19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAg
ICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsK
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0
ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6
ZG9fY29tcGFyZShjb25zdCBjaGFyKiBfX2xvMSwgY29uc3QgY2hhciogX19oaTEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbG8yLCBjb25zdCBjaGFyKiBfX2hp
MikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIHN0cmluZwogICAgY29sbGF0ZTxjaGFyPjo6ZG9f
dHJhbnNmb3JtKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICB0
ZW1wbGF0ZTw+CiAgICBsb25nCiAgICBjb2xsYXRlPGNoYXI+Ojpkb19oYXNoKGNvbnN0IGNoYXIq
IF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwojIDk3MCAiL2hvbWU1L2tyYWtvdy9nbnUv
bG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1
ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAg
ICBjb2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHBy
b3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07
CgogIHRlbXBsYXRlPD4KICAgIGNvbGxhdGVfYnluYW1lPGNoYXI+Ojpjb2xsYXRlX2J5bmFtZShj
b25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CgoKCgoKICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAg
cHVibGljOgogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwgZG15LCBtZHksIHltZCwgeWRt
IH07CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgY2xhc3MgdGltZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldChzaXplX3QgX19yZWZzID0gMCkKICAgICAg
OiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpLCBfTV9kYXluYW1lcygwKSwgX01fbW9udGhuYW1lcygw
KSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUo
aXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGRvX2dldF90aW1lKF9fcywgX19lbmQsIF9fZiwgX19lcnIsIF9fdCk7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXRfZGF0ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2YsCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0q
IF9fdCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0X2RhdGUoX19zLCBfX2VuZCwgX19mLCBf
X2VyciwgX190KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlw
ZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBk
b19nZXRfd2Vla2RheShfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF9tb250aG5hbWUoX19zLF9fZW5k
LF9fZixfX2VycixfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3llYXIoaXRlcl90
eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv
X2dldF95ZWFyKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgdmlydHVhbAogICAgICB+dGltZV9nZXQoKQogICAgICB7CiAgICAgICAgZGVsZXRlIFtdIF9N
X21vbnRobmFtZXM7CiAgICAgICAgZGVsZXRlIFtdIF9NX2RheW5hbWVzOwogICAgICB9CgogICAg
ICB2aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGltZV9iYXNlOjp5bWQ7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv
X2dldF90aW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwKICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkgY29uc3QKICAgICAgeyByZXR1cm4g
X19zOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5
cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiAsIHRtKiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90
eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmLAogICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0q
IF9fdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfeWVhcihp
dGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAg
ICAgIG11dGFibGUgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9NX2RheW5hbWVzOwogICAgICBtdXRh
YmxlIGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9tb250aG5hbWVzOwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCB0aW1l
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVf
Z2V0PF9DaGFyVCwgX0luSXRlcj4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhw
bGljaXQKICAgICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0g
MCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNz
IHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsK
ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm
IF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg
ZXhwbGljaXQKICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNl
dCAoX19yZWZzKSB7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3Ms
IGlvc19iYXNlJiAsIGNoYXJfdHlwZSAsCiAgICAgICAgICBjb25zdCB0bSogLCBjb25zdCBfQ2hh
clQqICwKICAgICAgICAgIGNvbnN0IF9DaGFyVCogKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f
ZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHRtKiBfX3RtYiwgY2hhciBfX2Zv
cm1hdCwgY2hhciBfX21vZGlmaWVyID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9f
cywgX19mLCBfX2ZpbGwsIF9fdG1iLCBfX2Zvcm1hdCwgX19tb2RpZmllcik7IH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmLCBjaGFyX3R5
cGUsIGNvbnN0IHRtKiAsCiAgICAgICAgICAgICBjaGFyICwgY2hhciApIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Omlk
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xh
c3MgdGltZV9wdXRfYnluYW1lIDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAg
ICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dF9i
eW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfcHV0PF9D
aGFyVCwgX091dEl0ZXI+IChfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+dGltZV9wdXRfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGlj
IGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
aWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDog
bG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVy
X3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLAogICAgICAgICAgaW9zX2Jh
c2UmIF9fZiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykg
Y29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19mLCBfX2Vy
ciwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywg
aXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAg
ICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19mLCBfX2VyciwgX19kaWdp
dHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9nZXQoKSB7
IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBp
dGVyX3R5cGUgLCBib29sICwKICAgICAgICAgICAgIGlvc19iYXNlJiAsIGlvc19iYXNlOjppb3N0
YXRlJiAsCiAgICAgICAgICAgICBsb25nIGRvdWJsZSYgKSBjb25zdAogICAgICB7IHJldHVybiBf
X3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19z
LCBpdGVyX3R5cGUgLCBib29sICwKICAgICAgICAgICAgIGlvc19iYXNlJiAsIGlvc19iYXNlOjpp
b3N0YXRlJiAsCiAgICAgICAgICAgICBzdHJpbmdfdHlwZSYgKSBjb25zdAogICAgICB7IHJldHVy
biBfX3M7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbW9u
ZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfcHV0KHNpemVf
dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAg
ICAgICAgICBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAg
ICB7IHJldHVybiBkb19wdXQoX19zLCBfX2ludGwsIF9fZiwgX19maWxsLCBfX3VuaXRzKTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9z
X2Jhc2UmIF9fZiwKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBl
JiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2Ys
IF9fZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5tb25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp
dGVyX3R5cGUgX19zLCBib29sLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgICAg
bG9uZyBkb3VibGUgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sLCBpb3NfYmFzZSYgLCBj
aGFyX3R5cGUgLAogICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmICkgY29uc3QKICAgICAg
eyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46
OmlkOwoKICBzdHJ1Y3QgbW9uZXlfYmFzZQogIHsKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNl
LCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRb
NF07IH07CgogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgog
ICAgc3RhdGljIHBhdHRlcm4KICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWVk
cywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0
cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBz
dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVj
aW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIHN0cmlu
ZyBfTV9ncm91cGluZzsKICAgICAgc3RyaW5nX3R5cGUgX01fY3Vycl9zeW1ib2w7CiAgICAgIHN0
cmluZ190eXBlIF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIHN0cmluZ190eXBlIF9NX25lZ2F0aXZl
X3NpZ247CiAgICAgIGludCBfTV9mcmFjX2RpZ2l0czsKICAgICAgcGF0dGVybiBfTV9wb3NfZm9y
bWF0OwogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7CgogICAgcHVibGljOgogICAgICBleHBs
aWNpdAogICAgICBtb25leXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQo
X19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdCgpOyB9CgogICAgICBleHBs
aWNpdAogICAgICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0g
MCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVu
Y3QoX19jbG9jKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJf
dHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
dGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQog
ICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1cnJfc3lt
Ym9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2ZV9zaWduKCk7IH0KCiAgICAgIHN0cmluZ190
eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19u
ZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAogICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0KCiAgICAgIHBhdHRlcm4KICAg
ICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc19mb3JtYXQo
KTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs
CiAgICAgIH5tb25leXB1bmN0KCkgeyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBk
b19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsg
fQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5n
CiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0K
CiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlw
ZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zaXRp
dmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19uZWdhdGl2ZV9z
aWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVfc2lnbjsgfQoKICAgICAgdmly
dHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9m
cmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX3Bvc19mb3JtYXQo
KSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0OyB9CgogICAgICB2aXJ0dWFsIHBh
dHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ19m
b3JtYXQ7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nf
bG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46
OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBi
b29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50
bD46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlICkKICAgIHsKCiAgICB9Cgog
IHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVf
bW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMg
bW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9j
YWxlX21vbmV5cHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1v
bmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAg
IDogbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19j
cmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9p
bml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAg
ICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29s
IG1vbmV5cHVuY3RfYnluYW1lPF9DaGFyVCwgX0ludGw+OjppbnRsOwoKCiAgc3RydWN0IG1lc3Nh
Z2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQs
IHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdf
dHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAg
bWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoK
ICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBj
b25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJldHVybiBkb19vcGVuKF9fcywgX19s
b2MpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3Nl
dCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGRvX2dldChfX2MsX19zZXQsX19tc2dpZCxfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNs
b3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiBkb19jbG9zZShfX2MpOyB9Cgog
ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpIHsgfQoKCgogICAg
ICB2aXJ0dWFsIGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4m
LCBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgICB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFs
IHN0cmluZ190eXBlCiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCAsIGNvbnN0IHN0cmlu
Z190eXBlJiBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0KCiAgICAg
IHZpcnR1YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25zdCB7IH0KICAgIH07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJU
Pjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5
bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
PiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25z
dCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+bWVzc2FnZXNfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBt
ZXNzYWdlc19ieW5hbWU8Y2hhcj46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90
IF9fcmVmcyk7CiMgMTQ4OCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2Zh
Y2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg
IGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2Mp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3By
aW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29u
c3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxv
Y2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j
KS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUm
IF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMo
Y3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xv
YykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl
X2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFz
ZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7
IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjph
bG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1
cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgs
IF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAog
ICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMgMzcgIi9ob21lNS9rcmFrb3cvZ251
L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs
dWRlL2crKy9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQgewoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9z
IDogcHVibGljIGlvc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGlu
dF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAg
ICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hh
clQ+IF9fY3R5cGVfdHlwZTsKCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQ+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29z
dHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVD4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxf
Q2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwoKCiAgICBwcml2YXRlOgog
ICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAgICAgY2hhcl90
eXBlIF9NX2ZpbGw7CiAgICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKICAg
ICAgaW9zdGF0ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBl
KiBfTV9pb3NfZmN0eXBlOwoKICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01fZm51bXB1dDsK
CiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7CgogICAgcHVibGljOgoKICAg
ICAgaW5saW5lIGNvbnN0IF9fY3R5cGVfdHlwZSoKICAgICAgX01fZ2V0X2ZjdHlwZV9pb3Modm9p
ZCkKICAgICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZTsgfQoKICAgICAgaW5saW5lIGNvbnN0IF9f
bnVtZ2V0X3R5cGUqCiAgICAgIF9NX2dldF9mbnVtZ2V0KHZvaWQpCiAgICAgIHsgcmV0dXJuIF9N
X2ZudW1nZXQ7IH0KCiAgICAgIGlubGluZSBjb25zdCBfX251bXB1dF90eXBlKgogICAgICBfTV9n
ZXRfZm51bXB1dCh2b2lkKQogICAgICB7IHJldHVybiBfTV9mbnVtcHV0OyB9CgogICAgICBvcGVy
YXRvciB2b2lkKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25z
dF9jYXN0PGJhc2ljX2lvcyo+KHRoaXMpOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBvcGVy
YXRvciEoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0KCiAgICAgIGlubGlu
ZSBpb3N0YXRlCiAgICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1i
dWZfc3RhdGU7IH0KCiAgICAgIGlubGluZSB2b2lkCiAgICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0
ZSA9IGdvb2RiaXQpCiAgICAgIHsKICAgICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICAg
IF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7CiAgICAgICAgZWxzZQogICAgICAgICAgX01f
c3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgICBpZiAoKHRoaXMtPnJk
c3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlvbnMoKSkpCiAgICAgICAgICBfX3Rocm93X2lvc19mYWls
dXJlKCJiYXNpY19pb3M6OmNsZWFyKGlvc3RhdGUpIGNhdXNlZCBleGNlcHRpb24iKTsKICAgICAg
fQoKICAgICAgaW5saW5lIHZvaWQKICAgICAgc2V0c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQogICAg
ICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3RhdGUoKSB8IF9fc3RhdGUpOyB9CgogICAgICBpbmxp
bmUgYm9vbAogICAgICBnb29kKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgp
ID09IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGVvZigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBib29s
CiAgICAgIGZhaWwoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJh
ZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBiYWQoKSBj
b25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9Cgog
ICAgICBpbmxpbmUgaW9zdGF0ZQogICAgICBleGNlcHRpb25zKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fZXhjZXB0aW9uOyB9CgogICAgICBpbmxpbmUgdm9pZAogICAgICBleGNlcHRpb25zKGlv
c3RhdGUgX19leGNlcHQpCiAgICAgIHsKICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsK
ICAgICAgICB0aGlzLT5jbGVhcihfTV9zdHJlYW1idWZfc3RhdGUpOwogICAgICB9CgoKICAgICAg
ZXhwbGljaXQKICAgICAgYmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KiBfX3NiKSA6IGlvc19iYXNlKCkKICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2
aXJ0dWFsCiAgICAgIH5iYXNpY19pb3MoKSB7IH0KCgogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90
aWU7IH0KCiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAg
IHRpZShiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fdGllc3RyKQogICAgICB7CiAg
ICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3RpZTsKICAg
ICAgICBfTV90aWUgPSBfX3RpZXN0cjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCiAg
ICAgIGlubGluZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYo
KSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiogX19zYik7CgogICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3Qg
YmFzaWNfaW9zJiBfX3Jocyk7CgogICAgICBpbmxpbmUgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9maWxsOyB9CgogICAgICBpbmxpbmUgY2hhcl90eXBlCiAg
ICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpCiAgICAgIHsKICAgICAgICBjaGFyX3R5cGUgX19vbGQg
PSBfTV9maWxsOwogICAgICAgIF9NX2ZpbGwgPSBfX2NoOwogICAgICAgIHJldHVybiBfX29sZDsK
ICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsK
CiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNv
bnN0OwoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICBw
cm90ZWN0ZWQ6CgogICAgICBiYXNpY19pb3MoKSA6IGlvc19iYXNlKCkKICAgICAgeyB9CgogICAg
ICB2b2lkCiAgICAgIGluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2Ip
OwogICAgfTsKCn0KCgoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9iYXNpY19p
b3MudGNjIiAxIDMKIyAzMyAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9z
LnRjYyIgMwpuYW1lc3BhY2Ugc3RkIHsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICBi
YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4qIF9fc2IpCiAgICB7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+KiBfX29sZCA9IF9NX3N0cmVhbWJ1ZjsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAg
ICAgdGhpcy0+Y2xlYXIoKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pb3M8X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0IGJh
c2ljX2lvcyYgX19yaHMpCiAgICB7CgoKCgogICAgICBfV29yZHMqIF9fd29yZHMgPSAoX19yaHMu
X01fd29yZF9saW1pdCA8PSBfU19sb2NhbF93b3JkcykgPwogICAgICAgIF9NX3dvcmRfYXJyYXkg
OiBuZXcgX1dvcmRzW19fcmhzLl9NX3dvcmRfbGltaXRdOwojIDYzICIvaG9tZTUva3Jha293L2du
dS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j
bHVkZS9nKysvYml0cy9iYXNpY19pb3MudGNjIiAzCiAgICAgIF9DYWxsYmFja19saXN0KiBfX2Ni
ID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBpZiAoX19jYikKICAgICAgICBfX2NiLT5fTV9h
ZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsKICAg
ICAgaWYgKF9NX3dvcmRzICE9IF9NX3dvcmRfYXJyYXkpCiAgICAgICAgZGVsZXRlIFtdIF9NX3dv
cmRzOwogICAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcygpOwoKICAgICAgX01fY2FsbGJhY2tzID0g
X19jYjsKICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19yaHMuX01fd29yZF9saW1pdDsg
KytfX2kpCiAgICAgICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZHNbX19pXTsKICAgICAg
aWYgKF9NX3dvcmRzICE9IF9NX3dvcmRfYXJyYXkpCiAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmRz
OwogICAgICBfTV93b3JkcyA9IF9fd29yZHM7CiAgICAgIF9NX3dvcmRfbGltaXQgPSBfX3Jocy5f
TV93b3JkX2xpbWl0OwoKICAgICAgdGhpcy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRo
aXMtPndpZHRoKF9fcmhzLndpZHRoKCkpOwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJl
Y2lzaW9uKCkpOwogICAgICB0aGlzLT50aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxs
KF9fcmhzLmZpbGwoKSk7CgogICAgICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMo
KSk7CgogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBjaGFyCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJf
dHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICB7IHJldHVybiBfTV9pb3NfZmN0eXBl
LT5uYXJyb3coX19jLCBfX2RmYXVsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz
Pjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICB7IHJldHVybiBfTV9pb3NfZmN0eXBlLT53aWRl
bihfX2MpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1ZShjb25zdCBs
b2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+Z2V0bG9jKCkpOwog
ICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9pb3NfZmN0eXBlID0gJnVzZV9m
YWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgX01fZm51bXB1dCA9ICZ1c2VfZmFjZXQ8
X19udW1wdXRfdHlwZT4oX19sb2MpOwogICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251
bWdldF90eXBlPihfX2xvYyk7CiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAg
dGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19sb2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQK
ICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX3NiKQogICAgewoKICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAg
ICAgX01faW9zX2ZjdHlwZSA9ICZ1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfTV9pb3NfbG9jYWxl
KTsKCiAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9NX2lvc19s
b2NhbGUpOwogICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251bWdldF90eXBlPihfTV9p
b3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsKICAgICAgX01fZmlsbCA9IHRoaXMtPndpZGVu
KCcgJyk7CiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9
IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0
OwogICAgfQoKfQojIDIxMiAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9z
LmgiIDIgMwojIDQ3ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDIg
MwojIDQwICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfb3N0cmVhbS5oIiAyIDMK
Cm5hbWVzcGFjZSBzdGQgewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lv
czxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGlu
dF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAg
ICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9z
dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRl
ZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAg
IHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAg
ICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7IHRoaXMtPmlu
aXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKQogICAgICB7
IF9NX2ZudW1wdXQgPSBfX251bGw7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVu
ZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBl
JikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgq
X19wZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVu
c2lnbmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0
IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZs
YWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNl
OjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9w
ZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAg
IGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+
KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1
bnNpZ25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
X19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAo
X19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAg
IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihf
X24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3Rh
dGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJh
dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KIyAxMzYgIi9ob21lNS9r
cmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44
LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9vc3RyZWFtLmgiIDMKICAgICAgX19vc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I8PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9y
PDwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgcHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUm
CiAgICAgIHdyaXRlKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0
ZWxscCgpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAg
ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtk
aXIpOwoKICAgIHByaXZhdGU6CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
PShjb25zdCBfX29zdHJlYW1fdHlwZSYpOwoKICAgICAgYmFzaWNfb3N0cmVhbShjb25zdCBfX29z
dHJlYW1fdHlwZSYpOwoKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpz
ZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRy
eShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkK
ICAgICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYm
ICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9v
cy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAg
ICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoK
ICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNo
YXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFy
IF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2Fz
dDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8
IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qg
X0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoK
CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj
b25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9f
b3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRl
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChf
X29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVy
biBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1
c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19v
cy5mbHVzaCgpOyB9Cgp9CiMgNDEgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9p
b3N0cmVhbS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaXN0
cmVhbS5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lzdHJl
YW0uaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDEg
MwojIDQwICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMK
IyAxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9z
dGRfbGltaXRzLmgiIDEgMwojIDQ1ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMyMC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvYml0cy9zdGRfbGltaXRzLmgiIDMKIyAxICIvaG9tZTUva3Jha293L2dudS9s
b2NhbC4yMDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk
ZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDYgIi9o
b21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL3N0ZF9saW1p
dHMuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NmbG9hdC5o
IiAxIDMKIyA0MCAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NmbG9hdC5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9mbG9h
dC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWZsb2F0LmgJMS4xOAk5OS8wNS8wNCBTTUkiCgoK
ZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIGludCBfX2ZsdF9yb3VuZHModm9pZCk7CiMgOTcgIi91
c3IvaW5jbHVkZS9mbG9hdC5oIiAzIDQKfQojIDQxICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4y
MDAxMDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGRfY2Zsb2F0LmgiIDIgMwojIDQ3ICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAx
MDMyMC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvYml0cy9zdGRfbGltaXRzLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7
CgogICAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZSB7CiAgICAgICAgcm91bmRfaW5kZXRlcm1pbmF0
ZSA9IC0xLAogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgICAgICByb3VuZF90b19u
ZWFyZXN0ID0gMSwKICAgICAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLAogICAgICAgIHJv
dW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAzCiAgICB9OwoKICAgIGVudW0gZmxvYXRfZGVub3Jt
X3N0eWxlIHsKICAgICAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgICAgIGRlbm9y
bV9hYnNlbnQgPSAwLAogICAgICAgIGRlbm9ybV9wcmVzZW50ID0gMQogICAgfTsKCiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBudW1lcmljX2xpbWl0cyB7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIF9UcCBt
aW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBzdGF0
aWMgX1RwIG1heCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCByYWRpeCA9IDA7CgogICAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJy
b3IoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIF9UcCBp
bmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAg
IHN0YXRpYyBfVHAgcXVpZXRfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+
KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBkZW5vcm1fbWluKCkg
dGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2JvdW5kZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBm
YWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK
ICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfaW5maW5pdHko
KTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX3F1aWV0X05hTigpOwog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfc2lnbmFsaW5nX05hTigpOwog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfZGVub3JtX21pbigpOwoKICAg
IHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGJvb2w+IHsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBib29sIG1p
bigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICAgIHN0YXRpYyBib29s
IG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g
MjsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
CiAgICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAw
OyB9CiAgICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f
YWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl
OwoKICAgICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxib29sPigwKTsgfQogICAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQogICAgICAg
IHN0YXRpYyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Ym9vbD4oMCk7IH0KICAgICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CgogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv
ID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyPiB7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBz
dGF0aWMgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0xMjgpOyB9CiAgICAg
ICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQoKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBjaGFy
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigw
KTsgfQogICAgICAgIHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgY2hhciBkZW5v
cm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9
CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91
bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGlt
aXRzPHNpZ25lZCBjaGFyPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuICgtMTI4KTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgoKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBz
dGF0aWMgc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9
CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu
aXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm
YWxzZTsKCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRp
YyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNo
YXI+KDApOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CgogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk
X3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGNoYXI+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIDI1NTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
IDg7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt
X2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxz
ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0
aWMgdW5zaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hh
ciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3JtX21p
bigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigw
KTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNf
bGltaXRzPHNob3J0PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQg
PSB0cnVlOwoKICAgICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuICgtMzI3NjctMSk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIDMyNzY3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
MTU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy
dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHNo
b3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRp
YyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7
CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRp
YyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxz
aG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyBzaG9y
dCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNo
b3J0PigwKTsgfQogICAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i
b3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxz
ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg
fTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD4g
ewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAw
OyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgICB7
IHJldHVybiA2NTUzNTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2Owog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAg
c3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi
c2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsK
CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNo
b3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbm9y
bV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVt
ZXJpY19saW1pdHM8aW50PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiAoLTIxNDc0ODM2NDctMSk7IH0KICAgICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gMzE7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19l
eGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAg
c3RhdGljIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAg
ICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0K
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw
ID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAg
c3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KDApOyB9CiAgICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgc2ln
bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDAp
OyB9CiAgICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1w
bGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAoMjE0NzQ4MzY0
NyAqIDJVICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7
IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmFsaW5nX05h
TigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDAp
OyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87
CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmc+IHsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0
YXRpYyBsb25nIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdMLTEp
OyB9CiAgICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDIx
NDc0ODM2NDdMOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy
ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGxvbmcgZXBzaWxv
bigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGxvbmcgcm91
bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu
b3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgbG9uZyBpbmZp
bml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQog
ICAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGluZ19OYU4o
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAg
ICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmc+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4gewogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5z
aWduZWQgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKDIxNDc0ODM2NDdMICog
MlVMICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy
ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsg
fQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
Zz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CgogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2Fy
ZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxmbG9h
dD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAg
ICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjE3NTQ5
NDM1MUUtMzhGOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAzLjQwMjgyMzQ2NkUrMzhGOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzID0gMjQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDc7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
Y3QgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBz
dGF0aWMgZmxvYXQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjE5MjA5Mjg5
NkUtMDdGOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIDEuMGY7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQgPSAtMTI1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzc7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu
Z19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh
c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgZmxvYXQgaW5maW5pdHkoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CiAgICAgICAgc3Rh
dGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgc2lnbmFsaW5nX05hTigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0
aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGRvdWJsZSBtaW4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0RS0zMDg7IH0KICAgICAgICBzdGF0
aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjc5NzY5MzEzNDg2MjMx
NTdFKzMwODsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIg
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBkb3VibGUgZXBz
aWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFFLTE2OyB9
CiAgICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiAxLjA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAy
MTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTMwNzsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFO
ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9CiAgICAgICAgc3RhdGlj
IGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9CiAgICAgICAgc3Rh
dGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGRvdWJsZT4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl
IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4g
c3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPiB7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUg
bWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2MjYyNjc3
ODE3MzIxNzUyNjAzRS00OTMyTDsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwODU3NTkzMjY2Mjgw
MDcwMTZFKzQ5MzJMOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTEzOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAzNDsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBsb25n
IGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuOTI1OTI5OTQ0Mzg3
MjM1ODUzMDU1OTc3OTQyNTg0OTI3MzE5RS0zNEw7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3Vi
bGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4wTDsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTQ5MzE7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQgPSAxNjM4NDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudDEwID0gNDkzMjsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi
c2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsK
CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25n
IGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
bG9uZyBkb3VibGU+KDApOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19O
YU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDAp
OyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9CgogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9
IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKCn0KIyA0MSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lzdHJl
YW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1Ymxp
YyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpp
bnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlw
ZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZf
dHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg
dHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19pc3RyZWFtYnVmX2l0ZXI7CiAg
ICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90
eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3Rl
Y3RlZDoKCiAgICAgIHN0cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAg
ewogICAgICAgIHRoaXMtPmluaXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6
ZSgwKTsKICAgICAgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAg
IHsKICAgICAgICBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOwogICAgICAgIF9NX2ZudW1nZXQg
PSBfX251bGw7CiAgICAgIH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFz
cyBzZW50cnk7CgoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faXN0
cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZiko
aW9zX2Jhc2UmKSk7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9v
bCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0JiBf
X24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hv
cnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQmIF9f
bik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQm
IF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24p
OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYg
X19uKTsKIyAxMzAgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pc3RyZWFtLmgi
IDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fZik7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19mKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoKICAgICAg
X19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7
CgoKICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9NX2djb3VudDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZvaWQpOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwg
Y2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBn
ZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiBnZXQoX19z
LCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBp
bmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQog
ICAgICB7IHJldHVybiBnZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24s
IGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAg
Z2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIGdl
dGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0
cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lkKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFjayhjaGFy
X3R5cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lkKTsKCiAg
ICAgIGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbGcodm9p
ZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoKICAgICAg
X19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7
CgogICAgcHJpdmF0ZToKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I9KGNv
bnN0IF9faXN0cmVhbV90eXBlJik7CgogICAgICBiYXNpY19pc3RyZWFtKGNvbnN0IF9faXN0cmVh
bV90eXBlJik7CgogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkK
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl
YW1fdHlwZTsKICAgICAgdHlwZWRlZiBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5
cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90
eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdzID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3Ig
Ym9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsK
ICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxj
bGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYg
X19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7
IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4s
IHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0
PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+
KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0
ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVk
IGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNo
YXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYg
X19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKICAgICAgZXhwbGljaXQK
ICAgICAgYmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f
c2IpCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpCiAg
ICAgIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KICAgIH07
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9faXMpOwoKfQojIDQyICIvaG9tZTUva3Jha293L2dudS9sb2NhbC4yMDAxMDMy
MC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGRfaW9zdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICBleHRlcm4gaXN0cmVhbSBjaW47
CiAgZXh0ZXJuIG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0cmVhbSBjZXJyOwogIGV4dGVybiBv
c3RyZWFtIGNsb2c7CiMgNTcgIi9ob21lNS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pb3N0
cmVhbS5oIiAzCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9CiMgMzIgIi9ob21l
NS9rcmFrb3cvZ251L2xvY2FsLjIwMDEwMzIwL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMC9pbmNsdWRlL2crKy9pb3N0cmVhbS5oIiAyIDMKCnVzaW5nIHN0ZDo6aW9zdHJlYW07
CnVzaW5nIHN0ZDo6b3N0cmVhbTsKdXNpbmcgc3RkOjppc3RyZWFtOwp1c2luZyBzdGQ6OmlvczsK
dXNpbmcgc3RkOjpzdHJlYW1idWY7Cgp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6Y2luOwp1
c2luZyBzdGQ6OmNlcnI7CnVzaW5nIHN0ZDo6Y2xvZzsKCgoKCgoKCnVzaW5nIHN0ZDo6d3M7CnVz
aW5nIHN0ZDo6ZW5kbDsKdXNpbmcgc3RkOjplbmRzOwp1c2luZyBzdGQ6OmZsdXNoOwojIDEwICJB
MDQzOTU4OS5DIiAyCiMgMSAiL2hvbWU1L2tyYWtvdy9nbnUvbG9jYWwuMjAwMTAzMjAvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMg
MTEgIkEwNDM5NTg5LkMiIDIKCgoKaW50IGJpcmdpdDsKCgoKCgogbmFtZXNwYWNlIFNQQUNFMSB7
CiAgICAgIG5hbWVzcGFjZSBWQVJJMSB7CiAgICAgICAgICAgICAgICBpbnQgdmFyXzE7CiAgICAg
ICAgICAgbmFtZXNwYWNlIFZBUkkyIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHZhcl8yOwog
ICAgICAgICAgICAgICAgbmFtZXNwYWNlIFZBUkkzIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgdmFyXzM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjaGFyXzNbMjBdOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiBuYW1lc3BhY2UgYWxpMCA9IFZBUkkz
OwogICAgICAgICAgICAgICAgbmFtZXNwYWNlIFZBUklOIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgdmFyX247CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjaGFyX25bMjBd
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiBuYW1lc3BhY2UgYWxpMSA9IFZB
UklOOwogbmFtZXNwYWNlIGFsaTIgPSBWQVJJTjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
fTsKICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIH07CiBuYW1lc3Bh
Y2UgcXVhbGkwID0gU1BBQ0UxOjpWQVJJMTo6VkFSSTI6OlZBUkkzOwogbmFtZXNwYWNlIHF1YWxp
MSA9IFNQQUNFMTo6VkFSSTE6OlZBUkkyOjpWQVJJTjsKCgoKIG5hbWVzcGFjZSBTUEFDRTIgewog
ICAgICB1c2luZyBuYW1lc3BhY2UgU1BBQ0UxOwogICAgICBpbnQgdmFyX3NwMjsKICAgICAgY2hh
ciBjaGFyX3NwMlsyMF07CiAgICAgICAgICAgICAgICAgIH07CiBuYW1lc3BhY2UgYWxpMyA9IFNQ
QUNFMjsKIG5hbWVzcGFjZSBhbGk0ID0gU1BBQ0UyOwogbmFtZXNwYWNlIGFsaTUgPSBTUEFDRTI7
CiBuYW1lc3BhY2UgYWxpNiA9IFNQQUNFMjsKCgoKIG5hbWVzcGFjZSB7CiAgICAgaW50IHZhcl9z
cHU7CiAgICAgIGNoYXIgY2hhcl9zcHVbMjBdOwogICAgICAgICAgICAgIH07CgoKCmludCB2YXJf
MSwgdmFyXzIsIHZhcl8zOwoKCgoKbmFtZXNwYWNlIE0gewpjbGFzcyBtYW5uOwogICAgICAgICAg
ICB9OwpuYW1lc3BhY2UgYWxpNyA9IE07Cm5hbWVzcGFjZSBGIHsKdXNpbmcgbmFtZXNwYWNlIGFs
aTc7CmNsYXNzIGZyYXUKewogcHJpdmF0ZToKICBjaGFyIHZuYW1lWzEwXTsKICBjaGFyIG5uYW1l
WzEwXTsKICBjaGFyIGhvYmJ5WzIwXTsKIHB1YmxpYzoKICBkb3VibGUgZ2VoYWx0OwogIGZyYXUo
dm9pZCk7CiAgZnJhdShjaGFyICogZm4sIGNoYXIgKiBsbiwgY2hhciAqIHJuZz0iIiwgZG91Ymxl
IGluYyA9IDApOwogIH5mcmF1KHZvaWQpOwogIHZvaWQgemVpZ2VfZnJhdSgpOwp9OwoKIH0KbmFt
ZXNwYWNlIGFsaTggPSBGOwpuYW1lc3BhY2UgTSB7CnVzaW5nIG5hbWVzcGFjZSBhbGk4OwpjbGFz
cyBtYW5uCnsKIHByaXZhdGU6CiAgY2hhciB2bmFtZVsxMF07CiAgY2hhciBubmFtZVsxMF07CiAg
Y2hhciBzcG9ydFsyMF07CiBwdWJsaWM6CiAgZG91YmxlIGdlaGFsdDsKICBtYW5uKHZvaWQpOwog
IG1hbm4oY2hhciAqIGZuLCBjaGFyICogbG4sIGNoYXIgKiBybmc9IiIsIGRvdWJsZSBpbmMgPSAw
KTsKICB+bWFubih2b2lkKTsKICB2b2lkIHplaWdlX21hbm4oKTsKfTsKIH0KbmFtZXNwYWNlIGFs
aTkgPSBNOwoKdXNpbmcgbmFtZXNwYWNlIEY7CnVzaW5nIG5hbWVzcGFjZSBNOwoKZnJhdTo6ZnJh
dSgpCnsKfQoKZnJhdTo6ZnJhdShjaGFyICogZm4sIGNoYXIgKiBsbiwgY2hhciAqIHJuZywgZG91
YmxlIGluYykKewogc3RyY3B5KHZuYW1lLCBmbik7CiBzdHJjcHkobm5hbWUsIGxuKTsKIHN0cmNw
eShob2JieSwgcm5nKTsKIGdlaGFsdCA9IGluYzsKfQoKZnJhdTo6fmZyYXUodm9pZCkKewp9Cgp2
b2lkIGZyYXU6OnplaWdlX2ZyYXUoKQp7CiBjb3V0IDw8ICIqKiBGcmF1ICIgPDwgdm5hbWUgPDwg
IiAiIDw8IG5uYW1lIDw8ICIgbWl0IEhvYmJ5ICIgPDwgaG9iYnk7CiBjb3V0IDw8ICIgdmVyZGll
bnQgRE0gIiA8PCBnZWhhbHQgPDwgIiBwcm8gSmFoclxuIjsKfQoKCm1hbm46Om1hbm4oKQp7Cn0K
Cm1hbm46Om1hbm4oY2hhciAqIGZuLCBjaGFyICogbG4sIGNoYXIgKiBybmcsIGRvdWJsZSBpbmMp
CnsKIHN0cmNweSh2bmFtZSwgZm4pOwogc3RyY3B5KG5uYW1lLCBsbik7CiBzdHJjcHkoc3BvcnQs
IHJuZyk7CiBnZWhhbHQgPSBpbmM7Cn0KCm1hbm46On5tYW5uKHZvaWQpCnsKfQoKdm9pZCBtYW5u
Ojp6ZWlnZV9tYW5uKCkKewogY291dCA8PCAiKiogTWFubiAiIDw8IHZuYW1lIDw8ICIgIiA8PCBu
bmFtZSA8PCAiIG1pdCBTcG9ydCAiIDw8IHNwb3J0OwogY291dCA8PCAiIHZlcmRpZW50IERNICIg
PDwgZ2VoYWx0IDw8ICIgcHJvIEphaHJcbiI7Cn0KCmRvdWJsZSBnZXNhbXRfZ2VoYWx0KGNvbnN0
IGZyYXUgJiBkMSwgY29uc3QgbWFubiAmIGQyKQp7CiByZXR1cm4gZDEuZ2VoYWx0ICsgZDIuZ2Vo
YWx0Owp9CgogZnJhdSBlaGVmcmF1KCJTdXNpIiwgIk1haWVyIiwgIktvZWNoaW4iLCA1Njc4OS4w
KTsKIG1hbm4gZWhlbWFubigiUGF1bCIsICJNYWllciIsICJUYXVjaGVyIiwgNDMyMTEuMCk7Cgog
dm9pZCBmdW5rdGlvbl9vdHRvKHZvaWQpOwoKCgoKCmludCBtYWluKCkKewoKCgogOjp2YXJfMSA9
IDEwOyA6OnZhcl8yID0gMjA7IDo6dmFyXzMgPSAzMDsKCgoKIGludCB2YXJfMTsKIHZhcl8xID0g
MTsKIGludCB2YXJfMjsKIHZhcl8yID0gdmFyXzE7CiB2YXJfMisrOwogaW50IHZhcl8zOwogdmFy
XzMgPSB2YXJfMSArIHZhcl8yOwogY291dCA8PCAiIyMjICAgIGxva2FsZSBWYXJpYWJsZW4gICAg
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIiA8PCAiXG4iOwogY291dCA8PCAidmFyXzE6ICAgICAgICAg
ICIgPDwgdmFyXzEgPDwgIlxuIjsKIGNvdXQgPDwgInZhcl8yOiAgICAgICAgICAiIDw8IHZhcl8y
IDw8ICJcbiI7CiBjb3V0IDw8ICJ2YXJfMzogICAgICAgICAgIiA8PCB2YXJfMyA8PCAiXG4iOwog
Y291dCA8PCAiIyMjICAgIGdsb2JhbGUgVmFyaWFibGVuICAgICMjIyMjIyMjIyMjIyMjIyMjIyMj
IiA8PCAiXG4iOwogY291dCA8PCAiOjp2YXJfMTogICAgICAgICIgPDwgOjp2YXJfMSA8PCAiXG4i
OwogY291dCA8PCAiOjp2YXJfMjogICAgICAgICIgPDwgOjp2YXJfMiA8PCAiXG4iOwogY291dCA8
PCAiOjp2YXJfMzogICAgICAgICIgPDwgOjp2YXJfMyA8PCAiXG4iOwoKCgoKCiBTUEFDRTE6OlZB
UkkxOjpWQVJJMjo6VkFSSU46OnZhcl9uID0gOTk5OwogY291dCA8PCAiIyMjICAgIFNQQUNFMTo6
VkFSSTE6OlZBUkkyOjpWQVJJTjo6dmFyX24gICAgIyMjIiA8PCAiXG4iOwogY291dCA8PCAiQUxJ
QVMtYWxpMTogICAgICI7CiBjb3V0IDw8IFNQQUNFMTo6VkFSSTE6OlZBUkkyOjphbGkxOjp2YXJf
biA8PCAiXG4iOwogcXVhbGkxOjp2YXJfbiA9IDEyMzsKIGNvdXQgPDwgIkFMSUFTLXF1YWxpMTog
ICAiIDw8IHF1YWxpMTo6dmFyX24gPDwgIlxuIjsKIHVzaW5nIG5hbWVzcGFjZSBTUEFDRTE6OlZB
UkkxOjpWQVJJMjo6YWxpMjsKIHZhcl9uID0gMzIxOwogbWVtY3B5KGNoYXJfbiwiTkFNRVNQQUNF
IFZBUklOICIsc2l6ZW9mKGNoYXJfbikpOwogY291dCA8PCAiICAgICAgIG5hY2ggdXNpbmcgbWl0
IEFMSUFTLWFsaTIgIiA8PCAiXG4iOwogY291dCA8PCAidmFyX246ICAgICAgICAgICIgPDwgdmFy
X24gPDwgIlxuIjsKIGNvdXQgPDwgImNoYXJfbjogICAgICAgICAiIDw8IGNoYXJfbiA8PCAiXG4i
OwoKCgogY291dCA8PCAiIyMjICAgIFNQQUNFMTo6VkFSSTE6OlZBUkkyOjpWQVJJMzo6Y2hhcl9u
ICAgIyMjIiA8PCAiXG4iOwogdXNpbmcgU1BBQ0UxOjpWQVJJMTo6VkFSSTI6OmFsaTA6OmNoYXJf
MzsKIG1lbWNweShjaGFyXzMsIk5BTUVTUEFDRSBWQVJJMyAiLHNpemVvZihjaGFyXzMpKTsKIGNv
dXQgPDwgIiAgICAgICBuYWNoIHVzaW5nIG1pdCBBTElBUy1hbGkwICIgPDwgIlxuIjsKIGNvdXQg
PDwgImNoYXJfMzogICAgICAgICAiIDw8IGNoYXJfMyA8PCAiXG4iOwogY291dCA8PCAiQUxJQVMt
cXVhbGkwOiAgICIgPDwgcXVhbGkwOjpjaGFyXzMgPDwgIlxuIjsKCgoKIGFsaTU6OnZhcl9zcDIg
PSAyMjI7CiBjb3V0IDw8ICIjIyMgICAgU1BBQ0UyOjp2YXJfc3AyICBhdWNoIG1pdCBBTElBUyAg
ICAgICAjIyMiIDw8ICJcbiI7CiBjb3V0IDw8ICJTUEFDRTI6OnZhcl9zcDI6IiA8PCBTUEFDRTI6
OnZhcl9zcDIgPDwgIlxuIjsKIGNvdXQgPDwgImFsaTM6OnZhcl9zcDI6ICAiIDw8IGFsaTM6OnZh
cl9zcDIgPDwgIlxuIjsKIGNvdXQgPDwgImFsaTQ6OnZhcl9zcDI6ICAiIDw8IGFsaTQ6OnZhcl9z
cDIgPDwgIlxuIjsKIGNvdXQgPDwgImFsaTU6OnZhcl9zcDI6ICAiIDw8IGFsaTU6OnZhcl9zcDIg
PDwgIlxuIjsKIGNvdXQgPDwgImFsaTY6OnZhcl9zcDI6ICAiIDw8IGFsaTY6OnZhcl9zcDIgPDwg
IlxuIjsKIG1lbWNweShhbGk0OjpjaGFyX3NwMiwiTkFNRVNQQUNFIFNQQUNFMiAiLHNpemVvZihh
bGk2OjpjaGFyX3NwMikpOwogY291dCA8PCAiIyMjICAgIFNQQUNFMjo6Y2hhcl9zcDIgIGF1Y2gg
bWl0IEFMSUFTICAgICAgIyMjIiA8PCAiXG4iOwogY291dCA8PCAiU1BBQ0UyOjpjaGFyX3NwMjog
IiA8PCBTUEFDRTI6OmNoYXJfc3AyIDw8ICJcbiI7CiBjb3V0IDw8ICJhbGkzOjpjaGFyX3NwMjog
IiA8PCBhbGkzOjpjaGFyX3NwMiA8PCAiXG4iOwogY291dCA8PCAiYWxpNDo6Y2hhcl9zcDI6ICIg
PDwgYWxpNDo6Y2hhcl9zcDIgPDwgIlxuIjsKIGNvdXQgPDwgImFsaTU6OmNoYXJfc3AyOiAiIDw8
IGFsaTU6OmNoYXJfc3AyIDw8ICJcbiI7CiBjb3V0IDw8ICJhbGk2OjpjaGFyX3NwMjogIiA8PCBh
bGk2OjpjaGFyX3NwMiA8PCAiXG4iOwoKCgogY291dCA8PCAiIyMjICAgIEF1c2dhYmUgYWxsZXIg
dmFyXzMgICAgICAgICAgICAgICAgICAgIyMjIiA8PCAiXG4iOwogY291dCA8PCAidmFyXzM6ICAg
ICAgICAgICIgPDwgdmFyXzMgPDwgIlxuIjsKIGNvdXQgPDwgIjo6dmFyXzM6ICAgICAgICAiIDw8
IDo6dmFyXzMgPDwgIlxuIjsKIFNQQUNFMTo6VkFSSTE6OlZBUkkyOjpWQVJJMzo6dmFyXzMgPSAz
MzM7CiBjb3V0IDw8ICJhdXMgU1BBQ0UxOiAgICAgIjsKIGNvdXQgPDwgU1BBQ0UxOjpWQVJJMTo6
VkFSSTI6OlZBUkkzOjp2YXJfMyA8PCAiXG4iOwoKCgogdmFyX3NwdSA9IDk5OTsKIG1lbWNweShj
aGFyX3NwdSwiTkFNRVNQQUNFIFVOTkFNRUQgIixzaXplb2YoY2hhcl9zcHUpKTsKIGNvdXQgPDwg
IiMjIyAgICBBdXMgdW5iZW5hbm50ZW0gTmFtZXNwYWNlICAgICAgICAgICAgICMjIyIgPDwgIlxu
IjsKIGNvdXQgPDwgInZhcl9zcHU6ICAgICAgICAiIDw8IHZhcl9zcHUgPDwgIlxuIjsKIGNvdXQg
PDwgImNoYXJfc3B1OiAgICAgICAiIDw8IGNoYXJfc3B1IDw8ICJcbiI7CgoKCiBjb3V0IDw8ICIj
IyMgICAgS2xhc3NlbiBpbiBOYW1lc3BhY2VzIChmdW5rdC4gb3R0bykgICAjIyMiIDw8ICJcbiI7
CiBmdW5rdGlvbl9vdHRvKCk7CiByZXR1cm4gMDsKfQoKCgoKdm9pZCBmdW5rdGlvbl9vdHRvKCkK
ewogY291dCA8PCAiKiogaW4gZnVua3Rpb25fb3R0byAgICAgIiA8PCAiXG4iOwogdXNpbmcgbmFt
ZXNwYWNlIGFsaTk7CiBlaGVmcmF1LnplaWdlX2ZyYXUoKTsKIGVoZW1hbm4uemVpZ2VfbWFubigp
OwoKIGNvdXQgPDwgIioqIEdlc2FtdGdlaGFsdDogIjsKIGNvdXQgPDwgZ2VzYW10X2dlaGFsdChl
aGVmcmF1LGVoZW1hbm4pIDw8ICIgRE0iIDw8ICJcbiI7Cn0K


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

end of thread, other threads:[~2001-08-11 11:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-08-11 11:46 c++/2455: 'g++ A0439589.C' results in Internal error (core) in cc1plus gdr
  -- strict thread matches above, loose matches on Subject: below --
2001-04-02  1:36 Andreas.Krakowczyk

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