c++/2503: Fatal signal comiling map template using -g on AIX

markg@ans.net markg@ans.net
Fri Apr 6 11:06:00 GMT 2001


>Number:         2503
>Category:       c++
>Synopsis:       Fatal signal comiling map template using -g on AIX
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Fri Apr 06 11:06:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Mark Glemboski
>Release:        powerpc-ibm-aix3.2.5/2.95.3   gcc version 2.95.3 20010315 (release)
>Organization:
>Environment:
OS: AIX 2 3 000040754900
Hardware: powerpc-ibm-aix3.2.5
>Description:
Compiling a map template that has a string as a key
with the -g option causes the error:

g++: Internal compiler error: program as got fatal signal 11
>How-To-Repeat:
Compile this source file 'tm.C':
#include <string>
#include <map>
map <string, int> badMap;

Using the command:
g++ -g -c tm.C -o tm.o
>Fix:
Work arounds:
Compile without using '-g'.
	-or-
Use const char * instead of string
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="tm.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tm.i"

IyAxICJ0bS5DIgojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw
Yy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAx
IDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp
eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAx
IDMKI3ByYWdtYSBpbnRlcmZhY2UKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt
bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2NzdGRkZWYiIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNjEgIi9h
b2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45
NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CnR5cGVkZWYg
bG9uZyB1bnNpZ25lZCBpbnQgc2l6ZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90Owoj
IDMxNyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CiMgNiAiL2FvbG5ldC9wa2cvZ2NjLTIu
OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9jc3RkZGVmIiAyIDMKIyAzNSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGQvc3RyYWl0cy5oIiAxIDMKI3ByYWdtYSBpbnRlcmZhY2UgInN0ZC9zdHJhaXRz
LmgiCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVD4Kc3RydWN0IHN0cmluZ19j
aGFyX3RyYWl0cyB7CiAgdHlwZWRlZiBjaGFyVCBjaGFyX3R5cGU7ICAKICAgCiAgc3RhdGljIHZv
aWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyBjMSA9
IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJf
dHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNv
bnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAhKGMx
ID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBj
aGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNoYXJfdHlw
ZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0gIAogIHN0YXRpYyBib29sIGlzX2RlbChj
aGFyX3R5cGUgYSkgeyByZXR1cm4gMDsgfQogICAKICAKICAgCiAgc3RhdGljIGludCBjb21wYXJl
IChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAg
IHsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglpZiAobmUg
KHMxW2ldLCBzMltpXSkpCgkgIHJldHVybiBsdCAoczFbaV0sIHMyW2ldKSA/IC0xIDogMTsKICAg
ICAgcmV0dXJuIDA7CiAgICB9CiAgICAKICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hh
cl90eXBlKiBzKQogICAgewogICAgICBzaXplX3QgbCA9IDA7CiAgICAgIHdoaWxlIChuZSAoKnMr
KywgZW9zICgpKSkKCSsrbDsKICAgICAgcmV0dXJuIGw7CiAgICB9CiAgc3RhdGljIGNoYXJfdHlw
ZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAg
ICB7CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIHMyW25dKTsKICAgICAgcmV0
dXJuIHMxOwogICAgfQogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNv
bnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBjaGFyX3R5cGUgYVtuXTsK
ICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglhc3NpZ24gKGFb
aV0sIHMyW2ldKTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWFzc2lnbiAoczFbaV0s
IGFbaV0pOwogICAgICByZXR1cm4gczE7CiAgICB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChj
aGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAgICBm
b3IgKDsgbi0tOyApCglhc3NpZ24gKHMxW25dLCBjKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQp9
OwpjbGFzcyBpc3RyZWFtOwpjbGFzcyBvc3RyZWFtOwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1
LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvY2N0eXBlIiAxIDMKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvc3RhbmRhcmRzLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS9z
dGFuZGFyZHMuaCIgMyA0CiMgMjEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDEgMyA0CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIu
OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zeXMv
bGltaXRzLmgiIDEgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDEgMyA0CiMgMSAiL2Fv
bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1
LjMvaW5jbHVkZS9zeXMvbGltaXRzLmgiIDEgMyA0CiMgMjI3ICIvYW9sbmV0L3BrZy9nY2MtMi45
NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N5cy9s
aW1pdHMuaCIgMyA0CiMgMTYwICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMiAzIDQKCWV4dGVybiAg
dW5zaWduZWQgICBpbnQgU0lORklOSVRZOwoJZXh0ZXJuICB1bnNpZ25lZCAgIGludCBfREJMSU5G
WzJdOwoJZXh0ZXJuICB1bnNpZ25lZCAgIGludCBTUU5BTjsKCWV4dGVybiAgdW5zaWduZWQgICBp
bnQgRFFOQU5bMl07CglleHRlcm4gIHVuc2lnbmVkICAgaW50IFNTTkFOOwoJZXh0ZXJuICB1bnNp
Z25lZCAgIGludCBEU05BTlsyXTsKdHlwZWRlZgl1bnNpZ25lZCBzaG9ydCBmcHJuZF90OwpmcHJu
ZF90IGZwX3JlYWRfcm5kKHZvaWQpOwpmcHJuZF90IGZwX3N3YXBfcm5kKGZwcm5kX3Qgcm5kKTsK
IyAxNjggIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAyIDMgNAoJCQkgCiMgMjAgIi91c3Iv
aW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9sY19j
b3JlLmgiIDEgMyA0CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dl
cnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKdHlwZWRl
ZiBjaGFyICoJCXZhX2xpc3Q7CiMgNzQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s
aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0
eXBlZGVmIHVuc2lnbmVkIGludCB3Y3R5cGVfdDsKdHlwZWRlZiBsb25nCQlmcG9zX3Q7CnR5cGVk
ZWYJbG9uZwkJdGltZV90Owp0eXBlZGVmIGludAkJY2xvY2tfdDsKIyAxMDUgIi9hb2xuZXQvcGtn
L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJdWNoYXJfdDsKdHlwZWRl
Zgl1bnNpZ25lZCBzaG9ydAl1c2hvcnRfdDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdWludF90Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcJdWxvbmdfdDsKdHlwZWRlZiBzaWduZWQgaW50CXNzaXplX3Q7
CnR5cGVkZWYJc3RydWN0IHsgaW50IHJbMV07IH0gKglwaHlzYWRyX3Q7CnR5cGVkZWYgbG9uZwkJ
bGV2ZWxfdDsKdHlwZWRlZglsb25nCQlkYWRkcl90OwkgCnR5cGVkZWYJY2hhciAqCQljYWRkcl90
OwkgCnR5cGVkZWYJdWxvbmdfdAkJaW5vX3Q7CQkgCnR5cGVkZWYgc2hvcnQJCWNudF90Owp0eXBl
ZGVmIHVsb25nX3QJCWRldl90OwkJIAp0eXBlZGVmCWxvbmcJCWNoYW5fdDsJCSAKdHlwZWRlZgls
b25nCQlvZmZfdDsJCSAKdHlwZWRlZglsb25nCQlwYWRkcl90Owp0eXBlZGVmCWxvbmcJCWtleV90
Owp0eXBlZGVmIGxvbmcJCXRpbWVyX3Q7CSAKdHlwZWRlZglzaG9ydAkJbmxpbmtfdDsKdHlwZWRl
Zgl1bG9uZ190CQltb2RlX3Q7CQkgCnR5cGVkZWYgdWxvbmdfdAkJdWlkX3Q7CQkgCnR5cGVkZWYg
dWxvbmdfdAkJZ2lkX3Q7CQkgCnR5cGVkZWYJdm9pZCAqCQltaWRfdDsJCSAKdHlwZWRlZglpbnQJ
CXBpZF90OwkJIAp0eXBlZGVmIGNoYXIJCXNsYWJfdFsxMl07CSAKdHlwZWRlZiBsb25nICAgICAg
ICAgICAgbXR5cF90OwkJIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvbV90eXBlcy5oIiAxIDMgNAp0
eXBlZGVmIHN0cnVjdCBsYWJlbF90IHsJCSAKCXN0cnVjdCBsYWJlbF90ICpwcmV2OwkJIAoJdWxv
bmdfdCAgICAgICAgICAgaWFyOwkJIAoJdWxvbmdfdCAgICAgICAgICAgc3RhY2s7CQkgCgl1bG9u
Z190ICAgICAgICAgICB0b2M7CQkgCgl1bG9uZ190ICAgICAgICAgICBjcjsgICAgICAgICAgICAg
IAoJdWxvbmdfdCAgICAgICAgICAgaW50cHJpOwkJIAoJdWxvbmdfdCAgICAgICAgICAgcmVnWzE5
XTsJIAp9IGxhYmVsX3Q7CnR5cGVkZWYgbG9uZwkJdm1pZF90OwkJIAp0eXBlZGVmIHVsb25nX3QJ
CXZtaGFuZGxlX3Q7CSAKdHlwZWRlZiBzdHJ1Y3Qgdm1hZGRyX3QgewkJIAoJdm1oYW5kbGVfdAlz
cnZhbDsJCSAKCWNhZGRyX3QJCW9mZnNldDsJCSAKfSB2bWFkZHJfdDsKdHlwZWRlZiBzdHJ1Y3Qg
YWRzcGFjZV90ewkJIAoJdWxvbmdfdAkJYWxsb2M7CQkgCgl2bWhhbmRsZV90CXNydmFsWzE2XTsJ
IAp9IGFkc3BhY2VfdDsKIyAxNTIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CnR5
cGVkZWYgc3RydWN0IHNpZ3NldF90CXsKCXVuc2lnbmVkIGxvbmcgbG9zaWdzOwoJdW5zaWduZWQg
bG9uZyBoaXNpZ3M7Cn0gc2lnc2V0X3Q7CnR5cGVkZWYgaW50IHNpZ25hbF90Owp0eXBlZGVmCXVj
aGFyX3QJCXVjaGFyOwp0eXBlZGVmCXVzaG9ydF90CXVzaG9ydDsKdHlwZWRlZgl1aW50X3QJCXVp
bnQ7CnR5cGVkZWYgdWxvbmdfdAkJdWxvbmc7CnR5cGVkZWYJcGh5c2Fkcl90CXBoeXNhZHI7CnR5
cGVkZWYJdW5zaWduZWQgY2hhcgl1X2NoYXI7CnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJdV9zaG9y
dDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdV9pbnQ7CnR5cGVkZWYJdW5zaWduZWQgbG9uZwl1X2xv
bmc7CnR5cGVkZWYJc3RydWN0CV9xdWFkIHsgbG9uZyB2YWxbMl07IH0gcXVhZDsKdHlwZWRlZgls
b25nCXN3YmxrX3Q7CnN0cnVjdCBzaWdzZXQJewoJdW5zaWduZWQgbG9uZyBsb3NpZ3M7Cgl1bnNp
Z25lZCBsb25nIGhpc2lnczsKfTsKc3RydWN0IGZzaWQgewoJbG9uZwl2YWxbMl07Cn07CnR5cGVk
ZWYgc3RydWN0IGZzaWQgZnNpZF90OwpzdHJ1Y3QgZmlkIHsKCXVpbnRfdAlmaWRfbGVuOwoJY2hh
cglmaWRfZGF0YVsoMzIgIC0gc2l6ZW9mKGZzaWRfdCkgLSBzaXplb2YodWludF90KSkgXTsKfTsK
dHlwZWRlZiBzdHJ1Y3QgZmlkIGZpZF90OwpzdHJ1Y3QgZmlsZWlkIHsJCQkgCgl1aW50X3QJZmlk
X2xlbjsKCWlub190CWZpZF9pbm87Cgl1aW50X3QJZmlkX2dlbjsKCWNoYXIJZmlkX3hbKDMyICAt
IHNpemVvZihmc2lkX3QpIC0gc2l6ZW9mKHVpbnRfdCkpICAtIChzaXplb2YoaW5vX3QpICsgMikg
LSBzaXplb2YodWludF90KV07Cn07CnN0cnVjdCBmaGFuZGxlIHsKCWNoYXIgeFszMiBdOwkJIAp9
OwpzdHJ1Y3QgZmlsZWhhbmRsZSB7CQkJIAoJZnNpZF90CQlmaF9mc2lkOwkJIAoJc3RydWN0IGZp
bGVpZAlmaF9maWQ7CQkJIAp9Owp0eXBlZGVmIHN0cnVjdCBmaGFuZGxlIGZoYW5kbGVfdDsKc3Ry
dWN0IHVuaXF1ZV9pZCB7CiAgICAgICB1bnNpZ25lZCBsb25nIHdvcmQxOwogICAgICAgdW5zaWdu
ZWQgbG9uZyB3b3JkMjsKICAgICAgIHVuc2lnbmVkIGxvbmcgd29yZDM7CiAgICAgICB1bnNpZ25l
ZCBsb25nIHdvcmQ0Owp9Owp0eXBlZGVmIHN0cnVjdCB1bmlxdWVfaWQgdW5pcXVlX2lkX3Q7CiMg
MjgxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMu
Mi41LzIuOTUuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxOCAiL3Vzci9pbmNsdWRlL3N5
cy9sY19jb3JlLmgiIDIgMyA0CnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIHNob3J0Cgl0
eXBlX2lkLAoJbWFnaWM7CiAgICB1bnNpZ25lZCBsb25nCgl2ZXJzaW9uOwogICAgCiAgICBzaXpl
X3QgIHNpemU7Cn0gX0xDX29iamVjdF90Owp0eXBlZGVmIHN0cnVjdCB7CiAgCiAgICBfTENfb2Jq
ZWN0X3QgIGhkcjsKCQogICAgIAogICAgaW50ICAgY2F0Z2V0cyAgOwogICAgaW50ICAgICAgICAg
ICAgICBjYXRjbG9zZSAgOwogICAgCiAgICAgCiAgICBpbnQgICBjb21wcmVzcyAgOwogICAgaW50
ICAgZGVjb21wcmVzcyAgOwogICAgaW50ICAgICAgc3RhcnRfY29tcHJlc3MgIDsKICAgIGludCAg
ICAgIGVuZF9jb21wcmVzcyAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICBpbml0ICA7CiAgICB2
b2lkICAgICpkYXRhOwp9IF9MQ19jb3JlX2Nhcl90Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBfTENf
b2JqZWN0X3QgIGhkcjsKICAgICAKICAgIGludCAgICBubF9sYW5naW5mbyAgOwogICAgCiAgICAg
CiAgICBpbnQgICAgbWJ0b3djICA7CiAgICBpbnQgICAgbWJzdG93Y3MgIDsKICAgIGludCAgICAg
ICB3Y3RvbWIgIDsKICAgIGludCAgICB3Y3N0b21icyAgOwogICAgCiAgICAgCiAgICBpbnQgICAg
ICAgbWJsZW4gIDsKICAgIAogICAgIAogICAgaW50ICAgIHdjc3dpZHRoICA7CiAgICBpbnQgICAg
d2N3aWR0aCAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgX19tYnRvcGMgIDsKICAgIGludCAg
ICAgICBfX21ic3RvcGNzICA7CiAgICBpbnQgICAgICAgX19wY3RvbWIgIDsKICAgIGludCAgICAg
ICBfX3Bjc3RvbWJzICA7CiAgICAKICAgICAKICAgIGludCAgICBjc2lkICA7CiAgICBpbnQgICAg
d2NzaWQgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgIGluaXQgIDsKICAgIHZvaWQgICAgICpk
YXRhOwp9IF9MQ19jb3JlX2NoYXJtYXBfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVj
dF90ICBoZHI7IAogICAgCiAgICAgCiAgICBpbnQgICAgICB0b3d1cHBlciAgOwogICAgaW50ICAg
ICAgdG93bG93ZXIgIDsKICAgIAogICAgIAogICAgaW50ICAgIGdldF93Y3R5cGUgIDsKICAgIGlu
dCAgICAgICAgICAgICBpc193Y3R5cGUgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICAgIGlu
aXQgIDsKICAgIHZvaWQgICAgICpkYXRhOwp9IF9MQ19jb3JlX2N0eXBlX3Q7CnR5cGVkZWYgc3Ry
dWN0IHsKICAgIF9MQ19vYmplY3RfdCAgaGRyOwogICAgIAogICAgaW50ICAgICAgICBzdHJjb2xs
ICA7CiAgICBpbnQgICAgIHN0cnhmcm0gIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICB3Y3Nj
b2xsICA7CiAgICBpbnQgICAgIHdjc3hmcm0gIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICBm
bm1hdGNoICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgcmVnY29tcCAgOwogICAgaW50ICAg
ICByZWdlcnJvciAgOwogICAgaW50ICAgICAgICByZWdleGVjICA7CiAgICBpbnQgICAgICAgcmVn
ZnJlZSAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgIGluaXQgIDsKICAgIHZvaWQgICAgICpk
YXRhOwp9IF9MQ19jb3JlX2NvbGxhdGVfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVj
dF90ICBoZHI7CiAgICAKICAgICAKICAgIGludCAgICAgbmxfbGFuZ2luZm8gIDsKICAgIAogICAg
IAogICAgaW50ICAgICBzdHJmdGltZSAgOwogICAgaW50ICAgICBzdHJwdGltZSAgOwogICAgCiAg
ICAgCiAgICBpbnQgICAgIHdjc2Z0aW1lICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgaW5p
dCAgOwogICAgdm9pZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfdGltZV90Owp0eXBlZGVmIHN0cnVj
dCB7CiAgICBfTENfb2JqZWN0X3QgIGhkcjsKICAgICAKICAgIGludCAgICAgbmxfbGFuZ2luZm8g
IDsKICAgIAogICAgIAogICAgaW50ICAgICBzdHJmbW9uICA7CiAgICAKICAgICAKICAgIGludCAg
ICAgICAgaW5pdCAgOwogICAgdm9pZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfbW9uZXRhcnlfdDsK
dHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVjdF90ICBoZHI7CiAgICAgCiAgICBpbnQgICAg
IG5sX2xhbmdpbmZvICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgaW5pdCAgOwogICAgdm9p
ZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfbnVtZXJpY190Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBf
TENfb2JqZWN0X3QgIGhkcjsKICAgIAogICAgIAogICAgaW50ICAgIG5sX2xhbmdpbmZvICA7CiAg
ICAKICAgICAKICAgIGludCAgICBycG1hdGNoICA7CiAgICAKICAgICAKICAgIGludCAgICAgICBp
bml0ICA7CiAgICB2b2lkICAgICAgICAqZGF0YTsKfSBfTENfY29yZV9yZXNwX3Q7CnR5cGVkZWYg
c3RydWN0IHsKICAgIF9MQ19vYmplY3RfdCBoZHI7CiAgICAgCiAgICBpbnQgICAgICAgICAgIG5s
X2xhbmdpbmZvICA7CiAgICBpbnQgICBsb2NhbGVjb252ICA7CiAgICAKICAgICAKICAgIGludCAg
ICAgaW5pdCAgOwogICAgdm9pZCAgICAgICAgICpkYXRhOwp9IF9MQ19jb3JlX2xvY2FsZV90Owoj
IDIxICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAyIDMgNAojIDEgIi9hb2xuZXQvcGtn
L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1
ZGUvbG9jYWxlLmgiIDEgMyA0CnN0cnVjdCBsY29udiB7CiAgIGNoYXIgKmRlY2ltYWxfcG9pbnQ7
CQkgCiAgIGNoYXIgKnRob3VzYW5kc19zZXA7CQkgCiAgIGNoYXIgKmdyb3VwaW5nOwkJIAogICBj
aGFyICppbnRfY3Vycl9zeW1ib2w7CSAKICAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwkgCiAgIGNo
YXIgKm1vbl9kZWNpbWFsX3BvaW50OwkgCiAgIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwkgCiAg
IGNoYXIgKm1vbl9ncm91cGluZzsJCSAKICAgY2hhciAqcG9zaXRpdmVfc2lnbjsJCSAKICAgY2hh
ciAqbmVnYXRpdmVfc2lnbjsJCSAKICAgY2hhciBpbnRfZnJhY19kaWdpdHM7CSAKICAgY2hhciBm
cmFjX2RpZ2l0czsJCSAKICAgY2hhciBwX2NzX3ByZWNlZGVzOwkJIAogICBjaGFyIHBfc2VwX2J5
X3NwYWNlOwkJIAogICBjaGFyIG5fY3NfcHJlY2VkZXM7CQkgCiAgIGNoYXIgbl9zZXBfYnlfc3Bh
Y2U7CQkgCiAgIGNoYXIgcF9zaWduX3Bvc247CQkgCiAgIGNoYXIgbl9zaWduX3Bvc247CQkgCiAg
IGNoYXIgKmxlZnRfcGFyZW50aGVzaXM7CSAKICAgY2hhciAqcmlnaHRfcGFyZW50aGVzaXM7CSAK
fSA7CnN0cnVjdCBsY29udiAqbG9jYWxlY29udih2b2lkKTsKY2hhciAgICpzZXRsb2NhbGUoaW50
LCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHN0cnVjdCBsY29udiBsY29udjsKIyAyMiAiL3Vzci9p
bmNsdWRlL3N5cy9sb2NhbGVkZWYuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2xvY2Fs
ZWRlZjMxLmgiIDEgMyA0CnR5cGVkZWYgc3RydWN0ICBjb2xkZXNjICB7ICAgICAgICAgICAgICAg
ICAgICAgIAoJc2hvcnQgICAgIGNkX3N0cm9mZjsgICAgICAgICAgICAgICAgICAgIAoJc2hvcnQJ
ICBjZF9yZXBvZmY7CglzaG9ydCAgICAgY2RfY3ZhbDsKCXNob3J0CSAgY2RfY3VuaXE7Cn0gY29s
ZGVzY190Owp0eXBlZGVmIHN0cnVjdCBjb2xsYXRpb25fdGFibGUgeyAgICAgICAgICAgICAgICAg
CglzaG9ydCAgICBsY192ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgIAoJc2hvcnQJIGxjX2xl
bmd0aDsJCQkgCgljaGFyICAgICAqbGNfbG9jYWxlX25hbWU7CQkgCglpbnQgICAgICBsZW5fY29s
bGF0ZTsKCXNob3J0ICAgICpsY19jb2xsYXRlOyAgICAgICAgICAgICAgICAgICAgCglpbnQgICAg
ICBsZW5fY29sdW5pcTsKCXNob3J0ICAgICpsY19jb2x1bmlxOyAgICAgICAgICAgICAgICAgICAg
CglpbnQgICAgICBsZW5fY29sZGVzYzsKCWNvbGRlc2NfdCAqbGNfY29sZGVzYzsgICAgICAgICAg
ICAgICAgICAgCglpbnQJIGxlbl9zdHJpbmdzOwkJCQoJd2NoYXJfdCAgKmxjX3N0cmluZ3M7CQkJ
IAoJaW50CSBoaWdoX2N2YWx1ZTsJCQkgCn0gY29sX3Q7CnR5cGVkZWYgc3RydWN0IGNoYXJfY2xh
c3NpZmljYXRpb25fdGFibGUgeyAgICAgICAKCXNob3J0ICAgICAgbGNfdmVyc2lvbjsgCQkgCglz
aG9ydAkgICBsY19sZW5ndGg7ICAJCSAKCXNob3J0ICAgICAgbGNfY29kZV90eXBlOyAJIAoJc2hv
cnQgICAgICBtYl9jdXJfbWF4OyAgIAkgCglzaG9ydCAgICAgIG1iX2N1cl9taW47ICAgCSAKCXNo
b3J0ICAgICAgbGNfZHNwX3dpZHRoOyAgICAgICAgICAgICAgICAgIAoJY2hhciAgICAgICAqbGNf
bG9jYWxlX25hbWU7IAkgCglpbnQgICAgICAgIGxlbl9jYXNlY29udjsgICAJIAoJd2NoYXJfdCAg
ICAqbGNfY2FzZWNvbnY7ICAgCSAKCWludAkgICBsZW5fY3R5cGU7Cgl1bnNpZ25lZCBzaG9ydCAq
bGNfY3R5cGU7CSAJCn0gY3R5cGVfdDsKdHlwZWRlZglzdHJ1Y3QgbGNfbW9uZXRhcnlfdGFibGUg
ewoJc2hvcnQgIAlsY192ZXJzaW9uOwoJc2hvcnQgCWxjX2xlbmd0aDsJCSAKCWNoYXIgICAJKmxj
X2xvY2FsZV9uYW1lOwkgCgljaGFyIAkqaW50X2N1cnJfc3ltYm9sOwkgCgljaGFyIAkqY3VycmVu
Y3lfc3ltYm9sOwkgCgljaGFyIAkqbW9uX2RlY2ltYWxfcG9pbnQ7CSAKCWNoYXIgCSptb25fdGhv
dXNhbmRzX3NlcDsJIAoJY2hhciAJKm1vbl9ncm91cGluZzsJCSAKCWNoYXIgCSpwb3NpdGl2ZV9z
aWduOwkJIAoJY2hhciAJKm5lZ2F0aXZlX3NpZ247CQkgCgljaGFyIAlpbnRfZnJhY19kaWdpdHM7
CSAKCWNoYXIgCWZyYWNfZGlnaXRzOwkJIAoJY2hhciAJcF9jc19wcmVjZWRlczsJCSAKCWNoYXIg
CXBfc2VwX2J5X3NwYWNlOwkJIAoJY2hhciAJbl9jc19wcmVjZWRlczsJCSAKCWNoYXIgCW5fc2Vw
X2J5X3NwYWNlOwkJIAoJY2hhciAJcF9zaWduX3Bvc247CQkgCgljaGFyIAluX3NpZ25fcG9zbjsJ
CSAKfSBtb25fdDsKdHlwZWRlZiBzdHJ1Y3QgbnVtZXJpY190YWJsZSB7ICAgICAgICAgICAgICAg
ICAgIAoJc2hvcnQJbGNfdmVyc2lvbjsKCXNob3J0CWxjX2xlbmd0aDsJCSAKCWNoYXIgICAgKmxj
X2xvY2FsZV9uYW1lOwkgCgljaGFyIAkqZGVjaW1hbF9wb2ludDsKCWNoYXIgCSp0aG91c2FuZHNf
c2VwOwoJY2hhcgkqZ3JvdXBpbmc7Cn0gbnVtX3Q7CnR5cGVkZWYgc3RydWN0IGxjX21lc3NhZ2Vz
X3RhYmxlIHsKCXNob3J0CWxjX3ZlcnNpb247CglzaG9ydAlsY19sZW5ndGg7CQkgCgljaGFyICAg
ICpsY19sb2NhbGVfbmFtZTsJIAoJY2hhciAJKm1lc3NhZ2VzOwkJIAoJY2hhciAJKnllc19zdHJp
bmc7CQkgCgljaGFyIAkqbm9fc3RyaW5nOwkJIAp9IG1zZ190Owp0eXBlZGVmIHN0cnVjdCBsY190
aW1lX3RhYmxlIHsKCXNob3J0ICAgbGNfdmVyc2lvbjsKCXNob3J0CWxjX2xlbmd0aDsJICAKCWNo
YXIgICAgKmxjX2xvY2FsZV9uYW1lOyAgCgljaGFyICAgICp0X2ZtdDsgICAgICAgICAgCgljaGFy
ICAgICpkX2ZtdDsgICAgICAgICAgCgljaGFyICAgICpubGxkYXRlOyAgICAgICAgCgljaGFyICAg
ICpkX3RfZm10OyAgICAgICAgCgljaGFyICAgICphYmRheTsgICAgICAgICAgCgljaGFyICAgICpk
YXk7ICAgICAgICAgICAgCgljaGFyICAgICphYm1vbjsgICAgICAgICAgCgljaGFyICAgICptb247
ICAgICAgICAgICAgCgljaGFyICAgICptaXNjOyAgICAgICAgICAgCgljaGFyICAgICp0c3Ryczsg
ICAgICAgICAgCgljaGFyICAgICp0dW5pdHM7ICAgICAgICAgCgljaGFyCSp5ZWFyOwkJIAoJY2hh
ciAgICAqYW1fcG07ICAgICAgICAgIAp9IHRpbV90Owp0eXBlZGVmIHN0cnVjdCB3Y2hhcl9tYXBw
aW5nX3RhYmxlIHsgICAgICAgICAgICAgCglzaG9ydCAgICBsY192ZXJzaW9uOwoJc2hvcnQJIGxj
X2xlbmd0aDsJCQkgCgljaGFyICAgICAqbGNfaWRlbnRpZmllcjsKfSBtYXBfdDsKdHlwZWRlZiBz
dHJ1Y3QgbG9jYWxlaW5mb190YWJsZSB7ICAgICAgICAgICAKCWNoYXIgICAgIGxjX21hZzAsIGxj
X21hZzE7ICAgICAgIAoJc2hvcnQgICAgbGNfdmVyc2lvbjsgICAgICAgICAgICAgCglzaG9ydCAg
ICBsY19jb2RlX3R5cGU7ICAgICAgICAgICAgICAgICAKCXNob3J0CSBsY19sZW5ndGg7CQkgCglj
b2xfdCAgICAqbGNfY29sdGJsOwkJIAoJY3R5cGVfdCAgKmxjX2NocnRibDsJCSAKCW1vbl90ICAg
ICpsY19tb250Ymw7CQkgCgludW1fdCAgICAqbGNfbnVtdGJsOwkJIAoJdGltX3QgICAgKmxjX3Rp
bXRibDsJCSAKCW1zZ190ICAgICpsY19tc2d0Ymw7CQkgCgltYXBfdCAgICAqbGNfbWFwdGJsOwkJ
IAp9IGxvY190OwojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAyIDMgNAp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBfTENfY29yZV9jaGFybWFwX3QgY29yZTsKICAgIAogICAgY2hhciAg
ICAgKmNtX2NzbmFtZTsJIAogICAgCiAgICBzaXplX3QgICBjbV9tYl9jdXJfbWF4OyAgICAgIAog
ICAgc2l6ZV90ICAgY21fbWJfY3VyX21pbjsJIAogICAgdW5zaWduZWQgY2hhcgoJICAgICBjbV9t
YXhfZGlzcF93aWR0aDsgIAoJCQkJIAogICAgdW5zaWduZWQgCgljaGFyICpjbV9jc3RhYjsJCSAK
ICAgIAp9IF9MQ19jaGFybWFwX3Q7CnR5cGVkZWYgc3RydWN0IF9MQ19jaGFybWFwX29iamhkbCBf
TENfY2hhcm1hcF9vYmpoZGxfdDsKc3RydWN0IF9MQ19jaGFybWFwX29iamhkbCB7CglfTENfY2hh
cm1hcF90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVmCXN0cnVjdCB7CiAgICBf
TENfY29yZV9tb25ldGFyeV90ICAgY29yZTsKICAgIAogICAgY2hhciAqaW50X2N1cnJfc3ltYm9s
OwkgICAgCiAgICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CSAgICAKICAgIGNoYXIgKm1vbl9kZWNp
bWFsX3BvaW50OwkgICAgCiAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsJICAgIAogICAgY2hh
ciAqbW9uX2dyb3VwaW5nOwkJICAgIAogICAgY2hhciAqcG9zaXRpdmVfc2lnbjsJICAgIAogICAg
Y2hhciAqbmVnYXRpdmVfc2lnbjsJICAgIAogICAgc2lnbmVkIGNoYXIgaW50X2ZyYWNfZGlnaXRz
OyAgICAKICAgIHNpZ25lZCBjaGFyIGZyYWNfZGlnaXRzOwkgICAgCiAgICBzaWduZWQgY2hhciBw
X2NzX3ByZWNlZGVzOwkgICAgCiAgICBzaWduZWQgY2hhciBwX3NlcF9ieV9zcGFjZTsJICAgIAog
ICAgc2lnbmVkIGNoYXIgbl9jc19wcmVjZWRlczsJICAgIAogICAgc2lnbmVkIGNoYXIgbl9zZXBf
Ynlfc3BhY2U7CSAgICAKICAgIHNpZ25lZCBjaGFyIHBfc2lnbl9wb3NuOwkgICAgCiAgICBzaWdu
ZWQgY2hhciBuX3NpZ25fcG9zbjsJICAgIAogICAgY2hhciAqZGViaXRfc2lnbjsJCSAgICAKICAg
IGNoYXIgKmNyZWRpdF9zaWduOwkJICAgIAogICAgY2hhciAqbGVmdF9wYXJlbnRoZXNpczsJICAg
IAogICAgY2hhciAqcmlnaHRfcGFyZW50aGVzaXM7CSAgICAKICAgIAp9IF9MQ19tb25ldGFyeV90
Owp0eXBlZGVmIHN0cnVjdCBfTENfbW9uZXRhcnlfb2JqaGRsIF9MQ19tb25ldGFyeV9vYmpoZGxf
dDsKc3RydWN0IF9MQ19tb25ldGFyeV9vYmpoZGwgewoJX0xDX21vbmV0YXJ5X3QgKm9iajsKCXZv
aWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0IHsKICAgIF9MQ19jb3JlX251bWVyaWNf
dCBjb3JlOwogICAgCiAgICBjaGFyICAgICAqZGVjaW1hbF9wb2ludDsKICAgIGNoYXIgICAgICp0
aG91c2FuZHNfc2VwOwogICAgdW5zaWduZWQKCWNoYXIgKmdyb3VwaW5nOwogICAgCn0gX0xDX251
bWVyaWNfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX251bWVyaWNfb2JqaGRsIF9MQ19udW1lcmljX29i
amhkbF90OwpzdHJ1Y3QgX0xDX251bWVyaWNfb2JqaGRsIHsKCV9MQ19udW1lcmljX3QgKm9iajsK
CXZvaWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0ICB7CiAgICBfTENfY29yZV9yZXNw
X3QgY29yZTsKICAgIGNoYXIgICAgKnllc2V4cHI7CSAgICAgIAogICAgY2hhciAgICAqbm9leHBy
OwkgICAgICAKICAgIGNoYXIgICAgKnllc3N0cjsJICAgICAgCiAgICBjaGFyICAgICpub3N0cjsJ
ICAgICAgCn0gX0xDX3Jlc3BfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX3Jlc3Bfb2JqaGRsIF9MQ19y
ZXNwX29iamhkbF90OwpzdHJ1Y3QgX0xDX3Jlc3Bfb2JqaGRsIHsKCV9MQ19yZXNwX3QgKm9iajsK
CXZvaWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0IHsKICAgIF9MQ19jb3JlX3RpbWVf
dCBjb3JlOwogICAgCiAgICBjaGFyICpkX2ZtdDsgIAogICAgY2hhciAqdF9mbXQ7ICAKICAgIGNo
YXIgKmRfdF9mbXQ7CiAgICBjaGFyICp0X2ZtdF9hbXBtOwogICAgY2hhciAqYWJkYXlbN107ICAK
ICAgIGNoYXIgKmRheVs3XTsgICAgCiAgICBjaGFyICphYm1vblsxMl07ICAKICAgIGNoYXIgKm1v
blsxMl07ICAgIAogICAgY2hhciAqYW1fcG1bMl07CiAgICBjaGFyICplcmE7CiAgICBjaGFyICpl
cmFfeWVhcjsKICAgIGNoYXIgKmVyYV9kX2ZtdDsKICAgIGNoYXIgKmFsdF9kaWdpdHM7CiAgICAK
fSBfTENfdGltZV90Owp0eXBlZGVmIHN0cnVjdCBfTENfdGltZV9vYmpoZGwgX0xDX3RpbWVfb2Jq
aGRsX3Q7CnN0cnVjdCBfTENfdGltZV9vYmpoZGwgewoJX0xDX3RpbWVfdCAqb2JqOwoJdm9pZCAq
KCoqbWV0aCkoKTsKfTsKdHlwZWRlZiB1bmlvbiB7CiAgICB1bnNpZ25lZAkJICAgICAgICAKCXNo
b3J0ICBuWzJdOwkgICAgICAgIAogICAgICAgICAgICAgCiAgICB1bnNpZ25lZAkJICAgICAgICAK
CXNob3J0ICAqcDsJICAgICAgICAKfSBfTENfd2VpZ2h0X3Q7ICAgIAogIAp0eXBlZGVmIHN0cnVj
dCB7CiAgICBjaGFyICAgICAgICAgKmNlX3N5bTsJIAogICAgX0xDX3dlaWdodF90IGNlX3dndDsJ
IAoJCQkJIAp9IF9MQ19jb2xsZWxfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX3dlaWdodF90
ICAgY3Rfd2d0OyAgICAgCgkJCSAgICAgICAKICAgIF9MQ19jb2xsZWxfdCAgICpjdF9jb2xsZWw7
IAp9IF9MQ19jb2x0YmxfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX3dlaWdodF90IHNzX2Fj
dDsJICAgICAgCgkJCQkgICAgICAKICAgIGNoYXIgKnNzX3NyYzsJCSAgICAgIAogICAgY2hhciAq
c3NfdGd0OwkJICAgICAgCn0gX0xDX3N1YnNfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX2Nv
cmVfY29sbGF0ZV90IGNvcmU7CiAgICAKICAgIHVuc2lnbmVkCQkJICAgICAgICAgICAgIAoJY2hh
ciAgICBjb19ub3JkOwkgICAgICAgICAgICAgCiAgICAKICAgIF9MQ193ZWlnaHRfdCBjb19zb3J0
OwkgICAgICAgICAgICAgCgkJCQkJICAgICAKICAgIAogICAgd2NoYXJfdCAgICAgY29fd2NfbWlu
OwkJICAgICAKICAgIHdjaGFyX3QgICAgIGNvX3djX21heDsJCSAgICAgCiAgICAKICAgIHdjaGFy
X3QgICAgIGNvX2NvbF9taW47CQkgICAgIAogICAgd2NoYXJfdCAgICAgY29fY29sX21heDsJCSAg
ICAgCiAgICAKICAgIF9MQ19jb2x0YmxfdCAqY29fY29sdGJsOwkJICAgICAKCQkJCSAgICAgICAg
ICAgICAKICAgIHVuc2lnbmVkCgljaGFyICAgIGNvX25zdWJzOwkJICAgICAKICAgIF9MQ19zdWJz
X3QgICpjb19zdWJzOwkJICAgICAKICAgIAp9IF9MQ19jb2xsYXRlX3Q7CnR5cGVkZWYgc3RydWN0
IF9MQ19jb2xsYXRlX29iamhkbCBfTENfY29sbGF0ZV9vYmpoZGxfdDsKc3RydWN0IF9MQ19jb2xs
YXRlX29iamhkbCB7CglfTENfY29sbGF0ZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owog
IAp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICAgICpuYW1lOwogICAgdW5zaWduZWQKCWludCBt
YXNrOwp9IF9MQ19jbGFzc25tX3Q7CnR5cGVkZWYgc3RydWN0IHsKICBfTENfY29yZV9jdHlwZV90
IGNvcmU7CiAgIAogIHdjaGFyX3QgICAgICBtaW5fd2M7CiAgd2NoYXJfdCAgICAgIG1heF93YzsK
ICAgCiAgd2NoYXJfdCAgICAgICp1cHBlcjsKICB3Y2hhcl90ICAgICAgKmxvd2VyOwogIAogICAK
ICB1bnNpZ25lZAogICAgICBpbnQgICAgICAqbWFzazsgICAgICAgICAKICB1bnNpZ25lZAogICAg
ICBpbnQgICAgICAqcW1hc2s7CSAgICAgIAogIHVuc2lnbmVkCiAgICAgIGNoYXIgICAgICpxaWR4
OwkgICAgICAKICAgCiAgdW5zaWduZWQKICAgICAgY2hhciAgICAgbmNsYXNzZXM7CiBfTENfY2xh
c3NubV90ICpjbGFzc25tczsKICAKfSBfTENfY3R5cGVfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX2N0
eXBlX29iamhkbCBfTENfY3R5cGVfb2JqaGRsX3Q7CnN0cnVjdCBfTENfY3R5cGVfb2JqaGRsIHsK
CV9MQ19jdHlwZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVmIHN0cnVjdCB7
CiAgICBfTENfY29yZV9sb2NhbGVfdCBjb3JlOwogICAgCiAgICBjaGFyICAgICAgICAgICAqbmxf
aW5mb1s1NSBdOwogICAgc3RydWN0IGxjb252ICAgKm5sX2xjb252OwogICAgCiAgICBfTENfY2hh
cm1hcF9vYmpoZGxfdCAgbGNfY2hhcm1hcDsKICAgIF9MQ19jb2xsYXRlX29iamhkbF90ICBsY19j
b2xsYXRlOwogICAgX0xDX2N0eXBlX29iamhkbF90ICAgIGxjX2N0eXBlOwogICAgX0xDX21vbmV0
YXJ5X29iamhkbF90IGxjX21vbmV0YXJ5OwogICAgX0xDX251bWVyaWNfb2JqaGRsX3QgIGxjX251
bWVyaWM7CiAgICBfTENfcmVzcF9vYmpoZGxfdCAgICAgbGNfcmVzcDsKICAgIF9MQ190aW1lX29i
amhkbF90ICAgICBsY190aW1lOwogICAgCn0gX0xDX2xvY2FsZV90Owp0eXBlZGVmIHN0cnVjdCBf
TENfbG9jYWxlX29iamhkbCBfTENfbG9jYWxlX29iamhkbF90OwpzdHJ1Y3QgX0xDX2xvY2FsZV9v
YmpoZGwgewoJX0xDX2xvY2FsZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVm
IHN0cnVjdCBfTENfb2JqZWN0X2hhbmRsZSBfTENfb2JqZWN0X2hhbmRsZV90OwpzdHJ1Y3QgX0xD
X29iamVjdF9oYW5kbGUgewogICAgdW5pb24gewoJX0xDX29iamVjdF90CSAgICAgIGxjX29iamVj
dDsKCV9MQ19sb2NhbGVfb2JqaGRsX3QgICBsY19sb2NhbGU7CiAgICAgICAgX0xDX2NoYXJtYXBf
b2JqaGRsX3QgIGxjX2NoYXJtYXA7CiAgICAgICAgX0xDX2NvbGxhdGVfb2JqaGRsX3QgIGxjX2Nv
bGxhdGU7CiAgICAgICAgX0xDX2N0eXBlX29iamhkbF90ICAgIGxjX2N0eXBlOwogICAgICAgIF9M
Q19tb25ldGFyeV9vYmpoZGxfdCBsY19tb25ldGFyeTsKICAgICAgICBfTENfbnVtZXJpY19vYmpo
ZGxfdCAgbGNfbnVtZXJpYzsKICAgICAgICBfTENfcmVzcF9vYmpoZGxfdCAgICAgbGNfcmVzcDsK
ICAgICAgICBfTENfdGltZV9vYmpoZGxfdCAgICAgbGNfdGltZTsKICAgIH0gb2JqOwogICAgdm9p
ZCAgICAqKCoqbWV0aCkoKTsKfTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVjdF90CWhk
cjsJCSAgIAogICAgX0xDX2xvY2FsZV9vYmpoZGxfdCBoYW5kbGU7CQkgICAKfSBfTENfbG9hZF9v
YmplY3RfdDsKZXh0ZXJuIF9MQ19jaGFybWFwX29iamhkbF90ICBfX2xjX2NoYXJtYXA7CmV4dGVy
biBfTENfY29sbGF0ZV9vYmpoZGxfdCAgX19sY19jb2xsYXRlOwpleHRlcm4gX0xDX2N0eXBlX29i
amhkbF90ICAgIF9fbGNfY3R5cGU7CmV4dGVybiBfTENfbW9uZXRhcnlfb2JqaGRsX3QgX19sY19t
b25ldGFyeTsKZXh0ZXJuIF9MQ19udW1lcmljX29iamhkbF90ICBfX2xjX251bWVyaWM7CmV4dGVy
biBfTENfcmVzcF9vYmpoZGxfdCAgICAgX19sY19yZXNwOwpleHRlcm4gX0xDX3RpbWVfb2JqaGRs
X3QgICAgIF9fbGNfdGltZTsKZXh0ZXJuIF9MQ19sb2NhbGVfb2JqaGRsX3QgICBfX2xjX2xvY2Fs
ZTsKIyAyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0CiMgNTQgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAzIDQKCSAgICBleHRlcm4gaW50CWlzYWxwaGEoaW50KTsKCSAgICBleHRlcm4gaW50
CWlzYWxudW0oaW50KTsKCSAgICBleHRlcm4gaW50CWlzY250cmwoaW50KTsKCSAgICBleHRlcm4g
aW50CWlzZGlnaXQoaW50KTsKCSAgICBleHRlcm4gaW50CWlzZ3JhcGgoaW50KTsKCSAgICBleHRl
cm4gaW50CWlzbG93ZXIoaW50KTsKCSAgICBleHRlcm4gaW50CWlzcHJpbnQoaW50KTsKCSAgICBl
eHRlcm4gaW50CWlzcHVuY3QoaW50KTsKCSAgICBleHRlcm4gaW50CWlzc3BhY2UoaW50KTsKCSAg
ICBleHRlcm4gaW50CWlzdXBwZXIoaW50KTsKCSAgICBleHRlcm4gaW50CWlzeGRpZ2l0KGludCk7
CgkgICAgZXh0ZXJuIGludAl0b3VwcGVyKGludCk7CgkgICAgZXh0ZXJuIGludAl0b2xvd2VyKGlu
dCk7CiMgMTA3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CgkgICAgZXh0ZXJuIGludAlpc2Fz
Y2lpKGludCk7CgkgICAgZXh0ZXJuIGludAlpc3dhbHBoYSh3aW50X3QpOwoJICAgIGV4dGVybiBp
bnQJaXN3YWxudW0od2ludF90KTsKCSAgICBleHRlcm4gaW50CWlzd2NudHJsKHdpbnRfdCk7Cgkg
ICAgZXh0ZXJuIGludAlpc3dkaWdpdCh3aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3Z3JhcGgo
d2ludF90KTsKCSAgICBleHRlcm4gaW50CWlzd2xvd2VyKHdpbnRfdCk7CgkgICAgZXh0ZXJuIGlu
dAlpc3dwcmludCh3aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3cHVuY3Qod2ludF90KTsKCSAg
ICBleHRlcm4gaW50CWlzd3NwYWNlKHdpbnRfdCk7CgkgICAgZXh0ZXJuIGludAlpc3d1cHBlcih3
aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3eGRpZ2l0KHdpbnRfdCk7CgkgICAgZXh0ZXJuIHdp
bnRfdAl0b3d1cHBlcih3aW50X3QpOwoJICAgIGV4dGVybiB3aW50X3QJdG93bG93ZXIod2ludF90
KTsKCSAgICBleHRlcm4gaW50CWlzX3djdHlwZSh3aW50X3QsIHdjdHlwZV90KTsKCSAgICBleHRl
cm4gaW50CWlzX2N0eXBlKGludCwgd2N0eXBlX3QpOwoJICAgIGV4dGVybiBpbnQJdG9hc2NpaShp
bnQpOwoJICAgIGV4dGVybiB3Y3R5cGVfdAlnZXRfd2N0eXBlKGNoYXIgKik7CiMgMTc2ICIvdXNy
L2luY2x1ZGUvY3R5cGUuaCIgMyA0CiMgNiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2Nj
LWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9jY3R5cGUiIDIgMwojIDEwNSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9w
b3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQv
c3RyYWl0cy5oIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJp
bmciIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1p
Ym0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQv
cGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2lu
Y2x1ZGUvc3RyaW5nLmgiIDMgNAojIDc2ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt
bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0cmluZy5oIiAzIDQKICAg
ICAgICBleHRlcm4gdm9pZCAgICAgKm1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsK
ICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6
ZV90KTsKICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90
KTsKICAgICAgICBleHRlcm4gc2l6ZV90ICAgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7CiAgICAgICAgZXh0ZXJuIHNpemVfdCAgIHN0cmxlbihjb25zdCBjaGFyICopOwogICAg
ICAgIGV4dGVybiBzaXplX3QgICBzdHJzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwoj
IDEwOCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiAgICAgICAgZXh0ZXJuIHZvaWQgICAg
ICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBj
aGFyICAgICAqc3RyY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gY2hh
ciAgICAgKnN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAgICAgICAgZXh0
ZXJuIGNoYXIgICAgICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVy
biBjaGFyICAgICAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICAgICAg
ICBleHRlcm4gaW50ICAgICAgbWVtY21wKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLHNpemVf
dCk7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHN0cmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHN0cm5jbXAoY29uc3QgY2hhciAqLGNvbnN0
IGNoYXIgKixzaXplX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICBzdHJuY29sbGVuKGNvbnN0
IGNoYXIgKiwgY29uc3QgaW50ICk7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJjaHIoY29u
c3QgY2hhciAqLCBpbnQpOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RycGJyayhjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJyY2hyKGNv
bnN0IGNoYXIgKiwgaW50KTsKICAgICAgICBleHRlcm4gY2hhciAgICAgKnN0cnN0cihjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJ0b2soY2hh
ciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RyZXJyb3IoaW50
KTsKICAgICAgICBleHRlcm4gaW50ICAgICAgc3RyY29sbChjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7CiAgICAgICAgZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hhciAq
LCBzaXplX3QpOwogICAgICAgIGV4dGVybiB2b2lkICAgICAqbWVtY2NweSh2b2lkICosIGNvbnN0
IHZvaWQgKiwgaW50LCBzaXplX3QpOwojIDE3MyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIv
Z2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0
CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICppbmRleChjb25zdCBjaGFyICosIGludCk7CiAgICAg
ICAgZXh0ZXJuIGNoYXIgICAgICpyaW5kZXgoY29uc3QgY2hhciAqLCBpbnQpOwogICAgICAgIGV4
dGVybiBjaGFyICAgICAqc3RyZHVwKGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIHZvaWQgICAgIHN3
YWIoY29uc3Qgdm9pZCAqLCB2b2lkICosIHNzaXplX3QpOyAKICAgICAgICBleHRlcm4gd2NoYXJf
dCAgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAgICAgICAgZXh0ZXJuIHdj
aGFyX3QgICp3Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKICAgICAgICBleHRlcm4g
aW50ICAgICAgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAg
ICBleHRlcm4gd2NoYXJfdCAgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAg
ICAgICAgZXh0ZXJuIHNpemVfdCAgIHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hh
cl90ICopOwogICAgICAgIGV4dGVybiBzaXplX3QgICB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAqKTsK
ICAgICAgICBleHRlcm4gd2NoYXJfdCAgKndjc25jYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90
ICosIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHdjc25jbXAoY29uc3Qgd2NoYXJf
dCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3
Y3NuY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVy
biB3Y2hhcl90ICAqd2NzcGJyayhjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAg
ICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7
CiAgICAgICAgZXh0ZXJuIHNpemVfdCAgIHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdj
aGFyX3QgKik7CiAgICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3Y3N0b2sod2NoYXJfdCAqLCBjb25z
dCB3Y2hhcl90ICopOwogICAgICAgIGV4dGVybiB3Y2hhcl90ICAqd2Nzd2NzKGNvbnN0IHdjaGFy
X3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gaW50ICAgICAgd2Nzd2lkdGgo
Y29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICB3Y3dpZHRo
KGNvbnN0IHdjaGFyX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICB3Y3Njb2xsKGNvbnN0IHdj
aGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gc2l6ZV90IHdjc3hmcm0o
d2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiMgMjQxICIvYW9sbmV0L3BrZy9n
Y2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRl
L3N0cmluZy5oIiAzIDQKIyA3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJp
bmciIDIgMwojIDk0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt
aWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJpbmciIDMK
IyAxMDYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAz
CnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgPGNoYXI+IHsKICB0eXBlZGVmIGNoYXIgY2hhcl90
eXBlOwogIHN0YXRpYyB2b2lkIGFzc2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBl
JiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUg
JiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBz
dGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikK
ICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90
eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQog
IHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsgcmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19k
ZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuIGlzc3BhY2UoYSk7IH0KICBzdGF0aWMgaW50IGNvbXBh
cmUgKGNvbnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQog
ICAgeyByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOyB9CiAgc3RhdGljIHNpemVfdCBsZW5ndGgg
KGNvbnN0IGNoYXJfdHlwZSogcykKICAgIHsgcmV0dXJuIHN0cmxlbiAocyk7IH0KICBzdGF0aWMg
Y2hhcl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXpl
X3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkgKHMxLCBzMiwgbik7IH0KICBz
dGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMy
LCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlIChzMSwgczIsIG4p
OyB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5
cGUmIGMsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbXNldCAoczEsIGMs
IG4pOyB9Cn07CiMgMTU5ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2Vy
cGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9zdHJh
aXRzLmgiIDMKfSAgCiMgMzYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jh
c3RyaW5nLmgiIDIgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2Mu
aCIgMSAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi
IDEgMwojIDE0OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi
IDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp
eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9wb3dlcnBjLWlibS1haXgzLjIuNS9pbmNsdWRlL19H
X2NvbmZpZy5oIiAxIDMgNAogIAp0eXBlZGVmICAgICAgICAgIGludCAgIF9HX2ludDhfdCBfX2F0
dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50ICBfR191
aW50OF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiAgICAgICAg
ICBpbnQgIF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJ
X18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQzMl90IF9fYXR0cmlidXRlX18oKF9f
bW9kZV9fKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRy
aWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50
NjRfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9HX3VpbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKX19leHRl
bnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBfR19sbG9uZzsKX19leHRlbnNpb25fXyB0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7CnR5cGVkZWYgaW50IF9HX2Nsb2NrX3Q7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBfR19kZXZfdDsKdHlwZWRlZiBsb25nIF9HX2Zwb3NfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIF9HX2dpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0dfaW5v
X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19tb2RlX3Q7CnR5cGVkZWYgc2hvcnQgX0dfbmxp
bmtfdDsKdHlwZWRlZiBsb25nIF9HX29mZl90Owp0eXBlZGVmIGludCBfR19waWRfdDsKdHlwZWRl
ZiBpbnQgX0dfcHRyZGlmZl90Owp0eXBlZGVmIGludCAgIF9HX3NpZ3NldF90Owp0eXBlZGVmIGxv
bmcgdW5zaWduZWQgaW50IF9HX3NpemVfdDsKdHlwZWRlZiBsb25nIF9HX3RpbWVfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIF9HX3VpZF90Owp0eXBlZGVmIHNob3J0IHVuc2lnbmVkIGludCBfR193
Y2hhcl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX0dfc3NpemVfdDsKdHlwZWRlZiBpbnQgX0dfd2lu
dF90Owp0eXBlZGVmIGNoYXIgKiBfR192YV9saXN0OwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1
LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw
Yy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDYxICIvYW9sbmV0
L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzIDQKIyAxMjYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2dj
Yy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoj
IDE4OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CiMgMjY5ICIvYW9sbmV0L3BrZy9nY2Mt
Mi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAzIDQKIyAzMTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDg2ICIvYW9s
bmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUu
My8uLi8uLi8uLi8uLi9wb3dlcnBjLWlibS1haXgzLjIuNS9pbmNsdWRlL19HX2NvbmZpZy5oIiAy
IDMgNAojIDE1MSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi
IDIgMwojIDE3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi
IDMKIyAyMzQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t
YWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAz
CiMgMjQ4ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp
eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoj
IDMxNiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKIyAx
OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIu
NS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxvYy5oIiAyIDMKIyAxICIvYW9s
bmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAxIDMKIyAxICIvYW9sbmV0
L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwojcHJhZ21hIGludGVyZmFj
ZQojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwoj
cHJhZ21hIGludGVyZmFjZQogICAKZXh0ZXJuICJDIiB7CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIu
OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9saWJpby5oIiAxIDMKIyA1NSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9saWJpby5oIiAzCiMgMTA0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt
bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTc1ICIv
YW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDMKICAgIHR5cGVkZWYgdm9p
ZCBfSU9fbG9ja190OwpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9u
ZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CiAgIAogICAKICBpbnQgX3BvczsKIyAyMDgg
Ii9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwp9OwpzdHJ1Y3QgX0lP
X0ZJTEUgewogIGludCBfZmxhZ3M7CQkgCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAK
ICBjaGFyKiBfSU9fcmVhZF9lbmQ7CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciog
X0lPX3dyaXRlX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dy
aXRlX2VuZDsJIAogIGNoYXIqIF9JT19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkg
CiAgIAogIGNoYXIgKl9JT19zYXZlX2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAg
CiAgY2hhciAqX0lPX3NhdmVfZW5kOyAgCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwog
IHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsK
ICBfR19vZmZfdCAgX29mZnNldDsKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAg
Y2hhciBfdW51c2VkOwogIGNoYXIgX3Nob3J0YnVmWzFdOwogICAKfTsKc3RydWN0IF9JT19GSUxF
X3BsdXM7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0
XywgX0lPX3N0ZGVycl87CnR5cGVkZWYgc3RydWN0CnsKICBfR19zc2l6ZV90ICAoKnJlYWQpICAo
c3RydWN0IF9JT19GSUxFICosIHZvaWQgKiwgX0dfc3NpemVfdCApICA7CiAgX0dfc3NpemVfdCAg
KCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBfR19zc2l6ZV90ICkg
IDsKICBfR19vZmZfdCAgKCpzZWVrKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBfR19vZmZfdCAsIGlu
dCkgIDsKICBpbnQgKCpjbG9zZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKikgIDsKfSBfSU9fY29va2ll
X2lvX2Z1bmN0aW9uc190OwpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJ
TEUgZmlsZTsKICBjb25zdCB2b2lkICp2dGFibGU7CiAgdm9pZCAqY29va2llOwogIF9JT19jb29r
aWVfaW9fZnVuY3Rpb25zX3QgaW9fZnVuY3Rpb25zOwp9OwpleHRlcm4gIkMiIHsKZXh0ZXJuIGlu
dCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19G
SUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKZXh0
ZXJuIGludCBfSU9fZ2V0YyAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19wdXRj
ICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgIChfSU9f
RklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yICAoX0lPX0ZJTEUgKl9fZnApICA7
CmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4g
dm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxv
Y2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlICAoX0lP
X0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFICosIGNvbnN0IGNo
YXIgKiwgX0dfdmFfbGlzdCAsIGludCAqKSAgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAgKF9J
T19GSUxFICosIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCApICA7CmV4dGVybiBfR19zc2l6ZV90
ICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX0dfc3NpemVfdCApICA7CmV4dGVybiBfR19z
aXplX3QgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwgX0dfc2l6ZV90ICkgIDsKZXh0
ZXJuIF9HX29mZl90ICBfSU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBp
bnQpICA7CmV4dGVybiBfR19vZmZfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19vZmZf
dCAsIGludCkgIDsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgIChfSU9fRklMRSAq
KSAgOwp9CiMgMzYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1p
Ym0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgi
IDIgMwp9CmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xh
c3Mgc3RyZWFtYnVmOwp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1vZmY7CnR5cGVkZWYgX0dfb2Zm
X3QgIHN0cmVhbXBvczsKdHlwZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsK
c3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpfc3RyYnVmOwogICAgb3N0cmVh
bSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFnczsKICAgIHNob3J0
ICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7
CiAgICBpbnQgX3ByZWNpc2lvbjsKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKIyAxMjQgIi9hb2xu
ZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4z
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKY2xhc3MgaW9zIDogcHVi
bGljIF9pb3NfZmllbGRzIHsKICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0
IGlvcyYpOyAgCiAgcHVibGljOgogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAg
dHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRl
ZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0g
MCAsCgllb2ZiaXQgPSAxICwKCWZhaWxiaXQgPSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVt
IG9wZW5fbW9kZSB7CglpbiA9IDEgLAoJb3V0ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJ
dHJ1bmMgPSAxNiAsCglub2NyZWF0ZSA9IDMyICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEy
OCAsICAKCWJpbmFyeSA9IDEyOCAgfTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5k
fTsKICAgIHR5cGVkZWYgZW51bSBzZWVrX2RpciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNr
aXB3cz0gMDEgLAoJICAgbGVmdD0gMDIgLCByaWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAg
IGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBz
aG93cG9pbnQ9IDA0MDAgLAoJICAgdXBwZXJjYXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwK
CSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAw
MDAgLCBzdGRpbz0gMDQwMDAwIAoJICAgfTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29j
dCtoZXgsCglmbG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVm
dCtyaWdodCtpbnRlcm5hbAogICAgfTsKIyAxNzcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RyZWFtYnVmLmgiIDMKICAgIG9zdHJlYW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90
aWU7IH0KICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGll
OyBfdGllPXZhbDsgcmV0dXJuIHNhdmU7IH0KICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3Qg
eyByZXR1cm4gX2ZpbGw7IH0KICAgIHNob3J0ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBv
bGRmID0gX2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxh
Z3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdz
IG5ld192YWwpIHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7
IHJldHVybiBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3By
ZWNpc2lvbjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQg
b2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJl
dHVybiBvbGRwOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mg
b2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBm
bXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xk
Yml0cyA9IF9mbGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7
IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJ
Zm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJp
dHM7IH0KICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdp
ZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNh
dmU7IH0KICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0KICAgIHZvaWQgY2xlYXIo
aW9zdGF0ZSBzdGF0ZSA9IDApIHsKCV9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJh
ZGJpdDsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAg
dm9pZCBzZXQoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9l
eGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUg
ZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsgIAoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhy
b3dfZmFpbHVyZSgpOyB9CiAgICBpbnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAw
OyB9CiAgICBpbnQgZW9mKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0K
ICAgIGludCBmYWlsKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6
ZmFpbGJpdCk7IH0KICAgIGludCBiYWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJh
ZGJpdDsgfQogICAgaW9zdGF0ZSByZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAg
ICBvcGVyYXRvciB2b2lkKigpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZv
aWQqKSgtMSk7IH0KICAgIGludCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0K
ICAgIGlvc3RhdGUgZXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAg
ICB2b2lkIGV4Y2VwdGlvbnMoaW9zdGF0ZSBlbmFibGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxl
OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICBzdHJl
YW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiBy
ZGJ1ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9z
dHJidWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CiAgICBzdGF0aWMgaW50IHN5bmNf
d2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBz
eW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAg
c3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdv
cmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkg
Y29uc3Q7CiAgICAgCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7
IH0KICAgIH07CiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwg
b3N0cmVhbSogdGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxp
bmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9Owp0eXBlZGVm
IGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOwpjbGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2YXRlIF9J
T19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1ZjsKICAgIHZvaWQgc2V0X29mZnNl
dChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBwdWJsaWM6CiAgICBzdHJlYW1tYXJr
ZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2VyKCk7CiAgICBpbnQgc2F2aW5nKCkg
eyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0YShzdHJlYW1tYXJrZXImKTsKICAgIGludCBkZWx0
YSgpOwp9OwpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5k
IGNsYXNzIGlvczsKICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9z
dHJlYW07CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92
dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0K
ICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgc3RyZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19G
SUxFKiYgeGNoYWluKCkgeyByZXR1cm4gX2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAg
ICB2b2lkIF9saW5rX2luKCk7CiAgICBjaGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNo
YXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0
cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQg
OiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNoYXIqIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dy
aXRlX2VuZDsgfQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFz
ZTsgfQogICAgY2hhciogZWJhY2soKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgx
MDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNv
bnN0IHsgcmV0dXJuIF9JT19idWZfYmFzZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0
dXJuIF9JT19idWZfZW5kOyB9CiAgICBpbnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZf
ZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAgICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193
cml0ZV9wdHIrKyA9IGM7IH0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAg
ICBpbnQgeGZsYWdzKGludCBmKSB7aW50IGZsID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVy
biBmbDt9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZv
aWQgeHNldGZsYWdzKGludCBmLCBpbnQgbWFzaykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAg
JiB+bWFzaykgfCAoZiAmIG1hc2spOyB9CiAgICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9m
bGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQog
ICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0
YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hh
ciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVf
ZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAg
ICAgIGlmIChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAg
ICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0g
ZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CiAgICBpbnQg
aW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpH
YmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jh
c2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9f
c2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1
cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hh
ciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJw
dHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsg
fQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpl
TnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyBy
ZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkg
eyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVh
KCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0
dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAg
CiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1
c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAg
IHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAo
LTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1
ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogICAgdmlydHVhbCBz
dHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVh
bCBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBz
dHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxp
b3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGlu
dCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJl
YW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsg
cmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1
YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAg
ICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9z
IHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0
KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6
aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQg
bGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUo
KTsKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmssIGludCBkZWx0YSA9IDApOwog
ICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAgaW50IHN1bmdldGMoKTsKICAgIGludCB1bmJ1
ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiAgPyAxIDogMDsgfQogICAgaW50IGxpbmVidWZm
ZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MjAwICA/IDEgOiAwOyB9CiAgICB2b2lkIHVuYnVm
ZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsg
fQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAg
OyBlbHNlIF9mbGFncyAmPSB+MHgyMDAgOyB9CiAgICBpbnQgYWxsb2NhdGUoKSB7ICAKCWlmIChi
YXNlKCkgfHwgdW5idWZmZXJlZCgpKSByZXR1cm4gMDsKCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUo
KTsgfQogICAgIAogICAgdm9pZCBhbGxvY2J1ZigpIHsgaWYgKGJhc2UoKSA9PSBfX251bGwgKSBk
b2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkg
eyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRp
bmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVh
bXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4o
cywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJl
dHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIq
IHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBp
bnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigpOwogICAgaW50IHNldF9jb2x1bW4o
aW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBfR19zaXplX3QgIG4sIGNoYXIgZGVs
aW0sIGludCBwdXRiYWNrX2RlbGltKTsKICAgIGludCBzcHV0YyhpbnQgYykgeyByZXR1cm4gX0lP
X3B1dGMoYywgdGhpcyk7IH0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0aGlz
KTsgfQogICAgaW50IHNnZXRjKCkgeyByZXR1cm4gKCggIHRoaXMgICktPl9JT19yZWFkX3B0ciA+
PSAoICB0aGlzICApLT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKCAgdGhpcyAgKSA9PSAo
LTEpICA/ICgtMSkgIDogKih1bnNpZ25lZCBjaGFyICopICggIHRoaXMgICktPl9JT19yZWFkX3B0
cikgIDsgfQogICAgaW50IHNuZXh0YygpIHsKCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lPX3JlYWRf
ZW5kICYmIF9fdW5kZXJmbG93KHRoaXMpID09ICgtMSkgKQoJICByZXR1cm4gKC0xKSA7CgllbHNl
IHJldHVybiBfSU9fcmVhZF9wdHIrKywgc2dldGMoKTsgfQogICAgdm9pZCBzdG9zc2MoKSB7IGlm
IChfSU9fcmVhZF9wdHIgPCBfSU9fcmVhZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9CiAgICBpbnQg
dnNjYW4oY2hhciBjb25zdCAqZm10MCwgX0dfdmFfbGlzdCAgYXAsIGlvcyogc3RyZWFtID0gX19u
dWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0o
Y2hhciBjb25zdCAqZm10MCwgX0dfdmFfbGlzdCAgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25z
dCAqZm10MCAuLi4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwg
c3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3Qg
Y2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFt
b2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFs
IGludCBzeXNfc3RhdCh2b2lkKik7ICAKfTsKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1i
dWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBj
b25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsK
ICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsKICAgIH5maWxlYnVmKCk7CiAg
ICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAq
ZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFy
ICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmly
dHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgt
MSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAg
ICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0K
ICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2
aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1p
b3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwg
aW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZp
cnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAKICAgIGludCBpc19yZWFkaW5nKCkgeyBy
ZXR1cm4gZWJhY2soKSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4g
aXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9w
dHIoKSB7IHJldHVybiBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz
X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mg
c3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5
c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3Rh
dCh2b2lkKik7ICAKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwp9OwppbmxpbmUgdm9pZCBp
b3M6OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7CgkJX3N0YXRlID0gc2Ig
PyBpb3M6Omdvb2RiaXQgOiBpb3M6OmJhZGJpdDsgX2V4Y2VwdGlvbnM9MDsKCQlfc3RyYnVmPXNi
OyBfdGllID0gdGllX3RvOyBfd2lkdGg9MDsgX2ZpbGw9JyAnOwoJCV9mbGFncz1pb3M6OnNraXB3
c3xpb3M6OmRlYzsKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CmlubGluZSBpb3M6Omlv
cyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQpp
bmxpbmUgaW9zOjp+aW9zKCkgewogICAgIAogICAgIAogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9h
cnJheXMpOwp9Cn0gIAojIDMxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3Ry
ZWFtLmgiIDIgMwpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwp0
eXBlZGVmIGlvcyYgKCpfX21hbmlwKShpb3MmKTsKdHlwZWRlZiBpc3RyZWFtJiAoKl9faW1hbmlw
KShpc3RyZWFtJik7CnR5cGVkZWYgb3N0cmVhbSYgKCpfX29tYW5pcCkob3N0cmVhbSYpOwpleHRl
cm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJl
YW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9z
dHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1Ymxp
YyBpb3MKewogICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgp
IHsgfQogICAgb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsK
ICAgIGludCBvcGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGll
KSBfdGllLT5mbHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkg
IGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4
KCk7IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9z
dHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0
IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25l
ZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFy
KilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFt
c2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0
cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3
cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsK
ICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0
ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9z
dHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAgYXJncyk7CiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2ln
bmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJh
dG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0
IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMp
Cgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGNvbnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAg
ICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJh
dG9yPDwobG9uZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsK
ICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGxvbmcgbik7CiAgICBf
X2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIG4pOwog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludClu
KTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3Bl
cmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBi
KSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo
ZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVy
YXRvcjw8KChkb3VibGUpbik7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUg
bikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91YmxlKW4pOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7
fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsKfTsKY2xhc3MgaXN0cmVhbSA6
IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3NpemVfdCAgX2dj
b3VudDsKICAgIGludCBfc2tpcF93cygpOwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3Vu
dCAoMCkgeyB9CiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxs
ICk7CiAgICBpc3RyZWFtJiBnZXQoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu
Jyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRl
bGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAg
aXN0cmVhbSYgZ2V0KGNoYXImIGMpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXImIGMp
IHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRy
LCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRsaW5lKHVuc2ln
bmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRs
aW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNo
YXImIGMpICB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVk
IGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNo
YXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIq
IHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFy
KilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFt
c2l6ZSBuKTsKICAgIGlzdHJlYW0mIHJlYWQodW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXpl
IG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJl
YWQoc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChj
aGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBu
KQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQo
c3RyZWFtYnVmJiBzYiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFy
ICoqcywgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7Cglp
ZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAg
OwoJICBpZiAoX3RpZSAmJiAobmVlZCA9PSAwIHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVk
KSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKCFuZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3Mp
KSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBp
cGZ4MCgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9
CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7CgkgIGlmIChmbGFncygp
ICYgaW9zOjpza2lwd3MpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQog
ICAgfQogICAgaW50IGlwZngxKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0
KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9h
dmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7CgkgIHJldHVybiAxOwoJfQogICAgfQogICAgdm9p
ZCBpc2Z4KCkgeyAgOyB9CiAgICBpbnQgZ2V0KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAoLTEp
IDsKCQllbHNlIHsgaW50IGNoID0gX3N0cmJ1Zi0+c2J1bXBjKCk7CgkJICAgICAgIGlmIChjaCA9
PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0KTsKCQkgICAgICAgaXNmeCgpOwoJCSAgICAgICByZXR1
cm4gY2g7CgkJICAgICB9IH0KICAgIGludCBwZWVrKCk7CiAgICBfR19zaXplX3QgIGdjb3VudCgp
IHsgcmV0dXJuIF9nY291bnQ7IH0KICAgIGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVs
aW0gPSAoLTEpICk7CiAgICBpbnQgc3luYyAoKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbXBv
cyk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1w
b3MgdGVsbGcoKTsKICAgIGlzdHJlYW0mIHB1dGJhY2soY2hhciBjaCkgewoJaWYgKGdvb2QoKSAm
JiBfc3RyYnVmLT5zcHV0YmFja2MoY2gpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7Cgly
ZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgdW5nZXQoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJi
dWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOwoJcmV0dXJuICp0aGlz
O30KICAgIGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBpc3RyZWFt
JiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9HX3ZhX2xpc3QgIGFyZ3MpOwogICAgaXN0cmVh
bSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNo
YXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAg
ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1
bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYp
Yyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9y
Pj4obG9uZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgbG9u
ZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcg
bG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOwogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQg
bG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYpOwogICAgaXN0
cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7
CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+
Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7
KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KF9f
aW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwpjbGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBw
dWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJlYW0oKSB7IH0KICAgIGlvc3RyZWFt
KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7Cn07CmNsYXNzIF9JT19pc3Ry
ZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93
aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24m
IG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVy
YXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKY2xhc3MgX0lPX29zdHJl
YW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsKcHVibGljOgogIF9JT19vc3RyZWFtX3dp
dGhhc3NpZ24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYg
b3BlcmF0b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJh
dG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQp9OwpleHRlcm4gX0lPX2lzdHJl
YW1fd2l0aGFzc2lnbiBjaW47CmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNl
cnI7CmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNsb2cKOwpleHRlcm4gaXN0cmVhbSYg
bG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7
CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5s
b2NrKG9zdHJlYW0mIG91dHMpOwpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIAppbmxpbmUg
aW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9z
OjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6
OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9z
JiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihpb3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpv
Y3QpOyByZXR1cm4gaTsgfQp9ICAKIyA0NSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2Nj
LWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAz
NDIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4y
LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDUzICIvYW9sbmV0L3BrZy9nY2MtMi45
NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4z
L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5o
IiAxIDMgNAojIDI1ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt
aWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKICAgICAKIyA2MCAiL2Fv
bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1
LjMvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiMgNzAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMg
NAogICAgIAogICAgdHlwZWRlZiBzdHJ1Y3QgZGl2X3QgIHsJIAoJaW50IHF1b3Q7CQkgCglpbnQg
cmVtOwkJICAKICAgIH0gZGl2X3Q7CiAgICAgCiAgICB0eXBlZGVmIHN0cnVjdCBsZGl2X3QgIHsJ
IAoJbG9uZyBpbnQgcXVvdDsJCSAKCWxvbmcgaW50IHJlbTsJCSAgCiAgICB9IGxkaXZfdDsKICAg
ICAKICAgICAKICAgIGV4dGVybiBpbnQJIAltYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7CiAg
ICBleHRlcm4gc2l6ZV90IAltYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90
KTsKICAgIGV4dGVybiBpbnQJCW1idG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90
KTsKICAgIGV4dGVybiBzaXplX3QJd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICosIHNp
emVfdCk7CiAgICBleHRlcm4gaW50CQl3Y3RvbWIoY2hhciAqLCBjb25zdCB3Y2hhcl90KTsKICAg
ICAKIyAxNjggIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t
YWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoJIAoJZXh0ZXJuIGRvdWJsZSAJ
YXRvZihjb25zdCBjaGFyICopOwoJZXh0ZXJuIGludCAJYXRvaShjb25zdCBjaGFyICopOwoJZXh0
ZXJuIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciAqKTsKCWV4dGVybiBkb3VibGUgCXN0cnRvZChj
b25zdCBjaGFyICosIGNoYXIgKiAqKTsKCWV4dGVybiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hh
ciAqLCBjaGFyICogKiwgaW50KTsKCWV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsKGNv
bnN0IGNoYXIgKiwgY2hhciAqICosIGludCk7CglleHRlcm4gaW50IAlyYW5kKHZvaWQpOwoJZXh0
ZXJuIHZvaWQJc3JhbmQodW5zaWduZWQgaW50KTsKCWV4dGVybiB2b2lkIAkqY2FsbG9jKHNpemVf
dCwgc2l6ZV90KTsKCWV4dGVybiB2b2lkCWZyZWUodm9pZCAqKTsKCWV4dGVybiB2b2lkCSptYWxs
b2Moc2l6ZV90KTsKCWV4dGVybiB2b2lkIAkqcmVhbGxvYyh2b2lkICosIHNpemVfdCk7CglleHRl
cm4gdm9pZAlhYm9ydCh2b2lkKTsKCWV4dGVybiBpbnQJYXRleGl0KHZvaWQgKCopKHZvaWQpKTsK
CWV4dGVybiB2b2lkCWV4aXQoaW50KTsKCWV4dGVybiBjaGFyCSpnZXRlbnYoY29uc3QgY2hhciAq
KTsKCWV4dGVybiBpbnQgCXN5c3RlbShjb25zdCBjaGFyICopOwoJZXh0ZXJuIHZvaWQgCSpic2Vh
cmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgaW50KCopKGNv
bnN0IHZvaWQgKixjb25zdCB2b2lkICopKTsKCWV4dGVybiB2b2lkIAlxc29ydCh2b2lkICosIHNp
emVfdCwgc2l6ZV90LCBpbnQoKikoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKikpOwoJIAoJCgll
eHRlcm4gaW50IAlhYnMoaW50KTsKCWV4dGVybiBzdHJ1Y3QgZGl2X3QJZGl2KGludCwgaW50KTsK
CWV4dGVybiBsb25nIGludAlsYWJzKGxvbmcgaW50KTsKCWV4dGVybiBzdHJ1Y3QgbGRpdl90IAls
ZGl2KGxvbmcgaW50LCBsb25nIGludCk7CiMgMjI3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xp
Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAz
IDQKIyAyNTMgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t
YWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoJZXh0ZXJuIGRvdWJsZSAJCWRy
YW5kNDgodm9pZCk7CglleHRlcm4gZG91YmxlIAkJZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsK
CWV4dGVybiBsb25nIAkJanJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKCWV4dGVybiBsb25nIAkJ
bXJhbmQ0OCh2b2lkKTsKCWV4dGVybiBsb25nIAkJbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsK
CWV4dGVybiB1bnNpZ25lZCBzaG9ydCAJKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKCWV4dGVy
biB2b2lkIAkJc3JhbmQ0OChsb25nKTsKCWV4dGVybiBpbnQgCQlwdXRlbnYoIGNoYXIgKik7CiMg
Mjc5ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMu
Mi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAzMzMgIi9hb2xuZXQvcGtnL2djYy0y
Ljk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3Rk
bGliLmgiIDMgNAogICAgIGV4dGVybiBjaGFyICpvcHRhcmc7CiAgICAgZXh0ZXJuIGludCBvcHRp
bmQ7CiAgICAgZXh0ZXJuIGludCBvcHRlcnI7CiAgICAgZmxvYXQgICAgYXRvZmYoKTsKICAgICBj
aGFyICAgICAqZWN2dCAgIChkb3VibGUsIGludCwgaW50ICosIGludCAqKSAgICA7CiAgICAgY2hh
ciAgICAgKmZjdnQgICAoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKikgICAgOwogICAgIGNoYXIg
ICAgICpnY3Z0ICAgKGRvdWJsZSwgaW50LCBjaGFyICopICAgIDsKICAgICBmbG9hdCAgICBzdHJ0
b2YoKTsKICAgICB2b2lkICAgICBpbXVsX2RibCgpOwogICAgIHZvaWQgICAgIHVtdWxfZGJsKCk7
CiAgICAgCiMgMzc0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt
aWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKICAgIGV4dGVybiBkb3Vi
bGUJIHdjc3RvZChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwogICAgZXh0ZXJuIGxvbmcg
aW50CSB3Y3N0b2woY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOwogICAgZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBp
bnQpOwogICAgZXh0ZXJuIGludAkJcnBtYXRjaChjb25zdCBjaGFyICopOwogICAgZXh0ZXJuIGlu
dAkJY2xlYXJlbnYodm9pZCk7CiAgICBleHRlcm4gaW50CQlnZXRvcHQoaW50LCBjaGFyICpjb25z
dFtdLCBjb25zdCBjaGFyICopOwogICAgZXh0ZXJuIGNoYXIJCSpnZXRwYXNzKGNvbnN0IGNoYXIg
Kik7CiMgNTQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t
YWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIg
MwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQvcGtnL2dj
Yy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUv
c3RyaW5nLmgiIDMgNAojIDI0MyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9w
b3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiMgNTUgIi9h
b2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9hb2xu
ZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4z
Ly4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFpeDMuMi41L2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0
CiMgMTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFpeDMuMi41L2luY2x1ZGUvYXNz
ZXJ0LmgiIDMgNApleHRlcm4gIkMiIHsKZXh0ZXJuIHZvaWQgX19lcHJpbnRmIChjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIGNvbnN0IGNoYXIgKikKICAgIF9fYXR0cmlidXRl
X18gKChub3JldHVybikpOwp9CiMgNTIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s
aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFp
eDMuMi41L2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAojIDU2ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4z
L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKIyA3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxsb2MuaCIgMwojIDg3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9n
Y2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9hbGxvYy5oIiAzCiMgOTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s
aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX2FsbG9jLmgiIDMKIyAxMTUgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2FsbG9jLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlIHsKcHJpdmF0ZToKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwog
IHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICBzdGF0aWMgdm9p
ZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKcHVibGljOgogIHN0YXRpYyB2b2lk
KiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9f
bik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7
CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QgICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQogIHN0YXRpYyB2b2lkKiByZWFs
bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lk
KiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3Vs
dCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBf
X3Jlc3VsdDsKICB9CiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAo
Kl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29t
X2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVy
bihfX29sZCk7CiAgfQp9Owp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7
CnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2Nf
aGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgZm9yICg7OykgewogICAgICAgIF9f
bXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBp
ZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8
IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAg
ICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4o
X19yZXN1bHQpOwogICAgfQp9CnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBf
X24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVz
dWx0OwogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxv
Y19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVy
KSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAg
KCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3As
IF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9CnR5
cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwp0ZW1wbGF0ZTxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2ltcGxlX2FsbG9jIHsKcHVibGljOgogICAg
c3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24g
PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAg
c3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6
YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAq
IF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0
ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo
X1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsg
fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxvYyB7CnByaXZhdGU6
CiAgZW51bSB7X1NfZXh0cmEgPSA4fTsgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgCnB1YmxpYzoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6
ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRl
KF9fbiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVy
biBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQq
IF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBf
U19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiApID8gMCA6
IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvYW9sbmV0
L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAsICAgMjYzICwgICIqKHNpemVf
dCopX19yZWFsX3AgPT0gX19uIiApLCAwKSApKSA7CiAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19y
ZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9p
ZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBf
X3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3Qq
KV9fcmVhbF9wID09IF9fb2xkX3N6ICkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQg
YXNzZXJ0aW9uIGAlcydcbiIsCSAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2FsbG9jLmgiICwgICAyNzAgLCAgIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIgKSwg
MCkgKSkgOwogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxv
Y2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyBfU19leHRyYSwgX19uZXdfc3ogKyBfU19leHRyYSk7
CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgIHJldHVybiBfX3Jlc3VsdCAr
IF9TX2V4dHJhOwogIH0KfTsKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNz
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7CnByaXZhdGU6CiAgIAogICAKICAgIGVudW0ge19B
TElHTiA9IDh9OwogICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVM
SVNUUyA9IF9NQVhfQllURVMvX0FMSUdOfTsKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAo
c2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4o
X0FMSUdOIC0gMSkpOyB9CnByaXZhdGUgOgogIHVuaW9uIF9PYmogewogICAgICAgIHVuaW9uIF9P
YmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07ICAg
ICAKICB9Owpwcml2YXRlOgogICAgc3RhdGljIF9PYmoqICAgX1NfZnJlZV9saXN0W19ORlJFRUxJ
U1RTXTsKICBzdGF0aWMgIHNpemVfdCBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykg
ewogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKS9fQUxJR04gLSAxKTsKICB9
CiAgIAogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0
aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKICAg
CiAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVl
OwogIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwojIDM4OSAiL2FvbG5ldC9wa2cvZ2NjLTIu
OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwogICAgY2xhc3MgX0xvY2sgewogICAgICAgIHB1
YmxpYzoKICAgICAgICAgICAgX0xvY2soKSB7ICA7IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyAg
OyB9CiAgICB9OwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwpwdWJsaWM6CiAgIAogIHN0YXRpYyB2
b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0
OwogICAgX09iaiogICBfX3Jlc3VsdDsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVT
KSB7CiAgICAgICAgcmV0dXJuKG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKSk7CiAgICB9CiAg
ICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7
CiAgICAgCiAgICAgCiAgICAgCiAgICBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgIGlm
IChfX3Jlc3VsdCA9PSAwKSB7CiAgICAgICAgdm9pZCogX19yID0gX1NfcmVmaWxsKF9TX3JvdW5k
X3VwKF9fbikpOwogICAgICAgIHJldHVybiBfX3I7CiAgICB9CiAgICAqX19teV9mcmVlX2xpc3Qg
PSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgIHJldHVybiAoX19yZXN1bHQpOwog
IH07CiAgIAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQog
IHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlz
dDsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgbWFsbG9jX2Fs
bG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBfX215
X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg
CiAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAqX19t
eV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgCiAgfQogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZv
aWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwp9IDsKdHlwZWRlZiBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8IGZhbHNlICwgMD4gYWxsb2M7CnR5cGVkZWYgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwp0ZW1wbGF0
ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxvY190ZW1w
bGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190b3RhbF9i
eXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5k
X2ZyZWUgLSBfU19zdGFydF9mcmVlOwogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5
dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0
X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBl
bHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19ub2JqcyA9IChpbnQp
KF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBf
X25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFy
dF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0g
ZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KCSAgMiAqIF9fdG90YWxfYnl0
ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CiAgICAgICAgIAogICAgICAgIGlm
IChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgICAgICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0
ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k
ZXgoX19ieXRlc19sZWZ0KTsKICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBf
TV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJl
ZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9TX3N0YXJ0
X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAoMCA9PSBf
U19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgIF9PYmoq
ICAqIF9fbXlfZnJlZV9saXN0OwoJICAgIF9PYmoqIF9fcDsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7IF9faSA8
PSBfTUFYX0JZVEVTOyBfX2kgKz0gX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVf
bGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAg
ICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3Ap
IHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9s
aXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7
CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwog
ICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMp
KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CgkgICAgX1NfZW5kX2ZyZWUgPSAwOwkgCiAgICAgICAgICAg
IF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3Rv
X2dldCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAg
fQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19lbmRf
ZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4oX1Nf
Y2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KdGVtcGxhdGUgPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogICAgaW50IF9fbm9ianMgPSAy
MDsKICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAg
X09iaiogICogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9f
Y3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2JqOwogICAgaW50IF9faTsKICAgIGlmICgx
ID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJl
ZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAKICAgICAgX19yZXN1bHQgPSAo
X09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2Jq
KikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAg
IF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiop
KChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19p
KSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwog
ICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfX2N1cnJlbnRf
b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0K
ICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+
CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0
ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0
OwogICAgc2l6ZV90IF9fY29weV9zejsKICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhf
QllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJu
KHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xk
X3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQg
PSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6
PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9z
eik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsK
fQojIDYwMiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1h
aXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoj
IDY4OSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1w
bGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwp0ZW1wbGF0ZSA8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKdGVtcGxhdGUgPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0PgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+
OjpfT2JqKiAgCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpf
U19mcmVlX2xpc3RbCiAgICBfTkZSRUVMSVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFs
bG9jYXRvciB7CiAgdHlwZWRlZiBhbGxvYyBfQWxsb2M7ICAgICAgICAgICAKcHVibGljOgogIHR5
cGVkZWYgc2l6ZV90ICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9U
cCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVk
ZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVl
X3R5cGU7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRl
ZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKICBhbGxvY2F0b3IoKSB0aHJvdygpICB7fQog
IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpICB7fQogIHRlbXBsYXRlIDxjbGFz
cyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSAge30KICB+
YWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkg
Y29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZl
cmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgIAogICAKICBfVHAqIGFsbG9jYXRl
KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8g
c3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAg
ICAgICAgICAgICAgICAgICAgOiAwOwogIH0KICAgCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIg
X19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBz
aXplb2YoX1RwKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAogICAg
eyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CiAgdm9pZCBjb25zdHJ1Y3QocG9p
bnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZv
aWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9Owp0ZW1wbGF0ZTw+CmNs
YXNzIGFsbG9jYXRvcjx2b2lkPiB7CiAgdHlwZWRlZiBzaXplX3QgICAgICBzaXplX3R5cGU7CiAg
dHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiAgICAg
ICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVm
IHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCBy
ZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKdGVtcGxh
dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFs
bG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0K
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZh
bHNlOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2Nh
dG9yIHsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwogIHR5cGVkZWYgc2l6ZV90ICAgIHNp
emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
VHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAg
dHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3Rf
cmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAgICAgICB2YWx1ZV90eXBlOwogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwg
X0FsbG9jPiBvdGhlcjsKICB9OwogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBfX2FsbG9j
YXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpIAogICAgOiBfX3VuZGVybHlpbmdf
YWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4K
ICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93
KCkgCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQog
IH5fX2FsbG9jYXRvcigpIHRocm93KCkgIHt9CiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBf
X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3Rf
cmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogICAKICBfVHAqIGFsbG9jYXRl
KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAg
ICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19u
ICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CiAgIAogIHZvaWQgZGVhbGxvY2F0ZShw
b2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxs
b2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBj
b25zdCB0aHJvdygpIAogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CiAg
dm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkg
X1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsg
fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxs
b2M+IHsKICB0eXBlZGVmIHNpemVfdCAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZf
dCAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7CiAgdHlw
ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgdmFs
dWVfdHlwZTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBl
ZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKfTsKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxs
b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlp
bmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9y
PF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9j
YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxs
b2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KdGVtcGxhdGUgPGludCBpbnN0Pgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0
PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikK
ewogIHJldHVybiBmYWxzZTsKfQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQp0
ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KdGVtcGxhdGUgPGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVy
biB0cnVlOwp9CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBj
b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jYXRvcjo6ICAgcmViaW5kPF9UcD46Om90aGVyCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsK
fTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxs
b2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8
X1RwMT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0
eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFs
bG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQg
X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK
ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw
LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRp
YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxs
b2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAg
ICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90
eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2Nf
dHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBf
U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdf
YWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBk
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAg
ICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy
dWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxv
Y190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9
IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxs
b2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAg
ICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAx
LCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu
Y2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9B
bGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxs
b2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwojIDIxICIvYW9sbmV0L3BrZy9nY2MtMi45
NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwojIDQwICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xp
Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2FsbG9jLmgiIDMKIyAzOSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGQvYmFzdHJpbmcuaCIgMiAzCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9z
dHJlYW07CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAz
CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcmVsb3BzLmgiIDEgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw
JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGlu
ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0
dXJuICEoX195IDwgX194KTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8
IF9feSk7Cn0KIyAzMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBj
LWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIg
MiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1h
aXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNDIgIi9hb2xuZXQvcGtn
L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDMgNAojIDMyICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGli
L3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0
ZXJhdG9yIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2Vy
cGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVy
YXRvci5oIiAxIDMKc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1dF9p
dGVyYXRvcl90YWcge307CnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1
dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1
YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9Owp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlw
ZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg
ICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIF9UcCYgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CnN0cnVjdCBvdXRwdXRfaXRl
cmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRl
cmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rp
c3RhbmNlICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg
ICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgIHJlZmVyZW5j
ZTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9Owp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAg
ICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CiMgOTggIi9hb2xuZXQvcGtnL2djYy0yLjk1
LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
c3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0
ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0
ZXJhdG9yOjp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUg
X0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U
cCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90
ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg
ICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZmVyZW5jZTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9y
X3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICBwb2ludGVy
OwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKdGVt
cGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
Pjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCnsK
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVn
b3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9J
dGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90
eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0
PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9
CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1cm4g
c3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+
KDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9J
dGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19k
aXN0YW5jZV90eXBlKF9faSk7IH0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVfdHlwZShjb25zdCBf
SXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQojIDI1OSAiL2FvbG5ldC9w
a2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf
X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBfX24g
Kz0gX19sYXN0IC0gX19maXJzdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNs
YXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNl
JiBfX24pCnsKICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpbmUg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
Cl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgICsrX19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5j
ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBf
X2xhc3QgLSBfX2ZpcnN0Owp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5l
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qp
IHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0
ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVnb3J5OwogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9E
aXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX24tLSkgKytfX2k7
Cn0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rp
c3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZykgewogIGlmIChfX24gPj0gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQog
ICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNj
ZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9faSArPSBfX247Cn0KdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2Uo
X0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikgewogIF9fYWR2YW5jZShfX2ksIF9f
biwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+
CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNv
bnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJf
dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwogIGV4
cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIo
Jl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0o
Y29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNv
bnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNr
X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7
IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0
dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y
KysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwojIDM3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUu
My9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4K
aW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0Nv
bnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
KF9feCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9p
dGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0
eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRw
dXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAg
ICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRl
ZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICBleHBsaWNpdCBmcm9udF9pbnNlcnRf
aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9u
dChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1
cm4gKnRoaXM7IH0KfTsKIyA0MTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBmcm9udF9p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194
KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9CnRl
bXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0
ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJh
dG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVy
X3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAg
ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAg
ICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICBp
bnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy
YXRvciBfX2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5l
cjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChp
dGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9
CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4g
KnRoaXM7IH0KfTsKIyA0NTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0
ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4K
aW5saW5lIAppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYg
X194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy
YXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9f
aXRlcihfX2kpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xh
c3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwgCiAgICAgICAgICBjbGFzcyBfRGlzdGFu
Y2UgPSBwdHJkaWZmX3Q+IApjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Igewog
IHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IsIF9UcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jl
ZmVyZW5jZSwgX0Rpc3RhbmNlPiAgX1NlbGY7CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7
CiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgcmV2ZXJz
ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0
aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQo
X194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1
cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBw
b2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9T
ZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0t
Y3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAg
ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50
KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9f
dG1wOwogIH0KfTsKIyA1NTAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0
ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1Jl
ZiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAg
IGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYs
IF9EaXN0YW5jZT4mIF9feCwgCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0
b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gX194LmJh
c2UoKSA9PSBfX3kuYmFzZSgpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJl
dmVyc2VfaXRlcmF0b3IgCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6
CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3Jf
Y2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAg
ICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5
cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwpwdWJsaWM6CiAgcmV2ZXJz
ZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBl
IF9feCkgOiBjdXJyZW50KF9feCkge30KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBf
X3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAg
cmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAg
OiBjdXJyZW50KF9feC5iYXNlKCkpIHt9CiAgICAKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25z
dCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAg
IF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBv
aW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CiAgX1Nl
bGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1j
dXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAg
ICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQp
IHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190
bXA7CiAgfQogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAg
ICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRp
ZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAg
cmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZm
ZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyBy
ZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIAp9OyAKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9CnRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwg
X194LmJhc2UoKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBf
X3guYmFzZSgpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4gCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4oX194LmJhc2UoKSAtIF9fbik7Cn0KIyA4MDUgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMv
bGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rp
c3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBmcmllbmQgYm9vbCBv
cGVyYXRvcj09IDw+ICAoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYpOwpw
cm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9N
X2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9ICgqX01f
c3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01fc3RyZWFt
ID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBm
YWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyAgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiBfRGlzdCAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0
IF9UcCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgcmVm
ZXJlbmNlOwogIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21h
cmtlcihmYWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJl
YW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gX01fdmFsdWU7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAm
KG9wZXJhdG9yKigpKTsgfQogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mIG9wZXJhdG9y
KysoKSB7IAogICAgX01fcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9p
dGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsKICAgIGlzdHJlYW1faXRlcmF0
b3I8X1RwLCBfRGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBf
X3RtcDsKICB9Cn07CiMgODY0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9p
dGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf
RGlzdGFuY2U+JiBfX3kpIHsKICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVh
bSAmJgogICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8
CiAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2Vy
ID09IGZhbHNlOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSogX01fc3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmlu
ZzsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv
aWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAg
ICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7
CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9z
dHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcywgY29uc3QgY2hhciog
X19jKSAKICAgIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoX19jKSAge30KICBvc3RyZWFt
X2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fdmFsdWUpIHsgCiAgICAqX01f
c3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0
cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVy
YXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0
b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9IAogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0
b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9IAp9OwojIDkwNyAiL2FvbG5ldC9wa2cvZ2NjLTIu
OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwojIDM4ICIvYW9sbmV0L3BrZy9nY2MtMi45
NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKIyA0NCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCmV4dGVybiB2b2lkIF9fb3V0X29mX3JhbmdlIChj
b25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBfX2xlbmd0aF9lcnJvciAoY29uc3QgY2hhciAqKTsK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMgPSBzdHJpbmdfY2hhcl90cmFpdHM8
Y2hhclQ+LAoJICBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvYyA+CmNsYXNzIGJhc2ljX3N0cmluZwp7
CnByaXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3QgbGVuLCByZXMsIHJlZjsKICAgIGJv
b2wgc2VsZmlzaDsKICAgIGNoYXJUKiBkYXRhICgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhclQgKj4odGhpcyArIDEpOyB9CiAgICBjaGFyVCYgb3BlcmF0b3JbXSAoc2l6ZV90IHMpIHsg
cmV0dXJuIGRhdGEgKCkgW3NdOyB9CiAgICBjaGFyVCogZ3JhYiAoKSB7IGlmIChzZWxmaXNoKSBy
ZXR1cm4gY2xvbmUgKCk7ICsrcmVmOyByZXR1cm4gZGF0YSAoKTsgfQojIDEwOCAiL2FvbG5ldC9w
a2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMwogICAgdm9pZCByZWxlYXNl
ICgpIHsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlzOyB9CiAgICBpbmxpbmUgc3RhdGljIHZv
aWQgKiBvcGVyYXRvciBuZXcgKHNpemVfdCwgc2l6ZV90KTsKICAgIGlubGluZSBzdGF0aWMgdm9p
ZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKik7CiAgICBpbmxpbmUgc3RhdGljIFJlcCogY3JlYXRl
IChzaXplX3QpOwogICAgY2hhclQqIGNsb25lICgpOwogICAgaW5saW5lIHZvaWQgY29weSAoc2l6
ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90
LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBj
b25zdCBjaGFyVCwgICBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyBib29sIGV4Y2Vzc19zbG9w
IChzaXplX3QsIHNpemVfdCk7CiAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBmcm9iX3NpemUgKHNp
emVfdCk7CiAgcHJpdmF0ZToKICAgIFJlcCAmb3BlcmF0b3I9IChjb25zdCBSZXAgJik7CiAgfTsK
cHVibGljOgogIHR5cGVkZWYJICAgdHJhaXRzCQl0cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVu
YW1lIHRyYWl0czo6Y2hhcl90eXBlCXZhbHVlX3R5cGU7CiAgdHlwZWRlZgkgICBBbGxvY2F0b3IJ
CWFsbG9jYXRvcl90eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0
cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5
cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2lu
dGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0
eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0
eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXpl
X3R5cGU+KC0xKTsKcHJpdmF0ZToKICBSZXAgKnJlcCAoKSBjb25zdCB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PFJlcCAqPihkYXQpIC0gMTsgfQogIHZvaWQgcmVwdXAgKFJlcCAqcCkgeyByZXAg
KCktPnJlbGVhc2UgKCk7IGRhdCA9IHAtPmRhdGEgKCk7IH0KcHVibGljOgogIGNvbnN0IGNoYXJU
KiBkYXRhICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPmRhdGEoKTsgfQogIHNpemVfdHlw
ZSBsZW5ndGggKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+bGVuOyB9CiAgc2l6ZV90eXBl
IHNpemUgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+bGVuOyB9CiAgc2l6ZV90eXBlIGNh
cGFjaXR5ICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPnJlczsgfQogIHNpemVfdHlwZSBt
YXhfc2l6ZSAoKSBjb25zdAogICAgeyByZXR1cm4gKG5wb3MgLSAxKS9zaXplb2YgKGNoYXJUKTsg
fQkJIAogIGJvb2wgZW1wdHkgKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemUgKCkgPT0gMDsgfQog
IGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBiYXNpY19zdHJpbmcmIHN0cikKICAgIHsK
ICAgICAgaWYgKCZzdHIgIT0gdGhpcykgeyByZXAgKCktPnJlbGVhc2UgKCk7IGRhdCA9IHN0ci5y
ZXAgKCktPmdyYWIgKCk7IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogIGV4cGxpY2l0IGJh
c2ljX3N0cmluZyAoKTogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChj
b25zdCBiYXNpY19zdHJpbmcmIHN0cik6IGRhdCAoc3RyLnJlcCAoKS0+Z3JhYiAoKSkgeyB9CiAg
YmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6
ZV90eXBlIG4gPSBucG9zKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoc3Ry
LCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4p
CiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzLCBuKTsgfQogIGJhc2ljX3N0
cmluZyAoY29uc3QgY2hhclQqIHMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWdu
IChzKTsgfQogIGJhc2ljX3N0cmluZyAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICA6IGRhdCAo
bmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChuLCBjKTsgfQogIHRlbXBsYXRlPGNsYXNzIElucHV0
SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBJbnB1dEl0
ZXJhdG9yIF9fZW5kKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoX19iZWdp
biwgX19lbmQpOyB9CiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyByZXAgKCktPnJlbGVhc2UgKCk7
IH0KICB2b2lkIHN3YXAgKGJhc2ljX3N0cmluZyAmcykgeyBjaGFyVCAqZCA9IGRhdDsgZGF0ID0g
cy5kYXQ7IHMuZGF0ID0gZDsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBiYXNpY19z
dHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCgkJCXNpemVfdHlwZSBuID0gbnBvcykKICAg
IHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNf
c3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJu
IHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAo
Y29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBlbmQgKHMsIHRyYWl0czo6bGVuZ3RoIChz
KSk7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7
IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIG4sIGMpOyB9CiAgdGVtcGxhdGU8Y2xhc3Mg
SW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyYgYXBwZW5kKElucHV0SXRlcmF0b3IgZmly
c3QsIElucHV0SXRlcmF0b3IgbGFzdCkKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGllbmQgKCksIGll
bmQgKCksIGZpcnN0LCBsYXN0KTsgfQogIHZvaWQgcHVzaF9iYWNrKGNoYXJUIF9fYykKICB7IGFw
cGVuZCgxLCBfX2MpOyB9CiAgCiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0
cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQogICAg
eyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5n
JiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxh
Y2UgKDAsIG5wb3MsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJU
KiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFz
aWNfc3RyaW5nJiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVw
bGFjZSAoMCwgbnBvcywgbiwgYyk7IH0KICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgog
ICAgYmFzaWNfc3RyaW5nJiBhc3NpZ24oSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRv
ciBsYXN0KQogICAgeyByZXR1cm4gcmVwbGFjZSAoaWJlZ2luICgpLCBpZW5kICgpLCBmaXJzdCwg
bGFzdCk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY29uc3QgY2hhclQqIHMpCiAgICB7
IHJldHVybiBhc3NpZ24gKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNoYXJUIGMp
CiAgICB7IHJldHVybiBhc3NpZ24gKDEsIGMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9
IChjb25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAocmhzKTsgfQog
IGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBh
cHBlbmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBjKQogICAgeyBy
ZXR1cm4gYXBwZW5kICgxLCBjKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUg
cG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsCgkJCXNpemVfdHlwZSBwb3MyID0gMCwgc2l6
ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zMSwgMCwgc3RyLCBwb3My
LCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBjaGFy
VCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIHMsIG4pOyB9
CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIGNvbnN0IGNoYXJUKiBzKQog
ICAgeyByZXR1cm4gaW5zZXJ0IChwb3MsIHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNp
Y19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAg
ICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIG4sIGMpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0
ZXJhdG9yIHAsIGNoYXJUIGMpCiAgICB7IHNpemVfdHlwZSBfX28gPSBwIC0gaWJlZ2luICgpOwog
ICAgICBpbnNlcnQgKHAgLSBpYmVnaW4gKCksIDEsIGMpOyBzZWxmaXNoICgpOwogICAgICByZXR1
cm4gaWJlZ2luICgpICsgX19vOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIHNpemVf
dHlwZSBuLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAg
ICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCBuLCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJu
IGliZWdpbiAoKSArIF9fbzsgfQogIHRlbXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICB2
b2lkIGluc2VydChpdGVyYXRvciBwLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9y
IGxhc3QpCiAgICB7IHJlcGxhY2UgKHAsIHAsIGZpcnN0LCBsYXN0KTsgfQogIGJhc2ljX3N0cmlu
ZyYgZXJhc2UgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7IHJl
dHVybiByZXBsYWNlIChwb3MsIG4sIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyB9CiAgaXRlcmF0
b3IgZXJhc2UoaXRlcmF0b3IgcCkKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBiZWdpbigpOwog
ICAgICByZXBsYWNlIChfX28sIDEsIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyBzZWxmaXNoICgp
OwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRv
ciBmLCBpdGVyYXRvciBsKQogICAgeyBzaXplX3R5cGUgX19vID0gZiAtIGliZWdpbigpOwogICAg
ICByZXBsYWNlIChfX28sIGwtZiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7c2VsZmlzaCAoKTsK
ICAgICAgcmV0dXJuIGliZWdpbigpICsgX19vOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChz
aXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwKCQkJ
IHNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4yID0gbnBvcyk7CiAgYmFzaWNfc3RyaW5n
JiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLAoJ
CQkgc2l6ZV90eXBlIG4yKTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3Ms
IHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3Ms
IG4xLCBzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChz
aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYyk7CiAgYmFz
aWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykK
ICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgbiwgMSwgYyk7IH0KICBiYXNpY19zdHJpbmcmIHJl
cGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIp
CiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgc3RyKTsgfQog
IGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBj
aGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAo
KSwgaTIgLSBpMSwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkx
LCBpdGVyYXRvciBpMiwgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAt
IGliZWdpbiAoKSwgaTIgLSBpMSwgcyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJh
dG9yIGkxLCBpdGVyYXRvciBpMiwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiBy
ZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgbiwgYyk7IH0KICB0ZW1wbGF0ZTxjbGFz
cyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiByZXBsYWNlKGl0ZXJhdG9yIGkxLCBp
dGVyYXRvciBpMiwKCQkJICBJbnB1dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKTsKcHJp
dmF0ZToKICBzdGF0aWMgY2hhclQgZW9zICgpIHsgcmV0dXJuIHRyYWl0czo6ZW9zICgpOyB9CiAg
dm9pZCB1bmlxdWUgKCkgeyBpZiAocmVwICgpLT5yZWYgPiAxKSBhbGxvYyAobGVuZ3RoICgpLCB0
cnVlKTsgfQogIHZvaWQgc2VsZmlzaCAoKSB7IHVuaXF1ZSAoKTsgcmVwICgpLT5zZWxmaXNoID0g
dHJ1ZTsgfQpwdWJsaWM6CiAgY2hhclQgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIHBvcykgY29uc3QK
ICAgIHsKICAgICAgaWYgKHBvcyA9PSBsZW5ndGggKCkpCglyZXR1cm4gZW9zICgpOwogICAgICBy
ZXR1cm4gZGF0YSAoKVtwb3NdOwogICAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdIChzaXplX3R5
cGUgcG9zKQogICAgeyBzZWxmaXNoICgpOyByZXR1cm4gKCpyZXAgKCkpW3Bvc107IH0KICByZWZl
cmVuY2UgYXQgKHNpemVfdHlwZSBwb3MpCiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVu
Z3RoICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDAp
IDsKICAgICAgcmV0dXJuICgqdGhpcylbcG9zXTsKICAgIH0KICBjb25zdF9yZWZlcmVuY2UgYXQg
KHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3Ro
ICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsK
ICAgICAgcmV0dXJuIGRhdGEgKClbcG9zXTsKICAgIH0KcHJpdmF0ZToKICB2b2lkIHRlcm1pbmF0
ZSAoKSBjb25zdAogICAgeyB0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW2xlbmd0aCAoKV0sIGVv
cyAoKSk7IH0KcHVibGljOgogIGNvbnN0IGNoYXJUKiBjX3N0ciAoKSBjb25zdAogICAgeyBpZiAo
bGVuZ3RoICgpID09IDApIHJldHVybiAiIjsgdGVybWluYXRlICgpOyByZXR1cm4gZGF0YSAoKTsg
fQogIHZvaWQgcmVzaXplIChzaXplX3R5cGUgbiwgY2hhclQgYyk7CiAgdm9pZCByZXNpemUgKHNp
emVfdHlwZSBuKQogICAgeyByZXNpemUgKG4sIGVvcyAoKSk7IH0KICB2b2lkIHJlc2VydmUgKHNp
emVfdHlwZSkgeyB9CiAgc2l6ZV90eXBlIGNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6
ZV90eXBlIHBvcyA9IDApIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kIChjb25zdCBiYXNpY19zdHJp
bmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChzdHIu
ZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZCAoY29uc3QgY2hh
clQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmlu
ZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4g
ZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmQgKGNo
YXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0
IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0
dXJuIHJmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUg
cmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7
CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3Mp
IGNvbnN0CiAgICB7IHJldHVybiByZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9
CiAgc2l6ZV90eXBlIHJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7
CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXpl
X3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfb2YgKHN0ci5kYXRh
KCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25z
dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlw
ZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0
CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7
IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDAp
IGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChjLCBwb3MpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFz
dF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25z
dAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgo
KSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0
IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRf
bGFzdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRf
bGFzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVy
biByZmluZCAoYywgcG9zKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3Qg
YmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4g
ZmluZF9maXJzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNp
emVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3Ms
IHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0
IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmly
c3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmlu
ZF9maXJzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKICBzaXpl
X3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlw
ZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X25vdF9vZiAoc3RyLmRh
dGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2Yg
KGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6
ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0g
bnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRz
OjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBz
aXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CiAgYmFzaWNfc3RyaW5nIHN1YnN0ciAoc2l6ZV90
eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGJhc2lj
X3N0cmluZyAoKnRoaXMsIHBvcywgbik7IH0KICBpbnQgY29tcGFyZSAoY29uc3QgYmFzaWNfc3Ry
aW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0Owog
ICAKICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw
ZSBuKSBjb25zdDsKICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3Mg
PSAwKSBjb25zdAogICAgeyByZXR1cm4gY29tcGFyZSAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAo
cykpOyB9CiAgaXRlcmF0b3IgYmVnaW4gKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigqdGhpcylb
MF07IH0KICBpdGVyYXRvciBlbmQgKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigqdGhpcylbbGVu
Z3RoICgpXTsgfQpwcml2YXRlOgogIGl0ZXJhdG9yIGliZWdpbiAoKSBjb25zdCB7IHJldHVybiAm
KCpyZXAgKCkpWzBdOyB9CiAgaXRlcmF0b3IgaWVuZCAoKSBjb25zdCB7IHJldHVybiAmKCpyZXAg
KCkpW2xlbmd0aCAoKV07IH0KcHVibGljOgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0
IHsgcmV0dXJuIGliZWdpbiAoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCB7IHJl
dHVybiBpZW5kICgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciAgICAgICByYmVnaW4oKSB7IHJldHVy
biByZXZlcnNlX2l0ZXJhdG9yIChlbmQgKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy
YmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgp
KTsgfQogIHJldmVyc2VfaXRlcmF0b3IgICAgICAgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRl
cmF0b3IgKGJlZ2luICgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0
CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KcHJpdmF0
ZToKICB2b2lkIGFsbG9jIChzaXplX3R5cGUgc2l6ZSwgYm9vbCBzYXZlKTsKICBzdGF0aWMgc2l6
ZV90eXBlIF9maW5kIChjb25zdCBjaGFyVCogcHRyLCBjaGFyVCBjLCBzaXplX3R5cGUgeHBvcywg
c2l6ZV90eXBlIGxlbik7CiAgaW5saW5lIGJvb2wgY2hlY2tfcmVhbGxvYyAoc2l6ZV90eXBlIHMp
IGNvbnN0OwogIHN0YXRpYyBSZXAgbmlsUmVwOwogIGNoYXJUICpkYXQ7Cn07CnRlbXBsYXRlIDxj
bGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IHRlbXBsYXRlIDxjbGFz
cyBJbnB1dEl0ZXJhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKGl0ZXJh
dG9yIGkxLCBpdGVyYXRvciBpMiwgSW5wdXRJdGVyYXRvciBqMSwgSW5wdXRJdGVyYXRvciBqMikK
ewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgc2l6ZV90eXBlIHBvcyA9IGkx
IC0gaWJlZ2luICgpOwogIHNpemVfdHlwZSBuMSA9IGkyIC0gaTE7CiAgc2l6ZV90eXBlIG4yID0g
ajIgLSBqMTsKICBkbyB7IGlmICggcG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBs
ZW4iKTsgfSB3aGlsZSAoMCkgOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0g
cG9zOwogIGRvIHsgaWYgKCBsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBfX2xlbmd0aF9l
cnJvciAoImxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgwKSA7CiAgc2l6
ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7CiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikp
CiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5
ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBv
cyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2oxLCAr
K3BvcykKCXRyYWl0czo6YXNzaWduICgoKnApW3Bvc10sICpqMSk7CiAgICAgIHJlcHVwIChwKTsK
ICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkg
KyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytq
MSwgKytwb3MpCgl0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW3Bvc10sICpqMSk7CiAgICB9CiAg
cmVwICgpLT5sZW4gPSBuZXdsZW47CiAgcmV0dXJuICp0aGlzOwp9CnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVy
biBzdHI7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVy
YXRvcisgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNoYXJU
IGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMp
CnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyICgxLCBsaHMp
OwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBl
bmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiBsaHMsIGNoYXJUIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAoMSwgcmhzKTsKICByZXR1
cm4gc3RyOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA9
PSAwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj09IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhz
LmNvbXBhcmUgKGxocykgPT0gMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMp
CnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9CnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9y
IT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSAhPSAwKTsKfQp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxp
bmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUg
KHJocykgIT0gMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo
cykgPCAwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChy
aHMuY29tcGFyZSAobGhzKSA+IDApOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPCAoY29uc3QgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMp
CnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpIDwgMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+
IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
Ym9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhz
KSA+IDApOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChy
aHMuY29tcGFyZSAobGhzKSA+PSAwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJo
cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0
b3I+PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpIDw9IDApOwp9
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu
bGluZSBib29sCm9wZXJhdG9yPj0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFy
ZSAocmhzKSA+PSAwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUg
KHJocykgIT0gMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhz
KSA+IDApOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8
PSAwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0g
MCk7Cn0KY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gaXN0cmVhbSYKb3BlcmF0b3I+PiAoaXN0
cmVhbSYsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBvc3RyZWFtJgpv
cGVyYXRvcjw8IChvc3RyZWFtJiwgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+Jik7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+IGlzdHJlYW0mCmdldGxpbmUgKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mLCBjaGFyVCBkZWxpbSA9ICdcbicpOwp9ICAKIyAxICIvYW9s
bmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgMSAzCmV4dGVybiAi
QysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmlubGluZSB2b2lkICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjpSZXA6OgpvcGVyYXRvciBuZXcgKHNpemVfdCBzLCBzaXplX3QgZXh0cmEpCnsKICByZXR1cm4g
QWxsb2NhdG9yOjphbGxvY2F0ZShzICsgZXh0cmEgKiBzaXplb2YgKGNoYXJUKSk7Cn0KdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZv
aWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRv
ciBkZWxldGUgKHZvaWQgKiBwdHIpCnsKICBBbGxvY2F0b3I6OmRlYWxsb2NhdGUocHRyLCBzaXpl
b2YoUmVwKSArCgkJCXJlaW50ZXJwcmV0X2Nhc3Q8UmVwICo+KHB0ciktPnJlcyAqCgkJCXNpemVv
ZiAoY2hhclQpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgc2l6ZV90IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6UmVwOjoKZnJvYl9zaXplIChzaXplX3QgcykKewogIHNpemVfdCBpID0gMTY7CiAg
d2hpbGUgKGkgPCBzKSBpICo9IDI7CiAgcmV0dXJuIGk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwICoKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpSZXA6OgpjcmVhdGUgKHNpemVfdCBleHRyYSkKewogIGV4dHJhID0gZnJv
Yl9zaXplIChleHRyYSArIDEpOwogIFJlcCAqcCA9IG5ldyAoZXh0cmEpIFJlcDsKICBwLT5yZXMg
PSBleHRyYTsKICBwLT5yZWYgPSAxOwogIHAtPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4gcDsK
fQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpj
aGFyVCAqIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY2xv
bmUgKCkKewogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOwogIHAtPmNvcHkgKDAsIGRhdGEg
KCksIGxlbik7CiAgcC0+bGVuID0gbGVuOwogIHJldHVybiBwLT5kYXRhICgpOwp9CnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29s
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKZXhjZXNzX3Ns
b3AgKHNpemVfdCBzLCBzaXplX3QgcikKewogIHJldHVybiAyICogKHMgPD0gMTYgPyAxNiA6IHMp
IDwgcjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OgpjaGVja19yZWFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBzKSBjb25zdAp7CiAgcyAr
PSBzaXplb2YgKGNoYXJUKTsKICByZXAgKCktPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4gKHJl
cCAoKS0+cmVmID4gMQoJICB8fCBzID4gY2FwYWNpdHkgKCkKCSAgfHwgUmVwOjpleGNlc3Nfc2xv
cCAocywgY2FwYWNpdHkgKCkpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6CmFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBfX3NpemUsIGJvb2wgX19z
YXZlKQp7CiAgaWYgKCEgY2hlY2tfcmVhbGxvYyAoX19zaXplKSkKICAgIHJldHVybjsKICBSZXAg
KnAgPSBSZXA6OmNyZWF0ZSAoX19zaXplKTsKICBpZiAoX19zYXZlKQogICAgewogICAgICBwLT5j
b3B5ICgwLCBkYXRhICgpLCBsZW5ndGggKCkpOwogICAgICBwLT5sZW4gPSBsZW5ndGggKCk7CiAg
ICB9CiAgZWxzZQogICAgcC0+bGVuID0gMDsKICByZXB1cCAocCk7Cn0KdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLAoJIGNvbnN0IGJh
c2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zMiwgc2l6ZV90eXBlIG4yKQp7CiAgY29uc3Qg
c2l6ZV90IGxlbjIgPSBzdHIubGVuZ3RoICgpOwogIGlmIChwb3MxID09IDAgJiYgbjEgPj0gbGVu
Z3RoICgpICYmIHBvczIgPT0gMCAmJiBuMiA+PSBsZW4yKQogICAgcmV0dXJuIG9wZXJhdG9yPSAo
c3RyKTsKICBkbyB7IGlmICggcG9zMiA+IGxlbjIgKSBfX291dF9vZl9yYW5nZSAoInBvczIgPiBs
ZW4yIik7IH0gd2hpbGUgKDApIDsKICBpZiAobjIgPiBsZW4yIC0gcG9zMikKICAgIG4yID0gbGVu
MiAtIHBvczI7CiAgcmV0dXJuIHJlcGxhY2UgKHBvczEsIG4xLCBzdHIuZGF0YSAoKSArIHBvczIs
IG4yKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OlJlcDo6CmNvcHkgKHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlm
IChuKQogICAgdHJhaXRzOjpjb3B5IChkYXRhICgpICsgcG9zLCBzLCBuKTsKfQp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm1vdmUgKHNpemVf
dCBwb3MsIGNvbnN0IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRzOjpt
b3ZlIChkYXRhICgpICsgcG9zLCBzLCBuKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxh
Y2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlw
ZSBuMikKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgZG8geyBpZiAoIHBv
cyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0gd2hpbGUgKDApIDsKICBp
ZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICBkbyB7IGlmICggbGVuIC0g
bjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1heF9z
aXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkgOwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSAr
IG4yOwogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAgPSBS
ZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsKICAg
ICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4x
KSk7CiAgICAgIHAtPmNvcHkgKHBvcywgcywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9CiAg
ZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsg
bjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPmNvcHkgKHBvcywgcywgbjIpOwog
ICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwogIHJldHVybiAqdGhpczsKfQp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CnNldCAoc2l6ZV90
IHBvcywgY29uc3QgY2hhclQgYywgc2l6ZV90IG4pCnsKICB0cmFpdHM6OnNldCAgKGRhdGEgKCkg
KyBwb3MsIGMsIG4pOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJUIGMpCnsKICBjb25zdCBzaXpl
X3QgbGVuID0gbGVuZ3RoICgpOwogIGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5n
ZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAg
bjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiAp
IF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUg
KDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKICBpZiAoY2hlY2tfcmVhbGxv
YyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAg
ICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBk
YXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBwLT5zZXQgIChwb3Ms
IGMsIG4yKTsKICAgICAgcmVwdXAgKHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgp
LT5tb3ZlIChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsK
ICAgICAgcmVwICgpLT5zZXQgIChwb3MsIGMsIG4yKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5l
d2xlbjsKICByZXR1cm4gKnRoaXM7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj46OgpyZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQp7CiAgZG8geyBpZiAoIG4g
PiBtYXhfc2l6ZSAoKSApIF9fbGVuZ3RoX2Vycm9yICgibiA+IG1heF9zaXplICgpIik7IH0gd2hp
bGUgKDApIDsKICBpZiAobiA+IGxlbmd0aCAoKSkKICAgIGFwcGVuZCAobiAtIGxlbmd0aCAoKSwg
Yyk7CiAgZWxzZQogICAgZXJhc2UgKG4pOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6CmNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcykgY29uc3QKewog
IGRvIHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0
aCAoKSIpOyB9IHdoaWxlICgwKSA7CiAgaWYgKG4gPiBsZW5ndGggKCkgLSBwb3MpCiAgICBuID0g
bGVuZ3RoICgpIC0gcG9zOwogIHRyYWl0czo6Y29weSAocywgZGF0YSAoKSArIHBvcywgbik7CiAg
cmV0dXJuIG47Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5
cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY29uc3Qg
Y2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhw
b3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgKyBuIDw9IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYg
KHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0
YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z
Owp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlw
ZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpfZmluZCAoY29uc3Qg
Y2hhclQqIHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pCnsKICBm
b3IgKDsgeHBvcyA8IGxlbjsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKHB0ciBbeHBvc10s
IGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46OgpmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAg
cmV0dXJuIF9maW5kIChkYXRhICgpLCBjLCBwb3MsIGxlbmd0aCAoKSk7Cn0KdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9z
LCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChuID4gbGVuZ3RoICgpKQogICAgcmV0dXJuIG5w
b3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSBuOwogIGlmICh4cG9zID4gcG9zKQogICAg
eHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDsgKQogICAgaWYgKHRyYWl0czo6
ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHhw
b3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9CnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9z
KSBjb25zdAp7CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsKICBzaXplX3Qg
eHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwog
IGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAoKSBb
eHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBm
b3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9maW5kIChzLCBkYXRhICgp
IFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7
Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X29mIChjb25zdCBj
aGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3Ro
KCkgPT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsK
ICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+
IDA7KQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAg
ICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj
bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+OjoKZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9z
LCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9z
IDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAw
LCBuKSA9PSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6
ZV90eXBlIHBvcykgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwg
bGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMp
KQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVy
biBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykK
ICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5k
IChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAg
cmV0dXJuIG5wb3M7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXpl
X3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0
X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIGlmIChsZW5ndGgoKSA9
PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlm
ICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDsp
CiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBv
czsKICByZXR1cm4gbnBvczsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjoKY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MsIHNp
emVfdHlwZSBuKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAoKSApIF9fb3V0X29m
X3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICBzaXplX3QgcmxlbiA9
IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVuID0gbjsKICBpZiAocmxl
biA+IHN0ci5sZW5ndGggKCkpCiAgICBybGVuID0gc3RyLmxlbmd0aCAoKTsKICBpbnQgciA9IHRy
YWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgc3RyLmRhdGEgKCksIHJsZW4pOwogIGlmIChy
ICE9IDApCiAgICByZXR1cm4gcjsKICBpZiAocmxlbiA9PSBuKQogICAgcmV0dXJuIDA7CiAgcmV0
dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gc3RyLmxlbmd0aCAoKTsKfQp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAo
KSApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICBz
aXplX3QgcmxlbiA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVuID0g
bjsKICBpbnQgciA9IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgcywgcmxlbik7CiAg
aWYgKHIgIT0gMCkKICAgIHJldHVybiByOwogIHJldHVybiAobGVuZ3RoICgpIC0gcG9zKSAtIG47
Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K
aXN0cmVhbSAmCm9wZXJhdG9yPj4gKGlzdHJlYW0gJmlzLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4gJnMpCnsKICBpbnQgdyA9IGlzLndpZHRoICgwKTsKICBpZiAoaXMu
aXBmeDAgKCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIHN0cmVhbWJ1ZiAqc2IgPSBpcy5yZGJ1ZiAo
KTsKICAgICAgcy5yZXNpemUgKDApOwogICAgICB3aGlsZSAoMSkKCXsKCSAgaW50IGNoID0gc2It
PnNidW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsKCSAgICAgIGlzLnNldHN0YXRl
IChpb3M6OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9CgkgIGVsc2UgaWYgKHRyYWl0czo6
aXNfZGVsIChjaCkpCgkgICAgewoJICAgICAgc2ItPnN1bmdldGMgKCk7CgkgICAgICBicmVhazsK
CSAgICB9CgkgIHMgKz0gc3RhdGljX2Nhc3Q8Y2hhclQ+IChjaCk7CgkgIGlmICgtLXcgPT0gMSkK
CSAgICBicmVhazsKCX0KICAgIH0KICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0aCAoKSA9PSAw
KQogICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CiAgcmV0dXJuIGlzOwp9CnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cm9zdHJlYW0gJgpv
cGVyYXRvcjw8IChvc3RyZWFtICZvLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mIHMpCnsKICByZXR1cm4gby53cml0ZSAocy5kYXRhICgpLCBzLmxlbmd0aCAo
KSk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgcywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMuaXBmeDEgKCkpCiAg
ICB7CiAgICAgIF9HX3NpemVfdCAgY291bnQgPSAwOwogICAgICBzdHJlYW1idWYgKnNiID0gaXMu
cmRidWYgKCk7CiAgICAgIHMucmVzaXplICgwKTsKICAgICAgd2hpbGUgKDEpCgl7CgkgIGludCBj
aCA9IHNiLT5zYnVtcGMgKCk7CgkgIGlmIChjaCA9PSAoLTEpICkKCSAgICB7CgkgICAgICBpcy5z
ZXRzdGF0ZSAoY291bnQgPT0gMAoJCQkgICA/IChpb3M6OmZhaWxiaXR8aW9zOjplb2ZiaXQpCgkJ
CSAgIDogaW9zOjplb2ZiaXQpOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICArK2NvdW50OwoJICBp
ZiAoY2ggPT0gZGVsaW0pCgkgICAgYnJlYWs7CgkgIHMgKz0gc3RhdGljX2Nhc3Q8Y2hhclQ+IChj
aCk7CgkgIGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQoJICAgIHsKCSAgICAgIGlzLnNl
dHN0YXRlIChpb3M6OmZhaWxiaXQpOwoJICAgICAgYnJlYWs7CgkgICAgfQoJfQogICAgfQogICAK
ICAgCiAgaXMuaXNmeCAoKTsKICByZXR1cm4gaXM7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj
bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpSZXAKYmFzaWNfc3RyaW5nPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
Om5pbFJlcCA9IHsgMCwgMCwgMSwgZmFsc2UgfTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpucG9zOwp9ICAKIyA2NTUgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2dj
Yy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwojIDYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2dj
Yy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RyaW5nIiAyIDMKZXh0ZXJuICJDKysiIHsKdHlwZWRlZiBiYXNpY19zdHJpbmcgPGNoYXI+
IHN0cmluZzsKfSAgCiMgMiAidG0uQyIgMgojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvbWFwIiAxIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF90
cmVlLmgiIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw
Yy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29i
YXNlLmgiIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw
Yy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3BhaXIu
aCIgMSAzCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5
cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7CiAgX1QxIGZp
cnN0OwogIF9UMiBzZWNvbmQ7CiAgcGFpcigpIDogZmlyc3QoX1QxKCkpLCBzZWNvbmQoX1QyKCkp
IHt9CiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwg
c2Vjb25kKF9fYikge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihj
b25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Au
c2Vjb25kKSB7fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25k
ID09IF9feS5zZWNvbmQ7IAp9CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5l
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1Qx
LCBfVDI+JiBfX3kpCnsgCiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fCAKICAgICAg
ICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7
IAp9CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHBhaXI8X1QxLCBfVDI+
IG1ha2VfcGFpcihjb25zdCBfVDEmIF9feCwgY29uc3QgX1QyJiBfX3kpCnsKICByZXR1cm4gcGFp
cjxfVDEsIF9UMj4oX194LCBfX3kpOwp9CiMgNDIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvdHlwZV90cmFpdHMuaCIgMSAzCnN0cnVjdCBfX3RydWVfdHlwZSB7Cn07CnN0cnVjdCBf
X2ZhbHNlX3R5cGUgewp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0
cyB7IAogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgICB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2Jl
X2ZpcnN0OwogICAgICAgICAgICAgICAgICAgIAogICAgCiAgIHR5cGVkZWYgX19mYWxzZV90eXBl
ICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBl
ICAgIGlzX1BPRF90eXBlOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29s
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVtcGxhdGU8PiAgc3Ry
dWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5
cGU7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVtcGxhdGU8PiAgc3RydWN0IF9f
dHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E
X3R5cGU7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190
eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07
CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlw
ZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVt
cGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFp
dHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CnRlbXBsYXRl
PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGlzX1BPRF90eXBlOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxs
b25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9Owp0ZW1wbGF0
ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CnRlbXBs
YXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaXNfUE9EX3R5cGU7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcg
ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaXNfUE9EX3R5cGU7Cn07CiMgMjk1ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9n
Y2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3R5cGVfdHJhaXRzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRl
Z2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07CnRlbXBsYXRlPD4gIHN0
cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWdu
ZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9Owp0ZW1wbGF0ZTw+
ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg
X0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
dGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdl
cjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKdGVtcGxhdGU8PiAg
c3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewogIHR5
cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2lu
dGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1
bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
IyA0NSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQKIyAxOSAiL2FvbG5ldC9wa2cvZ2Nj
LTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9z
dHJpbmcuaCIgMyA0CiMgMjQzICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0cmluZy5oIiAzIDQKIyA0OCAiL2Fv
bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2Fv
bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1
LjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xp
Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N5c2xpbWl0cy5o
IiAxIDMgNAojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1p
Ym0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTE0ICIvYW9sbmV0
L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9p
bmNsdWRlL2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMg
MTE3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMu
Mi41LzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDcgIi9hb2xuZXQvcGtnL2djYy0y
Ljk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3lz
bGltaXRzLmgiIDIgMyA0CiMgMTEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CiMgNDkg
Ii9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEg
Ii9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIvYW9sbmV0L3BrZy9nY2MtMi45
NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAzIDQKIyA1MSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBj
LWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jh
c2UuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBj
LWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9uZXcuaCIgMSAzIDQKIyAxICIvYW9sbmV0L3Br
Zy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNs
dWRlL25ldyIgMSAzIDQKI3ByYWdtYSBpbnRlcmZhY2UgIm5ldyIKIyAxICIvYW9sbmV0L3BrZy9n
Y2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMgNAojIDM0MiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CiMgOCAi
L2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8y
Ljk1LjMvaW5jbHVkZS9uZXciIDIgMyA0CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIv
Z2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9leGNlcHRpb24iIDEg
MyA0CiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24iCmV4dGVybiAiQysrIiB7Cm5hbWVzcGFj
ZSBzdGQgewpjbGFzcyBleGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZp
cnR1YWwgfmV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29u
c3Q7Cn07CmNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uIHsKcHVibGljOgog
IGJhZF9leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbiAoKSB7IH0KfTsK
dHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwp0eXBlZGVmIHZvaWQgKCp1bmV4
cGVjdGVkX2hhbmRsZXIpICgpOwp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJt
aW5hdGVfaGFuZGxlcik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hh
bmRsZXIpOwp2b2lkIHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
Owpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAoKTsKfSAgCn0gIAojIDkgIi9hb2xuZXQvcGtnL2dj
Yy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUv
bmV3IiAyIDMgNApleHRlcm4gIkMrKyIgewpuYW1lc3BhY2Ugc3RkIHsKICBjbGFzcyBiYWRfYWxs
b2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKICBzdHJ1
Y3Qgbm90aHJvd190IHt9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBl
ZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIg
KG5ld19oYW5kbGVyKTsKfSAgCnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90KSB0aHJvdyAoc3Rk
OjpiYWRfYWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90KSB0aHJvdyAoc3RkOjpi
YWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9w
ZXJhdG9yIGRlbGV0ZVtdICh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6
ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1td
IChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBk
ZWxldGUgKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKaW5s
aW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0
dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKnBs
YWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0gIAojIDYgIi9hb2xuZXQvcGtnL2djYy0y
Ljk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvbmV3
LmgiIDIgMyA0CnVzaW5nIHN0ZDo6bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5k
bGVyOwojIDUyICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJt
LWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5o
IiAyIDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIs
IGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9G
b3J3YXJkSXRlcjIgX19iLCBfVHAqKSB7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9f
YjsKICAqX19iID0gX190bXA7Cn0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNz
IF9Gb3J3YXJkSXRlcjI+CmlubGluZSB2b2lkIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwg
X0ZvcndhcmRJdGVyMiBfX2IpIHsKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBl
KCBfX2EgKSApOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIHN3YXAoX1RwJiBf
X2EsIF9UcCYgX19iKSB7CiAgX1RwIF9fdG1wID0gX19hOwogIF9fYSA9IF9fYjsKICBfX2IgPSBf
X3RtcDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3Qg
X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9f
YTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1Rw
JiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuICBfX2EgPCBfX2IgPyBfX2IgOiBfX2E7
Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAm
IG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewog
IHJldHVybiBfX2NvbXAoX19iLCBfX2EpID8gX19iIDogX19hOwp9CnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9fYSwg
X19iKSA/IF9fYiA6IF9fYTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091
dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0
X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVy
biBfX3Jlc3VsdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9P
dXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlcgpfX2NvcHkoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFu
Y2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsg
LS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytf
X3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu
bGluZSBfVHAqCl9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf
X2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXpl
b2YoX1RwKSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz
dCAtIF9fZmlyc3QpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoIHsKICBzdGF0aWMg
X091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdv
cnkgX0NhdGVnb3J5OwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICByZXR1cm4gX19jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHQsIF9DYXRlZ29yeSgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9
Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPF9UcCosIF9UcCos
IF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNv
bnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3RyaXZp
YWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7
CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0
LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCk7CiAgfQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46
OnZhbHVlX3R5cGUgX1RwOwogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojpo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1
cm4gX19jb3B5X2Rpc3BhdGNoPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyLCBfVHJpdmlhbD4KICAg
IDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQojIDIxMyAiL2FvbG5ldC9wa2cv
Z2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwgCiAgICAgICAgICBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2Fy
ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlKikKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICotLV9f
cmVzdWx0ID0gKi0tX19sYXN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewog
IGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQog
ICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAog
ICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNo
CnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIx
Pjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAg
ICAgICAgIF9EaXN0YW5jZTsKICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMiBjb3B5KF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5
X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9DYXQoKSwgKF9EaXN0YW5jZSop
IDApOwogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9k
aXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29u
c3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAg
Y29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jl
c3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1cm4gX19y
ZXN1bHQgLSBfTnVtOwogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9i
YWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRp
YyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBf
X3Jlc3VsdCkgewogICAgcmV0dXJuICBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1Rw
KiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK
ICB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPgppbmxpbmUgX0JJMiBjb3B5
X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpIHsKICB0
eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
STI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYmFj
a3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgOjpjb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9CiMgMzAzICIvYW9sbmV0L3BrZy9nY2MtMi45
NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX091dHB1
dEl0ZXI+IF9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykg
ewogIGZvciAoIDsgX19jb3VudCA+IDA7IC0tX19jb3VudCkgewogICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gcGFpcjxf
SW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4oX19maXJzdCwgX19yZXN1bHQpOwp9CnRlbXBsYXRlIDxj
bGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWly
PF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJdGVyIF9fZmlyc3QsIF9TaXplIF9f
Y291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7
CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+KF9fbGFzdCwgY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1
dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1
dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSAp
Owp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1
dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpjb3B5X24oX0lucHV0
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHJl
dHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCk7Cn0KdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQp0
ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRw
dXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYg
X192YWx1ZSkgewogIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2Zp
cnN0ID0gX192YWx1ZTsKICByZXR1cm4gX19maXJzdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4g
bWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpIHsKICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3Qx
OwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0
ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg
Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CnBhaXI8X0lucHV0SXRl
cjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5
X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2Zp
cnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0
MSwgX19maXJzdDIpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0
SXRlcjI+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZv
ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlm
ICgqX19maXJzdDEgIT0gKl9fZmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRy
dWU7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xh
c3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBmb3IgKCA7IF9fZmly
c3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoIV9fYmluYXJ5
X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJu
IHRydWU7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4K
Ym9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmly
c3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsK
ICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAg
cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFy
ZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgewog
ICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwog
ICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsK
ICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsK
fQppbmxpbmUgYm9vbCAKbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hh
ciogX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f
Zmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh
c3QyKQp7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBjb25z
dCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3Vs
dCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogIHJl
dHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwp9Cmlu
bGluZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBj
b25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewogIHJldHVybiBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZSgoY29uc3QgdW5zaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFy
KikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNp
Z25lZCBjaGFyKikgX19sYXN0Mik7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikK
ewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsK
ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAg
ICsrX19maXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4g
IShfX2ZpcnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9
CmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVk
IGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEg
PSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIg
LSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmly
c3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVz
dWx0IAogICAgICAgICAgICAgICAgICAgICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9f
bGVuMSA8IF9fbGVuMiA/IC0xIDogMSkpOwp9CmlubGluZSBpbnQgCl9fbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25z
dCBjaGFyKiBfX2xhc3QyKQp7CiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dh
eSgoY29uc3QgdW5zaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBf
X2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1
bnNpZ25lZCBjaGFyKikgX19sYXN0Mik7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
bGFzcyBfSW5wdXRJdGVyMj4KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7
CiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19sYXN0
MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9CiMgNTYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2Nj
LWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfY29uc3RydWN0LmgiIDEgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBk
ZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+X1RwKCk7Cn0KdGVtcGxhdGUg
PGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNv
bnN0IF9UMiYgX192YWx1ZSkgewogIG5ldyAoX19wKSBfVDEoX192YWx1ZSk7Cn0KdGVtcGxhdGUg
PGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3IChfX3Ap
IF9UMSgpOwp9CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZApf
X2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QsIF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkKICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4KaW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9y
d2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkge30KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3IsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAg
X1RyaXZpYWxfZGVzdHJ1Y3RvcjsKICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1Ry
aXZpYWxfZGVzdHJ1Y3RvcigpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K
aW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
cmF0b3IgX19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBl
KCBfX2ZpcnN0ICkgKTsKfQppbmxpbmUgdm9pZCBkZXN0cm95KGNoYXIqLCBjaGFyKikge30KaW5s
aW5lIHZvaWQgZGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJfdCopIHt9CiMgNTggIi9hb2xuZXQvcGtn
L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2Nj
LTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGxfZnVuY3Rpb24uaCIgMSAzCnRlbXBsYXRlIDxjbGFzcyBfQXJn
LCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBh
cmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKdGVtcGxhdGUg
PGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9m
dW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYg
X0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBl
Owp9OyAgICAgIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9Owp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
VHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAg
X1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl
dHVybiBfX3ggKiBfX3k7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7
IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KHBs
dXM8X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5l
IF9UcCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJldHVybiBfVHAoMSk7
Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfVHAsX1RwPiAKewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07CnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4g
CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsg
fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07CnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv
bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw
LGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194IDwgX195OyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2Vx
dWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
Pj0gX195OyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsg
fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAh
X194OyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUK
ICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90
eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBl
eHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194
KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVu
dF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKdGVt
cGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4g
Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxf
UHJlZGljYXRlPihfX3ByZWQpOwp9CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiAKY2xhc3Mg
YmluYXJ5X25lZ2F0ZSAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRp
Y2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGlj
OgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3By
ZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpm
aXJzdF9hcmd1bWVudF90eXBlJiBfX3gsIAogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFt
ZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBjb25zdAogIHsKICAgIHJl
dHVybiAhX01fcHJlZChfX3gsIF9feSk7IAogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNh
dGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+IApub3QyKGNvbnN0IF9QcmVkaWNh
dGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7
Cn0KdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+IApjbGFzcyBiaW5kZXIxc3QKICA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRf
dHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9P
cGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly
c3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0
eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5h
bWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0
dXJuIG9wKHZhbHVlLCBfX3gpOyAKICB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBj
bGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4gCmJpbmQxc3QoY29uc3QgX09w
ZXJhdGlvbiYgX19vcGVyLCBjb25zdCBfVHAmIF9feCkgCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9P
cGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVy
MXN0PF9PcGVyYXRpb24+KF9fb3BlciwgX0FyZzFfdHlwZShfX3gpKTsKfQp0ZW1wbGF0ZSA8Y2xh
c3MgX09wZXJhdGlvbj4gCmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVk
OgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50
X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAog
ICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlw
ZSYgX195KSAKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246
OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFs
dWUpOyAKICB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGlu
ZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4gCmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19vcGVy
LCBjb25zdCBfVHAmIF9feCkgCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29u
ZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9u
PihfX29wZXIsIF9BcmcyX3R5cGUoX194KSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24x
LCBjbGFzcyBfT3BlcmF0aW9uMj4KY2xhc3MgdW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gCnsKcHJv
dGVjdGVkOgogIF9PcGVyYXRpb24xIF9fb3AxOwogIF9PcGVyYXRpb24yIF9fb3AyOwpwdWJsaWM6
CiAgdW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9u
MiYgX195KSAKICAgIDogX19vcDEoX194KSwgX19vcDIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVy
YXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv
bjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9fb3AxKF9fb3AyKF9f
eCkpOwogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9u
Mj4KaW5saW5lIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+IApjb21wb3Nl
MShjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMikKewog
IHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX29wMSwgX19v
cDIpOwp9CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNs
YXNzIF9PcGVyYXRpb24zPgpjbGFzcyBiaW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0
ZWQ6CiAgX09wZXJhdGlvbjEgX01fb3AxOwogIF9PcGVyYXRpb24yIF9NX29wMjsKICBfT3BlcmF0
aW9uMyBfTV9vcDM7CnB1YmxpYzoKICBiaW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYg
X194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195LCAKICAgICAgICAgICAgICAgICBjb25zdCBfT3Bl
cmF0aW9uMyYgX196KSAKICAgIDogX01fb3AxKF9feCksIF9NX29wMihfX3kpLCBfTV9vcDMoX196
KSB7IH0KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNv
bnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBfTV9vcDEoX01fb3AyKF9feCksIF9NX29wMyhfX3gpKTsKICB9Cn07CnRlbXBsYXRl
IDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24z
PgppbmxpbmUgYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRpb24yLCBfT3BlcmF0
aW9uMz4gCmNvbXBvc2UyKGNvbnN0IF9PcGVyYXRpb24xJiBfX29wMSwgY29uc3QgX09wZXJhdGlv
bjImIF9fb3AyLCAKICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9fb3AzKQp7CiAgcmV0dXJu
IGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yLF9PcGVyYXRpb24zPgogICAg
KF9fb3AxLCBfX29wMiwgX19vcDMpOwp9CnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVz
dWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9Bcmcp
OwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9p
bnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194
KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRy
KF9feCk7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBw
b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAo
Kl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBf
UmVzdWx0PihfX3gpOwp9CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNz
IF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDogCiAgcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1
bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5
X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9S
ZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIAogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBf
UmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0
dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xh
c3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlv
bjxfQXJnMSxfQXJnMixfUmVzdWx0PiAKcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0Fy
ZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S
ZXN1bHQ+KF9feCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9U
cD4gc3RydWN0IGlkZW50aXR5IDogcHVibGljIF9JZGVudGl0eTxfVHA+IHt9Owp0ZW1wbGF0ZSA8
Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Q
YWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIGNvbnN0IHR5cGVuYW1lIF9QYWly
OjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfX3guZmlyc3Q7CiAgfQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2Vs
ZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vj
b25kX3R5cGU+CnsKICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9y
KCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9
Owp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVj
dDFzdDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6
IHB1YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFz
cyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJn
MSwgX0FyZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBj
b25zdCBfQXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy
ZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+IHsKICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9Bcmcx
JiwgY29uc3QgX0FyZzImIF9feSkgY29uc3QgeyByZXR1cm4gX195OyB9Cn07CnRlbXBsYXRlIDxj
bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+IApzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJv
amVjdDFzdDxfQXJnMSwgX0FyZzI+IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9B
cmcyPgpzdHJ1Y3QgcHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwgX0FyZzI+
IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGNvbnN0YW50X3ZvaWRfZnVuCnsK
ICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUgX192YWw7CiAgY29u
c3RhbnRfdm9pZF9mdW4oY29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfX3ZhbChfX3YpIHt9CiAg
Y29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiBfX3ZhbDsgfQp9
OyAgCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQgPSBfUmVzdWx0Pgpz
dHJ1Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Bcmd1bWVu
dCwgX1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50X3VuYXJ5X2Z1bihjb25z
dCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBfUmVzdWx0JiBvcGVyYXRv
cigpKGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9Owp0ZW1wbGF0
ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZzEgPSBfUmVzdWx0LCBjbGFzcyBfQXJnMiA9IF9B
cmcxPgpzdHJ1Y3QgY29uc3RhbnRfYmluYXJ5X2Z1biA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X0FyZzEsIF9BcmcyLCBfUmVzdWx0PiB7CiAgX1Jlc3VsdCBfTV92YWw7CiAgY29uc3RhbnRfYmlu
YXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBfUmVz
dWx0JiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImKSBjb25zdCB7CiAgICBy
ZXR1cm4gX01fdmFsOwogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25z
dGFudF92b2lkX2Z1bjxfUmVzdWx0PiBjb25zdGFudDAoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsK
ICByZXR1cm4gY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4oX192YWwpOwp9CnRlbXBsYXRlIDxj
bGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4g
Y29uc3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5
X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4K
aW5saW5lIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+IApjb25z
dGFudDIoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfYmluYXJ5X2Z1
bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9CmNsYXNzIHN1YnRyYWN0aXZlX3Ju
ZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4gewpw
cml2YXRlOgogIHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4MTsK
ICBzaXplX3QgX01faW5kZXgyOwpwdWJsaWM6CiAgdW5zaWduZWQgaW50IG9wZXJhdG9yKCkodW5z
aWduZWQgaW50IF9fbGltaXQpIHsKICAgIF9NX2luZGV4MSA9IChfTV9pbmRleDEgKyAxKSAlIDU1
OwogICAgX01faW5kZXgyID0gKF9NX2luZGV4MiArIDEpICUgNTU7CiAgICBfTV90YWJsZVtfTV9p
bmRleDFdID0gX01fdGFibGVbX01faW5kZXgxXSAtIF9NX3RhYmxlW19NX2luZGV4Ml07CiAgICBy
ZXR1cm4gX01fdGFibGVbX01faW5kZXgxXSAlIF9fbGltaXQ7CiAgfQogIHZvaWQgX01faW5pdGlh
bGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQogIHsKICAgIHVuc2lnbmVkIGludCBfX2sgPSAxOwog
ICAgX01fdGFibGVbNTRdID0gX19zZWVkOwogICAgc2l6ZV90IF9faTsKICAgIGZvciAoX19pID0g
MDsgX19pIDwgNTQ7IF9faSsrKSB7CiAgICAgICAgc2l6ZV90IF9faWkgPSAoMjEgKiAoX19pICsg
MSkgJSA1NSkgLSAxOwogICAgICAgIF9NX3RhYmxlW19faWldID0gX19rOwogICAgICAgIF9fayA9
IF9fc2VlZCAtIF9fazsKICAgICAgICBfX3NlZWQgPSBfTV90YWJsZVtfX2lpXTsKICAgIH0KICAg
IGZvciAoaW50IF9fbG9vcCA9IDA7IF9fbG9vcCA8IDQ7IF9fbG9vcCsrKSB7CiAgICAgICAgZm9y
IChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCiAgICAgICAgICAgIF9NX3RhYmxlW19faV0gPSBf
TV90YWJsZVtfX2ldIC0gX01fdGFibGVbKDEgKyBfX2kgKyAzMCkgJSA1NV07CiAgICB9CiAgICBf
TV9pbmRleDEgPSAwOwogICAgX01faW5kZXgyID0gMzE7CiAgfQogIHN1YnRyYWN0aXZlX3JuZyh1
bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9NX2luaXRpYWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0
aXZlX3JuZygpIHsgX01faW5pdGlhbGl6ZSgxNjE4MDMzOTh1KTsgfQp9Owp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoq
X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25z
dCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp
KCk7Cn07CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9m
dW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgog
IGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0
dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25z
dDsKfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZf
dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
bWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0
IG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJp
dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh
c3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQg
KF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgog
IF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQg
KF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1Rw
KiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2
YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9f
cGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QK
ICAgIHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq
X01fZikoX0FyZykgY29uc3Q7Cn07CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChf
VHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYg
X19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRl
OgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh
c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf
bWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3Bm
KSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsg
cmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf
QXJnKSBjb25zdDsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQs
IF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBs
aWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p
ZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6
CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29u
c3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw
Kix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoq
X19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9U
cCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoq
X01fZikoKSBjb25zdDsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZf
dDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3Bm
KSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9
CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
Y2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZv
aWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9p
ZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lk
IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9U
cCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgog
IHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gCiAgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp
dCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2Yo
X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25z
dCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0Fy
ZykgY29uc3Q7Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9m
dW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1Rw
OjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9f
ciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQg
KF9UcDo6Kl9NX2YpKF9BcmcpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpj
bGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21l
bV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikg
e30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChf
X3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25z
dDsKfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxf
UmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90
PF9SZXQsX1RwPihfX2YpOyB9CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGlu
ZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNv
bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4g
bWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKSAKICB7IHJldHVybiBtZW1fZnVuX3JlZl90
PF9SZXQsX1RwPihfX2YpOyB9CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGlu
ZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6Oipf
X2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19m
KTsgfQp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUg
bWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykp
CiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90
PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7
IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90
PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyBy
ZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVm
X3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25z
dCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1f
ZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAg
eyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9S
ZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyBy
ZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxf
UmV0LF9UcCxfQXJnPiBtZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJl
dHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZf
dDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25z
dCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9
CiMgNTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMiAzCiAg
CnR5cGVkZWYgYm9vbCBfUmJfdHJlZV9Db2xvcl90eXBlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90
eXBlIF9TX3JiX3RyZWVfcmVkID0gZmFsc2U7CmNvbnN0IF9SYl90cmVlX0NvbG9yX3R5cGUgX1Nf
cmJfdHJlZV9ibGFjayA9IHRydWU7CnN0cnVjdCBfUmJfdHJlZV9ub2RlX2Jhc2UKewogIHR5cGVk
ZWYgX1JiX3RyZWVfQ29sb3JfdHlwZSBfQ29sb3JfdHlwZTsKICB0eXBlZGVmIF9SYl90cmVlX25v
ZGVfYmFzZSogX0Jhc2VfcHRyOwogIF9Db2xvcl90eXBlIF9NX2NvbG9yOyAKICBfQmFzZV9wdHIg
X01fcGFyZW50OwogIF9CYXNlX3B0ciBfTV9sZWZ0OwogIF9CYXNlX3B0ciBfTV9yaWdodDsKICBz
dGF0aWMgX0Jhc2VfcHRyIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAgICB3aGlsZSAo
X194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgIHJldHVybiBfX3g7CiAg
fQogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdo
aWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAgICByZXR1cm4g
X194OwogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4Kc3RydWN0IF9SYl90cmVlX25vZGUg
OiBwdWJsaWMgX1JiX3RyZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1Zh
bHVlPiogX0xpbmtfdHlwZTsKICBfVmFsdWUgX01fdmFsdWVfZmllbGQ7Cn07CnN0cnVjdCBfUmJf
dHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2Vf
cHRyIF9CYXNlX3B0cjsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICBfQmFz
ZV9wdHIgX01fbm9kZTsKICB2b2lkIF9NX2luY3JlbWVudCgpCiAgewogICAgaWYgKF9NX25vZGUt
Pl9NX3JpZ2h0ICE9IDApIHsKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAg
ICB3aGlsZSAoX01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIF9NX25vZGUgPSBfTV9ub2Rl
LT5fTV9sZWZ0OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2Rl
LT5fTV9wYXJlbnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpIHsKICAg
ICAgICBfTV9ub2RlID0gX195OwogICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICB9
CiAgICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSBfX3kpCiAgICAgICAgX01fbm9kZSA9IF9f
eTsKICAgIH0KICB9CiAgdm9pZCBfTV9kZWNyZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5f
TV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCAmJgogICAgICAgIF9NX25vZGUtPl9NX3BhcmVudC0+
X01fcGFyZW50ID09IF9NX25vZGUpCiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsK
ICAgIGVsc2UgaWYgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkgewogICAgICBfQmFzZV9wdHIgX195
ID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQgIT0gMCkKICAg
ICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICBfTV9ub2RlID0gX195OwogICAgfQogICAg
ZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIHdo
aWxlIChfTV9ub2RlID09IF9feS0+X01fbGVmdCkgewogICAgICAgIF9NX25vZGUgPSBfX3k7CiAg
ICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgX01fbm9kZSA9IF9feTsK
ICAgIH0KICB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9Q
dHI+CnN0cnVjdCBfUmJfdHJlZV9pdGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJh
dG9yCnsKICB0eXBlZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1JlZiByZWZlcmVu
Y2U7CiAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+ICAgICAgICAgICAgIAogICAgaXRlcmF0b3I7CiAgdHlw
ZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1
ZSo+IAogICAgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs
dWUsIF9SZWYsIF9QdHI+ICAgICAgICAgICAgICAgICAgIAogICAgX1NlbGY7CiAgdHlwZWRlZiBf
UmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CiAgX1JiX3RyZWVfaXRlcmF0b3IoKSB7
fQogIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7IF9NX25vZGUgPSBfX3g7IH0K
ICBfUmJfdHJlZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkgeyBfTV9ub2RlID0gX19p
dC5fTV9ub2RlOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5r
X3R5cGUoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgcG9pbnRlciBvcGVyYXRvci0+KCkg
Y29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KICBfU2VsZiYgb3BlcmF0b3IrKygpIHsg
X01faW5jcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7
CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01faW5jcmVtZW50KCk7CiAgICByZXR1cm4g
X190bXA7CiAgfQogICAgCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3JlbWVudCgpOyBy
ZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAg
PSAqdGhpczsKICAgIF9NX2RlY3JlbWVudCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3gsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX195KSB7
CiAgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOwp9CmlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feSkgewogIHJldHVybiBfX3gu
X01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQojIDIxNCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfdHJlZS5oIiAzCmlubGluZSB2b2lkIApfUmJfdHJlZV9yb3RhdGVfbGVmdChf
UmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQp7CiAg
X1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogIF9feC0+X01fcmlnaHQg
PSBfX3ktPl9NX2xlZnQ7CiAgaWYgKF9feS0+X01fbGVmdCAhPTApCiAgICBfX3ktPl9NX2xlZnQt
Pl9NX3BhcmVudCA9IF9feDsKICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwogIGlm
IChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9feCA9PSBfX3gt
Pl9NX3BhcmVudC0+X01fbGVmdCkKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195Owog
IGVsc2UKICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBfX3ktPl9NX2xlZnQg
PSBfX3g7CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KaW5saW5lIHZvaWQgCl9SYl90cmVlX3Jv
dGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYg
X19yb290KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAgX194
LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAg
X195LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194LT5f
TV9wYXJlbnQ7CiAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBp
ZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgIF9feC0+X01fcGFyZW50LT5f
TV9yaWdodCA9IF9feTsKICBlbHNlCiAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsK
ICBfX3ktPl9NX3JpZ2h0ID0gX194OwogIF9feC0+X01fcGFyZW50ID0gX195Owp9CmlubGluZSB2
b2lkIApfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVl
X25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsK
ICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPT0gX1Nf
cmJfdHJlZV9yZWQpIHsKICAgIGlmIChfX3gtPl9NX3BhcmVudCA9PSBfX3gtPl9NX3BhcmVudC0+
X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194
LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmlnaHQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5f
TV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9j
b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3Ry
ZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf
U19yYl90cmVlX3JlZDsKICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50Owog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9N
X3JpZ2h0KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90
cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9w
YXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVu
dC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVl
X3JvdGF0ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9
CiAgICB9CiAgICBlbHNlIHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9N
X3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0OwogICAgICBpZiAoX195ICYmIF9feS0+X01fY29s
b3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3Ig
PSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+X01fY29sb3IgPSBfU19yYl90cmVlX2Js
YWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJf
dHJlZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0
KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3Jv
dGF0ZV9yaWdodChfX3gsIF9fcm9vdCk7CiAgICAgICAgfQogICAgICAgIF9feC0+X01fcGFyZW50
LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N
X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfUmJfdHJlZV9yb3Rh
dGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9
CiAgfQogIF9fcm9vdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwp9CmlubGluZSBfUmJf
dHJlZV9ub2RlX2Jhc2UqCl9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfX3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9i
YXNlKiYgX19yb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVf
YmFzZSomIF9fbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVf
bm9kZV9iYXNlKiYgX19yaWdodG1vc3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9f
ejsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCA9IDA7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBf
X3hfcGFyZW50ID0gMDsKICBpZiAoX195LT5fTV9sZWZ0ID09IDApICAgICAgCiAgICBfX3ggPSBf
X3ktPl9NX3JpZ2h0OyAgICAgIAogIGVsc2UKICAgIGlmIChfX3ktPl9NX3JpZ2h0ID09IDApICAg
CiAgICAgIF9feCA9IF9feS0+X01fbGVmdDsgICAgIAogICAgZWxzZSB7ICAgICAgICAgICAgICAg
ICAgICAKICAgICAgX195ID0gX195LT5fTV9yaWdodDsgICAgCiAgICAgIHdoaWxlIChfX3ktPl9N
X2xlZnQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7CiAgICAgIF9feCA9IF9feS0+
X01fcmlnaHQ7CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsgICAgICAgICAgIAogICAgX196LT5f
TV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3k7IAogICAgX195LT5fTV9sZWZ0ID0gX196LT5fTV9sZWZ0
OwogICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJlbnQgPSBfX3kt
Pl9NX3BhcmVudDsKICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVu
dDsKICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7ICAgICAgIAogICAgICBfX3kt
Pl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgX196LT5fTV9yaWdodC0+X01fcGFyZW50
ID0gX195OwogICAgfQogICAgZWxzZQogICAgICBfX3hfcGFyZW50ID0gX195OyAgCiAgICBpZiAo
X19yb290ID09IF9feikKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX196LT5fTV9w
YXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9f
eTsKICAgIGVsc2UgCiAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgIF9f
eS0+X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgOjpzd2FwKF9feS0+X01fY29sb3Is
IF9fei0+X01fY29sb3IpOwogICAgX195ID0gX196OwogICAgIAogIH0KICBlbHNlIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICBp
ZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OyAgIAogICAgaWYgKF9fcm9v
dCA9PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feDsKICAgIGVsc2UgCiAgICAgIGlmIChfX3otPl9N
X3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQg
PSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7
CiAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opIAogICAgICBpZiAoX196LT5fTV9yaWdodCA9PSAw
KSAgICAgICAgIAogICAgICAgIF9fbGVmdG1vc3QgPSBfX3otPl9NX3BhcmVudDsKICAgICAKICAg
ICAgZWxzZQogICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmlt
dW0oX194KTsKICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opICAKICAgICAgaWYgKF9fei0+X01f
bGVmdCA9PSAwKSAgICAgICAgICAKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50
OyAgCiAgICAgCiAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIF9fcmln
aHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgfQogIGlmIChf
X3ktPl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7IAogICAgd2hpbGUgKF9feCAhPSBfX3Jv
b3QgJiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpCiAg
ICAgIGlmIChfX3ggPT0gX194X3BhcmVudC0+X01fbGVmdCkgewogICAgICAgIF9SYl90cmVlX25v
ZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgaWYgKF9fdy0+X01f
Y29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19y
Yl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVl
X3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7
CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICB9CiAgICAgICAg
aWYgKChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01f
Y29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQg
PT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3Ry
ZWVfYmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAg
ICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJl
bnQtPl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fcmln
aHQgPT0gMCB8fCAKICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfU19y
Yl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVm
dC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9NX2NvbG9y
ID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3cs
IF9fcm9vdCk7CiAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAg
ICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAg
ICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAg
aWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9i
bGFjazsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7
CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg
ICAgIAogICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVm
dDsKICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAg
ICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50
LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3Jp
Z2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9s
ZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fCAKICAgICAg
ICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAg
ICAgICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fbGVm
dC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpIHsKICAgICAgICAgIF9fdy0+X01fY29s
b3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAg
ICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAgfHwgCiAgICAgICAgICAgICAgX193LT5fTV9s
ZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ct
Pl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAg
ICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1Ji
X3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBfX3cgPSBfX3hfcGFy
ZW50LT5fTV9sZWZ0OwogICAgICAgICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9w
YXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90
cmVlX2JsYWNrOwogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9j
b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQo
X194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQog
ICAgaWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgfQogIHJldHVy
biBfX3k7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBib29sIF9TX2luc3Rh
bmNlbGVzcz4KY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g
X01fbm9kZV9hbGxvY2F0b3I7IH0KICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSksIF9NX2hlYWRlcigwKSB7
fQpwcm90ZWN0ZWQ6CiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4s
IF9BbGxvYz46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CiAg
X1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7CiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9n
ZXRfbm9kZSgpIAogICAgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0K
ICB2b2lkIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKSAKICAgIHsgX01fbm9k
ZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgdHJ1
ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9j
Pjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KICBfUmJfdHJlZV9h
bGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9oZWFkZXIoMCkge30KcHJvdGVj
dGVkOgogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46Ol9BbGxvY190eXBlCiAg
ICAgICAgICBfQWxsb2NfdHlwZTsKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkK
ICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25v
ZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRl
KF9fcCwgMSk7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3Qg
X1JiX3RyZWVfYmFzZQogIDogcHVibGljIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9j
Pjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwg
X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwg
X0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgX1JiX3RyZWVfYmFz
ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSAKICAgIDogX0Jhc2UoX19hKSB7IF9NX2hlYWRl
ciA9IF9NX2dldF9ub2RlKCk7IH0KICB+X1JiX3RyZWVfYmFzZSgpIHsgX01fcHV0X25vZGUoX01f
aGVhZGVyKTsgfQp9OwojIDUxOSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9w
b3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
dHJlZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlP
ZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRv
cjwgX1ZhbHVlID4gID4KY2xhc3MgX1JiX3RyZWUgOiBwcm90ZWN0ZWQgX1JiX3RyZWVfYmFzZTxf
VmFsdWUsIF9BbGxvYz4gewogIHR5cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsdWUsIF9BbGxvYz4g
X0Jhc2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRy
OwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+IF9SYl90cmVlX25vZGU7CiAgdHlwZWRl
ZiBfUmJfdHJlZV9Db2xvcl90eXBlIF9Db2xvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfS2V5
IGtleV90eXBlOwogIHR5cGVkZWYgX1ZhbHVlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90
eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsK
ICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5
cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9SYl90cmVlX25vZGUqIF9MaW5rX3R5cGU7
CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g
X0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQpwcm90ZWN0ZWQ6CnByb3RlY3RlZDoKICBfTGlua190
eXBlIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICB7CiAgICBfTGlua190
eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgIHRyeSAgewogICAgICBjb25zdHJ1Y3QoJl9f
dG1wLT5fTV92YWx1ZV9maWVsZCwgX194KTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyAgX01fcHV0
X25vZGUoX190bXApIDsgdGhyb3c7IH0gOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfTGlua190
eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3Rt
cCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAgX190bXAtPl9NX2Nv
bG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsKICAgIF9fdG1wLT5f
TV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIHZvaWQgZGVzdHJveV9ub2RlKF9M
aW5rX3R5cGUgX19wKQogIHsKICAgIGRlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmllbGQpOwogICAg
X01fcHV0X25vZGUoX19wKTsKICB9CnByb3RlY3RlZDoKICBzaXplX3R5cGUgX01fbm9kZV9jb3Vu
dDsgIAogIF9Db21wYXJlIF9NX2tleV9jb21wYXJlOwogIF9MaW5rX3R5cGUmIF9NX3Jvb3QoKSBj
b25zdCAKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7IH0K
ICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgpIGNvbnN0IAogICAgeyByZXR1cm4gKF9MaW5rX3R5
cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0KICBfTGlua190eXBlJiBfTV9yaWdodG1vc3QoKSBj
b25zdCAKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9yaWdodDsgfQog
IHN0YXRpYyBfTGlua190eXBlJiBfU19sZWZ0KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4g
KF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3Jp
Z2h0KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3Jp
Z2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpCiAg
ICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZl
cmVuY2UgX1NfdmFsdWUoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfX3gtPl9NX3ZhbHVl
X2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShfTGlua190eXBlIF9feCkKICAg
IHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KICBzdGF0aWMgX0NvbG9y
X3R5cGUmIF9TX2NvbG9yKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBl
JikoX194LT5fTV9jb2xvcik7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVmdChfQmFzZV9w
dHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CiAgc3Rh
dGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0xp
bmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3BhcmVu
dChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVu
dCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJl
dHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3Qg
X0tleSYgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9T
X3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30gCiAgc3RhdGljIF9Db2xvcl90eXBlJiBfU19jb2xv
cihfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX0xpbmtfdHlwZShf
X3gpLT5fTV9jb2xvcik7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSBfU19taW5pbXVtKF9MaW5rX3R5
cGUgX194KSAKICAgIHsgcmV0dXJuIChfTGlua190eXBlKSAgX1JiX3RyZWVfbm9kZV9iYXNlOjpf
U19taW5pbXVtKF9feCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSBfU19tYXhpbXVtKF9MaW5rX3R5
cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1Nf
bWF4aW11bShfX3gpOyB9CnB1YmxpYzoKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVl
X3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9p
dGVyYXRvcjx2YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+IAogICAg
ICAgICAgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0
ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv
cjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKcHJpdmF0ZToKICBpdGVyYXRvciBfTV9pbnNl
cnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYgX192KTsK
ICBfTGlua190eXBlIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKTsKICB2
b2lkIF9NX2VyYXNlKF9MaW5rX3R5cGUgX194KTsKcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICBfUmJfdHJlZSgpCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkp
LCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICB7IF9NX2VtcHR5X2luaXRp
YWxpemUoKTsgfQogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICA6IF9CYXNl
KGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2Nv
bXApIAogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KICBfUmJfdHJlZShjb25zdCBfQ29t
cGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfQmFzZShfX2Ep
LCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApIAogICAgeyBfTV9lbXB0
eV9pbml0aWFsaXplKCk7IH0KICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIAogICAgOiBfQmFzZShfX3guZ2V0X2Fs
bG9jYXRvcigpKSwKICAgICAgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX194Ll9N
X2tleV9jb21wYXJlKQogIHsgCiAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICBfTV9l
bXB0eV9pbml0aWFsaXplKCk7CiAgICBlbHNlIHsKICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9
IF9TX3JiX3RyZWVfcmVkOwogICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCks
IF9NX2hlYWRlcik7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7
CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgfQogICAg
X01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogIH0KICB+X1JiX3RyZWUoKSB7IGNs
ZWFyKCk7IH0KICBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+JiAKICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPiYgX194KTsKcHJpdmF0ZToKICB2b2lkIF9NX2VtcHR5X2luaXRpYWxp
emUoKSB7CiAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7ICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgX01fcm9vdCgpID0gMDsK
ICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hl
YWRlcjsKICB9CnB1YmxpYzogICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
IF9Db21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fa2V5X2NvbXBhcmU7IH0KICBp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KICBpdGVyYXRvciBlbmQo
KSB7IHJldHVybiBfTV9oZWFkZXI7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV9oZWFkZXI7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJl
dmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o
KSBjb25zdCB7IAogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyAKICB9
CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdp
bigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgCiAgICByZXR1
cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICB9IAogIGJvb2wgZW1wdHkoKSBj
b25zdCB7IHJldHVybiBfTV9ub2RlX2NvdW50ID09IDA7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25z
dCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgdm9pZCBzd2FwKF9SYl90cmVlPF9LZXksX1Zh
bHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkgewogICAgIDo6c3dhcChfTV9o
ZWFkZXIsIF9fdC5fTV9oZWFkZXIpOwogICAgIDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01f
bm9kZV9jb3VudCk7CiAgICAgOjpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBh
cmUpOwogIH0KICAgIApwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
IHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gp
OwogIGl0ZXJhdG9yIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJh
dG9yIGluc2VydF91bmlxdWUoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYg
X194KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3Qg
dmFsdWVfdHlwZSYgX194KTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCk7CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0X2Vx
dWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CiAgdm9p
ZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5
X3R5cGUmIF9feCk7CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xh
c3QpOwogIHZvaWQgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90eXBl
KiBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoX01fbm9kZV9jb3VudCAhPSAwKSB7
CiAgICAgIF9NX2VyYXNlKF9NX3Jvb3QoKSk7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFk
ZXI7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVy
OwogICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIH0KICB9ICAgICAgCnB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlw
ZSYgX194KTsKICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0
OwogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBpdGVyYXRv
ciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KTsKICBjb25zdF9pdGVyYXRvciBsb3dl
cl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBpdGVyYXRvciB1cHBlcl9ib3Vu
ZChjb25zdCBrZXlfdHlwZSYgX194KTsKICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25z
dCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9y
YW5nZShjb25zdCBrZXlfdHlwZSYgX194KTsKICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9p
dGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CnB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgYm9vbCBfX3JiX3ZlcmlmeSgpIGNv
bnN0Owp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW
YWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCAKb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgp
ID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwg
X195LmJlZ2luKCkpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNz
IF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIApvcGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXks
X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgCnN3YXAoX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICBfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICBf
X3guc3dhcChfX3kpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNz
IF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cl9S
Yl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIApfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpvcGVyYXRvcj0o
Y29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgIGNsZWFyKCk7CiAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIF9NX2tleV9jb21w
YXJlID0gX194Ll9NX2tleV9jb21wYXJlOyAgICAgICAgCiAgICBpZiAoX194Ll9NX3Jvb3QoKSA9
PSAwKSB7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFk
ZXI7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgfQogICAgZWxzZSB7CiAg
ICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAg
X01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgX01fcmlnaHRtb3N0
KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX25vZGVfY291bnQgPSBfX3guX01f
bm9kZV9jb3VudDsKICAgIH0KICB9CiAgcmV0dXJuICp0aGlzOwp9CnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2luc2VydChfQmFzZV9wdHIgX194Xywg
X0Jhc2VfcHRyIF9feV8sIGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3ggPSAo
X0xpbmtfdHlwZSkgX194XzsKICBfTGlua190eXBlIF9feSA9IChfTGlua190eXBlKSBfX3lfOwog
IF9MaW5rX3R5cGUgX196OwogIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9feCAhPSAwIHx8IAog
ICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3kpKSkgewog
ICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgIF9TX2xlZnQoX195KSA9IF9fejsgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
aWYgKF9feSA9PSBfTV9oZWFkZXIpIHsKICAgICAgX01fcm9vdCgpID0gX196OwogICAgICBfTV9y
aWdodG1vc3QoKSA9IF9fejsKICAgIH0KICAgIGVsc2UgaWYgKF9feSA9PSBfTV9sZWZ0bW9zdCgp
KQogICAgICBfTV9sZWZ0bW9zdCgpID0gX196OyAgICAKICB9CiAgZWxzZSB7CiAgICBfX3ogPSBf
TV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfcmlnaHQoX195KSA9IF9fejsKICAgIGlmIChfX3kg
PT0gX01fcmlnaHRtb3N0KCkpCiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OyAgIAogIH0KICBf
U19wYXJlbnQoX196KSA9IF9feTsKICBfU19sZWZ0KF9feikgPSAwOwogIF9TX3JpZ2h0KF9feikg
PSAwOwogIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01fcGFyZW50KTsKICAr
K19NX25vZGVfY291bnQ7CiAgcmV0dXJuIGl0ZXJhdG9yKF9feik7Cn0KdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUs
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGNvbnN0IF9WYWx1
ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3gg
PSBfTV9yb290KCk7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfX3kgPSBfX3g7CiAgICBfX3gg
PSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/IAogICAg
ICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogIH0KICByZXR1cm4gX01faW5z
ZXJ0KF9feCwgX195LCBfX3YpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs
IGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPjo6aXRlcmF0b3IsIAogICAgIGJvb2w+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoY29uc3QgX1ZhbHVl
JiBfX3YpCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9
IF9NX3Jvb3QoKTsKICBib29sIF9fY29tcCA9IHRydWU7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAg
ICBfX3kgPSBfX3g7CiAgICBfX2NvbXAgPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9f
diksIF9TX2tleShfX3gpKTsKICAgIF9feCA9IF9fY29tcCA/IF9TX2xlZnQoX194KSA6IF9TX3Jp
Z2h0KF9feCk7CiAgfQogIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7ICAgCiAgaWYgKF9f
Y29tcCkKICAgIGlmIChfX2ogPT0gYmVnaW4oKSkgICAgIAogICAgICByZXR1cm4gcGFpcjxpdGVy
YXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgZWxzZQogICAg
ICAtLV9fajsKICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9m
VmFsdWUoKShfX3YpKSkKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChf
X3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX19qLCBm
YWxzZSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9LZXlPZlZh
bHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9S
Yl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0
b3IgCl9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPgog
IDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsK
ICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkgeyAgCiAgICBp
ZiAoc2l6ZSgpID4gMCAmJiAKICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9f
diksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydChf
X3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKICAgICAKICAgIGVs
c2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICB9IGVsc2UgaWYgKF9f
cG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsgIAogICAgaWYgKF9NX2tleV9jb21wYXJl
KF9TX2tleShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVy
biBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVy
biBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fYmVm
b3JlID0gX19wb3NpdGlvbjsKICAgIC0tX19iZWZvcmU7CiAgICBpZiAoX01fa2V5X2NvbXBhcmUo
X1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpIAogICAgICAgICYm
IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01f
bm9kZSkpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAg
ICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsgCiAgICAgIGVs
c2UKICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlv
bi5fTV9ub2RlLCBfX3YpOwogICAgIAogICAgfSBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5p
cXVlKF9fdikuZmlyc3Q7CiAgfQp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBj
bGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
Pgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6aXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+CiAgOjppbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192
KQp7CiAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpIHsgIAog
ICAgaWYgKHNpemUoKSA+IDAgJiYgCiAgICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUo
KShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAgICAgIHJldHVybiBfTV9pbnNl
cnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CiAgICAgCiAg
ICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2UgaWYgKF9fcG9z
aXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9L
ZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgIHJldHVybiBf
TV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVybiBp
bnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2UgewogICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bv
c2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFs
dWUoKShfX3YpLCBfU19rZXkoX19iZWZvcmUuX01fbm9kZSkpCiAgICAgICAgJiYgIV9NX2tleV9j
b21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKSB7
CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVy
biBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsgCiAgICAgIGVsc2UKICAgICAg
ICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2Rl
LCBfX3YpOwogICAgIAogICAgfSBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsK
ICB9Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNz
IF9DbXAsIGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CnZvaWQgX1JiX3RyZWU8
X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3Qs
IF9JSSBfX2xhc3QpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ21wLCBjbGFzcyBfQWxsb2M+IAogIHRlbXBsYXRlPGNs
YXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omlu
c2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpIHsKICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfdW5pcXVlKCpfX2ZpcnN0KTsKfQojIDEw
MjEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4y
LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMwogICAgICAg
ICAKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUs
IAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2Uo
aXRlcmF0b3IgX19wb3NpdGlvbikKewogIF9MaW5rX3R5cGUgX195ID0gCiAgICAoX0xpbmtfdHlw
ZSkgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfX3Bvc2l0aW9uLl9NX25vZGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3Bh
cmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hl
YWRlci0+X01fbGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9NX2hlYWRlci0+X01fcmlnaHQpOwogIGRlc3Ryb3lfbm9kZShfX3kpOwogIC0tX01fbm9k
ZV9jb3VudDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5
T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFt
ZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXpl
X3R5cGUgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46
OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKewogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IF9fcCA9
IGVxdWFsX3JhbmdlKF9feCk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZp
cnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIGVyYXNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAg
cmV0dXJuIF9fbjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tv
ViwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwg
X1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46Ol9MaW5rX3R5cGUgCl9SYl90cmVlPF9LZXks
X1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9M
aW5rX3R5cGUgX19wKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICBfTGlua190eXBlIF9f
dG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CiAgdHJ5
ICB7CiAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgX190b3AtPl9NX3JpZ2h0ID0gX01fY29w
eShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICBfX3AgPSBfX3RvcDsKICAgIF9feCA9IF9TX2xl
ZnQoX194KTsKICAgIHdoaWxlIChfX3ggIT0gMCkgewogICAgICBfTGlua190eXBlIF9feSA9IF9N
X2Nsb25lX25vZGUoX194KTsKICAgICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICBfX3ktPl9N
X3BhcmVudCA9IF9fcDsKICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgX195LT5fTV9y
aWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKICAgICAgX19wID0gX195OwogICAg
ICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICB9CiAgfQogIGNhdGNoKC4uLikgeyAgX01fZXJhc2Uo
X190b3ApIDsgdGhyb3c7IH0gOwogIHJldHVybiBfX3RvcDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2VyYXNlKF9MaW5rX3R5cGUgX194KQp7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogIHdoaWxlIChfX3ggIT0gMCkgewogICAgX01fZXJh
c2UoX1NfcmlnaHQoX194KSk7CiAgICBfTGlua190eXBlIF9feSA9IF9TX2xlZnQoX194KTsKICAg
IGRlc3Ryb3lfbm9kZShfX3gpOwogICAgX194ID0gX195OwogIH0KfQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9y
IF9fbGFzdCkKewogIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09IGVuZCgpKQog
ICAgY2xlYXIoKTsKICBlbHNlCiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIGVyYXNlKF9f
Zmlyc3QrKyk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl
eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFz
ZShjb25zdCBfS2V5KiBfX2ZpcnN0LCBjb25zdCBfS2V5KiBfX2xhc3QpIAp7CiAgd2hpbGUgKF9f
Zmlyc3QgIT0gX19sYXN0KSBlcmFzZSgqX19maXJzdCsrKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlu
a190eXBlIF9feSA9IF9NX2hlYWRlcjsgICAgICAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290
KCk7ICAgICAgIAogIHdoaWxlIChfX3ggIT0gMCkgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9T
X2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg
IGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICBpdGVyYXRvciBfX2ogPSBpdGVyYXRv
cihfX3kpOyAgIAogIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywg
X1Nfa2V5KF9fai5fTV9ub2RlKSkpID8gCiAgICAgZW5kKCkgOiBfX2o7Cn0KdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUs
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgCl9SYl90cmVlPF9L
ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYg
X19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBl
IF9feCA9IF9NX3Jvb3QoKTsgIAogIHdoaWxlIChfX3ggIT0gMCkgewogICAgaWYgKCFfTV9rZXlf
Y29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0
KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CiAgfQogIGNvbnN0X2l0
ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7ICAgCiAgcmV0dXJuIChfX2ogPT0gZW5k
KCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwogICAgZW5k
KCkgOiBfX2o7Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl
eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5h
bWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6
ZV90eXBlIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
CiAgOjpjb3VudChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBwYWlyPGNvbnN0X2l0ZXJhdG9y
LCBjb25zdF9pdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX19rKTsKICBzaXplX3R5cGUgX19u
ID0gMDsKICBkaXN0YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQsIF9fbik7CiAgcmV0dXJuIF9f
bjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAK
X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93
ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7
ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAogIHdoaWxlIChfX3ggIT0gMCkgCiAg
ICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gs
IF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsK
ICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25z
dAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9N
X3Jvb3QoKTsgIAogIHdoaWxlIChfX3ggIT0gMCkgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9T
X2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg
IGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICByZXR1cm4gY29uc3RfaXRlcmF0b3Io
X195KTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW
YWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRv
ciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6
dXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFk
ZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAogICB3aGlsZSAoX194ICE9IDAp
IAogICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9
IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgIGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0
KF9feCk7CiAgIHJldHVybiBpdGVyYXRvcihfX3kpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBf
X2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUg
X194ID0gX01fcm9vdCgpOyAgCiAgIHdoaWxlIChfX3ggIT0gMCkgCiAgICAgaWYgKF9NX2tleV9j
b21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0
KF9feCk7CiAgICAgZWxzZQogICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICAgcmV0dXJuIGNv
bnN0X2l0ZXJhdG9yKF9feSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg
Y2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIApwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXks
X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgpfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShj
b25zdCBfS2V5JiBfX2spCnsKICByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxvd2Vy
X2JvdW5kKF9fayksIHVwcGVyX2JvdW5kKF9faykpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSAKcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJl
LCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBf
VmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcj4KX1JiX3RyZWU8
X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29u
c3QgX0tleSYgX19rKSBjb25zdAp7CiAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3Rf
aXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9faykpOwp9CmlubGluZSBpbnQgCl9fYmxhY2tf
Y291bnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSogX19y
b290KQp7CiAgaWYgKF9fbm9kZSA9PSAwKQogICAgcmV0dXJuIDA7CiAgZWxzZSB7CiAgICBpbnQg
X19iYyA9IF9fbm9kZS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjayA/IDEgOiAwOwogICAg
aWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAgIHJldHVybiBfX2JjOwogICAgZWxzZQogICAgICBy
ZXR1cm4gX19iYyArIF9fYmxhY2tfY291bnQoX19ub2RlLT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAg
fQp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl
LCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmJvb2wgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBj
b25zdAp7CiAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAg
cmV0dXJuIF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgIF9N
X2hlYWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBf
TV9oZWFkZXI7CiAgCiAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBf
TV9yb290KCkpOwogIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0g
ZW5kKCk7ICsrX19pdCkgewogICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5f
TV9ub2RlOwogICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICBfTGlua190eXBl
IF9fUiA9IF9TX3JpZ2h0KF9feCk7CiAgICBpZiAoX194LT5fTV9jb2xvciA9PSBfU19yYl90cmVl
X3JlZCkKICAgICAgaWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkg
fHwKICAgICAgICAgIChfX1IgJiYgX19SLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkpCiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShfU19rZXko
X194KSwgX1Nfa2V5KF9fTCkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX19SICYmIF9N
X2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkpCiAgICAgIHJldHVybiBmYWxz
ZTsKICAgIGlmICghX19MICYmICFfX1IgJiYgX19ibGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkg
IT0gX19sZW4pCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKF9NX2xlZnRtb3N0KCkgIT0g
X1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFs
c2U7CiAgaWYgKF9NX3JpZ2h0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11
bShfTV9yb290KCkpKQogICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29t
cGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1ZhbHVlID4gID4Kc3Ry
dWN0IHJiX3RyZWUgOiBwdWJsaWMgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwg
X0NvbXBhcmUsIF9BbGxvYz4KewogIHR5cGVkZWYgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5
T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFz
ZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgcmJfdHJlZShjb25zdCBfQ29tcGFy
ZSYgX19jb21wID0gX0NvbXBhcmUoKSwKICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2NvbXAsIF9fYSkge30KICAKICB+
cmJfdHJlZSgpIHt9Cn07CiAgCiMgMzEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s
aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
bWFwIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt
aWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9tYXAuaCIg
MSAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlID0gbGVz
czxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1RwID4gID4KY2xh
c3MgbWFwIHsKcHVibGljOgogIHR5cGVkZWYgX0tleSAgICAgICAgICAgICAgICAgIGtleV90eXBl
OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9U
cCAgICAgICAgICAgICAgICAgICBtYXBwZWRfdHlwZTsKICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tl
eSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0NvbXBhcmUgICAgICAgICAgICAgIGtleV9j
b21wYXJlOwogICAgCiAgY2xhc3MgdmFsdWVfY29tcGFyZQogICAgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsKICBmcmllbmQgY2xhc3MgbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkIDoKICAgIF9Db21wYXJlIF9N
X2NvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBfTV9jb21wKF9fYykge30K
ICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25z
dCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX2NvbXAoX194LmZpcnN0
LCBfX3kuZmlyc3QpOwogICAgfQogIH07CnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlf
dHlwZSwgdmFsdWVfdHlwZSwgCiAgICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5
cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7ICAg
CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJh
dG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNp
emVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVu
Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFs
bG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAKICBtYXAoKSA6IF9NX3QoX0NvbXBhcmUo
KSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUmIF9f
Y29tcCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsg
X01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsg
X01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAxMjMgIi9hb2xuZXQvcGtn
L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX21hcC5oIiAzCiAgbWFwKGNvbnN0IG1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkge30KICBtYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0Nv
bXBhcmUsIF9BbGxvYz4mIF9feCkKICB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4g
KnRoaXM7IAogIH0KICAgCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBf
TV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJl
dHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBn
ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KICBp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gX01fdC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIF9NX3QuZW5kKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIF9N
X3QucmJlZ2luKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVy
biBfTV90LnJlbmQoKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsg
cmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
ZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7
IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7
IH0KICBfVHAmIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUmIF9faykgewogICAgaXRlcmF0b3Ig
X19pID0gbG93ZXJfYm91bmQoX19rKTsKICAgICAKICAgIGlmIChfX2kgPT0gZW5kKCkgfHwga2V5
X2NvbXAoKShfX2ssICgqX19pKS5maXJzdCkpCiAgICAgIF9faSA9IGluc2VydChfX2ksIHZhbHVl
X3R5cGUoX19rLCBfVHAoKSkpOwogICAgcmV0dXJuICgqX19pKS5zZWNvbmQ7CiAgfQogIHZvaWQg
c3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3gu
X01fdCk7IH0KICAgCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlw
ZSYgX194KSAKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9CiAgaXRlcmF0
b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7
IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlxdWUoX19maXJz
dCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3Qu
ZXJhc2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2Zp
cnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsg
fQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQogICAKICBpdGVyYXRvciBmaW5kKGNv
bnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRl
cmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQo
X194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJl
dHVybiBfTV90LmNvdW50KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlf
dHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJh
dG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf
TV90Lmxvd2VyX2JvdW5kKF9feCk7IAogIH0KICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBr
ZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0
ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBfTV90LnVwcGVyX2JvdW5kKF9feCk7IAogIH0KICAKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9y
PiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVh
bF9yYW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBl
cXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5l
cXVhbF9yYW5nZShfX3gpOwogIH0KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3Qg
bWFwJiwgY29uc3QgbWFwJik7CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IDw+ICAoY29uc3QgbWFw
JiwgY29uc3QgbWFwJik7Cn07CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3gu
X01fdCA9PSBfX3kuX01fdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5f
TV90IDwgX195Ll9NX3Q7Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICAgICAgICBtYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQojIDMzICIvYW9sbmV0L3BrZy9n
Y2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL21hcCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfbXVsdGltYXAuaCIgMSAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9
IGFsbG9jYXRvcjwgX1RwID4gID4KY2xhc3MgbXVsdGltYXAgewpwdWJsaWM6CiAgdHlwZWRlZiBf
S2V5ICAgICAgICAgICAgICAgICAga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAg
ICAgICAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgIG1hcHBlZF90
eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiBfQ29tcGFyZSAgICAgICAgICAgICAga2V5X2NvbXBhcmU7CiAgY2xhc3MgdmFsdWVfY29tcGFy
ZSA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4g
ewogIGZyaWVuZCBjbGFzcyBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHBy
b3RlY3RlZDoKICAgIF9Db21wYXJlIF9NX2NvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJl
IF9fYykgOiBfTV9jb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29u
c3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAg
cmV0dXJuIF9NX2NvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07CnByaXZhdGU6
CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwgCiAgICAgICAgICAgICAg
ICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlw
ZTsKICBfUmVwX3R5cGUgX01fdDsgICAKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0
X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVm
ZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVm
ZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRl
cmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOyAKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJz
ZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIG11
bHRpbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHsgfQogIGV4cGxp
Y2l0IG11bHRpbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAg
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3Qo
X19jb21wLCBfX2EpIHsgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0
aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICA6
IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1
YWwoX19maXJzdCwgX19sYXN0KTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9f
YSkgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMTIxICIvYW9sbmV0
L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aW1hcC5oIiAzCiAgbXVsdGltYXAoY29u
c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9N
X3QpIHsgfQogIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9
KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgewogICAgX01f
dCA9IF9feC5fTV90OwogICAgcmV0dXJuICp0aGlzOyAKICB9CiAgIAogIGtleV9jb21wYXJlIGtl
eV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFy
ZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21w
KCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N
X3QuZ2V0X2FsbG9jYXRvcigpOyB9CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJl
Z2luKCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVn
aW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVy
YXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJz
ZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1w
dHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiAgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CiAgIAogIGl0
ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuaW5zZXJ0
X2VxdWFsKF9feCk7IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29u
c3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX19wb3Np
dGlvbiwgX194KTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg
aW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewog
ICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShp
dGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5
cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9
CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9N
X3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIo
KTsgfQogICAKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9N
X3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194
KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25z
dCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KICBpdGVy
YXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJf
Ym91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IAogIH0KICBp
dGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBw
ZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IAogIH0K
ICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9p
dGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IG11bHRpbWFwJiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcCYpOwogIGZyaWVuZCBib29s
IG9wZXJhdG9yPCA8PiAgKGNvbnN0IG11bHRpbWFwJiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwJik7Cn07CnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29t
cGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01f
dDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xh
c3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQojIDM0ICIvYW9sbmV0L3BrZy9nY2Mt
Mi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL21hcCIgMiAzCiMgMyAidG0uQyIgMgptYXAgPHN0cmluZywgaW50PiBi
YWRNYXA7Cg==



More information about the Gcc-bugs mailing list