public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/9120: iostream 'forgotten' if included after template definition
@ 2003-01-02  0:56 stefaandr
  0 siblings, 0 replies; only message in thread
From: stefaandr @ 2003-01-02  0:56 UTC (permalink / raw)
  To: gcc-gnats


>Number:         9120
>Category:       c++
>Synopsis:       iostream 'forgotten' if included after template definition
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Jan 01 16:56:00 PST 2003
>Closed-Date:
>Last-Modified:
>Originator:     stefaandr@hotmail.com
>Release:        gcc version 3.4 20030101 (experimental)
>Organization:
>Environment:
i386-redhat-linux, redhat 8.0 3.2-7
>Description:
In the code below, <iostream> is included after the template definition, the output of the program is... nothing. When iostream is included on top, then the output is correct.

template <class T>
class p {
        public:
                static void a() {
                        std::cerr << "Hello world!!!" << std::endl;
                };
};

#include <iostream>

int main() {
        p <int>::a();
};
>How-To-Repeat:

>Fix:

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

IyAxICJ0ZXN0My5jcHAiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAx
ICJ0ZXN0My5jcHAiCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBwIHsKICAgICAgICBwdWJsaWM6
CiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBhKCkgewogICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OmNlcnIgPDwgIkhlbGxvIHdvcmxkISEhIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAg
ICAgICB9Owp9OwoKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2lvc3RyZWFtIiAxIDMK
IyA0MyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pb3N0cmVhbSIgMwoKIyAxICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEg
MwojIDM0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMv
YysrY29uZmlnLmgiIDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzOSAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAxIDMgNAojIDI5MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzIDQKIyAyOTIgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAyIDMgNAojIDMyMCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMgNAoj
IDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzIDQKIyAzMjEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAyIDMgNAojIDQwICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMt
bGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAyIDMKIyAzNSAiL3RtcC9pbnN0L2luY2x1ZGUv
YysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA0NSAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pb3N0cmVhbSIgMiAzCiMgMSAiL3RtcC9pbnN0L2luY2x1
ZGUvYysrLzMuNC9vc3RyZWFtIiAxIDMKIyA0NCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9v
c3RyZWFtIiAzCgojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaW9zIiAxIDMKIyA0MyAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pb3MiIDMKCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUv
YysrLzMuNC9pb3Nmd2QiIDEgMwojIDQzICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2lvc2Z3
ZCIgMwoKCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0cmluZ2Z3ZC5oIiAx
IDMKIyA0MyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0cmluZ2Z3ZC5oIiAzCgoK
Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFs
bG9jYXRvcjsKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRz
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZzsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90
cmFpdHM8Y2hhcj47CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmluZzsKCgogIHRl
bXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKICB0eXBlZGVmIGJhc2ljX3N0
cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQojIDQ2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40
L2lvc2Z3ZCIgMiAzCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2Zwb3MuaCIg
MSAzCiMgNDMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9mcG9zLmgiIDMKCiMgMSAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgi
IDEgMwojIDM1ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvYysraW8uaCIgMwojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvY3N0ZGlvIiAxIDMK
IyA0OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jc3RkaW8iIDMKCgojIDEgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvY3N0ZGRlZiIgMSAzCiMgNDcgIi90bXAvaW5zdC9pbmNsdWRlL2Mr
Ky8zLjQvY3N0ZGRlZiIgMwoKIyAxICIvdG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTUxICIvdG1wL2luc3QvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVm
IGludCBwdHJkaWZmX3Q7CiMgMjEzICIvdG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXpl
X3Q7CiMgNDkgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvY3N0ZGRlZiIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDUxICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2NzdGRpbyIgMiAzCgojIDEgIi90bXAvaW5zdC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAojIDM5
ICIvdG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3Rk
aW8uaCIgMyA0CmV4dGVybiAiQyIgewoKCgojIDEgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0NCAiL3RtcC9pbnN0
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVk
ZS9iaXRzL3R5cGVzLmgiIDMgNAojIDEgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL2Jp
dHMvdHlwZXMuaCIgMiAzIDQKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50
Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg
bG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg
MyA0CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBf
X3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5z
aWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7
CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg
c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5z
aWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRk
cl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90
Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBl
ZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYg
bG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQg
X19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90
Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsK
CnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlw
ZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25n
IGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVm
IGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlw
ZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlw
ZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxr
c2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90
IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBf
X3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90
Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90
IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcg
aW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90
OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2Nr
bGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMgNAoj
IDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvc2NoZWQuaCIgMSAzIDQKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIg
MyA0CnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAg
fTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMyA0CgoKc3RydWN0
IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9j
azsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRf
ZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0
YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19z
Y2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3Qg
X19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsK
ICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0
CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3Ig
X19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQg
X19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRo
cmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBp
bnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7
CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsK
CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0
cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9w
dGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOwog
IGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0aHJl
YWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZV93
YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFkX3J3
bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNo
YXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50IHB0
aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFkX2Zh
c3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVzZW50
OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsKCgp0
eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRyX3Q7
CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAyIDMgNAojIDQ2ICIvdG1wL2luc3QvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKCgoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgojIDcxICIvdG1wL2luc3QvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMyA0CnR5cGVkZWYgc3RydWN0
IF9JT19GSUxFIF9fRklMRTsKIyA4MSAiL3RtcC9pbnN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRl
L19HX2NvbmZpZy5oIiAxIDMgNAojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMgNAoj
IDEgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzIDQKIyAzNTQgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRf
dDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMgNAojIDI0ICIvdXNyL2luY2x1
ZGUvX0dfY29uZmlnLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMgNAojIDQ4
ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0CiMgMSAiL3RtcC9pbnN0L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ5ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAz
IDQKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CiMgNjMgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAzIDQKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5p
b24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7
Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKCnR5
cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0g
X0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0
ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcu
aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVk
ZS9nY29udi5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyA0OCAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0OSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDIgMyA0CiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKCiMgMjkgIi91
c3IvaW5jbHVkZS9nY29udi5oIiAyIDMgNAoKCiMgMSAiL3RtcC9pbnN0L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDMyICIvdXNyL2lu
Y2x1ZGUvZ2NvbnYuaCIgMiAzIDQKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dD
T05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9F
TVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBV
VCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQ
VE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19M
QVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1
Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252
X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50
ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj
aGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQg
KCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lk
ICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBp
bnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lk
ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNo
YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2Zj
dCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVk
IGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29u
c3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0
X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJh
bnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19n
Y29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBf
X3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9m
Y3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsK
fTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVj
dCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2Nv
dW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29u
dl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5k
X2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9u
ZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87
CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29u
dl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIg
Kl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291
bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsK
ICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9f
dHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0
ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1
Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3Iv
aW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2Nv
bnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsK
ICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9H
X2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWlu
dDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAyIDMgNAojIDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CiMgMSAi
L3RtcC9pbnN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGFy
Zy5oIiAxIDMgNAojIDQzICIvdG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My40L2luY2x1ZGUvc3RkYXJnLmgiIDMgNAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251
Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzIDQKIyAxNjIgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzIDQKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsK
IyAxNzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7
CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBz
dHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5NSAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMgNAp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29r
LAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9j
b252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpfX2NvZGVjdnRfZGVzdHIp
IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2Rl
Y3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiwgY2hh
ciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICos
IGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191bnNoaWZ0
KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0g
X19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVjdCBfSU9fY29kZWN2dCAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90
ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgaW50ICgqX19jb2Rl
Y3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2
dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29k
ZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19tYnN0YXRlX3QgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNp
emVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVj
dnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90IF9fY2Rfb3V0Owp9OwoK
CnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAgd2NoYXJf
dCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJfdCAqX0lP
X3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3Y2hhcl90ICpfSU9fd3Jp
dGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90ICpfSU9fYnVmX2VuZDsK
CiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jhc2U7Cgog
IHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lPX3N0YXRlOwogIF9fbWJz
dGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2dDsKCiAg
d2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90ICpfd2lkZV92dGFibGU7
Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVh
ZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hh
ciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3Jp
dGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hh
ciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3Nh
dmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklM
RSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKCgoKICBpbnQgX2ZsYWdzMjsKCiAgX19vZmZfdCBf
b2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hh
ciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpf
bG9jazsKIyAzMTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKICBfX29mZjY0X3QgX29mZnNl
dDsKCgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2Rh
dGEgKl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNp
emVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJ
TEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0
ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBf
SU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNTAgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAzIDQKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hh
ciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lv
X3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBf
X2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsK
Cgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVm
IF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVf
Zm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9z
ZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rp
b25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3Jp
dGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9z
ZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVu
Y3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsK
CgpleHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9f
Y2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqX19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJu
ICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4
dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVy
ZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZs
b3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklM
RSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2lu
dF90KSB0aHJvdyAoKTsKIyA0MzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGlu
dCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRj
IChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2Yg
KF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklM
RSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxF
ICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklM
RSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAo
KTsKIyA0NjIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBfSU9fdmZzY2Fu
ZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3Qg
Y2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0
KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBf
X3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwg
dm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAo
X0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0
X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4
dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpl
eHRlcm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4g
d2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3djLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cg
KCk7CiMgNTExICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CmV4dGVybiBpbnQgX0lPX3Zmd3Nj
YW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3Qs
IGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19n
bnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJ
TEUgKiwgd2ludF90LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93
YmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCgp9CiMgODIgIi90bXAvaW5zdC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoK
CgoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCBfX25vdF92YV9saXN0X187CiMgOTUgIi90bXAvaW5z
dC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzIDQK
Cgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9z
NjRfdDsKIyAxNDcgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQv
aW5jbHVkZS9zdGRpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIg
MSAzIDQKIyAxNDggIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQv
aW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCgpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRpbjsK
ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpz
dGRlcnI7CgoKCgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5h
bWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9f
Y29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAo
dm9pZCkgdGhyb3cgKCk7CiMgMTgyICIvdG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIg
Kl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAyMDQg
Ii90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRp
by5oIiAzIDQKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29u
c3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p
KTsKCgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0
ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
ZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZy
ZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAg
ICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyNTAgIi90bXAv
aW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAz
IDQKCgpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmls
ZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19t
b2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19m
ZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9w
ZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJv
dyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBf
X2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVt
c3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg
IGludCBfX21vZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRi
dWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs
CiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh
X2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25w
cmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9s
aXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3By
aW50Zl9fLCAzLCAwKSkpOwoKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVz
dHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAg
ICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRm
IChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAo
Y2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGlu
dCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAg
ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBf
X2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCgpleHRl
cm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
LAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu
Li4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBf
X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoK
ZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
c2NhbmZfXywgMiwgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgZ2V0
Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJf
dW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2Ms
IEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJv
dyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2Ms
IEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChp
bnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQg
X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4g
Y2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0c191
bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNDcyICIv
dG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8u
aCIgMyA0CmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19s
aW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0
IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVs
aW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHMg
KF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBf
X2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9p
ZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4g
c2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19z
aXplLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBf
X3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2Vk
ICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv
dyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0
cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hl
bmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7Cgoj
IDUzOSAiL3RtcC9pbnN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRl
L3N0ZGlvLmgiIDMgNApleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3Qg
X19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA1NTUgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKZXh0ZXJuIGludCBmZ2V0
cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3Mp
CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2Nv
bnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpOwojIDU3NCAiL3RtcC9pbnN0L2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCgpleHRlcm4gaW50
IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2Up
IHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgZmdldHBvczY0IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBm
cG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBmc2V0
cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0
ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJv
ciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5s
b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2Vk
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0
IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vy
cmxpc3QuaCIgMSAzIDQKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMyA0
CmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vy
cmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19j
b25zdCBfc3lzX2Vycmxpc3RbXTsKIyA2MTEgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCgoKZXh0ZXJuIGludCBmaWxl
bm8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9j
a2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAo
X19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAq
Y3VzZXJpZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVy
biBpbnQgb2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFj
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
cHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2Jz
dGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9j
a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2Zp
bGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDY4OCAiL3RtcC9pbnN0L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp9CiMgNTMgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvY3N0ZGlvIiAyIDMKIyA5NyAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9jc3RkaW8iIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6
ZnBvc190OwoKICB1c2luZyA6OmNsZWFyZXJyOwogIHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6
ZmVvZjsKICB1c2luZyA6OmZlcnJvcjsKICB1c2luZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRj
OwogIHVzaW5nIDo6ZmdldHBvczsKICB1c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAg
dXNpbmcgOjpmcHJpbnRmOwogIHVzaW5nIDo6ZnB1dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2lu
ZyA6OmZyZWFkOwogIHVzaW5nIDo6ZnJlb3BlbjsKICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6
OmZzZWVrOwogIHVzaW5nIDo6ZnNldHBvczsKICB1c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6Zndy
aXRlOwogIHVzaW5nIDo6Z2V0YzsKICB1c2luZyA6OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwog
IHVzaW5nIDo6cGVycm9yOwogIHVzaW5nIDo6cHJpbnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2lu
ZyA6OnB1dGNoYXI7CiAgdXNpbmcgOjpwdXRzOwogIHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6
cmVuYW1lOwogIHVzaW5nIDo6cmV3aW5kOwogIHVzaW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRi
dWY7CiAgdXNpbmcgOjpzZXR2YnVmOwogIHVzaW5nIDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2Fu
ZjsKICB1c2luZyA6OnRtcGZpbGU7CiAgdXNpbmcgOjp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7
CiAgdXNpbmcgOjp2ZnByaW50ZjsKICB1c2luZyA6OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50
ZjsKfQojIDE1MyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jc3RkaW8iIDMKbmFtZXNwYWNl
IF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNp
bmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9Cgpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251
X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9j
eHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KIyAzNiAiL3RtcC9p
bnN0L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoK
IyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Ro
ci5oIiAxIDMKIyA5NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2d0aHIuaCIgMwojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0CiMgMjAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi
IDMgNAojIDEgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMgNAojIDI5ICIvdXNyL2luY2x1ZGUv
c2NoZWQuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIyAxMTYgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMgNApzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9z
ZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5o
IiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzIDQKIyA0NyAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMyA0CnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGlu
dCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9u
ZSAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywKICAgICAg
ICAgICAgICAgICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgp9CiMgMzMg
Ii91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMgNAoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGlu
dCBzY2hlZF9zZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFy
YW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAo
X19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFy
YW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChf
X3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29y
aXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQg
X19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFs
IChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IHNjaGVkX3NldGFmZmluaXR5IChfX3BpZF90IF9fcGlkLCB1bnNpZ25lZCBsb25nIGlu
dCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQg
Kl9fbWFzaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRhZmZpbml0eSAoX19waWRf
dCBfX3BpZCwgdW5zaWduZWQgbG9uZyBpbnQgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ICpfX21hc2spIHRocm93ICgpOwoKCn0KIyAyMSAiL3Vz
ci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMg
NAojIDMwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEg
Ii90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzIDQKIyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMyA0CiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg
MyA0CiMgNTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCnR5cGVkZWYgX19jbG9ja190IGNs
b2NrX3Q7CgoKCiMgNzQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCnR5cGVkZWYgX190aW1l
X3QgdGltZV90OwoKCgojIDkyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX2Ns
b2NraWRfdCBjbG9ja2lkX3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRl
ZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMjcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCnN0
cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGlu
dCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAg
aW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwogIF9f
Y29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgoKCgoKc3RydWN0IGl0aW1lcnNwZWMKICB7
CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRf
dmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CgoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90
OwoKCgoKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4g
dGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBk
aWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0
IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0g
Kl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAx
IDMgNAojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX19s
b2NhbGVfc3RydWN0CnsKCiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBl
X3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7CgoKICBjb25zdCBjaGFyICpf
X25hbWVzWzEzXTsKfSAqX19sb2NhbGVfdDsKIyAyMTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg
MyA0CgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lX2wgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl
X3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVj
dCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxl
X3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lX2wgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpn
bXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVj
dCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9f
dGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3Qg
X190cCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0
IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy
ICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNo
YXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAog
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK
CgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1l
ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4
dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoK
ZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0
OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25z
dCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMzA3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
IDQKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBkeXNpemUgKGludCBfX3llYXIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg
Kl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMg
Kl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2Nr
aWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNw
ZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90
IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9zbGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGlu
dCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGlt
ZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVj
ICpfX3JlbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRf
dCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
dGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3Qg
X192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19y
ZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0
aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhy
b3cgKCk7CiMgMzc4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIGludCBnZXRkYXRl
X2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3Ry
aW5nKSB0aHJvdyAoKTsKIyAzOTMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gaW50
IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoK
fQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRl
L3NpZ25hbC5oIiAxIDMgNAojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMgNApleHRlcm4g
IkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMyA0CiMgMjMgIi91c3Iv
aW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzIDQKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoK
Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8g
KDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzQg
Ii91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzIDQKIyA1MCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5o
IiAzIDQKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwojIDM3NyAiL3Vzci9pbmNsdWRlL3Np
Z25hbC5oIiAzIDQKfQojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1ZGUv
cHRocmVhZC5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmgiIDEgMyA0
CiMgMjcgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNTkg
Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lO
QUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lO
SEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhS
RUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAg
UFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQ
VEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoK
ICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBU
SFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRI
UkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBU
SFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoKCiAgLCBQVEhSRUFE
X01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9OwoKZW51bQp7CiAg
UFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgoK
ZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQVEhSRUFEX1JXTE9D
S19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVD
VVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19Q
UkVGRVJfV1JJVEVSX05QCn07CiMgMTMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAq
KTsKICB2b2lkICpfX2FyZzsKICBpbnQgX19jYW5jZWx0eXBlOwogIHN0cnVjdCBfcHRocmVhZF9j
bGVhbnVwX2J1ZmZlciAqX19wcmV2Owp9OwoKCgplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9FTkFC
TEUsCgogIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07CmVudW0KewogIFBUSFJFQURfQ0FOQ0VM
X0RFRkVSUkVELAoKICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMKCn07CiMgMTYzICIvdXNy
L2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVh
ZF90ICpfX3Jlc3RyaWN0IF9fdGhyZWFkcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJu
IHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0
cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNj
aGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f
cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25z
dCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAq
X19hdHRyLCBpbnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jl
c3RyaWN0IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRy
X3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2F0dHIsIGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBf
X3Njb3BlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3Bl
IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAq
X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1
YXJkc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXpl
IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUp
CiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRk
ciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfZ2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0
cmljdCBfX3N0YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9zZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJl
YWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
c3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3Np
emUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6
ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJl
YWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGlu
dCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0
IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJy
ZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5
IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQg
KHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRo
cmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq
X19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJl
YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl
eF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19y
ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4
X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRy
X2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19j
b25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3Qg
Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19w
c2hhcmVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5
cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVh
ZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBf
X2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25k
YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9h
dHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFk
X2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWdu
YWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9f
Y29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jl
c3RyaWN0IF9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3Rp
bWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVz
cGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0
aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhy
ZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2Nv
bmRhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0
cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u
ZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19y
ZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rl
c3Ryb3kgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9j
a190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGlt
ZWRyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGlt
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFk
X3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j
a190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19y
ZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3J3bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0
dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9k
ZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2Nr
YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0
cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y
d2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3Qg
cHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2thdHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93
ICgpOwojIDUwOSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiBpbnQgcHRocmVh
ZF9zcGluX2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVkKQog
ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJlYWRf
c3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9s
b2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190ICpf
X2xvY2spIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRo
cmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2Nv
dW50KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJl
YWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2Jh
cnJpZXJhdHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJh
dHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJf
Z2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hh
cmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hhcmVk
IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBw
dGhyZWFkX2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cg
KCk7CiMgNTU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFk
X2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lkICopKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVy
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyAocHRocmVhZF9r
ZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNTc2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQK
ZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19z
dGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3Nl
dGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX19jYW5jZWx0aHJlYWQpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2
MTAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVh
bnVwX3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgp
OwoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVh
ZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFk
LmgiIDMgNApleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0cnVjdCBf
cHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwojIDY0
MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFu
dXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkIChwdGhyZWFk
X3QgX190aHJlYWRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lk
X3QgKl9fY2xvY2tfaWQpIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0
aHJlYWQuaCIgMSAzIDQKIyAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMgNApl
eHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNrKXRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFkX3QgX190aHJlYWRpZCwg
aW50IF9fc2lnbm8pIHRocm93ICgpOwojIDY1NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAz
IDQKIyA2NzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gaW50IHB0aHJlYWRf
YXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRf
a2lsbF9vdGhlcl90aHJlYWRzX25wICh2b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAiL3RtcC9pbnN0
L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS91
bmlzdGQuaCIgMyA0CmV4dGVybiAiQyIgewojIDE3NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz
IDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzIDQKIyAxNzYgIi91c3Iv
aW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9u
bWVudHMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMyA0CiMgMjQgIi91c3IvaW5j
bHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAyIDMgNAojIDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0
ZC5oIiAyIDMgNAojIDE5MyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKdHlwZWRlZiBfX3Nz
aXplX3Qgc3NpemVfdDsKCgoKCgojIDEgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAyMDAgIi91c3IvaW5jbHVkZS91
bmlzdGQuaCIgMiAzIDQKCgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9f
dWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9f
b2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKIyAy
NDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJf
dDsKCgoKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gaW50IGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUs
IGludCBfX3R5cGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBldWlkYWNjZXNzIChfX2NvbnN0
IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CiMgMjkwICIvdXNyL2luY2x1ZGUv
dW5pc3RkLmgiIDMgNApleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19v
ZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CiMgMzAyICIvdXNyL2luY2x1ZGUvdW5pc3Rk
LmgiIDMgNApleHRlcm4gX19vZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19v
ZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvc2UgKGludCBf
X2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9f
YnVmLCBzaXplX3QgX19uYnl0ZXMpIHRocm93ICgpOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRlIChp
bnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4
dGVybiBzc2l6ZV90IHByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRl
cywgX19vZmZfdCBfX29mZnNldCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRl
IChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKIyAzNDAgIi91c3IvaW5jbHVk
ZS91bmlzdGQuaCIgMyA0CmV4dGVybiBzc2l6ZV90IHByZWFkNjQgKGludCBfX2ZkLCB2b2lkICpf
X2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3Qg
X19vZmZzZXQpIHRocm93ICgpOwoKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0IChpbnQgX19mZCwg
X19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fb2ZmNjRfdCBfX29mZnNldCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBpcGUgKGlu
dCBfX3BpcGVkZXNbMl0pIHRocm93ICgpOwojIDM2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz
IDQKZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhy
b3cgKCk7CiMgMzcxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gdW5zaWduZWQg
aW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IF9fdXNlY29uZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVlLCBfX3VzZWNvbmRzX3Qg
X19pbnRlcnZhbCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29u
ZHNfdCBfX3VzZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBhdXNlICh2b2lkKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlk
X3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgbGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRf
dCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IGNoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmNo
ZGlyIChpbnQgX19mZCkgdGhyb3cgKCk7CiMgNDIzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMg
NApleHRlcm4gY2hhciAqZ2V0Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICh2b2lkKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmdldHdkIChjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGR1cCAoaW50IF9fZmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50
IF9fZmQsIGludCBfX2ZkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247Cgpl
eHRlcm4gY2hhciAqKmVudmlyb247CgoKCgoKZXh0ZXJuIGludCBleGVjdmUgKF9fY29uc3QgY2hh
ciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdLAogICAgICAgICAgICAgICAgICAgY2hh
ciAqX19jb25zdCBfX2VudnBbXSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZleGVjdmUgKGlu
dCBfX2ZkLCBjaGFyICpfX2NvbnN0IF9fYXJndltdLCBjaGFyICpfX2NvbnN0IF9fZW52cFtdKQog
ICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFyICpfX3BhdGgs
IGNoYXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsZSAo
X19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgZXhlY2wgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIg
Kl9fYXJnLCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19jb25zdCBjaGFy
ICpfX2ZpbGUsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBleGVjbHAgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBuaWNlIChpbnQgX19pbmMpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIHZvaWQgX2V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMSAzIDQKIyAy
NSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMyA0CmVudW0KICB7CiAgICBfUENfTElO
S19NQVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoKICAgIF9QQ19O
QU1FX01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoKICAgIF9QQ19D
SE9XTl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJU0FCTEUsCgog
ICAgX1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklPX0lPLAoKICAg
IF9QQ19TT0NLX01BWEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRTLAoKICAgIF9QQ19SRUNfSU5D
Ul9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUlO
X1hGRVJfU0laRSwKCiAgICBfUENfUkVDX1hGRVJfQUxJR04sCgogICAgX1BDX0FMTE9DX1NJWkVf
TUlOLAoKICAgIF9QQ19TWU1MSU5LX01BWAoKICB9OwoKCmVudW0KICB7CiAgICBfU0NfQVJHX01B
WCwKCiAgICBfU0NfQ0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENLLAoKICAgIF9TQ19OR1JPVVBT
X01BWCwKCiAgICBfU0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVBTV9NQVgsCgogICAgX1NDX1Ra
TkFNRV9NQVgsCgogICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9TQ19TQVZFRF9JRFMsCgogICAg
X1NDX1JFQUxUSU1FX1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAg
X1NDX1RJTUVSUywKCiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoKICAgIF9TQ19QUklPUklUSVpF
RF9JTywKCiAgICBfU0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9TQ19GU1lOQywKCiAgICBfU0Nf
TUFQUEVEX0ZJTEVTLAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9TQ19NRU1MT0NLX1JBTkdFLAoK
ICAgIF9TQ19NRU1PUllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVTU0FHRV9QQVNTSU5HLAoKICAg
IF9TQ19TRU1BUEhPUkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1ND
X0FJT19MSVNUSU9fTUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAgIF9TQ19BSU9fUFJJT19ERUxU
QV9NQVgsCgogICAgX1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9TQ19NUV9PUEVOX01BWCwKCiAg
ICBfU0NfTVFfUFJJT19NQVgsCgogICAgX1NDX1ZFUlNJT04sCgogICAgX1NDX1BBR0VTSVpFLAoK
CiAgICBfU0NfUlRTSUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNfTUFYLAoKICAgIF9TQ19TRU1f
VkFMVUVfTUFYLAoKICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAgX1NDX1RJTUVSX01BWCwKCgoK
CiAgICBfU0NfQkNfQkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAgX1NDX0JDX1ND
QUxFX01BWCwKCiAgICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9XRUlHSFRTX01B
WCwKCiAgICBfU0NfRVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1RfTUFYLAoKICAg
IF9TQ19MSU5FX01BWCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hBUkNMQVNTX05B
TUVfTUFYLAoKCiAgICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwKCiAgICBfU0Nf
Ml9DX0RFViwKCiAgICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JVTiwKCiAgICBf
U0NfMl9TV19ERVYsCgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJLAoKICAgIF9T
Q19QSUlfWFRJLAoKICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5URVJORVQsCgog
ICAgX1NDX1BJSV9PU0ksCgogICAgX1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwKCiAgICBfU0Nf
VUlPX01BWElPViwKCiAgICBfU0NfSU9WX01BWCA9IF9TQ19VSU9fTUFYSU9WLAoKICAgIF9TQ19Q
SUlfSU5URVJORVRfU1RSRUFNLAoKICAgIF9TQ19QSUlfSU5URVJORVRfREdSQU0sCgogICAgX1ND
X1BJSV9PU0lfQ09UUywKCiAgICBfU0NfUElJX09TSV9DTFRTLAoKICAgIF9TQ19QSUlfT1NJX00s
CgogICAgX1NDX1RfSU9WX01BWCwKCgoKICAgIF9TQ19USFJFQURTLAoKICAgIF9TQ19USFJFQURf
U0FGRV9GVU5DVElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAgX1NDX0dFVFBX
X1JfU0laRV9NQVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19UVFlfTkFNRV9N
QVgsCgogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAgX1NDX1RIUkVB
RF9LRVlTX01BWCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0NfVEhSRUFEX1RI
UkVBRFNfTUFYLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAgX1NDX1RIUkVB
RF9BVFRSX1NUQUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgog
ICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1Qs
CgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9DRVNTT1JTX0NP
TkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFHRVMsCgogICAg
X1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0NfUEFTU19NQVgs
CgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVSU0lPTiwKCiAg
ICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1NDX1hPUEVOX0VO
SF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJfVEVSTSwKCiAgICBf
U0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9QRU5fWFBHMiwKCiAg
ICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAgX1NDX0NIQVJfQklU
LAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAgX1NDX0lOVF9NQVgs
CgogICAgX1NDX0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoKICAgIF9TQ19XT1JEX0JJVCwK
CiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgogICAgX1NDX1NTSVpFX01BWCwK
CiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4sCgogICAgX1NDX1NIUlRfTUFY
LAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFYLAoKICAgIF9TQ19VSU5UX01B
WCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9NQVgsCgoKICAgIF9TQ19OTF9B
UkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05MX01TR01BWCwKCiAgICBfU0Nf
TkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19OTF9URVhUTUFYLAoKCiAgICBf
U0NfWEJTNV9JTFAzMl9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkZCSUcsCgogICAgX1ND
X1hCUzVfTFA2NF9PRkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCgoKICAgIF9TQ19Y
T1BFTl9MRUdBQ1ksCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoKICAgIF9TQ19YT1BFTl9SRUFM
VElNRV9USFJFQURTLAoKCiAgICBfU0NfQURWSVNPUllfSU5GTywKCiAgICBfU0NfQkFSUklFUlMs
CgogICAgX1NDX0JBU0UsCgogICAgX1NDX0NfTEFOR19TVVBQT1JULAoKICAgIF9TQ19DX0xBTkdf
U1VQUE9SVF9SLAoKICAgIF9TQ19DTE9DS19TRUxFQ1RJT04sCgogICAgX1NDX0NQVVRJTUUsCgog
ICAgX1NDX1RIUkVBRF9DUFVUSU1FLAoKICAgIF9TQ19ERVZJQ0VfSU8sCgogICAgX1NDX0RFVklD
RV9TUEVDSUZJQywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDX1IsCgogICAgX1NDX0ZEX01HTVQs
CgogICAgX1NDX0ZJRk8sCgogICAgX1NDX1BJUEUsCgogICAgX1NDX0ZJTEVfQVRUUklCVVRFUywK
CiAgICBfU0NfRklMRV9MT0NLSU5HLAoKICAgIF9TQ19GSUxFX1NZU1RFTSwKCiAgICBfU0NfTU9O
T1RPTklDX0NMT0NLLAoKICAgIF9TQ19NVUxUSV9QUk9DRVNTLAoKICAgIF9TQ19TSU5HTEVfUFJP
Q0VTUywKCiAgICBfU0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUywK
CiAgICBfU0NfU1BJTl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoKICAgIF9TQ19SRUdFWF9WRVJT
SU9OLAoKICAgIF9TQ19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywKCiAgICBfU0NfU1BBV04sCgog
ICAgX1NDX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiwK
CiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0VfUiwKCiAg
ICBfU0NfVElNRU9VVFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19V
U0VSX0dST1VQUywKCiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAgICBfU0NfMl9QQlMsCgogICAg
X1NDXzJfUEJTX0FDQ09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xPQ0FURSwKCiAgICBfU0NfMl9Q
QlNfTUVTU0FHRSwKCiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAgX1NDX1NZTUxPT1BfTUFYLAoK
ICAgIF9TQ19TVFJFQU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BPSU5ULAoKCiAgICBfU0NfVjZf
SUxQMzJfT0ZGMzIsCgogICAgX1NDX1Y2X0lMUDMyX09GRkJJRywKCiAgICBfU0NfVjZfTFA2NF9P
RkY2NCwKCiAgICBfU0NfVjZfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfSE9TVF9OQU1FX01BWCwK
CiAgICBfU0NfVFJBQ0UsCgogICAgX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUiwKCiAgICBfU0NfVFJB
Q0VfSU5IRVJJVCwKCiAgICBfU0NfVFJBQ0VfTE9HCgogIH07CgoKCgoKZW51bQogIHsKICAgIF9D
U19QQVRILAoKCgoKICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAwMCwKCiAgICBfQ1NfTEZTX0xERkxB
R1MsCgogICAgX0NTX0xGU19MSUJTLAoKICAgIF9DU19MRlNfTElOVEZMQUdTLAoKICAgIF9DU19M
RlM2NF9DRkxBR1MsCgogICAgX0NTX0xGUzY0X0xERkxBR1MsCgogICAgX0NTX0xGUzY0X0xJQlMs
CgogICAgX0NTX0xGUzY0X0xJTlRGTEFHUywKCgoKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9D
RkxBR1MgPSAxMTAwLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NT
X1hCUzVfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5URkxB
R1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAz
Ml9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUywKCiAgICBf
Q1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRf
Q0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9M
UDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAg
X0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdf
TERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9M
UEJJR19PRkZCSUdfTElOVEZMQUdTLAoKCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0NG
TEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfUE9T
SVhfVjZfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElO
VEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19Q
T1NJWF9WNl9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZG
QklHX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSU5URkxBR1MsCgogICAg
X0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09G
RjY0X0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUywKCiAgICBfQ1Nf
UE9TSVhfVjZfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09G
RkJJR19DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAg
IF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdf
T0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19WNl9XSURUSF9SRVNUUklDVEVEX0VOVlMKCiAg
fTsKIyA1MDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKCgpleHRlcm4gbG9uZyBpbnQg
cGF0aGNvbmYgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpl
eHRlcm4gbG9uZyBpbnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgaW50IHN5c2NvbmYgKGludCBfX25hbWUpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIHNpemVfdCBjb25mc3RyIChpbnQgX19uYW1l
LCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX3BpZF90
IGdldHBpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cHBpZCAodm9pZCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gX19waWRfdCBnZXRwZ3JwICh2b2lkKSB0aHJvdyAoKTsKIyA1
MzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAo
X19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgpleHRlcm4gX19waWRfdCBnZXRwZ2lkIChfX3BpZF90
IF9fcGlkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlk
LCBfX3BpZF90IF9fcGdpZCkgdGhyb3cgKCk7CiMgNTYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMgNApleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDU4MCAiL3Vzci9pbmNs
dWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIF9fcGlkX3QgZ2V0c2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIF9fdWlkX3QgZ2V0dWlkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX191aWRfdCBnZXRl
dWlkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRnaWQgKHZvaWQpIHRocm93
ICgpOwoKCmV4dGVybiBfX2dpZF90IGdldGVnaWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBnZXRncm91cHMgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IGdyb3VwX21lbWJlciAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBpbnQgc2V0dWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgc2V0cmV1aWQgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fZXVpZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHNldGV1aWQgKF9fdWlkX3QgX191aWQpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gaW50IHNldGdpZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNl
dHJlZ2lkIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBzZXRlZ2lkIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9f
cGlkX3QgZm9yayAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBfX3BpZF90IHZmb3JrICh2
b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9fZmQpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHR0eW5hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXpl
X3QgX19idWZsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzYXR0eSAoaW50IF9fZmQpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgdHR5c2xvdCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IGxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHN5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2Nv
bnN0IGNoYXIgKl9fdG8pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcGF0aCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxp
bmsgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHJtZGlyIChf
X2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdy
cCAoaW50IF9fZmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGNzZXRwZ3JwIChpbnQgX19mZCwg
X19waWRfdCBfX3BncnBfaWQpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZv
aWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRsb2dpbl9yIChjaGFyICpfX25hbWUsIHNp
emVfdCBfX25hbWVfbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0bG9naW4gKF9fY29u
c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA3MjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MyA0CiMgMSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAxIDMgNAojIDM4ICIvdXNyL2luY2x1ZGUv
Z2V0b3B0LmgiIDMgNApleHRlcm4gIkMiIHsKIyA0NyAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAz
IDQKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKIyA2MSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzIDQK
ZXh0ZXJuIGludCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBv
cHRvcHQ7CiMgMTQ1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNApleHRlcm4gaW50IGdldG9w
dCAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0
b3B0cyk7CiMgMTc1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNAp9CiMgNzI3ICIvdXNyL2lu
Y2x1ZGUvdW5pc3RkLmgiIDIgMyA0CgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFy
ICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0aG9z
dG5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHNldGhvc3RpZCAobG9uZyBpbnQgX19pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGludCBnZXRkb21haW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7
CmV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBf
X2xlbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCB2aGFuZ3VwICh2b2lkKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHJldm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGludCBwcm9maWwgKHVuc2lnbmVkIHNob3J0IGludCAqX19zYW1wbGVfYnVmZmVy
LCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2Zmc2V0LCB1bnNp
Z25lZCBpbnQgX19zY2FsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXR1c2Vyc2hlbGwgKHZv
aWQpIHRocm93ICgpOwpleHRlcm4gdm9pZCBlbmR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwpl
eHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
ZGFlbW9uIChpbnQgX19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBjaHJvb3QgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGNoYXIgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgZnN5bmMgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50
IGdldGhvc3RpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChfX2NvbnN0IGNo
YXIgKl9fZmlsZSwgX19vZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CiMgODM2ICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gaW50IHRydW5jYXRlNjQgKF9fY29uc3QgY2hhciAqX19m
aWxlLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmdHJ1bmNh
dGUgKGludCBfX2ZkLCBfX29mZl90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKIyA4NTEgIi91c3IvaW5j
bHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29m
ZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAo
dm9pZCkgdGhyb3cgKCk7CiMgODY2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4g
aW50IGJyayAodm9pZCAqX19hZGRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqc2JyayAo
aW50cHRyX3QgX19kZWx0YSkgdGhyb3cgKCk7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMgNApleHRlcm4gbG9uZyBpbnQgc3lzY2FsbCAobG9uZyBpbnQgX19zeXNubywgLi4uKSB0aHJv
dyAoKTsKIyA5MDcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgbG9ja2Yg
KGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIHRocm93ICgpOwojIDkxNyAiL3Vz
ci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBsb2NrZjY0IChpbnQgX19mZCwgaW50
IF9fY21kLCBfX29mZjY0X3QgX19sZW4pIHRocm93ICgpOwojIDkzOCAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBmZGF0YXN5bmMgKGludCBfX2ZpbGRlcykgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gY2hhciAqY3J5cHQgKF9fY29uc3QgY2hhciAqX19rZXksIF9fY29uc3Qg
Y2hhciAqX19zYWx0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hhciAqX19i
bG9jaywgaW50IF9fZWRmbGFnKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc3dhYiAoX19j
b25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fZnJvbSwgdm9pZCAqX19yZXN0cmljdCBfX3RvLAogICAg
ICAgICAgICAgICAgICBzc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAq
Y3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA5ODMgIi91c3IvaW5jbHVkZS91bmlzdGQu
aCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lk
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgp
OwoKCn0KIyAzOSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRf
a2V5X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBw
dGhyZWFkX211dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhy
ZWFkX29uY2UKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRo
cmVhZF9rZXlfZGVsZXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEg
d2VhayBwdGhyZWFkX3NldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3By
YWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF90
cnlsb2NrCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jawojIDg3ICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMK
c3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgc3RhdGljIHZv
aWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVfcHRyID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRl
OwogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAwOwp9CiMgNDQ5ICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMK
c3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2Us
IHZvaWQgKCpmdW5jKSAodm9pZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAg
cmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9
CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90
ICprZXksIHZvaWQgKCpkdG9yKSAodm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVh
dGUgKGtleSwgZHRvcik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRl
IChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5
KTsKfQoKc3RhdGljIGlubGluZSB2b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJl
YWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0
YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtl
eSwgY29uc3Qgdm9pZCAqcHRyKQp7CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwg
cHRyKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVh
ZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1
cm4gcHRocmVhZF9tdXRleF9sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0
YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhf
dCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJl
YWRfbXV0ZXhfdHJ5bG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMg
aW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0
ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0
ZXhfdW5sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5NyAiL3RtcC9pbnN0
L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMiAzCiMgMzgg
Ii90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVk
ZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgogIHR5cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXpl
OwoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9t
dXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9f
aW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgw
MDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2ll
bnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2Ug
PSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0
MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4Owog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAw
NDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4
MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0g
MHgyMDsKICB9Owp9CiMgNDUgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9mcG9zLmgi
IDIgMwojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvY3djaGFyIiAxIDMKIyA0OCAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jd2NoYXIiIDMKCgoKIyAxICIvdG1wL2luc3QvaW5jbHVk
ZS9jKysvMy40L2N0aW1lIiAxIDMKIyA0OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jdGlt
ZSIgMwojIDY0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2N0aW1lIiAzCm5hbWVzcGFjZSBz
dGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoK
ICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAg
dXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5n
IDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1
MiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jd2NoYXIiIDIgMwoKCiMgMSAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDEgMyA0CiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKIyAxICIv
dG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkYXJn
LmgiIDEgMyA0CiMgNDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAoKCgoKCgoKIyAxICIv
dG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVm
LmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAojIDYzICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMyA0CgojIDg4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0CgoKdHlw
ZWRlZiBfX21ic3RhdGVfdCBtYnN0YXRlX3Q7CgoKCiMgMTEzICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMyA0CmV4dGVybiAiQyIgewoKCgoKc3RydWN0IHRtOwoKCgoKCgoKCgpleHRlcm4gd2NoYXJf
dCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVy
biB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHdjc2NtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFy
X3QgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl
cm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf
X3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCgoKZXh0ZXJuIGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29u
c3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19j
b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgd2NzY2FzZWNt
cF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCB3Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHdjc2NvbGwgKF9fY29uc3Qgd2NoYXJfdCAq
X19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3
Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgoKCgoKCmV4dGVybiBpbnQgd2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29u
c3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9f
Y29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s
IF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAgKF9f
Y29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
OwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2No
YXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0
ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193
YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4g
d2NoYXJfdCAqd2NzY2hybnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXpl
X3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX3Jl
amVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g
c2l6ZV90IHdjc3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpf
X2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biB3Y2hhcl90ICp3Y3NwYnJrIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFy
X3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
ZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2Nv
bnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19k
ZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19wdHIp
IHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NzbGVuIChfX2NvbnN0IHdjaGFyX3QgKl9fcykg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAq
d2Nzd2NzIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19u
ZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRl
cm4gc2l6ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHdj
aGFyX3QgKndtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g
aW50IHdtZW1jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90
ICp3bWVtY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3
Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90
ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbXBjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHdpbnRfdCBidG93
YyAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnJ0
b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg
ICAgICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAo
Y2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAgICAgICAgICAgICAg
ICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBf
X21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwpl
eHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0
aHJvdyAoKTsKCiMgMzI0ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0CgoKCmV4dGVybiBzaXpl
X3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93
ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19z
cmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19y
ZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX25tYywKICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbndjLCBzaXplX3QgX19s
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHdjd2lkdGggKHdjaGFyX3QgX19jKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgd2Nz
dG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0
b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50
IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGlu
dCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh
c2UpIHRocm93ICgpOwojIDQ0MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNApleHRlcm4gbG9u
ZyBpbnQgd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVu
c2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhy
b3cgKCk7CgpleHRlcm4gZG91YmxlIHdjc3RvZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB3
Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xv
YykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkX2wgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2Nz
dG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5h
bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXAp
CiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
aW50IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3Vs
bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKioKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDU2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMgNApleHRlcm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2No
YXJfdCAqX19zcmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJf
dCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgZndpZGUgKF9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3cHJpbnRmIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRl
cm4gaW50IHN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu
Li4pCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdmZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVz
dHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp
CiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2d3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZykKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2c3dwcmludGYgKHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgpleHRlcm4gaW50IGZ3c2NhbmYgKF9f
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4g
aW50IHdzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAg
ICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgoKCgoKCgpleHRlcm4gaW50IHZmd3Nj
YW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251
Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndzY2FuZiAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9f
Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdnN3c2NhbmYg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
X19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgoKCgoKZXh0ZXJuIHdpbnRf
dCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdj
IChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGdldHdjaGFyICh2
b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19G
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgcHV0d2MgKHdjaGFyX3QgX193
YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhciAo
d2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgX19G
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3cyAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICBfX0ZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHVuZ2V0
d2MgKHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3aW50
X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4g
d2ludF90IGZwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBf
X0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxvY2tl
ZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191bmxv
Y2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gc2l6ZV90IHdjc2Z0aW1lICh3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgoK
CmV4dGVybiBzaXplX3Qgd2NzZnRpbWVfbCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVf
dCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry
dWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh
bGVfdCBfX2xvYykgdGhyb3cgKCk7CiMgNzM3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0Cn0K
IyA1NSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jd2NoYXIiIDIgMwojIDY5ICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1i
c3RhdGVfdDsKfQojIDEzMyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jd2NoYXIiIDMKbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAgdXNpbmcg
OjpmZ2V0d2M7CiAgdXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNpbmcgOjpm
cHV0d3M7CiAgdXNpbmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5nIDo6Zndz
Y2FuZjsKICB1c2luZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcgOjptYnJs
ZW47CiAgdXNpbmcgOjptYnJ0b3djOwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6Om1ic3J0
b3djczsKICB1c2luZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcgOjpzd3By
aW50ZjsKICB1c2luZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5nIDo6dmZ3
cHJpbnRmOwogIHVzaW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcgOjp2c3dwcmludGY7CiAgdXNpbmcg
Ojp2c3dzY2FuZjsKICB1c2luZyA6OnZ3cHJpbnRmOwogIHVzaW5nIDo6dndzY2FuZjsKICB1c2lu
ZyA6OndjcnRvbWI7CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAgdXNpbmcg
Ojp3Y3Njb2xsOwogIHVzaW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1c2luZyA6
Ondjc2Z0aW1lOwogIHVzaW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1c2luZyA6
Ondjc25jbXA7CiAgdXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwogIHVzaW5n
IDo6d2Nzc3BuOwogIHVzaW5nIDo6d2NzdG9kOwogIHVzaW5nIDo6d2NzdG9mOwogIHVzaW5nIDo6
d2NzdG9rOwogIHVzaW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6d2NzdG91bDsKICB1c2luZyA6Ondj
c3hmcm07CiAgdXNpbmcgOjp3Y3RvYjsKICB1c2luZyA6OndtZW1jbXA7CiAgdXNpbmcgOjp3bWVt
Y3B5OwogIHVzaW5nIDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3bWVtc2V0OwogIHVzaW5nIDo6d3By
aW50ZjsKICB1c2luZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3Y3NjaHI7CgogIGlubGluZSB3Y2hh
cl90KgogIHdjc2Nocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc2No
cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nz
cGJyazsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hhcl90
KiBfX3MyKQogIHsgcmV0dXJuIHdjc3BicmsoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19z
MSksIF9fczIpOyB9CgogIHVzaW5nIDo6d2NzcmNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2Nz
cmNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc3JjaHIoY29uc3Rf
Y2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3N0cjsKCiAg
aW5saW5lIHdjaGFyX3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAg
eyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsg
fQoKICB1c2luZyA6OndtZW1jaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdtZW1jaHIod2NoYXJf
dCogX19wLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiB3bWVtY2hyKGNvbnN0
X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYywgX19uKTsgfQp9CgoKCgoKCgpuYW1lc3Bh
Y2UgX19nbnVfY3h4CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAgdXNpbmcgOjp3Y3N0b2xsOwogIHVz
aW5nIDo6d2NzdG91bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6d2Nz
dG9sZDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0
b3VsbDsKfQojIDQ2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvZnBvcy5oIiAyIDMK
Cm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBj
bGFzcyBmcG9zCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0
ZV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3Rh
dGVfdHlwZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3Rh
dGVfdHlwZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX29mZihz
dHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFt
b2ZmIF9fb2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9N
X29mZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkg
Y29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0
cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAg
ZnBvcyYKICAgICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2Zm
OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBf
X29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19v
ZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRv
ci0oc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAg
ICAgIF9fdCAtPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBib29s
CiAgICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX29mZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShj
b25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9N
X29mZjsgfQoKICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gX01fb2ZmOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29m
ZikgeyBfTV9vZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+
IHN0cmVhbXBvczsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMg
NDcgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaW9zZndkIiAyIDMKIyAxICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3RtcC9pbnN0L2luY2x1
ZGUvYysrLzMuNC9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3RtcC9pbnN0L2luY2x1
ZGUvYysrLzMuNC9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZv
aWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRf
YWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAog
IF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxv
d19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0
IGNoYXIqIF9fcyk7Cn0KIyA0OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pb3Nmd2QiIDIg
MwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz
IGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAg
ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
c3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9j
YXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4s
CiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBf
QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVh
bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg
IGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVh
bWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKIyAxMzMgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvaW9zZndkIiAzCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5
cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lz
dHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFz
aWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJl
YW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hh
cj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJp
bmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRl
ZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFt
PGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoK
CiAgdHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVh
bWJ1Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90
PiB3aXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAg
dHlwZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNp
Y19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdz
dHJlYW08d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3Ry
ZWFtPHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFt
PHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+
IHdmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFz
aWNfZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKCgp9CiMgNDUgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvaW9zIiAyIDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2V4Y2VwdGlv
biIgMSAzCiMgNDAgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvZXhjZXB0aW9uIiAzCmV4dGVy
biAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKIyA1MiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMu
NC9leGNlcHRpb24iIDMKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0
aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAg
IHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFz
cyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRf
ZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRo
cm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAg
dHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5k
bGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRl
cm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRf
aGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2
b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgMTAwICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhj
ZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiMgMTE1ICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2V4Y2VwdGlvbiIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0
ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDYgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaW9zIiAy
IDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvY2hhcl90cmFpdHMuaCIgMSAz
CiMgNDQgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9jaGFyX3RyYWl0cy5oIiAzCgoj
IDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvY3N0cmluZyIgMSAzCiMgNDggIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvY3N0cmluZyIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKZXh0ZXJuICJDIiB7CgoK
CgojIDEgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAoKCgoK
ZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lk
ICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1l
bWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg
X19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRo
cm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19z
MSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAq
X19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9f
cywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu
IHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQog
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hh
ciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwg
X19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3Mx
LCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgojIDExNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKZXh0
ZXJuIGludCBzdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My
LCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAq
X19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f
bCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIg
KnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNjAgIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMyA0CgoKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBf
X2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0
cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIg
Kl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoK
ZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpf
X3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl
cm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2Nl
cHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hh
ciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ry
c3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpz
dHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k
ZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29u
c3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywg
c2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAq
X19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmlj
dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmlj
dCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lk
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVf
dCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJp
bmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwg
c2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQg
Kl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0
IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBf
X24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNo
YXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpf
X3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl
cm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBs
b25nIGludCBfX2xsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo
YXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z
dCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jYXNl
Y21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAo
Y2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZl
cnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwg
KGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jl
c3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93
ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAq
X19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
ZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7
CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0
aHJvdyAoKTsKIyAzNzkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0Cn0KIyA1MiAiL3RtcC9p
bnN0L2luY2x1ZGUvYysrLzMuNC9jc3RyaW5nIiAyIDMKIyA3NyAiL3RtcC9pbnN0L2luY2x1ZGUv
YysrLzMuNC9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVz
aW5nIDo6bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNp
bmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5n
IDo6c3RyY21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcg
OjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6
OnN0cnRvazsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6
c3RybGVuOwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQq
IF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxj
b25zdCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxp
bmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0
aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5n
IDo6c3RycGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBj
aGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFy
KgogIHN0cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ry
cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0
cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9f
czIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihf
X3MxKSwgX19zMik7IH0KfQojIDQ2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvY2hh
cl90cmFpdHMuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNjEgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvYml0cy9jaGFyX3RyYWl0cy5oIiAzCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgog
ICAgc3RydWN0IGNoYXJfdHJhaXRzCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBz
dHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAg
ICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAg
YXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAgICAgIHN0
YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBl
JiBfX2MyKTsKCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19j
MSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFy
ZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f
bik7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9f
cyk7CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJf
dHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSk7CgogICAgICBzdGF0
aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBl
KiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHko
Y2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAg
ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3Qg
X19uLCBjaGFyX3R5cGUgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hh
cl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAg
IHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBib29sCiAg
ICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19j
Mik7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCk7CgogICAgICBzdGF0aWMgaW50
X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKTsKICAgIH07CgoKCiAgdGVt
cGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVkZWYg
Y2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgaW50IGludF90eXBlOwogICAgICB0eXBlZGVm
IHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAg
ICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg
X19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlw
ZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9f
YzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAg
ICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3Qg
Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBtZW1jbXAoX19zMSwg
X19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hh
cl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3Qg
X19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNo
YXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z
Miwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVt
bW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAg
Y29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIs
IF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBl
KiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBj
aGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50
X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2Mp
KTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUm
IF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7
IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnRfdHlwZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9m
KGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6
IF9fYzsgfQogIH07CgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hh
cl90PgogICAgewogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVm
IHdpbnRfdCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAg
IHR5cGVkZWYgd3N0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3Rh
dGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEs
IGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3Rh
dGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm
IF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wK
ICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAg
ICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBh
cmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBf
X24pCiAgICAgIHsgcmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3Rh
dGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0
dXJuIHdjc2xlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBm
aW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9f
YSkKICAgICAgeyByZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGlj
IGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSog
X19zMiwgaW50X3R5cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBf
X24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19z
MSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVt
Y3B5KF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFz
c2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyBy
ZXR1cm4gd21lbXNldChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQog
ICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4gY2hhcl90eXBl
KF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBj
aGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJv
b2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBl
JiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRf
dHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKDB4ZmZmZmZm
ZmZ1KSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90
eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9f
YzsgfQogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwog
ICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsg
fQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVy
biBfVHJhaXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDcgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvaW9zIiAyIDMKCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRz
L2xvY2FsZWZ3ZC5oIiAxIDMKIyA0NCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2xv
Y2FsZWZ3ZC5oIiAzCgoKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysv
My40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDMKIyAxICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2Nsb2NhbGUiIDEgMwojIDQ4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysv
My40L2Nsb2NhbGUiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMgNAojIDI5ICIv
dXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNAojIDEgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNs
dWRlL2xvY2FsZS5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMg
NAojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMyA0CmVudW0KewogIF9fTENfQ1RZ
UEUgPSAwLAogIF9fTENfTlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBfX0xDX0NPTExB
VEUgPSAzLAogIF9fTENfTU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1LAogIF9fTENf
QUxMID0gNiwKICBfX0xDX1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9fTENfQUREUkVT
UyA9IDksCiAgX19MQ19URUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5UID0gMTEsCiAg
X19MQ19JREVOVElGSUNBVElPTiA9IDEyCn07CiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIg
MiAzIDQKCmV4dGVybiAiQyIgewojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNApzdHJ1
Y3QgbGNvbnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2Vw
OwoKCgoKCiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAg
Y2hhciAqY3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIg
Km1vbl90aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2
ZV9zaWduOwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAg
Y2hhciBmcmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5
X3NwYWNlOwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoK
CgoKCiAgY2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBpbnRf
cF9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25f
Y3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50
X3Bfc2lnbl9wb3NuOwogIGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNsdWRl
L2xvY2FsZS5oIiAzIDQKfTsKCgoKCgpleHRlcm4gY2hhciAqc2V0bG9jYWxlIChpbnQgX19jYXRl
Z29yeSwgX19jb25zdCBjaGFyICpfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBs
Y29udiAqbG9jYWxlY29udiAodm9pZCkgdGhyb3cgKCk7CgoKIyAxNDggIi91c3IvaW5jbHVkZS9s
b2NhbGUuaCIgMyA0CnR5cGVkZWYgX19sb2NhbGVfdCBsb2NhbGVfdDsKCgoKCgpleHRlcm4gX19s
b2NhbGVfdCBuZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hhciAqX19s
b2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2Jhc2UpIHRo
cm93ICgpOwojIDE4OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKZXh0ZXJuIF9fbG9jYWxl
X3QgZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2
b2lkIGZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIF9fbG9jYWxlX3QgdXNlbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7
CgoKCgoKCgp9CiMgNTAgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvY2xvY2FsZSIgMiAzCgoK
CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsK
ICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0KIyAzNyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9p
Njg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv
bGFuZ2luZm8uaCIgMSAzIDQKIyAyNCAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMgNAojIDEg
Ii91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAxIDMgNAojIDMxICIvdXNyL2luY2x1ZGUvbmxfdHlw
ZXMuaCIgMyA0CmV4dGVybiAiQyIgewoKCnR5cGVkZWYgdm9pZCAqbmxfY2F0ZDsKCgp0eXBlZGVm
IGludCBubF9pdGVtOwoKCmV4dGVybiBubF9jYXRkIGNhdG9wZW4gKF9fY29uc3QgY2hhciAqX19j
YXRfbmFtZSwgaW50IF9fZmxhZykgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpjYXRnZXRzIChu
bF9jYXRkIF9fY2F0YWxvZywgaW50IF9fc2V0LCBpbnQgX19udW1iZXIsCiAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNh
dGNsb3NlIChubF9jYXRkIF9fY2F0YWxvZykgdGhyb3cgKCk7Cgp9CiMgMjUgIi91c3IvaW5jbHVk
ZS9sYW5naW5mby5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAz
IDQKIyAyNyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMg
NDMgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzIDQKZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgo
KF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwKCiAgQUJEQVlfMiwKCiAgQUJEQVlfMywKCiAgQUJE
QVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwKCiAgQUJEQVlfNywKCgoKICBEQVlfMSwKCiAg
REFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwKCiAgREFZXzUsCgogIERBWV82LAoKICBEQVlfNywK
CgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoKICBBQk1PTl8zLAoKICBBQk1PTl80LAoKICBBQk1P
Tl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBBQk1PTl84LAoKICBBQk1PTl85LAoKICBB
Qk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEyLAoKCgogIE1PTl8xLAoKICBNT05fMiwK
CiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05fNSwKCiAgTU9OXzYsCgogIE1PTl83LAoKICBNT05f
OCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAgTU9OXzExLAoKICBNT05fMTIsCgoKICBBTV9TVFIs
CgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgogIERfRk1ULAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1Q
TSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwKCgoKICBFUkFfRF9GTVQsCgogIEFMVF9ESUdJVFMs
CgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9GTVQsCgoKICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJ
RVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMsCgogIF9OTF9XQUJEQVlfMSwKICBfTkxfV0FCREFZ
XzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9XQUJEQVlfNCwKICBfTkxfV0FCREFZXzUsCiAgX05M
X1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywKCgogIF9OTF9XREFZXzEsCiAgX05MX1dEQVlfMiwK
ICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQsCiAgX05MX1dEQVlfNSwKICBfTkxfV0RBWV82LAog
IF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9OXzEsCiAgX05MX1dBQk1PTl8yLAogIF9OTF9XQUJN
T05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05MX1dBQk1PTl81LAogIF9OTF9XQUJNT05fNiwKICBf
TkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84LAogIF9OTF9XQUJNT05fOSwKICBfTkxfV0FCTU9O
XzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05MX1dBQk1PTl8xMiwKCgogIF9OTF9XTU9OXzEsCiAg
X05MX1dNT05fMiwKICBfTkxfV01PTl8zLAogIF9OTF9XTU9OXzQsCiAgX05MX1dNT05fNSwKICBf
TkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAgX05MX1dNT05fOCwKICBfTkxfV01PTl85LAogIF9O
TF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAogIF9OTF9XTU9OXzEyLAoKICBfTkxfV0FNX1NUUiwK
ICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1RfRk1ULAogIF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZN
VCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9OTF9XRVJBX1lFQVIsCiAgX05MX1dFUkFfRF9GTVQs
CiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9XRVJBX0RfVF9GTVQsCiAgX05MX1dFUkFfVF9GTVQs
CgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAgX05MX1RJTUVfV0VFS18xU1REQVksCiAgX05MX1RJ
TUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1FX0ZJUlNUX1dFRUtEQVksCiAgX05MX1RJTUVfRklS
U1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxfRElSRUNUSU9OLAogIF9OTF9USU1FX1RJTUVaT05F
LAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RBVEVfRk1ULAoKICBfTkxfVElNRV9DT0RFU0VULAoK
ICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xMQVRFX05SVUxFUyA9ICgoKF9fTENfQ09M
TEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFURV9SVUxFU0VUUywKICBfTkxfQ09MTEFU
RV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1CLAogIF9OTF9DT0xMQVRFX0VYVFJBTUIs
CiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxfQ09MTEFURV9HQVAxLAogIF9OTF9DT0xM
QVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBfTkxfQ09MTEFURV9UQUJMRVdDLAogIF9O
TF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRFX0VYVFJBV0MsCiAgX05MX0NPTExBVEVf
SU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CLAogIF9OTF9DT0xMQVRF
X1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIsCiAgX05MX0NPTExBVEVf
Q09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFXQywKICBfTkxfQ09MTEFURV9DT0RFU0VU
LAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoKCiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19D
VFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZUEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQ
MSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxfQ1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xB
U1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBfTkxfQ1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQ
NSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZUEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NUWVBF
X01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lEVEgsCiAgX05MX0NUWVBFX01CX0NVUl9NQVgsCiAg
X05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFN
RSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwKICBfTkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9OTF9D
VFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NUWVBFX01BUF9PRkZTRVQsCiAgX05MX0NUWVBFX0lO
RElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMwX01CLAogIF9OTF9DVFlQRV9JTkRJ
R0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMz
X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNV9NQiwK
ICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAgX05M
X0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X01CLAogIF9OTF9DVFlQ
RV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NUWVBFX0lORElHSVRTMF9XQywKICBfTkxfQ1RZUEVf
SU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzJfV0MsCiAgX05MX0NUWVBFX0lORElH
SVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVf
V0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAog
IF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOV9XQywKICBfTkxf
Q1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDFfTUIsCiAgX05MX0NUWVBF
X09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQzX01CLAogIF9OTF9DVFlQRV9PVVRE
SUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2
X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwK
ICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCiAgX05M
X0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQyX1dDLAogIF9OTF9DVFlQ
RV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNF9XQywKICBfTkxfQ1RZUEVfT1VU
RElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDZfV0MsCiAgX05MX0NUWVBFX09VVERJR0lU
N19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfV0Ms
CiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9N
X0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElU
X1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJ
VF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJ
TkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRV9MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElU
X0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8y
LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAgX05M
X0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVf
RVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VYVFJBX01BUF84LAogIF9OTF9DVFlQRV9FWFRSQV9N
QVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEs
CiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAogIF9O
TF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05MX05VTV9MQ19DVFlQRSwKCgoKCiAgX19JTlRfQ1VS
Ul9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZKSA8PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VSUkVO
Q1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxfUE9JTlQsCgoKCiAgX19NT05fVEhPVVNBTkRT
X1NFUCwKCgoKICBfX01PTl9HUk9VUElORywKCgoKICBfX1BPU0lUSVZFX1NJR04sCgoKCiAgX19O
RUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNfRElHSVRTLAoKCgogIF9fRlJBQ19ESUdJVFMs
CgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgogIF9fUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19OX0NT
X1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19QX1NJR05fUE9TTiwKCgoK
ICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9DUk5DWVNUUiwKCiAgX19JTlRfUF9D
U19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9OX0NTX1BS
RUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5UX1BfU0lHTl9QT1NO
LAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJf
U1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVOQ1lfU1lNQk9MLAogIF9OTF9NT05FVEFS
WV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9OTF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAg
X05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TRVBf
QllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFS
WV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9DU19QUkVDRURF
UywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllf
RFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQ
QUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19O
X1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NJR05fUE9TTiwKICBfTkxfTU9O
RVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00s
CiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZS
T00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfQ09OVkVSU0lP
Tl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9NT05FVEFSWV9U
SE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05FVEFSWV9DT0RFU0VULAogIF9OTF9OVU1fTENfTU9O
RVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgoX19MQ19OVU1FUklDKSA8PCAxNikgfCAo
MCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9QT0lOVCwKCiAgX19USE9VU0FORFNfU0VQ
LAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAsCgogIF9fR1JPVVBJTkcsCgoKCiAgX05M
X05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dD
LAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAgX05MX05VTV9MQ19OVU1FUklDLAoKICBfX1lFU0VY
UFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAoMCkpLAoKICBfX05PRVhQUiwKCiAgX19Z
RVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTUVTU0FHRVNfQ09ERVNFVCwKICBfTkxfTlVN
X0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hUID0gKCgoX19MQ19QQVBFUikgPDwgMTYp
IHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05MX1BBUEVSX0NPREVTRVQsCiAgX05MX05V
TV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFNRV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2KSB8
ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4sCiAgX05MX05BTUVfTkFNRV9NUiwKICBfTkxfTkFN
RV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1FX01JU1MsCiAgX05MX05BTUVfTkFNRV9NUywKICBf
TkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1fTENfTkFNRSwKCiAgX05MX0FERFJFU1NfUE9TVEFM
X0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwgKDApKSwKICBfTkxfQUREUkVTU19DT1VO
VFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9QT1NULAogIF9OTF9BRERSRVNTX0NPVU5U
UllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIzLAogIF9OTF9BRERSRVNTX0NPVU5UUllf
Q0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLAogIF9OTF9BRERSRVNTX0NPVU5UUllfSVNC
TiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUsCiAgX05MX0FERFJFU1NfTEFOR19BQiwKICBfTkxf
QUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FERFJFU1NfTEFOR19MSUIsCiAgX05MX0FERFJFU1Nf
Q09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9G
TVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwgKDApKSwKICBfTkxfVEVMRVBIT05FX1RF
TF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NFTEVDVCwKICBfTkxfVEVMRVBIT05FX0lO
VF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9DT0RFU0VULAogIF9OTF9OVU1fTENfVEVMRVBIT05F
LAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQgPSAoKChfX0xDX01FQVNVUkVNRU5UKSA8
PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJFTUVOVF9DT0RFU0VULAogIF9OTF9OVU1fTENfTUVB
U1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNBVElPTl9USVRMRSA9ICgoKF9fTENfSURFTlRJRklD
QVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05MX0lERU5USUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxf
SURFTlRJRklDQVRJT05fQUREUkVTUywKICBfTkxfSURFTlRJRklDQVRJT05fQ09OVEFDVCwKICBf
TkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAgX05MX0lERU5USUZJQ0FUSU9OX1RFTCwKICBfTkxf
SURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9JREVOVElGSUNBVElPTl9MQU5HVUFHRSwKICBfTkxf
SURFTlRJRklDQVRJT05fVEVSUklUT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9BVURJRU5DRSwK
ICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElDQVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0FC
QlJFVklBVElPTiwKICBfTkxfSURFTlRJRklDQVRJT05fUkVWSVNJT04sCiAgX05MX0lERU5USUZJ
Q0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NBVEVHT1JZLAogIF9OTF9JREVOVElG
SUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1fTENfSURFTlRJRklDQVRJT04sCgoKICBfTkxfTlVN
Cn07CiMgNTc1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMyA0CmV4dGVybiBjaGFyICpubF9s
YW5naW5mbyAobmxfaXRlbSBfX2l0ZW0pIHRocm93ICgpOwojIDU4NiAiL3Vzci9pbmNsdWRlL2xh
bmdpbmZvLmgiIDMgNApleHRlcm4gY2hhciAqbmxfbGFuZ2luZm9fbCAobmxfaXRlbSBfX2l0ZW0s
IF9fbG9jYWxlX3QgbCk7CgoKfQojIDM4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2k2ODYt
cGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9pY29u
di5oIiAxIDMgNAojIDI0ICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMyA0CiMgMSAiL3RtcC9pbnN0
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMg
NAojIDI1ICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKCgp0eXBl
ZGVmIHZvaWQgKmljb252X3Q7CgoKCgpleHRlcm4gaWNvbnZfdCBpY29udl9vcGVuIChfX2NvbnN0
IGNoYXIgKl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIgKl9fZnJvbWNvZGUpCiAgICAgdGhyb3cgKCk7
CgoKCgpleHRlcm4gc2l6ZV90IGljb252IChpY29udl90IF9fY2QsIGNoYXIgKipfX3Jlc3RyaWN0
IF9faW5idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2luYnl0
ZXNsZWZ0LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX291dGJ1ZiwK
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fb3V0Ynl0ZXNsZWZ0KTsK
CgpleHRlcm4gaW50IGljb252X2Nsb3NlIChpY29udl90IF9fY2QpIHRocm93ICgpOwoKfQojIDM5
ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9j
YWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDEgMyA0CiMgMzUgIi91c3Iv
aW5jbHVkZS9saWJpbnRsLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKCmV4dGVybiBjaGFyICpnZXR0
ZXh0IChfX2NvbnN0IGNoYXIgKl9fbXNnaWQpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZGdl
dHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQp
CiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpfX2RnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9f
ZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAo
X19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpIHRocm93ICgpOwpleHRlcm4gY2hhciAq
X19kY2dldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpOwoKCgoKZXh0ZXJuIGNo
YXIgKm5nZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fbXNnaWQxLCBfX2NvbnN0IGNoYXIgKl9fbXNn
aWQyLAogICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDEpKSkgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpOwoKCgpleHRlcm4gY2hhciAqZG5nZXR0ZXh0IChfX2Nv
bnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQg
X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDMpKSk7CgoKCmV4dGVybiBjaGFyICpkY25n
ZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lk
MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2ln
bmVkIGxvbmcgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2NhdGVnb3J5
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0
dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDMpKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnRleHRk
b21haW4gKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNo
YXIgKmJpbmR0ZXh0ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZGlybmFtZSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoX19jb25zdCBjaGFyICpfX2Rv
bWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX2NvZGVzZXQpIHRocm93ICgpOwojIDEyMCAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIg
MyA0Cn0KIyA0MCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2MrK2xvY2FsZS5oIiAyIDMKCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgZXh0ZXJu
ICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOwp9CgoKbmFtZXNwYWNlIHN0ZAp7
CiAgdHlwZWRlZiBfX2xvY2FsZV90IF9fY19sb2NhbGU7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
dj4KICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3QgaW50IF9f
c2l6ZSwgY29uc3QgY2hhciogX19mbXQsCgogICAgICAgICAgICAgICAgICAgICBfVHYgX192LCBj
b25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMgPSAtMSkKICAgIHsKICAgICAgX19j
X2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKIyA3MyAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5o
IiAzCiAgICAgIGludCBfX3JldDsKCiAgICAgIGlmIChfX3ByZWMgPj0gMCkKICAgICAgICBfX3Jl
dCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CiAgICAgIGVs
c2UKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3YpOwoj
IDg3ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr
bG9jYWxlLmgiIDMKICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CgoKCgogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9Cn0KIyA0NyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9i
aXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2NsaW1p
dHMiIDEgMwojIDQ4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2NsaW1pdHMiIDMKCiMgMSAi
L3RtcC9pbnN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL2xpbWl0
cy5oIiAxIDMgNAojIDExICIvdG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My40L2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzIDQKCgoKCgoKIyAxICIv
dG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvbGltaXRz
LmgiIDEgMyA0CiMgMTIyICIvdG1wL2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My40L2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAz
IDQKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvcG9zaXgxX2xpbS5oIiAxIDMgNAojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xp
bS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzIDQKIyAzNiAi
L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW51
eC9saW1pdHMuaCIgMSAzIDQKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIg
MyA0CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMyA0CiMgMTQ1ICIv
dXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9z
aXgyX2xpbS5oIiAxIDMgNAojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoKCgoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1
ZGUvYml0cy94b3Blbl9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGlt
LmgiIDEgMyA0CiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMgNAojIDE1
MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDEyMyAiL3RtcC9pbnN0L2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDggIi90
bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zeXNsaW1p
dHMuaCIgMiAzIDQKIyAxMiAiL3RtcC9pbnN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuNC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDUwICIvdG1wL2luc3QvaW5jbHVkZS9jKysv
My40L2NsaW1pdHMiIDIgMwojIDQ4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvbG9j
YWxlZndkLmgiIDIgMwojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvY2N0eXBlIiAxIDMK
IyA0NyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jY3R5cGUiIDMKCgojIDEgIi91c3IvaW5j
bHVkZS9jdHlwZS5oIiAxIDMgNAojIDMwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVy
biAiQyIgewojIDQxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRl
L2VuZGlhbi5oIiAxIDMgNAojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMgNAojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFu
LmgiIDIgMyA0CiMgNDIgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMgNAoKCgoKCgplbnVtCnsK
ICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+
PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8
ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6
ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkg
PDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEg
PDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4
ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAo
KDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dy
YXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwK
ICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+
PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8
ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgp
IDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAo
MTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA4MSAiL3Vzci9pbmNsdWRlL2N0
eXBlLmgiIDMgNApleHRlcm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKipfX2N0eXBlX2Jf
bG9jICh2b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0KSk7CmV4dGVybiBfX2NvbnN0
IF9faW50MzJfdCAqKl9fY3R5cGVfdG9sb3dlcl9sb2MgKHZvaWQpCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3QpKTsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICoqX19jdHlwZV90b3VwcGVy
X2xvYyAodm9pZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdCkpOwojIDk2ICIvdXNyL2lu
Y2x1ZGUvY3R5cGUuaCIgMyA0CgoKCgoKCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1
bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQg
aXNibGFuayAoaW50KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2N0eXBlIChpbnQgX19j
LCBpbnQgX19tYXNrKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19j
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAo
aW50KSB0aHJvdyAoKTsKIyAyNDcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKZXh0ZXJuIGlu
dCBpc2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBo
YV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmxfbCAoaW50
LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0X2wgKGludCwgX19sb2Nh
bGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRo
cm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBpc3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgaXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3Bh
Y2VfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyX2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXRfbCAoaW50LCBfX2xv
Y2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaXNibGFua19sIChpbnQsIF9fbG9jYWxlX3Qp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90
IF9fbCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90
IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2Nh
bGVfdCBfX2wpIHRocm93ICgpOwpleHRlcm4gaW50IHRvdXBwZXJfbCAoaW50IF9fYywgX19sb2Nh
bGVfdCBfX2wpIHRocm93ICgpOwojIDMyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAp9CiMg
NTAgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvY2N0eXBlIiAyIDMKIyA2NiAiL3RtcC9pbnN0
L2luY2x1ZGUvYysrLzMuNC9jY3R5cGUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2Fs
bnVtOwogIHVzaW5nIDo6aXNhbHBoYTsKICB1c2luZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2Rp
Z2l0OwogIHVzaW5nIDo6aXNncmFwaDsKICB1c2luZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3By
aW50OwogIHVzaW5nIDo6aXNwdW5jdDsKICB1c2luZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3Vw
cGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91
cHBlcjsKfQojIDQ5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvbG9jYWxlZndkLmgi
IDIgMwojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvc3RyaW5nIiAxIDMKIyA0NCAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9zdHJpbmciIDMKCgoKCiMgMSAiL3RtcC9pbnN0L2luY2x1
ZGUvYysrLzMuNC9tZW1vcnkiIDEgMwojIDUzICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L21l
bW9yeSIgMwoKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDEgMwojIDY3ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2NzdGRsaWIiIDEgMwojIDQ4ICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2NzdGRsaWIiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAxIDMgNAojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAojIDEgIi90
bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKZXh0ZXJuICJDIiB7
CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgiIDEgMyA0CiMgNDMgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3Rh
dHVzLmgiIDEgMyA0CiMgNjUgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMyA0CnVu
aW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAg
ICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2Nv
cmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5z
aWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVj
dAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVu
c2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoK
ICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDIgMyA0CiMgOTMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgoKdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1
Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoK
CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQg
cXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKCgojIDEzNyAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4
ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpf
X25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBh
dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBzdHJ0
b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs
ZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cg
KCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVu
c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgp
OwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRl
bnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93
ICgpOwoKIyAyMjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBsb25nIGludCBz
dHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1
bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBzdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
X19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc3RydG9kX2wg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93
ICgpOwoKZXh0ZXJuIGZsb2F0IHN0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBf
X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkX2wg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBf
X3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRo
cm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IF9f
c3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3Vw
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5h
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBf
X2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
X19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh
c2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWdu
ZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKQogICAgIHRo
cm93ICgpOwojIDQwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKmw2
NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29u
c3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5
cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBf
X3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFk
X3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZf
dCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0
X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKIyA3MSAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9f
bmxpbmtfdCBubGlua190OwojIDEwNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlw
ZWRlZiBfX2lkX3QgaWRfdDsKIyAxMTUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5
cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoK
dHlwZWRlZiBfX2tleV90IGtleV90OwojIDE0MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
IDQKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMgMSAiL3RtcC9pbnN0
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMg
NAojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5
cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDMgNAp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18p
KSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18p
KSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p
KSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18p
KSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVm
IGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMg
MjE1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMv
c2VsZWN0LmgiIDEgMyA0CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMyA0
CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CiMgNDYgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzIDQK
IyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzIDQKc3RydWN0IHRpbWV2YWwKICB7CiAg
ICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAi
L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKIyA1NSAiL3Vzci9pbmNsdWRlL3N5cy9z
ZWxlY3QuaCIgMyA0CnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwojIDY3ICIvdXNyL2luY2x1
ZGUvc3lzL3NlbGVjdC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sg
ZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3Nl
dDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50
IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAg
IGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2
YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBzZWxl
Y3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAg
ICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAg
ICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93ICgpOwoK
Cn0KIyAyMTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMyA0CiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDIgMyA0CgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRl
ZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90
OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1NyAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRl
ZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNm
aWxjbnQ2NF90OwoKCn0KIyA0MTUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoKCgoK
ZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3Jh
bmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmlu
aXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hh
ciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJh
bmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBp
bnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBp
bnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRv
bV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19i
dWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2Vl
ZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAo
Y2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp
bnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50
IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpf
X3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJv
dyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVsz
XSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpl
eHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJu
IGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAo
KTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpl
eHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3Nl
ZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBp
bnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAg
IHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRf
eFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg
X19pbml0OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50
IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJp
Y3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hv
cnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQg
Kl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChz
dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAg
ICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50
IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAg
ICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5z
aWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3Ig
KHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKCgoKCgoKCgpleHRlcm4gdm9p
ZCAqbWFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs
b2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3Np
emUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKCmV4
dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9f
cHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cg
KCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1
ZGUvYWxsb2NhLmgiIDMgNAojIDEgIi90bXAvaW5zdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9j
YS5oIiAyIDMgNAoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90
IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU3NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy
IDMgNAoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24g
KHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gdm9pZCBh
Ym9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpl
eHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9f
YXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIGV4aXQg
KGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK
CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3Qg
Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYg
KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAo
Y2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjYx
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpf
X3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190
ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjc4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRl
cm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjg4ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1w
bGF0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19j
b21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9u
YW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNzEyICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jl
c29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19j
b25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29t
cGFyaXNvbl9mbl90OwoKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpf
X2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVy
biB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXpl
LAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBp
bnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4
dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFi
cyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9t
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZf
dCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxs
ZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiMgNzc2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMg
NApleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19z
aWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRv
dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAg
ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3Qg
X19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVj
cHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQg
KGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu
dCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25n
IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAg
ICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf
X3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90
IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAq
X19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAq
X19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFy
ICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93
Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVy
biBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpf
X3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4
dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoK
CmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoK
CgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5s
b2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQg
X19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hh
ciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAo
dm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9h
ZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDUzICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2NzdGRsaWIiIDIgMwojIDg0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40
L2NzdGRsaWIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6Omxk
aXZfdDsKCiAgdXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsK
ICB1c2luZyA6OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6
OmJzZWFyY2g7CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0
OwogIHVzaW5nIDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNp
bmcgOjpsZGl2OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjpt
YnN0b3djczsKICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFu
ZDsKICB1c2luZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsK
ICB1c2luZyA6OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAg
dXNpbmcgOjp3Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMo
bG9uZyBfX2kpIHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxv
bmcgX19pLCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEzNiAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jc3RkbGliIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewog
IHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAg
YWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBp
bmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAg
PyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxv
bmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5y
ZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihs
b25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0g
X19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6
YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3Ry
dG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2du
dV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9j
eHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2
OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1
c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNp
bmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA2
OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMg
MSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9uZXciIDEgMwojIDQ0ICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L25ldyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoK
ICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJh
ZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7
CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBu
b3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5kbGVy
IHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsKfQojIDgyICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L25ldyIgMwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRo
cm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0
aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3co
KTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3Ig
bmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQqIG9w
ZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7
CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93
KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190Jikg
dGhyb3coKTsKCgppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBf
X3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShz
dGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlubGluZSB2
b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfQppbmxpbmUgdm9p
ZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9Cgp9CiMgNzAgIi90
bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi90
bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAiL3RtcC9p
bnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoK
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBf
VDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0Owog
IF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgogIHBh
aXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChf
X2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBw
YWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25k
KSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBf
X3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9v
bCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAgKCEo
X195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJl
dHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp
cjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8
IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvYml0cy9zdGxfcGFpci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KCgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKF9UMSBfX3gsIF9UMiBfX3kpCgoK
CnsKICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOwp9Cgp9CiMgNzIgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3RtcC9pbnN0
L2luY2x1ZGUvYysrLzMuNC9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDUzICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2JpdHMvdHlwZV90cmFpdHMuaCIgMwojIDkwICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5cGUge307
CnN0cnVjdCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190
eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVz
dF9iZV9maXJzdDsKIyAxMTMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy90eXBlX3Ry
YWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hh
cj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
dHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5
cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5
cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50
ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190
cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2ln
bmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+
IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVk
ZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVn
ZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07
Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAg
dHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNz
IF9fbm9ybWFsX2l0ZXJhdG9yOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVu
YW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBfX2dudV9jeHg6Ol9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMv
c3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi90bXAvaW5zdC9pbmNsdWRlL2Mr
Ky8zLjQvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsK
IyA4MCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5
cGVzLmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qgb3V0cHV0
X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGlj
IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307
CiMgMTAyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2Vf
dHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlwZW5hbWUgX1BvaW50
ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0cnVjdCBpdGVyYXRv
cgogICAgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAg
ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVy
ZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRl
ZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5j
ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVy
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsK
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFp
dHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVm
IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwog
ICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVk
ZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29u
c3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9j
YXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJldHVy
biB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9
Cgp9CiMgNzQgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MiAzCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRvcl9iYXNl
X2Z1bmNzLmgiIDEgMwojIDY4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0
cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Jp
dHMvY29uY2VwdF9jaGVjay5oIiAzCiMgNjkgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0
cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgX19kaXN0YW5jZShf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgogICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAg
ICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgKytfX2ZpcnN0OyArK19fbjsK
ICAgICAgfQogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgX19kaXN0YW5jZShfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAog
ICAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICAgIH0KIyAxMDkgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBkaXN0YW5jZShfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICB7CgogICAgICByZXR1
cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlz
dGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rp
c3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKICAgICAgd2hpbGUg
KF9fbi0tKSArK19faTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ
dGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIF9fYWR2YW5j
ZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAg
ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9f
biA+IDApCiAgICAgICAgd2hpbGUgKF9fbi0tKSArK19faTsKICAgICAgZWxzZQogICAgICAgIHdo
aWxlIChfX24rKykgLS1fX2k7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIF9fYWR2
YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAg
ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCiAgICAgIF9faSAr
PSBfX247CiAgICB9CiMgMTYyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y
LCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgYWR2YW5jZShfSW5wdXRJ
dGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQogICAgewoKICAgICAgX19hZHZhbmNlKF9faSwg
X19uLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwogICAgfQp9CiMgNzUgIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3RtcC9pbnN0L2lu
Y2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRvci5oIiAxIDMKIyA2OCAiL3RtcC9pbnN0L2lu
Y2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDg5
ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6
IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRl
cmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRl
ciwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJy
ZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVy
OwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsgfQoKCgoKICAgICAg
ZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJy
ZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRl
cmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7IH0KCgoKCgogICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBjdXJyZW50KF9feC5iYXNlKCkp
IHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4g
Y3VycmVudDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QK
ICAgICAgewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICAgICAgcmV0dXJu
ICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRl
cmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgLS1jdXJyZW50OwogICAg
ICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAg
ICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3Rt
cCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAg
IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAg
IHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoK
CiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCiAgICAgIHsKICAgICAgICBy
ZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytjdXJyZW50OwogICAgICAg
IHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAg
IG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZl
cnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAg
IGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAg
ICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBj
b25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CgoK
CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90
eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19uOwogICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZm
ZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQogICAgfTsK
IyAyNjkgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9f
eC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3gg
PT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAog
ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAg
eyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX194LAogICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSAt
IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkKICAgIHsgcmV0dXJuIHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsgfQojIDMyOSAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6
IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2
b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7Cgog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkg
OiBjb250YWluZXIoJl9feCkgeyB9CiMgMzU1ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Jp
dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAg
ICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgog
ICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9p
dGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMg
Mzg2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsg
cmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KIyA0MDEgIi90
bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3IKICAg
IDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQs
IHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsK
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoK
ICAgICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBj
b250YWluZXIoJl9feCkgeyB9CiMgNDI2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMv
c3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAg
IHsKICAgICAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgICB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsK
IyA0NTcgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgZnJvbnRfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAg
ICB7IHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQ3
NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcgogICAg
OiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwg
dm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwog
ICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwoKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgoKCgogICAgICBpbnNlcnRf
aXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBf
X2kpCiAgICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KIyA1MTggIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRl
cmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9y
ZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2Vy
dChpdGVyLCBfX3ZhbHVlKTsKICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVy
biAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsg
cmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisr
KGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNTUwICIvdG1wL2luc3QvaW5jbHVkZS9j
KysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFp
bmVyLCB0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+CiAgICBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCiAgICB7
CiAgICAgIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJh
dG9yKF9faSkpOwogICAgfQp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKCgoKCgoKCiAgdXNpbmcg
c3RkOjppdGVyYXRvcl90cmFpdHM7CiAgdXNpbmcgc3RkOjppdGVyYXRvcjsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBfX25vcm1h
bF9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3Rl
Y3RlZDoKICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgICBf
X25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9CgogICAgICBl
eHBsaWNpdAogICAgICBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfSXRlcmF0b3ImIF9faSkgOiBf
TV9jdXJyZW50KF9faSkgeyB9CgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAg
IGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwg
X0NvbnRhaW5lcj4mIF9faSkKICAgICAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CgoK
ICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJy
ZW50OyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBf
TV9jdXJyZW50OyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygp
IHsgKytfTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y
CiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJy
ZW50KyspOyB9CgoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKSB7
IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgog
ICAgICBvcGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVu
dC0tKTsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVu
Y2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0KCiAg
ICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2Vf
dHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAg
ICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5
cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVu
dCArIF9fbik7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGNv
bnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1
cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShjb25z
dCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRl
cmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0KCiAgICAgIGNvbnN0IF9JdGVyYXRvciYKICAgICAg
YmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAgIH07CiMgNjUxICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVy
PgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMu
YmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3Is
IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAg
ICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMp
CiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19s
aHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg
ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19y
aHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0Nv
bnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBf
X2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg
ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19y
aHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250
YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19s
aHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
ciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg
ICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMp
CiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWlu
ZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo
cy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
ciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAg
ICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3Jo
cykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250
YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBf
X2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAg
ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBf
X3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFt
ZSBfQ29udGFpbmVyPgogIGlubGluZSB0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JMLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgb3BlcmF0b3ItKGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg
IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykK
ICB7IHJldHVybiBfX2xocy5iYXNlKCkgLSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+CiAgb3BlcmF0b3IrKHR5cGVuYW1lIF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24s
CiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5l
cj4mIF9faSkKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cn0KIyA3NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMu
NC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA5MSAiL3RtcC9p
bnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlubGluZSB2
b2lkCiAgICBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIx
Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTI7CgoKICAgICAK
ICAgICAKICAgICAKICAgICAKCiAgICAgIF9WYWx1ZVR5cGUxIF9fdG1wID0gKl9fYTsKICAgICAg
Kl9fYSA9ICpfX2I7CiAgICAgICpfX2IgPSBfX3RtcDsKICAgIH0KIyAxMTggIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKICAgIHsK
CiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAgIF9fYSA9IF9fYjsKICAgICAgX19i
ID0gX190bXA7CiAgICB9CiMgMTQ2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3Qg
X1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAg
CgogICAgICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE2
NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChjb25zdCBf
VHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYSA8IF9f
YikgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAxODYgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9U
cCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYg
KF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjA0ICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYK
ICAgIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19h
OwogICAgfQojIDIyMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0
ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAg
ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0
SXRlcgogICAgX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAg
ICAgIF9EaXN0YW5jZTsKICAgICAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJz
dDsgX19uID4gMDsgLS1fX24pIHsKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg
ICArK19fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAg
ICBfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf
VHAqIF9fcmVzdWx0KQogICAgewogICAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXpl
b2YoX1RwKSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChf
X2xhc3QgLSBfX2ZpcnN0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9h
dXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4MihfVHAqIF9fZmlyc3QsIF9U
cCogX19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAg
ICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIo
Y29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9U
cCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29w
eV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAg
ICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1
ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlh
bDsKICAgICAgcmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LmJhc2UoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Ucml2aWFsKCkpKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBp
bmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFs
c2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYXV4Mihf
X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Ucml2aWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRl
cgogICAgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9O
b3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBf
X2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRw
dXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRl
cj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQojIDMzOSAiL3RtcC9pbnN0L2luY2x1
ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAg
IGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIg
X19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgICBy
ZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsK
ICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAg
ICBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19yZXN1
bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4K
ICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uOwogICAgICBm
b3IgKF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgICAgICotLV9f
cmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jvb2xUeXBlPgogICAgc3RydWN0IF9f
Y29weV9iYWNrd2FyZF9kaXNwYXRjaAogICAgewogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJ
dGVyMgogICAgICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkK
ICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQogICAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9k
aXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoK
ICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9f
cmVzdWx0KQogICAgICB7CiAgICAgICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBf
X2ZpcnN0OwogICAgICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2Yo
X1RwKSAqIF9OdW0pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgICAgIH0KICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRf
ZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0YXRp
YyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwg
X1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlz
cGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgICAgICA6OmNvcHkoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C
STEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2F1
eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
STI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3
YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgICAgICA6OmNv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2Fy
ZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3Ry
dWVfdHlwZSkKICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0
eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRf
bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUp
CiAgICB7IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5s
aW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBf
X2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAg
cmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFz
ZSgpLCBfX2xhc3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlf
YmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQs
IF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0
ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3
YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFs
KCkpOwogICAgfQojIDQ3NyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBp
bmxpbmUgX0JJMgogICAgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBf
QkkyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAg
ICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA1MDkgIi90bXAvaW5zdC9pbmNsdWRlL2Mr
Ky8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAK
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAqX19m
aXJzdCA9IF9fdmFsdWU7CiAgICB9CiMgNTMxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlw
ZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICBmaWxsX24oX091
dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7Cgog
ICAgIAoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpf
X2ZpcnN0ID0gX192YWx1ZTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCiAgaW5saW5l
IHZvaWQKICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFz
dCwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogIHsKICAgIHVuc2lnbmVkIGNoYXIgX190bXAg
PSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0K
CiAgaW5saW5lIHZvaWQKICBmaWxsKHNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciog
X19sYXN0LCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogIHsKICAgIHNpZ25lZCBjaGFyIF9fdG1w
ID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9f
dG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoY2hhciog
X19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCiAgewogICAgY2hhciBfX3Rt
cCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihf
X3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+
CiAgICBpbmxpbmUgdW5zaWduZWQgY2hhcioKICAgIGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmls
bChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9f
bjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgc2lnbmVkIGNo
YXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hh
ciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAg
ICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6
ZT4KICAgIGlubGluZSBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwg
Y29uc3QgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24s
IF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQojIDYwNiAiL3RtcC9pbnN0
L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxfSW5wdXRJdGVy
MSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgICAgICsrX19maXJzdDE7CiAgICAg
ICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lu
cHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNh
dGU+CiAgICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4KICAgIG1pc21hdGNoKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By
ZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICArK19fZmly
c3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0lucHV0
SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwogICAgfQojIDY2OCAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgaW5saW5lIGJv
b2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoK
CgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJz
dDIpCiAgICAgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDY5OSAiL3RtcC9pbnN0L2luY2x1
ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl
PgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICBf
QmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAg
Zm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAg
ICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDczMiAiL3RtcC9pbnN0L2lu
Y2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAgbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZv
ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAg
ICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAq
X19maXJzdDIpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoKl9fZmlyc3QyIDwg
Kl9fZmlyc3QxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBf
X2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CiMgNzY3ICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg
ICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAg
ICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpf
X2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz
dDI7CiAgICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3Qg
dW5zaWduZWQgY2hhciogX19maXJzdDEsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9
IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0g
X19maXJzdDI7CiAgICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmly
c3QyLCBzdGQ6Om1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAg
PyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBj
b25zdCBjaGFyKiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBh
cmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3Qy
KTsKCgoKCgoKICB9Cgp9CiMgNTUgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvbWVtb3J5IiAy
IDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsbG9jLmgiIDEgMwoj
IDg4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Nhc3NlcnQiIDEgMwojIDQ3ICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMg
NAojIDY1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMgNApleHRlcm4gIkMiIHsKCgpleHRlcm4g
dm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNo
YXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGlu
ZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50
IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNo
YXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyA0OSAiL3RtcC9pbnN0
L2luY2x1ZGUvYysrLzMuNC9jYXNzZXJ0IiAyIDMKIyA4OSAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40
L2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQv
Yml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9leGNl
cHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRz
L2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5
cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGlt
ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0K
IyA5MCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAx
ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMgNTQg
Ii90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFj
ZSBzdGQKewoKCgoKICBzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBzaXpl
X3QgX1JDX3Q7CgoKICAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgogICAgX19ndGhy
ZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xvY2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JDX3Qg
X19uKSA6IF9NX3JlZl9jb3VudChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBf
X3RtcCA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAgICAg
IF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7CgoKCgoKICAgIH0KCiAgICB2b2lkCiAgICBfTV9p
bmNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2Nr
KTsKICAgICAgKytfTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9N
X3JlZl9jb3VudF9sb2NrKTsKICAgIH0KCiAgICBfUkNfdAogICAgX01fZGVjcigpCiAgICB7CiAg
ICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHZvbGF0
aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91
bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07
CiMgMTA5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3RocmVhZHMuaCIgMwog
IHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgc3RydWN0IF9Td2FwX2xvY2tfc3RydWN0CiAgICB7
IHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhfdCBfU19zd2FwX2xvY2s7IH07CgogIHRlbXBsYXRlPGlu
dCBfX2R1bW15PgogICAgX19ndGhyZWFkX211dGV4X3QKICAgIF9Td2FwX2xvY2tfc3RydWN0PF9f
ZHVtbXk+OjpfU19zd2FwX2xvY2sgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwg
eyAwLCAwIH19OwoKCgogIGlubGluZSB1bnNpZ25lZCBsb25nCiAgX0F0b21pY19zd2FwKHVuc2ln
bmVkIGxvbmcgKiBfX3AsIHVuc2lnbmVkIGxvbmcgX19xKQogIHsKICAgIF9fZ3RocmVhZF9tdXRl
eF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHVuc2lnbmVk
IGxvbmcgX19yZXN1bHQgPSAqX19wOwogICAgKl9fcCA9IF9fcTsKICAgIF9fZ3RocmVhZF9tdXRl
eF91bmxvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgcmV0dXJu
IF9fcmVzdWx0OwogIH0KCn0KIyAxNTUgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9z
dGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sK
ICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01f
aW5pdGlhbGl6ZSgpCiAgICB7CiMgMTkyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMv
c3RsX3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAgIF9NX2FjcXVpcmVfbG9jaygpCiAg
ICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsKICAgIH0KCiAgICB2
b2lkCiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhf
dW5sb2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyOCAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sKICB7CiAg
ICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7CgogICAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRl
eF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWly
ZV9sb2NrKCk7IH0KCiAgICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9s
b2NrKCk7IH0KCiAgcHJpdmF0ZToKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0b19s
b2NrJik7CiAgICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogIH07Cgp9
CiMgOTEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgoj
IDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9hdG9t
aWNpdHkuaCIgMSAzCiMgMzMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9hdG9taWNpdHkuaCIgMwp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0
aWMgaW5saW5lIF9BdG9taWNfd29yZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhj
aGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7
CiAgcmVnaXN0ZXIgX0F0b21pY193b3JkIF9fcmVzdWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9f
ICgibG9jazsgeGFkZGwgJTAsJTIiCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoX19y
ZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVt
KQogICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7
Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRv
bWljX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19h
c21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAg
ICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpfX21lbSkgOiAibWVtb3J5Iik7Cn0KIyA5MyAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewojIDEwNCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5o
IiAzCiAgY2xhc3MgX19uZXdfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGljIHZvaWQqCiAg
ICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gOjpvcGVyYXRvciBuZXcoX19uKTsg
fQoKICAgIHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90KQogICAg
eyA6Om9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9CiAgfTsKIyAxMjcgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBj
bGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0ZToKICAgICAgc3Rh
dGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKCgoKICAgICAgc3RhdGljIHZvaWQgKCog
X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgogICAgcHVibGljOgogICAgICBzdGF0aWMg
dm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9f
cmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1
bHQgPT0gMCwgMCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAg
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRl
YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKQogICAgICB7IGZyZWUoX19wKTsgfQojIDE2MiAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgICAgIHN0YXRp
YyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgICAgIHsK
ICAgICAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAg
ICAgICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICAgICAgcmV0dXJuIF9f
b2xkOwogICAgICB9CiAgICB9OwoKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIHZvaWQgKCog
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXIpKCkgPSAwOwoKICB0ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPF9faW5zdD46OgogICAgX1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQog
ICAgewogICAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9f
cmVzdWx0OwoKICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBfX215X21hbGxvY19o
YW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgICBpZiAoX19idWls
dGluX2V4cGVjdChfX215X21hbGxvY19oYW5kbGVyID09IDAsIDApKQogICAgICAgICAgICBfX3Ro
cm93X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAg
ICAgICAgX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAg
ICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgIH0KIyAyMTcgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxsb2MuaCIgMwogIHR5cGVkZWYgX19uZXdfYWxs
b2MgX19tZW1faW50ZXJmYWNlOwojIDIzMCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRz
L3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogICAgewogICAgcHVibGljOgogICAgICBzdGF0aWMg
X1RwKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgX1RwKiBfX3Jl
dCA9IDA7CiAgICAgICAgaWYgKF9fbikKICAgICAgICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1Rw
Kj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpOwogICAgICAgIHJldHVybiBf
X3JldDsKICAgICAgfQoKICAgICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUoKQogICAgICB7
IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgICBz
dGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgICB7
IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHAp
KTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAg
eyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgICB9OwojIDI3MSAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX19kZWJ1Z19hbGxvYwogICAgewogICAgcHJpdmF0
ZToKCgogICAgICBlbnVtIHtfU19leHRyYSA9IDh9OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGlj
IHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFyKiBf
X3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsK
ICAgICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0
ICsgKGludCkgX1NfZXh0cmE7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxs
b2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgY2hhciogX19yZWFs
X3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgICAgKHN0YXRpY19jYXN0PHZv
aWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIq
KHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0
cy9zdGxfYWxsb2MuaCIsIDI5MiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAg
X0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICAg
IH0KIyAzMDkgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxsb2MuaCIgMwog
ICAgfTsKIyAzNDIgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxsb2MuaCIg
MwogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2xhc3MgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBlbnVtIHtfQUxJR04g
PSA4fTsKICAgICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICAgIGVudW0ge19ORlJFRUxJ
U1RTID0gX01BWF9CWVRFUyAvIF9BTElHTn07CgogICAgICB1bmlvbiBfT2JqCiAgICAgIHsKICAg
ICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBjaGFyIF9NX2NsaWVu
dF9kYXRhWzFdOwogICAgICB9OwoKICAgICAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVf
bGlzdFtfTkZSRUVMSVNUU107CgoKICAgICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAg
ICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgICAgc3RhdGljIHNpemVfdCBfU19oZWFw
X3NpemU7CgogICAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xv
Y2s7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVz
KQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAmIH4oKHNp
emVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX2ZyZWVs
aXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChz
aXplX3QpX0FMSUdOIC0gMSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgICBzdGF0aWMg
dm9pZCoKICAgICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgICBzdGF0aWMgY2hhcioK
ICAgICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgoKICAg
ICAgc3RydWN0IF9Mb2NrCiAgICAgIHsKICAgICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykg
X1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICAgIH5fTG9j
aygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xv
Y2soKTsgfQogICAgICB9IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICAgIGZyaWVu
ZCBzdHJ1Y3QgX0xvY2s7CgogICAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2ZvcmNlX25ldzsK
CiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9f
bikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmV0ID0gMDsKCgoKCiAgICAgICAgaWYgKF9TX2Zv
cmNlX25ldyA9PSAwKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoZ2V0ZW52KCJHTElCQ1BQ
X0ZPUkNFX05FVyIpKQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgmX1NfZm9yY2VfbmV3LCAx
KTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgmX1NfZm9yY2Vf
bmV3LCAtMSk7CgogICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChfU19mb3JjZV9uZXcg
IT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJfU19mb3JjZV9uZXcgIT0gMCIsICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsbG9jLmgiLCA0MTEsIF9fUFJFVFRZX0ZVTkNU
SU9OX18pLCAwKSkpOwogICAgICAgICAgfQoKICAgICAgICBpZiAoKF9fbiA+IChzaXplX3QpIF9N
QVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgICAgICAgIF9fcmV0ID0gX19uZXdf
YWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAg
ICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAg
ICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAgICAgICAgICAgIF9Mb2NrIF9fbG9j
a19pbnN0YW5jZTsKICAgICAgICAgICAgX09iaiogX19yZXN0cmljdF9fIF9fcmVzdWx0ID0gKl9f
bXlfZnJlZV9saXN0OwogICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3Jlc3VsdCA9
PSAwLCAwKSkKICAgICAgICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24p
KTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICpfX215
X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAg
ICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfX2J1
aWx0aW5fZXhwZWN0KF9fcmV0ID09IDAsIDApKQogICAgICAgICAgICAgIF9fdGhyb3dfYmFkX2Fs
bG9jKCk7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAg
c3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICAg
IHsKICAgICAgICBpZiAoKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHx8IChfU19mb3JjZV9u
ZXcgPiAwKSkKICAgICAgICAgIF9fbmV3X2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAg
ICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2Zy
ZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICAgICsgX1NfZnJlZWxpc3RfaW5kZXgo
X19uKTsKICAgICAgICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsKCgoKCiAgICAgICAgICAg
IF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9s
aW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7
CiAgICAgICAgICB9CiAgICAgIH0KCgoKCgogICAgfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+IF9BdG9taWNfd29yZAogIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD46Ol9TX2ZvcmNlX25ldyA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3Qg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+JiwKICAgICAgICAgICAg
ICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+JikKICAg
IHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0K
CgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhcioKICAg
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46OgogICAgX1NfY2h1
bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKQogICAgewogICAgICBjaGFyKiBf
X3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwog
ICAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOwoK
ICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQogICAgICAgIHsKICAgICAg
ICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0g
X190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdCA7CiAgICAgICAgfQogICAg
ICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9f
bm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICAgIF9fdG90YWxfYnl0
ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVl
OwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHNp
emVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nf
cm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICAgIGlmIChfX2J5dGVzX2xlZnQg
PiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJl
ZV9saXN0ID0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4
KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkgLT4g
X01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgKl9fbXlf
ZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICAgIH0KICAgICAgICAg
IF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbmV3X2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3Rv
X2dldCk7CiAgICAgICAgICBpZiAoX1Nfc3RhcnRfZnJlZSA9PSAwKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19t
eV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAgICAgICAgIF9f
aSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChzaXplX3QpIF9NQVhfQllU
RVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo
X19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAg
ICAgICAgICBpZiAoX19wICE9IDApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAg
ICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAg
ICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKTsKCgogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfU19lbmRf
ZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX25ld19hbGxv
Yzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAgICAgICAgIH0KICAgICAgICAgIF9T
X2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nf
c3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0dXJuIF9TX2NodW5rX2Fs
bG9jKF9fc2l6ZSwgX19ub2Jqcyk7CiAgICAgICAgfQogICAgfQoKCgoKCiAgdGVtcGxhdGU8Ym9v
bCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCiAgICB7CiAg
ICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxv
YyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAg
ICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgICBfT2Jq
KiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19ub2JqcykKICAg
ICAgICByZXR1cm4gX19jaHVuazsKICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3Qg
KyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1
bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsg
KyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspCiAgICAgICAgewogICAgICAgICAg
X19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgICBfX25leHRfb2JqID0gKF9PYmoq
KSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0g
X19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVl
X2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9
IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgNjE1
ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0
ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIF9TVExfbXV0ZXhfbG9jawogICAgX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRv
cl9sb2NrCiAgICA9IHsgezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9
fSB9OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9
IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciogX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7
CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgc2l6ZV90IF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsK
CiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB0eXBlbmFtZSBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAg
ICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX2ZyZWVfbGlz
dFtfTkZSRUVMSVNUU107CgogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUs
MD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwwPiBf
X3NpbmdsZV9jbGllbnRfYWxsb2M7CiMgNjUxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Jp
dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBhbGxv
Y2F0b3IKICAgIHsKICAgICAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKICAgIHB1YmxpYzoKICAg
ICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNv
bnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAg
ICAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0
IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CgogICAg
ICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3Im
KSB0aHJvdygpIHt9CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYWxsb2Nh
dG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICAgICAgfmFsbG9jYXRvcigp
IHRocm93KCkge30KCiAgICAgIHBvaW50ZXIKICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBj
b25zdCB7IHJldHVybiAmX194OyB9CgogICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3Mo
Y29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCgogICAgICBfVHAq
CiAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgewog
ICAgICAgIF9UcCogX19yZXQgPSAwOwogICAgICAgIGlmIChfX24pCiAgICAgICAgICB7CiAgICAg
ICAgICAgIGlmIChfX24gPD0gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgICBfX3JldCA9
IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsK
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAg
ICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBk
ZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9BbGxvYzo6ZGVh
bGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg
IG1heF9zaXplKCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9U
cCk7IH0KCiAgICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFs
KSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19w
KSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBhbGxvY2F0
b3I8dm9pZD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBl
OwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYg
dm9pZCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwog
ICAgICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cDE+CiAgICAgICAgc3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1Rw
MT4gb3RoZXI7IH07CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBf
VDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYs
IGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih
PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0
dXJuIGZhbHNlOyB9CiMgNzQ3ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Fs
bG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0
cnVjdCBfX2FsbG9jYXRvcgogICAgewogICAgICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoK
ICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBk
aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVm
IGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsK
ICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBf
VHAgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3Ry
dWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90
aGVyOyB9OwoKICAgICAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIF9fYWxsb2NhdG9y
KGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRocm93KCkKICAgICAgOiBfX3VuZGVybHlpbmdfYWxs
b2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cDE+CiAgICAgICAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYg
X19hKSB0aHJvdygpCiAgICAgICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWlu
Z19hbGxvYykge30KCiAgICAgIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30KCiAgICAgIHBvaW50
ZXIKICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9Cgog
ICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29u
c3QgeyByZXR1cm4gJl9feDsgfQoKCgogICAgICBfVHAqCiAgICAgIGFsbG9jYXRlKHNpemVfdHlw
ZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAwOwog
ICAgICAgIGlmIChfX24pCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxv
Yzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAg
ICAgIH0KCgogICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlw
ZSBfX24pCiAgICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBz
aXplb2YoX1RwKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRo
cm93KCkgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lkCiAg
ICAgIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBf
VHAoX192YWwpOyB9CgogICAgICB2b2lkCiAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19w
LT5+X1RwKCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVj
dCBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+CiAgICB7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0
eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9p
bnRlcjsKICAgICAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19hbGxv
Y2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsgfTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u
c3QgX19hbGxvY2F0b3I8X1RwLF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0IF9f
YWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2EyKQogICAgeyByZXR1cm4gX19hMS5fX3VuZGVybHlp
bmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj
b25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0
IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191bmRl
cmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgoKCgoKCgogIHRlbXBs
YXRlPGludCBpbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxpbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGlu
dCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2Rl
YnVnX2FsbG9jPF9BbGxvYz4mLCBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKQogICAgeyBy
ZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLCBjb25zdCBfX2Rl
YnVnX2FsbG9jPF9BbGxvYz4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KIyA5MDAgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzCiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBh
bGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0FsbG9jYXRvcj4KICAgIGNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjpfU19pbnN0YW5jZWxlc3M7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9U
cDE+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5
cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2FsbG9jPiBfQWxsb2NfdHlwZTsKICAgICAgdHlw
ZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcCwgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwg
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxs
b2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgIHsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBf
X3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f
aW5zdD4gPgogICAgICBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAs
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICBhbGxv
Y2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4g
PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog
ICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4g
X0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9j
PF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0
czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxv
Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9U
cCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogICAgICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+
IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8
X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9f
aW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9
IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgIF9BbGxvY190eXBlOwogICAgICB0eXBlZGVm
IF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4g
PgogICAgICBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8
X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVk
ZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlw
ZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+
IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxv
Y2F0b3I8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsMD47
Cn0KIyA1NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9tZW1vcnkiIDIgMwojIDEgIi90bXAv
aW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY3ICIvdG1w
L2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCm5hbWVzcGFjZSBz
dGQKewoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KICAgIGlubGluZSB2
b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpCiAgICB7IG5l
dyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMShfX3ZhbHVlKTsgfQoKCgoKCgoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX1QxPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3Ap
CiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMSgpOyB9CiMgOTggIi90bXAv
aW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4
KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFs
c2VfdHlwZSkKICAgIHsgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBfRGVz
dHJveSgmKl9fZmlyc3QpOyB9CiMgMTEyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMv
c3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
ICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2Fy
ZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBf
VHA+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpCiAgICB7IF9f
cG9pbnRlci0+fl9UcCgpOyB9CiMgMTM0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMv
c3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
ICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgICAgICAgICAg
ICAgICBfVmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9W
YWx1ZV90eXBlPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgICAg
IF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwoKICAgICAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yKCkpOwogICAgfQp9CiMgNTcgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvbWVtb3J5IiAyIDMKCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdG1wL2luc3QvaW5jbHVk
ZS9jKysvMy40L2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAg
ICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X190cnVlX3R5cGUpCiAgICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAg
ICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCAr
K19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICAgICAg
cmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAg
ICBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQog
ICAgfQojIDEwNiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF91bmluaXRpYWxp
emVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl
X3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9f
dW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9E
KCkpOwogICAgfQoKICBpbmxpbmUgY2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hh
ciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAgICBt
ZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBf
X3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90KgogIHVu
aW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQogIHsKICAgIG1l
bW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2Zp
cnN0KSk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5l
IHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7IGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9p
ZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmly
c3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIp
CiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2go
Li4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAg
ICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAxNjQgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8z
LjQvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9m
aWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm
IF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5p
bml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAg
IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAg
ICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0Zv
cndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19m
aXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3Vy
KQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1
cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3ko
X19maXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl
VHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KIyAyMjcgIi90
bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6
ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVk
X2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKICAgICAgICBy
ZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgICAg
IH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0
LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVy
PgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfY29weShf
Rm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHVu
aW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgIHRyeSB7CiAgICAg
ICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAg
ICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1
bHQsIF9fbWlkKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJ
dGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBfRm9y
d2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBf
X2ZpcnN0Mik7CiAgICAgIHRyeSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwg
X19sYXN0MiwgX194KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAg
ICAgX0Rlc3Ryb3koX19maXJzdDIsIF9fbWlkMik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9
CiAgICB9Cgp9CiMgNTkgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvbWVtb3J5IiAyIDMKIyAx
ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIg
MSAzCiMgNjQgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfcmF3X3N0b3JhZ2Vf
aXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yCiAgICA6IHB1
YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lk
PgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0ZXI7Cgog
ICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9y
d2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KCiAgICAgIHJhd19zdG9yYWdlX2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKICAgICAgcmF3X3N0
b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVudCkKICAg
ICAgewogICAgICAgIF9Db25zdHJ1Y3QoJipfTV9pdGVyLCBfX2VsZW1lbnQpOwogICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJ
dGVyYXRvciwgX1RwPiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICArK19NX2l0
ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICByYXdfc3RvcmFnZV9pdGVy
YXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7
CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3Rt
cCA9ICp0aGlzOwogICAgICAgICsrX01faXRlcjsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAg
IH0KICAgIH07Cn0KIyA2MCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9tZW1vcnkiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CiMgNzEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvbWVtb3J5IiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+CiAgICBf
X2dldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKICAgIHsKICAgICAg
aWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgICAg
X19sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgICB3aGlsZSAoX19sZW4gPiAw
KQogICAgICAgIHsKICAgICAgICAgIF9UcCogX190bXAgPSAoX1RwKikgc3RkOjptYWxsb2MoKHN0
ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICAgICAgaWYgKF9fdG1wICE9IDAp
CiAgICAgICAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsK
ICAgICAgICAgIF9fbGVuIC89IDI7CiAgICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfVHAqLCBw
dHJkaWZmX3Q+KChfVHAqKTAsIDApOwogICAgfQojIDEwMyAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgcGFpcjxf
VHAqLHB0cmRpZmZfdD4KICAgIGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikK
ICAgIHsgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsgfQoj
IDExNSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkK
ICAgIHsgc3RkOjpmcmVlKF9fcCk7IH0KIyAxMjcgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQv
bWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgIHN0cnVjdCBhdXRvX3B0cl9y
ZWYKICAgIHsKICAgICAgX1RwMSogX01fcHRyOwoKICAgICAgZXhwbGljaXQKICAgICAgYXV0b19w
dHJfcmVmKF9UcDEqIF9fcCk6IF9NX3B0cihfX3ApIHsgfQogICAgfTsKIyAxNjYgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
Y2xhc3MgYXV0b19wdHIKICAgIHsKICAgIHByaXZhdGU6CiAgICAgIF9UcCogX01fcHRyOwoKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKCgoKCgoKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGF1dG9fcHRyKGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKSA6IF9N
X3B0cihfX3ApIHsgfQojIDE5MiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9tZW1vcnkiIDMK
ICAgICAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVsZWFz
ZSgpKSB7IH0KIyAyMDMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvbWVtb3J5IiAzCiAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYXV0b19wdHIoYXV0b19wdHI8X1RwMT4m
IF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMTQgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvbWVtb3J5IiAzCiAgICAgIGF1dG9fcHRyJgogICAgICBvcGVyYXRv
cj0oYXV0b19wdHImIF9fYSkgdGhyb3coKQogICAgICB7CiAgICAgICAgcmVzZXQoX19hLnJlbGVh
c2UoKSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CiMgMjMxICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L21lbW9yeSIgMwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAg
ICAgIGF1dG9fcHRyJgogICAgICAgIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJv
dygpCiAgICAgICAgewogICAgICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgICAgfQojIDI1MSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9t
ZW1vcnkiIDMKICAgICAgfmF1dG9fcHRyKCkgeyBkZWxldGUgX01fcHRyOyB9CiMgMjYxICIvdG1w
L2luc3QvaW5jbHVkZS9jKysvMy40L21lbW9yeSIgMwogICAgICBlbGVtZW50X3R5cGUmCiAgICAg
IG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gKl9NX3B0cjsgfQoKCgoKCgoKICAg
ICAgZWxlbWVudF90eXBlKgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSB7IHJldHVy
biBfTV9wdHI7IH0KIyAyODMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvbWVtb3J5IiAzCiAg
ICAgIGVsZW1lbnRfdHlwZSoKICAgICAgZ2V0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9w
dHI7IH0KIyAyOTcgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvbWVtb3J5IiAzCiAgICAgIGVs
ZW1lbnRfdHlwZSoKICAgICAgcmVsZWFzZSgpIHRocm93KCkKICAgICAgewogICAgICAgIGVsZW1l
bnRfdHlwZSogX190bXAgPSBfTV9wdHI7CiAgICAgICAgX01fcHRyID0gMDsKICAgICAgICByZXR1
cm4gX190bXA7CiAgICAgIH0KIyAzMTIgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvbWVtb3J5
IiAzCiAgICAgIHZvaWQKICAgICAgcmVzZXQoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygp
CiAgICAgIHsKICAgICAgICBpZiAoX19wICE9IF9NX3B0cikKICAgICAgICAgIHsKICAgICAgICAg
ICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgICAgX01fcHRyID0gX19wOwogICAgICAgICAgfQog
ICAgICB9CiMgMzMzICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L21lbW9yeSIgMwogICAgICBh
dXRvX3B0cihhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhyb3coKQogICAgICA6
IF9NX3B0cihfX3JlZi5fTV9wdHIpIHsgfQoKICAgICAgYXV0b19wdHImCiAgICAgIG9wZXJhdG9y
PShhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhyb3coKQogICAgICB7CiAgICAg
ICAgaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkKICAgICAgICAgIHsKICAgICAgICAg
ICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgICAgX01fcHRyID0gX19yZWYuX01fcHRyOwogICAg
ICAgICAgfQogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwMT4KICAgICAgICBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0K
CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgb3BlcmF0b3IgYXV0b19wdHI8
X1RwMT4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVs
ZWFzZSgpKTsgfQoKICB9Owp9CiMgNDkgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvc3RyaW5n
IiAyIDMKCgoKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Z1bmN0aW9u
LmgiIDEgMwojIDY0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Z1bmN0aW9u
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgMTAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Jp
dHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+
CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAg
dHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Bcmcx
LCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAg
dHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25k
X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwojIDEyNyAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw
LF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g
X194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1Rw
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKIyAx
NzMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3Qg
X1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs
X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4K
ewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0
IHsgcmV0dXJuIF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBs
ZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
PCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49IF9f
eTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07
CiMgMjIyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3Qg
X1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJv
b2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFf
X3g7IH0KfTsKIyAyNzEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfZnVuY3Rp
b24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAg
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlw
ZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhw
bGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkg
e30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4K
bm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRlPF9Q
cmVkaWNhdGU+KF9fcHJlZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3Mg
YmluYXJ5X25lZ2F0ZQogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGlj
YXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6
CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJl
ZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZp
cnN0X2FyZ3VtZW50X3R5cGUmIF9feCwKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUg
X1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1
cm4gIV9NX3ByZWQoX194LCBfX3kpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0
ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRl
JiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9
CiMgMzQ5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBl
PiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZp
cnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJh
dGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9h
cmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVu
YW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBf
T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
b3AodmFsdWUsIF9feCk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUK
ICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBf
X3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlv
bj4KYmluZDFzdChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5
cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBl
OwogIHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsK
fQoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90
eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246
OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9P
cGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vj
b25kX2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAg
dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVu
YW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0
dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90
eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBl
JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJh
dGlvbj4KYmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewog
IHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJf
dHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194
KSk7Cn0KIyA0MzggIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfZnVuY3Rpb24u
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90
b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7
CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJf
dG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rp
b24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJh
dG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1
bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZykpCnsKICBy
ZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PihfX3gpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3Mg
cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0Fy
ZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVzdWx0ICgqX01fcHRyKShfQXJn
MSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbigpIHt9CiAg
ICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJn
MSwgX0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCko
X0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9f
eSk7CiAgICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3Mg
X1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S
ZXN1bHQ+CnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBw
b2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjxfVHAsX1RwPiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25zdCB7IHJldHVy
biBfX3g7IH0KICBjb25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsg
cmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFz
dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5
cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFp
cjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9T
ZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpz
ZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShf
UGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9CiAgY29uc3QgdHlw
ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KfTsKIyA1MjggIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixf
UmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkg
OiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVy
biAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3Bm
KSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9f
cC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m
dW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVy
YXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6
CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U
cCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9U
cDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9S
ZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAo
X1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAq
IF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZh
dGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf
X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0
CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6
Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0
IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9U
cCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2
YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBj
b25zdF9tZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9m
KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29u
c3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9N
X2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5f
dDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpw
cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
Y2xhc3MgY29uc3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
Y29uc3QgX1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9p
ZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigp
KGNvbnN0IF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9p
ZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBt
ZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkg
OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3Iu
Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt
X2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2
b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpw
cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
bWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p
ZCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194
KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBf
QXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpw
dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJn
KSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19w
LCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQg
KF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1
bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsg
fQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwg
X0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykg
Y29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwg
X0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9U
cDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19m
KSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVt
X2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90
PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxp
bmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgp
KQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1Rw
PiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3Rf
bWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVt
X2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxf
VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0
IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1Jl
dCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xh
c3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVm
KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxf
VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5f
cmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1
bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKCgp9CiMgNTMgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvc3RyaW5nIiAyIDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Jp
dHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDQ0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Jp
dHMvYmFzaWNfc3RyaW5nLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgMTA4ICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJh
c2ljX3N0cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0
c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90
eXBlOwogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19n
bnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9y
OwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRl
ciwgYmFzaWNfc3RyaW5nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBzdGQ6OnJl
dmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAg
ICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJh
dG9yOwoKICAgIHByaXZhdGU6CiMgMTQzICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMv
YmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5
dGVzX2FsbG9jOwojIDE2MSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2Jhc2ljX3N0
cmluZy5oIiAzCiAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBfU19tYXhfc2l6ZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFsOwoKICAgICAgICBzaXplX3R5cGUg
X01fbGVuZ3RoOwogICAgICAgIHNpemVfdHlwZSBfTV9jYXBhY2l0eTsKICAgICAgICBfQXRvbWlj
X3dvcmQgX01fcmVmZXJlbmNlczsKCiAgICAgICAgYm9vbAogICAgICAgIF9NX2lzX2xlYWtlZCgp
IGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA8IDA7IH0KCiAgICAgICAgYm9v
bAogICAgICAgIF9NX2lzX3NoYXJlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJl
bmNlcyA+IDA7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9sZWFrZWQoKQogICAgICAg
IHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfc2hh
cmFibGUoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IDA7IH0KCiAgICAgICAgX0NoYXJUKgog
ICAgICAgIF9NX3JlZmRhdGEoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxfQ2hhclQqPih0aGlzICsgMSk7IH0KCiAgICAgICAgX0NoYXJUJgogICAgICAgIG9wZXJh
dG9yW10oc2l6ZV90IF9fcykgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmRhdGEoKSBb
X19zXTsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fZ3JhYihjb25zdCBfQWxsb2MmIF9f
YWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQogICAgICAgIHsKICAgICAgICAgIHJldHVy
biAoIV9NX2lzX2xlYWtlZCgpICYmIF9fYWxsb2MxID09IF9fYWxsb2MyKQogICAgICAgICAgICAg
ICAgICA/IF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxsb2MxKTsKICAgICAgICB9CgoKICAg
ICAgICBzdGF0aWMgX1JlcCoKICAgICAgICBfU19jcmVhdGUoc2l6ZV90LCBjb25zdCBfQWxsb2Mm
KTsKCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rpc3Bvc2UoY29uc3QgX0FsbG9jJiBfX2EpCiAg
ICAgICAgewogICAgICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywg
LTEpIDw9IDApCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19hKTsKICAgICAgICB9CgogICAgICAg
IHZvaWQKICAgICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7CgogICAgICAg
IF9DaGFyVCoKICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQogICAgICAgIHsKICAgICAgICAg
IF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgICAgICAgICByZXR1cm4gX01fcmVm
ZGF0YSgpOwogICAgICAgIH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2Nsb25lKGNvbnN0
IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOwogICAgICB9OwoKCiAgICAgIHN0cnVjdCBf
QWxsb2NfaGlkZXIgOiBfQWxsb2MKICAgICAgewogICAgICAgIF9BbGxvY19oaWRlcihfQ2hhclQq
IF9fZGF0LCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9wKF9f
ZGF0KSB7IH0KCiAgICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9OwoKICAgIHB1YmxpYzoKCgoK
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBl
PigtMSk7CgogICAgcHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0FsbG9jX2hpZGVyIF9NX2RhdGFw
bHVzOwoKCgogICAgICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5X3JlcF9zdG9yYWdlWyhzaXpl
b2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9m
KHNpemVfdHlwZSldOwoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRh
KF9DaGFyVCogX19wKQogICAgICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7IH0K
CiAgICAgIF9SZXAqCiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICYoKHJlaW50
ZXJwcmV0X2Nhc3Q8X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9CgoKCiAgICAgIGl0ZXJhdG9y
CiAgICAgIF9NX2liZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0K
CiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihf
TV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWsoKQog
ICAgICB7CiAgICAgICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgICBf
TV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01fY2hlY2soc2l6
ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6
ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6X01fY2hl
Y2siKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKCiAgICAg
IGl0ZXJhdG9yCiAgICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19vZmYp
IGNvbnN0CiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6
ZSgpIC0gX19wb3M7CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2ZmID0gX190ZXN0b2ZmID8gX19v
ZmYgOiB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICByZXR1cm4gKF9NX2liZWdpbigpICsg
X19wb3MgKyBfX25ld29mZik7CiAgICAgIH0KCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJh
dG9yPgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9f
cCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQogICAgICAgIHsKICAgICAgICAgIGZv
ciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAgICAgICAgIHRyYWl0c190eXBl
Ojphc3NpZ24oKl9fcCwgKl9fazEpOwogICAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAg
IF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIp
CiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0K
CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0
X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFy
cyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAg
ICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2sy
KQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9Cgog
ICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdCBf
Q2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29w
eShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9tdXRhdGUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKTsKCiAg
ICAgIHZvaWQKICAgICAgX01fbGVha19oYXJkKCk7CgogICAgICBzdGF0aWMgX1JlcCYKICAgICAg
X1NfZW1wdHlfcmVwKCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZf
U19lbXB0eV9yZXBfc3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoKCgogICAgICBpbmxpbmUKICAg
ICAgYmFzaWNfc3RyaW5nKCk7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmcoY29u
c3QgX0FsbG9jJiBfX2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp
emVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBucG9zKTsK
ICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19h
KTsKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwK
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBi
YXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9j
KCkpOwogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3Qg
X0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0
ZXJhdG9yIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9B
bGxvYygpKTsKCiAgICAgIH5iYXNpY19zdHJpbmcoKQogICAgICB7IF9NX3JlcCgpLT5fTV9kaXNw
b3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
b3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFzc2ln
bihfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9D
aGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNzaWduKDEs
IF9fYyk7IH0KCgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpCiAgICAgIHsKICAgICAgICBf
TV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7CiAgICAgIH0KCiAg
ICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29u
c3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkKICAg
ICAgewogICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRh
KCkgKyB0aGlzLT5zaXplKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBl
bmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlz
LT5zaXplKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpCiAgICAg
IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9y
CiAgICAgIHJlbmQoKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2lu
KCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdAog
ICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9Cgog
ICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVybiBf
TV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg
IG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0KCiAgICAgIHZv
aWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdm9pZAog
ICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQoKSk7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Jl
cCgpLT5fTV9jYXBhY2l0eTsgfQoKICAgICAgdm9pZAogICAgICByZXNlcnZlKHNpemVfdHlwZSBf
X3Jlc19hcmcgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKSB7IF9NX211dGF0ZSgwLCB0
aGlzLT5zaXplKCksIDApOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1
cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0KCgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgb3Bl
cmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhKClb
X19wb3NdOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19w
b3MpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtf
X3Bvc107CiAgICAgIH0KCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUg
X19uKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAg
ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIHJl
dHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIGF0KHNp
emVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHNpemUoKSkKICAgICAgICAg
IF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgX01fbGVh
aygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJl
dHVybiB0aGlzLT5hcHBlbmQoX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9w
ZXJhdG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MpOyB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oX0NoYXJUIF9fYykgeyByZXR1
cm4gdGhpcy0+YXBwZW5kKHNpemVfdHlwZSgxKSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVu
ZChfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFwcGVu
ZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAg
eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19s
YXN0KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2JhY2soX0NoYXJUIF9fYykKICAgICAgeyB0
aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCAxLCBfX2MpOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zdHJz
aXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXNzaWdu
Iik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3M7
CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBfX3N0
cnNpemUgLSBfX3BvczsKICAgICAgICByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyLl9NX2RhdGEo
KSArIF9fcG9zLCBfX25ld3NpemUpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAg
IGlmIChfX24gPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJy
b3IoImJhc2ljX3N0cmluZzo6YXNzaWduIik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19z
aGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAg
ICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCksIF9f
cykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpLCBfTV9pZW5k
KCksIF9fcywgX19zICsgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CgogICAgICAgICAg
ICBjb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3MgLSBfTV9kYXRhKCk7CiAgICAgICAgICAgIGlm
IChfX3BvcyA+PSBfX24pCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fZGF0YSgp
LCBfX3MsIF9fbik7CiAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zKQogICAgICAgICAgICAgIHRy
YWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBfTV9yZXAo
KS0+X01fbGVuZ3RoID0gX19uOwogICAgICAgICAgICBfTV9kYXRhKClbX19uXSA9IF9SZXA6Ol9T
X3Rlcm1pbmFsOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgICB9CiAgICAgIH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zKQogICAg
ICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCks
IF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9p
YmVnaW4oKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAg
IGluc2VydChpdGVyYXRvciBfX3AsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsg
dGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3AsIF9JbnB1
dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCkKICAgICAgICB7IHRoaXMtPnJl
cGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLCAwLCBfX3N0ci5zaXplKCkp
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwg
c2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUg
PSBfX3N0ci5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAgICAgICAg
IF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGNv
bnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgICBjb25z
dCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9z
MjsKICAgICAgICByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIuX01fZGF0YSgpICsg
X19wb3MyLCBfX25ld3NpemUpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGlu
c2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQog
ICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg
ICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgi
YmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX19zaXplID4gdGhpcy0+bWF4X3Np
emUoKSAtIF9fbikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6
Omluc2VydCIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxj
b25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0
IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9N
X3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9zLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbik7CiAgICAgICAg
ZWxzZQogICAgICAgICAgewoKCgogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vZmYgPSBf
X3MgLSBfTV9kYXRhKCk7CiAgICAgICAgICAgIF9NX211dGF0ZShfX3BvcywgMCwgX19uKTsKICAg
ICAgICAgICAgX19zID0gX01fZGF0YSgpICsgX19vZmY7CiAgICAgICAgICAgIF9DaGFyVCogX19w
ID0gX01fZGF0YSgpICsgX19wb3M7CiAgICAgICAgICAgIGlmIChfX3MgKyBfX24gPD0gX19wKQog
ICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX24pOwogICAgICAgICAg
ICBlbHNlIGlmIChfX3MgPj0gX19wKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9f
cCwgX19zICsgX19uLCBfX24pOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fcCAtIF9fcyk7CiAgICAg
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AgKyAoX19wIC0gX19zKSwgX19wICsgX19u
LCBfX24gLSAoX19wIC0gX19zKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgICAgICB9CiAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGlu
c2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0
aGlzLT5pbnNlcnQoX19wb3MsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uLCBfQ2hhclQgX19jKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9f
cG9zKSwgX19uLCBfX2MpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXRl
cmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0NoYXJUIF9fYyA9IF9DaGFyVCgpKQog
ICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7CiAgICAg
ICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEpLCBfX2MpOwogICAg
ICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIHRoaXMtPl9NX2li
ZWdpbigpICsgX19wb3M7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgZXJhc2Uo
c2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCiAgICAgIHsKICAgICAg
ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9f
biksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwog
ICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQog
ICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fcG9zaXRpb24gLSBfTV9pYmVnaW4oKTsK
ICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyAxLCBfTV9kYXRh
KCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAg
ICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAg
IGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAgICAg
IHNpemVfdHlwZSBfX2kgPSBfX2ZpcnN0IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVw
bGFjZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9y
ZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwog
ICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVy
biB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24sIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgp
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEs
IHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAg
IHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hh
clQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikKICAgICAgewogICAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4g
X19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6cmVw
bGFjZSIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0bjEgPSBfX24xIDwgX19zaXplIC0gX19w
b3M7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4xID0gX190ZXN0bjEgPyBfX24xIDog
X19zaXplIC0gX19wb3M7CiAgICAgICAgaWYgKF9fc2l6ZSAtIF9fZm9sZG4xID4gdGhpcy0+bWF4
X3NpemUoKSAtIF9fbjIpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3Ry
aW5nOjpyZXBsYWNlIik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBs
ZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8
Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICByZXR1
cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwgX19zLCBfX3Mg
KyBfX24yKTsKCiAgICAgICAgZWxzZSByZXR1cm4KICAgICAgICAgICAgICAgX01fcmVwbGFjZShf
TV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfQ2hhclQqPjo6aXRlcmF0b3Jf
Y2F0ZWdvcnkoKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAg
eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uMSwgX19zLCB0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICAg
IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBf
X24xKSwgX19uMiwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0
ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgpLCBf
X3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2Uo
X19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19zLCBfX24pOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29u
c3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwg
X19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbiwg
X0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBf
X2kyLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0b3Ig
X19rMikKICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9faTIsIF9fazEsIF9fazIs
CiAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojpp
dGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxh
Y2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9f
azIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9f
aTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMSwgX19rMiAtIF9f
azEpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwg
aXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAg
ICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBf
X2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMSwgX19rMiAtIF9fazEpOyB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0
b3IgX19pMiwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0
aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAgIH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv
ciBfX2kyLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICAg
IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7
CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyYXRvciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICAgICAgdGVtcGxh
dGU8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAg
X01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRl
cmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19rMik7CgoK
CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAg
ICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0
IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAg
ICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXI+
OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChf
X2JlZywgX19lbmQsIF9fYSwgX1RhZygpKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFz
cyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1
eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHJldHVy
biBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KF9fZW5kKSwgX19hKTsK
ICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBf
Q2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs
IGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX2ludGVnZXI8X0luSXRlcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgICByZXR1
cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOwogICAg
ICAgIH0KCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hh
clQqCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBj
b25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3Rh
Zyk7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVyPgogICAgICAgIHN0YXRpYyBfQ2hh
clQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJdGVyIF9fYmVnLCBfRndkSXRlciBfX2VuZCwg
Y29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKTsKCiAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUg
X19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICBwdWJsaWM6CgogICAg
ICBzaXplX3R5cGUKICAgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90
eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIHN3YXAoYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zKTsKCgogICAgICBjb25zdCBfQ2hhclQqCiAg
ICAgIGNfc3RyKCkgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3R5cGUgX19uID0gdGhpcy0+
c2l6ZSgpOwogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9SZXA6
Ol9TX3Rlcm1pbmFsKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpOwogICAgICB9CgogICAgICBj
b25zdCBfQ2hhclQqCiAgICAgIGRhdGEoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhKCk7IH0KCiAg
ICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBf
TV9kYXRhcGx1czsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Mg
PSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRhdGEoKSwgX19wb3Ms
IF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5m
aW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVf
dHlwZQogICAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp
emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9f
c3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg
ICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
KSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQo
X19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu
ZF9maXJzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k
X2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKF9D
aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2Yo
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9f
c3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2Yo
X19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfbGFzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmly
c3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNp
emVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsK
CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9m
aXJzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw
ZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rf
b2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9f
cG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25v
dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9s
YXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFp
dHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0
X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAg
IGJhc2ljX3N0cmluZwogICAgICBzdWJzdHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBl
IF9fbiA9IG5wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXpl
KCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpzdWJzdHIi
KTsKICAgICAgICByZXR1cm4gYmFzaWNfc3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsKICAgICAg
fQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29u
c3QKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
ICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gc3RkOjptaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9IHRyYWl0
c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgICAg
aWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAgIHJldHVy
biBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBp
bnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXpl
X3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQq
IF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGludAogICAg
ICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCog
X19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9OwoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNp
Y19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCks
IF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhz
KTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19y
aHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBv
cGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs
X0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz
KQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3Ry
KF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0
cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEp
LCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jocykg
PT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFy
VCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0g
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy
biBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf
X3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s
aHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xo
cy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs
CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19y
aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg
ICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp
ID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xo
cywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xo
cy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs
CiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5j
b21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMuY29tcGFy
ZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y
aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMp
CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAg
eyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
dm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo
cywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
CiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKICAg
ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0
bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxp
bSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAg
Z2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQojIDU0ICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmluZyIgMiAzCgoKIyAxICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2FsZ29yaXRobSIgMSAzCiMgNjUgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8z
LjQvYWxnb3JpdGhtIiAzCgoKCgojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9z
dGxfYWxnby5oIiAxIDMKIyA2NCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9h
bGdvLmgiIDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2hlYXAuaCIg
MSAzCiMgNjMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaGVhcC5oIiAzCm5h
bWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3B1c2hf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQogICAg
ewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAg
IHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQp
IDwgX192YWx1ZSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJz
dCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgICAgIF9f
cGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICooX19maXJzdCAr
IF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
YXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2Vf
dHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcHVz
aF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9E
aXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAx
KSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5
cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgICB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX190
b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3Rh
bmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xl
SW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFs
dWUpKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19w
YXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQg
PSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xl
SW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90
eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAg
IF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlz
dGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAg
ICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0
YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2Ug
X190b3BJbmRleCA9IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9
IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4p
IHsKICAgICAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAo
X19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAq
KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAg
ICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9
IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxk
ID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0
ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENo
aWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwg
X190b3BJbmRleCwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1Rw
IF9fdmFsdWUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5j
ZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAg
IHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAK
CiAgICAgCgogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEs
IF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAg
IF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hp
bGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0
ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAg
ICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg
PSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vj
b25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEp
OwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihf
X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7
CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBf
X3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19j
b21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9w
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwg
X1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
IF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hl
YXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAg
ICAgICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu
ZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICBfX3BvcF9oZWFw
KF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAx
KSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
YXRvcj4KICAgIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQog
ICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlz
dGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAy
KSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog
ICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4s
IF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICAgICAgaWYgKF9fcGFyZW50
ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAg
aWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19s
ZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9f
bGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChf
X2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBl
KCooX19maXJzdCArIF9fcGFyZW50KSksIF9fY29tcCk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09
IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4g
MSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg
ewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9w
X2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7CiAgICB9Cgp9CiMgNjUgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAyIDMKIyAxICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDc0ICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3RlbXBidWYuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIF9UZW1wb3JhcnlfYnVm
ZmVyCnsKCiAKCiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVu
OwogIF9UcCogX01fYnVmZmVyOwoKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBf
TV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9s
ZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4g
PSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAg
ICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAg
IGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQog
IH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkg
e30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5
cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwog
IH0KCnB1YmxpYzoKCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0K
CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxf
bGVuOyB9CgogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KCiAgX1RwKiBlbmQo
KSB7IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5
cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9
IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVy
KCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpf
X2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAg
IGZyZWUoX01fYnVmZmVyKTsKICAgICAgICBfTV9idWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9
IDA7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsK
ICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01f
YnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9y
YXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXIm
KSB7fQp9OwoKfQojIDY2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28u
aCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewojIDg0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29u
c3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25z
dCBfVHAmIF9fYykKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYg
KF9fYiA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwg
X19jKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4g
X19hOwogICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAg
ZWxzZSBpZiAoX19iIDwgX19jKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAg
ICByZXR1cm4gX19iOwogICAgfQojIDExOCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJl
PgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25z
dCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAg
CiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgICAgIGlmIChfX2NvbXAoX19iLCBfX2Mp
KQogICAgICAgICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2Mp
KQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19h
OwogICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgIHJldHVybiBfX2E7CiAg
ICAgIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAg
ZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9CiMgMTUwICIvdG1wL2luc3QvaW5jbHVkZS9j
KysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9GdW5jdGlvbj4KICAgIF9GdW5jdGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAg
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2Yo
Kl9fZmlyc3QpOwogICAgICByZXR1cm4gX19mOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBm
aW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0
IF9UcCYgX192YWwsCiAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgICAgICsr
X19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJ
dGVyCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2Zp
cnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAg
ICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAg
ICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2Nv
dW50CiAgICAgICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190
cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgq
X19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAg
ICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19m
aXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAg
ICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7
CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp
cnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmICgqX19maXJz
dCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNl
IDE6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAg
ICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4g
X19sYXN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAg
ZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0g
KF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg
OyAtLV9fdHJpcF9jb3VudCkgewogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4g
X19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3Qp
KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlm
IChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAg
ICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAg
ICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2Zp
cnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBf
X2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmIChfX3By
ZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNh
c2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9
CiMgMjg5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5w
dXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJu
IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7CiAgICB9CiMgMzA5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+
CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMzI5ICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0Zvcndh
cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkg
ewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4gX19sYXN0
OwogICAgfQojIDM1OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVk
aWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBf
X25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAg
ICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgICAgICByZXR1cm4g
X19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBf
X2xhc3Q7CiAgICB9CiMgMzg3ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAg
ICBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm
IF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbHVlKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDEx
ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg
ICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvdG1wL2luc3QvaW5jbHVk
ZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFy
Y2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBf
X2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9y
d2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1w
ID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2Zp
cnN0Mik7CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9f
Zmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3Qx
OwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9
IGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3Qx
ID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19w
MTsKICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQg
PT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9f
Y3VycmVudCA9PSAqX19wKSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAg
ICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFz
dDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQ
cmVkPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3Qy
LCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNh
dGUpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9f
bGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoK
ICAgICAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAg
IGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19m
aXJzdDE7CiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJk
SXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBf
Rm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAg
ICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQog
ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg
ICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3Vy
cmVudCA9IF9fZmlyc3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1
cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3Ap
KSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9f
Zmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAg
IHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQog
ICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTk2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysv
My40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2Vh
cmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAg
ICAKCiAgICAgCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0
OwogICAgICBlbHNlIHsKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9f
dmFsKTsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRl
Z2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmly
c3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9f
biAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAg
IC0tX19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICBy
ZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IGZpbmQo
X19pLCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAg
ICAgfQogICAgfQojIDY0MyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2Vy
LCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWQ+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwK
ICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAg
IAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
IGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgaWYg
KF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsrX19pOwogICAgICAgICAgd2hpbGUg
KF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkp
IHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAgfQogICAg
ICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewogICAgICAgICAgICAg
IGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9fZmlyc3QgPSBf
X2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0K
ICAgIH0KIyA2OTcgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVy
Mj4KICAgIF9Gb3J3YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJz
dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIg
X19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAo
IDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBp
dGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fZmlyc3QyOwogICAg
fQojIDczMiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5h
bWUgX1VuYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAg
CgoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3Vs
dCkKICAgICAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgfQojIDc2NSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu
cHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5h
cnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0
aW9uIF9fYmluYXJ5X29wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICgg
OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0
KQogICAgICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsK
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc5NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUs
IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2Zp
cnN0ID09IF9fb2xkX3ZhbHVlKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAg
IH0KIyA4MjUgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBl
bmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29u
c3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpf
X2ZpcnN0KSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CiMgODU2ICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg
ICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1
ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgIH0KIyA4ODggIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwPgogICAg
X091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3Zh
bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fcHJl
ZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CiMgOTE4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0dlbmVyYXRv
cj4KICAgIHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAgICAKCgogICAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBf
X2dlbigpOwogICAgfQojIDk0MiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUs
IHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJhdGVfbihfT3V0
cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAg
IAoKCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9f
Zmlyc3QgPSBfX2dlbigpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5NjkgIi90bXAv
aW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9P
dXRwdXRJdGVyCiAgICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYg
X192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVl
KSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0
OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAg
ICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
UHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19m
aXJzdCkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jl
c3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvdG1w
L2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1v
dmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX19m
aXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJdGVy
IF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFz
dCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJlbW92ZV9pZihfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJl
ZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZpbmRf
aWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19m
aXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0LCBfX2Zp
cnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3Jf
dGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsK
ICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoX192YWx1ZSA9
PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICor
K19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0Owog
ICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9y
d2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsK
CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9f
bGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQogICAgICAgICAgKisr
X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE0
NSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf
T3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAg
ICAKICAgICAKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDExNzAg
Ii90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5h
cnlQcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkLAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAK
CgoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBl
IF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hp
bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFs
dWUsICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAg
KisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7
CiAgICB9CiMgMTE5OSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVl
X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJl
ZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKQogICAgewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdo
aWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19y
ZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsr
X19yZXN1bHQ7CiAgICB9CiMgMTIzMiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0
cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfT3V0cHV0SXRl
cgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX0Jp
bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2Nh
dGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
cmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsCl9fcmVz
dWx0LCBfX2JpbmFyeV9wcmVkLCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTI2MyAiL3RtcC9pbnN0
L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAogICAgICAgICAKCgog
ICAgICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICAgICAg
ICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QpOwogICAgfQoj
IDEyOTAgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgog
ICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQog
ICAgewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJz
dCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsK
ICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qg
fHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7
CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAg
dm9pZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAg
ICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7CiAgICB9CiMgMTM0OSAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmV2ZXJzZShfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsK
CiAgICAgICAgIAoKICAgICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDEzNzQgIi90bXAvaW5zdC9pbmNsdWRlL2Mr
Ky8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICByZXZlcnNl
X2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAg
ICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg
ICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAgICAgKytfX3Jl
c3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTM5OSAiL3RtcC9p
bnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9f
Z2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24p
CiAgICB7CiAgICAgIHdoaWxlIChfX24gIT0gMCkgewogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxl
bWVudCBfX3QgPSBfX20gJSBfX247CiAgICAgICAgX19tID0gX19uOwogICAgICAgIF9fbiA9IF9f
dDsKICAgICAgfQogICAgICByZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAg
IHsKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxl
KSkKICAgICAgICByZXR1cm47CgogICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRs
ZTsKICAgICAgZG8gewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAg
ICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0
MjsKICAgICAgfSB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgICAgIF9fZmlyc3QyID0g
X19taWRkbGU7CgogICAgICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICAgICAgc3dh
cCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRk
bGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICAgIGVsc2UgaWYgKF9fZmly
c3QyID09IF9fbGFzdCkKICAgICAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIH0KICAg
IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lk
CiAgICBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7
CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBf
X21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlk
ZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgX19yZXZlcnNlKF9fbWlk
ZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICAgICAgd2hpbGUg
KF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgICAgIHN3YXAg
KCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkg
ewogICAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZygpKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3JldmVyc2UoX19maXJz
dCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAg
ICBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAg
CgoKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxl
KSkKICAgICAgICByZXR1cm47CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlOwoKICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7
CiAgICAgIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5j
ZSBfX2wgPSBfX24gLSBfX2s7CgogICAgICBpZiAoX19rID09IF9fbCkgewogICAgICAgIHN3YXBf
cmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAg
ICB9CgogICAgICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICAgICAgZm9yIChf
RGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgICAgIF9WYWx1ZVR5cGUg
X190bXAgPSAqX19maXJzdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0
OwoKICAgICAgICBpZiAoX19rIDwgX19sKSB7CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2og
PSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgICAgICBpZiAoX19wID4gX19maXJz
dCArIF9fbCkgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICAg
ICAgX19wIC09IF9fbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICooX19wICsg
X19rKTsKICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgIH0KICAgICAgICB9CgogICAg
ICAgIGVsc2UgewogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19f
ZCAtIDE7IF9faiArKykgewogICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAg
ICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAgICBfX3AgKz0gX19r
OwogICAgICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAg
ICAgICAgX19wIC09IF9fbDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICpfX3AgPSBf
X3RtcDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNTYxICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAg
ICAgCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+
OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxNTg5ICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcm90YXRl
X2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAg
ewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29w
eShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE2MTIgIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rp
c3RhbmNlPgogICAgaW5saW5lIF9EaXN0YW5jZQogICAgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5j
ZSBfX24pCiAgICB7CgogICAgICByZXR1cm4gbHJhbmQ0OCgpICUgX19uOwoKCgogICAgfQojIDE2
MzQgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmFuZG9t
X3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0KQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK
ICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9f
bGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251
bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAiL3RtcC9pbnN0L2luY2x1
ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KICAgIHZvaWQKICAg
IHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9f
cmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47
CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf
X2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9f
aSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fcGFy
dGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
dG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJz
dDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgIGlmICgrK19fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBf
X2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19w
cmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAg
ICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9QcmVk
aWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkK
ICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgICArK19f
Zmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC0tX19sYXN0
OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQog
ICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9f
bGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBi
cmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmly
c3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X1ByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlvbihfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGlj
YXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9fcGFydGl0aW9u
KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK
ICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf
UHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9faW5w
bGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
IF9EaXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAgICAgICAgcmV0
dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0
ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIp
OwogICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9u
KF9fZmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIg
X19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bGVuIC0gX19sZW4gLyAyKTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7
CiAgICAgIGFkdmFuY2UoX19iZWdpbiwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsK
ICAgICAgcmV0dXJuIF9fYmVnaW47CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAg
ICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fc3RhYmxlX3Bh
cnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rp
c3RhbmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f
YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZl
cl9zaXplKQogICAgewogICAgICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgICAgIF9Qb2ludGVyIF9fcmVz
dWx0MiA9IF9fYnVmZmVyOwogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19f
Zmlyc3QpCiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgICAqX19y
ZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQxOwogICAgICAgICAgfQog
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDIgPSAqX19maXJzdDsKICAgICAg
ICAgICAgKytfX3Jlc3VsdDI7CiAgICAgICAgICB9CiAgICAgICAgY29weShfX2J1ZmZlciwgX19y
ZXN1bHQyLCBfX3Jlc3VsdDEpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgICAgIH0KICAg
ICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAg
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICAgIF9Gb3J3YXJkSXRlciBfX2Jl
Z2luID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9G
b3J3YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSggX19taWRkbGUs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUpOwogICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICAg
IGFkdmFuY2UoX19iZWdpbiwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAg
ICByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAgfQojIDE4NDggIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFibGVfcGFy
dGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg
ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBl
bHNlCiAgICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j
ZVR5cGU7CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1ZhbHVlVHlw
ZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgpID4gMCkK
ICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19s
YXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7
CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9u
KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwogICAg
ICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5
cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRp
b24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAgICArK19f
Zmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0
KQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAg
ICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0
KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAg
ICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fY29t
cChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9f
Zmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9z
d2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMg
MTkyOSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVt
IHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFy
X2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAg
d2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAg
ICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19s
YXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3Vu
Z3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFs
LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9
IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25l
eHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0
OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg
IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK
CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf
X2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9f
dmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBf
X2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVs
c2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAg
IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
IHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7
IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAg
ICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJk
KF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAg
ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9f
aSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNl
cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9t
QWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBf
X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7
IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo
X19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25f
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp
CiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAg
ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAg
ICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBf
X2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25f
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
aWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAg
X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0
LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
U2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9T
aXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsK
ICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29w
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9s
ZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxf
c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAg
fQogICAgICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1
dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f
Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50
cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0
ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog
ICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQs
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3
aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2Rl
cHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fbGFzdCwgX19jb21wKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1f
X2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAg
IF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh
c3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7
CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBf
X2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhf
X2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcgIi90bXAvaW5zdC9pbmNsdWRlL2Mr
Ky8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAg
ICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2Zp
cnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAg
IF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9
CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAg
dm9pZAogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBf
X2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9z
b3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlk
ZGxlLCBfX2xhc3QpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAg
IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv
bXApOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p
ZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vf
c3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9z
dGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhv
dXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZv
aWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0
YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJz
dCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJz
dCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fcmVzdWx0KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0K
CiAgICAgIF9fc3RlcF9zaXplID0gc3RkOjptaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3Qp
LCBfX3N0ZXBfc2l6ZSk7CiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6
ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0KTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJ
dGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0
YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJz
dCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJz
dCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAg
ICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KICAgICAgX19zdGVwX3NpemUgPSBzdGQ6
Om1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKCiAgICAgIG1l
cmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgX19maXJzdCAr
IF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICBf
X2NvbXApOwogICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQK
ICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UgX19jaHVua19zaXplKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBf
X2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3Qg
KyBfX2NodW5rX3NpemUpOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogICAgICB9
CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAg
ICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9f
Y29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19p
bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlcj4KICAgIHZvaWQK
ICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Bv
aW50ZXIgX19idWZmZXIpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAg
IF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVm
ZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXpl
ID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7
CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19z
dGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAgX19tZXJnZV9zb3J0
X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKICAg
ICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9f
Zmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoK
ICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVu
a19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwoK
ICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRf
bG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAg
ICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVy
LCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgICAgICBf
X3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAg
dm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Q
b2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0Rp
c3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBpZiAoX19sZW4gPiBf
X2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBf
X21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9fc3RhYmxlX3NvcnRf
YWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAg
ICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihf
X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgIH0KICAgICAgX19tZXJnZV9hZGFwdGl2
ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0
KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFw
dGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2Ug
X19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8g
MjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAg
ICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0YWJsZV9zb3J0X2Fk
YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19zdGFibGVfc29ydF9h
ZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAg
ICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl
ciwgX19jb21wKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9f
bGFzdCwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgIH0KICAgICAgX19tZXJnZV9hZGFwdGl2ZShf
X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwK
ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAg
fQojIDI0MzAgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAg
c3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg
X0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9S
YW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAg
aWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgIGVsc2UKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f
Zmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSkpOwog
ICAgfQojIDI0NjYgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJl
PgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgog
ICAgIAoKICAgICAKCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwg
X1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9
PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29t
cCk7CiAgICAgIGVsc2UKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9f
bGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQojIDI1MDIgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlw
ZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9f
bWlkZGxlKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19p
IDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICAgICAg
X19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAg
ICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIH0KIyAyNTQwICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHBhcnRpYWxf
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlw
ZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBf
X21pZGRsZSwgX19jb21wKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21p
ZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2Zp
cnN0KSkKICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVl
VHlwZSgqX19pKSwgX19jb21wKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2NvbXApOwogICAgfQojIDI1NzkgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXI+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFs
dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg
X0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgaWYgKF9fcmVz
dWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAg
ICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVz
dWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAg
ICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAg
IG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICAgICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0
X2ZpcnN0KQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNl
VHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9y
ZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dFZhbHVlVHlwZSgqX19maXJzdCkpOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBz
b3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHJldHVy
biBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjYzMyAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9t
QWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
cmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19y
ZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVl
X3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoK
CiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1
bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19y
ZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3Jl
YWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9
ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJz
dDsKICAgICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxf
bGFzdCwgX19jb21wKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAg
aWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgICAgIF9fYWRqdXN0
X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3Qp
LAogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpLAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQog
ICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21w
KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjg2ICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAog
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmly
c3QgPiAzKSB7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191
bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAt
IF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAg
ICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0g
X19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgfQojIDI3MjggIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJl
PgogICAgdm9pZAogICAgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoK
CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlh
bigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIGlmIChfX2N1
dCA8PSBfX250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAg
ICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KIyAyNzY4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysv
My40L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKCgoKICAg
ICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9y
d2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19o
YWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2
YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsK
ICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAg
ICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAg
ICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAg
IH0KIyAyODE2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
Q29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
dmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19s
ZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUg
X19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4g
PiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9f
Zmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19j
b21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAg
ICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsK
ICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0K
ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjg1NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAg
CiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0Zvcndh
cmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFs
ZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFu
Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAg
ICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2ZpcnN0ID0g
X19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0g
X19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9
CiMgMjkwMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu
ID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9f
aGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4g
MCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2Zp
cnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29t
cChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVs
c2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0Owog
ICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAg
ICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5NDggIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8z
LjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1
YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0
IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0
YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu
ID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9f
aGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAg
ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAg
ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsK
ICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAg
ICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0g
bG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2Uo
X19maXJzdCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRk
bGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwg
X0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICBy
ZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7
CiAgICB9CiMgMzAwMyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1
YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0
IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAK
ICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIg
X19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAg
ICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAg
ICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlk
ZGxlLCBfX3ZhbCkpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsr
X19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0K
ICAgICAgICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xl
biA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5k
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wKTsKICAgICAgICAgIGFkdmFuY2UoX19m
aXJzdCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUs
IF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJ
dGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAg
ICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2Zp
cnN0KTsKICAgIH0KIyAzMDUyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgog
ICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCgog
ICAgIAogICAgIAoKICAgICAKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShf
X3ZhbCA8ICpfX2kpOwogICAgfQojIDMwODMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAg
ICAgCgoKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFz
dCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICFfX2NvbXAo
X192YWwsICpfX2kpOwogICAgfQojIDMxMTUgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l
IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBt
ZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAg
IAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz
dDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAg
ICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19m
aXJzdDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJu
IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KSk7CiAgICB9CiMgMzE2NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRl
cjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQog
ICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9f
Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAg
ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg
ICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJz
dDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlz
dGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E
aXN0YW5jZSBfX2xlbjIpCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0g
MCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAg
ICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19m
aXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAg
ICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAg
ICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwg
X19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9f
bGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21p
ZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX2xlbjIy
ID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAg
ICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vj
b25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJz
dF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vj
b25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0
X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUsIHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUs
IF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f
Zmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4xMSwgX19sZW4yMik7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxl
LCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl
bjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs
IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAg
IHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKF9f
Y29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJz
dCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19z
ZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAg
X0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAg
ICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19s
ZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFz
dCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMjIgPSBzdGQ6OmRpc3RhbmNl
KF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9f
bGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIy
KTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAq
X19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBzdGQ6OmRpc3RhbmNlKF9f
Zmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9f
bWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlk
ZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBzdGQ6OmRpc3Rh
bmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZl
cihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91
dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyLCBfX2Nv
bXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEs
IHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3Rh
bmNlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGly
ZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3Rh
bmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAg
IHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgICAgIGlmIChfX2xl
bjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZl
cl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICBjb3B5X2Jh
Y2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICAgIHJldHVybiBjb3B5KF9f
YnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9f
bGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19idWZmZXJfZW5kID0gY29weShfX2Zp
cnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIGNvcHkoX19taWRkbGUsIF9fbGFzdCwg
X19maXJzdCk7CiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVy
X2VuZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICByb3RhdGUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBzdGQ6OmRpc3Rh
bmNlKF9fbWlkZGxlLCBfX2xhc3QpKTsKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyMz4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0Jp
ZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJl
Y3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjMgX19yZXN1bHQpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAg
ICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAg
ICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJk
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1f
X2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xh
c3QxKSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9f
Zmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly
c3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9
CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAg
ICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsK
ICAgICAgICB9CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5
cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGly
ZWN0aW9uYWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
Zmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJz
dDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19s
YXN0MiwgX19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICBy
ZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAt
LV9fbGFzdDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBp
ZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0g
Kl9fbGFzdDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAg
cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAg
ICAgICAgLS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9f
cmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAg
ICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1
bHQpOwogICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNl
LCB0eXBlbmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9f
bGVuMiwKICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf
X2J1ZmZlcl9zaXplKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19s
ZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5k
ID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShf
X2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAg
ICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAg
ICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19i
dWZmZXIpOwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7
CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsK
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2Ug
X19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAg
ICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2Uo
X19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBs
b3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAg
ICAgICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAg
ICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9
IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xl
bjIyKTsKICAgICAgICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0
LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBz
dGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAg
X19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVu
MjIsIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZl
cl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1
dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFw
dGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjEx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVy
LCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1Bv
aW50ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdl
X2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl
bjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm
ZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4x
IDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0g
Y29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1
ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwog
ICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsK
ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0
LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRk
bGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0
OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7
CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAg
ICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNl
KF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0g
bG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAg
ICAgICAgICAgICAgICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRf
Y3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAg
X19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRf
Y3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3Vu
ZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgICAgICAg
ICAgICAgX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQog
ICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUs
IF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4x
IC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9f
Zmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7
CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs
IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAg
ICAgIH0KICAgIH0KIyAzNTA4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQK
ICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1Zh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0
aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAg
ICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0g
X19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0gc3Rk
OjpkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4y
ID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVm
ZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0
KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRf
YnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAgICAg
ZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwg
X19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBf
RGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVy
Z2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1
ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAg
IF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19t
aWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0
YW5jZVR5cGUgX19sZW4xID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAg
IF9EaXN0YW5jZVR5cGUgX19sZW4yID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsK
CiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4g
X19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAg
ICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9f
bGVuMSwgX19sZW4yLCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2
ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAg
aW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19m
aXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZigqX19maXJzdDEg
PCAqX19maXJzdDIpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UKICAgICAgICAg
ICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0
MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1
dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0
MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKF9f
Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg
IGVsc2UKICAgICAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19m
aXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs
IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJ
dGVyCiAgICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmly
c3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmly
c3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsK
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog
ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAg
ICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFz
dDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091
dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgog
ICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKF9fY29t
cCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29t
cCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAg
cmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg
c2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAg
ewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJz
dDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7
CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwog
ICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx
LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNl
IGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsK
ICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsK
ICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
cj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg
ICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAg
ICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg
ICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0
eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAg
ICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxz
ZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7
CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0
MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs
dCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3N5
bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgog
ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQog
ICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0Owog
ICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg
ICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19m
aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBf
T3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAK
CiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAg
ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg
ICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmly
c3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAg
ICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAg
ZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAg
ICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAg
ICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1l
bnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1
bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBp
ZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
PgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYg
KCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0g
X19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9f
Y29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsK
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAK
ICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAg
ICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0g
X19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19pIDwgKl9f
aWkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAg
ICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJf
c3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAg
ICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9u
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoK
CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlm
IChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0
OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9f
aWkpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAg
ICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAgICAg
IGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0
KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog
ICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAg
ICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBf
X2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2lpIDwgKl9f
aSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg
IHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9z
d2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAg
ICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24o
X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoK
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYg
KF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7
CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19paSwgKl9f
aSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAg
ICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAgICAg
aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3Qp
IHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2Zp
cnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKICAg
IHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0
MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKCpfX2ZpcnN0MSA9
PSAqX19pdGVyKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xh
c3QxOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfSW5wdXRJdGVyCiAgICBm
aW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAg
IAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0
MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKF9fY29tcCgqX19m
aXJzdDEsICpfX2l0ZXIpKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVy
biBfX2xhc3QxOwogICAgfQojIDQyMDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUg
X0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJ
dGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAg
aWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVs
c2UgewogICAgICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdo
aWxlICgxKSB7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAg
ICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgICAg
ICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7
CiAgICAgICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmly
c3QxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5
cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5k
KF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAg
ICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewogICAgICBpZiAoX19m
aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAg
ICAgICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEp
IHsKICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2Vh
cmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAg
ICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVz
dWx0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0
OwogICAgICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+
CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiBy
ZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9S
ZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2Zp
cnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFz
dDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRl
cjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEp
CiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19y
ZXN1bHQsIC1zdGQ6OmRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5h
bWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9l
bmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJl
Y3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFy
eVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZl
cnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRl
ZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAg
IF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0Mihf
X2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9f
bGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2
SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29tcCk7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJl
dHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
cmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtc3Rk
OjpkaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQo
X0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9f
bGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0MikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5h
cnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0Zvcndh
cmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0Zv
cndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
X0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAg
ICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCn0KIyA3MCAiL3RtcC9pbnN0L2lu
Y2x1ZGUvYysrLzMuNC9hbGdvcml0aG0iIDIgMwojIDU3ICIvdG1wL2luc3QvaW5jbHVkZS9jKysv
My40L3N0cmluZyIgMiAzCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2Jhc2lj
X3N0cmluZy50Y2MiIDEgMwojIDQ1ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvYmFz
aWNfc3RyaW5nLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFt
ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3Np
emUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29u
c3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19l
bXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNp
emVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf
X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQg
JiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3Jl
ZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBlIF9f
aSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1
ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19idWZbX19pKytd
ID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAgICAgIF9SZXAq
IF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+X01fbGVuZ3Ro
ID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBmb3IgKDs7KQog
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZk
YXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0g
X19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAgICAgICAgZm9y
ICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9
PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
X19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAgICAgICAgICAg
ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgX1Jl
cCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAgICAg
ICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKICAg
ICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgX19yID0g
X19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAg
ICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAg
ICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19l
bmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv
cl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxv
YygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAg
ICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAgICAgICAg
ICBfX3Rocm93X2xvZ2ljX2Vycm9yKCJhdHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxs
IHBvaW50ZXIiKTsKCiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVf
dHlwZT4oc3RkOjpkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCgogICAgICAgIF9SZXAqIF9fciA9
IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9T
X2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0KICAgICAgICBj
YXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwog
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9f
ZG5ldzsKCiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1p
bmFsOwogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
X1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19h
KQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgIHJl
dHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1JlcCogX19yID0gX1Jl
cDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgaWYg
KF9fbikKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwg
X19uLCBfX2MpOwogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAg
IF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICBf
X3ItPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6
Ol9TX3Rlcm1pbmFsOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19z
dHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBsdXMoX19zdHIu
X01fcmVwKCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3IoKSksCiAgICAg
ICAgICAgICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29u
c3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUo
KSwgX0NoYXJUKCksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIDogX01fZGF0
YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0Fs
bG9jKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl
X3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9j
JiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3Bv
cyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBf
X24pLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6
ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0
cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3Qg
X0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25z
dHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykgOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19zICsgbnBvcywgX19hKSwgX19hKQogICAgeyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNp
Y19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAg
ICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIg
X19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRh
cGx1cyhfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKICAgICAg
ICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigp
OwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwg
X19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9f
YSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93
ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2Fw
YWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSku
ZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp
KQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFr
ZWQoKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX29s
ZF9zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6ZSA9
IF9fb2xkX3NpemUgKyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFyVCogX19zcmMg
PSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93
X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAoX01fcmVwKCkt
Pl9NX2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAgICAgIHsKCiAg
ICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoKICAgICAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKCiAgICAgICAg
ICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9fcGFnZXNpemUgLSBfX21hbGxv
Y19oZWFkZXJfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX1JlcCog
X19yOwogICAgICAgICAgaWYgKF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpICYmIF9fbmV3X3NpemUg
PiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19u
ZXdfc2l6ZSA+IDIqY2FwYWNpdHkoKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX25ld19zaXplIDogMipjYXBhY2l0eSgpLCBfX2EpOwogICAgICAgICAgZWxzZQogICAgICAg
ICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAgICAgICAgICAg
dHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOwog
ICAgICAgICAgICAgIGlmIChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6
OmNvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kaXNw
b3NlKGdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9f
ci0+X01fcmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9f
bGVuMSAhPSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9N
X2RhdGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgfQog
ICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5n
dGggPSBfX25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190
ZXJtaW5hbDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIGlm
IChfX3JlcyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQog
ICAgICAgIHsKICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAg
ICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUiKTsKCiAgICAg
ICAgICBpZiAoX19yZXMgPCB0aGlzLT5zaXplKCkpCiAgICAgICAgICAgIF9fcmVzID0gdGhpcy0+
c2l6ZSgpOwogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwog
ICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0g
dGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAg
ICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYgX19z
KQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9NX3Jl
cCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+X01faXNfbGVh
a2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYg
KHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQogICAgICAgIHsK
ICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBfTV9kYXRhKF9f
cy5fTV9kYXRhKCkpOwogICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAgICAgIH0KCiAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAxKF9NX2liZWdp
bigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgYmFzaWNfc3Ry
aW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAqdGhpcyA9
IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcCoK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1Nf
Y3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCiAgICB7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmlu
Z190eXBlOwoKCiAgICAgIGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4X3NpemUpCgoKCiAgICAgICAg
X190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7CgoKCgogICAg
ICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6
ZW9mKF9SZXApOwojIDQyMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2Jhc2ljX3N0
cmluZy50Y2MiIDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBj
b25zdCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFs
bG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSAr
IF9fbWFsbG9jX2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAg
c2l6ZV90IF9fZXh0cmEgPQogICAgICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19t
YWxsb2NfaGVhZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6
ZTsKICAgICAgICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAg
ICAgICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9m
KF9SZXApOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkK
ICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBh
Z2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXpl
KSkKICAgICAgICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBf
X2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSAr
IDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2
b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUp
OwogICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2Fw
YWNpdHkgPSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBf
X3AtPl9NX2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0No
YXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAg
ICBfTV9jbG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsK
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3Jl
czsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUg
LSBfX21hbGxvY19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQog
ICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVx
dWVzdGVkX2NhcCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBh
Y2l0eSkKCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIq
X01fY2FwYWNpdHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9j
YXAgOiAyKl9NX2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9S
ZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xl
bmd0aCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6
Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAg
ICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ry
b3koX19hbGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9y
ZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7
CiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9y
KCJiYXNpY19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24g
LSBfX3NpemUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlz
LT5lcmFzZShfX24pOwoKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFj
ZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAg
ICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVw
bGFjZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAg
ICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2Ru
ZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6ZGlzdGFuY2UoX19rMSwgX19rMikpOwog
ICAgICAgIHNpemVfdHlwZSBfX2RvbGQgPSBfX2kyIC0gX19pMTsKICAgICAgICBzaXplX3R5cGUg
X19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsKCiAgICAgICAgaWYgKF9fZG1heCA8PSBfX2RuZXcp
CiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfTV9yZXBsYWNl
Iik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICAg
IF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKCiAgICAgICAgaWYgKF9fZG5ldykK
ICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9fazEsIF9fazIpOwoK
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBz
aXplX3R5cGUgX19uMikKICAgIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9f
c3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAgICAgICBfX3Rocm93
X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIGNvbnN0IGJvb2wg
X190ZXN0bjIgPSBfX24yIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICBjb25zdCBzaXplX3R5
cGUgX19mb2xkbjIgPSBfX3Rlc3RuMiA/IF9fbjIgOiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAg
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgX19uMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBfX2ZvbGRuMik7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIpCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBfX3N0ci5zaXplKCk7
CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYg
KF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsK
ICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIu
X01faWJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVuZCgp
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQo
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
KQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX3N0ci5zaXplKCkg
LSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2Fw
YWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3Jl
cGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2soX19wb3MpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVu
ID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgp
KQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9z
YWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9D
aGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUo
KTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNl
cnZlKF9fbGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVu
ZCgpLCBfX24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNp
emVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjps
ZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNl
cnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xo
cyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3Ry
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4K
ICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5n
X3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAg
ICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlw
ZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19z
dHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFj
ZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9f
YykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90
eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAo
dGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJv
cigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24x
LCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01f
ZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcykgY29uc3QK
ICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0aGlzLT5z
aXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsKCiAgICAg
IHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CgogICAgICBy
ZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0No
YXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19z
aXplOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsg
X194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJl
dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29u
c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6
ZV90eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsK
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6
ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Ag
PSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAg
aWYgKF9fcCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19z
aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAg
ICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwogICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9z
LCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAg
ICAgfQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVy
biBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0
CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChf
X3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAg
ICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoK
ICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAgICBpZiAo
dHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgICAgIHJl
dHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9m
aXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
KSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyAr
K19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5
cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkK
ICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAo
LS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBk
bwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywg
X19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwog
ICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAgICAgfQog
ICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAg
c2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgp
OyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9k
YXRhKClbX194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBv
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z
KSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBf
X3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6
OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAg
ICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6
ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7
CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19w
b3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNf
dHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAg
cmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsK
ICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9D
aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAg
ICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAg
ICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEo
X01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwog
ICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAg
cmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXpl
X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9f
c3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3Jz
aXplPSBzdGQ6Om1pbihfX3NpemUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVu
ID0gc3RkOjptaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlw
ZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAg
IGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4g
X19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24x
LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19wb3My
LCBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
aXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAg
IGlmIChfX3BvczEgPiBfX3NpemUgfHwgX19wb3MyID4gX19vc2l6ZSkKICAgICAgICBfX3Rocm93
X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUg
X19yc2l6ZSA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlw
ZSBfX3Jvc2l6ZSA9IHN0ZDo6bWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAgICBzaXpl
X3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7CiAgICAgIGludCBfX3Ig
PSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvczEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3BvczIsIF9fbGVuKTsKICAg
ICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwogICAgICByZXR1
cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBl
IF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX2xl
biA9IHN0ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlw
ZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAg
ICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBf
X3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFz
aWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190
eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBzdGQ6Om1pbihfX3Np
emUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fcnNp
emUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0
YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBf
X3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQK
ICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAg
ICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJv
d19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBl
IF9fb3NpemUgPSBzdGQ6Om1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAg
ICBzaXplX3R5cGUgX19yc2l6ZSA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAg
ICAgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGlu
dCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xl
bik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAg
ICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzLCBjbGFzcyBfQWxsb2M+CiAgICB2b2lkCiAgICBfU19zdHJpbmdfY29weShjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKICAgICAgICAgICAgICAg
ICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9fYnVmc2l6KQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsK
ICAgICAgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBl
IF9fYnl0ZXMgPSBzdGQ6Om1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFp
dHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0
ZXNdID0gX0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19z
dHJpbmc8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPGNoYXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19p
c3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwg
Y2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0
bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CgoKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf
aXN0cmVhbTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYs
IHdzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08d2NoYXJfdD4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25zdCB3c3RyaW5nJik7
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGlu
ZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3QpOwogIGV4dGVybiB0
ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0
cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsKCn0KIyA1OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9zdHJpbmciIDIgMwojIDUwICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvbG9j
YWxlZndkLmgiIDIgMwojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9mdW5jdGV4
Y2VwdC5oIiAxIDMKIyAzNCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2Z1bmN0ZXhj
ZXB0LmgiIDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2V4Y2VwdGlvbl9kZWZpbmVz
LmgiIDEgMwojIDM1ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvZnVuY3RleGNlcHQu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2
b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Ro
cm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoK
CiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVu
Z3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5n
ZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDUxICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQK
ewoKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQsIGNvbnN0
IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAog
ICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYp
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNsb3dl
cihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQs
IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJULCBjb25zdCBs
b2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg
IGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBl
cihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgoKCiAg
Y2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBj
dHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNsYXNz
IGN0eXBlPHdjaGFyX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBj
dHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2U7CiAgY2xhc3MgX19lbmNfdHJhaXRz
OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5h
bWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0
PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDx3Y2hh
cl90LCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFt
ZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9D
aGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNs
YXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3Rf
YnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZTsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFtZTsKCgog
IGNsYXNzIHRpbWVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXQ7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRv
cjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAg
Y2xhc3MgdGltZV9wdXRfYnluYW1lOwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D
aGFyVD4gPgogICAgY2xhc3MgbW9uZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xh
c3MgbW9uZXlfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZh
bHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJv
b2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAgY2xhc3Mg
bWVzc2FnZXNfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNz
YWdlczsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5h
bWU7CgoKICBjbGFzcyBsb2NhbGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5zaWduZWQg
aW50IGNhdGVnb3J5OwoKCiAgICBjbGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAgY2xhc3Mg
X0ltcGw7CgogICAgZnJpZW5kIGNsYXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9JbXBsOwoK
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYK
ICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G
YWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRo
cm93KCk7CgoKCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBzdGF0aWMg
Y29uc3QgY2F0ZWdvcnkgY3R5cGUgPSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5
IG51bWVyaWMgPSAxTCA8PCAxOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUgPSAx
TCA8PCAyOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwogICAgc3Rh
dGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBjb25zdCBj
YXRlZ29yeSBtZXNzYWdlcyA9IDFMIDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgYWxs
ID0gKGN0eXBlIHwgbnVtZXJpYyB8IGNvbGxhdGUgfAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZSB8IG1vbmV0YXJ5IHwgbWVzc2FnZXMpOwoKCiAgICBsb2Nh
bGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7
CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFyKiBfX3MpOwoKICAgIGxvY2FsZShj
b25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7Cgog
ICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRl
Z29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUo
Y29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93
KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhl
cikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQog
ICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3Q7CgoKICAgIHN0cmluZwog
ICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBf
X290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj
b25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMt
Pm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAgICBvcGVyYXRv
cigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAg
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxl
Jik7CgogICAgc3RhdGljIGNvbnN0IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToK
CiAgICBfSW1wbCogX01faW1wbDsKCgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAg
ICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsKCgoKCgoKICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
X1NfY2F0ZWdvcmllc19zaXplID0gNjsKCgoKCgoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1Nf
ZXh0cmFfY2F0ZWdvcmllc19zaXplID0gNjsKCgoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIqIF9T
X2NhdGVnb3JpZXNbX1NfY2F0ZWdvcmllc19zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemVdOwoKICAgIGV4cGxpY2l0CiAg
ICBsb2NhbGUoX0ltcGwqKSB0aHJvdygpOwoKICAgIHN0YXRpYyBpbmxpbmUgdm9pZAogICAgX1Nf
aW5pdGlhbGl6ZSgpCiAgICB7CiAgICAgIGlmICghX1NfY2xhc3NpYykKICAgICAgICBjbGFzc2lj
KCk7CiAgICB9CgogICAgc3RhdGljIGNhdGVnb3J5CiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnko
Y2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9NX2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNl
LCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CiAgfTsKCgoKICBjbGFzcyBs
b2NhbGU6Ol9JbXBsCiAgewogIHB1YmxpYzoKCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAg
ZnJpZW5kIGNsYXNzIGxvY2FsZTo6ZmFjZXQ7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0
PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxl
Jik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAg
ICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCiAgcHJpdmF0ZToKCiAgICBfQXRv
bWljX3dvcmQgX01fcmVmZXJlbmNlczsKICAgIGZhY2V0KiogX01fZmFjZXRzOwogICAgc2l6ZV90
IF9NX2ZhY2V0c19zaXplOwoKICAgIGNoYXIqIF9NX25hbWVzW19TX2NhdGVnb3JpZXNfc2l6ZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfU19leHRy
YV9jYXRlZ29yaWVzX3NpemVdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9T
X2lkX2N0eXBlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbnVt
ZXJpY1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2NvbGxhdGVb
XTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF90aW1lW107CiAgICBz
dGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbW9uZXRhcnlbXTsKICAgIHN0YXRp
YyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNzYWdlc1tdOwogICAgc3RhdGljIGNv
bnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBfU19mYWNldF9jYXRlZ29yaWVzW107CgogICAg
aW5saW5lIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7IF9fYXRvbWlj
X2FkZCgmX01fcmVmZXJlbmNlcywgMSk7IH0KCiAgICBpbmxpbmUgdm9pZAogICAgX01fcmVtb3Zl
X3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsKICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgm
X01fcmVmZXJlbmNlcywgLTEpID09IDEpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsgZGVsZXRlIHRoaXM7IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9
CiAgICAgICAgfQogICAgfQoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9J
bXBsKGNvbnN0IGNoYXIqLCBzaXplX3QpOwogICAgX0ltcGwoZmFjZXQqKiwgc2l6ZV90LCBib29s
KTsKCiAgIH5fSW1wbCgpIHRocm93KCk7CgogICAgX0ltcGwoY29uc3QgX0ltcGwmKTsKCiAgICB2
b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgX0ltcGwmKTsKCiAgICBpbmxpbmUgYm9vbAogICAgX01f
Y2hlY2tfc2FtZV9uYW1lKCkKICAgIHsKICAgICAgYm9vbCBfX3JldCA9IHRydWU7CiAgICAgIGZv
ciAoc2l6ZV90IF9faSA9IDA7CiAgICAgICAgICAgX19yZXQgJiYgX19pIDwgX1NfY2F0ZWdvcmll
c19zaXplICsgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplIC0gMTsKICAgICAgICAgICArK19faSkK
ICAgICAgICBfX3JldCAmPSAoc3RyY21wKF9NX25hbWVzW19faV0sIF9NX25hbWVzW19faSArIDFd
KSA9PSAwKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlcGxh
Y2VfY2F0ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9y
ZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsK
CiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxl
OjppZCopOwoKICAgIHZvaWQKICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCos
IGZhY2V0Kik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBpbmxpbmUgdm9p
ZAogICAgICBfTV9pbml0X2ZhY2V0KF9GYWNldCogX19mYWNldCkKICAgICAgeyBfTV9pbnN0YWxs
X2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2ZhY2V0KTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4KICAgIGxvY2FsZTo6bG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0
KiBfX2YpCiAgICB7CiAgICAgIF9NX2ltcGwgPSBuZXcgX0ltcGwoKl9fb3RoZXIuX01faW1wbCwg
MSk7CiAgICAgIF9NX2ltcGwtPl9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7CiAg
ICAgIGZvciAoc2l6ZV90IF9faSA9IDA7CiAgICAgICAgICAgX19pIDwgX1NfY2F0ZWdvcmllc19z
aXplICsgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplOyArK19faSkKICAgICAgICB7CiAgICAgICAg
ICBkZWxldGUgW10gX01faW1wbC0+X01fbmFtZXNbX19pXTsKICAgICAgICAgIGNoYXIqIF9fbmV3
ID0gbmV3IGNoYXJbMl07CiAgICAgICAgICBzdHJjcHkoX19uZXcsICIqIik7CiAgICAgICAgICBf
TV9pbXBsLT5fTV9uYW1lc1tfX2ldID0gX19uZXc7CiAgICAgICAgfQogICAgfQoKCiAgY2xhc3Mg
bG9jYWxlOjpmYWNldAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAg
IGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVu
Y2VzOwoKICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBfX2NfbG9jYWxlIF9TX2NfbG9jYWxlOwoK
ICAgIGV4cGxpY2l0CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2
aXJ0dWFsCiAgICB+ZmFjZXQoKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfY3JlYXRlX2NfbG9j
YWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAg
ICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSAwKTsKCiAgICBzdGF0aWMgX19jX2xvY2FsZQogICAg
X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgICBzdGF0aWMgdm9pZAog
ICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICBwcml2YXRlOgog
ICAgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01f
cmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsKCiAg
ICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgZmFjZXQmKTsKICB9OwoKCgogIGNsYXNzIGxvY2Fs
ZTo6aWQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQg
Y2xhc3MgbG9jYWxlOjpfSW1wbDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAg
ZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFj
ZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7CgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5k
ZXg7CgoKICAgIHN0YXRpYyBfQXRvbWljX3dvcmQgX1NfaGlnaHdhdGVyOwoKICAgIHZvaWQKICAg
IG9wZXJhdG9yPShjb25zdCBpZCYpOwoKICAgIGlkKGNvbnN0IGlkJik7CgogIHB1YmxpYzoKCgog
ICAgaWQoKTsKCiAgICBpbmxpbmUgc2l6ZV90CiAgICBfTV9pZCgpIGNvbnN0CiAgICB7CiAgICAg
IGlmICghX01faW5kZXgpCiAgICAgICAgX01faW5kZXggPSAxICsgX19leGNoYW5nZV9hbmRfYWRk
KCZfU19oaWdod2F0ZXIsIDEpOwogICAgICByZXR1cm4gX01faW5kZXggLSAxOwogICAgfQogIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9m
YWNldChjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog
ICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0
OSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pb3MiIDIgMwojIDEgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0NCAiL3RtcC9pbnN0L2luY2x1ZGUv
YysrLzMuNC9iaXRzL2lvc19iYXNlLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIGVudW0g
X0lvc19GbXRmbGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxp
bmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRm
bGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkg
JiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3Bl
cmF0b3J8KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBf
SW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19i
KSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBf
X2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nh
c3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19G
bXRmbGFncwogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9f
YikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MK
ICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyBy
ZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0
b3JePShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9f
YSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9z
X0ZtdGZsYWdzIF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+
KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0g
MUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVu
bW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3Rh
dGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUg
X0lvc19PcGVubW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9k
ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBz
dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0
b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9z
X09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7
IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9f
YSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlu
bGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3Nf
T3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lv
c19PcGVubW9kZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2Rl
IF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1v
ZGUKICBvcGVyYXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9k
ZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9p
b3NfaW9zdGF0ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3Bl
cmF0b3ImKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lv
c19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7
IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBf
SW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+
KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUK
ICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVy
biBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50Pihf
X2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUm
IF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAg
aW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3Nf
SW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9z
X0lvc3RhdGUKICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19i
KQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAg
b3BlcmF0b3J+KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0
aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01faW9zX3NlZWtk
aXJfZW5kID0gMUwgPDwgMTYgfTsKIyAxNTYgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0
cy9pb3NfYmFzZS5oIiAzCiAgY2xhc3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCgogICAgY2xh
c3MgZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBl
eHBsaWNpdAogICAgICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7CgoKCiAg
ICAgIHZpcnR1YWwKICAgICAgfmZhaWx1cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyKgogICAgICB3aGF0KCkgY29uc3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgogICAgICBl
bnVtIHsgX01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07
CgogICAgfTsKIyAyMTAgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9pb3NfYmFzZS5o
IiAzCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxwaGEp
OwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1NfZGVjKTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfZml4ZWQpOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRm
bGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsKCgoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBp
bnRlcm5hbCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7CgoKICAgIHN0YXRp
YyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xlZnQpOwoK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf
b2N0KTsKCgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3Nf
ZmxhZ3M6Ol9TX3JpZ2h0KTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9
IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsKCgogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsK
CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU19zaG93cG9pbnQpOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0g
Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOwoKICAgIHN0YXRpYyBjb25zdCBmbXRm
bGFncyBza2lwd3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tpcHdzKTsKCiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191bml0
YnVmKTsKCgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9f
aW9zX2ZsYWdzOjpfU191cHBlcmNhc2UpOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBhZGp1
c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7CgogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19i
YXNlZmllbGQpOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxkID0gZm10Zmxh
Z3MoX19pb3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOwojIDI2NyAiL3RtcC9pbnN0L2luY2x1ZGUv
YysrLzMuNC9iaXRzL2lvc19iYXNlLmgiIDMKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3Rh
dGU7CgoKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxh
Z3M6Ol9TX2JhZGJpdCk7CgogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0gaW9zdGF0
ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKCgoKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGZh
aWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKCiAgICBzdGF0aWMgY29u
c3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsKIyAyOTQgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvYml0cy9pb3NfYmFzZS5oIiAzCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1vZGUgb3Bl
bm1vZGU7CgogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9IG9wZW5tb2RlKF9faW9zX2Zs
YWdzOjpfU19hcHApOwoKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShf
X2lvc19mbGFnczo6X1NfYXRlKTsKCgoKCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5
ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CgogICAgc3RhdGljIGNvbnN0IG9wZW5t
b2RlIGluID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsKCiAgICBzdGF0aWMgY29uc3Qg
b3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX291dCk7CgogICAgc3RhdGlj
IGNvbnN0IG9wZW5tb2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsK
IyAzMjEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9pb3NfYmFzZS5oIiAzCiAgICB0
eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwoKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGJl
ZyA9IHNlZWtkaXIoMCk7CgogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2Rpcigx
KTsKCiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwojIDM0MyAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2lvc19iYXNlLmgiIDMKICAgIGVudW0gZXZlbnQK
ICAgIHsKICAgICAgZXJhc2VfZXZlbnQsCiAgICAgIGltYnVlX2V2ZW50LAogICAgICBjb3B5Zm10
X2V2ZW50CiAgICB9OwoKCgoKICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZl
bnQsIGlvc19iYXNlJiwgaW50KTsKCgoKCiAgICB2b2lkCiAgICByZWdpc3Rlcl9jYWxsYmFjayhl
dmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCk7CgogIHByb3RlY3RlZDoKCgoKCgoKICAg
IHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZt
dGZsYWdzIF9NX2ZsYWdzOwogICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CiAgICBpb3N0YXRlIF9N
X3N0cmVhbWJ1Zl9zdGF0ZTsKCgoKCiAgICBzdHJ1Y3QgX0NhbGxiYWNrX2xpc3QKICAgIHsKCiAg
ICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJh
Y2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAgICAgX0F0b21pY193b3JkIF9NX3JlZmNv
dW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9fZm4s
IGludCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYikK
ICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwgX01faW5kZXgoX19pbmRleCksIF9N
X3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAgICBfTV9hZGRfcmVmZXJlbmNlKCkgeyBf
X2F0b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsgfQoKCiAgICAgIGludAogICAgICBfTV9yZW1v
dmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZjb3VudCwg
LTEpOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tzOwoKICAgIHZv
aWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7CgogICAgdm9pZAog
ICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAgIHN0cnVjdCBfV29yZHMKICAgIHsK
ICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01faXdvcmQ7CiAgICAgIF9Xb3Jkcygp
IDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsgfQogICAgfTsKCgogICAgX1dvcmRzIF9NX3dv
cmRfemVybzsKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19sb2NhbF93b3JkX3NpemUgPSA4Owog
ICAgX1dvcmRzIF9NX2xvY2FsX3dvcmRbX1NfbG9jYWxfd29yZF9zaXplXTsKCgogICAgaW50IF9N
X3dvcmRfc2l6ZTsKICAgIF9Xb3JkcyogX01fd29yZDsKCiAgICBfV29yZHMmCiAgICBfTV9ncm93
X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9jYWxlIF9NX2lvc19sb2NhbGU7CgogICAgdm9p
ZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoKCgoKICAgIGNsYXNzIEluaXQKICAgIHsKICAg
ICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAgcHVibGljOgogICAgICBJbml0KCk7CiAgICAg
IH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfY3JlYXRlKGJvb2wgX19z
eW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19kZXN0cm95KCk7CgogICAgcHJp
dmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0OwogICAgICBzdGF0aWMgYm9v
bCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07CgoKCgoKCiAgICBpbmxpbmUgZm10ZmxhZ3MK
ICAgIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxhZ3M7IH0KIyA0NzIgIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAg
IGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01f
ZmxhZ3M7CiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAg
fQojIDQ4OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2lvc19iYXNlLmgiIDMKICAg
IGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBm
bXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyB8PSBfX2ZtdGZsOwogICAg
ICByZXR1cm4gX19vbGQ7CiAgICB9CiMgNTA1ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Jp
dHMvaW9zX2Jhc2UuaCIgMwogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9f
Zm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9m
bGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0gKF9fZm10
ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgoKCgoKCgogICAgaW5saW5l
IHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsg
fQojIDUzMiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2lvc19iYXNlLmgiIDMKICAg
IGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfTV9wcmVj
aXNpb247IH0KCgoKCgoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oc3RyZWFt
c2l6ZSBfX3ByZWMpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV9wcmVjaXNpb247
CiAgICAgIF9NX3ByZWNpc2lvbiA9IF9fcHJlYzsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoK
CgoKCgoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9N
X3dpZHRoOyB9CgoKCgoKCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFtc2l6
ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAgICAg
X01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KIyA1ODEgIi90bXAv
aW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBzdGF0aWMgYm9vbAog
ICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CiMgNTkzICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgbG9jYWxlCiAgICBpbWJ1ZShj
b25zdCBsb2NhbGUmIF9fbG9jKTsKIyA2MDQgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0
cy9pb3NfYmFzZS5oIiAzCiAgICBpbmxpbmUgbG9jYWxlCiAgICBnZXRsb2MoKSBjb25zdCB7IHJl
dHVybiBfTV9pb3NfbG9jYWxlOyB9CgoKCgoKICAgIHN0YXRpYyBpbnQKICAgIHhhbGxvYygpIHRo
cm93KCk7CgoKCgogICAgaW5saW5lIGxvbmcmCiAgICBpd29yZChpbnQgX19peCkKICAgIHsKICAg
ICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0
dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCgoKCiAgICBpbmxpbmUgdm9pZComCiAgICBwd29y
ZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRf
c2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193
b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsKICAgIH0KCgoKCgoKICAg
IHZpcnR1YWwgfmlvc19iYXNlKCk7CgogIHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoKCiAg
cHJpdmF0ZToKICAgIGlvc19iYXNlKGNvbnN0IGlvc19iYXNlJik7CgogICAgaW9zX2Jhc2UmCiAg
ICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jhc2UmKTsKCiAgfTsKCgoKICBpbmxpbmUgaW9zX2Jhc2Um
CiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh
c2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFz
ZSYKICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYo
aW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBp
b3NfYmFzZSYKICBzaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBp
b3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu
c2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlu
bGluZSBpb3NfYmFzZSYKICBub3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f
YmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0K
CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0K
CgogIGlubGluZSBpb3NfYmFzZSYKICBza2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBf
X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAg
aW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAg
aW5saW5lIGlvc19iYXNlJgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f
YmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKCgogIGlubGluZSBpb3NfYmFzZSYKICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlvc19iYXNlOjphZGp1
c3RmaWVsZCk7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg
bGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0
LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0
Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAg
ICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFz
ZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIG9j
dChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlv
c19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKCiAgaW5saW5lIGlv
c19iYXNlJgogIGZpeGVkKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZp
ZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQojIDUwICIvdG1wL2luc3QvaW5jbHVkZS9j
KysvMy40L2lvcyIgMiAzCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9zdHJlYW1idWYi
IDEgMwojIDQ0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwoKCgoKCgoK
bmFtZXNwYWNlIHN0ZAp7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CiMgMTI0ICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgogICAgewogICAgcHVi
bGljOgoKCgoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
X1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6
aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBv
c190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZf
dHlwZSBvZmZfdHlwZTsKIyAxNDcgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvc3RyZWFtYnVm
IiAzCiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVm
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0YXRlX3R5cGUgX19z
dGF0ZV90eXBlOwoKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFp
dHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJh
aXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRy
YWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90
eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9y
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0cmVhbXNpemUKICAgICAg
X19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4mIF9f
aW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Jpbixf
X3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6CiMgMTcxICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsK
CgoKCgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXplOwoKCgoKCgogICAgICBzaXplX3QgX01fYnVm
X3NpemVfb3B0OwoKCgoKCgoKICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsKIyAyMDUgIi90bXAv
aW5zdC9pbmNsdWRlL2MrKy8zLjQvc3RyZWFtYnVmIiAzCiAgICAgIGNoYXJfdHlwZSogX01faW5f
YmVnOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9l
bmQ7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRf
Y3VyOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9lbmQ7CgoKCgoKCgogICAgICBpb3NfYmFzZTo6
b3Blbm1vZGUgX01fbW9kZTsKCgoKCgoKICAgICAgbG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKCgoK
CiAgICAgIGJvb2wgX01fYnVmX2xvY2FsZV9pbml0OwojIDI0NSAiL3RtcC9pbnN0L2luY2x1ZGUv
YysrLzMuNC9zdHJlYW1idWYiIDMKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19wYmFja19z
aXplID0gMTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNrX3NpemVdOwogICAgICBj
aGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2Vu
ZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKCgoKCgogICAgICBmcG9zPF9fc3Rh
dGVfdHlwZT4gX01fcG9zOwoKCgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19jcmVhdGUoKQog
ICAgICB7CiAgICAgICAgaWYgKCFfTV9wYmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAg
ICBzaXplX3QgX19kaXN0ID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgICBzaXpl
X3QgX19sZW4gPSBzdGQ6Om1pbihfU19wYmFja19zaXplLCBfX2Rpc3QpOwogICAgICAgICAgICB0
cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAg
IF9NX3BiYWNrX2N1cl9zYXZlID0gX01faW5fY3VyOwogICAgICAgICAgICBfTV9wYmFja19lbmRf
c2F2ZSA9IF9NX2luX2VuZDsKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJh
Y2ssIF9NX3BiYWNrICsgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsK
ICAgICAgICAgIH0KICAgICAgfQoKCgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19kZXN0cm95
KCkKICAgICAgewogICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgewoKICAgICAg
ICAgICAgc2l6ZV90IF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwoKCiAgICAgICAg
ICAgIHNpemVfdCBfX29mZl9lbmQgPSAwOwogICAgICAgICAgICBzaXplX3QgX19wYmFja19sZW4g
PSBfTV9pbl9lbmQgLSBfTV9wYmFjazsKICAgICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBf
TV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4g
X19zYXZlX2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2
ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUg
KyBfX29mZl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBf
X29mZl9lbmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9fbnVsbDsKICAgICAg
ICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2lu
aXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgfQoKCgogICAgICB2b2lkCiAgICAgIF9NX2lu
X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b3V0ID0g
X01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3Rv
dXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAg
fQojIDMyMiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9zdHJlYW1idWYiIDMKICAgICAgdm9p
ZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9v
bCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAg
ICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9
IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAg
ICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVz
dGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0K
CgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAg
ICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7
CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19y
ZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAg
ICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoKCiAgICAgIHZp
cnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIHsKICAgICAgICBfTV9idWZfdW5p
ZmllZCA9IGZhbHNlOwogICAgICAgIF9NX2J1Zl9zaXplID0gMDsKICAgICAgICBfTV9idWZfc2l6
ZV9vcHQgPSAwOwogICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUoMCk7CiAgICAg
ICAgX01fYnVmX2xvY2FsZV9pbml0ID0gZmFsc2U7CiAgICAgIH0KIyAzNzggIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvc3RyZWFtYnVmIiAzCiAgICAgIGxvY2FsZQogICAgICBwdWJpbWJ1ZShj
b25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAgbG9jYWxlIF9fdG1wKHRoaXMtPmdl
dGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7CiAgICAgICAgcmV0dXJuIF9fdG1w
OwogICAgICB9CiMgMzk0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwog
ICAgICBsb2NhbGUKICAgICAgZ2V0bG9jKCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9i
dWZfbG9jYWxlX2luaXQpCiAgICAgICAgICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBl
bHNlCiAgICAgICAgICByZXR1cm4gbG9jYWxlKCk7CiAgICAgIH0KIyA0MTIgIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvc3RyZWFtYnVmIiAzCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAg
IHB1YnNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJu
IHRoaXMtPnNldGJ1ZihfX3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtv
ZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAg
ICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6
b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsg
fQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3Nf
YmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0K
CiAgICAgIGludAogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CiMgNDM5
ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogICAgICBzdHJlYW1zaXpl
CiAgICAgIGluX2F2YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAgICAg
ICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7CiAg
ICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9wYmFja19jdXJf
c2F2ZTsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9N
X3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47
CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0
aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAg
ICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgICB9CiMgNDY2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogICAg
ICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2Yg
PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUodGhpcy0+c2J1bXBjKCksIF9fZW9mKQogICAgICAgICAgICAgICAgPyBfX2VvZiA6IHRo
aXMtPnNnZXRjKCkpOwogICAgICB9CiMgNDgyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0
cmVhbWJ1ZiIgMwogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKIyA0OTMgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvc3RyZWFtYnVmIiAzCiAgICAgIGludF90eXBlCiAgICAgIHNnZXRj
KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIg
JiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6
dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3Jl
dCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQojIDUx
MiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9zdHJlYW1idWYiIDMKICAgICAgc3RyZWFtc2l6
ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0
dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KIyA1MjYgIi90bXAvaW5zdC9pbmNsdWRlL2Mr
Ky8zLjQvc3RyZWFtYnVmIiAzCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5
cGUgX19jKTsKIyA1MzggIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvc3RyZWFtYnVmIiAzCiAg
ICAgIGludF90eXBlCiAgICAgIHN1bmdldGMoKTsKIyA1NTQgIi90bXAvaW5zdC9pbmNsdWRlL2Mr
Ky8zLjQvc3RyZWFtYnVmIiAzCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRjKGNoYXJfdHlwZSBf
X2MpOwojIDU2OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9zdHJlYW1idWYiIDMKICAgICAg
c3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0
ZWQ6CiMgNTgyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogICAgICBi
YXNpY19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSgwKSwg
X01fYnVmX3NpemVfb3B0KDgxOTIpLAogICAgICBfTV9idWZfdW5pZmllZChmYWxzZSksIF9NX2lu
X2JlZygwKSwgX01faW5fY3VyKDApLCBfTV9pbl9lbmQoMCksCiAgICAgIF9NX291dF9iZWcoMCks
IF9NX291dF9jdXIoMCksIF9NX291dF9lbmQoMCksCiAgICAgIF9NX21vZGUoaW9zX2Jhc2U6Om9w
ZW5tb2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2NhbGUoKSksCiAgICAgIF9NX2J1Zl9sb2NhbGVf
aW5pdChmYWxzZSksIF9NX3BiYWNrX2N1cl9zYXZlKDApLCBfTV9wYmFja19lbmRfc2F2ZSgwKSwK
ICAgICAgX01fcGJhY2tfaW5pdChmYWxzZSkKICAgICAgeyB9CiMgNjAzICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUqCiAgICAgIGViYWNrKCkg
Y29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGdwdHIo
KSBjb25zdCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWdw
dHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0KIyA2MTkgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAgICAgZ2J1bXAoaW50IF9fbikgeyBf
TV9pbl9jdXIgKz0gX19uOyB9CiMgNjMwICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVh
bWJ1ZiIgMwogICAgICB2b2lkCiAgICAgIHNldGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJfdHlw
ZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpCiAgICAgIHsKICAgICAgICBfTV9pbl9iZWcg
PSBfX2diZWc7CiAgICAgICAgX01faW5fY3VyID0gX19nbmV4dDsKICAgICAgICBfTV9pbl9lbmQg
PSBfX2dlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVn
ICYmIF9fZ25leHQgJiYgX19nZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3Nf
YmFzZTo6aW47CiAgICAgIH0KIyA2NTIgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvc3RyZWFt
YnVmIiAzCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9v
dXRfYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVybiBf
TV9vdXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1
cm4gX01fb3V0X2VuZDsgfQojIDY2OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9zdHJlYW1i
dWYiIDMKICAgICAgdm9pZAogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19u
OyB9CiMgNjc4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogICAgICB2
b2lkCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAg
ICB7CiAgICAgICAgX01fb3V0X2JlZyA9IF9NX291dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01f
b3V0X2VuZCA9IF9fcGVuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkg
JiYgX19wYmVnICYmIF9fcGVuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jh
c2U6Om91dDsKICAgICAgfQojIDcwMCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9zdHJlYW1i
dWYiIDMKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2Mp
CiAgICAgIHsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSB0cnVlOwogICAgICAgIGlmIChf
TV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAgICAgICAgX01fYnVmX2xvY2FsZSA9IF9fbG9jOwog
ICAgICB9CiMgNzE5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogICAg
ICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAgICAgIHNldGJ1
ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9CiMgNzMwICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0dWFsIHBvc190
eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAogICAgICAgICAg
ICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAg
ICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KIyA3NDIgIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAg
c2Vla3Bvcyhwb3NfdHlwZSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3Nf
YmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlw
ZSgtMSkpOyB9CiMgNzU1ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwog
ICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQojIDc3NyAiL3RtcC9p
bnN0L2luY2x1ZGUvYysrLzMuNC9zdHJlYW1idWYiIDMKICAgICAgdmlydHVhbCBzdHJlYW1zaXpl
CiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KIyA3OTMgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dl
dG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKIyA4MTUgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5k
ZXJmbG93KCkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CiMgODI4ICIvdG1w
L2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0dWFsIGludF90eXBl
CiAgICAgIHVmbG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5
cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90
eXBlKHRoaXMtPnVuZGVyZmxvdygpLCBfX3JldCk7CiAgICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5n
ID0gX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZDsKICAgICAgICBpZiAoIV9fdGVz
dGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAgewogICAgICAgICAgICBfX3JldCA9IHRy
YWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICAgICAgKytfTV9pbl9j
dXI7CiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmllZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6
Om91dCkKICAgICAgICAgICAgICArK19NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0
dXJuIF9fcmV0OwogICAgICB9CiMgODU0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVh
bWJ1ZiIgMwogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9
IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9
CiMgODcyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0
dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbik7CiMgODk3ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L3N0cmVhbWJ1ZiIgMwog
ICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRzX3R5
cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA5MjggIi90
bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvc3RyZWFtYnVmIiAzCiAgICBwcml2YXRlOgogICAgICBi
YXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsgfTsKCiAgICAgIF9fc3Ry
ZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyBy
ZXR1cm4gKnRoaXM7IH07CgogICAgfTsKfQoKCgoKCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDEgMwojIDM5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysv
My40L2JpdHMvc3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY29uc3Qgc2l6ZV90CiAgICBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGJhY2tfc2l6ZTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsK
ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgewog
ICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICoodGhpcy0+Z3B0cigpKTsKICAgICAgICAgIF9NX2lu
X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUo
X19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7
CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAg
ICAgIGJvb2wgX190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsK
ICAgICAgYm9vbCBfX3Rlc3RuZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5cGU6OmVxKF9fYywg
dGhpcy0+Z3B0cigpWy0xXSk7CiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQogICAg
ICAgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2Mp
KTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAg
ICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOwog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIHN1bmdldGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYg
KF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXIpCiAgICAgICAgewogICAgICAgICAg
X01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50
X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0
aGlzLT5wYmFja2ZhaWwoKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAg
aW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUoKSkKICAgICAgICB7CiAg
ICAgICAgICAqX01fb3V0X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsK
ICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6
dG9faW50X3R5cGUoX19jKSk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRuKGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAg
IHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19idWZfbGVu
ID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19yZW1haW5pbmcgPSBfX24gLSBfX3Jl
dDsKICAgICAgICAgICAgICBzaXplX3QgX19sZW4gPSBzdGQ6Om1pbihfX2J1Zl9sZW4sIF9fcmVt
YWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2luX2N1ciwg
X19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyAr
PSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92ZShfX2xlbik7CiAgICAgICAgICAg
IH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAgICAgICAgICAgIGlmICghdHJhaXRz
X3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19zKyssIHRyYWl0
c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1z
aXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4c3B1dG4oY29u
c3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1zaXpl
IF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAgICAg
IG9mZl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZfc2l6ZSgpOwogICAgICAgICAgaWYgKF9f
YnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX3JlbWFp
bmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIG9mZl90eXBlIF9fbGVuID0gc3RkOjpt
aW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX01fb3V0X2N1ciwgX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47
CiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92
ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAgICAgICAgKytfX3M7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNp
emUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lv
cywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYm91dCkKICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50
X3R5cGUgaW50X3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgc3RyZWFt
c2l6ZSBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgIHN0cmVhbXNpemUgX194
dHJjdDsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6
Om91dDsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgd2hpbGUgKF9fdGVzdHB1dCAmJiBf
X2J1ZnNpemUgIT0gLTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19idWZzaXpl
ICE9IDAgJiYgX19zYmluLT5ncHRyKCkgIT0gX19udWxsCiAgICAgICAgICAgICAgICAgICYmIF9f
c2Jpbi0+Z3B0cigpICsgX19idWZzaXplIDw9IF9fc2Jpbi0+ZWdwdHIoKSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fc2Jpbi0+
Z3B0cigpLCBfX2J1ZnNpemUpOwogICAgICAgICAgICAgICAgICBfX3JldCArPSBfX3h0cmN0Owog
ICAgICAgICAgICAgICAgICBfX3NiaW4tPl9NX2luX2N1cl9tb3ZlKF9feHRyY3QpOwogICAgICAg
ICAgICAgICAgICBpZiAoX194dHJjdCAhPSBfX2J1ZnNpemUpCiAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0KICAgICAgICAgICAgICAgICAg
ICBfX3NiaW4tPl9NX2J1Zl9zaXplX29wdCA+IDAgPyBfX3NiaW4tPl9NX2J1Zl9zaXplX29wdCA6
IDE7CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19idWYgPQogICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBf
X3NpemUpKTsKICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2NoYXJzcmVhZCA9IF9fc2Jp
bi0+c2dldG4oX19idWYsIF9fc2l6ZSk7CiAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX3Ni
b3V0LT5zcHV0bihfX2J1ZiwgX19jaGFyc3JlYWQpOwogICAgICAgICAgICAgICAgICBfX3JldCAr
PSBfX3h0cmN0OwogICAgICAgICAgICAgICAgICBpZiAoX194dHJjdCAhPSBfX2NoYXJzcmVhZCkK
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19zYmluLT5zZ2V0YygpLCBfVHJhaXRzOjplb2Yo
KSkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3Ni
aW4tPmluX2F2YWlsKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgIHsKICAgICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKICAgICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmZhaWxiaXQpICE9IDApCiAgICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVm
PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVh
bWJ1ZnMoYmFzaWNfaW9zPGNoYXI+JiwgYmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwKICAgICAgICAg
ICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiopOwoKCiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUKICAgIHN0
cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczx3Y2hhcl90PiYsIGJhc2lj
X3N0cmVhbWJ1Zjx3Y2hhcl90PiosCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i
dWY8d2NoYXJfdD4qKTsKCn0KIyA5NDIgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvc3RyZWFt
YnVmIiAyIDMKIyA1MSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pb3MiIDIgMwojIDEgIi90
bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzkgIi90bXAv
aW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9iYXNpY19pb3MuaCIgMwoKIyAxICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDEgMwojIDQyICIvdG1w
L2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDMKCm5hbWVz
cGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1
dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVm
X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJl
YW1fdHlwZTsKCiAgICBwcml2YXRlOgoKCgoKCgoKICAgICAgbXV0YWJsZSBzdHJlYW1idWZfdHlw
ZSogX01fc2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJl
YW1idWZfaXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZigwKSwgX01fYyh0cmFpdHNf
dHlwZTo6ZW9mKCkpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUm
IF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9jKHRyYWl0c190
eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBl
KiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ModHJhaXRzX3R5cGU6OmVv
ZigpKSB7IH0KCgogICAgICBjaGFyX3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAg
eyByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7IH0KCiAgICAgIGlz
dHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgY29u
c3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaWYgKF9NX3Ni
dWYgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX3NidWYtPnNidW1wYygpLCBfX2VvZikp
CiAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9jID0gX19l
b2Y7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJh
dG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUg
X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciBf
X29sZCA9ICp0aGlzOwogICAgICAgIGlmIChfTV9zYnVmCiAgICAgICAgICAgICYmIHRyYWl0c190
eXBlOjplcV9pbnRfdHlwZSgoX19vbGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW9mKSkKICAgICAgICAgIF9NX3Ni
dWYgPSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1
cm4gX19vbGQ7CiAgICAgIH0KCgoKCiAgICAgIGJvb2wKICAgICAgZXF1YWwoY29uc3QgaXN0cmVh
bWJ1Zl9pdGVyYXRvciYgX19iKSBjb25zdAogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUg
X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSB0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fZ2V0KCksIF9fZW9mKTsKICAgICAgICBib29sIF9fYmVv
ZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2IuX01fZ2V0KCksIF9fZW9mKTsKICAgICAg
ICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNlb2YgJiYgIV9fYmVvZikp
OwogICAgICB9CgoKICAgIHByaXZhdGU6CiAgICAgIGludF90eXBlCiAgICAgIF9NX2dldCgpIGNv
bnN0CiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IF9fZW9mOwogICAgICAgIGlmIChfTV9zYnVm
KQogICAgICAgICAgewogICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf
TV9jLCBfX2VvZikpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9jOwogICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSgoX19yZXQgPSBfTV9z
YnVmLT5zZ2V0YygpKSwgX19lb2YpKQogICAgICAgICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAg
ICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I9PShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwK
ICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+
JiBfX2IpCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih
PShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAg
ICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2Ip
CiAgICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcgogICAg
OiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwg
dm9pZD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToK
ICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGJvb2wgX01fZmFpbGVkOwoKICAg
IHB1YmxpYzoKICAgICAgaW5saW5lCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Iob3N0cmVhbV90
eXBlJiBfX3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ZhaWxl
ZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBl
KiBfX3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9mYWlsZWQoIV9NX3NidWYp
IHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBf
X2MpOwoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3IrKyhpbnQpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAg
IG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuICp0aGlzOyB9CgogICAgICBib29sCiAgICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkK
ICAgICAgeyByZXR1cm4gX01fZmFpbGVkOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxf
Q2hhclQsIF9UcmFpdHM+JgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+
OjpvcGVyYXRvcj0oX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKCFfTV9mYWlsZWQgJiYKICAg
ICAgICAgIF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksIF9UcmFpdHM6
OmVvZigpKSkKICAgICAgICBfTV9mYWlsZWQgPSB0cnVlOwogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9Cn0KIyA0MSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2Jhc2ljX2lvcy5oIiAy
IDMKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAx
IDMKIyA0NCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2xvY2FsZV9mYWNldHMuaCIg
MwoKCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jd2N0eXBlIiAxIDMKIyA0OCAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jd2N0eXBlIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS93
Y3R5cGUuaCIgMSAzIDQKIyAzNSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKIyAxICIvdG1w
L2luc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgi
IDEgMyA0CiMgMzYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzIDQKIyA0NSAiL3Vzci9pbmNs
dWRlL3djdHlwZS5oIiAzIDQKCgoKIyA2NCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKCgoK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB3Y3R5cGVfdDsKCiMgODYgIi91c3IvaW5jbHVkZS93
Y3R5cGUuaCIgMyA0CmVudW0KewogIF9fSVN3dXBwZXIgPSAwLAogIF9fSVN3bG93ZXIgPSAxLAog
IF9fSVN3YWxwaGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAogIF9fSVN3eGRpZ2l0ID0gNCwKICBf
X0lTd3NwYWNlID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBfX0lTd2dyYXBoID0gNywKICBfX0lT
d2JsYW5rID0gOCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lTd3B1bmN0ID0gMTAsCiAgX19JU3dh
bG51bSA9IDExLAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBwZXIpIDwgOCA/IChpbnQpICgoMVVM
IDw8IChfX0lTd3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3VwcGVyKSA8IDE2ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1cHBlcikgPCAyNCA/IChpbnQpICgo
MVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikp
ID4+IDI0KSkpKSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93ZXIpIDwgOCA/IChpbnQpICgoMVVM
IDw8IChfX0lTd2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xvd2VyKSA8IDE2ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3dsb3dlcikgPCAyNCA/IChpbnQpICgo
MVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikp
ID4+IDI0KSkpKSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxwaGEpIDwgOCA/IChpbnQpICgoMVVM
IDw8IChfX0lTd2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2FscGhhKSA8IDE2ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dhbHBoYSkgPCAyNCA/IChpbnQpICgo
MVVMIDw8IChfX0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkp
ID4+IDI0KSkpKSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVM
IDw8IChfX0lTd2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2RpZ2l0KSA8IDE2ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dkaWdpdCkgPCAyNCA/IChpbnQpICgo
MVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkp
ID4+IDI0KSkpKSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hkaWdpdCkgPCA4ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lTd3hkaWdpdCkgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChfX0lTd3hkaWdpdCkgPCAyNCA/IChp
bnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3
eGRpZ2l0KSkgPj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgoX19JU3dzcGFjZSkgPCA4ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAoKF9fSVN3c3BhY2UpIDwgMTYgPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDogKChfX0lTd3NwYWNlKSA8IDI0ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lT
d3NwYWNlKSkgPj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgoX19JU3dwcmludCkgPCA4ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAoKF9fSVN3cHJpbnQpIDwgMTYgPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDogKChfX0lTd3ByaW50KSA8IDI0ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lT
d3ByaW50KSkgPj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgoX19JU3dncmFwaCkgPCA4ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAoKF9fSVN3Z3JhcGgpIDwgMTYgPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDogKChfX0lTd2dyYXBoKSA8IDI0ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lT
d2dyYXBoKSkgPj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgoX19JU3dibGFuaykgPCA4ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAoKF9fSVN3YmxhbmspIDwgMTYgPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDogKChfX0lTd2JsYW5rKSA8IDI0ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lT
d2JsYW5rKSkgPj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgoX19JU3djbnRybCkgPCA4ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAoKF9fSVN3Y250cmwpIDwgMTYgPyAo
aW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDogKChfX0lTd2NudHJsKSA8IDI0ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lT
d2NudHJsKSkgPj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgoX19JU3dwdW5jdCkgPCA4ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAoKF9fSVN3cHVuY3QpIDwgMTYgPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDogKChfX0lTd3B1bmN0KSA8IDI0ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lT
d3B1bmN0KSkgPj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgoX19JU3dhbG51bSkgPCA4ID8gKGlu
dCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAoKF9fSVN3YWxudW0pIDwgMTYgPyAo
aW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDogKChfX0lTd2FsbnVtKSA8IDI0ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lT
d2FsbnVtKSkgPj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCmV4dGVybiBpbnQg
aXN3YWxudW0gKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2FscGhh
ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2ludF90IF9f
d2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193YykgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgaXN3Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgaXN3bG93ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlz
d3ByaW50ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1bmN0ICh3
aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50X3QgX193
YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193YykgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IGlzd3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgaXN3YmxhbmsgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxODYgIi91c3Iv
aW5jbHVkZS93Y3R5cGUuaCIgMyA0CmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9fY29uc3QgY2hh
ciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Y3R5cGUgKHdpbnRfdCBf
X3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKCgoKCgoKdHlwZWRlZiBfX2NvbnN0
IF9faW50MzJfdCAqd2N0cmFuc190OwoKCgoKCgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2lu
dF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93dXBwZXIgKHdpbnRfdCBfX3dj
KSB0aHJvdyAoKTsKCgp9CiMgMjI4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMgNApleHRlcm4g
IkMiIHsKCgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFucyAoX19jb25zdCBjaGFyICpfX3Byb3Bl
cnR5KSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd2N0cmFucyAod2ludF90IF9fd2MsIHdj
dHJhbnNfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW1fbCAo
d2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgaXN3YWxwaGFfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgaXN3Y250cmxfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2Nh
bGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xv
Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaF9sICh3aW50
X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlz
d2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IGlzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3cHVuY3RfbCAod2ludF90IF9fd2MsIF9fbG9jYWxl
X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZV9sICh3aW50X3Qg
X193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3Vw
cGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgaXN3eGRpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxl
X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlX2wgKF9fY29u
c3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBpc3djdHlwZV9sICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNjLCBf
X2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHdpbnRfdCB0
b3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHdpbnRfdCB0b3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2Fs
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFuc19sIChfX2NvbnN0IGNoYXIg
Kl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IHdpbnRfdCB0b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgp9
CiMgNTMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvY3djdHlwZSIgMiAzCiMgNzcgIi90bXAv
aW5zdC9pbmNsdWRlL2MrKy8zLjQvY3djdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6
OndpbnRfdDsKCiAgdXNpbmcgOjp3Y3R5cGVfdDsKICB1c2luZyA6OndjdHJhbnNfdDsKCiAgdXNp
bmcgOjppc3dhbG51bTsKICB1c2luZyA6Omlzd2FscGhhOwogIHVzaW5nIDo6aXN3Ymxhbms7CiAg
dXNpbmcgOjppc3djbnRybDsKICB1c2luZyA6Omlzd2RpZ2l0OwogIHVzaW5nIDo6aXN3Z3JhcGg7
CiAgdXNpbmcgOjppc3dsb3dlcjsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHJp
bnQ7CiAgdXNpbmcgOjppc3dwdW5jdDsKICB1c2luZyA6Omlzd3NwYWNlOwogIHVzaW5nIDo6aXN3
dXBwZXI7CiAgdXNpbmcgOjppc3d4ZGlnaXQ7CiAgdXNpbmcgOjppc3djdHlwZTsKICB1c2luZyA6
OnRvd2xvd2VyOwogIHVzaW5nIDo6dG93dXBwZXI7CiAgdXNpbmcgOjp0b3djdHJhbnM7CiAgdXNp
bmcgOjp3Y3RyYW5zOwogIHVzaW5nIDo6d2N0eXBlOwp9CiMgNDcgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvaW9zIiAxIDMKIyA0OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2xv
Y2FsZV9mYWNldHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkOwoKCgojIDEg
Ii90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9i
YXNlLmgiIDEgMwojIDM2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgt
Z251L2JpdHMvY3R5cGVfYmFzZS5oIiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlw
ZWRlZiBjb25zdCBpbnQqIF9fdG9fdHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
bWFzazsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0gX0lTdXBwZXI7CiAgICBzdGF0aWMg
Y29uc3QgbWFzayBsb3dlciA9IF9JU2xvd2VyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEg
PSBfSVNhbHBoYTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gX0lTZGlnaXQ7CiAgICBz
dGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSBfSVN4ZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFz
ayBzcGFjZSA9IF9JU3NwYWNlOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSBfSVNwcmlu
dDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gX0lTZ3JhcGg7CiAgICBzdGF0aWMgY29u
c3QgbWFzayBjbnRybCA9IF9JU2NudHJsOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSBf
SVNwdW5jdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gX0lTYWxudW07CiAgfTsKIyA2
NCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jh
c2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAg
aXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBj
aGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAg
Y29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJf
dHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBf
X2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9f
YykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywg
X19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3Qg
Y2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl
KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkp
OyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdp
ZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0K
CiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAg
ICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAq
X190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9f
ZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19j
dHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3Jl
ZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9
CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2Mp
IGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAg
bWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog
ICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJf
dHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlw
ZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3Rv
dXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25z
dCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAg
dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25z
dCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAw
OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19k
ZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAg
ICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAg
ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJs
aWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6
bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog
ICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0No
YXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlw
ZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg
X19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdCht
YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
dG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hh
cl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg
ZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9f
bG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBj
aGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBs
YXRlPD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFz
ZTxjaGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsK
CiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2N0eXBlOwogICAg
ICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlw
ZSBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAg
ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxl
X3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGlj
aXQKICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxz
ZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoX19jX2xv
Y2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2Us
CiAgICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAg
IGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioK
ICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMp
IGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20s
IGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5l
IGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBj
b25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IG1hc2sq
CiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV90YWJsZTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOwoK
ICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk
b19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywK
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVu
KGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihj
b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBf
X2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
bmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAg
ICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07Cgog
IHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNo
YXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5
cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fY19sb2Nh
bGUgX01fY19sb2NhbGVfY3R5cGU7CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIGxvY2FsZTo6
aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7Cgog
ICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVm
cyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgX193bWFza190eXBlCiAgICAgIF9NX2NvbnZl
cnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+
Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90
eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
aXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9f
dmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2Fu
X2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9u
b3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg
IGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hh
cl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190
b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25z
dCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNo
YXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2Rm
YXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25z
dCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxv
Y2FsZSYgX19sb2MpOwoKCgojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wK
ICBjdHlwZTxjaGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJu
IF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19tOyB9CgogIGNv
bnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBj
aGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9f
aGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigqX19sb3crKyldOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5
cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBj
aGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAg
ICAgJiYgIShfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9f
bSkpCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgog
IGN0eXBlPGNoYXI+OjoKICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNv
bnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAg
ICAgICAgICAmJiAoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0g
JiBfX20pICE9IDApCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDQwMSAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMg
Y3R5cGU8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19z
LCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5jdHlwZV9ieW5hbWUoKSB7IH07CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnlu
YW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCiAgdGVt
cGxhdGU8PgogICAgY3R5cGVfYnluYW1lPHdjaGFyX3Q+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCByZWZzKTsKCgojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9j
b2RlY3Z0LmgiIDEgMwojIDQ1ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvY29kZWN2
dC5oIiAzCgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSByZXN1
bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRpYWwsCiAgICAgIGVycm9yLAogICAgICBub2Nv
bnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFt
ZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFj
dF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3Vs
dDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0
ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAg
ICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlw
ZSogX19mcm9tLAogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywg
ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQp
IGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJv
bSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVu
c2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9f
dG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBj
b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJu
X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUq
JiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19z
dGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIGludAog
ICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5j
b2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAgICBhbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3co
KQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNfbm9jb252KCk7IH0KCiAgICAgIGludAog
ICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9f
bWF4KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9t
LCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQKICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRo
cm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVj
dGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3Qg
X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAg
ICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQK
ICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zy
b20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50
ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBl
eHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4
dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0
ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRl
cm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7Cgog
ICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z
dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50
ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJu
X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv
X2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAg
ZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQK
ICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19t
YXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBj
b25zdCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQs
IHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAog
ICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBf
U3RhdGVUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJl
c3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5
cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90
eXBlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2RlY3Z0
OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp
dAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0
cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAg
ICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZz
ID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9
CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwg
Y29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBl
KiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAg
ICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAg
IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAg
ICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAg
ICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9f
bmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBl
JiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK
ICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAg
ICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp
bnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29s
CiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBp
bnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3Qg
X19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNv
bnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5h
bWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0lu
dGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBj
b2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0
cmFjdF9iYXNlPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgY2hhciBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBl
OwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgIHByb3RlY3RlZDoKICAg
ICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2RlY3Z0OwoKICAgIHB1YmxpYzoKICAgICAgc3Rh
dGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBf
X3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoX19jX2xvY2FsZSBfX2Ns
b2MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90
eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29u
c3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25l
eHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5k
LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmly
dHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5f
dHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVy
bl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRv
X2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAg
ICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSom
IF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUq
IF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAg
ICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0
IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSog
X19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19t
YXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNz
IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0
X2Fic3RyYWN0X2Jhc2U8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiB3Y2hhcl90IGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIg
ZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgcHJv
dGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2NvZGVjdnQ7CgogICAgcHVibGlj
OgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVj
dnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChfX2Nf
bG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9f
b3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAg
ICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUq
JiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlw
ZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3Rh
dGUsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3Rv
X2VuZCwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAg
ICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZnJvbV9lbmQsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog
ICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAg
ICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwK
ICAgICAgaW50IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAg
ICAgYm9vbCBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwK
ICAgICAgaW50IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNp
emVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro
KCkgY29uc3QgdGhyb3coKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQs
IHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9i
eW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNo
YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29kZWN2dDxfSW50ZXJuVCwgX0V4
dGVyblQsIF9TdGF0ZVQ+KF9fcmVmcykKICAgICAgewogICAgICAgIGlmIChfTV9jX2xvY2FsZV9j
b2RlY3Z0ICE9IF9TX2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9j
X2xvY2FsZV9jb2RlY3Z0KTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVf
Y29kZWN2dCwgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKCgojIDEgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5o
IiAxIDMKIyA0NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmgiIDMKICBjbGFzcyBfX2VuY190cmFpdHMKICB7
CiAgcHVibGljOgoKCgogICAgdHlwZWRlZiBpY29udl90IF9fZGVzY190eXBlOwoKICBwcm90ZWN0
ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbWF4X3NpemUgPSAzMjsKCiAgICBjaGFyIF9N
X2ludF9lbmNbX1NfbWF4X3NpemVdOwoKICAgIGNoYXIgX01fZXh0X2VuY1tfU19tYXhfc2l6ZV07
CgoKICAgIF9fZGVzY190eXBlIF9NX2luX2Rlc2M7CgogICAgX19kZXNjX3R5cGUgX01fb3V0X2Rl
c2M7CgoKICAgIGludCBfTV9leHRfYm9tOwoKCiAgICBpbnQgX01faW50X2JvbTsKCiAgcHVibGlj
OgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKCkKICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0
X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAgIHsKICAgICAgbWVtc2V0
KF9NX2ludF9lbmMsIDAsIF9TX21heF9zaXplKTsKICAgICAgbWVtc2V0KF9NX2V4dF9lbmMsIDAs
IF9TX21heF9zaXplKTsKICAgIH0KCiAgICBleHBsaWNpdCBfX2VuY190cmFpdHMoY29uc3QgY2hh
ciogX19pbnQsIGNvbnN0IGNoYXIqIF9fZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2lib20gPSAwLCBpbnQgX19lYm9tID0gMCkKICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0
X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAgIHsKICAgICAgc3RybmNw
eShfTV9pbnRfZW5jLCBfX2ludCwgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9l
bmMsIF9fZXh0LCBfU19tYXhfc2l6ZSk7CiAgICB9CgoKCgoKCiAgICBfX2VuY190cmFpdHMoY29u
c3QgX19lbmNfdHJhaXRzJiBfX29iaik6IF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApCiAg
ICB7CiAgICAgIHN0cm5jcHkoX01faW50X2VuYywgX19vYmouX01faW50X2VuYywgX1NfbWF4X3Np
emUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9z
aXplKTsKICAgICAgX01fZXh0X2JvbSA9IF9fb2JqLl9NX2V4dF9ib207CiAgICAgIF9NX2ludF9i
b20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgfQoKCiAgICBfX2VuY190cmFpdHMmCiAgICBvcGVy
YXRvcj0oY29uc3QgX19lbmNfdHJhaXRzJiBfX29iaikKICAgIHsKICAgICAgc3RybmNweShfTV9p
bnRfZW5jLCBfX29iai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01f
ZXh0X2VuYywgX19vYmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBfTV9pbl9kZXNj
ID0gMDsKICAgICAgX01fb3V0X2Rlc2MgPSAwOwogICAgICBfTV9leHRfYm9tID0gX19vYmouX01f
ZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9ib207CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgICB+X19lbmNfdHJhaXRzKCkKICAgIHsKICAgICAgX19kZXNjX3R5
cGUgX19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgaWYgKF9NX2lu
X2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycikKICAgICAgICBpY29udl9jbG9zZShfTV9pbl9k
ZXNjKTsKICAgICAgaWYgKF9NX291dF9kZXNjICYmIF9NX291dF9kZXNjICE9IF9fZXJyKQogICAg
ICAgIGljb252X2Nsb3NlKF9NX291dF9kZXNjKTsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbml0
KCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19lcnIgPSByZWludGVycHJldF9jYXN0
PGljb252X3Q+KC0xKTsKICAgICAgaWYgKCFfTV9pbl9kZXNjKQogICAgICAgIHsKICAgICAgICAg
IF9NX2luX2Rlc2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMsIF9NX2V4dF9lbmMpOwogICAgICAg
ICAgaWYgKF9NX2luX2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9l
cnJvcigiY3JlYXRpbmcgaWNvbnYgaW5wdXQgZGVzY3JpcHRvciBmYWlsZWQuIik7CiAgICAgICAg
fQogICAgICBpZiAoIV9NX291dF9kZXNjKQogICAgICAgIHsKICAgICAgICAgIF9NX291dF9kZXNj
ID0gaWNvbnZfb3BlbihfTV9leHRfZW5jLCBfTV9pbnRfZW5jKTsKICAgICAgICAgIGlmIChfTV9v
dXRfZGVzYyA9PSBfX2VycikKICAgICAgICAgICAgX190aHJvd19ydW50aW1lX2Vycm9yKCJjcmVh
dGluZyBpY29udiBvdXRwdXQgZGVzY3JpcHRvciBmYWlsZWQuIik7CiAgICAgICAgfQogICAgfQoK
ICAgIGJvb2wKICAgIF9NX2dvb2QoKQogICAgewogICAgICBjb25zdCBfX2Rlc2NfdHlwZSBfX2Vy
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBib29sIF9fdGVzdCA9IF9N
X2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycjsKICAgICAgX190ZXN0ICY9IF9NX291dF9k
ZXNjICYmIF9NX291dF9kZXNjICE9IF9fZXJyOwogICAgICByZXR1cm4gX190ZXN0OwogICAgfQoK
ICAgIGNvbnN0IF9fZGVzY190eXBlKgogICAgX01fZ2V0X2luX2Rlc2NyaXB0b3IoKQogICAgeyBy
ZXR1cm4gJl9NX2luX2Rlc2M7IH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9v
dXRfZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01fb3V0X2Rlc2M7IH0KCiAgICBpbnQKICAg
IF9NX2dldF9leHRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01fZXh0X2JvbTsgfQoKICAgIGlu
dAogICAgX01fZ2V0X2ludGVybmFsX2JvbSgpCiAgICB7IHJldHVybiBfTV9pbnRfYm9tOyB9Cgog
ICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9lbmMoKQogICAgeyByZXR1cm4gX01f
aW50X2VuYzsgfQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfZXh0ZXJuYWxfZW5jKCkKICAg
IHsgcmV0dXJuIF9NX2V4dF9lbmM7IH0KICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50
ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0
ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8
X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50
ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAg
ICAgdHlwZWRlZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190
cmFpdHM6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0
cyBfX2VuY190eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGlj
aXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJz
dHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykK
ICAgICAgeyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fZW5jX3R5cGUqIF9fZW5j
LCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRl
cm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0
dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5k
LCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBl
KiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hp
ZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAg
ICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBj
b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAg
aW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50
ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f
ZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fs
d2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f
bGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+
CiAgICBsb2NhbGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJh
aXRzPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVD4KICAgIGlubGluZSBzaXplX3QK
ICAgIF9faWNvbnZfYWRhcHRvcihzaXplX3QoKl9fZnVuYykoaWNvbnZfdCwgX1QsIHNpemVfdCos
IGNoYXIqKiwgc2l6ZV90KiksCiAgICAgICAgICAgICAgICAgICAgaWNvbnZfdCBfX2NkLCBjaGFy
KiogX19pbmJ1Ziwgc2l6ZV90KiBfX2luYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgY2hhcioq
IF9fb3V0YnVmLCBzaXplX3QqIF9fb3V0Ynl0ZXMpCiAgICB7IHJldHVybiBfX2Z1bmMoX19jZCwg
KF9UKV9faW5idWYsIF9faW5ieXRlcywgX19vdXRidWYsIF9fb3V0Ynl0ZXMpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFz
ZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6
CiAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv
bSwKICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu
X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJu
X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25z
dAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01f
Z29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5
cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19z
dGF0ZS5fTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2Zt
dWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mYnl0ZXMg
PSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNp
emVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3Qg
X190Ynl0ZXMgPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAg
Y2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNo
YXIqIF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50
IF9faW50X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2JvbSgpOwogICAgICAgICAgaWYg
KF9faW50X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBf
X2Zyb21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9
IHN0YXRpY19jYXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoaW50ZXJu
X3R5cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0
aWNfY2FzdDxpbnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0
czxpbnRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAg
ICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAg
ICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nm
cm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmJ5dGVzLCAm
X19jdG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8aW50
ZXJuX3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFw
dG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwgJl9fZmJ5dGVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0K
CiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50ZXJuX3R5cGUq
PihfX2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4
dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2ZieXRl
cyA8IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
aW50ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVp
bnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICAgICAgX19y
ZXQgPSBwYXJ0aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgIF9fcmV0ID0gZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l
IF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQs
IF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19z
dGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3Rv
X2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBf
X3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAg
ICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAg
ICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9pbl9kZXNjcmlw
dG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJu
X3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5k
IC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KF9fdG8pOwogICAgICAgICAgc2l6ZV90IF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29u
diwqX19kZXNjLCBfX251bGwsIF9fbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJl9fY3RvLCAmX190bGVuKTsKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNp
emVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVy
cHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIGlmIChfX3RsZW4g
PT0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKSkKICAgICAgICAgICAgICAgIF9fcmV0
ID0gbm9jb252OwogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGxlbiA9PSAwKQogICAgICAgICAg
ICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3Jl
dCA9IHBhcnRpYWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19y
ZXQgPSBlcnJvcjsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNl
OjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoK
ICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s
CiAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5
cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlw
ZSogX190b19lbmQsCiAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAg
IHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2Qo
KSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9f
ZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUu
X01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBs
ZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mbGVuID0gX19mbXVs
dGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190
bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fdGxlbiA9
IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0
byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJv
bTsKICAgICAgICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19leHRfYm9t
ID0gX19zdGF0ZS5fTV9nZXRfZXh0ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19leHRfYm9t
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQg
LSBfX2Zyb207CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nh
c3Q8ZXh0ZXJuX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihleHRlcm5fdHlwZSkgKiAo
X19zaXplICsgMSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGV4
dGVybl90eXBlPihfX2V4dF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGV4dGVybl90
eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBf
X2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAg
IF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxl
bik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2Zy
b20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2Nm
aXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19k
ZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9f
ZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19j
b252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAg
ICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8p
OwogICAgICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2ZsZW4gPCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KF9fZnJvbV9lbmQgLSBfX2Zyb20pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihf
X2Nmcm9tKTsKICAgICAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBwYXJ0aWFsOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0
ID0gZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAg
aW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBk
b19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gMDsKICAg
ICAgaWYgKHNpemVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5UKSkKICAgICAgICBfX3Jl
dCA9IHNpemVvZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAgICAgcmV0dXJuIF9fcmV0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+
CiAgICBib29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6
CiAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gZmFsc2U7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAg
aW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBk
b19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAg
ICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0
CiAgICB7IHJldHVybiBzdGQ6Om1pbihfX21heCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2VuZCAt
IF9fZnJvbSkpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F
eHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJh
aXRzPjo6CiAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gMTsg
fQojIDM1OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2NvZGVjdnQuaCIgMiAzCiMg
NDI2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMK
CgoKICBjbGFzcyBfX251bV9iYXNlCiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0
IGNoYXIgX1NfYXRvbXNbXTsKCiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9N
X2UgPSBfTV96ZXJvICsgMTAsCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3Np
emUgPSAyMSArIDEKICAgIH07CgoKCiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0
KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAg
ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1Nf
Zm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9k
LCBjaGFyIF9fbW9kbCk7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHBy
aXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUg
X01fdGhvdXNhbmRzX3NlcDsKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFs
c2VuYW1lOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90
IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6
ZV9udW1wdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxl
IF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAg
IHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAg
ICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxf
cG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwog
ICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7
IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2Vu
YW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhv
dXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAg
ICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1
ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVh
bCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3Qo
X19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgbG9jYWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVtcGxhdGU8
PgogICAgbnVtcHVuY3Q8Y2hhcj46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lk
CiAgICBudW1wdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9f
Y2xvYyk7CgoKICB0ZW1wbGF0ZTw+CiAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCk7
CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFs
aXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+
CiAgICB7CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX251bXB1bmN0OwoKICAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Rf
YnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVu
Y3Q8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01f
Y19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChf
TV9jX2xvY2FsZV9udW1wdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfm51bXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShf
TV9jX2xvY2FsZV9udW1wdW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAg
IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX2dldChzaXpl
X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVy
X3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z
aWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRl
cl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv
bmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsg
fQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IGZsb2F0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90
eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYg
X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n
ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsIH5udW1fZ2V0KCkgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFj
dF9mbG9hdChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAg
aXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3RfaW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBf
X3h0cmMsIGludCYgX19iYXNlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYsIGJvb2wmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo
aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25n
JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl
LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog
ICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgaW50JikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5
cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAg
ICAgICAgICBsb25nIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsKCgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv
c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg
ICBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp
dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
CiAgICAgICAgICAgICBsb25nIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6Omlk
IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CiMgNzIxICIvdG1wL2luc3QvaW5jbHVkZS9j
KysvMy40L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAg
ICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19m
aWxsLCBib29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19m
LCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5
cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp
bGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3Ms
IF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBf
X2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBl
IF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hh
cl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJf
dHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01f
Y29udmVydF9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZCwgX1ZhbHVlVCBfX3YpIGNvbnN0
OwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAg
ICAgICBfTV9jb252ZXJ0X2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg
X19maWxsLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsLCBf
VmFsdWVUIF9fdikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5fZmxvYXQo
aXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywK
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBfTV93aWRlbl9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
ZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgX01faW5zZXJ0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8s
IGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fd3Ms
IGludCBfX2xlbikgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
LCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws
IGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp
dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29u
c3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90
eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2Zp
bGwsIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBf
X3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0Owog
ICAgfTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBsb2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVk
OgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAgICBwdWJsaWM6CiAg
ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShz
aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBf
TV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY19sb2NhbGU7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAg
IGNvbGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jbG9u
ZV9jX2xvY2FsZShfX2Nsb2MpOyB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hh
clQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdf
dHlwZQogICAgICB0cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9f
aGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsg
fQoKICAgICAgbG9uZwogICAgICBoYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJU
KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9
CgoKICAgICAgaW50CiAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJU
KikgY29uc3Q7CgogICAgICBzaXplX3QKICAgICAgX01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0
IF9DaGFyVCosIHNpemVfdCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+Y29sbGF0ZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xs
YXRlKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQq
IF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJp
bmdfdHlwZQogICAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hh
clQqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBsb25nCiAgICAgIGRvX2hhc2goY29uc3Qg
X0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoK
CiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIHNpemVfdAogICAg
Y29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KSBj
b25zdDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29t
cGFyZShjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+
CiAgICBzaXplX3QKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90Kiwg
Y29uc3Qgd2NoYXJfdCosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4KICAg
IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAg
ICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAg
ICAgOiBjb2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfZGVzdHJveV9j
X2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUo
X01fY19sb2NhbGVfY29sbGF0ZSwgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyB0aW1l
X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwgZG15LCBt
ZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh
c3MgX190aW1lcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgX19jaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry
aW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoK
CiAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQqIF9TX3RpbWV6b25lc1sxNF07CgogICAgcHJvdGVj
dGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX3RpbWVwdW5jdDsKICAgICAgY2hhciog
X01fbmFtZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9mb3JtYXQ7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQq
IF9NX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZXJhX2Zvcm1hdDsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtOwog
ICAgICBjb25zdCBfQ2hhclQqIF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtX3BtX2Zv
cm1hdDsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNvbnN0IF9DaGFyVCog
X01fZGF5MjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBjb25zdCBfQ2hhclQq
IF9NX2RheTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9kYXk2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAgICAgY29uc3QgX0No
YXJUKiBfTV9kYXlfYTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2EyOwogICAgICBjb25z
dCBfQ2hhclQqIF9NX2RheV9hMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTQ7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNjsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9t
b250aDAxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fbW9udGgwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0OwogICAgICBjb25z
dCBfQ2hhclQqIF9NX21vbnRoMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNjsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA3OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo
MDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwOTsKICAgICAgY29uc3QgX0NoYXJUKiBf
TV9tb250aDEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGgxMjsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMTsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGhfYTAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aF9hMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA2OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250
aF9hMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX21vbnRoX2ExMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTE7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQK
ICAgICAgX190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNl
dChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IG5ldyBjaGFyWzJd
OwogICAgICAgIHN0cmNweShfTV9uYW1lX3RpbWVwdW5jdCwgIkMiKTsKICAgICAgICBfTV9pbml0
aWFsaXplX3RpbWVwdW5jdCgpOwogICAgICB9CgogICAgICBleHBsaWNpdAogICAgICBfX3RpbWVw
dW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0g
MCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgewogICAgICAgIF9NX25hbWVf
dGltZXB1bmN0ID0gbmV3IGNoYXJbc3RybGVuKF9fcykgKyAxXTsKICAgICAgICBzdHJjcHkoX01f
bmFtZV90aW1lcHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19j
bG9jKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNpemVf
dCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwKICAgICAgICAgICAgIGNvbnN0IHRt
KiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0IF9D
aGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX2RhdGVbMF0gPSBfTV9kYXRl
X2Zvcm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIH0K
CiAgICAgIHZvaWQKICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fdGltZSkg
Y29uc3QKICAgICAgewoKICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1hdDsKICAgICAg
ICBfX3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAg
ICAgX01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2FtcG0pIGNvbnN0CiAgICAgIHsKICAgICAgICBf
X2FtcG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2FtcG1bMV0gPSBfTV9wbTsKICAgICAgfQoKICAg
ICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2R0KSBj
b25zdAogICAgICB7CgogICAgICAgIF9fZHRbMF0gPSBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAg
ICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9p
ZAogICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKICAgICAgewogICAg
ICAgIF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5MjsKICAg
ICAgICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAgICAgIF9fZGF5c1szXSA9IF9NX2RheTQ7CiAg
ICAgICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXk2Owog
ICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01f
ZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAg
ICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5X2Ey
OwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKICAgICAgICBfX2RheXNbM10gPSBfTV9k
YXlfYTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5X2E1OwogICAgICAgIF9fZGF5c1s1XSA9
IF9NX2RheV9hNjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXlfYTc7CiAgICAgIH0KCiAgICAg
IHZvaWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAg
ICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aDAxOwogICAgICAgIF9fbW9udGhzWzFd
ID0gX01fbW9udGgwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoMDM7CiAgICAgICAg
X19tb250aHNbM10gPSBfTV9tb250aDA0OwogICAgICAgIF9fbW9udGhzWzRdID0gX01fbW9udGgw
NTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7CiAgICAgICAgX19tb250aHNbNl0g
PSBfTV9tb250aDA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGgwODsKICAgICAgICBf
X21vbnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aDEw
OwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiAgICAgICAgX19tb250aHNbMTFd
ID0gX01fbW9udGgxMjsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHNfYWJicmV2
aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX21v
bnRoc1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoX2Ew
MjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoX2EwMzsKICAgICAgICBfX21vbnRoc1sz
XSA9IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoX2EwNTsKICAg
ICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2EwNjsKICAgICAgICBfX21vbnRoc1s2XSA9IF9N
X21vbnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2EwODsKICAgICAgICBf
X21vbnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAgICAgICBfX21vbnRoc1s5XSA9IF9NX21vbnRo
X2ExMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aF9hMTE7CiAgICAgICAgX19tb250
aHNbMTFdID0gX01fbW9udGhfYTEyOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5fX3RpbWVwdW5jdCgpCiAgICAgIHsKICAgICAgICBkZWxldGUgW10gX01fbmFt
ZV90aW1lcHVuY3Q7CiAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1l
cHVuY3QpOwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5j
dChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46OmlkOwoKCiAgdGVt
cGxhdGU8PgogICAgY29uc3QgY2hhcioKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfU190aW1lem9u
ZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01f
aW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAg
ICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01fcHV0KGNoYXIqLCBzaXplX3QsIGNvbnN0
IGNoYXIqLCBjb25zdCB0bSopIGNvbnN0OwoKCiAgdGVtcGxhdGU8PgogICAgY29uc3Qgd2NoYXJf
dCoKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0
ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1l
cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3Rp
bWVwdW5jdDx3Y2hhcl90Pjo6X01fcHV0KHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3Qq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bSopIGNvbnN0OwoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNvbnN0IF9DaGFyVCogX190aW1lcHVuY3Q8
X0NoYXJUPjo6X1NfdGltZXpvbmVzWzE0XTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFj
ZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldChzaXplX3QgX19yZWZz
ID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsgfQoKICAgICAgZGF0ZW9yZGVy
CiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kYXRlX29y
ZGVyKCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2dldF90aW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
KiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfZGF0ZShfX2JlZywgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF93ZWVr
ZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcsIF9fZW5kLCBfX2lvLCBf
X2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs
IF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVn
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19nZXRfeWVhcihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwg
ZGF0ZW9yZGVyCiAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n
ZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
dG0qIF9fdG0pIGNvbnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9udW0oaXRlcl90
eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgoKICAgICAgdm9pZAogICAgICBf
TV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBf
X21lbWJlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNp
emVfdCBfX2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChp
dGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZm9ybWF0KSBjb25z
dDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5
bmFtZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBp
dGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4o
X19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0
X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1
YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMg
bG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3Jl
ZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp
bGwsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3Qg
X0NoYXJUKiBfX2VuZCkgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3Qg
dG0qIF9fdG0sIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QgPSAwKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdG0sIF9fZm9ybWF0LCBfX21v
ZCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0KCkKICAg
ICAgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAogICAg
ICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3Q7CiAgICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCB0
aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMg
dGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7Cgog
ICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciogLCBzaXplX3Qg
X19yZWZzID0gMCkKICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPihfX3JlZnMpCiAg
ICAgIHsgfTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5
bmFtZSgpIHsgfQogICAgfTsKCgogIGNsYXNzIG1vbmV5X2Jhc2UKICB7CiAgcHVibGljOgogICAg
ZW51bSBwYXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsKICAgIHN0cnVj
dCBwYXR0ZXJuIHsgY2hhciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBf
U19kZWZhdWx0X3BhdHRlcm47CgoKCiAgICBzdGF0aWMgcGF0dGVybgogICAgX1NfY29uc3RydWN0
X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsKICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25l
eXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpbnRsID0gX0ludGw7CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6
CiAgICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjaGFyX3R5cGUgX01fZGVjaW1h
bF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0IGNo
YXJfdHlwZSogX01fY3Vycl9zeW1ib2w7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fcG9zaXRp
dmVfc2lnbjsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9uZWdhdGl2ZV9zaWduOwogICAgICBp
bnQgX01fZnJhY19kaWdpdHM7CiAgICAgIHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICAgICAgcGF0
dGVybiBfTV9uZWdfZm9ybWF0OwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbW9u
ZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAg
eyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbW9u
ZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZz
ID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXpl
X21vbmV5cHVuY3QoX19jbG9jLCBfX3MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1h
bF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsg
fQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91
cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAg
IHN0cmluZ190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fY3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgcG9zaXRpdmVf
c2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQoK
ICAgICAgc3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAgIGZyYWNfZGln
aXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMoKTsgfQoKICAg
ICAgcGF0dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fcG9zX2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3JtYXQoKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90
eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNp
bWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNf
c2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmly
dHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9n
cm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJv
bCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAgICB2aXJ0dWFs
IHN0cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRv
X25lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2ZV9zaWduOyB9
CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9f
cG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0KCiAgICAg
IHZpcnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAgICBfTV9pbml0aWFsaXplX21v
bmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lID0gX19udWxsKTsKICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5j
dDxfQ2hhclQsIF9JbnRsPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBf
SW50bD4KICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAg
dGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAg
dGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCk7Cgog
IHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRp
YWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4K
ICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5
cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlw
dW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgbW9u
ZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAg
IHZvaWQKICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlw
dW5jdChfX2NfbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAg
bW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nf
bG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKik7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wg
X0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBtb25leXB1bmN0PF9D
aGFyVCwgX0ludGw+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlwdW5j
dDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGludGwgPSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnlu
YW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5j
dDxfQ2hhclQsIF9JbnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2Nh
bGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX21v
bmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0
cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Rf
YnluYW1lPF9DaGFyVCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg
ICBleHBsaWNpdAogICAgICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm
YWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19z
LCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJy
LCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBp
dGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2Vyciwg
X19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9n
ZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUg
X19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3Ms
IGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0
OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBtb25leV9wdXQg
OiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9wdXQoc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX191bml0cyk7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5
cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lu
dGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJf
dHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9f
aW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBjb25z
dCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0PF9D
aGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAgdHlw
ZWRlZiBpbnQgY2F0YWxvZzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj
bGFzcyBtZXNzYWdlcyA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3Rl
ZDoKCgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21lc3NhZ2VzOwoKCiAgICAgIGNoYXIq
IF9NX25hbWVfbWVzc2FnZXM7CgoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
aWQ7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlcyhzaXplX3QgX19yZWZzID0gMCkKICAg
ICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgewogICAgICAgIF9NX25hbWVfbWVzc2Fn
ZXMgPSBuZXcgY2hhclsyXTsKICAgICAgICBzdHJjcHkoX01fbmFtZV9tZXNzYWdlcywgIkMiKTsK
ICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2NfbG9jYWxlOwogICAgICB9CgoKICAg
ICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIq
IF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAg
ICAgIHsKICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gbmV3IGNoYXJbc3RybGVuKF9fcykgKyAx
XTsKICAgICAgICBzdHJjcHkoX01fbmFtZV9tZXNzYWdlcywgX19zKTsKICAgICAgICBfTV9jX2xv
Y2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CiAgICAgIH0KCiAgICAg
IGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3Qg
bG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9f
bG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hh
cj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAgICBzdHJpbmdfdHlw
ZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0
cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2MsIF9f
c2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19j
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpCiAgICAgICB7CiAgICAgICAgIGRl
bGV0ZSBbXSBfTV9uYW1lX21lc3NhZ2VzOwogICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9N
X2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAg
ICBkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBp
bnQsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZv
aWQKICAgICAgZG9fY2xvc2UoY2F0YWxvZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01f
Y29udmVydF90b19jaGFyKGNvbnN0IHN0cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoK
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQq
PihfX21zZy5jX3N0cigpKSk7CiAgICAgIH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9j
b252ZXJ0X2Zyb21fY2hhcihjaGFyKiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXpl
X3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTczNiAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogICAgICAg
IHJldHVybiBzdHJpbmdfdHlwZSgpOwogICAgICB9CiAgICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsKCgogIHRlbXBs
YXRlPD4KICAgIHN0cmluZwogICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQs
IGludCwgY29uc3Qgc3RyaW5nJikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICB3c3RyaW5nCiAg
ICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3Ry
aW5nJikgY29uc3Q7CgoKCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxp
bnV4LWdudS9iaXRzL21lc3NhZ2VzX21lbWJlcnMuaCIgMSAzCiMgMzcgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+
OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxj
aGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKICAgIHsKICAgICAgYmluZHRleHRkb21haW4oX19z
LmNfc3RyKCksIF9fZGlyKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3NhZ2Vz
PF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFz
aWNfc3RyaW5nPGNoYXI+JiBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGxvY2FsZSYpIGNvbnN0CiAgICB7CgoKICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CiAg
ICAgIHJldHVybiAwOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lk
CiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAogICAgeyB9CiMg
MTc1NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAz
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6
IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp
bmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFy
KiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZz
KQogICAgICB7CiAgICAgICAgZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CiAgICAgICAgX01f
bmFtZV9tZXNzYWdlcyA9IG5ldyBjaGFyW3N0cmxlbihfX3MpICsgMV07CiAgICAgICAgc3RyY3B5
KF9NX25hbWVfbWVzc2FnZXMsIF9fcyk7CiAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9j
X2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxl
X21lc3NhZ2VzLCBfX3MpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg
ICAgIH5tZXNzYWdlc19ieW5hbWUoKQogICAgICB7IH0KICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywg
Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0
IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
aXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf
X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0
eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAg
IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6
Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi
b29sCiAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJl
dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBo
YSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAog
ICAgaXNkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9f
Yyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz
cHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdp
dChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9D
aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5
cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQg
X19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9D
aGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19j
LCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf
X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93
ZXIoX19jKTsgfQp9CiMgNDIgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9iYXNpY19p
b3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zIDogcHVibGljIGlvc19i
YXNlCiAgICB7CiAgICBwdWJsaWM6CgoKCgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBf
VHJhaXRzIHRyYWl0c190eXBlOwojIDc1ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMv
YmFzaWNfaW9zLmgiIDMKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsK
ICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
ZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9p
dGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9D
aGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBtdXRh
YmxlIGNoYXJfdHlwZSBfTV9maWxsOwogICAgICBtdXRhYmxlIGJvb2wgX01fZmlsbF9pbml0Owog
ICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwoKCiAg
ICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX01fZmN0eXBlOwoKICAgICAgY29uc3QgX19udW1wdXRf
dHlwZSogX01fZm51bXB1dDsKCiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7
CgogICAgcHVibGljOgoKCgoKCgoKICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsg
fQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5mYWlsKCk7IH0KIyAxMTkgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9iYXNpY19p
b3MuaCIgMwogICAgICBpb3N0YXRlCiAgICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9zdHJlYW1idWZfc3RhdGU7IH0KIyAxMzAgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQv
Yml0cy9iYXNpY19pb3MuaCIgMwogICAgICB2b2lkCiAgICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0
ZSA9IGdvb2RiaXQpOwoKCgoKCgoKICAgICAgdm9pZAogICAgICBzZXRzdGF0ZShpb3N0YXRlIF9f
c3RhdGUpCiAgICAgIHsgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0K
CgoKCgoKCiAgICAgIGJvb2wKICAgICAgZ29vZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PnJkc3RhdGUoKSA9PSAwOyB9CgoKCgoKCgogICAgICBib29sCiAgICAgIGVvZigpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9IDA7IH0KIyAxNzAgIi90
bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9iYXNpY19pb3MuaCIgMwogICAgICBib29sCiAg
ICAgIGZhaWwoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJp
dCB8IGZhaWxiaXQpKSAhPSAwOyB9CgoKCgoKCgogICAgICBib29sCiAgICAgIGJhZCgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KIyAxOTEg
Ii90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9iYXNpY19pb3MuaCIgMwogICAgICBpb3N0
YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRpb247
IH0KIyAyMjYgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9iYXNpY19pb3MuaCIgMwog
ICAgICB2b2lkCiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkKICAgICAgewogICAg
ICAgIF9NX2V4Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMtPmNsZWFyKF9NX3N0cmVh
bWJ1Zl9zdGF0ZSk7CiAgICAgIH0KCgoKCgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lv
cyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgpCiAg
ICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKCgoKCgoKICAgICAgdmlydHVhbAogICAgICB+YmFz
aWNfaW9zKCkgeyB9CiMgMjYyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvYmFzaWNf
aW9zLmgiIDMKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUo
KSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KIyAyNzQgIi90bXAvaW5zdC9pbmNsdWRl
L2MrKy8zLjQvYml0cy9iYXNpY19pb3MuaCIgMwogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4qCiAgICAgIHRpZShiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fdGll
c3RyKQogICAgICB7CiAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29s
ZCA9IF9NX3RpZTsKICAgICAgICBfTV90aWUgPSBfX3RpZXN0cjsKICAgICAgICByZXR1cm4gX19v
bGQ7CiAgICAgIH0KCgoKCgoKCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQojIDMw
NyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2Jhc2ljX2lvcy5oIiAzCiAgICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgoKCgogICAgICBiYXNpY19pb3MmCiAgICAgIGNv
cHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7CgoKCgoKCgogICAgICBjaGFyX3R5cGUKICAg
ICAgZmlsbCgpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGxfaW5pdCkKICAgICAg
ICAgIHsKICAgICAgICAgICAgX01fZmlsbCA9IHRoaXMtPndpZGVuKCcgJyk7CiAgICAgICAgICAg
IF9NX2ZpbGxfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9NX2ZpbGw7
CiAgICAgIH0KIyAzNDIgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9iYXNpY19pb3Mu
aCIgMwogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5cGUgX19jaCkKICAgICAgewog
ICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZpbGwoKTsKICAgICAgICBfTV9maWxsID0g
X19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KIyAzNjIgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvYml0cy9iYXNpY19pb3MuaCIgMwogICAgICBsb2NhbGUKICAgICAgaW1idWUo
Y29uc3QgbG9jYWxlJiBfX2xvYyk7CiMgMzgyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Jp
dHMvYmFzaWNfaW9zLmgiIDMKICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywg
Y2hhciBfX2RmYXVsdCkgY29uc3Q7CiMgNDAwICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2Jp
dHMvYmFzaWNfaW9zLmgiIDMKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBj
b25zdDsKCiAgICBwcm90ZWN0ZWQ6CgoKCgoKCgogICAgICBiYXNpY19pb3MoKSA6IGlvc19iYXNl
KCkKICAgICAgeyB9CgoKCgoKCgogICAgICB2b2lkCiAgICAgIGluaXQoYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAogICAgICBfTV9jaGVja19mYWNl
dChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9f
ZikKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgfQoKICAgICAgdm9pZAogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xv
Yyk7CiAgICB9Owp9CgoKCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2Jhc2lj
X2lvcy50Y2MiIDEgMwojIDM0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvYmFzaWNf
aW9zLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46
OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkpCiAg
ICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAgICAgZWxzZQogICAgICAgICAg
X01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgaWYgKCh0aGlzLT5y
ZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1
cmUoImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKICAg
ICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVm
OwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVhcigpOwogICAgICBy
ZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoK
CiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX3NpemUgPD0gX1NfbG9jYWxf
d29yZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5ldyBfV29yZHNbX19yaHMuX01f
d29yZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhzLl9NX2NhbGxi
YWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOwog
ICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3JkICE9
IF9NX2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmQ7CiAg
ICAgICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tz
KCk7CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBfX2kgPSAwOyBf
X2kgPCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAgIF9fd29yZHNbX19pXSA9IF9f
cmhzLl9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAg
ICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAw
OwogICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAgICAgIF9NX3dvcmRfc2l6ZSA9
IF9fcmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOwog
ICAgICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJlY2lzaW9uKF9f
cmhzLnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsKICAgICAgdGhp
cy0+ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNl
cHRpb25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Om5hcnJv
dyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgewogICAgICBjaGFyIF9f
cmV0ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5cGUpKQogICAg
ICAgIF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVsdCk7CiAgICAgIHJldHVy
biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hh
ciBfX2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3JldCA9IGNoYXJfdHlwZSgpOwog
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2Zj
dHlwZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxlCiAgICBiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAg
ICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jhc2U6OmltYnVlKF9f
bG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYgKHRoaXMtPnJkYnVm
KCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xvYyk7CiAgICAgIHJl
dHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmluaXQoYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CgogICAgICBpb3NfYmFz
ZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7CiAgICAg
IF9NX3RpZSA9IDA7CiMgMTU5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvYmFzaWNf
aW9zLnRjYyIgMwogICAgICBfTV9maWxsID0gX0NoYXJUKCk7CiAgICAgIF9NX2ZpbGxfaW5pdCA9
IGZhbHNlOwoKICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsKICAgICAgX01fc3RyZWFtYnVm
ID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRi
aXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9jYWNoZV9mYWNldHMo
Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgaWYgKGhhc19mYWNldDxfX2N0eXBlX3R5
cGU+KF9fbG9jKSkKICAgICAgICBfTV9mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4o
X19sb2MpOwogICAgICBlbHNlCiAgICAgICAgX01fZmN0eXBlID0gMDsKCiAgICAgIGlmIChoYXNf
ZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2Zh
Y2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZudW1wdXQg
PSAwOwogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKSkKICAgICAgICBf
TV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251bWdldF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UK
ICAgICAgICBfTV9mbnVtZ2V0ID0gMDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IGJhc2ljX2lvczxjaGFyPjsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8d2No
YXJfdD47Cgp9CiMgNDM5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvYmFzaWNfaW9z
LmgiIDIgMwojIDUyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2lvcyIgMiAzCiMgNDYgIi90
bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvb3N0cmVhbSIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA1
NyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9vc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZp
cnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0
czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2Zm
X3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5
cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9f
b3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1i
dWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5
cGVfdHlwZTsKIyA4NCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9vc3RyZWFtIiAzCiAgICAg
IGV4cGxpY2l0CiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAg
ICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgoKCgoKCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2lj
X29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBz
ZW50cnk7CiMgMTEwICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L29zdHJlYW0iIDMKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZiko
X19vc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CiMgMTQ3
ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L29zdHJlYW0iIDMKICAgICAgX19vc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUm
CiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdz
IF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYg
KF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAg
ICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwo
c3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+
b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikKICAgICAgewogICAgICAgIGlv
c19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZp
ZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFz
ZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdGhp
cy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9fbikKICAgICAgeyBy
ZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsg
fQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24p
OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBs
b25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZG91Ymxl
IF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChmbG9hdCBfX2Yp
CiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2Yp
KTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBkb3VibGUg
X19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQq
IF9fcCk7CiMgMjI4ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L29zdHJlYW0iIDMKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7
CiMgMjYxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L29zdHJlYW0iIDMKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKIyAyODAgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvb3N0cmVhbSIgMwogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgd3JpdGUo
Y29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKIyAyOTMgIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvb3N0cmVhbSIgMwogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgZmx1
c2goKTsKIyAzMDQgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvb3N0cmVhbSIgMwogICAgICBw
b3NfdHlwZQogICAgICB0ZWxscCgpOwojIDMxNSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9v
c3RyZWFtIiAzCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CiMg
MzI3ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L29zdHJlYW0iIDMKICAgICAgIF9fb3N0cmVh
bV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwogICAgfTsK
IyAzNDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvb3N0cmVhbSIgMwogIHRlbXBsYXRlIDx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKIyAzNjAg
Ii90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvb3N0cmVhbSIgMwogICAgICBleHBsaWNpdAogICAg
ICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpOwojIDM3MCAiL3Rt
cC9pbnN0L2luY2x1ZGUvYysrLzMuNC9vc3RyZWFtIiAzCiAgICAgIH5zZW50cnkoKQogICAgICB7
CgogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1
Z2h0X2V4Y2VwdGlvbigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVm
KCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29z
LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CiMgMzg4ICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L29zdHJlYW0iIDMKICAgICAgb3BlcmF0b3IgYm9vbCgp
CiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwojIDQwOSAiL3RtcC9pbnN0L2luY2x1ZGUv
YysrLzMuNC9vc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBfX291
dC53aWRlbihfX2MpKTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIs
IF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVy
biAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3Mg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8
KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykK
ICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQojIDQ0OSAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9vc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0
LCBjb25zdCBfQ2hhclQqIF9fcyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIq
IF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh
bTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJl
dHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAg
dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4g
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29u
c3QgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CiMgNDgzICIvdG1wL2luc3QvaW5jbHVkZS9jKysv
My40L29zdHJlYW0iIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0
KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBlbmRzKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJu
IF9fb3MucHV0KF9DaGFyVCgpKTsgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGZsdXNoKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJu
IF9fb3MuZmx1c2goKTsgfQoKfQoKCgoKCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9i
aXRzL29zdHJlYW0udGNjIiAxIDMKIyAzNiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRz
L29zdHJlYW0udGNjIiAzCgojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvbG9jYWxlIiAx
IDMKIyA0MyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9sb2NhbGUiIDMKCgoKIyAxICIvdG1w
L2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEgMwojIDM3ICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKCiMgMSAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jZXJybm8iIDEgMwojIDQ3ICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2NlcnJubyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzIDQK
IyAzMiAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJu
by5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMSAzIDQKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMyA0CiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vy
cm5vLmgiIDIgMyA0CiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDIgMyA0CiMgMzgg
Ii91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMgNApleHRlcm4gaW50ICpfX2Vycm5vX2xvY2F0
aW9uICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMzcgIi91
c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMgNAojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0
CmV4dGVybiBjaGFyICpwcm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlv
bl9zaG9ydF9uYW1lOwoKCgp9CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzIDQKdHlwZWRl
ZiBpbnQgZXJyb3JfdDsKIyA0OSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jZXJybm8iIDIg
MwojIDM5ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi
IDIgMwoKCiMgMSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jbWF0aCIgMSAzCiMgNDggIi90
bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvY21hdGgiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAxIDMgNAojIDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9uYW4uaCIgMSAzIDQK
IyAzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L21hdGhkZWYuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAzIDQK
dHlwZWRlZiBsb25nIGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVf
dDsKIyA0MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzIDQKIyA2NSAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMyA0CiMgNTMg
Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzIDQKCgpleHRlcm4gZG91YmxlIGFjb3Mg
KGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvcyAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0
YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194
KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBz
aW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91Ymxl
IGNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91
YmxlIHRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzaW5jb3MgKGRvdWJsZSBfX3gsIGRv
dWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2lu
Y29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNp
bmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJsZSBfX3gs
IGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mcmV4cCAoZG91Ymxl
IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxkZXhwIChk
b3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZGV4
cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUg
bG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZyAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19sb2cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv
dWJsZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2V4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgcG93MTAgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUg
bG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMXAgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19sb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4
cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKCgoKCgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp
OwoKCmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19zcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGh5cG90
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBj
YnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAo
ZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2Zs
b29yIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
ZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBpc2lu
ZiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgpleHRlcm4gaW50IGZpbml0ZSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2Nv
cHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkb3VibGUgbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFn
YikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9f
bmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbiAoZG91Ymxl
IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g
ZG91YmxlIGowIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajAgKGRvdWJsZSkg
dGhyb3cgKCk7CmV4dGVybiBkb3VibGUgajEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19qMSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsKZXh0
ZXJuIGRvdWJsZSB5MCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kwIChkb3Vi
bGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9feTEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91
YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91
YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGRvdWJsZSBnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2dhbW1hIChk
b3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGlu
dCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWFfciAoZG91Ymxl
LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSByaW50IChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19u
ZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUgbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSByZW1haW5k
ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmVt
YWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJs
ZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
c2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9n
YiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50
IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUgX194LCBsb25n
IGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5lYXJieWludCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0
cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3Vi
bGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91
YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBs
b25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xy
aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50IChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsK
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv
dWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0IChkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3Vi
bGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSB0
aHJvdyAoKTsKIyA2NiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzIDQKIyA4OCAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMyA0
CiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzIDQKCgpleHRlcm4gZmxvYXQg
YWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChmbG9hdCBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBh
dGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3NpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgoKCmV4dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxv
YXQgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBm
bG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0
IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZs
b2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAo
KTsKCgpleHRlcm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0
aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMTBm
IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRy
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9h
dCBwb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9n
MXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgoKCgoKCgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19zcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmFi
c2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gZmxvYXQgX19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZt
b2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2Rm
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZm
IChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
ZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRl
ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRl
cm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGNv
cHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZmxv
YXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IF9faXNu
YW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxv
YXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJu
IGZsb2F0IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50
LCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBm
bG9hdCB5bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwg
ZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoZmxvYXQpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBlcmZj
ZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpIHRocm93ICgp
OwpleHRlcm4gZmxvYXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19s
Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCB0Z2FtbWFmIChmbG9h
dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dh
bW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9h
dCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChm
bG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBmbG9hdCByaW50
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25l
eHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBk
b3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBm
bG9hdCBfX25leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJm
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYm5m
IChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChm
bG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRo
cm93ICgpOwoKCgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGZsb2F0IHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1
bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CmV4dGVybiBmbG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBp
bnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93
ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBsb25nIGludCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBp
bnQgX19scm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBs
bHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJv
dW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZs
b2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhy
b3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3Np
Z25iaXRmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9h
dCBfX3opIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSwgZmxvYXQgX196KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9f
eCwgZmxvYXQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gs
IGZsb2F0IF9fbikgdGhyb3cgKCk7CiMgODkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0CiMg
MTA5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo
Y2FsbHMuaCIgMSAzIDQKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMgNAoK
CmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxv
bmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRv
dWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX3RhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg
c2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJs
ZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19hc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gbG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoK
CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBp
bnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxv
bmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEw
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cG0xbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAybCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMmwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzJsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2JydGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1v
ZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192
YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBp
bnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3B5c2lnbmwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25h
bmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgam5sIChpbnQs
IGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkwbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAo
KTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91
YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJs
ZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmwg
KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsIChsb25nIGRv
dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQg
Kl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJpbnRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dGFmdGVybCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dGFmdGVybCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBs
b25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxi
bmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxv
Z2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNj
YWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhy
b3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcm91bmRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19x
dW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZmRpbWwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGwgKGxvbmcgZG91
YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsKIyAxMTAgIi91c3IvaW5jbHVk
ZS9tYXRoLmgiIDIgMyA0CiMgMTI1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKZXh0ZXJuIGlu
dCBzaWduZ2FtOwojIDE2NiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMyA0CmVudW0KICB7CiAgICBG
UF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBGUF9TVUJOT1JNQUws
CgogICAgRlBfTk9STUFMCgogIH07CiMgMjUyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKdHlw
ZWRlZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhf
LAogIF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9U
WVBFIF9MSUJfVkVSU0lPTjsKIyAyNzUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMgNApzdHJ1Y3Qg
X19leGNlcHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3Vi
bGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVy
biBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgNDIz
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKfQojIDUyICIvdG1wL2luc3QvaW5jbHVkZS9jKysv
My40L2NtYXRoIiAyIDMKIyA3OSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jbWF0aCIgMwpu
YW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fY21hdGhfcG93
ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91YmxlCiAgYWJzKGRvdWJsZSBfX3gp
CiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUgZmxvYXQKICBhYnMo
ZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBs
b25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Zh
YnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6
OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgogIGlubGluZSBsb25nIGRvdWJs
ZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0KCgoKCgog
IHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4oZmxvYXQgX194KSB7IHJldHVy
biA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhc2luKGxvbmcg
ZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmF0YW47
CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuZihfX3gp
OyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihsb25nIGRvdWJsZSBfX3gpIHsg
cmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFuMjsKCgogIGlubGluZSBm
bG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4yZihfX3ks
IF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIobG9uZyBkb3VibGUg
X195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJsKF9feSwgX194KTsgfQoKCgoK
CgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNlaWwoZmxvYXQgX194KSB7IHJl
dHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjZWlsKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmNv
czsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5f
Y29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJsZSBfX3gp
CiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1c2luZyA6OmNvc2g7CgoKICBp
bmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3NoZihfX3gpOyB9CgoK
CgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu
IDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoKICBpbmxpbmUgZmxvYXQKICBl
eHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25n
IGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhwbChfX3gpOyB9CgoK
CgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsg
cmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZh
YnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9Cgog
IHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gpIHsgcmV0
dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmbG9vcihs
b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6
Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0
dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZt
b2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1vZGwoX194
LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlubGluZSBmbG9hdAogIGZyZXhw
KGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGYoX194LCBfX2V4cCk7IH0K
CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJsZSBfX3gsIGludCog
X19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjps
ZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9feCwgaW50IF9fZXhwKSB7IHJl
dHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyByZXR1cm4gOjpsZGV4cGwoX194
LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlubGluZSBmbG9hdAogIGxvZyhm
bG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91
YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2dsKF9feCk7IH0KCgoKCgog
IHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cxMChmbG9hdCBfX3gpIHsgcmV0
dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cxMChs
b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6
bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9hdCogX19pcHRyKSB7
IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3NSAiL3RtcC9pbnN0L2luY2x1ZGUv
YysrLzMuNC9jbWF0aCIgMwogIGlubGluZSBsb25nIGRvdWJsZQogIG1vZGYobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSogX19pcHRyKSB7IHJldHVybiA6Om1vZGZsKF9feCwgX19pcHRyKTsg
fQojIDM4OCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9jbWF0aCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9fcG93X2hlbHBlcihfVHAgX194LCBpbnQg
X19uKQogICAgewogICAgICByZXR1cm4gX19uIDwgMAogICAgICAgID8gX1RwKDEpL19fY21hdGhf
cG93ZXIoX194LCAtX19uKQogICAgICAgIDogX19jbWF0aF9wb3dlcihfX3gsIF9fbik7CiAgICB9
CgogIHVzaW5nIDo6cG93OwoKCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgZmxvYXQg
X195KSB7IHJldHVybiA6OnBvd2YoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRv
dWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4gOjpw
b3dsKF9feCwgX195KTsgfQoKCgoKCgogIGlubGluZSBkb3VibGUKICBwb3coZG91YmxlIF9feCwg
aW50IF9faSkKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX2kpOyB9CgogIGlubGluZSBm
bG9hdAogIHBvdyhmbG9hdCBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9f
eCwgX19uKTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBp
bnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgdXNpbmcgOjpz
aW47CgogIGlubGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGlu
X3NpbmYoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW4obG9uZyBkb3VibGUgX194
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5sKF9feCk7IH0KCiAgdXNpbmcgOjpzaW5oOwoKCiAg
aW5saW5lIGZsb2F0CiAgc2luaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6c2luaGYoX194KTsgfQoK
CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHNpbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVy
biA6OnNpbmhsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6c3FydDsKCiAgaW5saW5lIGZsb2F0CiAg
c3FydChmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NxcnRmKF9feCk7IH0KCiAgaW5s
aW5lIGxvbmcgZG91YmxlCiAgc3FydChsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWls
dGluX3NxcnRsKF9feCk7IH0KCiAgdXNpbmcgOjp0YW47CgoKICBpbmxpbmUgZmxvYXQKICB0YW4o
ZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRv
dWJsZQogIHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFubChfX3gpOyB9CgoKCgoK
ICB1c2luZyA6OnRhbmg7CgoKICBpbmxpbmUgZmxvYXQKICB0YW5oKGZsb2F0IF9feCkgeyByZXR1
cm4gOjp0YW5oZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuaChsb25n
IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFuaGwoX194KTsgfQoKCgoKfQoKCgoKCgpuYW1lc3Bh
Y2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2Fw
dHVyZV9mcGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9m
IChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAo
ZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzZmluaXRlKF9U
cCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2Zpbml0
ZWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19maW5pdGUgKF9f
ZikgOiBfX2Zpbml0ZWwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
dAogICAgX19jYXB0dXJlX2lzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0g
c2l6ZW9mIChmbG9hdCkgPyBfX2lzaW5mZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2Yg
KGRvdWJsZSkgPyBfX2lzaW5mIChfX2YpIDogX19pc2luZmwgKF9fZikpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzbmFuKF9UcCBfX2YpIHsgcmV0
dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzbmFuZiAoX19mKSA6IHNp
emVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2lzbmFuIChfX2YpIDogX19pc25hbmwg
KF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJl
X2lzbm9ybWFsKF9UcCBfX2YpIHsgcmV0dXJuICgoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxv
YXQpID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJs
ZSkgPyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKSA9PSBGUF9OT1JN
QUwpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX3Np
Z25iaXQoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/
IF9fc2lnbmJpdGYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19z
aWduYml0IChfX2YpIDogX19zaWduYml0bCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikK
ICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9f
ZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9f
dHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAo
c2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNp
emVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2Zw
Y2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZs
b2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3Vi
bGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFO
OyB9KSkgJiYgX194ID4gX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
IGludAogICAgIF9fY2FwdHVyZV9pc2dyZWF0ZXJlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAg
ICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19m
MSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190
eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChz
aXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6
ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBj
bGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxv
YXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJs
ZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47
IH0pKSAmJiBfX3ggPj0gX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
IGludAogICAgIF9fY2FwdHVyZV9pc2xlc3MoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiAo
X19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2Zf
XyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkg
X191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9
PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0g
c2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191
KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xh
c3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFz
c2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA8
IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2Nh
cHR1cmVfaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4
dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9f
ZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3Ug
PSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNp
emVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXpl
b2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9
PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lm
eWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5
IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194IDw9IF9f
eTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1
cmVfaXNsZXNzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0
ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19m
MikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9
IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6
ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVv
ZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09
IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5
ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkg
KF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiAoX194IDwgX195
IHx8IF9feSA8IF9feCk7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50
CiAgICAgX19jYXB0dXJlX2lzdW5vcmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJl
dHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9fdSA9IChfX2YxKTsgX190
eXBlb2ZfXyhfX2YyKSBfX3YgPSAoX19mMik7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9h
dCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91Ymxl
KSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8
fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6
IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBf
X2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKTsgfQp9CiMgNTgwICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2NtYXRoIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiBf
X2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg
IGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzZmluaXRlKF9f
Zik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2luZihfVHAgX19m
KSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25hbihf
X2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNub3JtYWwoX1Rw
IF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVy
ZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBp
c2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVy
KF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNn
cmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lz
Z3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg
IGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gX19jYXB0dXJlX2lz
bGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg
IGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9p
c2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19j
YXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJl
dHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19mMik7IH0KfQoKbmFtZXNwYWNlIHN0
ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5OwogIHVzaW5nIF9fZ251X2N4eDo6aXNm
aW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1c2luZyBfX2dudV9jeHg6OmlzbmFu
OwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNpbmcgX19nbnVfY3h4OjpzaWduYml0
OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVh
dGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7CiAgdXNpbmcgX19nbnVfY3h4Ojpp
c2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2dyZWF0ZXI7CiAgdXNpbmcgX19n
bnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40
L2JpdHMvY21hdGgudGNjIiAxIDMKIyAzNSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRz
L2NtYXRoLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBfVHAKICAgIF9fY21hdGhfcG93ZXIoX1RwIF9feCwgdW5zaWduZWQgaW50IF9fbikKICAgIHsK
ICAgICAgX1RwIF9feSA9IF9fbiAlIDIgPyBfX3ggOiAxOwoKICAgICAgd2hpbGUgKF9fbiA+Pj0g
MSkKICAgICAgICB7CiAgICAgICAgICBfX3ggPSBfX3ggKiBfX3g7CiAgICAgICAgICBpZiAoX19u
ICUgMikKICAgICAgICAgICAgX195ID0gX195ICogX194OwogICAgICAgIH0KCiAgICAgIHJldHVy
biBfX3k7CiAgICB9Cn0KIyA2NTUgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvY21hdGgiIDIg
MwojIDQyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi
IDIgMwoKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2xpbWl0cyIgMSAzCiMgNDcgIi90
bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvbGltaXRzIiAzCiMgMTUwICIvdG1wL2luc3QvaW5jbHVk
ZS9jKysvMy40L2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0X3JvdW5kX3N0
eWxlCiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93YXJkX3pl
cm8gPSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRfaW5maW5p
dHkgPSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKICBlbnVtIGZs
b2F0X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICBk
ZW5vcm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoKCgogIHN0cnVj
dCBfX251bWVyaWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj
aWFsaXplZCA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGlu
dCByYWRpeCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1
Y3QgbnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNlCiAgICB7CiAg
ICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDAp
OyB9CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxf
VHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhyb3co
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgaW5maW5p
dHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGlj
IF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0K
ICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBz
dHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJy
b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCgoKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFyIG1pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gKCgoY2hhcikoLTEpIDwgMCkgPyAoY2hhcikxIDw8IChz
aXplb2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSkgOiAoY2hhcikwKTsgfQogICAgICBz
dGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKGNoYXIpKC0xKSA8IDAp
ID8gKChjaGFyKTEgPDwgKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8IDApKSkgLSAx
IDogfihjaGFyKTApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2Yo
Y2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzMTAgPSAoKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8IDApKSAqIDY0MyAvIDIx
MzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSAoKGNoYXIpKC0xKSA8IDAp
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw
ID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNoYXIg
aW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMg
Y2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBz
dGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7
IH0KICAgICAgc3RhdGljIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1
OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0
IG51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAtMTI3IC0gMTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNo
YXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzID0gKHNpemVvZihzaWduZWQgY2hhcikgKiA4IC0gKChzaWduZWQgY2hhciko
LTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2Yoc2ln
bmVkIGNoYXIpICogOCAtICgoc2lnbmVkIGNoYXIpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
Y3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGlj
IHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAg
c3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw
OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw
OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2lnbmVkIGNo
YXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBj
aGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGlj
IHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDAp
OyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf
emVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAxMjcgKiAyVSArIDE7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gKHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDggLSAoKHVuc2lnbmVkIGNoYXIpKC0xKSA8IDAp
KTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6ZW9mKHVuc2lnbmVkIGNo
YXIpICogOCAtICgodW5zaWduZWQgY2hhcikoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVu
c2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVk
IGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2ln
bmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls
ZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51
bWVyaWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IG1pbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gKCgod2NoYXJfdCkoLTEpIDwgMCkgPyAod2NoYXJfdCkxIDw8IChzaXplb2Yo
d2NoYXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSkgOiAod2NoYXJfdCkwKTsgfQogICAg
ICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKHdjaGFyX3Qp
KC0xKSA8IDApID8gKCh3Y2hhcl90KTEgPDwgKHNpemVvZih3Y2hhcl90KSAqIDggLSAoKHdjaGFy
X3QpKC0xKSA8IDApKSkgLSAxIDogfih3Y2hhcl90KTApOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IChzaXplb2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSk7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih3Y2hhcl90KSAqIDgg
LSAoKHdjaGFyX3QpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSAoKHdjaGFyX3QpKC0xKSA8IDApOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHdj
aGFyX3QgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMg
d2NoYXJfdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z
aWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5
bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgaW5maW5pdHkoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBx
dWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0
aWMgd2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90
KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gd2NoYXJfdCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l
cmljX2xpbWl0czxzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gLTMyNzY3IC0gMTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6
ZW9mKHNob3J0KSAqIDggLSAoKHNob3J0KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzMTAgPSAoKHNpemVvZihzaG9ydCkgKiA4IC0gKChzaG9ydCkoLTEpIDwgMCkpICog
NjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy
OwogICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9
IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBp
bmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMg
c2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAg
IHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9y
dCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzMjc2NyAqIDJVICsgMTsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDggLSAoKHVuc2ln
bmVkIHNob3J0KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAo
KHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4IC0gKCh1bnNpZ25lZCBzaG9ydCkoLTEpIDwgMCkp
ICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9yKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt
X2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7
CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5z
aWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNo
b3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVub3JtX21pbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs
byA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAg
IH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAtMjE0NzQ4MzY0NyAtIDE7IH0KICAg
ICAgc3RhdGljIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDc7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZihpbnQpICogOCAtICgoaW50
KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihp
bnQpICogOCAtICgoaW50KSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50
ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs
c2U7CgogICAgICBzdGF0aWMgaW50IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQg
c2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pigw
KTsgfQogICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1
OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0
IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtaW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBt
YXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDcgKiAyVSArIDE7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBpbnQpICogOCAtICgo
dW5zaWduZWQgaW50KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
PSAoKHNpemVvZih1bnNpZ25lZCBpbnQpICogOCAtICgodW5zaWduZWQgaW50KSgtMSkgPCAwKSkg
KiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0
eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNl
bnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAg
IHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIC0yMTQ3NDgzNjQ3TCAtIDE7IH0KICAgICAgc3RhdGljIGxvbmcgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKGxvbmcpICogOCAtICgobG9uZykoLTEpIDwgMCkpOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2YobG9uZykgKiA4IC0gKChs
b25nKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg
IHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9
CiAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu
dW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TCAqIDJVTCArIDE7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgg
LSAoKHVuc2lnbmVkIGxvbmcpKC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMxMCA9ICgoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogOCAtICgodW5zaWduZWQgbG9uZykoLTEp
IDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJv
cigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFs
aW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
Zz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
dHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK
CiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAgIHsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3Rh
dGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIC05MjIzMzcyMDM2ODU0
Nzc1ODA3TEwgLSAxOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gKHNpemVvZihsb25nIGxvbmcpICogOCAtICgobG9uZyBsb25nKSgtMSkgPCAw
KSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihsb25nIGxvbmcp
ICogOCAtICgobG9uZyBsb25nKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGxvbmcg
ZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyBs
b25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo
YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0
YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5nX05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQog
ICAgICBzdGF0aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSBy
b3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAg
c3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3Rh
dGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDkyMjMz
NzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IChzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSAqIDggLSAoKHVuc2lnbmVkIGxvbmcg
bG9uZykoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXpl
b2YodW5zaWduZWQgbG9uZyBsb25nKSAqIDggLSAoKHVuc2lnbmVkIGxvbmcgbG9uZykoLTEpIDwg
MCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcm91
bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1
aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv
c3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW5maW5pdHkoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7
IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k
ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k
X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZmxvYXQ+CiAgICB7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBtaW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTc1NDk0MzVlLTM4RjsgfQogICAgICBzdGF0aWMg
ZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MS4xOTIwOTI5MGUtN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwLjVGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudCA9ICgtMTI1KTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9ICgt
MzcpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2luZmluaXR5CiAgICAgICAgPSBfX2J1aWx0aW5faHVnZV92YWxmICgpIC8gMiA9PSBf
X2J1aWx0aW5faHVnZV92YWxmICgpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOCiAgICAgICAgPSBfX2J1aWx0aW5fbmFuZiAoIiIpICE9IF9fYnVpbHRpbl9uYW5mICgiIik7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gaGFzX3F1aWV0X05h
TjsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtCiAgICAg
ICAgPSAxLjQwMTI5ODQ2ZS00NUYgPyBkZW5vcm1fcHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh
dGljIGZsb2F0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBfX2J1aWx0aW5faHVn
ZV92YWxmICgpOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIF9fYnVpbHRpbl9uYW5mICgiIik7IH0KICAgICAgc3RhdGljIGZsb2F0IHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW5zZiAoIiIpOyB9
CiAgICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAx
LjQwMTI5ODQ2ZS00NUY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OQogICAg
ICAgID0gaGFzX2luZmluaXR5ICYmIGhhc19xdWlldF9OYU4gJiYgaGFzX2Rlbm9ybSA9PSBkZW5v
cm1fcHJlc2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3RvX25lYXJlc3Q7CiAgICB9OwoKCgoKCiAgdGVtcGxhdGU8PgogICAg
c3RydWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGRvdWJsZSBtaW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDIuMjI1MDczODU4NTA3MjAxNGUtMzA4OyB9CiAgICAgIHN0YXRp
YyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjc5NzY5MzEzNDg2MjMxNTdl
KzMwODsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA1MzsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMxMCA9IDE1OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWdu
ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEzMWUtMTY7IH0KICAgICAgc3RhdGljIGRvdWJs
ZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC41OyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9ICgtMTAyMSk7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50MTAgPSAoLTMwNyk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMw
ODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eQogICAgICAgID0gX19idWls
dGluX2h1Z2VfdmFsICgpIC8gMiA9PSBfX2J1aWx0aW5faHVnZV92YWwgKCk7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4KICAgICAgICA9IF9fYnVpbHRpbl9uYW4gKCIiKSAh
PSBfX2J1aWx0aW5fbmFuICgiIik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp
bmdfTmFOID0gaGFzX3F1aWV0X05hTjsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z
dHlsZSBoYXNfZGVub3JtCiAgICAgICAgPSA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNCA/IGRlbm9y
bV9wcmVzZW50IDogZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhyb3co
KQogICAgICB7IHJldHVybiBfX2J1aWx0aW5faHVnZV92YWwoKTsgfQogICAgICBzdGF0aWMgZG91
YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX25hbiAoIiIp
OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gX19idWlsdGluX25hbnMgKCIiKTsgfQogICAgICBzdGF0aWMgZG91YmxlIGRlbm9ybV9t
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0OyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkKICAgICAgICA9IGhhc19pbmZpbml0eSAm
JiBoYXNfcXVpZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVub3JtX3ByZXNlbnQ7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b19u
ZWFyZXN0OwogICAgfTsKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0
czxsb25nIGRvdWJsZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0KICAgICAgc3RhdGljIGxv
bmcgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3
NjUwMmUrNDkzMkw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQog
ICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDAuNUw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gKC0xNjM4
MSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAoLTQ5MzEpOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0OwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudDEwID0gNDkzMjsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eQogICAgICAgID0gX19idWlsdGluX2h1Z2VfdmFsbCAoKSAvIDIgPT0gX19idWls
dGluX2h1Z2VfdmFsbCAoKTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTgog
ICAgICAgID0gX19idWlsdGluX25hbmwgKCIiKSAhPSBfX2J1aWx0aW5fbmFubCAoIiIpOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGhhc19xdWlldF9OYU47CiAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQogICAgICAgID0g
My42NDUxOTk1MzE4ODI0NzQ2MDI1M2UtNDk1MUwgPyBkZW5vcm1fcHJlc2VudCA6IGRlbm9ybV9h
YnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcwogICAgICAgID0g
ZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIF9fYnVpbHRpbl9odWdlX3ZhbGwgKCk7IH0KICAgICAgc3RhdGljIGxvbmcgZG91
YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX25hbmwgKCIi
KTsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gX19idWlsdGluX25hbnNsICgiIik7IH0KICAgICAgc3RhdGljIGxvbmcgZG91
YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuNjQ1MTk5NTMxODgyNDc0
NjAyNTNlLTQ5NTFMOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkKICAgICAg
ICA9IGhhc19pbmZpbml0eSAmJiBoYXNfcXVpZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVub3Jt
X3ByZXNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl
Zm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b19uZWFyZXN0OwogICAgfTsKCgoKCgp9CiMgNDQgIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgojIDEgIi90bXAvaW5z
dC9pbmNsdWRlL2MrKy8zLjQvdHlwZWluZm8iIDEgMwojIDQwICIvdG1wL2luc3QvaW5jbHVkZS9j
KysvMy40L3R5cGVpbmZvIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7
CiAgY2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1NSAiL3RtcC9pbnN0L2luY2x1ZGUvYysr
LzMuNC90eXBlaW5mbyIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyB0eXBlX2luZm8K
ICB7CiAgcHVibGljOgoKCgoKICAgIHZpcnR1YWwgfnR5cGVfaW5mbygpOwoKICBwcml2YXRlOgoK
ICAgIHR5cGVfaW5mbyYgb3BlcmF0b3I9KGNvbnN0IHR5cGVfaW5mbyYpOwogICAgdHlwZV9pbmZv
KGNvbnN0IHR5cGVfaW5mbyYpOwoKICBwcm90ZWN0ZWQ6CiAgICBjb25zdCBjaGFyICpfX25hbWU7
CgogIHByb3RlY3RlZDoKICAgIGV4cGxpY2l0IHR5cGVfaW5mbyhjb25zdCBjaGFyICpfX24pOiBf
X25hbWUoX19uKSB7IH0KCiAgcHVibGljOgoKCgogICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0
CiAgICB7IHJldHVybiBfX25hbWU7IH0KIyAxMDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQv
dHlwZWluZm8iIDMKICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0
CiAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0KICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lID09IF9f
YXJnLl9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCB0eXBlX2luZm8mIF9fYXJn
KSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcpOyB9CgoKICBwdWJsaWM6Cgog
ICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7CgogICAgdmlydHVhbCBib29s
IF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX2Nh
dGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAqKl9fdGhyX29iaiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OwoKCiAgICB2aXJ0
dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8g
Kl9fdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX29ial9wdHIp
IGNvbnN0OwogIH07CgoKCgoKCiAgY2xhc3MgYmFkX2Nhc3QgOiBwdWJsaWMgZXhjZXB0aW9uCiAg
ewogIHB1YmxpYzoKICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFk
X2Nhc3QoKSB0aHJvdygpOwogIH07CgoKICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2Vw
dGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfdHlwZWlkICgpIHRocm93KCkgeyB9CgoKICAgIHZp
cnR1YWwgfmJhZF90eXBlaWQoKSB0aHJvdygpOwogIH07Cn0KCn0KIyA0NiAiL3RtcC9pbnN0L2lu
Y2x1ZGUvYysrLzMuNC9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQK
ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21i
aW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QKICAgIHsKICAgICAgX0ltcGwqIF9fdG1w
ID0gbmV3IF9JbXBsKCpfTV9pbXBsLCAxKTsKICAgICAgX190bXAtPl9NX3JlcGxhY2VfZmFjZXQo
X19vdGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7CiAgICAgIHJldHVybiBsb2NhbGUoX190bXAp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIGxvY2FsZTo6b3BlcmF0b3IoKShjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIp
IGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgc3RkOjpjb2xsYXRlPF9DaGFyVD4gX19jb2xsYXRl
X3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlJiBfX2NvbGxhdGUgPSB1c2VfZmFjZXQ8
X19jb2xsYXRlX3R5cGU+KCp0aGlzKTsKICAgICAgcmV0dXJuIChfX2NvbGxhdGUuY29tcGFyZShf
X3MxLmRhdGEoKSwgX19zMS5kYXRhKCkgKyBfX3MxLmxlbmd0aCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBfX3MyLmRhdGEoKSArIF9fczIubGVuZ3RoKCkp
IDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNl
dCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBzaXplX3Qg
X19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMg
PSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIGlmICghKF9faSA8IF9fbG9jLl9NX2lt
cGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFjZXRzW19faV0pKQogICAgICAgIF9fdGhyb3dfYmFk
X2Nhc3QoKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9GYWNldCY+KCpfX2ZhY2V0
c1tfX2ldKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAg
aGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkKICAgIHsKICAgICAgc2l6ZV90
IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRz
ID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICByZXR1cm4gKF9faSA8IF9fbG9jLl9N
X2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFjZXRzW19faV0pOwogICAgfQoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51
bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19i
ZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJjKSBjb25zdAogICAgewogICAg
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgY29uc3Qg
bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg
X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBu
dW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xv
Yyk7CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsK
ICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7CiAgICAg
IGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGlmICgo
X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg
X19taW51cykpCiAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAg
ICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3Bv
czsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNo
YXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAg
Ym9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVx
KF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX2Mg
PSAqKCsrX19iZWcpOwogICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsKICAgICAgICB9CiAg
ICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgewogICAgICAgICAgX194dHJjICs9IF9TX2F0
b21zW19NX3plcm9dOwogICAgICAgICAgKytfX3BvczsKICAgICAgICB9CgoKICAgICAgY29uc3Qg
c2l6ZV90IF9fbGVuID0gX01fRSAtIF9NX3plcm8gKyAxOwogICAgICBjaGFyX3R5cGUgX193YXRv
bXNbX19sZW5dOwogICAgICBfX2N0eXBlLndpZGVuKF9TX2F0b21zLCBfU19hdG9tcyArIF9fbGVu
LCBfX3dhdG9tcyk7CiAgICAgIGJvb2wgX19mb3VuZF9kZWMgPSBmYWxzZTsKICAgICAgYm9vbCBf
X2ZvdW5kX3NjaSA9IGZhbHNlOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19kZWMgPSBfX25wLmRl
Y2ltYWxfcG9pbnQoKTsKCiAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOwogICAgICBjb25z
dCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgYm9vbCBfX2NoZWNr
X2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwog
ICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsKCiAgICAg
IHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CgogICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCAxMCwgX19jKTsKCgogICAg
ICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUoKSkpCiAg
ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMg
Kz0gX1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAgICAgICsrX19zZXBfcG9zOwog
ICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVs
c2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApCiAgICAgICAgICAgICAgICAgICAm
JiBfX2NoZWNrX2dyb3VwaW5nICYmICFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAg
ICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsr
X19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fZGVjKSAmJiAhX19mb3VuZF9k
ZWMpCiAgICAgICAgICAgIHsKCgoKICAgICAgICAgICAgICBpZiAoX19mb3VuZF9ncm91cGluZy5z
aXplKCkpCiAgICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNo
YXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0
cmMgKz0gJy4nOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg
X19mb3VuZF9kZWMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmICgoX190
cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9lXSkKICAgICAgICAgICAgICAgICAgICB8
fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21zW19NX0VdKSkKICAgICAgICAgICAgICAg
ICAgICYmICFfX2ZvdW5kX3NjaSAmJiBfX3BvcykKICAgICAgICAgICAgewoKICAgICAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNo
YXIoKSk7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKCgogICAgICAgICAgICAgIGlm
IChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykKICAgICAgICAgICAgICAgICAgfHwgX190
cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFy
cm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX2ZvdW5kX3NjaSA9IHRydWU7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAg
ICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAg
ICAgewoKICAgICAgICAgIGlmICghX19mb3VuZF9kZWMpCiAgICAgICAgICAgIF9fZm91bmRfZ3Jv
dXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgIGlmICghX192
ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpCiAgICAgICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBfX3h0cmMgKz0g
Y2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfaW50KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0CiAgICB7CiAgICAg
IHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBjb25zdCBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBf
X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51
bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9j
KTsKCgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkg
JiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6
Om9jdCkKICAgICAgICBfX2Jhc2UgPSA4OwogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBp
b3NfYmFzZTo6aGV4KQogICAgICAgIF9fYmFzZSA9IDE2OwogICAgICBlbHNlCiAgICAgICAgX19i
YXNlID0gMTA7CgoKICAgICAgaW50IF9fcG9zID0gMDsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpf
X2JlZzsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsK
ICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7CgogICAg
ICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBlOjpl
cShfX2MsIF9fbWludXMpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewog
ICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAg
ICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAgICBj
b25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7
CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3ggPSBfX2N0eXBlLndpZGVuKCd4Jyk7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSBfX1ggPSBfX2N0eXBlLndpZGVuKCdYJyk7CiAgICAgIGlmIChfX2Jhc2Ug
PT0gMTApCiAgICAgICAgewogICAgICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsKICAg
ICAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0g
X19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg
ICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlm
IChfX2ZvdW5kX3plcm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1Nf
YXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBpZiAo
X19iYXNlZmllbGQgPT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYg
KChfX3RyYWl0c190eXBlOjplcShfX2MsIF9feCkKICAgICAgICAgICAgICAgICAgICAgICB8fCBf
X3RyYWl0c190eXBlOjplcShfX2MsIF9fWCkpCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2Jl
ZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBf
X3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg
ICAgICAgICAgICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSA4OwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2Jhc2Ug
PT0gMTYpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196
ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9feHRy
YyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAg
ICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgaWYgKChfX3RyYWl0c190eXBlOjpl
cShfX2MsIF9feCkgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAg
ICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAg
ICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgc2l6ZV90IF9fbGVuOwog
ICAgICBpZiAoX19iYXNlID09IDE2KQogICAgICAgIF9fbGVuID0gX01fc2l6ZTsKICAgICAgZWxz
ZQogICAgICAgIF9fbGVuID0gX19iYXNlOwoKCiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfTV9z
aXplXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xlbiwgX193
YXRvbXMpOwogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAgY29uc3Qgc3RyaW5n
IF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19jaGVja19ncm91cGlu
ZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0gMDsKICAgICAgY29u
c3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CiAgICAgIHdoaWxlIChf
X2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9
IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIF9fbGVuLCBfX2MpOwoKCiAgICAgICAgICBp
ZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwog
ICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAo
X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkgJiYgX19jaGVja19ncm91cGluZykKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihf
X3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAg
ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoK
CiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQog
ICAgICAgIHsKCiAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+
KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcs
IF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09
IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBf
X2JlZzsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgIHsKCiAg
ICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQogICAgICAgIHsK
CgogICAgICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAg
ICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRy
YywgX19iYXNlKTsKCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgICAgICBfX2Nv
bnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jh
c2UpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX191bCA8
PSAxKQogICAgICAgICAgICBfX3YgPSBfX3VsOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBf
X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwog
ICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAg
ICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgICAgICBjb25zdCBudW1w
dW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7
CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9fdHJ1ZSA9IF9fbnAudHJ1ZW5hbWUoKTsK
ICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUgX19mYWxzZSA9IF9fbnAuZmFsc2VuYW1lKCk7
CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdHJ1ZXMgPSBfX3RydWUuY19zdHIoKTsKICAg
ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19mYWxzZXMgPSBfX2ZhbHNlLmNfc3RyKCk7CiAgICAg
ICAgICBjb25zdCBzaXplX3QgX190cnVlbiA9IF9fdHJ1ZS5zaXplKCkgLSAxOwogICAgICAgICAg
Y29uc3Qgc2l6ZV90IF9fZmFsc2VuID0gX19mYWxzZS5zaXplKCkgLSAxOwoKICAgICAgICAgIGZv
ciAoc2l6ZV90IF9fbiA9IDA7IF9fYmVnICE9IF9fZW5kOyArK19fbikKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWcrKzsKICAgICAgICAgICAgICBib29s
IF9fdGVzdGYgPSBfX24gPD0gX19mYWxzZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/
IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19mYWxzZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAg
ICAgICBib29sIF9fdGVzdHQgPSBfX24gPD0gX190cnVlbgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3RydWVzW19fbl0pIDogZmFsc2U7CiAg
ICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9f
dGVzdGYgJiYgX19uID09IF9fZmFsc2VuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICBfX3YgPSAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9fbiA9PSBfX3RydWVuKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAxOwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fYmVn
ID09IF9fZW5kKQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICAg
IH0KICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3Yp
IGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAg
IF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj
LCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy
ciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcg
X194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9f
YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgdW5zaWduZWQg
bG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19l
cnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm
YWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9y
dD46Om1heCgpKQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3Vs
KTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBy
ZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBk
b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNv
bnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9f
YmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBf
X2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9f
eHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGludD4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu
c2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAg
aW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5j
X3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9f
YmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsK
ICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9l
eHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAg
ICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2Fs
ZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu
c2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwog
ICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194
dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1
cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9f
Z2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7
CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19i
ZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7
CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xv
Y2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUm
IF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2Vy
dmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9f
diwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu
dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0
cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zs
b2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90
b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVy
biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl
dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoK
ICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdz
IF9fZm10ID0gX19pby5mbGFncygpOwogICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19i
YXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAg
IF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNl
OjpzaG93YmFzZSkpOwoKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAg
ICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0
cmMsIF9fYmFzZSk7CgoKICAgICAgX19pby5mbGFncyhfX2ZtdCk7CgogICAgICB1bnNpZ25lZCBs
b25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2Vy
ciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZh
aWxiaXQpKQogICAgICAgIF9fdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fdWwpOwogICAg
ICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBf
X2JlZzsKICAgIH0KIyA2MTggIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9sb2NhbGVf
ZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9mbG9hdChfT3V0SXRl
ciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyIF9fbW9kLAogICAgICAg
ICAgICAgICAgICAgICAgIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKICAgICAgICBjb25z
dCBpbnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICsg
MTsKICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICAg
IGlmIChfX3ByZWMgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21heF9kaWdpdHMpKQogICAg
ICAgICAgX19wcmVjID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKTsKCgog
ICAgICAgIGNoYXIgX19mYnVmWzE2XTsKCgogICAgICAgIGludCBfX2xlbjsKCgoKICAgICAgICBp
bnQgX19jc19zaXplID0gX19tYXhfZGlnaXRzICogMzsKICAgICAgICBjaGFyKiBfX2NzID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CgogICAgICAgIGNv
bnN0IGJvb2wgX19mcCA9IF9TX2Zvcm1hdF9mbG9hdChfX2lvLCBfX2ZidWYsIF9fbW9kLCBfX3By
ZWMpOwogICAgICAgIGlmIChfX2ZwKQogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92
KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19s
ZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsIF9TX2Nf
bG9jYWxlKTsKCgogICAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgICB7CiAg
ICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAgICAgICAgICAgX19jcyA9IHN0YXRp
Y19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgICBp
ZiAoX19mcCkKICAgICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19j
c19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBf
X2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAg
ICAgfQojIDY4MSAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9iaXRzL2xvY2FsZV9mYWNldHMu
dGNjIiAzCiAgICAgICAgcmV0dXJuIF9NX3dpZGVuX2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBf
X2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgIF9PdXRJdGVy
CiAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgICBfTV9jb252ZXJ0X2ludChf
T3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyIF9fbW9kLAog
ICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBfX3YpIGNvbnN0CiAgICAg
IHsKCgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgICAgX1NfZm9ybWF0X2ludChfX2lv
LCBfX2ZidWYsIF9fbW9kLCBfX21vZGwpOwoKCiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IDY0Owog
ICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShf
X2NzX3NpemUpKTsKICAgICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9f
Y3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfU19jX2xvY2FsZSk7CgogICAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAg
ICB7CiAgICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAgICAgICAgICAgX19jcyA9
IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAg
ICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9f
diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAg
ICAgICAgIH0KCgoKCgoKICAgICAgICByZXR1cm4gX01fd2lkZW5faW50KF9fcywgX19pbywgX19m
aWxsLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0
ZXI+OjoKICAgIF9NX3dpZGVuX2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9D
aGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNv
bnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBl
OwoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0
IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j
KTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2Fs
bG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsKCgogICAgICBfQ2hhclQqIF9fd3MyID0g
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
IF9fbGVuICogMikpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193
cyk7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfX3A7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFy
VD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgaWYg
KF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193cywgX19sZW4sIF9fY3R5cGUud2lkZW4oJy4n
KSkpCiAgICAgICAgX193c1tfX3AgLSBfX3dzXSA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKCgoK
ICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGlv
c19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpi
YXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CiAgICAgICAg
ICBfQ2hhclQqIF9fcDI7CiAgICAgICAgICBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX3dz
IDogX19sZW47CiAgICAgICAgICBfX3AyID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fbnAudGhv
dXNhbmRzX3NlcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcu
Y19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3Ry
KCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3dzLCBfX3dzICsgX19kZWNsZW4pOwogICAgICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAtIF9f
d3MyOwoKCiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX190
cmFpdHNfdHlwZTo6Y29weShfX3AyLCBfX3AsIF9fbGVuIC0gX19kZWNsZW4pOwogICAgICAgICAg
ICAgIF9fbmV3bGVuICs9IF9fbGVuIC0gX19kZWNsZW47CiAgICAgICAgICAgIH0KCgogICAgICAg
ICAgX193cyA9IF9fd3MyOwogICAgICAgICAgX19sZW4gPSBfX25ld2xlbjsKICAgICAgICB9Cgog
ICAgICByZXR1cm4gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf
T3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9pbnQo
X091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywK
ICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgoKICAgICAgY29uc3QgbG9j
YWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19j
dHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfQ2hhclQqIF9f
d3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQq
PihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7CiAgICAg
IF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgogICAgICBjb25zdCBu
dW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xv
Yyk7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAg
ICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBp
b3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAg
ewoKCgoKCiAgICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmICgoX19p
by5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSAmJiBfX2xlbiA+IDEpCiAgICAgICAgICAg
IGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIF9fb2ZmID0gMTsKICAgICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6
OmhleCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAg
ICAgICAgICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICoo
X193cyArIDEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAg
ICAgX19wID0gX19hZGRfZ3JvdXBpbmcoX193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2Vw
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3Vw
aW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwg
X193cyArIF9fbGVuKTsKICAgICAgICAgIF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAg
X193cyA9IF9fd3MyOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8s
IF9fZmlsbCwgX193cywgX19sZW4pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6CiAgICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0No
YXJUIF9fZmlsbCwgY29uc3QgX0NoYXJUKiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikg
Y29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5
cGU7CgogICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBf
X3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy
VCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKiBfX3cpKTsKICAgICAgaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9f
bGVuKSkKICAgICAgICB7CiAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+Ojpf
U19wYWQoX19pbywgX19maWxsLCBfX3dzMiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVu
ID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAg
ICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8
IF9fbGVuOyArK19faiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0
dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRv
X3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9v
bCBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19p
by5mbGFncygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAw
KQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAg
IF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191
dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0g
X19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1
c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5
cGUgX19uYW1lOwogICAgICAgICAgaWYgKF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50
cnVlbmFtZSgpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNl
bmFtZSgpOwogICAgICAgICAgX19zID0gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25h
bWUuY19zdHIoKSwgX19uYW1lLnNpemUoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29u
c3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNo
YXIoKSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ
dGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f
cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9p
bnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9w
dXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl
JiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVy
biBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIK
ICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms
IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8s
IF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ
dGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlw
ZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0
KF9fcywgX19pbywgX19maWxsLCBjaGFyKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFy
VCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywg
Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7
IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJ
dGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg
X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2
b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0g
X19pby5mbGFncygpOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNl
OjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAg
ICAgIF9faW8uZmxhZ3MoX19mbGFncyAmIF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFz
ZTo6c2hvd2Jhc2UpKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29u
dmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAg
ICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQog
ICAgICAgIHsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsK
ICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdf
dHlwZSBfX3N0cjsKICAgICAgX19iZWcgPSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2lu
dGwsIF9faW8sIF9fZXJyLCBfX3N0cik7CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19s
aW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19j
YXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19s
b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193
Y3MgPSBfX3N0ci5jX3N0cigpOwogICAgICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBf
X3N0ci5zaXplKCkgKyAxLCBjaGFyKCksIF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2Nz
LCBfX3VuaXRzLCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0
ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUg
X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNv
bnN0CiAgICB7CgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5
X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2Zh
bHNlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxv
Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19t
cHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlf
ZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29u
c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpOwoKICAgICAgY29uc3QgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21w
dC5uZWdfZm9ybWF0KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19z
aWduID1fX2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25z
dCBzdHJpbmdfdHlwZSBfX25lZ19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRp
dmVfc2lnbigpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVj
aW1hbF9wb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5k
ZWNpbWFsX3BvaW50KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9f
bXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBfX21wZi50aG91c2FuZHNfc2VwKCk7CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9
IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0
cmluZ190eXBlIF9fc2lnbjsKCiAgICAgIHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGlu
dCBfX3NlcF9wb3MgPSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBi
b29sIF9fdGVzdGRlY2ZvdW5kID0gZmFsc2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3Vu
aXRzOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9m
ID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7
CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190
ZXN0dmFsaWQ7ICsrX19pKQogICAgICAgIHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRp
Y19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9s
OgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNl
CiAgICAgICAgICAgICAgICAgICAgICB8fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAg
ICAgICAgICAgICAgICAgICAgICB8fCAoKHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkg
IT0gbW9uZXlfYmFzZTo6bm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0g
MikpCiAgICAgICAgICAgICAgICAgICAgewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBf
X21wZi5jdXJyX3N5bWJvbCgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVu
ID0gX19zeW1ib2wuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9
IDA7CiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBfX2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9f
YykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xl
biAmJiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWdu
OgoKICAgICAgICAgICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24u
c2l6ZSgpKQogICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2Mg
PT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChfX2MgPT0gX19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9f
cG9zX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAg
ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoX19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVn
X3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19z
aWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUg
KF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhj
dHlwZV9iYXNlOjpkaWdpdCwgX19jKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChf
X2MgPT0gX19kICYmICFfX3Rlc3RkZWNmb3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBfX2MgPT0gX19zZXApKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgIGlmIChfX2MgPT0gX19kKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19z
ZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQog
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9f
Z3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4o
X19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5
X2Jhc2U6OnNwYWNlOgogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAg
ICAgICAgICAgICAgICAgaWYgKF9faSAhPSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChf
X2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0
eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19f
YmVnKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
fQoKCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXpl
X3R5cGUgX19sZW4gPSBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7
CiAgICAgICAgICBmb3IgKDsgX19jICE9IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAg
ICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAg
ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4p
CiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxl
IChfX3RlbXBfdW5pdHNbMF0gPT0gX19jdHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91
bml0cy5lcmFzZShfX3RlbXBfdW5pdHMuYmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUo
KSAmJiBfX3NpZ24gPT0gX19uZWdfc2lnbikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9f
dGVtcF91bml0cy5iZWdpbigpLCBfX2N0eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dy
b3VwaW5nLnNpemUoKSAmJiBfX2dyb3VwaW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAg
ICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAg
ICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2Mg
PT0gX19lb2YpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAo
IV9fdGVzdHZhbGlkIHx8ICFfX3RlbXBfdW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjpmYWlsYml0OwogICAgICBlbHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9f
dW5pdHMpOwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hh
clQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9f
dW5pdHMpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j
KCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgIGNoYXIq
IF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsK
ICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsICIlLjAx
TGYiLCBfX3VuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9j
YWxlKTsKCiAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgewogICAgICAgICAg
X19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIq
PihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgX19sZW4gPSBfX2NvbnZl
cnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgIH0KCgoKCgoKCiAg
ICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3NpemUpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBf
X2NzICsgX19sZW4sIF9fd3MpOwogICAgICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAg
ICAgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0
cyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
CiAgICBfT3V0SXRlcgogICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1
dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBf
X2ZpbGwsCiAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBl
OwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2Fs
ZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0g
c3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9u
ZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1
bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1
ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9f
bW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAg
ICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpOwoKCgogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0
YSgpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXpl
KCk7CiAgICAgIG1vbmV5X2Jhc2U6OnBhdHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3Np
Z247CiAgICAgIGlmICgqX19iZWcgIT0gX19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAg
ICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3Jt
YXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDog
X19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAg
ICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3Jt
YXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDog
X19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAg
ICAgX19lbmQgPSBfX2N0eXBlLnNjYW5fbm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19l
bmQpOwogICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3Ry
aW5nX3R5cGUgX19yZXM7CiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAg
Y29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1
cnJfc3ltYm9sKCk7CgoKICAgICAgICAgIGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21w
dC5mcmFjX2RpZ2l0cygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19t
cGYuZnJhY19kaWdpdHMoKTsKICAgICAgICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2lt
YWxfcG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBf
X21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0g
X19mcmFjKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3Ry
aW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1
ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAt
PSBfX2ZyYWM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgewoKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBf
X2VuZCk7CiAgICAgICAgICAgICAgICAgIGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAt
IF9fYmVnKTsKICAgICAgICAgICAgICAgICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lk
ZW4oJzAnKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigp
LCBfX3BhZGRlYywgX196ZXJvKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192
YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19l
bmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9
IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9f
Z3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNh
bmRzX3NlcCgpOwogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3Vw
aW5nLmNfc3RyKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2Jl
ZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0g
KF9fZW5kIC0gX19iZWcpICogMjsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShz
aXplb2YoX0NoYXJUKSAqIF9fbikpOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5k
ID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7
CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9f
d3MyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICBfX3ZhbHVlLmluc2VydCgwLCBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAg
ICAgfQoKCiAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYg
aW9zX2Jhc2U6OmFkanVzdGZpZWxkOwogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1
ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3Mo
KSAmIGlvc19iYXNlOjpzaG93YmFzZSkgPyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAg
Ym9vbCBfX3Rlc3RpcGFkID0gX19mID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9f
d2lkdGg7CgoKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4o
X19wLmZpZWxkW19faV0pOwogICAgICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAg
ICAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAg
ICAgICAgICAgICAgIF9fcmVzICs9IF9fc3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAg
ICAgaWYgKF9fc2lnbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWdu
WzBdOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlf
YmFzZTo6dmFsdWU6CiAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToK
CgoKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAg
X19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihf
X2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9u
ZXlfYmFzZTo6bm9uZToKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAg
ICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwp
OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQoKCiAgICAgICAgICBpZiAoX19zaWduLnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9
IHN0cmluZ190eXBlKF9fc2lnbi5iZWdpbigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAg
ICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAg
ICAgICAgICAgICAgICBfX3Jlcy5hcHBlbmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAg
ICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5
cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lk
dGg7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19q
IDwgX19sZW47ICsrX19qLCArK19fcykKICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAg
ICAgICAgfQogICAgICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9i
YXNlOjpkYXRlb3JkZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3Jk
ZXIoKSBjb25zdAogICAgeyByZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dl
dDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUm
IF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAg
IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4g
Y29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAg
ICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpOwogICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5n
dGgoX19mb3JtYXQpOwoKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQg
JiYgX19pIDwgX19sZW4gJiYgIV9fZXJyOyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFy
IF9fYyA9IF9fZm9ybWF0W19faV07CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAg
Y2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAg
ICBpZiAoX19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX21vZCA9IF9fYzsKICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRb
KytfX2ldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAg
ICAgICAgICAgICBfQ2hhclQgX193Y3NbMTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6Cgog
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAg
ICAgICAgIF9fdHAuX01fZGF5c19hYmJyZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAg
ICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwg
NywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9k
YXlzKF9fZGF5czIpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9f
ZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
IGNhc2UgJ2gnOgogICAgICAgICAgICAgICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01f
bW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJh
Y3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICBjYXNlICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXJfdHlwZSogX19tb250aHMyWzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMo
X19tb250aHMyKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2Vu
ZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
IGNhc2UgJ2MnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwog
ICAgICAgICAgICAgICAgICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAg
ICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0p
OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAg
ICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5
LCAxLCAzMSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19l
cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoK
ICAgICAgICAgICAgICAgICAgX19jcyA9ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9f
Y3R5cGUud2lkZW4oX19jcywgX19jcyArIDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01f
ZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAg
ICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAg
ICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAg
ICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVt
IC0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoK
CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1f
bWluLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwg
X19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24n
OgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4n
KQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAg
IF9fY3MgPSAiJUg6JU0iOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9f
Y3MgKyA2LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgJ1MnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcs
IF9fZW5kLCBfX3RtLT50bV9zZWMsIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSAndCc6CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygq
X19iZWcsIDApID09ICdcdCcpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAg
ICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlw
ZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRy
YWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXJfdHlwZSogX19kYXRlc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zv
cm1hdHMoX19kYXRlcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19kYXRlc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgY2FzZSAnWCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
IF9fdGltZXNbMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGlt
ZXMpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5k
LCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdGltZXNbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
IGNhc2UgJ3knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5k
LCBfX3RtLT50bV95ZWFyLCAwLCA5OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIGNhc2UgJ1knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9f
ZW5kLCBfX21lbSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCksIDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAg
ICAgICAgICBfX3RtLT50bV95ZWFyID0gX19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9f
Y3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBwZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgaW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAg
X01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAg
ICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIV9fZXJyICYmIF9fdG1wID09IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAo
X19jID09IF9fY3R5cGUud2lkZW4oJy0nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBfX2MgPT0gX19jdHlwZS53aWRlbignKycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190
bXAsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0o
X19iZWcsIF9fZW5kLCBfX3RtcCwgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAg
ICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICB7CgogICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpf
X2JlZywgMCkpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5k
LCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgs
IHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9f
Y3R5cGUsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0
CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAg
IGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwog
ICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYm
IF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAg
X19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytf
X2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4p
CiAgICAgICAgewogICAgICAgICAgaW50IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkp
OwogICAgICAgICAgaWYgKF9fbWluIDw9IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAg
ICAgICAgICAgX19tZW1iZXIgPSBfX3ZhbHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBf
X3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZh
bGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50
JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBz
aXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3Ry
YWl0c190eXBlOwogICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVp
bHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkgKiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25t
YXRjaGVzID0gMDsKICAgICAgc2l6ZV90IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxp
ZCA9IHRydWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBl
IF9fYyA9ICpfX2JlZzsKCiAgICAgIGZvciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRl
eGxlbjsgKytfX2kxKQogICAgICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAg
ICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNo
ZXMgPiAxKQogICAgICAgIHsKCiAgICAgICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAg
ICAgIGZvciAoc2l6ZV90IF9faTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAg
ICAgICAgICBfX21pbmxlbiA9IHN0ZDo6bWluKF9fbWlubGVuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWVzW19fbWF0Y2hlc1tfX2ky
XV0pKTsKCiAgICAgICAgICBpZiAoX19wb3MgPCBfX21pbmxlbiAmJiBfX2JlZyAhPSBfX2VuZCkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0g
KigrK19fYmVnKTsKICAgICAgICAgICAgICBmb3IgKHNpemVfdCBfX2kzID0gMDsgX19pMyA8IF9f
bm1hdGNoZXM7ICsrX19pMykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19u
YW1lID0gX19uYW1lc1tfX21hdGNoZXNbX19pM11dOwogICAgICAgICAgICAgICAgICBpZiAoX19u
YW1lW19fcG9zXSAhPSBfX2MpCiAgICAgICAgICAgICAgICAgICAgX19tYXRjaGVzW19faTNdID0g
X19tYXRjaGVzWy0tX19ubWF0Y2hlc107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKF9f
bm1hdGNoZXMgPT0gMSkKICAgICAgICB7CgogICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21h
dGNoZXNbMF1dOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICB3aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAh
PSBfX2VuZCAmJiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgKytfX2JlZywg
KytfX3BvczsKCiAgICAgICAgICBpZiAoX19sZW4gPT0gX19wb3MpCiAgICAgICAgICAgIF9fbWVt
YmVyID0gX19tYXRjaGVzWzBdOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxp
ZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFs
c2U7CiAgICAgIGlmICghX190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh
aWxiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0
X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QK
ICAgIHsKICAgICAgX0NoYXJUIF9fd2NzWzNdOwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiVY
IjsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJU
PiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAg
ICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3Rf
dmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAg
IGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0Owog
ICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46
OgogICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSog
X190bSkgY29uc3QKICAgIHsKICAgICAgX0NoYXJUIF9fd2NzWzNdOwogICAgICBjb25zdCBjaGFy
KiBfX2NzID0gIiV4IjsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg
Y3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyAzLCBfX3djcyk7CiAgICAg
IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLCBf
X3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3Ry
YWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0
bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8
X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2Rh
eXNbN107CiAgICAgIF9fdHAuX01fZGF5c19hYmJyZXZpYXRlZChfX2RheXMpOwogICAgICBpbnQg
X190bXB3ZGF5OwogICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcHdkYXks
IF9fZGF5cywgNywgX19lcnIpOwoKCgoKCgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAg
ICAgICAgICBzaXplX3QgX19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19kYXlzW19fdG1w
d2RheV0pOwogICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5cyk7CiAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fbmFtZSA9IF9fZGF5c1tfX3RtcHdkYXldOwogICAgICAgICAgaWYgKF9fbmFt
ZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNp
emVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAg
IHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAg
ICAgICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywg
KytfX3BvczsKICAgICAgICAgICAgICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYg
KCFfX2VycikKICAgICAgICAgICAgX190bS0+dG1fd2RheSA9IF9fdG1wd2RheTsKICAgICAgICB9
CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9m
Yml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJh
aXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRs
b2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxf
X3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9u
dGhzWzEyXTsKICAgICAgX190cC5fTV9tb250aHNfYWJicmV2aWF0ZWQoX19tb250aHMpOwogICAg
ICBpbnQgX190bXBtb247CiAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1w
bW9uLCBfX21vbnRocywgMTIsIF9fZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiAgICAg
ICAgewogICAgICAgICAgc2l6ZV90IF9fcG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbW9u
dGhzW19fdG1wbW9uXSk7CiAgICAgICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRocyk7CiAgICAg
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZSA9IF9fbW9udGhzW19fdG1wbW9uXTsKICAgICAg
ICAgIGlmIChfX25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAgICAg
ICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsK
ICAgICAgICAgICAgICB3aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAogICAg
ICAgICAgICAgICAgICAgICAmJiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAg
ICAgICsrX19iZWcsICsrX19wb3M7CiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQog
ICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fdG1wbW9u
OwogICAgICAgIH0KCiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBp
b3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0
PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0g
X19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2Jl
ZzsKICAgICAgc2l6ZV90IF9faSA9IDA7CiAgICAgIHN0cmluZyBfX2RpZ2l0czsKICAgICAgd2hp
bGUgKF9faSA8IDQgJiYgX19iZWcgIT0gX19lbmQgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpk
aWdpdCwgX19jKSkKICAgICAgICB7CiAgICAgICAgICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJv
dyhfX2MsIDApOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICsrX19pOwog
ICAgICAgIH0KICAgICAgaWYgKF9faSA9PSAyIHx8IF9faSA9PSA0KQogICAgICAgIHsKICAgICAg
ICAgIGxvbmcgX19sOwogICAgICAgICAgX19jb252ZXJ0X3RvX3YoX19kaWdpdHMuY19zdHIoKSwg
X19sLCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFz
ZTo6ZmFpbGJpdCkgJiYgX19sIDw9IDIxNDc0ODM2NDcpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBfX2wgPSBfX2kgPT0gMiA/IF9fbCA6IF9fbCAtIDE5MDA7CiAgICAgICAgICAgICAgX190
bS0+dG1feWVhciA9IHN0YXRpY19jYXN0PGludD4oX19sKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBp
ZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAg
ICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+
OjoKICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25z
dCB0bSogX190bSwKICAgICAgICBjb25zdCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9f
ZW5kKSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg
ICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYyk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAg
ICBjaGFyIF9fYyA9IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICArK19fYmVn
OwogICAgICAgICAgaWYgKF9fYyA9PSAnJScpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj
aGFyIF9fZm9ybWF0OwogICAgICAgICAgICAgIGNoYXIgX19tb2QgPSAwOwogICAgICAgICAgICAg
IHNpemVfdCBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgX19jID0gX19jdHlwZS5uYXJyb3coKl9f
YmVnLCAwKTsKICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgIGlmIChfX2MgPT0g
J0UnIHx8IF9fYyA9PSAnTycpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f
bW9kID0gX19jOwogICAgICAgICAgICAgICAgICBfX2Zvcm1hdCA9IF9fY3R5cGUubmFycm93KCpf
X2JlZywgMCk7CiAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19mb3JtYXQgPSBfX2M7CiAgICAgICAg
ICAgICAgX19zID0gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgY2hhcl90eXBlKCksIF9fdG0sIF9f
Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21vZCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX3MgPSBf
X2M7CiAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAg
ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRt
KiBfX3RtLAogICAgICAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0CiAgICB7
CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4g
Y29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAg
X190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxf
Q2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25zdCBzaXplX3QgX19tYXhsZW4gPSA2NDsKICAg
ICAgY2hhcl90eXBlKiBfX3JlcyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19i
dWlsdGluX2FsbG9jYShzaXplb2YoY2hhcl90eXBlKSAqIF9fbWF4bGVuKSk7CgoKCgoKCiAgICAg
IGNoYXJfdHlwZSBfX2ZtdFs0XTsKICAgICAgX19mbXRbMF0gPSBfX2N0eXBlLndpZGVuKCclJyk7
CiAgICAgIGlmICghX19tb2QpCiAgICAgICAgewogICAgICAgICAgX19mbXRbMV0gPSBfX2Zvcm1h
dDsKICAgICAgICAgIF9fZm10WzJdID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQogICAgICBlbHNl
CiAgICAgICAgewogICAgICAgICAgX19mbXRbMV0gPSBfX21vZDsKICAgICAgICAgIF9fZm10WzJd
ID0gX19mb3JtYXQ7CiAgICAgICAgICBfX2ZtdFszXSA9IGNoYXJfdHlwZSgpOwogICAgICAgIH0K
CiAgICAgIF9fdHAuX01fcHV0KF9fcmVzLCBfX21heGxlbiwgX19mbXQsIF9fdG0pOwoKCiAgICAg
IHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPGNoYXJfdHlwZT46Omxlbmd0aChfX3Jlcyk7CiAg
ICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbGVuOyArK19faSwgKytfX3MpCiAgICAg
ICAgKl9fcyA9IF9fcmVzW19faV07CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW50CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX2NvbXBh
cmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJUKikgY29uc3QKICAgIHsgcmV0dXJuIDA7IH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHNpemVfdAogICAgY29sbGF0ZTxfQ2hh
clQ+OjpfTV90cmFuc2Zvcm0oX0NoYXJUKiwgY29uc3QgX0NoYXJUKiwgc2l6ZV90KSBjb25zdAog
ICAgeyByZXR1cm4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAg
IGNvbGxhdGU8X0NoYXJUPjo6CiAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv
bnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNv
bnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9f
b25lKF9fbG8xLCBfX2hpMSk7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fdHdvKF9fbG8yLCBf
X2hpMik7CiAgICAgIHJldHVybiBfTV9jb21wYXJlKF9fb25lLmNfc3RyKCksIF9fdHdvLmNfc3Ry
KCkpOwogICAgfQoKIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIGNvbGxh
dGU8X0NoYXJUPjo6c3RyaW5nX3R5cGUKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBkb190cmFu
c2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICB7
CiAgICAgIHNpemVfdCBfX2xlbiA9IChfX2hpIC0gX19sbykgKiAyOwoKICAgICAgX0NoYXJUKiBf
X2MgPQogICAgICAgIHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m
KF9DaGFyVCkgKiBfX2xlbikpOwogICAgICBzaXplX3QgX19yZXMgPSBfTV90cmFuc2Zvcm0oX19j
LCBfX2xvLCBfX2xlbik7CgogICAgICBpZiAoX19yZXMgPj0gX19sZW4pCiAgICAgICAgewogICAg
ICAgICAgX19jID0KICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2Fs
bG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3JlcyArIDEpKSk7CiAgICAgICAgICBfTV90cmFuc2Zv
cm0oX19jLCBfX2xvLCBfX3JlcyArIDEpOwogICAgICAgIH0KICAgICAgcmV0dXJuIHN0cmluZ190
eXBlKF9fYyk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9uZwogICAg
Y29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBf
Q2hhclQqIF9faGkpIGNvbnN0CiAgICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgX192YWwgPSAwOwog
ICAgICBmb3IgKDsgX19sbyA8IF9faGk7ICsrX19sbykKICAgICAgICBfX3ZhbCA9ICpfX2xvICsg
KChfX3ZhbCA8PCA3KSB8CiAgICAgICAgICAgICAgICAgICAgICAgKF9fdmFsID4+IChudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBsb25nPjo6ZGlnaXRzIC0gNykpKTsKICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmc+KF9fdmFsKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2Pgog
ICAgdm9pZAogICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19pbiwgX1R2JiBfX291dCwg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgICAgICAgY29uc3QgX19jX2xv
Y2FsZSYgX19jbG9jLCBpbnQgX19iYXNlID0gMTApOwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsIGNvbnN0IGludCBf
X3NpemUsIGNvbnN0IGNoYXIqIF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfVHYgX192LCBj
b25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0xKTsKIyAxOTkwICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQKICAgIHsKICAgICAg
c3RhdGljIHZvaWQKICAgICAgX1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBf
Q2hhclQqIF9fbmV3cywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19vbGRzLCBjb25zdCBz
dHJlYW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxl
biwgY29uc3QgYm9vbCBfX251bSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+Ojpf
U19wYWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29s
ZGxlbiwgY29uc3QgYm9vbCBfX251bSkKICAgIHsKICAgICAgc2l6ZV90IF9fcGxlbiA9IHN0YXRp
Y19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIF9DaGFyVCogX19wYWRz
ID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq
IF9fcGxlbikpOwogICAgICBfVHJhaXRzOjphc3NpZ24oX19wYWRzLCBfX3BsZW4sIF9fZmlsbCk7
CgogICAgICBfQ2hhclQqIF9fYmVnOwogICAgICBfQ2hhclQqIF9fZW5kOwogICAgICBzaXplX3Qg
X19tb2QgPSAwOwogICAgICBzaXplX3QgX19iZWdsZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFn
cyBfX2FkanVzdCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAg
IGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19i
ZWcgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9f
b2xkbGVuOwogICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlm
IChfX2FkanVzdCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19udW0pCiAgICAgICAgewoKCgog
ICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IGN0
eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsK
ICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAg
ICAgICAgY29uc3QgX0NoYXJUIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgICAg
IGJvb2wgX190ZXN0c2lnbiA9IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19taW51cykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19wbHVzKTsK
CiAgICAgICAgICBib29sIF9fdGVzdGhleCA9IF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJzAn
KSwgX19vbGRzWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX1RyYWl0czo6ZXEo
X19jdHlwZS53aWRlbigneCcpLCBfX29sZHNbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBfVHJhaXRzOjplcShfX2N0eXBlLndpZGVuKCdYJyksIF9fb2xkc1sxXSkpOwogICAg
ICAgICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1sw
XSA9IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07CiAgICAg
ICAgICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX25ld3MgKz0gMjsKICAgICAgICAg
ICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAg
ICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzICsgX19tb2QpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RzaWduKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgX1RyYWl0czo6ZXEoKF9fbmV3c1swXSA9IF9fb2xkc1swXSksIF9fcGx1
cykgPyBfX3BsdXMgOiBfX21pbnVzOwogICAgICAgICAgICAgICsrX19tb2Q7CiAgICAgICAgICAg
ICAgKytfX25ld3M7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAg
X19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFy
VCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg
ICAgICB7CgogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVn
bGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihf
X29sZHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAg
ICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAg
ICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICB9CiAgICAg
IF9UcmFpdHM6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAgICBfVHJhaXRzOjpj
b3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
X25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOwogICAgfQojIDIwODUgIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGJvb2wKICAgIF9fdmVyaWZ5X2dyb3VwaW5nKGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+JiBfX2dyb3VwaW5nLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5n
PF9DaGFyVD4mIF9fZ3JvdXBpbmdfdG1wKQogICAgewogICAgICBpbnQgX19pID0gMDsKICAgICAg
aW50IF9faiA9IDA7CiAgICAgIGNvbnN0IGludCBfX2xlbiA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwog
ICAgICBjb25zdCBpbnQgX19uID0gX19ncm91cGluZ190bXAuc2l6ZSgpOwogICAgICBib29sIF9f
dGVzdCA9IHRydWU7CgoKCgogICAgICB3aGlsZSAoX190ZXN0ICYmIF9faSA8IF9fbiAtIDEpCiAg
ICAgICAgZm9yIChfX2ogPSAwOyBfX3Rlc3QgJiYgX19qIDwgX19sZW4gJiYgX19pIDwgX19uIC0g
MTsgKytfX2osKytfX2kpCiAgICAgICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID09IF9f
Z3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwoKCiAgICAgIF9faiA9PSBfX2xlbiA/IF9faiA9
IDAgOiBfX2o7CiAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPj0gX19ncm91cGluZ190
bXBbX19uIC0gX19pIC0gMV07CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0NoYXJUKgogICAgX19hZGRfZ3JvdXBpbmcoX0No
YXJUKiBfX3MsIF9DaGFyVCBfX3NlcCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9f
Z2JlZywgY29uc3QgY2hhciogX19nZW5kLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU
KiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAt
IF9fZmlyc3QgPiAqX19nYmVnKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9fYWRkX2dyb3Vw
aW5nKF9fcywgX19zZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19nYmVnICsg
MSA9PSBfX2dlbmQgPyBfX2diZWcgOiBfX2diZWcgKyAxKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZ2VuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ2JlZyk7CiAgICAgICAgICBf
X2ZpcnN0ID0gX19sYXN0IC0gKl9fZ2JlZzsKICAgICAgICAgICpfX3MrKyA9IF9fc2VwOwogICAg
ICAgIH0KICAgICAgZG8KICAgICAgICAqX19zKysgPSAqX19maXJzdCsrOwogICAgICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QpOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1v
bmV5cHVuY3RfYnluYW1lPGNoYXIsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u
ZXlwdW5jdF9ieW5hbWU8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5
X2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgbnVtcHVuY3RfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0
PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PGNoYXI+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
dGltZV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTxj
aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgbWVzc2FnZXM8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFt
ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTxjaGFyPjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z
dCBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDxj
aGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgY29uc3QgY29sbGF0ZTxjaGFyPiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPGNoYXI+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8Y2hh
cj4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9w
dXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBu
dW1fZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIHRydWU+Jgog
ICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYKICAgIHVz
ZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25l
eV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z
dCBtb25leV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4m
CiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1l
X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0
IHRpbWVfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mCiAgICB1
c2VfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBj
aGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Ym9vbAogICAgaGFzX2ZhY2V0PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVt
X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBs
b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlf
cHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog
ICAgaGFzX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1l
X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxv
Y2FsZSYpOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFs
c2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCBmYWxzZT47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIHRydWU+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIG1vbmV5X3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bnVtcHVuY3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFt
ZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDx3Y2hhcl90PjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgX190aW1lcHVuY3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVf
cHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8d2No
YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PHdjaGFyX3Q+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIG1lc3NhZ2VzPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNz
YWdlc19ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFt
ZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8d2NoYXJf
dCwgY2hhciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTx3Y2hh
cl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8d2NoYXJfdD47Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRl
X3Q+JgogICAgdXNlX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGxv
Y2FsZSBjb25zdCYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8d2NoYXJf
dD4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1bmN0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0
PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgY29uc3QgbnVtX3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fcHV0PHdjaGFyX3Q+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dldDx3
Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiYK
ICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4m
CiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8d2NoYXJfdD4mCiAgICB1
c2VfZmFjZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1vbmV5
X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv
bnN0IF9fdGltZXB1bmN0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFy
X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9w
dXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2Nh
bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDx3Y2hhcl90PiYKICAg
IHVzZV9mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2VzPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1lc3Nh
Z2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s
CiAgICBoYXNfZmFjZXQ8Y3R5cGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBt
YnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog
ICAgaGFzX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVt
X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv
b2wKICAgIGhhc19mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdD4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj
ZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxfX3RpbWVwdW5j
dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDx0aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxt
ZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKfQojIDQ3ICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2xvY2FsZSIgMiAzCiMgMzggIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQv
Yml0cy9vc3RyZWFtLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4m
IF9fb3MpCiAgICA6IF9NX29rKF9fb3MuZ29vZCgpKSwgX01fb3MoX19vcykKICAgIHsKCiAgICAg
IGlmIChfTV9vayAmJiBfX29zLnRpZSgpKQogICAgICAgIF9fb3MudGllKCktPmZsdXNoKCk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVh
bV90eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190
eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46Om9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3NiaW4pCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIV9fY29weV9zdHJl
YW1idWZzKCp0aGlzLCBfX3NiaW4sIHRoaXMtPnJkYnVmKCkpKQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3NiaW4pCiAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAg
ICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxs
KCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcg
X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJf
dHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdz
IF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAg
ICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoKF9f
Zm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6OmhleCkpCiAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX2wgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19i
ID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQo
KTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbikKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
Zm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhp
cywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w
ZXJhdG9yPDwobG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAg
IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFz
ZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgaWYgKChfX2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19i
YXNlOjpoZXgpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBfX2w7CiAgICAgICAgICAgICAgICAgICAgICBfX2wgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2Ig
PSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgp
OwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0
KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywg
KnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjpvcGVyYXRvcjw8KGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAg
ICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19u
KS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBkb3VibGUg
X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0
LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fbikKICAgIHsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywg
dGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNo
YXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1
dGMoX19jKTsKICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19wdXQsIHRy
YWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNv
bnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgc3RyZWFtc2l6
ZSBfX3B1dCA9IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKTsKICAgICAgICAgIGlmICgg
X19wdXQgIT0gX19uKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpmbHVzaCgpCiAgICB7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVmKCktPnB1YnN5bmMoKSA9
PSAtMSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVs
bHAoKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgaWYg
KCF0aGlzLT5mYWlsKCkpCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2Zm
KDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBpZiAoIXRoaXMtPmZh
aWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYo
KS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2Vy
ciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAg
IHsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlw
ZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3V0
KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2Mp
CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0
cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihf
X291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAg
ICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5f
YWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fdyArIDEpKSk7CiAgICAgICAgICAgICAgX19wYWRz
WzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAg
ICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
X19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFk
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2Ms
IF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAg
ICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVt
cGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBf
X2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29z
dHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo
X19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAg
ICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs
b2NhKF9fdyArIDEpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAg
ICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxjaGFyLCBfVHJhaXRzPjo6
X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDAp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiBfX291dDsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0No
YXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5
IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291
dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0No
YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAg
ICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjps
ZW5ndGgoX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19v
dXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAg
ICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAg
ICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CgoKCiAgICAgIHR5cGVk
ZWYgY2hhcl90cmFpdHM8Y2hhcj4gX190cmFpdHNfdHlwZTsKCiAgICAgIHR5cGVuYW1lIF9fb3N0
cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3Mp
CiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fY2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0
aChfX3MpOwogICAgICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19i
dWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX2NsZW4gKyAxKSkpOwogICAgICAgICAg
Zm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19jbGVuOyArK19faSkKICAgICAgICAgICAgX193
c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19faV0pOwogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9
IF9fd3M7CgogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1z
aXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVuKTsKICAgICAgICAgICAg
ICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBf
X3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hh
clQpICogX193KSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9f
b3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fd3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAg
ICAgICAgX19zdHIgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fc3RyLCBfX2xlbik7CiAg
ICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291
dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoK
CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj
b25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNl
bnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0g
X19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxj
aGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cpKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f
bGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwoKICAg
ICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwg
X19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsK
ICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgo
MCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19vdXQsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3Ry
ZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zID0gX19zdHIuZGF0YSgpOwogICAgICAgICAg
c3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgX0NoYXJUKiBfX3BhZHMg
PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog
X193KSk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6
ZT4oX19zdHIuc2l6ZSgpKTsKCgoKICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwg
X19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgIF9fcyA9IF9f
cGFkczsKICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgfQogICAgICAgICAg
c3RyZWFtc2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4pOwogICAg
ICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMgIT0gX19sZW4pCiAgICAg
ICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICAg
IHJldHVybiBfX291dDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29z
dHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYpOwog
IGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxh
dGUgb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBv
cGVyYXRvcjw8KG9zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3Bl
cmF0b3I8PChvc3RyZWFtJiwgdW5zaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJl
YW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUg
b3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY2hhciopOwogIGV4dGVybiB0ZW1w
bGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCB1bnNpZ25lZCBjaGFyKik7
CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNp
Z25lZCBjaGFyKik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTx3Y2hh
cl90PjsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZGwod29zdHJlYW0mKTsKICBleHRl
cm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUg
d29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBv
cGVyYXRvcjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFt
JiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFt
JiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiB0ZW1wbGF0
ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKCn0KIyA1MTYg
Ii90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvb3N0cmVhbSIgMiAzCiMgNDYgIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvaW9zdHJlYW0iIDIgMwojIDEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8z
LjQvaXN0cmVhbSIgMSAzCiMgNDMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaXN0cmVhbSIg
MwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNTcgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaXN0
cmVhbSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBf
VHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9U
cmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBu
dW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CiAgICAgIHR5
cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCgoKCgoK
ICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7CgogICAgcHVibGljOgojIDk1ICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2lzdHJlYW0iIDMKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0
cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdChf
X3NiKTsKICAgICAgICBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOwogICAgICB9CgoKCgoKCiAg
ICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lzdHJlYW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0
cmVhbXNpemUoMCk7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBz
ZW50cnk7CiMgMTI1ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2lzdHJlYW0iIDMKICAgICAg
X19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZiko
X19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+
PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsKIyAxNjMg
Ii90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaXN0cmVhbSIgMwogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7CiMgMjI0ICIvdG1wL2luc3QvaW5jbHVkZS9j
KysvMy40L2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o
X19zdHJlYW1idWZfdHlwZSogX19zYik7CiMgMjM0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40
L2lzdHJlYW0iIDMKICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CiMgMjY2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysv
My40L2lzdHJlYW0iIDMKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KCk7CiMgMjgwICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IGdldChjaGFyX3R5cGUmIF9fYyk7CiMgMzA3ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2lz
dHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywg
c3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKIyAzMTggIi90bXAvaW5zdC9pbmNs
dWRlL2MrKy8zLjQvaXN0cmVhbSIgMwogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAg
IGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMt
PmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CiMgMzQxICIvdG1wL2luc3QvaW5j
bHVkZS9jKysvMy40L2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChf
X3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CiMgMzUxICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2lzdHJlYW0iIDMKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBl
JgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikKICAgICAgeyByZXR1cm4gdGhpcy0+
Z2V0KF9fc2IsIHRoaXMtPndpZGVuKCdcbicpKTsgfQojIDM4MCAiL3RtcC9pbnN0L2luY2x1ZGUv
YysrLzMuNC9pc3RyZWFtIiAzCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwojIDM5MSAi
L3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pc3RyZWFtIiAzCiAgICAgIGlubGluZSBfX2lzdHJl
YW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsg
fQojIDQxMCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pc3RyZWFtIiAzCiAgICAgIF9faXN0
cmVhbV90eXBlJgogICAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2Rl
bGltID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKIyA0MjEgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8z
LjQvaXN0cmVhbSIgMwogICAgICBpbnRfdHlwZQogICAgICBwZWVrKCk7CiMgNDM5ICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKIyA0NTggIi90bXAvaW5zdC9p
bmNsdWRlL2MrKy8zLjQvaXN0cmVhbSIgMwogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21l
KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CiMgNDc4ICIvdG1wL2luc3QvaW5jbHVk
ZS9jKysvMy40L2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHB1dGJhY2so
Y2hhcl90eXBlIF9fYyk7CiMgNDkzICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2lzdHJlYW0i
IDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHVuZ2V0KCk7CiMgNTE0ICIvdG1wL2luc3Qv
aW5jbHVkZS9jKysvMy40L2lzdHJlYW0iIDMKICAgICAgaW50CiAgICAgIHN5bmMoKTsKIyA1Mjgg
Ii90bXAvaW5zdC9pbmNsdWRlL2MrKy8zLjQvaXN0cmVhbSIgMwogICAgICBwb3NfdHlwZQogICAg
ICB0ZWxsZygpOwojIDU0NiAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pc3RyZWFtIiAzCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhwb3NfdHlwZSk7CiMgNTY1ICIvdG1wL2lu
c3QvaW5jbHVkZS9jKysvMy40L2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7CgogICAgfTsKIyA1ODEgIi90bXAv
aW5zdC9pbmNsdWRlL2MrKy8zLjQvaXN0cmVhbSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh
aXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
X19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5
cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry
YWl0czo6aW50X3R5cGUgX19pbnRfdHlwZTsKIyA2MTMgIi90bXAvaW5zdC9pbmNsdWRlL2MrKy8z
LjQvaXN0cmVhbSIgMwogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7CiMgNjIzICIv
dG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2lzdHJlYW0iIDMKICAgICAgb3BlcmF0b3IgYm9vbCgp
IHsgcmV0dXJuIF9NX29rOyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07
CiMgNjQyICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2lzdHJlYW0iIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxj
aGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9f
aW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3Mg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+
KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAg
ICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQojIDY4
MyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
aW4sIF9DaGFyVCogX19zKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9U
cmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19p
c3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVy
biAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQojIDcwNSAiL3RtcC9p
bnN0L2luY2x1ZGUvYysrLzMuNC9pc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0KICAgIDogcHVibGlj
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiwKICAgICAgcHVibGljIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKCgogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUg
aW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgoKICAgICAgdHlwZWRlZiBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCgoKCgoKICAgICAg
ZXhwbGljaXQKICAgICAgYmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fc2IpCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBl
KF9fc2IpCiAgICAgIHsgfQoKCgoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0o
KSB7IH0KICAgIH07CiMgNzY0ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2lzdHJlYW0iIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faXMpOwp9CgoKCgoKIyAxICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMv
aXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdG1wL2luc3QvaW5jbHVkZS9jKysvMy40L2JpdHMvaXN0
cmVhbS50Y2MiIDMKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s
IGJvb2wgX19ub3NraXB3cykKICAgIHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsK
ICAgICAgICAgIGlmIChfX2luLnRpZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgp
OwogICAgICAgICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6
c2tpcHdzKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19l
b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog
X19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2It
PnNnZXRjKCk7CgogICAgICAgICAgICAgIGlmIChfX2luLl9NX2NoZWNrX2ZhY2V0KF9faW4uX01f
ZmN0eXBlKSkKICAgICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICAgJiYgX19pbi5fTV9mY3R5cGUtPmlz
KGN0eXBlX2Jhc2U6OnNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpKQogICAgICAgICAgICAgICAg
ICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKCgoKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShp
b3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAoX19p
bi5nb29kKCkpCiAgICAgICAgX01fb2sgPSB0cnVlOwogICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgX01fb2sgPSBmYWxzZTsKICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5
cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYg
KCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlv
c19iYXNlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+
Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4o
c2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf
YmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+
Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShf
X2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19s
aW1pdHM8c2hvcnQ+OjptaW4oKSA8PSBfX2wKICAgICAgICAgICAgICAgICAgICAgICYmIF9fbCA8
PSBudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9f
bDsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6
ZmFpbGJpdDsKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAg
ICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIG9wZXJhdG9yPj4oaW50JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh
c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwog
ICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAg
ICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAg
ICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAg
ICAgJiYgKG51bWVyaWNfbGltaXRzPGludD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAg
ICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKICAgICAgICAgICAg
ICAgIF9fbiA9IF9fbDsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf
X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l
cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl
dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y
Pj4odW5zaWduZWQgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm
YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj
ZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs
ICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBf
X24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdv
b2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAg
ICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p
OwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAg
X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KGZsb2F0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6
Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg
MCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k
Yml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg
ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf
X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAg
ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVt
Z2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0
b3I+Pih2b2lkKiYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
Zm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz
LCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBf
X3Nib3V0KQogICAgewogICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICAg
aWYgKF9fY2VyYikKICAgICAgICAgewogICAgICAgICAgIHRyeQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwogICAgICAgICAgICAgICBpZiAoX19z
Ym91dCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgICAgICAgX194dHJjdCA9
IF9fY29weV9zdHJlYW1idWZzKCp0aGlzLCBfX3NiaW4sIF9fc2JvdXQpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5
cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAg
IHsKICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg
IGludF90eXBlIF9fYyA9IF9fZW9mOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNi
dW1wYygpOwoKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2Ms
IF9fZW9mKSkKICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlw
ZSYgX19jKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
cGU6OmVvZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYo
KS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYnVmdmFsLCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9N
X2djb3VudCA9IDE7CiAgICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFy
X3R5cGUoX19idWZ2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6
ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2dj
b3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
Y29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxp
bSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7
CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAg
ICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAm
JiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBl
KF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAg
ICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAo
dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAg
ICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90
eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRf
dHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAg
ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAg
ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3RoaXNfc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAg
ICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fdGhpc19zYi0+c2dldGMoKTsKICAgICAgICAgICAg
ICBjaGFyX3R5cGUgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKCiAgICAg
ICAgICAgICAgd2hpbGUgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAg
ICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRl
bGltKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f
c2Iuc3B1dGMoX19jMiksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fdGhpc19zYi0+c25leHRj
KCk7CiAgICAgICAgICAgICAgICAgIF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9f
Yyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0
bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQog
ICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRv
X2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g
dHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ig
PSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRj
KCk7CgogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uCiAgICAgICAgICAg
ICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAg
ICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGlt
KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5
cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4
dGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKHRyYWl0c190
eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAg
ICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2Nv
dW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlw
ZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAwKQogICAgICAgIHsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19l
b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog
X19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jOwoKICAgICAg
ICAgICAgICBfX24gPSBzdGQ6Om1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+Ojpt
YXgoKSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbgogICAgICAgICAgICAg
ICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYyA9IF9fc2ItPnNidW1wYygp
LCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50
OwogICAgICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19k
ZWxpbSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAg
ICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAw
OwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5z
Z2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihf
X3MsIF9fbik7CiAgICAgICAgICAgICAgaWYgKF9NX2djb3VudCAhPSBfX24pCiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsK
ICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAg
ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IHRoaXMtPnJkYnVmKCktPmluX2F2YWlsKCk7
CiAgICAgICAgICAgICAgaWYgKF9fbnVtID49IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIF9fbnVtID0gc3RkOjptaW4oX19udW0sIF9fbik7CiAgICAgICAgICAgICAgICAg
IGlmIChfX251bSkKICAgICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1Zigp
LT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNl
CiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4g
X01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90
eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVm
X3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYgogICAg
ICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3B1dGJhY2tj
KF9fYyksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHVuZ2V0KHZvaWQpCiAgICB7CiAg
ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg
ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg
ICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRyYWl0c190eXBlOjplcV9pbnRf
dHlwZShfX3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW50CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQogICAgewogICAgICBpbnQgX19yZXQg
PSAtMTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsK
ICAgICAgICAgICAgICBpZiAoX19zYikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgaWYgKF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lkKQogICAgewogICAg
ICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkp
CiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpj
dXIsIGlvc19iYXNlOjppbik7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz
ZWVrZyhwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgaWYg
KCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRo
aXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAg
IGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgc2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGly
IF9fZGlyKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBpZiAoIXRoaXMtPmZhaWwo
KSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+
cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgaWYgKF9fZXJy
ID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19pbi5nZXQoX19j
KTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVh
bWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90
eXBlOwogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8
X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNpemUgX19leHRyYWN0ZWQgPSAwOwoK
ICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2Up
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CgogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7CiAgICAgICAg
ICAgICAgaWYgKF9fbnVtID09IDApCiAgICAgICAgICAgICAgICBfX251bSA9IG51bWVyaWNfbGlt
aXRzPHN0cmVhbXNpemU+OjptYXgoKTsKCiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBl
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAg
ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAg
ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAg
IGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfX2V4
dHJhY3RlZCA8IF9fbnVtIC0gMQogICAgICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFf
aW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYgIV9fY3R5cGUuaXMo
Y3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAg
ICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAg
ICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCgoKICAgICAgICAgICAgICAq
X19zID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICghX19l
eHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg
IHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICB3cyhiYXNp
Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pbikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f
Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5
cGUgX19pbnRfdHlwZTsKCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9m
YWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICBjb25zdCBfX2ludF90eXBl
IF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBf
X2luLnJkYnVmKCk7CiAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAg
IHdoaWxlICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICYm
IF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgX19jID0gX19zYi0+
c25leHRjKCk7CgogICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQog
ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19p
bjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAg
ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAg
ewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1f
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19p
bnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1i
dWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh
bV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9f
c2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl
OjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2lu
LndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247CiAgICAgICAgICBfX24gPSBfX3cg
PiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoK
ICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBl
X3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9
IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4u
cmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAg
ICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0
czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAmJiAhX19jdHlwZS5p
cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f
c3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRy
YWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAg
ICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lkdGgo
MCk7CiAgICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRz
dGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5
cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw
ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19zaXpl
X3R5cGUgX19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7CiAg
ICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAg
ICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9faW50
X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAg
IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90
eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2Vv
ZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9p
bnRfdHlwZShfX2MsIF9faWRlbGltKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0g
X19uCiAgICAgICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp
CiAgICAgICAgICAgICAgICAgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAg
KytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAg
ICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0p
OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBf
X2VvZikpCiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAg
ICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2lu
LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9Cgog
IHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAg
aW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikKICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwg
X19zdHIsIF9faW4ud2lkZW4oJ1xuJykpOyB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi
YXNpY19pc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiB3cyhpc3RyZWFt
Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIm
KTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciop
OwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25l
ZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYs
IHNpZ25lZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0
cmVhbSYsIHVuc2lnbmVkIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0
b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi
YXNpY19pc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lz
dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0m
LCB3Y2hhcl90Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3Ry
ZWFtJiwgd2NoYXJfdCopOwoKfQojIDc3NCAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pc3Ry
ZWFtIiAyIDMKIyA0NyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pb3N0cmVhbSIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKIyA2MyAiL3RtcC9pbnN0L2luY2x1ZGUvYysrLzMuNC9pb3N0cmVhbSIg
MwogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBjb3V0OwogIGV4dGVybiBv
c3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCgogIGV4dGVybiB3aXN0cmVhbSB3
Y2luOwogIGV4dGVybiB3b3N0cmVhbSB3Y291dDsKICBleHRlcm4gd29zdHJlYW0gd2NlcnI7CiAg
ZXh0ZXJuIHdvc3RyZWFtIHdjbG9nOwoKCgoKICBzdGF0aWMgaW9zX2Jhc2U6OkluaXQgX19pb2lu
aXQ7Cn0KIyAxMCAidGVzdDMuY3BwIiAyCgppbnQgbWFpbigpIHsKICAgICAgICBwIDxpbnQ+Ojph
KCk7Cn07Cg==


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-01-02  0:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-02  0:56 c++/9120: iostream 'forgotten' if included after template definition stefaandr

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