This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c++/10642: Internal compiler error


>Number:         10642
>Category:       c++
>Synopsis:       Internal compiler error
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue May 06 13:56:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     alnsn@yandex.ru
>Release:        g++ 3.2
>Organization:
>Environment:
Linux RedHat 7.3
>Description:

>How-To-Repeat:

>Fix:

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

IyAxICJpb19hbnkuY3BwIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMg
MSAiaW9fYW55LmNwcCIKIyAxICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5o
cHAiIDEKCgoKCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3N0YXRpY19hc3NlcnQu
aHBwIiAxCiMgMTggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3N0YXRpY19hc3NlcnQuaHBw
IgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2NvbmZpZy5ocHAiIDEKIyAyNiAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY29uZmlnLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC9jb25maWcvdXNlci5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvY29uZmlnLmhwcCIgMgoKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9j
b25maWcvc2VsZWN0X2NvbXBpbGVyX2NvbmZpZy5ocHAiIDEKIyAzMiAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvY29uZmlnLmhwcCIgMgojIDQwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9jb25maWcuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2NvbmZpZy9zZWxl
Y3Rfc3RkbGliX2NvbmZpZy5ocHAiIDEKIyAxOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
Y29uZmlnL3NlbGVjdF9zdGRsaWJfY29uZmlnLmhwcCIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi91dGlsaXR5IiAxIDMKIyA2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvdXRp
bGl0eSIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9p
Njg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM5
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2Rl
ZmluZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMK
IyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMjAgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMjEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDIgMwojIDM1ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAy
IDMKIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvdXRpbGl0eSIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDEgMwojIDc0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9yZWxvcHMuaCIgMwpuYW1lc3BhY2Ugc3Rk
CnsKICBuYW1lc3BhY2UgcmVsX29wcwogIHsKIyA5MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShf
X3ggPT0gX195KTsKfQojIDEwMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
cmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KIyAx
MTYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3JlbG9wcy5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNv
bnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQojIDEyOSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgogIH0KfQojIDY3ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi91dGlsaXR5IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh
c3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVm
IF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIo
KSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0
IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZp
cnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwg
X1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJz
dCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUg
PGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxf
VDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3gu
Zmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAm
JiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz
cyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg
Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u
c3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJl
dHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu
ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf
VDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8
IF9feSk7Cn0KIyAxNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIu
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBf
VDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBf
VDI+KF9feCwgX195KTsKfQoKfQojIDY4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi91dGls
aXR5IiAyIDMKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY29uZmlnL3NlbGVjdF9z
dGRsaWJfY29uZmlnLmhwcCIgMgojIDQxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9jb25m
aWcuaHBwIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY29uZmlnL3N0ZGxp
Yi9saWJzdGRjcHAzLmhwcCIgMQojIDQ1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9jb25m
aWcuaHBwIiAyCgoKCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2NvbmZpZy9zZWxl
Y3RfcGxhdGZvcm1fY29uZmlnLmhwcCIgMQojIDUwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9jb25maWcuaHBwIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY29uZmln
L3BsYXRmb3JtL2xpbnV4LmhwcCIgMQojIDEzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9j
b25maWcvcGxhdGZvcm0vbGludXguaHBwIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2NzdGRsaWIiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAz
CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jc3RkZGVmIiAxIDMKIyA0NyAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDIwMSAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVu
c2lnbmVkIGludCBzaXplX3Q7CiMgNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdGRk
ZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpz
aXplX3Q7Cn0KIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzCgoj
IDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0
ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgiIDEgMwoj
IDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dh
aXRzdGF0dXMuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4u
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNs
dWRlL2VuZGlhbi5oIiAyIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAy
IDMKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoK
ICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQg
X193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAg
ICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAg
IHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAg
ICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsK
CgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1
Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoK
CgoKCiB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcg
bG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIDsKCgoKZXh0ZXJu
IGRvdWJsZSBhdG9mIChjb25zdCBjaGFyICpfX25wdHIpIDsKCmV4dGVybiBpbnQgYXRvaSAoY29u
c3QgY2hhciAqX19ucHRyKSA7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoY29uc3QgY2hhciAqX19u
cHRyKSA7CgoKCiBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoY29uc3QgY2hhciAqX19ucHRy
KQogICAgIDsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyKSA7CgoKCmV4dGVybiBmbG9hdCBz
dHJ0b2YgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiog
X19lbmRwdHIpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChjb25zdCBjaGFyICogX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0cikgOwoKCgpl
eHRlcm4gbG9uZyBpbnQgc3RydG9sIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgpleHRlcm4gdW5zaWdu
ZWQgbG9uZyBpbnQgc3RydG91bCAoY29uc3QgY2hhciAqIF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKiogX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoj
IDE4NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0
b2xsIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgc3RydG91bGwgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsK
IyAyMTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxl
LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9f
bG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgog
IGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlw
ZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90Owoj
IDIxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3Ry
dG9sX2wgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sb2NhbGVfdCBfX2xvYykgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9s
IChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKiogX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgOwoKCmV4dGVybiBsb25nIGxvbmcgaW50
IF9fc3RydG9sbF9sIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIDsKCgpleHRlcm4gdW5zaWduZWQg
bG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv
Y2FsZV90IF9fbG9jKQogICAgIDsKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoY29uc3QgY2hh
ciAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLCBf
X2xvY2FsZV90IF9fbG9jKQogICAgIDsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChjb25zdCBj
aGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwg
X19sb2NhbGVfdCBfX2xvYykgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChjb25z
dCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiog
X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xv
YykgOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChjb25zdCBjaGFyICog
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRy
LCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoY29u
c3QgY2hhciAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRv
bGRfaW50ZXJuYWwgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKiogX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xf
aW50ZXJuYWwgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgX19zdHJ0b3VsX2ludGVybmFsIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n
cm91cCkgOwoKCgoKCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoY29u
c3QgY2hhciAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqIF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBs
b25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChjb25zdCBjaGFyICoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlLCBpbnQgX19ncm91cCkKICAgICA7CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK
ZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVybiBsb25nIGludCBhNjRs
IChjb25zdCBjaGFyICpfX3MpIDsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAz
CiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAz
CgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIF9fdV9sb25nOwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBfX3Zh
bFsyXTsKICB9IF9fcXVhZF90Owp0eXBlZGVmIHN0cnVjdAogIHsKICAgIF9fdV9sb25nIF9fdmFs
WzJdOwogIH0gX191X3F1YWRfdDsKCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVk
ZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2lu
dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2ln
bmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgoKCgp0
eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsK
dHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVm
IF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3Vf
aW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90
IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5
cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0
eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxb
Ml07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAq
X19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBs
b25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVm
IGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYg
aW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoK
CnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxr
Y250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcg
X19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRl
ZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRf
dDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19v
ZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
cHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2No
ZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi
IDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAg
aW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1
Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MK
ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj
aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv
cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq
X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0
eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9w
dGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0
cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5z
aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21f
cmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAg
aW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhy
ZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRo
cmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBl
ZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2Nr
IF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3Jp
dGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2Ny
IF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7
Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5k
OwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZv
bGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVj
dCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50
IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9i
YXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9i
YXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90Owoj
IDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9z
aG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9s
b25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90
Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoK
Cgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7
CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoK
Cgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7
CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoK
CgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90
OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7
CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJf
dDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1OSAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwojIDcwICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDgyICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDk0ICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0
eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx
NDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdWludDsKIyAxNjIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBl
ZGVmIGNoYXIgaW50OF90Owp0eXBlZGVmIHNob3J0IGludCBpbnQxNl90Owp0eXBlZGVmIGludCBp
bnQzMl90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdV9pbnQ4X3Q7CnR5cGVkZWYgdW5z
aWduZWQgc2hvcnQgaW50IHVfaW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90
OwoKCgoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdDsKIyAyMTUgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDMxICIvdXNyL2lu
Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEg
MwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMK
dHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVu
c2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcg
aW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDIgMwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAxIDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRpbWVz
cGVjCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9Owoj
IDQ1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvdGltZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0
aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2Vj
OwogIH07CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2lu
Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoK
dHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICog
c2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2Zk
X21hc2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4g
IkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqIF9fcmVh
ZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqIF9fd3JpdGVmZHMsCiAgICAgICAgICAg
ICAgICAgICBmZF9zZXQgKiBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0
aW1ldmFsICogX190aW1lb3V0KSA7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRz
LCBmZF9zZXQgKiBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICogX193cml0
ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKiBfX2V4Y2VwdGZkcywKICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiBfX3RpbWVvdXQsCiAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqIF9fc2lnbWFzaykgOwoKCn0KIyAyMTYgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jv
cy5oIiAxIDMKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVm
IF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90
OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxj
bnRfdCBmc2ZpbGNudF90OwojIDI1NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVk
ZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtj
bnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250NjRfdDsKCgp9CiMgMzkxICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2
b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoK
CmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3Rh
dGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4
dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJh
bmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBp
bnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBp
bnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRv
bV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKiBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCAqIF9fcmVzdWx0KSA7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9f
c2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgOwoKZXh0ZXJuIGludCBpbml0c3RhdGVf
ciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqIF9fc3RhdGVidWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgcmFuZG9tX2RhdGEgKiBfX2J1ZikgOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICog
X19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKiBf
X2J1ZikgOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgOwoKZXh0ZXJuIHZvaWQgc3JhbmQg
KHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGlu
dCAqX19zZWVkKSA7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJu
IGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVy
biBsb25nIGludCBscmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNp
Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2
b2lkKSA7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi
aVszXSkgOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRl
cm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQx
NnZbM10pIDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1b
N10pIDsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50
IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQg
c2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICogX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiBf
X3Jlc3VsdCkgOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1
YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICogX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiBfX3Jlc3VsdCkgOwoKCmV4dGVybiBp
bnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICogX19idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICBsb25nIGludCAqIF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1
bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50
ICogX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0
YSAqIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKiBfX3Jlc3VsdCkg
OwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICogX19idWZmZXIsCiAgICAg
ICAgICAgICAgICAgICAgICBsb25nIGludCAqIF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFu
ZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp
CiAgICAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2
dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp
IDsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwK
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CiMg
NTI3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90
IF9fc2l6ZSkgOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBf
X3NpemUpCiAgICAgOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6
ZV90IF9fc2l6ZSkgOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIDsKCgoKZXh0ZXJu
IHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5o
IiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYg
Ii91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9p
ZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSA7CgoKCgoKfQojIDU0NyAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIDsKCgoK
CmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxp
Z25tZW50LCBzaXplX3QgX19zaXplKQogICAgIDsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQp
IDsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgOwoKCgoKZXh0
ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2Fy
ZyksIHZvaWQgKl9fYXJnKQogICAgIDsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0
dXMpIDsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIDsKCgoKCmV4dGVybiBj
aGFyICpnZXRlbnYgKGNvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqX19zZWN1
cmVfZ2V0ZW52IChjb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAo
Y2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoY29uc3QgY2hhciAqX19u
YW1lLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIDsKCgpleHRlcm4g
aW50IHVuc2V0ZW52IChjb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVh
cmVudiAodm9pZCkgOwojIDYyMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFy
ICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAo
Y2hhciAqX190ZW1wbGF0ZSkgOwojIDY0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy
biBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSA7CiMgNjUwICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoK
CmV4dGVybiBpbnQgc3lzdGVtIChjb25zdCBjaGFyICpfX2NvbW1hbmQpIDsKCgoKCgoKZXh0ZXJu
IGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKGNvbnN0IGNoYXIgKl9fbmFtZSkgOwojIDY3
MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoY29uc3Qg
Y2hhciAqIF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogX19yZXNvbHZlZCkg
OwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChjb25zdCB2b2lkICosIGNvbnN0
IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpl
eHRlcm4gdm9pZCAqYnNlYXJjaCAoY29uc3Qgdm9pZCAqX19rZXksIGNvbnN0IHZvaWQgKl9fYmFz
ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBf
X2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFz
ZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2Nv
bXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIDsKZXh0ZXJu
IGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgOwoKIGV4dGVybiBsb25nIGxvbmcgaW50IGxs
YWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICA7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGlu
dCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICA7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBp
bnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICA7CgogZXh0ZXJuIGxsZGl2X3QgbGxk
aXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIDsKIyA3MjggIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwgaW50ICogX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqIF9fc2lnbikgOwoKCgoK
ZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqIF9f
ZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKiBfX3NpZ24pIDsKCgoKCmV4dGVybiBjaGFy
ICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoK
ZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAg
ICAgICAgICAgICAgICAgICAgaW50ICogX19kZWNwdCwgaW50ICogX19zaWduKSA7CmV4dGVybiBj
aGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAg
ICAgICAgICAgIGludCAqIF9fZGVjcHQsIGludCAqIF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdj
dnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoK
CmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKiBf
X2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICogX19zaWduLCBjaGFyICogX19idWYsCiAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqIF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg
ICBpbnQgKiBfX3NpZ24sIGNoYXIgKiBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X2xlbikgOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICogX19kZWNwdCwgaW50ICogX19zaWduLAog
ICAgICAgICAgICAgICAgICAgIGNoYXIgKiBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBp
bnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAg
ICAgICAgICAgIGludCAqIF9fZGVjcHQsIGludCAqIF9fc2lnbiwKICAgICAgICAgICAgICAgICAg
ICBjaGFyICogX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChj
b25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJf
dCAqIF9fcHdjLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fcywgc2l6ZV90IF9f
bikgOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoK
CgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICogX19wd2NzLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICogX19zLCBzaXplX3QgX19uKSA7CgpleHRlcm4gc2l6ZV90
IHdjc3RvbWJzIChjaGFyICogX19zLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hh
cl90ICogX19wd2NzLCBzaXplX3QgX19uKQogICAgIDsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRj
aCAoY29uc3QgY2hhciAqX19yZXNwb25zZSkgOwojIDgwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqIF9fb3B0aW9ucCwKICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKmNvbnN0ICogX190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqIF9fdmFsdWVwKSA7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChjb25zdCBjaGFyICpf
X2tleSkgOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSA7CgoK
CgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSA7CgoKCmV4dGVybiBpbnQgdW5sb2Nr
cHQgKGludCBfX2ZkKSA7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIDsKCgoK
CgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f
YnVmbGVuKSA7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgOwoKCgoKCgpleHRlcm4gaW50IGdl
dGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIDsKCgoKCgp9CiMgNTMg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDIgMwojIDg0ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2
X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAg
dXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6
OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2
OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNp
bmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1i
bGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29y
dDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAg
dXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVz
aW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlu
bGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5l
IGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2op
OyB9Cn0KIyAxMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDMKbmFtZXNw
YWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpsbGRpdl90OwogIHVzaW5nIDo6X0V4aXQ7CgogIGlu
bGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBf
X3ggOiAtX194OyB9CgogIGlubGluZSBsb25nIGxvbmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7
IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYo
bG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9
IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUg
bGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90
IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBf
X3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1c2luZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRv
bGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFjZSBz
dGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXZfdDsKICB1c2luZyBfX2dudV9jeHg6Ol9FeGl0
OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6bGxhYnM7CiAgdXNp
bmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdjsKICB1c2luZyBfX2du
dV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9mOwogIHVzaW5nIF9fZ251X2N4
eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251X2N4
eDo6c3RydG9sZDsKfQojIDE0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9jb25maWcvcGxh
dGZvcm0vbGludXguaHBwIiAyCiMgNjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2NvbmZp
Zy9wbGF0Zm9ybS9saW51eC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY29u
ZmlnL3Bvc2l4X2ZlYXR1cmVzLmhwcCIgMQojIDE3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9jb25maWcvcG9zaXhfZmVhdHVyZXMuaHBwIgojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MSAzCiMgMjggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gIkMiIHsKIyAxNzUgIi91
c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4X29wdC5o
IiAxIDMKIyAxNzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9lbnZp
cm9ubWVudHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI0
ICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMiAzCiMgMTgwICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDIgMwojIDE5OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMjAwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDI0MCAiL3Vzci9pbmNs
dWRlL3VuaXN0ZC5oIiAzCnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlwZWRl
ZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK
ZXh0ZXJuIGludCBhY2Nlc3MgKGNvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkgOwoKCgoK
ZXh0ZXJuIGludCBldWlkYWNjZXNzIChjb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIDsK
IyAyOTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBsc2VlayAoaW50
IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgOwojIDMwMiAiL3Vzci9pbmNs
dWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX29mZjY0X3QgbHNlZWs2NCAoaW50IF9fZmQsIF9fb2Zm
NjRfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSA7CgoKCmV4dGVybiBpbnQgY2xvc2UgKGludCBf
X2ZkKSA7CgoKCmV4dGVybiBzc2l6ZV90IHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6
ZV90IF9fbmJ5dGVzKSA7CgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUgKGludCBfX2ZkLCBjb25zdCB2
b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4gc3NpemVfdCBwcmVhZCAoaW50IF9f
ZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmX3QgX19vZmZzZXQpCiAgICAg
OwpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2ZkLCBjb25zdCB2b2lkICpfX2J1Ziwgc2l6
ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KSA7CiMgMzQw
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9f
ZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fb2ZmNjRfdCBfX29mZnNldCkgOwoKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0IChpbnQgX19m
ZCwgY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX29mZjY0X3QgX19vZmZzZXQpIDsKCgoKCgoKCmV4dGVybiBpbnQgcGlwZSAoaW50IF9fcGlw
ZWRlc1syXSkgOwojIDM2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiB1bnNpZ25l
ZCBpbnQgYWxhcm0gKHVuc2lnbmVkIGludCBfX3NlY29uZHMpIDsKIyAzNzEgIi91c3IvaW5jbHVk
ZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19z
ZWNvbmRzKSA7CgoKCgoKCmV4dGVybiBfX3VzZWNvbmRzX3QgdWFsYXJtIChfX3VzZWNvbmRzX3Qg
X192YWx1ZSwgX191c2Vjb25kc190IF9faW50ZXJ2YWwpCiAgICAgOwoKCgpleHRlcm4gaW50IHVz
bGVlcCAoX191c2Vjb25kc190IF9fdXNlY29uZHMpIDsKCgoKCgpleHRlcm4gaW50IHBhdXNlICh2
b2lkKSA7CgoKCmV4dGVybiBpbnQgY2hvd24gKGNvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBf
X293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50
IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gaW50
IGxjaG93biAoY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19n
cm91cCkKICAgICA7CgoKCgpleHRlcm4gaW50IGNoZGlyIChjb25zdCBjaGFyICpfX3BhdGgpIDsK
CgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2ZkKSA7CiMgNDIzICIvdXNyL2luY2x1ZGUvdW5p
c3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUp
IDsKCgoKCgpleHRlcm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIDsKCgoKCgoK
ZXh0ZXJuIGNoYXIgKmdldHdkIChjaGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGludCBkdXAgKGlu
dCBfX2ZkKSA7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQgX19mZCwgaW50IF9fZmQyKSA7CgoKZXh0
ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hhciAqKmVudmlyb247CgoKCgoKZXh0ZXJu
IGludCBleGVjdmUgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqY29uc3QgX19hcmd2W10sCiAg
ICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBfX2VudnBbXSkgOwoKCgoKZXh0ZXJuIGludCBm
ZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqY29uc3QgX19hcmd2W10sIGNoYXIgKmNvbnN0IF9fZW52
cFtdKQogICAgIDsKCgoKCmV4dGVybiBpbnQgZXhlY3YgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hh
ciAqY29uc3QgX19hcmd2W10pIDsKCgoKZXh0ZXJuIGludCBleGVjbGUgKGNvbnN0IGNoYXIgKl9f
cGF0aCwgY29uc3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgpleHRlcm4gaW50IGV4ZWNsIChjb25z
dCBjaGFyICpfX3BhdGgsIGNvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKZXh0ZXJuIGludCBl
eGVjdnAgKGNvbnN0IGNoYXIgKl9fZmlsZSwgY2hhciAqY29uc3QgX19hcmd2W10pIDsKCgoKCmV4
dGVybiBpbnQgZXhlY2xwIChjb25zdCBjaGFyICpfX2ZpbGUsIGNvbnN0IGNoYXIgKl9fYXJnLCAu
Li4pIDsKCgoKCmV4dGVybiBpbnQgbmljZSAoaW50IF9faW5jKSA7CgoKCgpleHRlcm4gdm9pZCBf
ZXhpdCAoaW50IF9fc3RhdHVzKSA7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFt
ZS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwplbnVtCiAgewog
ICAgX1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9JTlBVVCwK
CiAgICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBFX0JVRiwK
CiAgICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAgX1BDX1ZE
SVNBQkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBfUENfUFJJ
T19JTywKCiAgICBfUENfU09DS19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUywKCiAgICBf
UENfUkVDX0lOQ1JfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwKCiAgICBf
UENfUkVDX01JTl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19YRkVSX0FMSUdOLAoKICAgIF9QQ19B
TExPQ19TSVpFX01JTiwKCiAgICBfUENfU1lNTElOS19NQVgKCiAgfTsKCgplbnVtCiAgewogICAg
X1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RDSywKCiAgICBf
U0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJFQU1fTUFYLAoK
ICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBfU0NfU0FWRURf
SURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklUWV9TQ0hFRFVM
SU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywKCiAgICBfU0Nf
UFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBfU0NfRlNZTkMs
CgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBfU0NfTUVNTE9D
S19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01FU1NBR0VfUEFT
U0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RT
LAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAgICBfU0NfQUlP
X1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBfU0NfTVFfT1BF
Tl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoKICAgIF9TQ19Q
QUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1TX01BWCwKCiAg
ICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAgIF9TQ19USU1F
Ul9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1fTUFYLAoKICAg
IF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAgX1NDX0NPTExf
V0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0NfRVhQUl9ORVNU
X01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgogICAgX1NDX0NI
QVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0NfMl9DX0JJTkQs
CgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1NDXzJfRk9SVF9S
VU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgogICAgX1NDX1BJ
SSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBfU0NfUElJX0lO
VEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9TQ19TRUxFQ1Qs
CgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX0lPVl9NQVggPSBfU0NfVUlPX01BWElPViwK
CiAgICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVSTkVUX0RHUkFN
LAoKICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywKCiAgICBfU0Nf
UElJX09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKCiAgICBfU0NfVEhSRUFEUywKCiAgICBf
U0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TLAoKICAgIF9TQ19HRVRHUl9SX1NJWkVfTUFYLAoKICAg
IF9TQ19HRVRQV19SX1NJWkVfTUFYLAoKICAgIF9TQ19MT0dJTl9OQU1FX01BWCwKCiAgICBfU0Nf
VFRZX05BTUVfTUFYLAoKICAgIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TLAoKICAg
IF9TQ19USFJFQURfS0VZU19NQVgsCgogICAgX1NDX1RIUkVBRF9TVEFDS19NSU4sCgogICAgX1ND
X1RIUkVBRF9USFJFQURTX01BWCwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSLAoKICAg
IF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUsCgogICAgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hF
RFVMSU5HLAoKICAgIF9TQ19USFJFQURfUFJJT19JTkhFUklULAoKICAgIF9TQ19USFJFQURfUFJJ
T19QUk9URUNULAoKICAgIF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQsCgoKICAgIF9TQ19OUFJP
Q0VTU09SU19DT05GLAoKICAgIF9TQ19OUFJPQ0VTU09SU19PTkxOLAoKICAgIF9TQ19QSFlTX1BB
R0VTLAoKICAgIF9TQ19BVlBIWVNfUEFHRVMsCgogICAgX1NDX0FURVhJVF9NQVgsCgogICAgX1ND
X1BBU1NfTUFYLAoKCiAgICBfU0NfWE9QRU5fVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fWENVX1ZF
UlNJT04sCgogICAgX1NDX1hPUEVOX1VOSVgsCgogICAgX1NDX1hPUEVOX0NSWVBULAoKICAgIF9T
Q19YT1BFTl9FTkhfSTE4TiwKCiAgICBfU0NfWE9QRU5fU0hNLAoKCiAgICBfU0NfMl9DSEFSX1RF
Uk0sCgogICAgX1NDXzJfQ19WRVJTSU9OLAoKICAgIF9TQ18yX1VQRSwKCgogICAgX1NDX1hPUEVO
X1hQRzIsCgogICAgX1NDX1hPUEVOX1hQRzMsCgogICAgX1NDX1hPUEVOX1hQRzQsCgoKICAgIF9T
Q19DSEFSX0JJVCwKCiAgICBfU0NfQ0hBUl9NQVgsCgogICAgX1NDX0NIQVJfTUlOLAoKICAgIF9T
Q19JTlRfTUFYLAoKICAgIF9TQ19JTlRfTUlOLAoKICAgIF9TQ19MT05HX0JJVCwKCiAgICBfU0Nf
V09SRF9CSVQsCgogICAgX1NDX01CX0xFTl9NQVgsCgogICAgX1NDX05aRVJPLAoKICAgIF9TQ19T
U0laRV9NQVgsCgogICAgX1NDX1NDSEFSX01BWCwKCiAgICBfU0NfU0NIQVJfTUlOLAoKICAgIF9T
Q19TSFJUX01BWCwKCiAgICBfU0NfU0hSVF9NSU4sCgogICAgX1NDX1VDSEFSX01BWCwKCiAgICBf
U0NfVUlOVF9NQVgsCgogICAgX1NDX1VMT05HX01BWCwKCiAgICBfU0NfVVNIUlRfTUFYLAoKCiAg
ICBfU0NfTkxfQVJHTUFYLAoKICAgIF9TQ19OTF9MQU5HTUFYLAoKICAgIF9TQ19OTF9NU0dNQVgs
CgogICAgX1NDX05MX05NQVgsCgogICAgX1NDX05MX1NFVE1BWCwKCiAgICBfU0NfTkxfVEVYVE1B
WCwKCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGQklH
LAoKICAgIF9TQ19YQlM1X0xQNjRfT0ZGNjQsCgogICAgX1NDX1hCUzVfTFBCSUdfT0ZGQklHLAoK
CiAgICBfU0NfWE9QRU5fTEVHQUNZLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRSwKCiAgICBfU0Nf
WE9QRU5fUkVBTFRJTUVfVEhSRUFEUywKCgogICAgX1NDX0FEVklTT1JZX0lORk8sCgogICAgX1ND
X0JBUlJJRVJTLAoKICAgIF9TQ19CQVNFLAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVCwKCiAgICBf
U0NfQ19MQU5HX1NVUFBPUlRfUiwKCiAgICBfU0NfQ0xPQ0tfU0VMRUNUSU9OLAoKICAgIF9TQ19D
UFVUSU1FLAoKICAgIF9TQ19USFJFQURfQ1BVVElNRSwKCiAgICBfU0NfREVWSUNFX0lPLAoKICAg
IF9TQ19ERVZJQ0VfU1BFQ0lGSUMsCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQ19SLAoKICAgIF9T
Q19GRF9NR01ULAoKICAgIF9TQ19GSUZPLAoKICAgIF9TQ19QSVBFLAoKICAgIF9TQ19GSUxFX0FU
VFJJQlVURVMsCgogICAgX1NDX0ZJTEVfTE9DS0lORywKCiAgICBfU0NfRklMRV9TWVNURU0sCgog
ICAgX1NDX01PTk9UT05JQ19DTE9DSywKCiAgICBfU0NfTVVMVElfUFJPQ0VTUywKCiAgICBfU0Nf
U0lOR0xFX1BST0NFU1MsCgogICAgX1NDX05FVFdPUktJTkcsCgogICAgX1NDX1JFQURFUl9XUklU
RVJfTE9DS1MsCgogICAgX1NDX1NQSU5fTE9DS1MsCgogICAgX1NDX1JFR0VYUCwKCiAgICBfU0Nf
UkVHRVhfVkVSU0lPTiwKCiAgICBfU0NfU0hFTEwsCgogICAgX1NDX1NJR05BTFMsCgogICAgX1ND
X1NQQVdOLAoKICAgIF9TQ19TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1RIUkVBRF9TUE9SQURJ
Q19TRVJWRVIsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRSwKCiAgICBfU0NfU1lTVEVNX0RBVEFC
QVNFX1IsCgogICAgX1NDX1RJTUVPVVRTLAoKICAgIF9TQ19UWVBFRF9NRU1PUllfT0JKRUNUUywK
CiAgICBfU0NfVVNFUl9HUk9VUFMsCgogICAgX1NDX1VTRVJfR1JPVVBTX1IsCgogICAgX1NDXzJf
UEJTLAoKICAgIF9TQ18yX1BCU19BQ0NPVU5USU5HLAoKICAgIF9TQ18yX1BCU19MT0NBVEUsCgog
ICAgX1NDXzJfUEJTX01FU1NBR0UsCgogICAgX1NDXzJfUEJTX1RSQUNLLAoKICAgIF9TQ19TWU1M
T09QX01BWCwKCiAgICBfU0NfU1RSRUFNUywKCiAgICBfU0NfMl9QQlNfQ0hFQ0tQT0lOVCwKCgog
ICAgX1NDX1Y2X0lMUDMyX09GRjMyLAoKICAgIF9TQ19WNl9JTFAzMl9PRkZCSUcsCgogICAgX1ND
X1Y2X0xQNjRfT0ZGNjQsCgogICAgX1NDX1Y2X0xQQklHX09GRkJJRywKCgogICAgX1NDX0hPU1Rf
TkFNRV9NQVgsCgogICAgX1NDX1RSQUNFLAoKICAgIF9TQ19UUkFDRV9FVkVOVF9GSUxURVIsCgog
ICAgX1NDX1RSQUNFX0lOSEVSSVQsCgogICAgX1NDX1RSQUNFX0xPRwoKICB9OwoKCgoKCmVudW0K
ICB7CiAgICBfQ1NfUEFUSCwKCgoKCiAgICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCgogICAgX0NT
X0xGU19MREZMQUdTLAoKICAgIF9DU19MRlNfTElCUywKCiAgICBfQ1NfTEZTX0xJTlRGTEFHUywK
CiAgICBfQ1NfTEZTNjRfQ0ZMQUdTLAoKICAgIF9DU19MRlM2NF9MREZMQUdTLAoKICAgIF9DU19M
RlM2NF9MSUJTLAoKICAgIF9DU19MRlM2NF9MSU5URkxBR1MsCgoKCgogICAgX0NTX1hCUzVfSUxQ
MzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMCwKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MREZMQUdT
LAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZG
MzJfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NT
X1hCUzVfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJ
QlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9M
UDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xERkxBR1MsCgogICAg
X0NTX1hCUzVfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElOVEZM
QUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfTFBC
SUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAg
X0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19QT1NJWF9WNl9JTFAz
Ml9PRkYzMl9DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xERkxBR1MsCgog
ICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMy
X09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0NGTEFHUywK
CiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2
X0lMUDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElOVEZM
QUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfUE9TSVhf
VjZfTFA2NF9PRkY2NF9MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xJQlMs
CgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9W
Nl9MUEJJR19PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTERG
TEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1BPU0lY
X1Y2X0xQQklHX09GRkJJR19MSU5URkxBR1MsCgoKCiAgICBfQ1NfVjZfV0lEVEhfUkVTVFJJQ1RF
RF9FTlZTCgogIH07CiMgNTAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCmV4dGVybiBs
b25nIGludCBwYXRoY29uZiAoY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSA7CgoKZXh0
ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpIDsKCgpleHRlcm4g
bG9uZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgOwoKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIg
KGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIDsKCgoKCmV4dGVybiBfX3Bp
ZF90IGdldHBpZCAodm9pZCkgOwoKCmV4dGVybiBfX3BpZF90IGdldHBwaWQgKHZvaWQpIDsKCgoK
CmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIDsKIyA1MzYgIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMwpleHRlcm4gX19waWRfdCBfX2dldHBnaWQgKF9fcGlkX3QgX19waWQpIDsKCmV4dGVy
biBfX3BpZF90IGdldHBnaWQgKF9fcGlkX3QgX19waWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRw
Z2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgOwojIDU2MiAiL3Vzci9pbmNsdWRl
L3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgc2V0cGdycCAodm9pZCkgOwojIDU4MCAiL3Vzci9pbmNs
dWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9pZCkgOwoKCgpleHRlcm4g
X19waWRfdCBnZXRzaWQgKF9fcGlkX3QgX19waWQpIDsKCgoKZXh0ZXJuIF9fdWlkX3QgZ2V0dWlk
ICh2b2lkKSA7CgoKZXh0ZXJuIF9fdWlkX3QgZ2V0ZXVpZCAodm9pZCkgOwoKCmV4dGVybiBfX2dp
ZF90IGdldGdpZCAodm9pZCkgOwoKCmV4dGVybiBfX2dpZF90IGdldGVnaWQgKHZvaWQpIDsKCgoK
CmV4dGVybiBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSA7CgoK
CmV4dGVybiBpbnQgZ3JvdXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSA7CgoKCgoKCmV4dGVybiBp
bnQgc2V0dWlkIChfX3VpZF90IF9fdWlkKSA7CgoKCgpleHRlcm4gaW50IHNldHJldWlkIChfX3Vp
ZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0ZXVpZCAoX191
aWRfdCBfX3VpZCkgOwoKCgoKCgpleHRlcm4gaW50IHNldGdpZCAoX19naWRfdCBfX2dpZCkgOwoK
CgoKZXh0ZXJuIGludCBzZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSA7
CgoKCgpleHRlcm4gaW50IHNldGVnaWQgKF9fZ2lkX3QgX19naWQpIDsKCgoKCgoKZXh0ZXJuIF9f
cGlkX3QgZm9yayAodm9pZCkgOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAodm9pZCkgOwoK
CgoKCmV4dGVybiBjaGFyICp0dHluYW1lIChpbnQgX19mZCkgOwoKCgpleHRlcm4gaW50IHR0eW5h
bWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsKCgoKZXh0ZXJu
IGludCBpc2F0dHkgKGludCBfX2ZkKSA7CgoKCgoKZXh0ZXJuIGludCB0dHlzbG90ICh2b2lkKSA7
CgoKCgpleHRlcm4gaW50IGxpbmsgKGNvbnN0IGNoYXIgKl9fZnJvbSwgY29uc3QgY2hhciAqX190
bykgOwoKCgpleHRlcm4gaW50IHN5bWxpbmsgKGNvbnN0IGNoYXIgKl9fZnJvbSwgY29uc3QgY2hh
ciAqX190bykgOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoY29uc3QgY2hhciAqIF9fcGF0aCwg
Y2hhciAqIF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKCgoKZXh0
ZXJuIGludCB1bmxpbmsgKGNvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCmV4dGVybiBpbnQgcm1kaXIg
KGNvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBncnAgKGludCBf
X2ZkKSA7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdycF9p
ZCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgZ2V0
bG9naW5fciAoY2hhciAqX19uYW1lLCBzaXplX3QgX19uYW1lX2xlbikgOwoKCgoKZXh0ZXJuIGlu
dCBzZXRsb2dpbiAoY29uc3QgY2hhciAqX19uYW1lKSA7CiMgNzI2ICIvdXNyL2luY2x1ZGUvdW5p
c3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwojIDM4ICIvdXNyL2luY2x1
ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuICJDIiB7CiMgNDcgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIg
MwpleHRlcm4gY2hhciAqb3B0YXJnOwojIDYxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0
ZXJuIGludCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRv
cHQ7CiMgMTQ1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGludCBnZXRvcHQgKGlu
dCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwgY29uc3QgY2hhciAqX19zaG9ydG9wdHMp
OwojIDE3NSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCn0KIyA3MjcgIi91c3IvaW5jbHVkZS91
bmlzdGQuaCIgMiAzCgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUs
IHNpemVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChjb25zdCBjaGFy
ICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgpleHRlcm4gaW50IHNldGhvc3RpZCAobG9uZyBp
bnQgX19pZCkgOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAoY2hhciAqX19uYW1lLCBz
aXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBzZXRkb21haW5uYW1lIChjb25zdCBjaGFyICpfX25h
bWUsIHNpemVfdCBfX2xlbikgOwoKCgoKCmV4dGVybiBpbnQgdmhhbmd1cCAodm9pZCkgOwoKCmV4
dGVybiBpbnQgcmV2b2tlIChjb25zdCBjaGFyICpfX2ZpbGUpIDsKCgoKCgoKCmV4dGVybiBpbnQg
cHJvZmlsICh1bnNpZ25lZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6
ZSwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2Nh
bGUpIDsKCgoKCgpleHRlcm4gaW50IGFjY3QgKGNvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRl
cm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSA7CmV4dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAo
dm9pZCkgOwpleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwgKHZvaWQpIDsKCgoKCgpleHRlcm4gaW50
IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9fbm9jbG9zZSkgOwoKCgoKCgpleHRlcm4gaW50
IGNocm9vdCAoY29uc3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChj
b25zdCBjaGFyICpfX3Byb21wdCkgOwoKCgoKCmV4dGVybiBpbnQgZnN5bmMgKGludCBfX2ZkKSA7
CgoKCgoKCmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQpIDsKCgpleHRlcm4gdm9pZCBz
eW5jICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSA7CgoKCgpleHRl
cm4gaW50IHRydW5jYXRlIChjb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19sZW5ndGgpIDsK
IyA4MzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHRydW5jYXRlNjQgKGNv
bnN0IGNoYXIgKl9fZmlsZSwgX19vZmY2NF90IF9fbGVuZ3RoKSA7CgoKCgpleHRlcm4gaW50IGZ0
cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgpIDsKIyA4NTEgIi91c3IvaW5jbHVk
ZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZ0cnVuY2F0ZTY0IChpbnQgX19mZCwgX19vZmY2NF90
IF9fbGVuZ3RoKSA7CgoKCgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICh2b2lkKSA7CiMgODY2
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikg
OwoKCgoKCmV4dGVybiB2b2lkICpzYnJrIChpbnRwdHJfdCBfX2RlbHRhKSA7CiMgODg3ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9f
c3lzbm8sIC4uLikgOwojIDkwNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQg
bG9ja2YgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIDsKIyA5MTcgIi91c3Iv
aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGxvY2tmNjQgKGludCBfX2ZkLCBpbnQgX19j
bWQsIF9fb2ZmNjRfdCBfX2xlbikgOwojIDkzOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4
dGVybiBpbnQgZmRhdGFzeW5jIChpbnQgX19maWxkZXMpIDsKCgoKCgoKCmV4dGVybiBjaGFyICpj
cnlwdCAoY29uc3QgY2hhciAqX19rZXksIGNvbnN0IGNoYXIgKl9fc2FsdCkgOwoKCgpleHRlcm4g
dm9pZCBlbmNyeXB0IChjaGFyICpfX2Jsb2NrLCBpbnQgX19lZGZsYWcpIDsKCgoKCgoKZXh0ZXJu
IHZvaWQgc3dhYiAoY29uc3Qgdm9pZCAqIF9fZnJvbSwgdm9pZCAqIF9fdG8sCiAgICAgICAgICAg
ICAgICAgIHNzaXplX3QgX19uKSA7CgoKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAq
X19zKSA7CiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFk
X2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwoKCn0KIyAxOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvY29uZmlnL3Bvc2l4X2ZlYXR1cmVzLmhwcCIgMgojIDY4ICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC9jb25maWcvcGxhdGZvcm0vbGludXguaHBwIiAyCiMgNTQgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L2NvbmZpZy5ocHAiIDIKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9jb25maWcvc3VmZml4LmhwcCIgMQojIDI2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9jb25maWcvc3VmZml4LmhwcCIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3lz
bGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMiAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDQ2ICIvdXNyL2luY2x1ZGUv
bGltaXRzLmgiIDIgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bv
c2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAz
NiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGlu
dXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAz
CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9p
bmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGlt
LmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVu
X2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIv
dXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGlt
aXRzLmgiIDIgMwojIDEzMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvbGltaXRzLmgi
IDIgMwojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9jb25maWcvc3VmZml4LmhwcCIg
MgojIDU4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9jb25maWcuaHBwIiAyCiMgMTkgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3N0YXRpY19hc3NlcnQuaHBwIiAyCgoKCgoKCgpuYW1l
c3BhY2UgYm9vc3R7CgoKdGVtcGxhdGUgPGJvb2wgeD4gc3RydWN0IFNUQVRJQ19BU1NFUlRJT05f
RkFJTFVSRTsKCnRlbXBsYXRlIDw+IHN0cnVjdCBTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8dHJ1
ZT4geyBlbnVtIHsgdmFsdWUgPSAxIH07IH07CgoKdGVtcGxhdGU8aW50IHg+IHN0cnVjdCBzdGF0
aWNfYXNzZXJ0X3Rlc3R7fTsKCn0KIyA3ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5j
dGlvbi5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F0LmhwcCIg
MQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXQuaHBwIgojIDEgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdF9md2QuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdF9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3Bh
Y2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgYXRfdHJhaXRzOwp0ZW1w
bGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UsIHR5cGVuYW1lIE4gPiBzdHJ1Y3QgYXQ7Cgp9Cn0KIyAy
MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F0LmhwcCIgMgojIDEgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIgMQojIDIxICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvaW50ZWdyYWxfYy5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvbXBsL2ludGVncmFsX2NfZndkLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvaW50ZWdyYWxfY19md2QuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcCIgMQojIDIwICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHAiCiMg
MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBwIiAxCiMg
MjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5k
LmhwcCIgMgojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaW50ZWdyYWxfY19m
d2QuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKCgoKCnRlbXBsYXRl
PCB0eXBlbmFtZSBULCBUIE4gPiBzdHJ1Y3QgaW50ZWdyYWxfYzsKCn19CiMgMjIgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIgMgojIDEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2ljZV9jYXN0LmhwcCIgMQojIDIzICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvaW50ZWdyYWxfYy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvY3Rwcy5ocHAiIDEKIyAyNCAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2ludGVncmFsX2MuaHBwIiAyCiMgMzYgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC9tcGwvYXV4Xy9pbnRlZ3JhbF93cmFwcGVyLmhwcCIgMQojIDIxICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbnRlZ3JhbF93cmFwcGVyLmhwcCIKIyAxICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvbnR0cC5ocHAiIDEKIyAy
MCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vY29uZmlnL250dHAuaHBwIgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9tc3ZjLmhwcCIg
MQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvbnR0cC5o
cHAiIDIKIyAyMiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW50ZWdyYWxf
d3JhcHBlci5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9j
b25maWcvc3RhdGljX2NvbnN0YW50LmhwcCIgMQojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9tcGwvYXV4Xy9pbnRlZ3JhbF93cmFwcGVyLmhwcCIgMgoKCiMgMSAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHAiIDEKIyAxOCAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwIiAxCiMgMTkgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwIiAyCiMgMjYgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2ludGVncmFsX3dyYXBwZXIuaHBwIiAyCiMg
MzkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2ludGVncmFsX3dyYXBwZXIu
aHBwIgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFt
ZSBULCBUIE4gPgpzdHJ1Y3QgaW50ZWdyYWxfYwp7CiAgICBzdGF0aWMgY29uc3QgVCB2YWx1ZSA9
IE47CgoKCgoKICAgIHR5cGVkZWYgaW50ZWdyYWxfYyB0eXBlOwoKICAgIHR5cGVkZWYgVCB2YWx1
ZV90eXBlOwojIDcwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbnRlZ3Jh
bF93cmFwcGVyLmhwcCIKICAgIHR5cGVkZWYgaW50ZWdyYWxfYzwgVCwgc3RhdGljX2Nhc3Q8VD4o
KHZhbHVlICsgMSkpID4gbmV4dDsKICAgIHR5cGVkZWYgaW50ZWdyYWxfYzwgVCwgc3RhdGljX2Nh
c3Q8VD4oKHZhbHVlIC0gMSkpID4gcHJpb3I7CgoKCgoKCiAgICBvcGVyYXRvciBUKCkgY29uc3Qg
eyByZXR1cm4gdGhpcy0+dmFsdWU7IH0KfTsKCn19CiMgMzcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIgMgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNw
YWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgYm9vbCBDID4Kc3RydWN0IGludGVncmFsX2M8Ym9vbCwgQz4K
ewogICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBDOwogICAgdHlwZWRlZiBpbnRlZ3JhbF9j
IHR5cGU7CiAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+dmFsdWU7IH0K
fTsKfX0KIyAyMiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F0LmhwcCIgMgojIDEg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2F0X2ltcGwuaHBwIiAxCiMgMjAg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2F0X2ltcGwuaHBwIgojIDEgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9iZWdpbl9lbmQuaHBwIiAxCiMgMjAgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9iZWdpbl9lbmQuaHBwIgojIDEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9iZWdpbl9lbmRfZndkLmhwcCIgMQojIDIwICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvYmVnaW5fZW5kX2Z3ZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7
Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBiZWdpbl90
cmFpdHM7CnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgZW5kX3RyYWl0czsKCnRlbXBs
YXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBiZWdpbjsKdGVtcGxhdGU8IHR5cGVuYW1l
IFNlcXVlbmNlID4gc3RydWN0IGVuZDsKCn0KfQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9tcGwvYmVnaW5fZW5kLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L21wbC9hdXhfL2JlZ2luX2VuZF9pbXBsLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvYXV4Xy9iZWdpbl9lbmRfaW1wbC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvbXBsL3NlcXVlbmNlX3RhZ19md2QuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9zZXF1ZW5jZV90YWdfZndkLmhwcCIKbmFtZXNwYWNlIGJvb3N0
IHsgbmFtZXNwYWNlIG1wbCB7CgpzdHJ1Y3QgbmVzdGVkX2JlZ2luX2VuZF90YWc7CnN0cnVjdCBu
b25fc2VxdWVuY2VfdGFnOwoKdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHNl
cXVlbmNlX3RhZzsKCn19CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhf
L2JlZ2luX2VuZF9pbXBsLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21w
bC92b2lkLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvdm9pZC5o
cHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Jvb2wuaHBwIiAxCiMgMjEg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9ib29sLmhwcCIKIyAxICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvYm9vbF9md2QuaHBwIiAxCiMgMjEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9ib29sX2Z3ZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFj
ZSBtcGwgewoKdGVtcGxhdGU8IGJvb2wgQ18gPiBzdHJ1Y3QgYm9vbF87CgoKdHlwZWRlZiBib29s
Xzx0cnVlPiB0cnVlXzsKdHlwZWRlZiBib29sXzxmYWxzZT4gZmFsc2VfOwoKfX0KIyAyMiAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Jvb2wuaHBwIiAyCgoKbmFtZXNwYWNlIGJvb3N0
IHsgbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgYm9vbCBDXyA+IHN0cnVjdCBib29sXwp7CiAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IENfOwogICAgdHlwZWRlZiBib29sXyB0eXBlOwog
ICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gdGhpcy0+dmFsdWU7IH0KfTsKCn19CiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L21wbC92b2lkLmhwcCIgMgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoK
CgoKCnN0cnVjdCB2b2lkXyB7fTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4Kc3RydWN0IGlzX3Zv
aWRfCiAgICA6IGZhbHNlXwp7CgoKCn07Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBpc192b2lkXzx2b2lk
Xz4KICAgIDogdHJ1ZV8KewoKCgp9OwoKfQp9CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L21wbC9hdXhfL2JlZ2luX2VuZF9pbXBsLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L21wbC9hdXhfL3RyYWl0c19sYW1iZGFfc3BlYy5ocHAiIDEKIyAyMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdHJhaXRzX2xhbWJkYV9zcGVjLmhwcCIKIyAx
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvcGFyYW1z
LmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9j
ZXNzb3IvcGFyYW1zLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4
Xy9jb25maWcvcHJlcHJvY2Vzc29yLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvcGFyYW1zLmhwcCIgMgojIDIyICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy90cmFpdHNfbGFtYmRhX3NwZWMuaHBwIiAyCiMgMSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2xhbWJkYS5ocHAiIDEK
IyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2xhbWJkYS5o
cHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vY29uZmlnL3R0cC5o
cHAiIDEKIyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2xh
bWJkYS5ocHAiIDIKIyAyMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdHJh
aXRzX2xhbWJkYV9zcGVjLmhwcCIgMgojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t
cGwvYXV4Xy9iZWdpbl9lbmRfaW1wbC5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9tcGwvYXV4Xy9jb25maWcvZXRpLmhwcCIgMQojIDI1ICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvYXV4Xy9iZWdpbl9lbmRfaW1wbC5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7
Cm5hbWVzcGFjZSBtcGwgewoKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3QgYmVn
aW5fdHJhaXRzCnsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBhbGdv
cml0aG0KICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFNlcXVlbmNlOjpiZWdpbiB0eXBl
OwogICAgfTsKfTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3QgZW5kX3RyYWl0cwp7
CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UgPiBzdHJ1Y3QgYWxnb3JpdGhtCiAgICB7
CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBTZXF1ZW5jZTo6ZW5kIHR5cGU7CiAgICB9Owp9Owoj
IDY1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9iZWdpbl9lbmRfaW1wbC5o
cHAiCnRlbXBsYXRlPD4gc3RydWN0IGJlZ2luX3RyYWl0czxuZXN0ZWRfYmVnaW5fZW5kX3RhZz4g
eyB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UgPiBzdHJ1Y3QgYWxnb3JpdGhtIHsgdHlwZWRl
ZiB0eXBlbmFtZSBTZXF1ZW5jZTo6YmVnaW4gdHlwZTsgfTsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3Qg
ZW5kX3RyYWl0czxuZXN0ZWRfYmVnaW5fZW5kX3RhZz4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2Vx
dWVuY2UgPiBzdHJ1Y3QgYWxnb3JpdGhtIHsgdHlwZWRlZiB0eXBlbmFtZSBTZXF1ZW5jZTo6ZW5k
IHR5cGU7IH07IH07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBiZWdpbl90cmFpdHM8bm9uX3NlcXVl
bmNlX3RhZz4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UgPiBzdHJ1Y3QgYWxnb3JpdGht
IHsgdHlwZWRlZiB2b2lkXyB0eXBlOyB9OyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBlbmRfdHJhaXRz
PG5vbl9zZXF1ZW5jZV90YWc+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0
IGFsZ29yaXRobSB7IHR5cGVkZWYgdm9pZF8gdHlwZTsgfTsgfTsKIyA4MiAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vYmVnaW5fZW5kX2ltcGwuaHBwIgoKCgp9Cn0KIyAyMiAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2JlZ2luX2VuZC5ocHAiIDIKIyAxICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9zZXF1ZW5jZV90YWcuaHBwIiAxCiMgMzAg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3NlcXVlbmNlX3RhZy5ocHAiCiMg
MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3NlcXVlbmNlX3RhZy5ocHAiIDEKIyAy
MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3NlcXVlbmNlX3RhZy5ocHAiCiMgMSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX3RhZy5ocHAiIDEKIyAyMCAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX3RhZy5ocHAiCiMgMSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX3h4eC5ocHAiIDEKIyAyMCAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX3h4eC5ocHAiCiMgMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdHlwZV93cmFwcGVyLmhwcCIgMQojIDIwICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy90eXBlX3dyYXBwZXIuaHBwIgpuYW1l
c3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwg
dHlwZW5hbWUgVCA+IHN0cnVjdCB0eXBlX3dyYXBwZXIKewogICAgdHlwZWRlZiBUIHR5cGU7Cn07
Cgp9Cn0KfQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9oYXNfeHh4
LmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3llc19uby5o
cHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8veWVzX25vLmhw
cCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cm5hbWVzcGFjZSBhdXggewoKdHlw
ZWRlZiBjaGFyICgmbm9fdGFnKVsxXTsKdHlwZWRlZiBjaGFyICgmeWVzX3RhZylbMl07Cgp9Cn0K
fQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9oYXNfeHh4LmhwcCIg
MgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9tc3ZjX3R5
cGVuYW1lLmhwcCIgMQojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9o
YXNfeHh4LmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Nv
bmZpZy9vdmVybG9hZF9yZXNvbHV0aW9uLmhwcCIgMQojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvYXV4Xy9oYXNfeHh4LmhwcCIgMgojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvYXV4Xy9oYXNfdGFnLmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNw
YWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IGJvb3N0Ojpt
cGw6OmF1eDo6eWVzX3RhZyBoYXNfdGFnX2hlbHBlciggYm9vc3Q6Om1wbDo6YXV4Ojp0eXBlX3dy
YXBwZXI8VD4gY29uc3Qgdm9sYXRpbGUqICwgYm9vc3Q6Om1wbDo6YXV4Ojp0eXBlX3dyYXBwZXI8
dHlwZW5hbWUgVDo6dGFnPiogPSAwICk7IGJvb3N0OjptcGw6OmF1eDo6bm9fdGFnIGhhc190YWdf
aGVscGVyKC4uLik7IHRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGhhc190YWcgeyB0eXBl
ZGVmIGJvb3N0OjptcGw6OmF1eDo6dHlwZV93cmFwcGVyPFQ+IHRfOyBzdGF0aWMgY29uc3QgYm9v
bCB2YWx1ZSA9IHNpemVvZigoaGFzX3RhZ19oZWxwZXIpKHN0YXRpY19jYXN0PHRfKj4oMCkpKSA9
PSBzaXplb2YoYm9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnKTsgfTsKfX19CiMgMjIgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zZXF1ZW5jZV90YWcuaHBwIiAyCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX2JlZ2luLmhwcCIgMQojIDIyICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9oYXNfYmVnaW4uaHBwIgpuYW1lc3BhY2UgYm9v
c3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7CnRlbXBsYXRlPCB0eXBlbmFtZSBU
ID4gYm9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnIGhhc19iZWdpbl9oZWxwZXIoIGJvb3N0OjptcGw6
OmF1eDo6dHlwZV93cmFwcGVyPFQ+IGNvbnN0IHZvbGF0aWxlKiAsIGJvb3N0OjptcGw6OmF1eDo6
dHlwZV93cmFwcGVyPHR5cGVuYW1lIFQ6OmJlZ2luPiogPSAwICk7IGJvb3N0OjptcGw6OmF1eDo6
bm9fdGFnIGhhc19iZWdpbl9oZWxwZXIoLi4uKTsgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1
Y3QgaGFzX2JlZ2luIHsgdHlwZWRlZiBib29zdDo6bXBsOjphdXg6OnR5cGVfd3JhcHBlcjxUPiB0
Xzsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoKGhhc19iZWdpbl9oZWxwZXIpKHN0
YXRpY19jYXN0PHRfKj4oMCkpKSA9PSBzaXplb2YoYm9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnKTsg
fTsKfX19CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zZXF1ZW5jZV90YWcu
aHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVj
LmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy92b2lkX3Nw
ZWMuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9sYW1iZGFfZndkLmhw
cCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGFtYmRhX2Z3ZC5ocHAi
CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vbGFtYmRhX2FyaXR5X3Bh
cmFtLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGFtYmRhX2Z3
ZC5ocHAiIDIKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgp0ZW1wbGF0ZTwg
dHlwZW5hbWUgVCA+CnN0cnVjdCBsYW1iZGE7CgoKCgp9Cn0KIyAyMSAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVjLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvaW50X2Z3ZC5ocHAiIDEKIyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvbXBsL2ludF9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBs
IHsKdGVtcGxhdGU8IGludCBOID4gc3RydWN0IGludF87Cn19CiMgMjMgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2VudW0uaHBwIiAxCiMgMjUgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIKIyAxICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZGVmX3BhcmFt
c190YWlsLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9w
cmVwcm9jZXNzb3IvZGVmX3BhcmFtc190YWlsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvbGltaXRzL2FyaXR5LmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZGVmX3BhcmFtc190YWlsLmhwcCIgMgojIDEg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9kdHAuaHBwIiAxCiMg
MjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZf
cGFyYW1zX3RhaWwuaHBwIiAyCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVw
cm9jZXNzb3IvY29tbWFfaWYuaHBwIiAxCiMgMTYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L3ByZXByb2Nlc3Nvci9jb21tYV9pZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1hX2lmLmhwcCIgMQojIDE5ICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvcHVuY3R1YXRpb24vY29tbWFfaWYuaHBw
IgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL2lm
LmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvY29u
dHJvbC9pZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29y
L2NvbnRyb2wvaWlmLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVw
cm9jZXNzb3IvY29udHJvbC9pZi5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9wcmVwcm9jZXNzb3IvbG9naWNhbC9ib29sLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9pZi5ocHAiIDIKIyAyMCAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1hX2lmLmhwcCIg
MgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3ByZXByb2Nlc3Nvci9mYWNpbGl0aWVz
L2VtcHR5LmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNz
b3IvcHVuY3R1YXRpb24vY29tbWFfaWYuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1hLmhwcCIgMQojIDIyICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvcHVuY3R1YXRpb24vY29tbWFfaWYuaHBw
IiAyCiMgMTcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3ByZXByb2Nlc3Nvci9jb21tYV9p
Zi5ocHAiIDIKIyAyNSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJlcHJv
Y2Vzc29yL2RlZl9wYXJhbXNfdGFpbC5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9hbmQuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L3ByZXByb2Nlc3Nvci9sb2dpY2FsL2FuZC5ocHAiCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2xvZ2ljYWwvYml0YW5kLmhwcCIgMQojIDIx
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9hbmQuaHBw
IiAyCiMgMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nv
ci9kZWZfcGFyYW1zX3RhaWwuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
cHJlcHJvY2Vzc29yL2lkZW50aXR5LmhwcCIgMQojIDE2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9wcmVwcm9jZXNzb3IvaWRlbnRpdHkuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L3ByZXByb2Nlc3Nvci9mYWNpbGl0aWVzL2lkZW50aXR5LmhwcCIgMQojIDE3ICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvaWRlbnRpdHkuaHBwIiAyCiMgMjcg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZfcGFy
YW1zX3RhaWwuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vz
c29yL2VtcHR5LmhwcCIgMQojIDI4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4
Xy9wcmVwcm9jZXNzb3IvZGVmX3BhcmFtc190YWlsLmhwcCIgMgoKCgoKCgoKIyAxICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZmlsdGVyX3BhcmFtcy5o
cHAiIDEKIyAzNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vz
c29yL2RlZl9wYXJhbXNfdGFpbC5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Ivc3ViLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Ivc3ViLmhwcCIKIyAxICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvdHVwbGUuaHBwIiAxCiMgMjEg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9zdWIuaHBw
IiAyCiMgMzcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nv
ci9kZWZfcGFyYW1zX3RhaWwuaHBwIiAyCiMgMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9tcGwvYXV4Xy9hcml0eS5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
bXBsL2F1eF8vdm9pZF9zcGVjLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L21wbC9hdXhfL3RlbXBsYXRlX2FyaXR5X2Z3ZC5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvbXBsL2F1eF8vdGVtcGxhdGVfYXJpdHlfZndkLmhwcCIKbmFtZXNwYWNlIGJv
b3N0IHsKbmFtZXNwYWNlIG1wbCB7Cm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8IHR5cGVuYW1l
IEYgPiBzdHJ1Y3QgdGVtcGxhdGVfYXJpdHk7Cgp9Cn0KfQojIDI4ICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC9tcGwvYXV4Xy92b2lkX3NwZWMuaHBwIiAyCgojIDEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2FsZ29yaXRobV9uYW1lc3BhY2UuaHBwIiAxCiMgMzAgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIKIyAyNCAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3NlcXVlbmNlX3RhZy5ocHAiIDIKIyAxICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pc19tc3ZjX2V0aV9hcmcuaHBwIiAx
CiMgMjQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2lzX21zdmNfZXRpX2Fy
Zy5ocHAiCm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsK
IyA2NSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaXNfbXN2Y19ldGlfYXJn
LmhwcCIKfX19CiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zZXF1ZW5jZV90
YWcuaHBwIiAyCgoKCgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKIyA4MCAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3NlcXVlbmNlX3RhZy5ocHAiCm5hbWVzcGFjZSBh
dXggewoKdGVtcGxhdGU8IGJvb2wgaGFzX3RhZ18sIGJvb2wgaGFzX2JlZ2luXyA+CnN0cnVjdCBz
ZXF1ZW5jZV90YWdfaW1wbAp7CgoKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0
cnVjdCByZXN1bHQyXzsKfTsKIyAxMDAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9z
ZXF1ZW5jZV90YWcuaHBwIgp0ZW1wbGF0ZTw+IHN0cnVjdCBzZXF1ZW5jZV90YWdfaW1wbDx0cnVl
LHRydWU+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHJlc3VsdDJfIHsg
dHlwZWRlZiB0eXBlbmFtZSBTZXF1ZW5jZTo6dGFnIHR5cGU7IH07IH07CnRlbXBsYXRlPD4gc3Ry
dWN0IHNlcXVlbmNlX3RhZ19pbXBsPHRydWUsZmFsc2U+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFNl
cXVlbmNlID4gc3RydWN0IHJlc3VsdDJfIHsgdHlwZWRlZiB0eXBlbmFtZSBTZXF1ZW5jZTo6dGFn
IHR5cGU7IH07IH07CnRlbXBsYXRlPD4gc3RydWN0IHNlcXVlbmNlX3RhZ19pbXBsPGZhbHNlLHRy
dWU+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHJlc3VsdDJfIHsgdHlw
ZWRlZiBuZXN0ZWRfYmVnaW5fZW5kX3RhZyB0eXBlOyB9OyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBz
ZXF1ZW5jZV90YWdfaW1wbDxmYWxzZSxmYWxzZT4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVu
Y2UgPiBzdHJ1Y3QgcmVzdWx0Ml8geyB0eXBlZGVmIG5vbl9zZXF1ZW5jZV90YWcgdHlwZTsgfTsg
fTsKCgoKfQoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFNlcXVlbmNlID0gdm9pZF8KICAgID4K
c3RydWN0IHNlcXVlbmNlX3RhZwogICAgOiBhdXg6OnNlcXVlbmNlX3RhZ19pbXBsPAogICAgICAg
ICAgOjpib29zdDo6bXBsOjphdXg6Omhhc190YWc8U2VxdWVuY2U+Ojp2YWx1ZQogICAgICAgICwg
Ojpib29zdDo6bXBsOjphdXg6Omhhc19iZWdpbjxTZXF1ZW5jZT46OnZhbHVlCiAgICAgICAgPjo6
dGVtcGxhdGUgcmVzdWx0Ml88U2VxdWVuY2U+CnsKfTsKIyAxMjkgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L21wbC9zZXF1ZW5jZV90YWcuaHBwIgp0ZW1wbGF0ZTw+IHN0cnVjdCBzZXF1ZW5j
ZV90YWc8IHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiA9dm9p
ZF8gLHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9
dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBzZXF1ZW5jZV90YWc8IFQxID4geyB9OyB9OyB0ZW1wbGF0
ZTw+IHN0cnVjdCBsYW1iZGE8IHNlcXVlbmNlX3RhZzwgdm9pZF8gPiA+IHsgdHlwZWRlZiBzZXF1
ZW5jZV90YWc8IHZvaWRfID4gdHlwZTsgfTsKCn19CiMgMzEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9hdXhfL3NlcXVlbmNlX3RhZy5ocHAiIDIKIyAyMyAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvbXBsL2JlZ2luX2VuZC5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvbXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9iZWdpbl9lbmQuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3Qgewpu
YW1lc3BhY2UgbXBsIHsKCgoKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZv
aWRfCiAgICA+CnN0cnVjdCBiZWdpbgp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIHNlcXVlbmNlX3Rh
ZzxTZXF1ZW5jZT46OnR5cGUgdGFnXzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYmVnaW5fdHJhaXRz
PCB0YWdfID4KICAgICAgICA6OnRlbXBsYXRlIGFsZ29yaXRobTwgU2VxdWVuY2UgPjo6dHlwZSB0
eXBlOwogICAKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAg
ICA+CnN0cnVjdCBlbmQKewogICAgdHlwZWRlZiB0eXBlbmFtZSBzZXF1ZW5jZV90YWc8U2VxdWVu
Y2U+Ojp0eXBlIHRhZ187CiAgICB0eXBlZGVmIHR5cGVuYW1lIGVuZF90cmFpdHM8IHRhZ18gPgog
ICAgICAgIDo6dGVtcGxhdGUgYWxnb3JpdGhtPCBTZXF1ZW5jZSA+Ojp0eXBlIHR5cGU7CiAgIAp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgYmVnaW48IHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUg
VDEgLCB0eXBlbmFtZSBUMiA9dm9pZF8gLHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQg
PXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBiZWdpbjwgVDEgPiB7
IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgYmVnaW48IHZvaWRfID4gPiB7IHR5cGVk
ZWYgYmVnaW48IHZvaWRfID4gdHlwZTsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgZW5kPCB2b2lkXyA+
IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIgPXZvaWRfICx0eXBlbmFtZSBU
MyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRfID4gc3RydWN0
IGFwcGx5IDogZW5kPCBUMSA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBlbmQ8
IHZvaWRfID4gPiB7IHR5cGVkZWYgZW5kPCB2b2lkXyA+IHR5cGU7IH07Cgp9Cn0KIyAyMSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vYXRfaW1wbC5ocHAiIDIKIyAxICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDEKIyAyMCAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FkdmFuY2UuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L21wbC9uZWdhdGUuaHBwIiAxCiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L21wbC9uZWdhdGUuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9h
dXhfL3R5cGVvZi5ocHAiIDEKIyAzMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1
eF8vdHlwZW9mLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7CgoKCgpuYW1l
c3BhY2UgYXV4IHsKdGVtcGxhdGU8IGxvbmcgTiA+IHN0cnVjdCB0eXBlb2ZfYW5zd2VyIHsgdHlw
ZWRlZiBjaGFyIHR5cGVbTl07IH07CnRlbXBsYXRlPCBsb25nIFMgPiBzdHJ1Y3QgdHlwZW9mX2M7
Cn0KIyA1NCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdHlwZW9mLmhwcCIK
fQp9CgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7IHRl
bXBsYXRlPD4gc3RydWN0IHR5cGVvZl9jPDE+IHsgdHlwZWRlZiBib29sIHR5cGU7IH07IHR5cGVv
Zl9hbnN3ZXI8MT46OnR5cGUmIHR5cGVfaW5kZXgoYm9vbCBjb25zdCYpOyB9fX0KbmFtZXNwYWNl
IGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggeyB0ZW1wbGF0ZTw+IHN0cnVj
dCB0eXBlb2ZfYzwyPiB7IHR5cGVkZWYgc2lnbmVkIGNoYXIgdHlwZTsgfTsgdHlwZW9mX2Fuc3dl
cjwyPjo6dHlwZSYgdHlwZV9pbmRleChzaWduZWQgY2hhciBjb25zdCYpOyB9fX0KbmFtZXNwYWNl
IGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggeyB0ZW1wbGF0ZTw+IHN0cnVj
dCB0eXBlb2ZfYzwzPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OyB0eXBlb2ZfYW5z
d2VyPDM+Ojp0eXBlJiB0eXBlX2luZGV4KHVuc2lnbmVkIGNoYXIgY29uc3QmKTsgfX19Cm5hbWVz
cGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsgdGVtcGxhdGU8PiBz
dHJ1Y3QgdHlwZW9mX2M8ND4geyB0eXBlZGVmIGNoYXIgdHlwZTsgfTsgdHlwZW9mX2Fuc3dlcjw0
Pjo6dHlwZSYgdHlwZV9pbmRleChjaGFyIGNvbnN0Jik7IH19fQoKbmFtZXNwYWNlIGJvb3N0IHsg
bmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggeyB0ZW1wbGF0ZTw+IHN0cnVjdCB0eXBlb2Zf
Yzw1PiB7IHR5cGVkZWYgd2NoYXJfdCB0eXBlOyB9OyB0eXBlb2ZfYW5zd2VyPDU+Ojp0eXBlJiB0
eXBlX2luZGV4KHdjaGFyX3QgY29uc3QmKTsgfX19CgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3Bh
Y2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7IHRlbXBsYXRlPD4gc3RydWN0IHR5cGVvZl9jPDY+IHsg
dHlwZWRlZiBzaG9ydCB0eXBlOyB9OyB0eXBlb2ZfYW5zd2VyPDY+Ojp0eXBlJiB0eXBlX2luZGV4
KHNob3J0IGNvbnN0Jik7IH19fQpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFt
ZXNwYWNlIGF1eCB7IHRlbXBsYXRlPD4gc3RydWN0IHR5cGVvZl9jPDc+IHsgdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCB0eXBlOyB9OyB0eXBlb2ZfYW5zd2VyPDc+Ojp0eXBlJiB0eXBlX2luZGV4KHVu
c2lnbmVkIHNob3J0IGNvbnN0Jik7IH19fQpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBs
IHsgbmFtZXNwYWNlIGF1eCB7IHRlbXBsYXRlPD4gc3RydWN0IHR5cGVvZl9jPDg+IHsgdHlwZWRl
ZiBpbnQgdHlwZTsgfTsgdHlwZW9mX2Fuc3dlcjw4Pjo6dHlwZSYgdHlwZV9pbmRleChpbnQgY29u
c3QmKTsgfX19Cm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4
IHsgdGVtcGxhdGU8PiBzdHJ1Y3QgdHlwZW9mX2M8OT4geyB0eXBlZGVmIHVuc2lnbmVkIGludCB0
eXBlOyB9OyB0eXBlb2ZfYW5zd2VyPDk+Ojp0eXBlJiB0eXBlX2luZGV4KHVuc2lnbmVkIGludCBj
b25zdCYpOyB9fX0KbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBh
dXggeyB0ZW1wbGF0ZTw+IHN0cnVjdCB0eXBlb2ZfYzwxMD4geyB0eXBlZGVmIGxvbmcgdHlwZTsg
fTsgdHlwZW9mX2Fuc3dlcjwxMD46OnR5cGUmIHR5cGVfaW5kZXgobG9uZyBjb25zdCYpOyB9fX0K
bmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggeyB0ZW1wbGF0
ZTw+IHN0cnVjdCB0eXBlb2ZfYzwxMT4geyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdHlwZTsgfTsg
dHlwZW9mX2Fuc3dlcjwxMT46OnR5cGUmIHR5cGVfaW5kZXgodW5zaWduZWQgbG9uZyBjb25zdCYp
OyB9fX0KIyAyMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL25lZ2F0ZS5ocHAiIDIK
CgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8CiAgICAgIHR5
cGVuYW1lIFQgPSB2b2lkXwogICAgPgpzdHJ1Y3QgbmVnYXRlCnsKICAgIHR5cGVkZWYgdHlwZW5h
bWUgYm9vc3Q6Om1wbDo6YXV4Ojp0eXBlb2ZfYzwgc2l6ZW9mKDo6Ym9vc3Q6Om1wbDo6YXV4Ojp0
eXBlX2luZGV4KFQ6OnZhbHVlKSkgPjo6dHlwZSB2YWx1ZV90eXBlOwogICAgc3RhdGljIGNvbnN0
IHZhbHVlX3R5cGUgdmFsdWUgPSAoLVQ6OnZhbHVlKTsKCiAgICB0eXBlZGVmIGludGVncmFsX2M8
dmFsdWVfdHlwZSwgdmFsdWU+IHR5cGU7CgoKCgogICAKfTsKCnRlbXBsYXRlPD4gc3RydWN0IG5l
Z2F0ZTwgdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSAsIHR5cGVuYW1lIFQyID12b2lk
XyAsdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12
b2lkXyA+IHN0cnVjdCBhcHBseSA6IG5lZ2F0ZTwgVDEgPiB7IH07IH07IHRlbXBsYXRlPD4gc3Ry
dWN0IGxhbWJkYTwgbmVnYXRlPCB2b2lkXyA+ID4geyB0eXBlZGVmIG5lZ2F0ZTwgdm9pZF8gPiB0
eXBlOyB9OwoKfQp9CiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hZHZhbmNl
LmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9sZXNzLmhwcCIgMQoj
IDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGVzcy5ocHAiCiMgMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdmFsdWVfd2tuZC5ocHAiIDEKIyAyNCAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xlc3MuaHBwIiAyCgoKCgpuYW1lc3BhY2UgYm9v
c3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBUMSA9IHZvaWRf
CiAgICAsIHR5cGVuYW1lIFQyID0gdm9pZF8KICAgID4Kc3RydWN0IGxlc3MKewogICAgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSAoIChUMTo6dmFsdWUpIDwgKFQyOjp2YWx1ZSkgKTsKCgoKCgog
ICAgdHlwZWRlZiBib29sXzx2YWx1ZT4gdHlwZTsKCgoKCgoKCiAgIAp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgbGVzczwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBlbmFt
ZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBU
NSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBsZXNzPCBUMSxUMiA+IHsgfTsgfTsgdGVtcGxhdGU8
PiBzdHJ1Y3QgbGFtYmRhPCBsZXNzPCB2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVmIGxlc3M8IHZv
aWRfLHZvaWRfID4gdHlwZTsgfTsKCnRlbXBsYXRlPCBsb25nIE4gPgpzdHJ1Y3QgbHQKewogICAg
dGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYXBwbHkKCiAgICAgICAgOiBsZXNzPCBULGlu
dGVncmFsX2M8bG9uZyxOPiA+CiAgICB7CgoKCgogICAgfTsKfTsKCn0KfQojIDIyICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvbXBsL2lmLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9tcGwvaWYuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgoKdGVt
cGxhdGU8CiAgICAgIGJvb2wgQwogICAgLCB0eXBlbmFtZSBUMQogICAgLCB0eXBlbmFtZSBUMgog
ICAgPgpzdHJ1Y3QgaWZfYwp7CiAgICB0eXBlZGVmIFQxIHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAg
ICAgdHlwZW5hbWUgVDEKICAgICwgdHlwZW5hbWUgVDIKICAgID4Kc3RydWN0IGlmX2M8ZmFsc2Us
VDEsVDI+CnsKICAgIHR5cGVkZWYgVDIgdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFt
ZSBDID0gdm9pZF8KICAgICwgdHlwZW5hbWUgVDEgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUMiA9
IHZvaWRfCiAgICA+CnN0cnVjdCBpZl8KewogcHJpdmF0ZToKCiAgICB0eXBlZGVmIGlmX2M8CgoK
CiAgICAgICAgICBzdGF0aWNfY2FzdDxib29sPihDOjp2YWx1ZSkKCiAgICAgICAgLCBUMQogICAg
ICAgICwgVDIKICAgICAgICA+IGFsbW9zdF90eXBlXzsKCiBwdWJsaWM6CiAgICB0eXBlZGVmIHR5
cGVuYW1lIGFsbW9zdF90eXBlXzo6dHlwZSB0eXBlOwoKICAgCn07CiMgMTcyICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvaWYuaHBwIgp0ZW1wbGF0ZTw+IHN0cnVjdCBpZl88IHZvaWRf
LHZvaWRfLHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIsdHlwZW5h
bWUgVDMgLCB0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBh
cHBseSA6IGlmXzwgVDEsVDIsVDMgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwg
aWZfPCB2b2lkXyx2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVmIGlmXzwgdm9pZF8sdm9pZF8sdm9p
ZF8gPiB0eXBlOyB9OwoKfQp9CiMgMjQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9h
ZHZhbmNlLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pdGVyYXRv
cl90YWcuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pdGVyYXRv
cl90YWcuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnN0cnVjdCBpbnB1
dF9pdGVyX3RhZ187CnN0cnVjdCBmd2RfaXRlcl90YWdfOwpzdHJ1Y3QgYmlfaXRlcl90YWdfOwpz
dHJ1Y3QgcmFfaXRlcl90YWdfOwoKdHlwZWRlZiBpbnB1dF9pdGVyX3RhZ18gaW5wdXRfaXRlcmF0
b3JfdGFnOwp0eXBlZGVmIGZ3ZF9pdGVyX3RhZ18gZm9yd2FyZF9pdGVyYXRvcl90YWc7CnR5cGVk
ZWYgYmlfaXRlcl90YWdfIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnOwp0eXBlZGVmIHJhX2l0
ZXJfdGFnXyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZzsKCn0KfQojIDI1ICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC9tcGwvYXV4Xy9hZHZhbmNlX2ZvcndhcmQuaHBwIiAxCiMgMjQgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2FkdmFuY2VfZm9yd2FyZC5ocHAiCiMgMSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vYXBwbHkuaHBwIiAxCiMgMjUgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2FkdmFuY2VfZm9yd2FyZC5ocHAiIDIKIyAx
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9uZXh0LmhwcCIgMQojIDI2ICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9hZHZhbmNlX2ZvcndhcmQuaHBwIiAy
CgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvdXNlX3By
ZXByb2Nlc3NlZC5ocHAiIDEKIyAyOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1
eF8vYWR2YW5jZV9mb3J3YXJkLmhwcCIgMgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAxCiMgMTkgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIKIyAx
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvY29tcGlsZXIuaHBw
IiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJl
cHJvY2Vzc2VkLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9j
ZXNzb3Ivc3RyaW5naXplLmhwcCIgMQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t
cGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDIKCgoKCgojIDEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9hZHZhbmNlX2Zvcndh
cmQuaHBwIiAxCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewpuYW1lc3BhY2Ug
YXV4IHsKCnRlbXBsYXRlPCBsb25nIE4gPiBzdHJ1Y3QgYWR2YW5jZV9mb3J3YXJkOwoKdGVtcGxh
dGU8PgpzdHJ1Y3QgYWR2YW5jZV9mb3J3YXJkPDA+CnsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJ
dGVyYXRvciA+IHN0cnVjdCBhcHBseQogICAgewogICAgICAgIHR5cGVkZWYgSXRlcmF0b3IgaXRl
cjA7CiAgICAgICAgdHlwZWRlZiBpdGVyMCB0eXBlOwogICAgfTsKCn07Cgp0ZW1wbGF0ZTw+CnN0
cnVjdCBhZHZhbmNlX2ZvcndhcmQ8MT4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9y
ID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyMDsKICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgICAgIHR5cGVkZWYg
aXRlcjEgdHlwZTsKICAgIH07Cgp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgYWR2YW5jZV9mb3J3YXJk
PDI+CnsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyYXRvciA+IHN0cnVjdCBhcHBseQogICAg
ewogICAgICAgIHR5cGVkZWYgSXRlcmF0b3IgaXRlcjA7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyMDo6bmV4dCBpdGVyMTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0
IGl0ZXIyOwogICAgICAgIHR5cGVkZWYgaXRlcjIgdHlwZTsKICAgIH07Cgp9OwoKdGVtcGxhdGU8
PgpzdHJ1Y3QgYWR2YW5jZV9mb3J3YXJkPDM+CnsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVy
YXRvciA+IHN0cnVjdCBhcHBseQogICAgewogICAgICAgIHR5cGVkZWYgSXRlcmF0b3IgaXRlcjA7
CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMDo6bmV4dCBpdGVyMTsKICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0IGl0ZXIyOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcjI6Om5leHQgaXRlcjM7CiAgICAgICAgdHlwZWRlZiBpdGVyMyB0eXBlOwogICAgfTsKCn07
Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBhZHZhbmNlX2ZvcndhcmQ8ND4KewogICAgdGVtcGxhdGU8IHR5
cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVy
YXRvciBpdGVyMDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwog
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcjE6Om5leHQgaXRlcjI7CiAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyMjo6bmV4dCBpdGVyMzsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXIzOjpuZXh0IGl0ZXI0OwogICAgICAgIHR5cGVkZWYgaXRlcjQgdHlwZTsKICAgIH07Cgp9OwoK
dGVtcGxhdGU8IGxvbmcgTiA+CnN0cnVjdCBhZHZhbmNlX2ZvcndhcmQKewogICAgdGVtcGxhdGU8
IHR5cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBhZHZhbmNlX2ZvcndhcmQ8ND46OnRlbXBsYXRlIGFwcGx5PEl0ZXJhdG9yPjo6dHlw
ZSBjaHVua19yZXN1bHRfOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWR2YW5jZV9mb3J3YXJk
PCggKE4gLSA0KSA8IDAgPyAwIDogTiAtIDQgKT46OnRlbXBsYXRlIGFwcGx5PGNodW5rX3Jlc3Vs
dF8+Ojp0eXBlIHR5cGU7CiAgICB9Owp9OwoKfQp9Cn0KIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgMzUgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2FkdmFuY2VfZm9yd2FyZC5ocHAiIDIKIyAy
NiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FkdmFuY2UuaHBwIiAyCiMgMSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vYWR2YW5jZV9iYWNrd2FyZC5ocHAiIDEK
IyAyNSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vYWR2YW5jZV9iYWNrd2Fy
ZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJpb3IuaHBw
IiAxCiMgMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2FkdmFuY2VfYmFj
a3dhcmQuaHBwIiAyCiMgMzQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Fk
dmFuY2VfYmFja3dhcmQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9h
dXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL2FkdmFuY2VfYmFj
a3dhcmQuaHBwIiAxCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewpuYW1lc3Bh
Y2UgYXV4IHsKCnRlbXBsYXRlPCBsb25nIE4gPiBzdHJ1Y3QgYWR2YW5jZV9iYWNrd2FyZDsKCnRl
bXBsYXRlPD4Kc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ8MD4KewogICAgdGVtcGxhdGU8IHR5cGVu
YW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVyYXRv
ciBpdGVyMDsKICAgICAgICB0eXBlZGVmIGl0ZXIwIHR5cGU7CiAgICB9OwoKfTsKCnRlbXBsYXRl
PD4Kc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ8MT4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0
ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVy
MDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpwcmlvciBpdGVyMTsKICAgICAgICB0
eXBlZGVmIGl0ZXIxIHR5cGU7CiAgICB9OwoKfTsKCnRlbXBsYXRlPD4Kc3RydWN0IGFkdmFuY2Vf
YmFja3dhcmQ8Mj4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFw
cGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyMDsKICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXIwOjpwcmlvciBpdGVyMTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXIxOjpwcmlvciBpdGVyMjsKICAgICAgICB0eXBlZGVmIGl0ZXIyIHR5cGU7CiAgICB9OwoKfTsK
CnRlbXBsYXRlPD4Kc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ8Mz4KewogICAgdGVtcGxhdGU8IHR5
cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVy
YXRvciBpdGVyMDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpwcmlvciBpdGVyMTsK
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpwcmlvciBpdGVyMjsKICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXIyOjpwcmlvciBpdGVyMzsKICAgICAgICB0eXBlZGVmIGl0ZXIzIHR5
cGU7CiAgICB9OwoKfTsKCnRlbXBsYXRlPD4Kc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ8ND4Kewog
ICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAg
ICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyMDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIw
OjpwcmlvciBpdGVyMTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpwcmlvciBpdGVy
MjsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIyOjpwcmlvciBpdGVyMzsKICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXIzOjpwcmlvciBpdGVyNDsKICAgICAgICB0eXBlZGVmIGl0ZXI0
IHR5cGU7CiAgICB9OwoKfTsKCnRlbXBsYXRlPCBsb25nIE4gPgpzdHJ1Y3QgYWR2YW5jZV9iYWNr
d2FyZAp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgSXRlcmF0b3IgPiBzdHJ1Y3QgYXBwbHkKICAg
IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFkdmFuY2VfYmFja3dhcmQ8ND46OnRlbXBsYXRl
IGFwcGx5PEl0ZXJhdG9yPjo6dHlwZSBjaHVua19yZXN1bHRfOwogICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgYWR2YW5jZV9iYWNrd2FyZDwoIChOIC0gNCkgPCAwID8gMCA6IE4gLSA0ICk+Ojp0ZW1w
bGF0ZSBhcHBseTxjaHVua19yZXN1bHRfPjo6dHlwZSB0eXBlOwogICAgfTsKfTsKCn0KfQp9CiMg
MjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vz
c2VkLmhwcCIgMgojIDM1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9hZHZh
bmNlX2JhY2t3YXJkLmhwcCIgMgojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv
YWR2YW5jZS5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9p
dGVyYXRvcl9jYXRlZ29yeS5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
bXBsL2F1eF8vaXRlcmF0b3JfY2F0ZWdvcnkuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9pbnRlcm5hbHMuaHBwIiAxCiMgMjEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2l0ZXJhdG9yX2NhdGVnb3J5LmhwcCIgMgojIDI4ICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDIKIyAxICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pdGVyYXRvcl9uYW1lcy5ocHAiIDEKIyAyOSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FkdmFuY2UuaHBwIiAyCiMgMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vbXN2Y19uZXZlcl90cnVlLmhwcCIgMQojIDMw
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDIKIyAxICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb21tb25fbmFtZV93a25kLmhwcCIgMQoj
IDMxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDIKCgoKCgpu
YW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgoKCgpuYW1lc3BhY2UgYXV4IHsKCgp0
ZW1wbGF0ZTwgdHlwZW5hbWUgQ2F0ZWdvcnksIHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBO
ID4Kc3RydWN0IGFkdmFuY2VfaW1wbAp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGxlc3M8IE4saW50
ZWdyYWxfYzxsb25nLDA+ID46OnR5cGUgYmFja3dhcmRfOwogICAgdHlwZWRlZiB0eXBlbmFtZSBp
Zl88IGJhY2t3YXJkXywgbmVnYXRlPE4+LCBOID46OnR5cGUgb2Zmc2V0XzsKCiAgICB0eXBlZGVm
IHR5cGVuYW1lIGlmXzwKICAgICAgICAgIGJhY2t3YXJkXwogICAgICAgICwgYXV4OjphZHZhbmNl
X2JhY2t3YXJkPCBvZmZzZXRfOjp2YWx1ZSA+CiAgICAgICAgLCBhdXg6OmFkdmFuY2VfZm9yd2Fy
ZDwgb2Zmc2V0Xzo6dmFsdWUgPgogICAgICAgID46OnR5cGUgYWxnb187CgogICAgdHlwZWRlZiB0
eXBlbmFtZSBhbGdvXzo6dGVtcGxhdGUgYXBwbHk8SXRlcmF0b3I+Ojp0eXBlIHR5cGU7Cn07CgoK
dGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBOID4Kc3RydWN0IGFkdmFuY2Vf
aW1wbDxyYV9pdGVyX3RhZ18sSXRlcmF0b3IsTj4KewogICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVy
YXRvcgogICAgICAgIDo6dGVtcGxhdGUgYWR2YW5jZTxOPjo6dHlwZSB0eXBlOwp9OwoKfQoKCgp0
ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgSXRlcmF0b3IgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBO
ID0gdm9pZF8KICAgID4Kc3RydWN0IGFkdmFuY2UKewogICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6
OmFkdmFuY2VfaW1wbDwKICAgICAgICAgIHR5cGVuYW1lIEl0ZXJhdG9yOjpjYXRlZ29yeQogICAg
ICAgICwgSXRlcmF0b3IKICAgICAgICAsIE4KICAgICAgICA+Ojp0eXBlIHR5cGU7Cn07CgoKCnRl
bXBsYXRlPAogICAgICB0eXBlbmFtZSBJdGVyYXRvcgogICAgLCBsb25nIE4KICAgID4Kc3RydWN0
IGFkdmFuY2VfYwp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6YWR2YW5jZV9pbXBsPAogICAg
ICAgICAgdHlwZW5hbWUgSXRlcmF0b3I6OmNhdGVnb3J5CiAgICAgICAgLCBJdGVyYXRvcgogICAg
ICAgICwgaW50ZWdyYWxfYzxsb25nLE4+CiAgICAgICAgPjo6dHlwZSB0eXBlOwp9OwojIDE4OSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FkdmFuY2UuaHBwIgogdGVtcGxhdGU8PiBz
dHJ1Y3QgYWR2YW5jZTwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBl
bmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFt
ZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBhZHZhbmNlPCBUMSxUMiA+IHsgfTsgfTsgdGVt
cGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBhZHZhbmNlPCB2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVm
IGFkdmFuY2U8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsKCn0KfQojIDIyICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9hdF9pbXBsLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2RlcmVmX3drbmQuaHBwIiAxCiMgMjMgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2F0X2ltcGwuaHBwIiAyCgoKbmFtZXNwYWNlIGJvb3N0
IHsKbmFtZXNwYWNlIG1wbCB7CgoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4Kc3RydWN0IGF0
X3RyYWl0cwp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UsIHR5cGVuYW1lIE4gPiBz
dHJ1Y3QgYWxnb3JpdGhtCiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhZHZhbmNlPAog
ICAgICAgICAgICAgIHR5cGVuYW1lIGJlZ2luPFNlcXVlbmNlPjo6dHlwZQogICAgICAgICAgICAs
IE4KICAgICAgICAgICAgPjo6dHlwZSBpdGVyXzsKCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyXzo6dHlwZSB0eXBlOwogICAgfTsKfTsKCgoKfQp9CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L21wbC9hdC5ocHAiIDIKCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2Ug
bXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5
cGVuYW1lIE4gPSB2b2lkXwogICAgPgpzdHJ1Y3QgYXQKICAgIDogYXRfdHJhaXRzPCB0eXBlbmFt
ZSBzZXF1ZW5jZV90YWc8U2VxdWVuY2U+Ojp0eXBlID4KICAgICAgICA6OnRlbXBsYXRlIGFsZ29y
aXRobTwgU2VxdWVuY2UsTiA+CnsKICAgCn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgU2Vx
dWVuY2UKICAgICwgbG9uZyBOCiAgICA+CnN0cnVjdCBhdF9jCiAgICA6IGF0X3RyYWl0czwgdHlw
ZW5hbWUgc2VxdWVuY2VfdGFnPFNlcXVlbmNlPjo6dHlwZSA+CiAgICAgICAgOjp0ZW1wbGF0ZSBh
bGdvcml0aG08IFNlcXVlbmNlLGludGVncmFsX2M8bG9uZyxOPiA+CnsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IGF0PCB2b2lkXyx2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxLHR5cGVuYW1l
IFQyICwgdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1
ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGF0PCBUMSxUMiA+IHsgfTsgfTsgdGVtcGxhdGU8PiBz
dHJ1Y3QgbGFtYmRhPCBhdDwgdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRlZiBhdDwgdm9pZF8sdm9p
ZF8gPiB0eXBlOyB9OwoKfQp9CiMgOSAiLi4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkvZnVuY3Rp
b24uaHBwIiAyCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hcmcuaHBwIiAx
CiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hcmcuaHBwIgojIDEgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hcmdfZndkLmhwcCIgMQojIDIyICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvYXJnX2Z3ZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVz
cGFjZSBtcGwgewoKdGVtcGxhdGU8IGludCBOID4gc3RydWN0IGFyZzsKCn0KfQojIDI4ICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXJnLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9hcml0eV9zcGVjLmhwcCIgMQojIDMwICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvYXJnLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9hdXhfL2FyZ190eXBlZGVmLmhwcCIgMQojIDMxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC9tcGwvYXJnLmhwcCIgMgojIDQwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9tcGwvYXJnLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9p
bmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9hcmcuaHBwIiAxCgoKCm5h
bWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8PiBzdHJ1Y3QgYXJnPC0x
Pgp7CiAgICBzdGF0aWMgaW50IGNvbnN0IHZhbHVlID0gLTE7CiAgIAoKICAgIHRlbXBsYXRlPAog
ICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlwZW5hbWUgVTIgPSB2b2lkXywgdHlwZW5h
bWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTQgPSB2b2lkXywgdHlwZW5hbWUgVTUg
PSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAgewogICAgICAgIHR5cGVkZWYg
VTEgdHlwZTsKCiAgICAgcHJpdmF0ZToKICAgICAgICBzdGF0aWMgYm9vbCBjb25zdCBudiA9ICFp
c192b2lkXzx0eXBlPjo6dmFsdWU7CiAgICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNz
ZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29s
KSggbnYgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXzIyOwoKICAgIH07Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBhcmc8MT4KewogICAgc3RhdGljIGludCBjb25zdCB2YWx1ZSA9IDE7
CiAgICB0eXBlZGVmIGFyZzwyPiBuZXh0OwogICAKCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5
cGVuYW1lIFUxID0gdm9pZF8sIHR5cGVuYW1lIFUyID0gdm9pZF8sIHR5cGVuYW1lIFUzID0gdm9p
ZF8KICAgICAgICAsIHR5cGVuYW1lIFU0ID0gdm9pZF8sIHR5cGVuYW1lIFU1ID0gdm9pZF8KICAg
ICAgICA+CiAgICBzdHJ1Y3QgYXBwbHkKICAgIHsKICAgICAgICB0eXBlZGVmIFUxIHR5cGU7Cgog
ICAgIHByaXZhdGU6CiAgICAgICAgc3RhdGljIGJvb2wgY29uc3QgbnYgPSAhaXNfdm9pZF88dHlw
ZT46OnZhbHVlOwogICAgICAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2VydF90ZXN0PCBz
aXplb2YoOjpib29zdDo6U1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPCAoYm9vbCkoIG52ICkgPik+
IGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl80MzsKCiAgICB9Owp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgYXJnPDI+CnsKICAgIHN0YXRpYyBpbnQgY29uc3QgdmFsdWUgPSAyOwogICAgdHlwZWRl
ZiBhcmc8Mz4gbmV4dDsKICAgCgogICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFtZSBVMSA9
IHZvaWRfLCB0eXBlbmFtZSBVMiA9IHZvaWRfLCB0eXBlbmFtZSBVMyA9IHZvaWRfCiAgICAgICAg
LCB0eXBlbmFtZSBVNCA9IHZvaWRfLCB0eXBlbmFtZSBVNSA9IHZvaWRfCiAgICAgICAgPgogICAg
c3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBVMiB0eXBlOwoKICAgICBwcml2YXRl
OgogICAgICAgIHN0YXRpYyBib29sIGNvbnN0IG52ID0gIWlzX3ZvaWRfPHR5cGU+Ojp2YWx1ZTsK
ICAgICAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9v
c3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCBudiApID4pPiBib29zdF9zdGF0
aWNfYXNzZXJ0X3R5cGVkZWZfNjQ7CgogICAgfTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IGFyZzwz
Pgp7CiAgICBzdGF0aWMgaW50IGNvbnN0IHZhbHVlID0gMzsKICAgIHR5cGVkZWYgYXJnPDQ+IG5l
eHQ7CiAgIAoKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlw
ZW5hbWUgVTIgPSB2b2lkXywgdHlwZW5hbWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUg
VTQgPSB2b2lkXywgdHlwZW5hbWUgVTUgPSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBs
eQogICAgewogICAgICAgIHR5cGVkZWYgVTMgdHlwZTsKCiAgICAgcHJpdmF0ZToKICAgICAgICBz
dGF0aWMgYm9vbCBjb25zdCBudiA9ICFpc192b2lkXzx0eXBlPjo6dmFsdWU7CiAgICAgICAgdHlw
ZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNf
QVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggbnYgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90
eXBlZGVmXzg1OwoKICAgIH07Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBhcmc8ND4KewogICAgc3Rh
dGljIGludCBjb25zdCB2YWx1ZSA9IDQ7CiAgICB0eXBlZGVmIGFyZzw1PiBuZXh0OwogICAKCiAg
ICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFUxID0gdm9pZF8sIHR5cGVuYW1lIFUyID0g
dm9pZF8sIHR5cGVuYW1lIFUzID0gdm9pZF8KICAgICAgICAsIHR5cGVuYW1lIFU0ID0gdm9pZF8s
IHR5cGVuYW1lIFU1ID0gdm9pZF8KICAgICAgICA+CiAgICBzdHJ1Y3QgYXBwbHkKICAgIHsKICAg
ICAgICB0eXBlZGVmIFU0IHR5cGU7CgogICAgIHByaXZhdGU6CiAgICAgICAgc3RhdGljIGJvb2wg
Y29uc3QgbnYgPSAhaXNfdm9pZF88dHlwZT46OnZhbHVlOwogICAgICAgIHR5cGVkZWYgOjpib29z
dDo6c3RhdGljX2Fzc2VydF90ZXN0PCBzaXplb2YoOjpib29zdDo6U1RBVElDX0FTU0VSVElPTl9G
QUlMVVJFPCAoYm9vbCkoIG52ICkgPik+IGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl8xMDY7
CgogICAgfTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IGFyZzw1Pgp7CiAgICBzdGF0aWMgaW50IGNv
bnN0IHZhbHVlID0gNTsKICAgIHR5cGVkZWYgYXJnPDY+IG5leHQ7CiAgIAoKICAgIHRlbXBsYXRl
PAogICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlwZW5hbWUgVTIgPSB2b2lkXywgdHlw
ZW5hbWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTQgPSB2b2lkXywgdHlwZW5hbWUg
VTUgPSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAgewogICAgICAgIHR5cGVk
ZWYgVTUgdHlwZTsKCiAgICAgcHJpdmF0ZToKICAgICAgICBzdGF0aWMgYm9vbCBjb25zdCBudiA9
ICFpc192b2lkXzx0eXBlPjo6dmFsdWU7CiAgICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNf
YXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChi
b29sKSggbnYgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXzEyNzsKCiAgICB9Owp9
OwoKCgp9Cn0KIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVk
ZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgNDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21w
bC9hcmcuaHBwIiAyCiMgMTEgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z1bmN0aW9uLmhw
cCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zaXplLmhwcCIgMQojIDIw
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvc2l6ZS5ocHAiCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL3NpemVfZndkLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvc2l6ZV9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3Bh
Y2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3Qgc2l6ZV90cmFpdHM7CnRl
bXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBzaXplOwoKfQp9CiMgMjEgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zaXplLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3NpemVfaW1wbC5ocHAiIDEKIyAyMiAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vc2l6ZV9pbXBsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvZGlzdGFuY2UuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L21wbC9kaXN0YW5jZS5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvbXBsL2F1eF8vaXRlcl9kaXN0YW5jZS5ocHAiIDEKIyAyNCAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvbXBsL2F1eF8vaXRlcl9kaXN0YW5jZS5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5h
bWVzcGFjZSBtcGwgewpuYW1lc3BhY2UgYXV4IHsKIyA0NyAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvbXBsL2F1eF8vaXRlcl9kaXN0YW5jZS5ocHAiCnRlbXBsYXRlPAogICAgICB0eXBlbmFt
ZSBJdGVyYXRvcgogICAgLCB0eXBlbmFtZSBPdGhlcgogICAgPgpzdHJ1Y3QgaXRlcl9kaXN0YW5j
ZQogICAgOiBJdGVyYXRvcjo6dGVtcGxhdGUgZGlzdGFuY2U8T3RoZXI+CnsKfTsKCgoKfQp9Cn0K
IyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Rpc3RhbmNlLmhwcCIgMgoKCiMg
MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2l0ZXJfZm9sZC5ocHAiIDEKIyAyMSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2l0ZXJfZm9sZC5ocHAiCiMgMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL08xX3NpemUuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9PMV9zaXplLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvTzFfc2l6ZV9md2QuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9PMV9zaXplX2Z3ZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBt
cGwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBPMV9zaXplX3RyYWl0czsKdGVt
cGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IE8xX3NpemU7Cgp9Cn0KIyAyMSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL08xX3NpemUuaHBwIiAyCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vTzFfc2l6ZV9pbXBsLmhwcCIgMQojIDIzICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9PMV9zaXplX2ltcGwuaHBwIgojIDEgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2hhc19zaXplLmhwcCIgMQojIDIyICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9oYXNfc2l6ZS5ocHAiCm5hbWVzcGFj
ZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsKdGVtcGxhdGU8IHR5cGVu
YW1lIFQgPiBib29zdDo6bXBsOjphdXg6Onllc190YWcgaGFzX3NpemVfaGVscGVyKCBib29zdDo6
bXBsOjphdXg6OnR5cGVfd3JhcHBlcjxUPiBjb25zdCB2b2xhdGlsZSogLCBib29zdDo6bXBsOjph
dXg6OnR5cGVfd3JhcHBlcjx0eXBlbmFtZSBUOjpzaXplPiogPSAwICk7IGJvb3N0OjptcGw6OmF1
eDo6bm9fdGFnIGhhc19zaXplX2hlbHBlciguLi4pOyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0
cnVjdCBoYXNfc2l6ZSB7IHR5cGVkZWYgYm9vc3Q6Om1wbDo6YXV4Ojp0eXBlX3dyYXBwZXI8VD4g
dF87IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKChoYXNfc2l6ZV9oZWxwZXIpKHN0
YXRpY19jYXN0PHRfKj4oMCkpKSA9PSBzaXplb2YoYm9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnKTsg
fTsKfX19CiMgMjQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL08xX3NpemVf
aW1wbC5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewojIDU3ICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9PMV9zaXplX2ltcGwuaHBwIgp0ZW1wbGF0
ZTwgdHlwZW5hbWUgVGFnID4Kc3RydWN0IE8xX3NpemVfdHJhaXRzCnsKICAgIHRlbXBsYXRlPCB0
eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBhbGdvcml0aG0KICAgICAgICA6IGludGVncmFsX2M8
bG9uZywtMT4KICAgICAgICB7CiAgICAgICAgfTsKfTsKCgoKCn0KfQojIDIyICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvTzFfc2l6ZS5ocHAiIDIKCgoKbmFtZXNwYWNlIGJvb3N0IHsK
bmFtZXNwYWNlIG1wbCB7CgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFNlcXVlbmNlID0gdm9p
ZF8KICAgID4Kc3RydWN0IE8xX3NpemUKICAgIDogTzFfc2l6ZV90cmFpdHM8IHR5cGVuYW1lIHNl
cXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgogICAgICAgIDo6dGVtcGxhdGUgYWxnb3JpdGht
PCBTZXF1ZW5jZSA+CnsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IE8xX3NpemU8IHZvaWRfID4geyB0
ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiA9dm9pZF8gLHR5cGVuYW1lIFQzID12
b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBw
bHkgOiBPMV9zaXplPCBUMSA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBPMV9z
aXplPCB2b2lkXyA+ID4geyB0eXBlZGVmIE8xX3NpemU8IHZvaWRfID4gdHlwZTsgfTsKCn0KfQoj
IDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaXRlcl9mb2xkLmhwcCIgMgojIDEg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9sYW1iZGEuaHBwIiAxCiMgMjMgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9sYW1iZGEuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Z1bGxfbGFtYmRhLmhwcCIgMQojIDI2ICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9mdWxsX2xhbWJkYS5ocHAiCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2JpbmQuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L21wbC9iaW5kLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t
cGwvYXV4Xy9jb25maWcvYmluZC5ocHAiIDEKIyAyNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvbXBsL2JpbmQuaHBwIiAyCgoKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t
cGwvcGxhY2Vob2xkZXJzLmhwcCIgMQojIDI2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t
cGwvcGxhY2Vob2xkZXJzLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv
YXJnLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvcGxhY2Vob2xk
ZXJzLmhwcCIgMgojIDM1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvcGxhY2Vob2xk
ZXJzLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRl
X3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs
L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9wbGFjZWhvbGRlcnMuaHBwIiAxCgoK
Cm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdHlwZWRlZiBhcmc8IC0xID4gXzsK
Cm5hbWVzcGFjZSBwbGFjZWhvbGRlcnMgewp1c2luZyBib29zdDo6bXBsOjpfOwp9CgoKCgp0eXBl
ZGVmIGFyZzwxPiBfMTsKCm5hbWVzcGFjZSBwbGFjZWhvbGRlcnMgewp1c2luZyBib29zdDo6bXBs
OjpfMTsKfQoKdHlwZWRlZiBhcmc8Mj4gXzI7CgpuYW1lc3BhY2UgcGxhY2Vob2xkZXJzIHsKdXNp
bmcgYm9vc3Q6Om1wbDo6XzI7Cn0KCnR5cGVkZWYgYXJnPDM+IF8zOwoKbmFtZXNwYWNlIHBsYWNl
aG9sZGVycyB7CnVzaW5nIGJvb3N0OjptcGw6Ol8zOwp9Cgp0eXBlZGVmIGFyZzw0PiBfNDsKCm5h
bWVzcGFjZSBwbGFjZWhvbGRlcnMgewp1c2luZyBib29zdDo6bXBsOjpfNDsKfQoKdHlwZWRlZiBh
cmc8NT4gXzU7CgpuYW1lc3BhY2UgcGxhY2Vob2xkZXJzIHsKdXNpbmcgYm9vc3Q6Om1wbDo6XzU7
Cn0KCnR5cGVkZWYgYXJnPDY+IF82OwoKbmFtZXNwYWNlIHBsYWNlaG9sZGVycyB7CnVzaW5nIGJv
b3N0OjptcGw6Ol82Owp9Cgp9Cn0KIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs
L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgMzYgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L21wbC9wbGFjZWhvbGRlcnMuaHBwIiAyCiMgMzIgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L21wbC9iaW5kLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9tcGwvcHJvdGVjdC5ocHAiIDEKIyAyNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs
L3Byb3RlY3QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRl
PAogICAgICB0eXBlbmFtZSBUID0gdm9pZF8KICAgID4Kc3RydWN0IHByb3RlY3QgOiBUCnsKICAg
IHR5cGVkZWYgc3RydWN0IHByb3RlY3QgdHlwZTsKfTsKIyA0NSAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvbXBsL3Byb3RlY3QuaHBwIgp0ZW1wbGF0ZTw+IHN0cnVjdCBwcm90ZWN0PCB2b2lk
XyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIgPXZvaWRfICx0eXBlbmFt
ZSBUMyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRfID4gc3Ry
dWN0IGFwcGx5IDogcHJvdGVjdDwgVDEgPiB7IH07IH07CgoKCgp9Cn0KIyAzNCAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2JpbmQuaHBwIiAyCgoKCgoKIyAxICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVuY2UuaHBwIiAxCiMgMTQgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5ocHAiCiMgMSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvY29uZmlnLmhwcCIgMQojIDE1
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVuY2UuaHBw
IiAyCiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVy
ZW5jZS5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0
YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhw
cCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
Ym9vbF90cmFpdF9kZWYuaHBwIiAyCiMgMjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5
cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCnRlbXBs
YXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3JlZmVyZW5jZSA6IG1wbDo6Ym9vbF88IGZhbHNl
ID4geyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19yZWZlcmVuY2U8IFQmID4g
OiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OwojIDEwNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHlwZV90cmFpdHMvaXNfcmVmZXJlbmNlLmhwcCIKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyAx
MDkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5o
cHAiIDIKIyA0MCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2JpbmQuaHBwIiAyCiMg
NTMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9iaW5kLmhwcCIKIyAxICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDEK
IyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9j
ZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXBy
b2Nlc3NlZC9wbGFpbi9iaW5kLmhwcCIgMQoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2Ug
bXBsIHsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUxLCB0eXBlbmFtZSBVMiwgdHlwZW5hbWUgVTMsIHR5cGVuYW1lIFU0CiAgICAsIHR5cGVu
YW1lIFU1CiAgICA+CnN0cnVjdCByZXNvbHZlX2JpbmRfYXJnCnsKICAgIHR5cGVkZWYgVCB0eXBl
Owp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQKICAgICwgdHlwZW5hbWUgQXJnCiAgICA+
CnN0cnVjdCByZXBsYWNlX3VubmFtZWRfYXJnCnsKICAgIHR5cGVkZWYgQXJnIG5leHRfYXJnOwog
ICAgdHlwZWRlZiBUIHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgQXJnCiAgICA+
CnN0cnVjdCByZXBsYWNlX3VubmFtZWRfYXJnPCBhcmc8LTE+LEFyZyA+CnsKICAgIHR5cGVkZWYg
dHlwZW5hbWUgQXJnOjpuZXh0IG5leHRfYXJnOwogICAgdHlwZWRlZiBBcmcgdHlwZTsKfTsKCn0K
CnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSA9IHZvaWRfLCB0eXBlbmFt
ZSBUMiA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFQzID0gdm9pZF8sIHR5cGVuYW1lIFQ0ID0gdm9p
ZF8sIHR5cGVuYW1lIFQ1ID0gdm9pZF8KICAgID4Kc3RydWN0IGJpbmQ7Cgp0ZW1wbGF0ZTwgdHlw
ZW5hbWUgRiwgdHlwZW5hbWUgVCA+IHN0cnVjdCBiaW5kMXN0Owp0ZW1wbGF0ZTwgdHlwZW5hbWUg
RiwgdHlwZW5hbWUgVCA+IHN0cnVjdCBiaW5kMm5kOwoKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0
ZTwKICAgICAgaW50IE4sIHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiwgdHlwZW5hbWUgVTMsIHR5
cGVuYW1lIFU0LCB0eXBlbmFtZSBVNQogICAgPgpzdHJ1Y3QgcmVzb2x2ZV9iaW5kX2FyZzwgYXJn
PE4+LFUxLFUyLFUzLFU0LFU1ID4KewogICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OmFyZzxOPjo6
dGVtcGxhdGUgYXBwbHk8IFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdHlwZTsKfTsKCnRlbXBsYXRl
PAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz
LCB0eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUy
LCB0eXBlbmFtZSBVMywgdHlwZW5hbWUgVTQKICAgICwgdHlwZW5hbWUgVTUKICAgID4Kc3RydWN0
IHJlc29sdmVfYmluZF9hcmc8IGJpbmQ8RixUMSxUMixUMyxUNCxUNT4sVTEsVTIsVTMsVTQsVTUg
Pgp7CiAgICB0eXBlZGVmIGJpbmQ8IEYsVDEsVDIsVDMsVDQsVDUgPiBmXzsKICAgIHR5cGVkZWYg
dHlwZW5hbWUgZl86OnRlbXBsYXRlIGFwcGx5PCBVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHR5cGU7
Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVTEs
IHR5cGVuYW1lIFUyLCB0eXBlbmFtZSBVMwogICAgLCB0eXBlbmFtZSBVNCwgdHlwZW5hbWUgVTUK
ICAgID4Kc3RydWN0IHJlc29sdmVfYmluZF9hcmc8IGJpbmQxc3Q8RixUPixVMSxVMixVMyxVNCxV
NSA+CnsKICAgIHR5cGVkZWYgYmluZDFzdDwgRixUID4gZl87CiAgICB0eXBlZGVmIHR5cGVuYW1l
IGZfOjp0ZW1wbGF0ZSBhcHBseTwgVTEsVTIsVTMsVTQsVTUgPjo6dHlwZSB0eXBlOwp9OwoKdGVt
cGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUxLCB0eXBlbmFt
ZSBVMiwgdHlwZW5hbWUgVTMKICAgICwgdHlwZW5hbWUgVTQsIHR5cGVuYW1lIFU1CiAgICA+CnN0
cnVjdCByZXNvbHZlX2JpbmRfYXJnPCBiaW5kMm5kPEYsVD4sVTEsVTIsVTMsVTQsVTUgPgp7CiAg
ICB0eXBlZGVmIGJpbmQybmQ8IEYsVCA+IGZfOwogICAgdHlwZWRlZiB0eXBlbmFtZSBmXzo6dGVt
cGxhdGUgYXBwbHk8IFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdHlwZTsKfTsKCn0KCgoKCgoKCgoK
dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYKICAgID4Kc3RydWN0IGJpbmQwCnsKICAgIHRlbXBs
YXRlPAogICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlwZW5hbWUgVTIgPSB2b2lkXywg
dHlwZW5hbWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTQgPSB2b2lkXywgdHlwZW5h
bWUgVTUgPSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAgewogICAgIHByaXZh
dGU6CiAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8IEYsIG1wbDo6YXJn
PCAxPiA+IHIwOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6OnR5cGUgYTA7CiAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSByMDo6bmV4dF9hcmcgbjE7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEwLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgZl87Cgog
ICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGZfOjp0eXBlIHR5cGU7CiAgICB9
Owp9OwoKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5h
bWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBlbmFtZSBVMywgdHlwZW5hbWUgVTQKICAgICwgdHlwZW5h
bWUgVTUKICAgID4Kc3RydWN0IHJlc29sdmVfYmluZF9hcmc8CiAgICAgIGJpbmQwPEY+LFUxLCBV
MiwgVTMsIFU0LCBVNQogICAgPgp7CiAgICB0eXBlZGVmIGJpbmQwPEY+IGZfOwogICAgdHlwZWRl
ZiB0eXBlbmFtZSBmXzo6dGVtcGxhdGUgYXBwbHk8IFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdHlw
ZTsKfTsKCn0KCgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYKICAgID4Kc3RydWN0IGJpbmQ8
IEYsdm9pZF8sdm9pZF8sdm9pZF8sdm9pZF8sdm9pZF8gPgogICAgOiBiaW5kMDxGPgp7Cn07Cgp0
ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEKICAgID4Kc3RydWN0IGJpbmQx
CnsKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlwZW5hbWUg
VTIgPSB2b2lkXywgdHlwZW5hbWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTQgPSB2
b2lkXywgdHlwZW5hbWUgVTUgPSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAg
ewogICAgIHByaXZhdGU6CiAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8
IEYsIG1wbDo6YXJnPCAxPiA+IHIwOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6OnR5cGUg
YTA7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMDo6bmV4dF9hcmcgbjE7CiAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEwLFUxLFUyLFUzLFU0LFU1ID46
OnR5cGUgZl87CgogICAgICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMSxu
MSA+IHIxOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjE6OnR5cGUgYTE7CiAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSByMTo6bmV4dF9hcmcgbjI7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBh
dXg6OnJlc29sdmVfYmluZF9hcmc8IGExLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdDE7CgogICAg
IHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGZfOjp0ZW1wbGF0ZSBhcHBseTx0MT46
OnR5cGUgdHlwZTsKICAgIH07Cn07CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPAogICAgICB0
eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBlbmFt
ZSBVMwogICAgLCB0eXBlbmFtZSBVNCwgdHlwZW5hbWUgVTUKICAgID4Kc3RydWN0IHJlc29sdmVf
YmluZF9hcmc8CiAgICAgIGJpbmQxPCBGLFQxID4sVTEsIFUyLCBVMywgVTQsIFU1CiAgICA+CnsK
ICAgIHR5cGVkZWYgYmluZDE8IEYsVDEgPiBmXzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZl86OnRl
bXBsYXRlIGFwcGx5PCBVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHR5cGU7Cn07Cgp9CgoKCnRlbXBs
YXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMQogICAgPgpzdHJ1Y3QgYmluZDwgRixU
MSx2b2lkXyx2b2lkXyx2b2lkXyx2b2lkXyA+CiAgICA6IGJpbmQxPCBGLFQxID4Kewp9OwoKdGVt
cGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMgogICAgPgpz
dHJ1Y3QgYmluZDIKewogICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFtZSBVMSA9IHZvaWRf
LCB0eXBlbmFtZSBVMiA9IHZvaWRfLCB0eXBlbmFtZSBVMyA9IHZvaWRfCiAgICAgICAgLCB0eXBl
bmFtZSBVNCA9IHZvaWRfLCB0eXBlbmFtZSBVNSA9IHZvaWRfCiAgICAgICAgPgogICAgc3RydWN0
IGFwcGx5CiAgICB7CiAgICAgcHJpdmF0ZToKICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91
bm5hbWVkX2FyZzwgRiwgbXBsOjphcmc8IDE+ID4gcjA7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSByMDo6dHlwZSBhMDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIwOjpuZXh0X2FyZyBuMTsK
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6cmVzb2x2ZV9iaW5kX2FyZzwgYTAsVTEsVTIs
VTMsVTQsVTUgPjo6dHlwZSBmXzsKCiAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1l
ZF9hcmc8IFQxLG4xID4gcjE7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMTo6dHlwZSBhMTsK
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIxOjpuZXh0X2FyZyBuMjsKICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIGF1eDo6cmVzb2x2ZV9iaW5kX2FyZzwgYTEsVTEsVTIsVTMsVTQsVTUgPjo6dHlw
ZSB0MTsKCiAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8IFQyLG4yID4g
cjI7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMjo6dHlwZSBhMjsKICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIHIyOjpuZXh0X2FyZyBuMzsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6
cmVzb2x2ZV9iaW5kX2FyZzwgYTIsVTEsVTIsVTMsVTQsVTUgPjo6dHlwZSB0MjsKCiAgICAgcHVi
bGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZl86OnRlbXBsYXRlIGFwcGx5PCB0MSx0MiA+
Ojp0eXBlIHR5cGU7CiAgICB9Owp9OwoKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwKICAgICAg
dHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBVMSwgdHlwZW5h
bWUgVTIKICAgICwgdHlwZW5hbWUgVTMsIHR5cGVuYW1lIFU0LCB0eXBlbmFtZSBVNQogICAgPgpz
dHJ1Y3QgcmVzb2x2ZV9iaW5kX2FyZzwKICAgICAgYmluZDI8IEYsVDEsVDIgPixVMSwgVTIsIFUz
LCBVNCwgVTUKICAgID4KewogICAgdHlwZWRlZiBiaW5kMjwgRixUMSxUMiA+IGZfOwogICAgdHlw
ZWRlZiB0eXBlbmFtZSBmXzo6dGVtcGxhdGUgYXBwbHk8IFUxLFUyLFUzLFU0LFU1ID46OnR5cGUg
dHlwZTsKfTsKCn0KCgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMgogICAgPgpzdHJ1Y3QgYmluZDwgRixUMSxUMix2b2lkXyx2b2lkXyx2b2lkXyA+
CiAgICA6IGJpbmQyPCBGLFQxLFQyID4Kewp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYs
IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMKICAgID4Kc3RydWN0IGJpbmQz
CnsKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlwZW5hbWUg
VTIgPSB2b2lkXywgdHlwZW5hbWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTQgPSB2
b2lkXywgdHlwZW5hbWUgVTUgPSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAg
ewogICAgIHByaXZhdGU6CiAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8
IEYsIG1wbDo6YXJnPCAxPiA+IHIwOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6OnR5cGUg
YTA7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMDo6bmV4dF9hcmcgbjE7CiAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEwLFUxLFUyLFUzLFU0LFU1ID46
OnR5cGUgZl87CgogICAgICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMSxu
MSA+IHIxOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjE6OnR5cGUgYTE7CiAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSByMTo6bmV4dF9hcmcgbjI7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBh
dXg6OnJlc29sdmVfYmluZF9hcmc8IGExLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdDE7CgogICAg
ICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMixuMiA+IHIyOwogICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgcjI6OnR5cGUgYTI7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBy
Mjo6bmV4dF9hcmcgbjM7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmlu
ZF9hcmc8IGEyLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdDI7CgogICAgICAgIHR5cGVkZWYgYXV4
OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMyxuMyA+IHIzOwogICAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgcjM6OnR5cGUgYTM7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMzo6bmV4dF9hcmcgbjQ7
CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEzLFUxLFUy
LFUzLFU0LFU1ID46OnR5cGUgdDM7CgogICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIGZfOjp0ZW1wbGF0ZSBhcHBseTwgdDEsdDIsdDMgPjo6dHlwZSB0eXBlOwogICAgfTsKfTsK
Cm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFUxCiAgICAsIHR5cGVuYW1lIFUy
LCB0eXBlbmFtZSBVMywgdHlwZW5hbWUgVTQsIHR5cGVuYW1lIFU1CiAgICA+CnN0cnVjdCByZXNv
bHZlX2JpbmRfYXJnPAogICAgICBiaW5kMzwgRixUMSxUMixUMyA+LFUxLCBVMiwgVTMsIFU0LCBV
NQogICAgPgp7CiAgICB0eXBlZGVmIGJpbmQzPCBGLFQxLFQyLFQzID4gZl87CiAgICB0eXBlZGVm
IHR5cGVuYW1lIGZfOjp0ZW1wbGF0ZSBhcHBseTwgVTEsVTIsVTMsVTQsVTUgPjo6dHlwZSB0eXBl
Owp9OwoKfQoKCgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVu
YW1lIFQyLCB0eXBlbmFtZSBUMwogICAgPgpzdHJ1Y3QgYmluZDwgRixUMSxUMixUMyx2b2lkXyx2
b2lkXyA+CiAgICA6IGJpbmQzPCBGLFQxLFQyLFQzID4Kewp9OwoKdGVtcGxhdGU8CiAgICAgIHR5
cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1l
IFQ0CiAgICA+CnN0cnVjdCBiaW5kNAp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1l
IFUxID0gdm9pZF8sIHR5cGVuYW1lIFUyID0gdm9pZF8sIHR5cGVuYW1lIFUzID0gdm9pZF8KICAg
ICAgICAsIHR5cGVuYW1lIFU0ID0gdm9pZF8sIHR5cGVuYW1lIFU1ID0gdm9pZF8KICAgICAgICA+
CiAgICBzdHJ1Y3QgYXBwbHkKICAgIHsKICAgICBwcml2YXRlOgogICAgICAgIHR5cGVkZWYgYXV4
OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBGLCBtcGw6OmFyZzwgMT4gPiByMDsKICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHIwOjp0eXBlIGEwOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6Om5l
eHRfYXJnIG4xOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJn
PCBhMCxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIGZfOwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVw
bGFjZV91bm5hbWVkX2FyZzwgVDEsbjEgPiByMTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIx
Ojp0eXBlIGExOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjE6Om5leHRfYXJnIG4yOwogICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhMSxVMSxVMixVMyxV
NCxVNSA+Ojp0eXBlIHQxOwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2Fy
ZzwgVDIsbjIgPiByMjsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIyOjp0eXBlIGEyOwogICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgcjI6Om5leHRfYXJnIG4zOwogICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhMixVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHQy
OwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDMsbjMgPiByMzsK
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIzOjp0eXBlIGEzOwogICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgcjM6Om5leHRfYXJnIG40OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNv
bHZlX2JpbmRfYXJnPCBhMyxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHQzOwoKICAgICAgICB0eXBl
ZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDQsbjQgPiByNDsKICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIHI0Ojp0eXBlIGE0OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjQ6Om5leHRf
YXJnIG41OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBh
NCxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHQ0OwoKICAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBmXzo6dGVtcGxhdGUgYXBwbHk8IHQxLHQyLHQzLHQ0ID46OnR5cGUgdHlwZTsK
ICAgIH07Cn07CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAogICAgLCB0
eXBlbmFtZSBVMSwgdHlwZW5hbWUgVTIsIHR5cGVuYW1lIFUzLCB0eXBlbmFtZSBVNCwgdHlwZW5h
bWUgVTUKICAgID4Kc3RydWN0IHJlc29sdmVfYmluZF9hcmc8CiAgICAgIGJpbmQ0PCBGLFQxLFQy
LFQzLFQ0ID4sVTEsIFUyLCBVMywgVTQsIFU1CiAgICA+CnsKICAgIHR5cGVkZWYgYmluZDQ8IEYs
VDEsVDIsVDMsVDQgPiBmXzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZl86OnRlbXBsYXRlIGFwcGx5
PCBVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHR5cGU7Cn07Cgp9CgoKCnRlbXBsYXRlPAogICAgICB0
eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFt
ZSBUNAogICAgPgpzdHJ1Y3QgYmluZDwgRixUMSxUMixUMyxUNCx2b2lkXyA+CiAgICA6IGJpbmQ0
PCBGLFQxLFQyLFQzLFQ0ID4Kewp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVu
YW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVu
YW1lIFQ1CiAgICA+CnN0cnVjdCBiaW5kNQp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVu
YW1lIFUxID0gdm9pZF8sIHR5cGVuYW1lIFUyID0gdm9pZF8sIHR5cGVuYW1lIFUzID0gdm9pZF8K
ICAgICAgICAsIHR5cGVuYW1lIFU0ID0gdm9pZF8sIHR5cGVuYW1lIFU1ID0gdm9pZF8KICAgICAg
ICA+CiAgICBzdHJ1Y3QgYXBwbHkKICAgIHsKICAgICBwcml2YXRlOgogICAgICAgIHR5cGVkZWYg
YXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBGLCBtcGw6OmFyZzwgMT4gPiByMDsKICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIHIwOjp0eXBlIGEwOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6
Om5leHRfYXJnIG4xOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRf
YXJnPCBhMCxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIGZfOwoKICAgICAgICB0eXBlZGVmIGF1eDo6
cmVwbGFjZV91bm5hbWVkX2FyZzwgVDEsbjEgPiByMTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1l
IHIxOjp0eXBlIGExOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjE6Om5leHRfYXJnIG4yOwog
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhMSxVMSxVMixV
MyxVNCxVNSA+Ojp0eXBlIHQxOwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVk
X2FyZzwgVDIsbjIgPiByMjsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIyOjp0eXBlIGEyOwog
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjI6Om5leHRfYXJnIG4zOwogICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhMixVMSxVMixVMyxVNCxVNSA+Ojp0eXBl
IHQyOwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDMsbjMgPiBy
MzsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIzOjp0eXBlIGEzOwogICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgcjM6Om5leHRfYXJnIG40OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4Ojpy
ZXNvbHZlX2JpbmRfYXJnPCBhMyxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHQzOwoKICAgICAgICB0
eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDQsbjQgPiByNDsKICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHI0Ojp0eXBlIGE0OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjQ6Om5l
eHRfYXJnIG41OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJn
PCBhNCxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHQ0OwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVw
bGFjZV91bm5hbWVkX2FyZzwgVDUsbjUgPiByNTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHI1
Ojp0eXBlIGE1OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjU6Om5leHRfYXJnIG42OwogICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhNSxVMSxVMixVMyxV
NCxVNSA+Ojp0eXBlIHQ1OwoKICAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBm
Xzo6dGVtcGxhdGUgYXBwbHk8IHQxLHQyLHQzLHQ0LHQ1ID46OnR5cGUgdHlwZTsKICAgIH07Cn07
CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBU
MSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBU
NSwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBlbmFtZSBVMywgdHlwZW5hbWUgVTQKICAg
ICwgdHlwZW5hbWUgVTUKICAgID4Kc3RydWN0IHJlc29sdmVfYmluZF9hcmc8CiAgICAgIGJpbmQ1
PCBGLFQxLFQyLFQzLFQ0LFQ1ID4sVTEsIFUyLCBVMywgVTQsIFU1CiAgICA+CnsKICAgIHR5cGVk
ZWYgYmluZDU8IEYsVDEsVDIsVDMsVDQsVDUgPiBmXzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZl86
OnRlbXBsYXRlIGFwcGx5PCBVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHR5cGU7Cn07Cgp9CgoKCgp0
ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBl
bmFtZSBUMywgdHlwZW5hbWUgVDQKICAgICwgdHlwZW5hbWUgVDUKICAgID4Kc3RydWN0IGJpbmQK
ICAgIDogYmluZDU8IEYsVDEsVDIsVDMsVDQsVDUgPgp7Cn07Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUg
RiwgdHlwZW5hbWUgVCA+CnN0cnVjdCBiaW5kMXN0CnsKICAgIHRlbXBsYXRlPAogICAgICAgICAg
dHlwZW5hbWUgVQogICAgICAgICwgdHlwZW5hbWUgVTIgPSB2b2lkXywgdHlwZW5hbWUgVTMgPSB2
b2lkXywgdHlwZW5hbWUgVTQgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTUgPSB2b2lkXwog
ICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAgICAgIDogRjo6dGVtcGxhdGUgYXBwbHk8IFQs
VSA+CiAgICB7CiAgICB9Owp9OwoKdGVtcGxhdGU8IHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQgPgpz
dHJ1Y3QgYmluZDJuZAp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFUKICAgICAg
ICAsIHR5cGVuYW1lIFUyID0gdm9pZF8sIHR5cGVuYW1lIFUzID0gdm9pZF8sIHR5cGVuYW1lIFU0
ID0gdm9pZF8KICAgICAgICAsIHR5cGVuYW1lIFU1ID0gdm9pZF8KICAgICAgICA+CiAgICBzdHJ1
Y3QgYXBwbHkKICAgICAgICA6IEY6OnRlbXBsYXRlIGFwcGx5PCBVLFQgPgogICAgewogICAgfTsK
fTsKCn0KfQojIDI4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRl
X3ByZXByb2Nlc3NlZC5ocHAiIDIKIyA1NCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs
L2JpbmQuaHBwIiAyCiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Z1
bGxfbGFtYmRhLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvcXVv
dGUuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9xdW90ZS5ocHAi
CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX3R5cGUuaHBwIiAx
CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2hhc190eXBlLmhwcCIK
bmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewp0ZW1wbGF0
ZTwgdHlwZW5hbWUgVCA+IGJvb3N0OjptcGw6OmF1eDo6eWVzX3RhZyBoYXNfdHlwZV9oZWxwZXIo
IGJvb3N0OjptcGw6OmF1eDo6dHlwZV93cmFwcGVyPFQ+IGNvbnN0IHZvbGF0aWxlKiAsIGJvb3N0
OjptcGw6OmF1eDo6dHlwZV93cmFwcGVyPHR5cGVuYW1lIFQ6OnR5cGU+KiA9IDAgKTsgYm9vc3Q6
Om1wbDo6YXV4Ojpub190YWcgaGFzX3R5cGVfaGVscGVyKC4uLik7IHRlbXBsYXRlPCB0eXBlbmFt
ZSBUID4gc3RydWN0IGhhc190eXBlIHsgdHlwZWRlZiBib29zdDo6bXBsOjphdXg6OnR5cGVfd3Jh
cHBlcjxUPiB0Xzsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoKGhhc190eXBlX2hl
bHBlcikoc3RhdGljX2Nhc3Q8dF8qPigwKSkpID09IHNpemVvZihib29zdDo6bXBsOjphdXg6Onll
c190YWcpOyB9Owp9fX0KIyAyNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3F1b3Rl
LmhwcCIgMgojIDM0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvcXVvdGUuaHBwIgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vz
c2VkLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNs
dWRlX3ByZXByb2Nlc3NlZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs
L2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL3F1b3RlLmhwcCIgMQoKCgpuYW1lc3BhY2UgYm9vc3Qg
ewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBULCBib29sIGhhc190eXBlXyA9
IGF1eDo6aGFzX3R5cGU8VD46OnZhbHVlID4Kc3RydWN0IHF1b3RlX2ltcGwKCiAgICA6IFQKewp9
OwoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgpzdHJ1Y3QgcXVvdGVfaW1wbDwgVCxmYWxzZSA+CnsK
ICAgIHR5cGVkZWYgVCB0eXBlOwp9OwoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBlbmFt
ZSBQMSA+IGNsYXNzIEYKICAgID4Kc3RydWN0IHF1b3RlMQp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5h
bWUgVTEgPiBzdHJ1Y3QgYXBwbHkKCiAgICAgICAgOiBxdW90ZV9pbXBsPCBGPFUxPiA+CgogICAg
ewogICAgfTsKfTsKCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVu
YW1lIFAyID4gY2xhc3MgRgogICAgPgpzdHJ1Y3QgcXVvdGUyCnsKICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBVMSwgdHlwZW5hbWUgVTIgPiBzdHJ1Y3QgYXBwbHkKCiAgICAgICAgOiBxdW90ZV9pbXBs
PCBGPFUxLFUyPiA+CgogICAgewogICAgfTsKfTsKCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwg
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMyA+IGNsYXNzIEYKICAgID4Kc3Ry
dWN0IHF1b3RlMwp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBl
bmFtZSBVMyA+IHN0cnVjdCBhcHBseQoKICAgICAgICA6IHF1b3RlX2ltcGw8IEY8VTEsVTIsVTM+
ID4KCiAgICB7CiAgICB9Owp9OwoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCA+IGNsYXNzIEYKICAgID4K
c3RydWN0IHF1b3RlNAp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFUxLCB0eXBl
bmFtZSBVMiwgdHlwZW5hbWUgVTMsIHR5cGVuYW1lIFU0CiAgICAgICAgPgogICAgc3RydWN0IGFw
cGx5CgogICAgICAgIDogcXVvdGVfaW1wbDwgRjxVMSxVMixVMyxVND4gPgoKICAgIHsKICAgIH07
Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFtZSBQMSwgdHlw
ZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNAogICAgICAgICwgdHlwZW5hbWUgUDUK
ICAgICAgICA+CiAgICAgIGNsYXNzIEYKICAgID4Kc3RydWN0IHF1b3RlNQp7CiAgICB0ZW1wbGF0
ZTwKICAgICAgICAgIHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiwgdHlwZW5hbWUgVTMsIHR5cGVu
YW1lIFU0CiAgICAgICAgLCB0eXBlbmFtZSBVNQogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQoK
ICAgICAgICA6IHF1b3RlX2ltcGw8IEY8VTEsVTIsVTMsVTQsVTU+ID4KCiAgICB7CiAgICB9Owp9
OwoKfQp9CiMgMjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVf
cHJlcHJvY2Vzc2VkLmhwcCIgMgojIDM1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv
cXVvdGUuaHBwIiAyCiMgMjkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Z1
bGxfbGFtYmRhLmhwcCIgMgoKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1
eF8vdGVtcGxhdGVfYXJpdHkuaHBwIiAxCiMgNDQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L21wbC9hdXhfL3RlbXBsYXRlX2FyaXR5LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi90
ZW1wbGF0ZV9hcml0eS5ocHAiIDEKIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs
L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgNDUgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L21wbC9hdXhfL3RlbXBsYXRlX2FyaXR5LmhwcCIgMgojIDMyICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9mdWxsX2xhbWJkYS5ocHAiIDIKCgoKIyAxICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9sYW1iZGFfZXhwci5ocHAiIDEKIyAzNiAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vZnVsbF9sYW1iZGEuaHBwIiAyCgoK
CgoKCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJl
cHJvY2Vzc2VkLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4
Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL2Z1bGxfbGFtYmRhLmhwcCIgMQoKCgpuYW1l
c3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBU
CiAgICAsIHR5cGVuYW1lIFByb3RlY3QgPSBmYWxzZV8KCiAgICA+CnN0cnVjdCBsYW1iZGFfaW1w
bAp7CiAgICB0eXBlZGVmIGZhbHNlXyBpc19sZTsKICAgIHR5cGVkZWYgVCB0eXBlOwp9OwoKdGVt
cGxhdGU8CiAgICAgIHR5cGVuYW1lIFQKCiAgICA+CnN0cnVjdCBsYW1iZGEKICAgIDogbGFtYmRh
X2ltcGw8IFQsZmFsc2VfID4Kewp9OwoKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwKICAgICAg
Ym9vbCBDMSA9IGZhbHNlLCBib29sIEMyID0gZmFsc2UsIGJvb2wgQzMgPSBmYWxzZSwgYm9vbCBD
NCA9IGZhbHNlCiAgICAsIGJvb2wgQzUgPSBmYWxzZQogICAgPgpzdHJ1Y3QgbGFtYmRhX29yCiAg
ICA6IHRydWVfCnsKfTsKCnRlbXBsYXRlPD4Kc3RydWN0IGxhbWJkYV9vcjwgZmFsc2UsZmFsc2Us
ZmFsc2UsZmFsc2UsZmFsc2UgPgogICAgOiBmYWxzZV8Kewp9OwoKfQoKdGVtcGxhdGU8IGludCBO
LCB0eXBlbmFtZSBQcm90ZWN0ID4Kc3RydWN0IGxhbWJkYV9pbXBsPCBhcmc8Tj4sUHJvdGVjdCA+
CnsKICAgIHR5cGVkZWYgdHJ1ZV8gaXNfbGU7CiAgICB0eXBlZGVmIGFyZzxOPiB0eXBlOwp9OwoK
dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpz
dHJ1Y3QgbGFtYmRhX2ltcGw8CiAgICAgIGJpbmQwPEY+CiAgICAsIFByb3RlY3QKICAgID4Kewog
ICAgdHlwZWRlZiBmYWxzZV8gaXNfbGU7CiAgICB0eXBlZGVmIGJpbmQwPAogICAgICAgICAgRgog
ICAgICAgID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEg
PiBjbGFzcyBGCiAgICAsIHR5cGVuYW1lIFQxCiAgICA+CnN0cnVjdCBsYW1iZGE8IEY8VDE+ID4K
ICAgIDogbGFtYmRhX2ltcGw8IEY8VDE+LHRydWVfID4Kewp9OwoKbmFtZXNwYWNlIGF1eCB7Cgp0
ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgSXNMRSwgdHlwZW5hbWUgUHJvdGVjdAogICAgLCB0ZW1w
bGF0ZTwgdHlwZW5hbWUgUDEgPiBjbGFzcyBGCiAgICAsIHR5cGVuYW1lIEwxCiAgICA+CnN0cnVj
dCBsZV9yZXN1bHQxCnsKICAgIHR5cGVkZWYgRjwKICAgICAgICAgIHR5cGVuYW1lIEwxOjp0eXBl
CiAgICAgICAgPiB0eXBlOwp9OwoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBQ
MSA+IGNsYXNzIEYKICAgICwgdHlwZW5hbWUgTDEKICAgID4Kc3RydWN0IGxlX3Jlc3VsdDE8IHRy
dWVfLGZhbHNlXyxGLEwxID4KewogICAgdHlwZWRlZiBiaW5kMTwKICAgICAgICAgIHF1b3RlMTxG
PgogICAgICAgICwgdHlwZW5hbWUgTDE6OnR5cGUKICAgICAgICA+IHR5cGU7Cn07Cgp0ZW1wbGF0
ZTwKICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFAxID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBM
MQogICAgPgpzdHJ1Y3QgbGVfcmVzdWx0MTwgdHJ1ZV8sdHJ1ZV8sRixMMSA+CnsKICAgIHR5cGVk
ZWYgcHJvdGVjdDwgYmluZDE8CiAgICAgICAgICBxdW90ZTE8Rj4KICAgICAgICAsIHR5cGVuYW1l
IEwxOjp0eXBlCiAgICAgICAgPiA+IHR5cGU7Cn07Cgp9Cgp0ZW1wbGF0ZTwKICAgICAgdGVtcGxh
dGU8IHR5cGVuYW1lIFAxID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBUMQogICAgLCB0eXBlbmFt
ZSBQcm90ZWN0CiAgICA+CnN0cnVjdCBsYW1iZGFfaW1wbDwKICAgICAgRjxUMT4sIFByb3RlY3QK
ICAgID4KewogICAgdHlwZWRlZiBsYW1iZGFfaW1wbDxUMT4gbDE7CiAgICB0eXBlZGVmIGF1eDo6
bGFtYmRhX29yPAogICAgICAgICAgbDE6OmlzX2xlOjp2YWx1ZQogICAgICAgID4gaXNfbGU7Cgog
ICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmxlX3Jlc3VsdDE8CiAgICAgICAgICB0eXBlbmFtZSBp
c19sZTo6dHlwZQogICAgICAgICwgUHJvdGVjdAogICAgICAgICwgRgogICAgICAgICwgbDEKICAg
ICAgICA+Ojp0eXBlIHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5h
bWUgVDEKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpzdHJ1Y3QgbGFtYmRhX2ltcGw8CiAg
ICAgIGJpbmQxPCBGLFQxID4KICAgICwgUHJvdGVjdAogICAgPgp7CiAgICB0eXBlZGVmIGZhbHNl
XyBpc19sZTsKICAgIHR5cGVkZWYgYmluZDE8CiAgICAgICAgICBGCiAgICAgICAgLCBUMQogICAg
ICAgID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5
cGVuYW1lIFAyID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIKICAgID4K
c3RydWN0IGxhbWJkYTwgRjxUMSxUMj4gPgogICAgOiBsYW1iZGFfaW1wbDwgRjxUMSxUMj4sdHJ1
ZV8gPgp7Cn07CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBJc0xF
LCB0eXBlbmFtZSBQcm90ZWN0CiAgICAsIHRlbXBsYXRlPCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUg
UDIgPiBjbGFzcyBGCiAgICAsIHR5cGVuYW1lIEwxLCB0eXBlbmFtZSBMMgogICAgPgpzdHJ1Y3Qg
bGVfcmVzdWx0Mgp7CiAgICB0eXBlZGVmIEY8CiAgICAgICAgICB0eXBlbmFtZSBMMTo6dHlwZSwg
dHlwZW5hbWUgTDI6OnR5cGUKICAgICAgICA+IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdGVt
cGxhdGU8IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiA+IGNsYXNzIEYKICAgICwgdHlwZW5hbWUg
TDEsIHR5cGVuYW1lIEwyCiAgICA+CnN0cnVjdCBsZV9yZXN1bHQyPCB0cnVlXyxmYWxzZV8sRixM
MSxMMiA+CnsKICAgIHR5cGVkZWYgYmluZDI8CiAgICAgICAgICBxdW90ZTI8Rj4KICAgICAgICAs
IHR5cGVuYW1lIEwxOjp0eXBlLCB0eXBlbmFtZSBMMjo6dHlwZQogICAgICAgID4gdHlwZTsKfTsK
CnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyID4gY2xh
c3MgRgogICAgLCB0eXBlbmFtZSBMMSwgdHlwZW5hbWUgTDIKICAgID4Kc3RydWN0IGxlX3Jlc3Vs
dDI8IHRydWVfLHRydWVfLEYsTDEsTDIgPgp7CiAgICB0eXBlZGVmIHByb3RlY3Q8IGJpbmQyPAog
ICAgICAgICAgcXVvdGUyPEY+CiAgICAgICAgLCB0eXBlbmFtZSBMMTo6dHlwZSwgdHlwZW5hbWUg
TDI6OnR5cGUKICAgICAgICA+ID4gdHlwZTsKfTsKCn0KCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0
ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBUMSwg
dHlwZW5hbWUgVDIKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpzdHJ1Y3QgbGFtYmRhX2lt
cGw8CiAgICAgIEY8IFQxLFQyID4sIFByb3RlY3QKICAgID4KewogICAgdHlwZWRlZiBsYW1iZGFf
aW1wbDxUMT4gbDE7CiAgICB0eXBlZGVmIGxhbWJkYV9pbXBsPFQyPiBsMjsKCiAgICB0eXBlZGVm
IGF1eDo6bGFtYmRhX29yPAogICAgICAgICAgbDE6OmlzX2xlOjp2YWx1ZSwgbDI6OmlzX2xlOjp2
YWx1ZQogICAgICAgID4gaXNfbGU7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmxlX3Jlc3Vs
dDI8CiAgICAgICAgICB0eXBlbmFtZSBpc19sZTo6dHlwZQogICAgICAgICwgUHJvdGVjdAogICAg
ICAgICwgRgogICAgICAgICwgbDEsIGwyCiAgICAgICAgPjo6dHlwZSB0eXBlOwp9OwoKdGVtcGxh
dGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMgogICAgLCB0eXBl
bmFtZSBQcm90ZWN0CiAgICA+CnN0cnVjdCBsYW1iZGFfaW1wbDwKICAgICAgYmluZDI8IEYsVDEs
VDIgPgogICAgLCBQcm90ZWN0CiAgICA+CnsKICAgIHR5cGVkZWYgZmFsc2VfIGlzX2xlOwogICAg
dHlwZWRlZiBiaW5kMjwKICAgICAgICAgIEYKICAgICAgICAsIFQxLCBUMgogICAgICAgID4gdHlw
ZTsKfTsKCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAy
LCB0eXBlbmFtZSBQMyA+IGNsYXNzIEYKICAgICwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMwogICAgPgpzdHJ1Y3QgbGFtYmRhPCBGPFQxLFQyLFQzPiA+CiAgICA6IGxhbWJk
YV9pbXBsPCBGPFQxLFQyLFQzPix0cnVlXyA+CnsKfTsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxh
dGU8CiAgICAgIHR5cGVuYW1lIElzTEUsIHR5cGVuYW1lIFByb3RlY3QKICAgICwgdGVtcGxhdGU8
IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMgPiBjbGFzcyBGCiAgICAsIHR5
cGVuYW1lIEwxLCB0eXBlbmFtZSBMMiwgdHlwZW5hbWUgTDMKICAgID4Kc3RydWN0IGxlX3Jlc3Vs
dDMKewogICAgdHlwZWRlZiBGPAogICAgICAgICAgdHlwZW5hbWUgTDE6OnR5cGUsIHR5cGVuYW1l
IEwyOjp0eXBlLCB0eXBlbmFtZSBMMzo6dHlwZQogICAgICAgID4gdHlwZTsKfTsKCnRlbXBsYXRl
PAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMyA+
IGNsYXNzIEYKICAgICwgdHlwZW5hbWUgTDEsIHR5cGVuYW1lIEwyLCB0eXBlbmFtZSBMMwogICAg
PgpzdHJ1Y3QgbGVfcmVzdWx0MzwgdHJ1ZV8sZmFsc2VfLEYsTDEsTDIsTDMgPgp7CiAgICB0eXBl
ZGVmIGJpbmQzPAogICAgICAgICAgcXVvdGUzPEY+CiAgICAgICAgLCB0eXBlbmFtZSBMMTo6dHlw
ZSwgdHlwZW5hbWUgTDI6OnR5cGUsIHR5cGVuYW1lIEwzOjp0eXBlCiAgICAgICAgPiB0eXBlOwp9
OwoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIFAzID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBMMSwgdHlwZW5hbWUgTDIsIHR5cGVu
YW1lIEwzCiAgICA+CnN0cnVjdCBsZV9yZXN1bHQzPCB0cnVlXyx0cnVlXyxGLEwxLEwyLEwzID4K
ewogICAgdHlwZWRlZiBwcm90ZWN0PCBiaW5kMzwKICAgICAgICAgIHF1b3RlMzxGPgogICAgICAg
ICwgdHlwZW5hbWUgTDE6OnR5cGUsIHR5cGVuYW1lIEwyOjp0eXBlLCB0eXBlbmFtZSBMMzo6dHlw
ZQogICAgICAgID4gPiB0eXBlOwp9OwoKfQoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzID4gY2xhc3MgRgogICAgLCB0eXBlbmFt
ZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzCiAgICAsIHR5cGVuYW1lIFByb3RlY3QKICAg
ID4Kc3RydWN0IGxhbWJkYV9pbXBsPAogICAgICBGPCBUMSxUMixUMyA+LCBQcm90ZWN0CiAgICA+
CnsKICAgIHR5cGVkZWYgbGFtYmRhX2ltcGw8VDE+IGwxOwogICAgdHlwZWRlZiBsYW1iZGFfaW1w
bDxUMj4gbDI7CiAgICB0eXBlZGVmIGxhbWJkYV9pbXBsPFQzPiBsMzsKCiAgICB0eXBlZGVmIGF1
eDo6bGFtYmRhX29yPAogICAgICAgICAgbDE6OmlzX2xlOjp2YWx1ZSwgbDI6OmlzX2xlOjp2YWx1
ZSwgbDM6OmlzX2xlOjp2YWx1ZQogICAgICAgID4gaXNfbGU7CgogICAgdHlwZWRlZiB0eXBlbmFt
ZSBhdXg6OmxlX3Jlc3VsdDM8CiAgICAgICAgICB0eXBlbmFtZSBpc19sZTo6dHlwZQogICAgICAg
ICwgUHJvdGVjdAogICAgICAgICwgRgogICAgICAgICwgbDEsIGwyLCBsMwogICAgICAgID46OnR5
cGUgdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzCiAgICAsIHR5cGVuYW1lIFByb3RlY3QKICAgID4Kc3RydWN0
IGxhbWJkYV9pbXBsPAogICAgICBiaW5kMzwgRixUMSxUMixUMyA+CiAgICAsIFByb3RlY3QKICAg
ID4KewogICAgdHlwZWRlZiBmYWxzZV8gaXNfbGU7CiAgICB0eXBlZGVmIGJpbmQzPAogICAgICAg
ICAgRgogICAgICAgICwgVDEsIFQyLCBUMwogICAgICAgID4gdHlwZTsKfTsKCnRlbXBsYXRlPAog
ICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlw
ZW5hbWUgUDQgPiBjbGFzcyBGCiAgICAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0CiAgICA+CnN0cnVjdCBsYW1iZGE8IEY8VDEsVDIsVDMsVDQ+ID4K
ICAgIDogbGFtYmRhX2ltcGw8IEY8VDEsVDIsVDMsVDQ+LHRydWVfID4Kewp9OwoKbmFtZXNwYWNl
IGF1eCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgSXNMRSwgdHlwZW5hbWUgUHJvdGVjdAog
ICAgLCB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlw
ZW5hbWUgUDQgPiBjbGFzcyBGCiAgICAsIHR5cGVuYW1lIEwxLCB0eXBlbmFtZSBMMiwgdHlwZW5h
bWUgTDMsIHR5cGVuYW1lIEw0CiAgICA+CnN0cnVjdCBsZV9yZXN1bHQ0CnsKICAgIHR5cGVkZWYg
RjwKICAgICAgICAgIHR5cGVuYW1lIEwxOjp0eXBlLCB0eXBlbmFtZSBMMjo6dHlwZSwgdHlwZW5h
bWUgTDM6OnR5cGUKICAgICAgICAsIHR5cGVuYW1lIEw0Ojp0eXBlCiAgICAgICAgPiB0eXBlOwp9
OwoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCA+IGNsYXNzIEYKICAgICwgdHlwZW5hbWUgTDEsIHR5cGVu
YW1lIEwyLCB0eXBlbmFtZSBMMywgdHlwZW5hbWUgTDQKICAgID4Kc3RydWN0IGxlX3Jlc3VsdDQ8
IHRydWVfLGZhbHNlXyxGLEwxLEwyLEwzLEw0ID4KewogICAgdHlwZWRlZiBiaW5kNDwKICAgICAg
ICAgIHF1b3RlNDxGPgogICAgICAgICwgdHlwZW5hbWUgTDE6OnR5cGUsIHR5cGVuYW1lIEwyOjp0
eXBlLCB0eXBlbmFtZSBMMzo6dHlwZQogICAgICAgICwgdHlwZW5hbWUgTDQ6OnR5cGUKICAgICAg
ICA+IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0ID4gY2xhc3MgRgogICAgLCB0eXBlbmFt
ZSBMMSwgdHlwZW5hbWUgTDIsIHR5cGVuYW1lIEwzLCB0eXBlbmFtZSBMNAogICAgPgpzdHJ1Y3Qg
bGVfcmVzdWx0NDwgdHJ1ZV8sdHJ1ZV8sRixMMSxMMixMMyxMNCA+CnsKICAgIHR5cGVkZWYgcHJv
dGVjdDwgYmluZDQ8CiAgICAgICAgICBxdW90ZTQ8Rj4KICAgICAgICAsIHR5cGVuYW1lIEwxOjp0
eXBlLCB0eXBlbmFtZSBMMjo6dHlwZSwgdHlwZW5hbWUgTDM6OnR5cGUKICAgICAgICAsIHR5cGVu
YW1lIEw0Ojp0eXBlCiAgICAgICAgPiA+IHR5cGU7Cn07Cgp9Cgp0ZW1wbGF0ZTwKICAgICAgdGVt
cGxhdGU8IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0
ID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0
eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBQcm90ZWN0CiAgICA+CnN0cnVjdCBsYW1iZGFfaW1w
bDwKICAgICAgRjwgVDEsVDIsVDMsVDQgPiwgUHJvdGVjdAogICAgPgp7CiAgICB0eXBlZGVmIGxh
bWJkYV9pbXBsPFQxPiBsMTsKICAgIHR5cGVkZWYgbGFtYmRhX2ltcGw8VDI+IGwyOwogICAgdHlw
ZWRlZiBsYW1iZGFfaW1wbDxUMz4gbDM7CiAgICB0eXBlZGVmIGxhbWJkYV9pbXBsPFQ0PiBsNDsK
CiAgICB0eXBlZGVmIGF1eDo6bGFtYmRhX29yPAogICAgICAgICAgbDE6OmlzX2xlOjp2YWx1ZSwg
bDI6OmlzX2xlOjp2YWx1ZSwgbDM6OmlzX2xlOjp2YWx1ZQogICAgICAgICwgbDQ6OmlzX2xlOjp2
YWx1ZQogICAgICAgID4gaXNfbGU7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmxlX3Jlc3Vs
dDQ8CiAgICAgICAgICB0eXBlbmFtZSBpc19sZTo6dHlwZQogICAgICAgICwgUHJvdGVjdAogICAg
ICAgICwgRgogICAgICAgICwgbDEsIGwyLCBsMywgbDQKICAgICAgICA+Ojp0eXBlIHR5cGU7Cn07
Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpzdHJ1
Y3QgbGFtYmRhX2ltcGw8CiAgICAgIGJpbmQ0PCBGLFQxLFQyLFQzLFQ0ID4KICAgICwgUHJvdGVj
dAogICAgPgp7CiAgICB0eXBlZGVmIGZhbHNlXyBpc19sZTsKICAgIHR5cGVkZWYgYmluZDQ8CiAg
ICAgICAgICBGCiAgICAgICAgLCBUMSwgVDIsIFQzLCBUNAogICAgICAgID4gdHlwZTsKfTsKCnRl
bXBsYXRlPAogICAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQ
MiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0CiAgICAgICAgLCB0eXBlbmFtZSBQNQogICAgICAg
ID4KICAgICAgY2xhc3MgRgogICAgLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1l
IFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUKICAgID4Kc3RydWN0IGxhbWJkYTwgRjxUMSxU
MixUMyxUNCxUNT4gPgogICAgOiBsYW1iZGFfaW1wbDwgRjxUMSxUMixUMyxUNCxUNT4sdHJ1ZV8g
Pgp7Cn07CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBJc0xFLCB0
eXBlbmFtZSBQcm90ZWN0CiAgICAsIHRlbXBsYXRlPCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIs
IHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgUDUgPiBjbGFzcyBGCiAgICAsIHR5
cGVuYW1lIEwxLCB0eXBlbmFtZSBMMiwgdHlwZW5hbWUgTDMsIHR5cGVuYW1lIEw0LCB0eXBlbmFt
ZSBMNQogICAgPgpzdHJ1Y3QgbGVfcmVzdWx0NQp7CiAgICB0eXBlZGVmIEY8CiAgICAgICAgICB0
eXBlbmFtZSBMMTo6dHlwZSwgdHlwZW5hbWUgTDI6OnR5cGUsIHR5cGVuYW1lIEwzOjp0eXBlCiAg
ICAgICAgLCB0eXBlbmFtZSBMNDo6dHlwZSwgdHlwZW5hbWUgTDU6OnR5cGUKICAgICAgICA+IHR5
cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFtZSBQMSwg
dHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNAogICAgICAgICwgdHlwZW5hbWUg
UDUKICAgICAgICA+CiAgICAgIGNsYXNzIEYKICAgICwgdHlwZW5hbWUgTDEsIHR5cGVuYW1lIEwy
LCB0eXBlbmFtZSBMMywgdHlwZW5hbWUgTDQsIHR5cGVuYW1lIEw1CiAgICA+CnN0cnVjdCBsZV9y
ZXN1bHQ1PCB0cnVlXyxmYWxzZV8sRixMMSxMMixMMyxMNCxMNSA+CnsKICAgIHR5cGVkZWYgYmlu
ZDU8CiAgICAgICAgICBxdW90ZTU8Rj4KICAgICAgICAsIHR5cGVuYW1lIEwxOjp0eXBlLCB0eXBl
bmFtZSBMMjo6dHlwZSwgdHlwZW5hbWUgTDM6OnR5cGUKICAgICAgICAsIHR5cGVuYW1lIEw0Ojp0
eXBlLCB0eXBlbmFtZSBMNTo6dHlwZQogICAgICAgID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAg
ICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUg
UDMsIHR5cGVuYW1lIFA0CiAgICAgICAgLCB0eXBlbmFtZSBQNQogICAgICAgID4KICAgICAgY2xh
c3MgRgogICAgLCB0eXBlbmFtZSBMMSwgdHlwZW5hbWUgTDIsIHR5cGVuYW1lIEwzLCB0eXBlbmFt
ZSBMNCwgdHlwZW5hbWUgTDUKICAgID4Kc3RydWN0IGxlX3Jlc3VsdDU8IHRydWVfLHRydWVfLEYs
TDEsTDIsTDMsTDQsTDUgPgp7CiAgICB0eXBlZGVmIHByb3RlY3Q8IGJpbmQ1PAogICAgICAgICAg
cXVvdGU1PEY+CiAgICAgICAgLCB0eXBlbmFtZSBMMTo6dHlwZSwgdHlwZW5hbWUgTDI6OnR5cGUs
IHR5cGVuYW1lIEwzOjp0eXBlCiAgICAgICAgLCB0eXBlbmFtZSBMNDo6dHlwZSwgdHlwZW5hbWUg
TDU6OnR5cGUKICAgICAgICA+ID4gdHlwZTsKfTsKCn0KCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0
ZTwKICAgICAgICAgIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVu
YW1lIFA0CiAgICAgICAgLCB0eXBlbmFtZSBQNQogICAgICAgID4KICAgICAgY2xhc3MgRgogICAg
LCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlw
ZW5hbWUgVDUKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpzdHJ1Y3QgbGFtYmRhX2ltcGw8
CiAgICAgIEY8IFQxLFQyLFQzLFQ0LFQ1ID4sIFByb3RlY3QKICAgID4KewogICAgdHlwZWRlZiBs
YW1iZGFfaW1wbDxUMT4gbDE7CiAgICB0eXBlZGVmIGxhbWJkYV9pbXBsPFQyPiBsMjsKICAgIHR5
cGVkZWYgbGFtYmRhX2ltcGw8VDM+IGwzOwogICAgdHlwZWRlZiBsYW1iZGFfaW1wbDxUND4gbDQ7
CiAgICB0eXBlZGVmIGxhbWJkYV9pbXBsPFQ1PiBsNTsKCiAgICB0eXBlZGVmIGF1eDo6bGFtYmRh
X29yPAogICAgICAgICAgbDE6OmlzX2xlOjp2YWx1ZSwgbDI6OmlzX2xlOjp2YWx1ZSwgbDM6Omlz
X2xlOjp2YWx1ZQogICAgICAgICwgbDQ6OmlzX2xlOjp2YWx1ZSwgbDU6OmlzX2xlOjp2YWx1ZQog
ICAgICAgID4gaXNfbGU7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmxlX3Jlc3VsdDU8CiAg
ICAgICAgICB0eXBlbmFtZSBpc19sZTo6dHlwZQogICAgICAgICwgUHJvdGVjdAogICAgICAgICwg
RgogICAgICAgICwgbDEsIGwyLCBsMywgbDQsIGw1CiAgICAgICAgPjo6dHlwZSB0eXBlOwp9OwoK
dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlw
ZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVuYW1lIFQ1CiAgICAsIHR5cGVuYW1lIFBy
b3RlY3QKICAgID4Kc3RydWN0IGxhbWJkYV9pbXBsPAogICAgICBiaW5kNTwgRixUMSxUMixUMyxU
NCxUNSA+CiAgICAsIFByb3RlY3QKICAgID4KewogICAgdHlwZWRlZiBmYWxzZV8gaXNfbGU7CiAg
ICB0eXBlZGVmIGJpbmQ1PAogICAgICAgICAgRgogICAgICAgICwgVDEsIFQyLCBUMywgVDQsIFQ1
CiAgICAgICAgPiB0eXBlOwp9OwoKCnRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBQcm90
ZWN0ID4Kc3RydWN0IGxhbWJkYV9pbXBsPCBwcm90ZWN0PFQ+LFByb3RlY3QgPgp7CiAgICB0eXBl
ZGVmIGZhbHNlXyBpc19sZTsKICAgIHR5cGVkZWYgcHJvdGVjdDxUPiB0eXBlOwp9OwoKCnRlbXBs
YXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1l
IFQzLCB0eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBUNQogICAgLCB0eXBlbmFtZSBQcm90ZWN0
CiAgICA+CnN0cnVjdCBsYW1iZGFfaW1wbDwKICAgICAgYmluZDwgRixUMSxUMixUMyxUNCxUNSA+
CiAgICAsIFByb3RlY3QKCiAgICA+CnsKICAgIHR5cGVkZWYgZmFsc2VfIGlzX2xlOwogICAgdHlw
ZWRlZiBiaW5kPCBGLFQxLFQyLFQzLFQ0LFQ1ID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0
eXBlbmFtZSBGLCB0eXBlbmFtZSBUCiAgICAsIHR5cGVuYW1lIFByb3RlY3QKICAgID4Kc3RydWN0
IGxhbWJkYV9pbXBsPCBiaW5kMXN0PEYsVD4sUHJvdGVjdCA+CnsKICAgIHR5cGVkZWYgZmFsc2Vf
IGlzX2xlOwogICAgdHlwZWRlZiBiaW5kMXN0PCBGLFQgPiB0eXBlOwp9OwoKdGVtcGxhdGU8CiAg
ICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpz
dHJ1Y3QgbGFtYmRhX2ltcGw8IGJpbmQybmQ8RixUPixQcm90ZWN0ID4KewogICAgdHlwZWRlZiBm
YWxzZV8gaXNfbGU7CiAgICB0eXBlZGVmIGJpbmQybmQ8IEYsVCA+IHR5cGU7Cn07Cgp9Cn0KIyAy
OCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNz
ZWQuaHBwIiAyCiMgNDQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Z1bGxf
bGFtYmRhLmhwcCIgMgojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGFtYmRh
LmhwcCIgMgojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaXRlcl9mb2xkLmhw
cCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9p
bXBsLmhwcCIgMQojIDM3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pdGVy
X2ZvbGRfaW1wbC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8v
aW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAxCiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIKIyAxICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvcGxhaW4vaXRlcl9mb2xkX2ltcGwu
aHBwIiAxCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewpuYW1lc3BhY2UgYXV4
IHsKCgp0ZW1wbGF0ZTwKICAgICAgbG9uZyBOCiAgICAsIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5
cGVuYW1lIExhc3QKICAgICwgdHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9w
CiAgICA+CnN0cnVjdCBpdGVyX2ZvbGRfaW1wbDsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBG
aXJzdAogICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAsIHR5cGVu
YW1lIEZvcndhcmRPcAogICAgPgpzdHJ1Y3QgaXRlcl9mb2xkX2ltcGw8IDAsRmlyc3QsTGFzdCxT
dGF0ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIEZpcnN0IGl0ZXIwOwogICAgdHlwZWRlZiBT
dGF0ZSBzdGF0ZTA7CiAgICB0eXBlZGVmIHN0YXRlMCBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjAg
aXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5h
bWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAg
ID4Kc3RydWN0IGl0ZXJfZm9sZF9pbXBsPCAxLEZpcnN0LExhc3QsU3RhdGUsRm9yd2FyZE9wID4K
ewogICAgdHlwZWRlZiBGaXJzdCBpdGVyMDsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGUwOwogICAg
dHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTAsaXRlcjAg
Pjo6dHlwZSBzdGF0ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwoK
CiAgICB0eXBlZGVmIHN0YXRlMSBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjEgaXRlcmF0b3I7Cn07
Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5hbWUgTGFzdAogICAg
LCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAgID4Kc3RydWN0IGl0
ZXJfZm9sZF9pbXBsPCAyLEZpcnN0LExhc3QsU3RhdGUsRm9yd2FyZE9wID4KewogICAgdHlwZWRl
ZiBGaXJzdCBpdGVyMDsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGUwOwogICAgdHlwZWRlZiB0eXBl
bmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTAsaXRlcjAgPjo6dHlwZSBzdGF0
ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTEsaXRlcjEgPjo6dHlwZSBz
dGF0ZTI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0IGl0ZXIyOwoKCiAgICB0eXBl
ZGVmIHN0YXRlMiBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjIgaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0
ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5hbWUgTGFzdAogICAgLCB0eXBlbmFt
ZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAgID4Kc3RydWN0IGl0ZXJfZm9sZF9p
bXBsPCAzLEZpcnN0LExhc3QsU3RhdGUsRm9yd2FyZE9wID4KewogICAgdHlwZWRlZiBGaXJzdCBp
dGVyMDsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGUwOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3
YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTAsaXRlcjAgPjo6dHlwZSBzdGF0ZTE7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBG
b3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTEsaXRlcjEgPjo6dHlwZSBzdGF0ZTI7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0IGl0ZXIyOwogICAgdHlwZWRlZiB0eXBlbmFt
ZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTIsaXRlcjIgPjo6dHlwZSBzdGF0ZTM7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIyOjpuZXh0IGl0ZXIzOwoKCiAgICB0eXBlZGVmIHN0
YXRlMyBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjMgaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAg
ICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5hbWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0
ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAgID4Kc3RydWN0IGl0ZXJfZm9sZF9pbXBsPCA0
LEZpcnN0LExhc3QsU3RhdGUsRm9yd2FyZE9wID4KewogICAgdHlwZWRlZiBGaXJzdCBpdGVyMDsK
ICAgIHR5cGVkZWYgU3RhdGUgc3RhdGUwOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6
OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTAsaXRlcjAgPjo6dHlwZSBzdGF0ZTE7CiAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJk
T3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTEsaXRlcjEgPjo6dHlwZSBzdGF0ZTI7CiAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0IGl0ZXIyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3
YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTIsaXRlcjIgPjo6dHlwZSBzdGF0ZTM7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXIyOjpuZXh0IGl0ZXIzOwogICAgdHlwZWRlZiB0eXBlbmFtZSBG
b3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTMsaXRlcjMgPjo6dHlwZSBzdGF0ZTQ7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIzOjpuZXh0IGl0ZXI0OwoKCiAgICB0eXBlZGVmIHN0YXRl
NCBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjQgaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAg
bG9uZyBOCiAgICAsIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5cGVuYW1lIExhc3QKICAgICwgdHlw
ZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBpdGVyX2Zv
bGRfaW1wbAp7CiAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pbXBsPAogICAgICAgICAgNAogICAgICAg
ICwgRmlyc3QKICAgICAgICAsIExhc3QKICAgICAgICAsIFN0YXRlCiAgICAgICAgLCBGb3J3YXJk
T3AKICAgICAgICA+IGNodW5rXzsKCiAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pbXBsPAogICAgICAg
ICAgKCAoTiAtIDQpIDwgMCA/IDAgOiBOIC0gNCApCiAgICAgICAgLCB0eXBlbmFtZSBjaHVua186
Oml0ZXJhdG9yCiAgICAgICAgLCBMYXN0CiAgICAgICAgLCB0eXBlbmFtZSBjaHVua186OnN0YXRl
CiAgICAgICAgLCBGb3J3YXJkT3AKICAgICAgICA+IHJlc187CgogICAgdHlwZWRlZiB0eXBlbmFt
ZSByZXNfOjpzdGF0ZSBzdGF0ZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzXzo6aXRlcmF0b3Ig
aXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5h
bWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAg
ID4Kc3RydWN0IGl0ZXJfZm9sZF9pbXBsPCAtMSxGaXJzdCxMYXN0LFN0YXRlLEZvcndhcmRPcCA+
CiAgICA6IGl0ZXJfZm9sZF9pbXBsPAogICAgICAgICAgLTEKICAgICAgICAsIHR5cGVuYW1lIEZp
cnN0OjpuZXh0CiAgICAgICAgLCBMYXN0CiAgICAgICAgLCB0eXBlbmFtZSBGb3J3YXJkT3A6OnRl
bXBsYXRlIGFwcGx5PCBTdGF0ZSxGaXJzdCA+Ojp0eXBlCiAgICAgICAgLCBGb3J3YXJkT3AKICAg
ICAgICA+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1l
IFN0YXRlCiAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAogICAgPgpzdHJ1Y3QgaXRlcl9mb2xkX2lt
cGw8IC0xLExhc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIFN0YXRlIHN0
YXRlOwogICAgdHlwZWRlZiBMYXN0IGl0ZXJhdG9yOwp9OwoKfQp9Cn0KIyAyOCAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMg
MzggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pbXBsLmhw
cCIgMgojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaXRlcl9mb2xkLmhwcCIg
MgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0
eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFN0YXRlID0gdm9pZF8KICAg
ICwgdHlwZW5hbWUgRm9yd2FyZE9wID0gdm9pZF8KICAgID4Kc3RydWN0IGl0ZXJfZm9sZAp7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6aXRlcl9mb2xkX2ltcGw8CiAgICAgICAgICA6OmJvb3N0
OjptcGw6Ok8xX3NpemU8U2VxdWVuY2U+Ojp2YWx1ZQogICAgICAgICwgdHlwZW5hbWUgYmVnaW48
U2VxdWVuY2U+Ojp0eXBlCiAgICAgICAgLCB0eXBlbmFtZSBlbmQ8U2VxdWVuY2U+Ojp0eXBlCiAg
ICAgICAgLCBTdGF0ZQogICAgICAgICwgdHlwZW5hbWUgbGFtYmRhPEZvcndhcmRPcD46OnR5cGUK
ICAgICAgICA+OjpzdGF0ZSB0eXBlOwoKICAgCn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBpdGVyX2Zv
bGQ8IHZvaWRfLHZvaWRfLHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUg
VDIsdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12b2lkXyA+
IHN0cnVjdCBhcHBseSA6IGl0ZXJfZm9sZDwgVDEsVDIsVDMgPiB7IH07IH07IHRlbXBsYXRlPD4g
c3RydWN0IGxhbWJkYTwgaXRlcl9mb2xkPCB2b2lkXyx2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVm
IGl0ZXJfZm9sZDwgdm9pZF8sdm9pZF8sdm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMjQgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9kaXN0YW5jZS5ocHAiIDIKIyAxICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvaXRlcmF0b3JfcmFuZ2UuaHBwIiAxCiMgMjMgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pdGVyYXRvcl9yYW5nZS5ocHAiCm5hbWVzcGFjZSBib29z
dCB7Cm5hbWVzcGFjZSBtcGwgewoKc3RydWN0IGl0ZXJhdG9yX3JhbmdlX3RhZzsKCnRlbXBsYXRl
PAogICAgICB0eXBlbmFtZSBGaXJzdCA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIExhc3QgPSB2b2lk
XwogICAgPgpzdHJ1Y3QgaXRlcmF0b3JfcmFuZ2UKewogICAgdHlwZWRlZiBpdGVyYXRvcl9yYW5n
ZV90YWcgdGFnOwogICAgdHlwZWRlZiBpdGVyYXRvcl9yYW5nZSB0eXBlOwogICAgdHlwZWRlZiBG
aXJzdCBiZWdpbjsKICAgIHR5cGVkZWYgTGFzdCBlbmQ7CgogICAKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IGl0ZXJhdG9yX3JhbmdlPCB2b2lkXyx2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQx
LHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5
cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGl0ZXJhdG9yX3JhbmdlPCBUMSxUMiA+
IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBpdGVyYXRvcl9yYW5nZTwgdm9pZF8s
dm9pZF8gPiA+IHsgdHlwZWRlZiBpdGVyYXRvcl9yYW5nZTwgdm9pZF8sdm9pZF8gPiB0eXBlOyB9
OwoKfQp9CiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9kaXN0YW5jZS5ocHAi
IDIKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL25leHQuaHBwIiAxCiMgMjQg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9uZXh0LmhwcCIKbmFtZXNwYWNlIGJvb3N0
IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVCA9IHZvaWRfCiAg
ICA+CnN0cnVjdCBuZXh0CnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6bmV4dCB0eXBlOwogICAK
fTsKIyA0MyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL25leHQuaHBwIgp0ZW1wbGF0
ZTw+IHN0cnVjdCBuZXh0PCB2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxICwgdHlwZW5h
bWUgVDIgPXZvaWRfICx0eXBlbmFtZSBUMyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlw
ZW5hbWUgVDUgPXZvaWRfID4gc3RydWN0IGFwcGx5IDogbmV4dDwgVDEgPiB7IH07IH07IHRlbXBs
YXRlPD4gc3RydWN0IGxhbWJkYTwgbmV4dDwgdm9pZF8gPiA+IHsgdHlwZWRlZiBuZXh0PCB2b2lk
XyA+IHR5cGU7IH07Cgp9Cn0KIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Rp
c3RhbmNlLmhwcCIgMgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7CgoKCgoK
bmFtZXNwYWNlIGF1eCB7CgoKdGVtcGxhdGU8IHR5cGVuYW1lIENhdGVnb3J5LCB0eXBlbmFtZSBG
aXJzdCwgdHlwZW5hbWUgTGFzdCA+CnN0cnVjdCBkaXN0YW5jZV9pbXBsCiAgICA6IGl0ZXJfZm9s
ZDwKICAgICAgICAgIGl0ZXJhdG9yX3JhbmdlPEZpcnN0LExhc3Q+CiAgICAgICAgLCBpbnRlZ3Jh
bF9jPGxvbmcsIDA+CiAgICAgICAgLCBuZXh0PD4KICAgICAgICA+CnsKfTsKCnRlbXBsYXRlPCB0
eXBlbmFtZSBGaXJzdCwgdHlwZW5hbWUgTGFzdCA+CnN0cnVjdCBkaXN0YW5jZV9pbXBsPHJhX2l0
ZXJfdGFnXyxGaXJzdCxMYXN0PgogICAgOiBhdXg6Oml0ZXJfZGlzdGFuY2U8Rmlyc3QsTGFzdD4K
ewp9OwoKfQoKCgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QgPSB2b2lkXwogICAgLCB0
eXBlbmFtZSBMYXN0ID0gdm9pZF8KICAgID4Kc3RydWN0IGRpc3RhbmNlCnsKCiAgICB0eXBlZGVm
IHR5cGVuYW1lIGF1eDo6ZGlzdGFuY2VfaW1wbDwKICAgICAgICAgIHR5cGVuYW1lIEZpcnN0Ojpj
YXRlZ29yeQogICAgICAgICwgRmlyc3QKICAgICAgICAsIExhc3QKICAgICAgICA+Ojp0eXBlIHR5
cGU7Cn07CgoKIyAxMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9kaXN0YW5jZS5o
cHAiCiB0ZW1wbGF0ZTw+IHN0cnVjdCBkaXN0YW5jZTwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRl
PCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUg
VDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBkaXN0YW5jZTwg
VDEsVDIgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgZGlzdGFuY2U8IHZvaWRf
LHZvaWRfID4gPiB7IHR5cGVkZWYgZGlzdGFuY2U8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsKCn0K
fQojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9zaXplX2ltcGwuaHBw
IiAyCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKCgoKdGVtcGxhdGU8IHR5
cGVuYW1lIFRhZyA+CnN0cnVjdCBzaXplX3RyYWl0cwp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUg
U2VxdWVuY2UgPiBzdHJ1Y3QgYWxnb3JpdGhtCgogICAgICAgIDogZGlzdGFuY2U8CiAgICAgICAg
ICAgICAgdHlwZW5hbWUgYmVnaW48U2VxdWVuY2U+Ojp0eXBlCiAgICAgICAgICAgICwgdHlwZW5h
bWUgZW5kPFNlcXVlbmNlPjo6dHlwZQogICAgICAgICAgICA+CiAgICB7CgoKCgoKCgogICAgfTsK
fTsKCgoKfQp9CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zaXplLmhwcCIg
MgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwKICAgICAg
dHlwZW5hbWUgU2VxdWVuY2UgPSB2b2lkXwogICAgPgpzdHJ1Y3Qgc2l6ZQogICAgOiBzaXplX3Ry
YWl0czwgdHlwZW5hbWUgc2VxdWVuY2VfdGFnPFNlcXVlbmNlPjo6dHlwZSA+CiAgICAgICAgOjp0
ZW1wbGF0ZSBhbGdvcml0aG08IFNlcXVlbmNlID4KewogICAKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IHNpemU8IHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiA9dm9p
ZF8gLHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9
dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBzaXplPCBUMSA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1
Y3QgbGFtYmRhPCBzaXplPCB2b2lkXyA+ID4geyB0eXBlZGVmIHNpemU8IHZvaWRfID4gdHlwZTsg
fTsKCn0KfQojIDEyICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5ocHAiIDIK
IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY29weS5ocHAiIDEKIyAyMCAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2NvcHkuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9mb2xkLmhwcCIgMQojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9tcGwvZm9sZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1
eF8vZm9sZF9pbXBsLmhwcCIgMQojIDM3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv
YXV4Xy9mb2xkX2ltcGwuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9h
dXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL2ZvbGRfaW1wbC5o
cHAiIDEKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cm5hbWVzcGFjZSBhdXgg
ewoKCnRlbXBsYXRlPAogICAgICBsb25nIE4KICAgICwgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlw
ZW5hbWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AK
ICAgID4Kc3RydWN0IGZvbGRfaW1wbDsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGaXJzdAog
ICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAsIHR5cGVuYW1lIEZv
cndhcmRPcAogICAgPgpzdHJ1Y3QgZm9sZF9pbXBsPCAwLEZpcnN0LExhc3QsU3RhdGUsRm9yd2Fy
ZE9wID4KewogICAgdHlwZWRlZiBGaXJzdCBpdGVyMDsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGUw
OwogICAgdHlwZWRlZiBzdGF0ZTAgc3RhdGU7CiAgICB0eXBlZGVmIGl0ZXIwIGl0ZXJhdG9yOwp9
OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5cGVuYW1lIExhc3QKICAg
ICwgdHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBm
b2xkX2ltcGw8IDEsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIEZp
cnN0IGl0ZXIwOwogICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTA7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8c3RhdGUwLCB0eXBlbmFtZSBpdGVyMDo6dHlwZT46
OnR5cGUgc3RhdGUxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMDo6bmV4dCBpdGVyMTsKCgog
ICAgdHlwZWRlZiBzdGF0ZTEgc3RhdGU7CiAgICB0eXBlZGVmIGl0ZXIxIGl0ZXJhdG9yOwp9OwoK
dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5cGVuYW1lIExhc3QKICAgICwg
dHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xk
X2ltcGw8IDIsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIEZpcnN0
IGl0ZXIwOwogICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTA7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZv
cndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8c3RhdGUwLCB0eXBlbmFtZSBpdGVyMDo6dHlwZT46OnR5
cGUgc3RhdGUxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMDo6bmV4dCBpdGVyMTsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgRm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxzdGF0ZTEsIHR5cGVuYW1l
IGl0ZXIxOjp0eXBlPjo6dHlwZSBzdGF0ZTI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpu
ZXh0IGl0ZXIyOwoKCiAgICB0eXBlZGVmIHN0YXRlMiBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjIg
aXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5h
bWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAg
ID4Kc3RydWN0IGZvbGRfaW1wbDwgMyxGaXJzdCxMYXN0LFN0YXRlLEZvcndhcmRPcCA+CnsKICAg
IHR5cGVkZWYgRmlyc3QgaXRlcjA7CiAgICB0eXBlZGVmIFN0YXRlIHN0YXRlMDsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgRm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxzdGF0ZTAsIHR5cGVuYW1lIGl0
ZXIwOjp0eXBlPjo6dHlwZSBzdGF0ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0
IGl0ZXIxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PHN0
YXRlMSwgdHlwZW5hbWUgaXRlcjE6OnR5cGU+Ojp0eXBlIHN0YXRlMjsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcjE6Om5leHQgaXRlcjI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6
dGVtcGxhdGUgYXBwbHk8c3RhdGUyLCB0eXBlbmFtZSBpdGVyMjo6dHlwZT46OnR5cGUgc3RhdGUz
OwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMjo6bmV4dCBpdGVyMzsKCgogICAgdHlwZWRlZiBz
dGF0ZTMgc3RhdGU7CiAgICB0eXBlZGVmIGl0ZXIzIGl0ZXJhdG9yOwp9OwoKdGVtcGxhdGU8CiAg
ICAgIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5cGVuYW1lIExhc3QKICAgICwgdHlwZW5hbWUgU3Rh
dGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xkX2ltcGw8IDQsRmly
c3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIEZpcnN0IGl0ZXIwOwogICAg
dHlwZWRlZiBTdGF0ZSBzdGF0ZTA7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVt
cGxhdGUgYXBwbHk8c3RhdGUwLCB0eXBlbmFtZSBpdGVyMDo6dHlwZT46OnR5cGUgc3RhdGUxOwog
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMDo6bmV4dCBpdGVyMTsKICAgIHR5cGVkZWYgdHlwZW5h
bWUgRm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxzdGF0ZTEsIHR5cGVuYW1lIGl0ZXIxOjp0eXBl
Pjo6dHlwZSBzdGF0ZTI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0IGl0ZXIyOwog
ICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PHN0YXRlMiwgdHlw
ZW5hbWUgaXRlcjI6OnR5cGU+Ojp0eXBlIHN0YXRlMzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cjI6Om5leHQgaXRlcjM7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUg
YXBwbHk8c3RhdGUzLCB0eXBlbmFtZSBpdGVyMzo6dHlwZT46OnR5cGUgc3RhdGU0OwogICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyMzo6bmV4dCBpdGVyNDsKCgogICAgdHlwZWRlZiBzdGF0ZTQgc3Rh
dGU7CiAgICB0eXBlZGVmIGl0ZXI0IGl0ZXJhdG9yOwp9OwoKdGVtcGxhdGU8CiAgICAgIGxvbmcg
TgogICAgLCB0eXBlbmFtZSBGaXJzdAogICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1l
IFN0YXRlCiAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAogICAgPgpzdHJ1Y3QgZm9sZF9pbXBsCnsK
ICAgIHR5cGVkZWYgZm9sZF9pbXBsPAogICAgICAgICAgNAogICAgICAgICwgRmlyc3QKICAgICAg
ICAsIExhc3QKICAgICAgICAsIFN0YXRlCiAgICAgICAgLCBGb3J3YXJkT3AKICAgICAgICA+IGNo
dW5rXzsKCiAgICB0eXBlZGVmIGZvbGRfaW1wbDwKICAgICAgICAgICggKE4gLSA0KSA8IDAgPyAw
IDogTiAtIDQgKQogICAgICAgICwgdHlwZW5hbWUgY2h1bmtfOjppdGVyYXRvcgogICAgICAgICwg
TGFzdAogICAgICAgICwgdHlwZW5hbWUgY2h1bmtfOjpzdGF0ZQogICAgICAgICwgRm9yd2FyZE9w
CiAgICAgICAgPiByZXNfOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzXzo6c3RhdGUgc3RhdGU7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIHJlc186Oml0ZXJhdG9yIGl0ZXJhdG9yOwp9OwoKdGVtcGxh
dGU8CiAgICAgIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5cGVuYW1lIExhc3QKICAgICwgdHlwZW5h
bWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xkX2ltcGw8
IC0xLEZpcnN0LExhc3QsU3RhdGUsRm9yd2FyZE9wID4KICAgIDogZm9sZF9pbXBsPAogICAgICAg
ICAgLTEKICAgICAgICAsIHR5cGVuYW1lIEZpcnN0OjpuZXh0CiAgICAgICAgLCBMYXN0CgogICAg
ICAgICx0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PFN0YXRlLCB0eXBlbmFtZSBG
aXJzdDo6dHlwZT46OnR5cGUKICAgICAgICAsIEZvcndhcmRPcAogICAgICAgID4Kewp9OwoKdGVt
cGxhdGU8CiAgICAgIHR5cGVuYW1lIExhc3QKICAgICwgdHlwZW5hbWUgU3RhdGUKICAgICwgdHlw
ZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xkX2ltcGw8IC0xLExhc3QsTGFzdCxTdGF0
ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIFN0YXRlIHN0YXRlOwogICAgdHlwZWRlZiBMYXN0
IGl0ZXJhdG9yOwp9OwoKfQp9Cn0KIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs
L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgMzggIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L21wbC9hdXhfL2ZvbGRfaW1wbC5ocHAiIDIKIyAyNCAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvbXBsL2ZvbGQuaHBwIiAyCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFj
ZSBtcGwgewoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFNlcXVlbmNlID0gdm9pZF8KICAgICwg
dHlwZW5hbWUgU3RhdGUgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AgPSB2b2lkXwog
ICAgPgpzdHJ1Y3QgZm9sZAp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6Zm9sZF9pbXBsPAog
ICAgICAgICAgOjpib29zdDo6bXBsOjpPMV9zaXplPFNlcXVlbmNlPjo6dmFsdWUKICAgICAgICAs
IHR5cGVuYW1lIGJlZ2luPFNlcXVlbmNlPjo6dHlwZQogICAgICAgICwgdHlwZW5hbWUgZW5kPFNl
cXVlbmNlPjo6dHlwZQogICAgICAgICwgU3RhdGUKICAgICAgICAsIHR5cGVuYW1lIGxhbWJkYTxG
b3J3YXJkT3A+Ojp0eXBlCiAgICAgICAgPjo6c3RhdGUgdHlwZTsKCiAgIAp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgZm9sZDwgdm9pZF8sdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBU
MSx0eXBlbmFtZSBUMix0eXBlbmFtZSBUMyAsIHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUg
VDUgPXZvaWRfID4gc3RydWN0IGFwcGx5IDogZm9sZDwgVDEsVDIsVDMgPiB7IH07IH07IHRlbXBs
YXRlPD4gc3RydWN0IGxhbWJkYTwgZm9sZDwgdm9pZF8sdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRl
ZiBmb2xkPCB2b2lkXyx2b2lkXyx2b2lkXyA+IHR5cGU7IH07Cgp9Cn0KIyAyMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2NvcHkuaHBwIiAyCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFt
ZXNwYWNlIG1wbCB7CgoKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRf
CiAgICAsIHR5cGVuYW1lIFN0YXRlID0gdm9pZF8KICAgICwgdHlwZW5hbWUgQmluYXJ5T3AgPSB2
b2lkXwogICAgPgpzdHJ1Y3QgY29weQogICAgOiBmb2xkPCBTZXF1ZW5jZSxTdGF0ZSxCaW5hcnlP
cCA+CnsKfTsKCgoKIHRlbXBsYXRlPD4gc3RydWN0IGNvcHk8IHZvaWRfLHZvaWRfLHZvaWRfID4g
eyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIsdHlwZW5hbWUgVDMgLCB0eXBlbmFt
ZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGNvcHk8IFQx
LFQyLFQzID4geyB9OyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBsYW1iZGE8IGNvcHk8IHZvaWRfLHZv
aWRfLHZvaWRfID4gPiB7IHR5cGVkZWYgY29weTwgdm9pZF8sdm9pZF8sdm9pZF8gPiB0eXBlOyB9
OwoKfQp9CiMgMTMgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z1bmN0aW9uLmhwcCIgMgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9maW5kX2lmLmhwcCIgMQojIDIwICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZmluZF9pZi5ocHAiCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaXRlcl9mb2xkX2lmX2ltcGwuaHBwIiAxCiMgMjMg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pZl9pbXBsLmhw
cCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaWRlbnRpdHkuaHBwIiAxCiMg
MjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pZGVudGl0eS5ocHAiCm5hbWVzcGFj
ZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQgPSB2
b2lkXwogICAgPgpzdHJ1Y3QgaWRlbnRpdHkKewogICAgdHlwZWRlZiBUIHR5cGU7CiAgIAp9OwoK
dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQgPSB2b2lkXwogICAgPgpzdHJ1Y3QgbWFrZV9pZGVu
dGl0eQp7CiAgICB0eXBlZGVmIGlkZW50aXR5PFQ+IHR5cGU7CiAgIAp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgaWRlbnRpdHk8IHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgLCB0eXBlbmFt
ZSBUMiA9dm9pZF8gLHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBl
bmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBpZGVudGl0eTwgVDEgPiB7IH07IH07IHRl
bXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgaWRlbnRpdHk8IHZvaWRfID4gPiB7IHR5cGVkZWYgaWRl
bnRpdHk8IHZvaWRfID4gdHlwZTsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgbWFrZV9pZGVudGl0eTwg
dm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSAsIHR5cGVuYW1lIFQyID12b2lkXyAsdHlw
ZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12b2lkXyA+
IHN0cnVjdCBhcHBseSA6IG1ha2VfaWRlbnRpdHk8IFQxID4geyB9OyB9OyB0ZW1wbGF0ZTw+IHN0
cnVjdCBsYW1iZGE8IG1ha2VfaWRlbnRpdHk8IHZvaWRfID4gPiB7IHR5cGVkZWYgbWFrZV9pZGVu
dGl0eTwgdm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMjQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pZl9pbXBsLmhwcCIgMgoKCgojIDEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Jvb2xfdmFsdWVfd2tuZC5ocHAiIDEKIyAyOCAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaXRlcl9mb2xkX2lmX2ltcGwuaHBwIiAy
CiMgMzYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pZl9p
bXBsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRl
X3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs
L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9pdGVyX2ZvbGRfaWZfaW1wbC5ocHAi
IDEKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cm5hbWVzcGFjZSBhdXggewoK
dGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBTdGF0ZSA+CnN0cnVjdCBpdGVy
X2ZvbGRfaWZfbnVsbF9zdGVwCnsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGU7CiAgICB0eXBlZGVm
IEl0ZXJhdG9yIGl0ZXJhdG9yOwp9OwoKdGVtcGxhdGU8IGJvb2wgPgpzdHJ1Y3QgaXRlcl9mb2xk
X2lmX3N0ZXBfaW1wbAp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIEl0ZXJhdG9y
CiAgICAgICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgICAgICwgdHlwZW5hbWUgU3RhdGVPcAogICAg
ICAgICwgdHlwZW5hbWUgSXRlcmF0b3JPcAogICAgICAgID4KICAgIHN0cnVjdCByZXN1bHRfCiAg
ICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBTdGF0ZU9wOjp0ZW1wbGF0ZSBhcHBseTwgU3Rh
dGUsSXRlcmF0b3IgPjo6dHlwZSBzdGF0ZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJh
dG9yT3A6OnR5cGUgaXRlcmF0b3I7CiAgICB9Owp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgaXRlcl9m
b2xkX2lmX3N0ZXBfaW1wbDxmYWxzZT4KewogICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFt
ZSBJdGVyYXRvcgogICAgICAgICwgdHlwZW5hbWUgU3RhdGUKICAgICAgICAsIHR5cGVuYW1lIFN0
YXRlT3AKICAgICAgICAsIHR5cGVuYW1lIEl0ZXJhdG9yT3AKICAgICAgICA+CiAgICBzdHJ1Y3Qg
cmVzdWx0XwogICAgewogICAgICAgIHR5cGVkZWYgU3RhdGUgc3RhdGU7CiAgICAgICAgdHlwZWRl
ZiBJdGVyYXRvciBpdGVyYXRvcjsKICAgIH07Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUg
SXRlcmF0b3IKICAgICwgdHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAg
ICAsIHR5cGVuYW1lIFByZWRpY2F0ZQogICAgPgpzdHJ1Y3QgaXRlcl9mb2xkX2lmX2ZvcndhcmRf
c3RlcAp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFByZWRpY2F0ZTo6dGVtcGxhdGUgYXBwbHk8IFN0
YXRlLEl0ZXJhdG9yID46OnR5cGUgbm90X2xhc3Q7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJf
Zm9sZF9pZl9zdGVwX2ltcGw8CiAgICAgICAgICBub3RfbGFzdDo6dmFsdWUKICAgICAgICA+Ojp0
ZW1wbGF0ZSByZXN1bHRfPCBJdGVyYXRvciwgU3RhdGUsIEZvcndhcmRPcCwgbXBsOjpuZXh0PCBJ
dGVyYXRvcj4gPiBpbXBsXzsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIGltcGxfOjpzdGF0ZSBzdGF0
ZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaW1wbF86Oml0ZXJhdG9yIGl0ZXJhdG9yOwp9OwoKdGVt
cGxhdGU8CiAgICAgIHR5cGVuYW1lIEl0ZXJhdG9yCiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAs
IHR5cGVuYW1lIEJhY2t3YXJkT3AKICAgICwgdHlwZW5hbWUgUHJlZGljYXRlCiAgICA+CnN0cnVj
dCBpdGVyX2ZvbGRfaWZfYmFja3dhcmRfc3RlcAp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFByZWRp
Y2F0ZTo6dGVtcGxhdGUgYXBwbHk8IFN0YXRlLEl0ZXJhdG9yID46OnR5cGUgbm90X2xhc3Q7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJfZm9sZF9pZl9zdGVwX2ltcGw8CiAgICAgICAgICBub3Rf
bGFzdDo6dmFsdWUKICAgICAgICA+Ojp0ZW1wbGF0ZSByZXN1bHRfPCBJdGVyYXRvcixTdGF0ZSxC
YWNrd2FyZE9wLGlkZW50aXR5PEl0ZXJhdG9yPiA+IGltcGxfOwoKICAgIHR5cGVkZWYgdHlwZW5h
bWUgaW1wbF86OnN0YXRlIHN0YXRlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBpbXBsXzo6aXRlcmF0
b3IgaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgSXRlcmF0b3IKICAgICwg
dHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICAsIHR5cGVuYW1lIEZv
cndhcmRQcmVkaWNhdGUKICAgICwgdHlwZW5hbWUgQmFja3dhcmRPcAogICAgLCB0eXBlbmFtZSBC
YWNrd2FyZFByZWRpY2F0ZQogICAgPgpzdHJ1Y3QgaXRlcl9mb2xkX2lmX2ltcGwKewogcHJpdmF0
ZToKICAgIHR5cGVkZWYgaXRlcl9mb2xkX2lmX251bGxfc3RlcDwgSXRlcmF0b3IsU3RhdGUgPiBm
b3J3YXJkX3N0ZXAwOwogICAgdHlwZWRlZiBpdGVyX2ZvbGRfaWZfZm9yd2FyZF9zdGVwPCB0eXBl
bmFtZSBmb3J3YXJkX3N0ZXAwOjppdGVyYXRvciwgdHlwZW5hbWUgZm9yd2FyZF9zdGVwMDo6c3Rh
dGUsIEZvcndhcmRPcCwgRm9yd2FyZFByZWRpY2F0ZSA+IGZvcndhcmRfc3RlcDE7CiAgICB0eXBl
ZGVmIGl0ZXJfZm9sZF9pZl9mb3J3YXJkX3N0ZXA8IHR5cGVuYW1lIGZvcndhcmRfc3RlcDE6Oml0
ZXJhdG9yLCB0eXBlbmFtZSBmb3J3YXJkX3N0ZXAxOjpzdGF0ZSwgRm9yd2FyZE9wLCBGb3J3YXJk
UHJlZGljYXRlID4gZm9yd2FyZF9zdGVwMjsKICAgIHR5cGVkZWYgaXRlcl9mb2xkX2lmX2Zvcndh
cmRfc3RlcDwgdHlwZW5hbWUgZm9yd2FyZF9zdGVwMjo6aXRlcmF0b3IsIHR5cGVuYW1lIGZvcndh
cmRfc3RlcDI6OnN0YXRlLCBGb3J3YXJkT3AsIEZvcndhcmRQcmVkaWNhdGUgPiBmb3J3YXJkX3N0
ZXAzOwogICAgdHlwZWRlZiBpdGVyX2ZvbGRfaWZfZm9yd2FyZF9zdGVwPCB0eXBlbmFtZSBmb3J3
YXJkX3N0ZXAzOjppdGVyYXRvciwgdHlwZW5hbWUgZm9yd2FyZF9zdGVwMzo6c3RhdGUsIEZvcndh
cmRPcCwgRm9yd2FyZFByZWRpY2F0ZSA+IGZvcndhcmRfc3RlcDQ7CgoKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaWZfPAogICAgICAgICAgdHlwZW5hbWUgZm9yd2FyZF9zdGVwNDo6bm90X2xhc3QKICAg
ICAgICAsIGl0ZXJfZm9sZF9pZl9pbXBsPAogICAgICAgICAgICAgIHR5cGVuYW1lIGZvcndhcmRf
c3RlcDQ6Oml0ZXJhdG9yCiAgICAgICAgICAgICwgdHlwZW5hbWUgZm9yd2FyZF9zdGVwNDo6c3Rh
dGUKICAgICAgICAgICAgLCBGb3J3YXJkT3AKICAgICAgICAgICAgLCBGb3J3YXJkUHJlZGljYXRl
CiAgICAgICAgICAgICwgQmFja3dhcmRPcAogICAgICAgICAgICAsIEJhY2t3YXJkUHJlZGljYXRl
CiAgICAgICAgICAgID4KICAgICAgICAsIGl0ZXJfZm9sZF9pZl9udWxsX3N0ZXA8CiAgICAgICAg
ICAgICAgdHlwZW5hbWUgZm9yd2FyZF9zdGVwNDo6aXRlcmF0b3IKICAgICAgICAgICAgLCB0eXBl
bmFtZSBmb3J3YXJkX3N0ZXA0OjpzdGF0ZQogICAgICAgICAgICA+CiAgICAgICAgPjo6dHlwZSBi
YWNrd2FyZF9zdGVwNDsKCiAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pZl9iYWNrd2FyZF9zdGVwPCB0
eXBlbmFtZSBmb3J3YXJkX3N0ZXAzOjppdGVyYXRvciwgdHlwZW5hbWUgYmFja3dhcmRfc3RlcDQ6
OnN0YXRlLCBCYWNrd2FyZE9wLCBCYWNrd2FyZFByZWRpY2F0ZSA+IGJhY2t3YXJkX3N0ZXAzOwog
ICAgdHlwZWRlZiBpdGVyX2ZvbGRfaWZfYmFja3dhcmRfc3RlcDwgdHlwZW5hbWUgZm9yd2FyZF9z
dGVwMjo6aXRlcmF0b3IsIHR5cGVuYW1lIGJhY2t3YXJkX3N0ZXAzOjpzdGF0ZSwgQmFja3dhcmRP
cCwgQmFja3dhcmRQcmVkaWNhdGUgPiBiYWNrd2FyZF9zdGVwMjsKICAgIHR5cGVkZWYgaXRlcl9m
b2xkX2lmX2JhY2t3YXJkX3N0ZXA8IHR5cGVuYW1lIGZvcndhcmRfc3RlcDE6Oml0ZXJhdG9yLCB0
eXBlbmFtZSBiYWNrd2FyZF9zdGVwMjo6c3RhdGUsIEJhY2t3YXJkT3AsIEJhY2t3YXJkUHJlZGlj
YXRlID4gYmFja3dhcmRfc3RlcDE7CiAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pZl9iYWNrd2FyZF9z
dGVwPCB0eXBlbmFtZSBmb3J3YXJkX3N0ZXAwOjppdGVyYXRvciwgdHlwZW5hbWUgYmFja3dhcmRf
c3RlcDE6OnN0YXRlLCBCYWNrd2FyZE9wLCBCYWNrd2FyZFByZWRpY2F0ZSA+IGJhY2t3YXJkX3N0
ZXAwOwoKCiBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIGJhY2t3YXJkX3N0ZXAwOjpzdGF0
ZSBzdGF0ZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFja3dhcmRfc3RlcDQ6Oml0ZXJhdG9yIGl0
ZXJhdG9yOwp9OwoKfQp9Cn0KIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1
eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgMzcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pZl9pbXBsLmhwcCIgMgojIDIxICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvZmluZF9pZi5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC9tcGwvYXV4Xy9pdGVyX2FwcGx5LmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pdGVyX2FwcGx5LmhwcCIKIyAxICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvYXBwbHkuaHBwIiAxCiMgMjkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9hcHBseS5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw
ZV90cmFpdHMvc2FtZV90cmFpdHMuaHBwIiAxCiMgMTQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL3NhbWVfdHJhaXRzLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxCiMgMTkg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0
X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0
YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIKIyAyMiAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHAiIDIKCm5hbWVz
cGFjZSBib29zdCB7CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBVID4gc3RydWN0
IGlzX3NhbWUgOiBtcGw6OmJvb2xfPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQg
PiBzdHJ1Y3QgaXNfc2FtZTwgVCxUID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OwojIDg4ICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcCIKfQoKIyAx
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFp
dF91bmRlZi5ocHAiIDEKIyA5MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp
dHMvaXNfc2FtZS5ocHAiIDIKIyAxNSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90
cmFpdHMvc2FtZV90cmFpdHMuaHBwIiAyCiMgMzAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L21wbC9hcHBseS5ocHAiIDIKIyAzOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Fw
cGx5LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRl
X3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs
L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9hcHBseS5ocHAiIDEKCgoKbmFtZXNw
YWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwg
dHlwZW5hbWUgVDEgPSB2b2lkXywgdHlwZW5hbWUgVDIgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBU
MyA9IHZvaWRfLCB0eXBlbmFtZSBUNCA9IHZvaWRfLCB0eXBlbmFtZSBUNSA9IHZvaWRfCiAgICA+
CnN0cnVjdCBhcHBseTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBGID4Kc3RydWN0IGFwcGx5MCA6IEYK
ewp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYKICAgID4Kc3RydWN0IGFwcGx5PCBGLHZv
aWRfLHZvaWRfLHZvaWRfLHZvaWRfLHZvaWRfID4KICAgIDogYXBwbHkwPEY+CnsKfTsKCnRlbXBs
YXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMQogICAgPgpzdHJ1Y3QgYXBwbHkxCiAg
ICA6IEY6OnRlbXBsYXRlIGFwcGx5PAogICAgICAgICAgVDEKICAgICAgICA+CnsKfTsKCnRlbXBs
YXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMQogICAgPgpzdHJ1Y3QgYXBwbHk8IEYs
VDEsdm9pZF8sdm9pZF8sdm9pZF8sdm9pZF8gPgogICAgOiBhcHBseTE8IEYsVDEgPgp7Cn07Cgp0
ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyCiAgICA+
CnN0cnVjdCBhcHBseTIKICAgIDogRjo6dGVtcGxhdGUgYXBwbHk8CiAgICAgICAgICBUMSwgVDIK
ICAgICAgICA+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwg
dHlwZW5hbWUgVDIKICAgID4Kc3RydWN0IGFwcGx5PCBGLFQxLFQyLHZvaWRfLHZvaWRfLHZvaWRf
ID4KICAgIDogYXBwbHkyPCBGLFQxLFQyID4Kewp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1l
IEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMKICAgID4Kc3RydWN0IGFw
cGx5MwogICAgOiBGOjp0ZW1wbGF0ZSBhcHBseTwKICAgICAgICAgIFQxLCBUMiwgVDMKICAgICAg
ICA+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDIsIHR5cGVuYW1lIFQzCiAgICA+CnN0cnVjdCBhcHBseTwgRixUMSxUMixUMyx2b2lkXyx2
b2lkXyA+CiAgICA6IGFwcGx5MzwgRixUMSxUMixUMyA+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0
eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFt
ZSBUNAogICAgPgpzdHJ1Y3QgYXBwbHk0CiAgICA6IEY6OnRlbXBsYXRlIGFwcGx5PAogICAgICAg
ICAgVDEsIFQyLCBUMywgVDQKICAgICAgICA+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFt
ZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAog
ICAgPgpzdHJ1Y3QgYXBwbHk8IEYsVDEsVDIsVDMsVDQsdm9pZF8gPgogICAgOiBhcHBseTQ8IEYs
VDEsVDIsVDMsVDQgPgp7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKICAgICwgdHlwZW5hbWUg
VDUKICAgID4Kc3RydWN0IGFwcGx5NQogICAgOiBGOjp0ZW1wbGF0ZSBhcHBseTwKICAgICAgICAg
IFQxLCBUMiwgVDMsIFQ0LCBUNQogICAgICAgID4Kewp9OwoKCnRlbXBsYXRlPAogICAgICB0eXBl
bmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBU
NAogICAgLCB0eXBlbmFtZSBUNQogICAgPgpzdHJ1Y3QgYXBwbHkKICAgIDogYXBwbHk1PCBGLFQx
LFQyLFQzLFQ0LFQ1ID4Kewp9OwoKfQp9CiMgMjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIgMgojIDM5ICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvYXBwbHkuaHBwIiAyCiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9hdXhfL2l0ZXJfYXBwbHkuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1l
c3BhY2UgbXBsIHsKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRgog
ICAgLCB0eXBlbmFtZSBJdGVyYXRvcgogICAgPgpzdHJ1Y3QgaXRlcl9hcHBseTEKICAgIDogYXBw
bHkxPEYsdHlwZW5hbWUgSXRlcmF0b3I6OnR5cGU+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBl
bmFtZSBGCiAgICAsIHR5cGVuYW1lIEl0ZXJhdG9yMQogICAgLCB0eXBlbmFtZSBJdGVyYXRvcjIK
ICAgID4Kc3RydWN0IGl0ZXJfYXBwbHkyCiAgICA6IGFwcGx5MjwKICAgICAgICAgIEYKICAgICAg
ICAsIHR5cGVuYW1lIEl0ZXJhdG9yMTo6dHlwZQogICAgICAgICwgdHlwZW5hbWUgSXRlcmF0b3Iy
Ojp0eXBlCiAgICAgICAgPgp7Cn07Cgp9Cn0KfQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC9tcGwvZmluZF9pZi5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t
cGwvb3IuaHBwIiAxCiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9vci5ocHAi
CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vbmVzdGVkX3R5cGVfd2tu
ZC5ocHAiIDEKIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL29yLmhwcCIgMgoK
CgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXBy
b2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8v
aW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9vci5ocHAiIDEKCgoKbmFtZXNwYWNlIGJvb3N0
IHsgbmFtZXNwYWNlIG1wbCB7CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPCBib29sIENfLCB0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCA+CnN0cnVj
dCBvcl9pbXBsCiAgICA6IHRydWVfCnsKfTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCA+CnN0cnVjdCBvcl9pbXBsPCBmYWxzZSxU
MSxUMixUMyxUNCA+CiAgICA6IG9yX2ltcGw8CiAgICAgICAgICBUMTo6dHlwZTo6dmFsdWUKICAg
ICAgICAsIFQyLCBUMywgVDQKICAgICAgICAsIGZhbHNlXwogICAgICAgID4Kewp9OwoKdGVtcGxh
dGU8PgpzdHJ1Y3Qgb3JfaW1wbDwKICAgICAgICAgIGZhbHNlCiAgICAgICAgLCBmYWxzZV8sIGZh
bHNlXywgZmFsc2VfLCBmYWxzZV8KICAgICAgICA+CiAgICA6IGZhbHNlXwp7Cn07Cgp9Cgp0ZW1w
bGF0ZTwKICAgICAgdHlwZW5hbWUgVDEgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUMiA9IHZvaWRf
CiAgICAsIHR5cGVuYW1lIFQzID0gZmFsc2VfLCB0eXBlbmFtZSBUNCA9IGZhbHNlXywgdHlwZW5h
bWUgVDUgPSBmYWxzZV8KICAgID4Kc3RydWN0IG9yXwoKICAgIDogYXV4Ojpvcl9pbXBsPAogICAg
ICAgICAgVDE6OnR5cGU6OnZhbHVlCiAgICAgICAgLCBUMiwgVDMsIFQ0LCBUNQogICAgICAgID4K
CnsKICAgCgoKCgp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qgb3JfPCB2b2lkXyx2b2lkXyA+IHsgdGVt
cGxhdGU8IHR5cGVuYW1lIFQxLHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBl
bmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IG9yXzwg
VDEsVDIgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgb3JfPCB2b2lkXyx2b2lk
XyA+ID4geyB0eXBlZGVmIG9yXzwgdm9pZF8sdm9pZF8gPiB0eXBlOyB9OwoKCgoKCn19CiMgMjgg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2Vk
LmhwcCIgMgojIDMzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvb3IuaHBwIiAyCiMg
MjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9maW5kX2lmLmhwcCIgMgojIDEgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9ub3QuaHBwIiAxCiMgMjYgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9ub3QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2Ug
bXBsIHsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8IGxvbmcgQ18gPgpzdHJ1Y3Qgbm90X2lt
cGwKICAgIDogYm9vbF88IUNfPgp7Cn07Cgp9CgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQg
PSB2b2lkXwogICAgPgpzdHJ1Y3Qgbm90XwogICAgOiBhdXg6Om5vdF9pbXBsPAogICAgICAgICAg
VDo6dHlwZTo6dmFsdWUKICAgICAgICA+CnsKICAgCn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBub3Rf
PCB2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIgPXZvaWRfICx0
eXBlbmFtZSBUMyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRf
ID4gc3RydWN0IGFwcGx5IDogbm90XzwgVDEgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxh
bWJkYTwgbm90Xzwgdm9pZF8gPiA+IHsgdHlwZWRlZiBub3RfPCB2b2lkXyA+IHR5cGU7IH07Cgp9
Cn0KIyAyNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2ZpbmRfaWYuaHBwIiAyCgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hbHdheXMuaHBwIiAxCiMgMjMgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hbHdheXMuaHBwIgojIDEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2xhbWJkYV9zcGVjLmhwcCIgMQojIDI0ICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWx3YXlzLmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsK
bmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVmFsdWUgPgpzdHJ1Y3QgYWx3YXlz
CnsKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVAogICAgICAgICwgdHlwZW5hbWUg
VDIgPXZvaWRfICx0eXBlbmFtZSBUMyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5h
bWUgVDUgPXZvaWRfCiAgICAgICAgPgogICAgc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlw
ZWRlZiBWYWx1ZSB0eXBlOwogICAgfTsKfTsKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQxID4gc3Ry
dWN0IGxhbWJkYTwgYWx3YXlzPCBUMSA+ID4geyB0eXBlZGVmIGFsd2F5czwgVDEgPiB0eXBlOyB9
OwoKfQp9CiMgMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9maW5kX2lmLmhwcCIg
MgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYmluZC5ocHAiIDEKIyAyOCAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2ZpbmRfaWYuaHBwIiAyCiMgMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FwcGx5LmhwcCIgMQojIDI5ICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvZmluZF9pZi5ocHAiIDIKCgoKCgpuYW1lc3BhY2UgYm9vc3Qgewpu
YW1lc3BhY2UgbXBsIHsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8IHR5cGVuYW1lIExhc3RJ
dGVyYXRvciA+CnN0cnVjdCBmaW5kX2lmX3ByZWQKewogICAgdGVtcGxhdGU8CiAgICAgICAgICB0
eXBlbmFtZSBQcmVkaWNhdGUKICAgICAgICAsIHR5cGVuYW1lIEl0ZXJhdG9yCiAgICAgICAgPgog
ICAgc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBub3RfPCBvcl88
CiAgICAgICAgICAgICAgaXNfc2FtZTxJdGVyYXRvcixMYXN0SXRlcmF0b3I+CiAgICAgICAgICAg
ICwgYXV4OjppdGVyX2FwcGx5MTxQcmVkaWNhdGUsSXRlcmF0b3I+CiAgICAgICAgICAgID4gPjo6
dHlwZSB0eXBlOwogICAgfTsKfTsKCn0KCgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFNlcXVl
bmNlID0gdm9pZF8KICAgICwgdHlwZW5hbWUgUHJlZGljYXRlID0gdm9pZF8KICAgID4Kc3RydWN0
IGZpbmRfaWYKewogcHJpdmF0ZToKICAgIHR5cGVkZWYgdHlwZW5hbWUgYmVnaW48U2VxdWVuY2U+
Ojp0eXBlIGZpcnN0XzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZW5kPFNlcXVlbmNlPjo6dHlwZSBs
YXN0XzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgbGFtYmRhPFByZWRpY2F0ZT46OnR5cGUgcHJlZF87
CgogcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6Oml0ZXJfZm9sZF9pZl9pbXBsPAog
ICAgICAgICAgZmlyc3RfCiAgICAgICAgLCBwcmVkXwogICAgICAgICwgbXBsOjphcmc8MT4KICAg
ICAgICAsIGF1eDo6ZmluZF9pZl9wcmVkPGxhc3RfPgogICAgICAgICwgdm9pZAogICAgICAgICwg
YWx3YXlzPGZhbHNlXz4KICAgICAgICA+OjppdGVyYXRvciB0eXBlOwoKICAgCn07CgoKCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBmaW5kX2lmPCB2b2lkXyx2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1l
IFQxLHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8g
LHR5cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGZpbmRfaWY8IFQxLFQyID4geyB9
OyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBsYW1iZGE8IGZpbmRfaWY8IHZvaWRfLHZvaWRfID4gPiB7
IHR5cGVkZWYgZmluZF9pZjwgdm9pZF8sdm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMTQgIi4uLy4u
Ly4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z1bmN0aW9uLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9jb3VudF9pZi5ocHAiIDEKIyAyNCAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvbXBsL2NvdW50X2lmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9tcGwvYXBwbHlfaWYuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21w
bC9hcHBseV9pZi5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxh
dGU8CiAgICAgIHR5cGVuYW1lIEMgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBGMSA9IHZvaWRfCiAg
ICAsIHR5cGVuYW1lIEYyID0gdm9pZF8KICAgID4Kc3RydWN0IGFwcGx5X2lmCnsKIHByaXZhdGU6
CiAgICB0eXBlZGVmIHR5cGVuYW1lIGlmXzxDLEYxLEYyPjo6dHlwZSBudWxsYXJ5X2Z1bmNfOwoK
IHB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgbnVsbGFyeV9mdW5jXzo6dHlwZSB0eXBlOwog
ICAKfTsKCgoKdGVtcGxhdGU8CiAgICAgIGJvb2wgQwogICAgLCB0eXBlbmFtZSBGMQogICAgLCB0
eXBlbmFtZSBGMgogICAgPgpzdHJ1Y3QgYXBwbHlfaWZfYwp7CiBwcml2YXRlOgogICAgdHlwZWRl
ZiB0eXBlbmFtZSBpZl9jPEMsRjEsRjI+Ojp0eXBlIG51bGxhcnlfZnVuY187CgogcHVibGljOgog
ICAgdHlwZWRlZiB0eXBlbmFtZSBudWxsYXJ5X2Z1bmNfOjp0eXBlIHR5cGU7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBhcHBseV9pZjwgdm9pZF8sdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBl
bmFtZSBUMSx0eXBlbmFtZSBUMix0eXBlbmFtZSBUMyAsIHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlw
ZW5hbWUgVDUgPXZvaWRfID4gc3RydWN0IGFwcGx5IDogYXBwbHlfaWY8IFQxLFQyLFQzID4geyB9
OyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBsYW1iZGE8IGFwcGx5X2lmPCB2b2lkXyx2b2lkXyx2b2lk
XyA+ID4geyB0eXBlZGVmIGFwcGx5X2lmPCB2b2lkXyx2b2lkXyx2b2lkXyA+IHR5cGU7IH07Cgp9
Cn0KIyAyNSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2NvdW50X2lmLmhwcCIgMgoK
CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FwcGx5LmhwcCIgMQojIDI4ICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY291bnRfaWYuaHBwIiAyCgoKCm5hbWVzcGFj
ZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwgdHlw
ZW5hbWUgUHJlZGljYXRlID4Kc3RydWN0IG5leHRfaWYKewogICAgdGVtcGxhdGU8CiAgICAgICAg
ICB0eXBlbmFtZSBOCiAgICAgICAgLCB0eXBlbmFtZSBUCiAgICAgICAgPgogICAgc3RydWN0IGFw
cGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseV9pZjwKICAgICAgICAgICAg
ICB0eXBlbmFtZSBhcHBseTE8UHJlZGljYXRlLFQ+Ojp0eXBlCiAgICAgICAgICAgICwgbmV4dDxO
PgogICAgICAgICAgICAsIGlkZW50aXR5PE4+CiAgICAgICAgICAgID46OnR5cGUgdHlwZTsKICAg
IH07Cn07Cgp9CgoKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAg
ICAsIHR5cGVuYW1lIFByZWRpY2F0ZSA9IHZvaWRfCiAgICA+CnN0cnVjdCBjb3VudF9pZgp7CiBw
cml2YXRlOgogICAgdHlwZWRlZiB0eXBlbmFtZSBsYW1iZGE8UHJlZGljYXRlPjo6dHlwZSBwcmVk
XzsKCiBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIGZvbGQ8CiAgICAgICAgICBTZXF1ZW5j
ZQogICAgICAgICwgaW50ZWdyYWxfYzx1bnNpZ25lZCBsb25nLCAwPgogICAgICAgICwgcHJvdGVj
dDwgYXV4OjpuZXh0X2lmPHByZWRfPiA+CiAgICAgICAgPjo6dHlwZSB0eXBlOwoKICAgCn07CgoK
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBjb3VudF9pZjwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0
eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQg
PXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBjb3VudF9pZjwgVDEs
VDIgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgY291bnRfaWY8IHZvaWRfLHZv
aWRfID4gPiB7IHR5cGVkZWYgY291bnRfaWY8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsKCn0KfQoj
IDE1ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5ocHAiIDIKIyAxICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaW5zZXJ0LmhwcCIgMQojIDIwICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvaW5zZXJ0LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvaW5zZXJ0X2Z3ZC5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvbXBsL2luc2VydF9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBs
IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgaW5zZXJ0X3RyYWl0czsKdGVtcGxh
dGU8IHR5cGVuYW1lIFNlcXVlbmNlLCB0eXBlbmFtZSBQb3MsIHR5cGVuYW1lIFQgPiBzdHJ1Y3Qg
aW5zZXJ0OwoKfQp9CiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pbnNlcnQu
aHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5zZXJ0X2lt
cGwuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luc2Vy
dF9pbXBsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY29weV9iYWNr
d2FyZC5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2NvcHlfYmFj
a3dhcmQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9mb2xkX2JhY2t3
YXJkLmhwcCIgMQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZm9sZF9iYWNr
d2FyZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FyZy5ocHAiIDEK
IyAyMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2ZvbGRfYmFja3dhcmQuaHBwIiAy
CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2ZvbGRfYmFja3dhcmRf
aW1wbC5ocHAiIDEKIyAzNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vZm9s
ZF9iYWNrd2FyZF9pbXBsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv
YXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9mb2xkX2JhY2t3
YXJkX2ltcGwuaHBwIiAxCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewpuYW1l
c3BhY2UgYXV4IHsKCgp0ZW1wbGF0ZTwKICAgICAgbG9uZyBOCiAgICAsIHR5cGVuYW1lIEZpcnN0
CiAgICAsIHR5cGVuYW1lIExhc3QKICAgICwgdHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUg
QmFja3dhcmRPcAogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAgID4Kc3RydWN0IGZvbGRfYmFj
a3dhcmRfaW1wbDsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGaXJzdAogICAgLCB0eXBlbmFt
ZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAsIHR5cGVuYW1lIEJhY2t3YXJkT3AKICAg
ICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xkX2JhY2t3YXJkX2ltcGw8IDAs
Rmlyc3QsTGFzdCxTdGF0ZSxCYWNrd2FyZE9wLEZvcndhcmRPcCA+CnsKICAgIHR5cGVkZWYgRmly
c3QgaXRlcjA7CiAgICB0eXBlZGVmIFN0YXRlIGZ3ZF9zdGF0ZTA7CiAgICB0eXBlZGVmIGZ3ZF9z
dGF0ZTAgYmt3ZF9zdGF0ZTA7CiAgICB0eXBlZGVmIGJrd2Rfc3RhdGUwIHN0YXRlOwogICAgdHlw
ZWRlZiBpdGVyMCBpdGVyYXRvcjsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGaXJzdAog
ICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAsIHR5cGVuYW1lIEJh
Y2t3YXJkT3AKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xkX2JhY2t3
YXJkX2ltcGw8IDEsRmlyc3QsTGFzdCxTdGF0ZSxCYWNrd2FyZE9wLEZvcndhcmRPcCA+CnsKICAg
IHR5cGVkZWYgRmlyc3QgaXRlcjA7CiAgICB0eXBlZGVmIFN0YXRlIGZ3ZF9zdGF0ZTA7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8ZndkX3N0YXRlMCwgdHlw
ZW5hbWUgaXRlcjA6OnR5cGU+Ojp0eXBlIGZ3ZF9zdGF0ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXIwOjpuZXh0IGl0ZXIxOwoKCiAgICB0eXBlZGVmIGZ3ZF9zdGF0ZTEgYmt3ZF9zdGF0ZTE7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIEJhY2t3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PGJrd2Rfc3Rh
dGUxLCB0eXBlbmFtZSBpdGVyMDo6dHlwZT46OnR5cGUgYmt3ZF9zdGF0ZTA7CiAgICB0eXBlZGVm
IGJrd2Rfc3RhdGUwIHN0YXRlOwogICAgdHlwZWRlZiBpdGVyMSBpdGVyYXRvcjsKfTsKCnRlbXBs
YXRlPAogICAgICB0eXBlbmFtZSBGaXJzdAogICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVu
YW1lIFN0YXRlCiAgICAsIHR5cGVuYW1lIEJhY2t3YXJkT3AKICAgICwgdHlwZW5hbWUgRm9yd2Fy
ZE9wCiAgICA+CnN0cnVjdCBmb2xkX2JhY2t3YXJkX2ltcGw8IDIsRmlyc3QsTGFzdCxTdGF0ZSxC
YWNrd2FyZE9wLEZvcndhcmRPcCA+CnsKICAgIHR5cGVkZWYgRmlyc3QgaXRlcjA7CiAgICB0eXBl
ZGVmIFN0YXRlIGZ3ZF9zdGF0ZTA7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVt
cGxhdGUgYXBwbHk8ZndkX3N0YXRlMCwgdHlwZW5hbWUgaXRlcjA6OnR5cGU+Ojp0eXBlIGZ3ZF9z
dGF0ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgdHlwZWRl
ZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PGZ3ZF9zdGF0ZTEsIHR5cGVuYW1l
IGl0ZXIxOjp0eXBlPjo6dHlwZSBmd2Rfc3RhdGUyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
MTo6bmV4dCBpdGVyMjsKCgogICAgdHlwZWRlZiBmd2Rfc3RhdGUyIGJrd2Rfc3RhdGUyOwogICAg
dHlwZWRlZiB0eXBlbmFtZSBCYWNrd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxia3dkX3N0YXRlMiwg
dHlwZW5hbWUgaXRlcjE6OnR5cGU+Ojp0eXBlIGJrd2Rfc3RhdGUxOwogICAgdHlwZWRlZiB0eXBl
bmFtZSBCYWNrd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxia3dkX3N0YXRlMSwgdHlwZW5hbWUgaXRl
cjA6OnR5cGU+Ojp0eXBlIGJrd2Rfc3RhdGUwOwoKCiAgICB0eXBlZGVmIGJrd2Rfc3RhdGUwIHN0
YXRlOwogICAgdHlwZWRlZiBpdGVyMiBpdGVyYXRvcjsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBl
bmFtZSBGaXJzdAogICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAs
IHR5cGVuYW1lIEJhY2t3YXJkT3AKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVj
dCBmb2xkX2JhY2t3YXJkX2ltcGw8IDMsRmlyc3QsTGFzdCxTdGF0ZSxCYWNrd2FyZE9wLEZvcndh
cmRPcCA+CnsKICAgIHR5cGVkZWYgRmlyc3QgaXRlcjA7CiAgICB0eXBlZGVmIFN0YXRlIGZ3ZF9z
dGF0ZTA7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Zndk
X3N0YXRlMCwgdHlwZW5hbWUgaXRlcjA6OnR5cGU+Ojp0eXBlIGZ3ZF9zdGF0ZTE7CiAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3
YXJkT3A6OnRlbXBsYXRlIGFwcGx5PGZ3ZF9zdGF0ZTEsIHR5cGVuYW1lIGl0ZXIxOjp0eXBlPjo6
dHlwZSBmd2Rfc3RhdGUyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMTo6bmV4dCBpdGVyMjsK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgRm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxmd2Rfc3RhdGUy
LCB0eXBlbmFtZSBpdGVyMjo6dHlwZT46OnR5cGUgZndkX3N0YXRlMzsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcjI6Om5leHQgaXRlcjM7CgoKICAgIHR5cGVkZWYgZndkX3N0YXRlMyBia3dkX3N0
YXRlMzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Ymt3
ZF9zdGF0ZTMsIHR5cGVuYW1lIGl0ZXIyOjp0eXBlPjo6dHlwZSBia3dkX3N0YXRlMjsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Ymt3ZF9zdGF0ZTIsIHR5
cGVuYW1lIGl0ZXIxOjp0eXBlPjo6dHlwZSBia3dkX3N0YXRlMTsKICAgIHR5cGVkZWYgdHlwZW5h
bWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Ymt3ZF9zdGF0ZTEsIHR5cGVuYW1lIGl0ZXIw
Ojp0eXBlPjo6dHlwZSBia3dkX3N0YXRlMDsKCgogICAgdHlwZWRlZiBia3dkX3N0YXRlMCBzdGF0
ZTsKICAgIHR5cGVkZWYgaXRlcjMgaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5h
bWUgRmlyc3QKICAgICwgdHlwZW5hbWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0
eXBlbmFtZSBCYWNrd2FyZE9wCiAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAogICAgPgpzdHJ1Y3Qg
Zm9sZF9iYWNrd2FyZF9pbXBsPCA0LEZpcnN0LExhc3QsU3RhdGUsQmFja3dhcmRPcCxGb3J3YXJk
T3AgPgp7CiAgICB0eXBlZGVmIEZpcnN0IGl0ZXIwOwogICAgdHlwZWRlZiBTdGF0ZSBmd2Rfc3Rh
dGUwOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PGZ3ZF9z
dGF0ZTAsIHR5cGVuYW1lIGl0ZXIwOjp0eXBlPjo6dHlwZSBmd2Rfc3RhdGUxOwogICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyMDo6bmV4dCBpdGVyMTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgRm9yd2Fy
ZE9wOjp0ZW1wbGF0ZSBhcHBseTxmd2Rfc3RhdGUxLCB0eXBlbmFtZSBpdGVyMTo6dHlwZT46OnR5
cGUgZndkX3N0YXRlMjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcjE6Om5leHQgaXRlcjI7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8ZndkX3N0YXRlMiwg
dHlwZW5hbWUgaXRlcjI6OnR5cGU+Ojp0eXBlIGZ3ZF9zdGF0ZTM7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXIyOjpuZXh0IGl0ZXIzOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRl
bXBsYXRlIGFwcGx5PGZ3ZF9zdGF0ZTMsIHR5cGVuYW1lIGl0ZXIzOjp0eXBlPjo6dHlwZSBmd2Rf
c3RhdGU0OwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMzo6bmV4dCBpdGVyNDsKCgogICAgdHlw
ZWRlZiBmd2Rfc3RhdGU0IGJrd2Rfc3RhdGU0OwogICAgdHlwZWRlZiB0eXBlbmFtZSBCYWNrd2Fy
ZE9wOjp0ZW1wbGF0ZSBhcHBseTxia3dkX3N0YXRlNCwgdHlwZW5hbWUgaXRlcjM6OnR5cGU+Ojp0
eXBlIGJrd2Rfc3RhdGUzOwogICAgdHlwZWRlZiB0eXBlbmFtZSBCYWNrd2FyZE9wOjp0ZW1wbGF0
ZSBhcHBseTxia3dkX3N0YXRlMywgdHlwZW5hbWUgaXRlcjI6OnR5cGU+Ojp0eXBlIGJrd2Rfc3Rh
dGUyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBCYWNrd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxia3dk
X3N0YXRlMiwgdHlwZW5hbWUgaXRlcjE6OnR5cGU+Ojp0eXBlIGJrd2Rfc3RhdGUxOwogICAgdHlw
ZWRlZiB0eXBlbmFtZSBCYWNrd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxia3dkX3N0YXRlMSwgdHlw
ZW5hbWUgaXRlcjA6OnR5cGU+Ojp0eXBlIGJrd2Rfc3RhdGUwOwoKCiAgICB0eXBlZGVmIGJrd2Rf
c3RhdGUwIHN0YXRlOwogICAgdHlwZWRlZiBpdGVyNCBpdGVyYXRvcjsKfTsKCnRlbXBsYXRlPAog
ICAgICBsb25nIE4KICAgICwgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5hbWUgTGFzdAogICAg
LCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBCYWNrd2FyZE9wCiAgICAsIHR5cGVuYW1l
IEZvcndhcmRPcAogICAgPgpzdHJ1Y3QgZm9sZF9iYWNrd2FyZF9pbXBsCnsKICAgIHR5cGVkZWYg
Rmlyc3QgaXRlcjA7CiAgICB0eXBlZGVmIFN0YXRlIGZ3ZF9zdGF0ZTA7CiAgICB0eXBlZGVmIHR5
cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8ZndkX3N0YXRlMCwgdHlwZW5hbWUgaXRl
cjA6OnR5cGU+Ojp0eXBlIGZ3ZF9zdGF0ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpu
ZXh0IGl0ZXIxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5
PGZ3ZF9zdGF0ZTEsIHR5cGVuYW1lIGl0ZXIxOjp0eXBlPjo6dHlwZSBmd2Rfc3RhdGUyOwogICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyMTo6bmV4dCBpdGVyMjsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
Rm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxmd2Rfc3RhdGUyLCB0eXBlbmFtZSBpdGVyMjo6dHlw
ZT46OnR5cGUgZndkX3N0YXRlMzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcjI6Om5leHQgaXRl
cjM7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8ZndkX3N0
YXRlMywgdHlwZW5hbWUgaXRlcjM6OnR5cGU+Ojp0eXBlIGZ3ZF9zdGF0ZTQ7CiAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXIzOjpuZXh0IGl0ZXI0OwoKCiAgICB0eXBlZGVmIGZvbGRfYmFja3dhcmRf
aW1wbDwKICAgICAgICAgICggKE4gLSA0KSA8IDAgPyAwIDogTiAtIDQgKQogICAgICAgICwgaXRl
cjQKICAgICAgICAsIExhc3QKICAgICAgICAsIGZ3ZF9zdGF0ZTQKICAgICAgICAsIEJhY2t3YXJk
T3AKICAgICAgICAsIEZvcndhcmRPcAogICAgICAgID4gbmVzdGVkX2NodW5rOwoKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgbmVzdGVkX2NodW5rOjpzdGF0ZSBia3dkX3N0YXRlNDsKICAgIHR5cGVkZWYg
dHlwZW5hbWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Ymt3ZF9zdGF0ZTQsIHR5cGVuYW1l
IGl0ZXIzOjp0eXBlPjo6dHlwZSBia3dkX3N0YXRlMzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFj
a3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Ymt3ZF9zdGF0ZTMsIHR5cGVuYW1lIGl0ZXIyOjp0eXBl
Pjo6dHlwZSBia3dkX3N0YXRlMjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFja3dhcmRPcDo6dGVt
cGxhdGUgYXBwbHk8Ymt3ZF9zdGF0ZTIsIHR5cGVuYW1lIGl0ZXIxOjp0eXBlPjo6dHlwZSBia3dk
X3N0YXRlMTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8
Ymt3ZF9zdGF0ZTEsIHR5cGVuYW1lIGl0ZXIwOjp0eXBlPjo6dHlwZSBia3dkX3N0YXRlMDsKCgog
ICAgdHlwZWRlZiBia3dkX3N0YXRlMCBzdGF0ZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgbmVzdGVk
X2NodW5rOjppdGVyYXRvciBpdGVyYXRvcjsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBG
aXJzdAogICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAsIHR5cGVu
YW1lIEJhY2t3YXJkT3AKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xk
X2JhY2t3YXJkX2ltcGw8IC0xLEZpcnN0LExhc3QsU3RhdGUsQmFja3dhcmRPcCxGb3J3YXJkT3Ag
Pgp7CiAgICB0eXBlZGVmIGZvbGRfYmFja3dhcmRfaW1wbDwKICAgICAgICAgIC0xCiAgICAgICAg
LCB0eXBlbmFtZSBGaXJzdDo6bmV4dAogICAgICAgICwgTGFzdAoKICAgICAgICAsdHlwZW5hbWUg
Rm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxTdGF0ZSwgdHlwZW5hbWUgRmlyc3Q6OnR5cGU+Ojp0
eXBlCiAgICAgICAgLCBCYWNrd2FyZE9wCiAgICAgICAgLCBGb3J3YXJkT3AKICAgICAgICA+IG5l
c3RlZF9zdGVwOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBw
bHk8dHlwZW5hbWUgbmVzdGVkX3N0ZXA6OnN0YXRlLCB0eXBlbmFtZSBGaXJzdDo6dHlwZT46OnR5
cGUgc3RhdGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIG5lc3RlZF9zdGVwOjppdGVyYXRvciBpdGVy
YXRvcjsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0
YXRlCiAgICAsIHR5cGVuYW1lIEJhY2t3YXJkT3AKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAg
ICA+CnN0cnVjdCBmb2xkX2JhY2t3YXJkX2ltcGw8IC0xLExhc3QsTGFzdCxTdGF0ZSxCYWNrd2Fy
ZE9wLEZvcndhcmRPcCA+CnsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGU7CiAgICB0eXBlZGVmIExh
c3QgaXRlcmF0b3I7Cn07Cgp9Cn0KfQojIDI4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t
cGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDIKIyAzOCAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvbXBsL2F1eF8vZm9sZF9iYWNrd2FyZF9pbXBsLmhwcCIgMgojIDI1ICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZm9sZF9iYWNrd2FyZC5ocHAiIDIKCgpuYW1lc3Bh
Y2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1
ZW5jZSA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFN0YXRlID0gdm9pZF8KICAgICwgdHlwZW5hbWUg
QmFja3dhcmRPcCA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIEZvcndhcmRPcCA9IGFyZzwxPgogICAg
PgpzdHJ1Y3QgZm9sZF9iYWNrd2FyZAp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6Zm9sZF9i
YWNrd2FyZF9pbXBsPAogICAgICAgICAgOjpib29zdDo6bXBsOjpPMV9zaXplPFNlcXVlbmNlPjo6
dmFsdWUKICAgICAgICAsIHR5cGVuYW1lIGJlZ2luPFNlcXVlbmNlPjo6dHlwZQogICAgICAgICwg
dHlwZW5hbWUgZW5kPFNlcXVlbmNlPjo6dHlwZQogICAgICAgICwgU3RhdGUKICAgICAgICAsIHR5
cGVuYW1lIGxhbWJkYTxCYWNrd2FyZE9wPjo6dHlwZQogICAgICAgICwgdHlwZW5hbWUgbGFtYmRh
PEZvcndhcmRPcD46OnR5cGUKICAgICAgICA+OjpzdGF0ZSB0eXBlOwoKICAgCn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBmb2xkX2JhY2t3YXJkPCB2b2lkXyx2b2lkXyx2b2lkXyA+IHsgdGVtcGxhdGU8
IHR5cGVuYW1lIFQxLHR5cGVuYW1lIFQyLHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgPXZvaWRf
ICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBmb2xkX2JhY2t3YXJkPCBUMSxU
MixUMyA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBmb2xkX2JhY2t3YXJkPCB2
b2lkXyx2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVmIGZvbGRfYmFja3dhcmQ8IHZvaWRfLHZvaWRf
LHZvaWRfID4gdHlwZTsgfTsKCn0KfQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t
cGwvY29weV9iYWNrd2FyZC5ocHAiIDIKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1w
bCB7CgoKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5
cGVuYW1lIFN0YXRlID0gdm9pZF8KICAgICwgdHlwZW5hbWUgQmluYXJ5T3AgPSB2b2lkXwogICAg
PgpzdHJ1Y3QgY29weV9iYWNrd2FyZAogICAgOiBmb2xkX2JhY2t3YXJkPCBTZXF1ZW5jZSxTdGF0
ZSxCaW5hcnlPcCA+CnsKfTsKCgogdGVtcGxhdGU8PiBzdHJ1Y3QgY29weV9iYWNrd2FyZDwgdm9p
ZF8sdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMix0eXBl
bmFtZSBUMyAsIHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRfID4gc3RydWN0
IGFwcGx5IDogY29weV9iYWNrd2FyZDwgVDEsVDIsVDMgPiB7IH07IH07IHRlbXBsYXRlPD4gc3Ry
dWN0IGxhbWJkYTwgY29weV9iYWNrd2FyZDwgdm9pZF8sdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRl
ZiBjb3B5X2JhY2t3YXJkPCB2b2lkXyx2b2lkXyx2b2lkXyA+IHR5cGU7IH07Cgp9Cn0KIyAyMSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5zZXJ0X2ltcGwuaHBwIiAyCgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9jbGVhci5ocHAiIDEKIyAyMCAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2NsZWFyLmhwcCIKIyAxICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvY2xlYXJfZndkLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC9tcGwvY2xlYXJfZndkLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNl
IG1wbCB7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4gc3RydWN0IGNsZWFyX3RyYWl0czsKdGVt
cGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IGNsZWFyOwoKfQp9CiMgMjEgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9jbGVhci5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jbGVhcl9pbXBsLmhwcCIgMQojIDIzICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jbGVhcl9pbXBsLmhwcCIKbmFtZXNwYWNlIGJvb3N0
IHsKbmFtZXNwYWNlIG1wbCB7CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3QgY2xl
YXJfdHJhaXRzCnsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBhbGdv
cml0aG07Cn07CgoKCn0KfQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY2xl
YXIuaHBwIiAyCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRl
PAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICA+CnN0cnVjdCBjbGVhcgogICAg
OiBjbGVhcl90cmFpdHM8IHR5cGVuYW1lIHNlcXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgog
ICAgICAgIDo6dGVtcGxhdGUgYWxnb3JpdGhtPCBTZXF1ZW5jZSA+CnsKICAgCn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBjbGVhcjwgdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSAsIHR5cGVu
YW1lIFQyID12b2lkXyAsdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5
cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGNsZWFyPCBUMSA+IHsgfTsgfTsgdGVt
cGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBjbGVhcjwgdm9pZF8gPiA+IHsgdHlwZWRlZiBjbGVhcjwg
dm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21w
bC9hdXhfL2luc2VydF9pbXBsLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L21wbC9wdXNoX2Zyb250LmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t
cGwvcHVzaF9mcm9udC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3B1
c2hfZnJvbnRfZndkLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv
cHVzaF9mcm9udF9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRl
bXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgcHVzaF9mcm9udF90cmFpdHM7CnRlbXBsYXRl
PCB0eXBlbmFtZSBTZXF1ZW5jZSwgdHlwZW5hbWUgVCA+IHN0cnVjdCBwdXNoX2Zyb250OwoKfQp9
CiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2Zyb250LmhwcCIgMgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3B1c2hfZnJvbnRfaW1wbC5o
cHAiIDEKIyAyMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHVzaF9mcm9u
dF9pbXBsLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7CgoKCnRlbXBsYXRl
PCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3QgcHVzaF9mcm9udF90cmFpdHMKewogICAgdGVtcGxhdGU8
IHR5cGVuYW1lIFNlcXVlbmNlLCB0eXBlbmFtZSBUID4gc3RydWN0IGFsZ29yaXRobTsKfTsKCgoK
fQp9CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2Zyb250LmhwcCIg
MgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwKICAgICAg
dHlwZW5hbWUgU2VxdWVuY2UgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUID0gdm9pZF8KICAgID4K
c3RydWN0IHB1c2hfZnJvbnQKICAgIDogcHVzaF9mcm9udF90cmFpdHM8IHR5cGVuYW1lIHNlcXVl
bmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgogICAgICAgIDo6dGVtcGxhdGUgYWxnb3JpdGhtPCBT
ZXF1ZW5jZSxUID4KewogICAKfTsKCnRlbXBsYXRlPD4gc3RydWN0IHB1c2hfZnJvbnQ8IHZvaWRf
LHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIgLCB0eXBlbmFtZSBU
MyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRfID4gc3RydWN0
IGFwcGx5IDogcHVzaF9mcm9udDwgVDEsVDIgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxh
bWJkYTwgcHVzaF9mcm9udDwgdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRlZiBwdXNoX2Zyb250PCB2
b2lkXyx2b2lkXyA+IHR5cGU7IH07Cgp9Cn0KIyAyNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvbXBsL2F1eF8vaW5zZXJ0X2ltcGwuaHBwIiAyCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1l
c3BhY2UgbXBsIHsKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3QgaW5zZXJ0X3Ry
YWl0cwp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAg
LCB0eXBlbmFtZSBQb3MKICAgICAgICAsIHR5cGVuYW1lIFQKICAgICAgICA+CiAgICBzdHJ1Y3Qg
YWxnb3JpdGhtCiAgICB7CiAgICAgICAgdHlwZWRlZiBpdGVyYXRvcl9yYW5nZTwKICAgICAgICAg
ICAgICB0eXBlbmFtZSBiZWdpbjxTZXF1ZW5jZT46OnR5cGUKICAgICAgICAgICAgLCBQb3MKICAg
ICAgICAgICAgPiBmaXJzdF9oYWxmXzsKCiAgICAgICAgdHlwZWRlZiBpdGVyYXRvcl9yYW5nZTwK
ICAgICAgICAgICAgICBQb3MKICAgICAgICAgICAgLCB0eXBlbmFtZSBlbmQ8U2VxdWVuY2U+Ojp0
eXBlCiAgICAgICAgICAgID4gc2Vjb25kX2hhbGZfOwoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1l
IGNvcHlfYmFja3dhcmQ8CiAgICAgICAgICAgICAgc2Vjb25kX2hhbGZfCiAgICAgICAgICAgICwg
dHlwZW5hbWUgY2xlYXI8U2VxdWVuY2U+Ojp0eXBlCiAgICAgICAgICAgICwgcHVzaF9mcm9udDxf
LF8+CiAgICAgICAgICAgID46OnR5cGUgaGFsZl9zZXF1ZW5jZV87CgogICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgY29weV9iYWNrd2FyZDwKICAgICAgICAgICAgICBmaXJzdF9oYWxmXwogICAgICAg
ICAgICAsIHR5cGVuYW1lIHB1c2hfZnJvbnQ8aGFsZl9zZXF1ZW5jZV8sVD46OnR5cGUKICAgICAg
ICAgICAgLCBwdXNoX2Zyb250PF8sXz4KICAgICAgICAgICAgPjo6dHlwZSB0eXBlOwogICAgfTsK
fTsKCgoKfQp9CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pbnNlcnQuaHBw
IiAyCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAg
ICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFBvcyA9IHZvaWRfCiAg
ICAsIHR5cGVuYW1lIFQgPSB2b2lkXwogICAgPgpzdHJ1Y3QgaW5zZXJ0CiAgICA6IGluc2VydF90
cmFpdHM8IHR5cGVuYW1lIHNlcXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgogICAgICAgIDo6
dGVtcGxhdGUgYWxnb3JpdGhtPCBTZXF1ZW5jZSxQb3MsVCA+CnsKICAgCn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBpbnNlcnQ8IHZvaWRfLHZvaWRfLHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUg
VDEsdHlwZW5hbWUgVDIsdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1l
IFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGluc2VydDwgVDEsVDIsVDMgPiB7IH07IH07IHRl
bXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgaW5zZXJ0PCB2b2lkXyx2b2lkXyx2b2lkXyA+ID4geyB0
eXBlZGVmIGluc2VydDwgdm9pZF8sdm9pZF8sdm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMTYgIi4u
Ly4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z1bmN0aW9uLmhwcCIgMgojIDEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2JhY2suaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2JhY2suaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9wdXNoX2JhY2tfZndkLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvcHVzaF9iYWNrX2Z3ZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFj
ZSBtcGwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBwdXNoX2JhY2tfdHJhaXRz
Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UsIHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcHVzaF9i
YWNrOwoKfQp9CiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2JhY2su
aHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHVzaF9iYWNr
X2ltcGwuaHBwIiAxCiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3B1
c2hfYmFja19pbXBsLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7CgoKCgp0
ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4Kc3RydWN0IHB1c2hfYmFja190cmFpdHMKewogICAgdGVt
cGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlLCB0eXBlbmFtZSBUID4gc3RydWN0IGFsZ29yaXRobTsK
fTsKCgoKfQp9CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2JhY2su
aHBwIiAyCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAog
ICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFQgPSB2b2lkXwog
ICAgPgpzdHJ1Y3QgcHVzaF9iYWNrCiAgICA6IHB1c2hfYmFja190cmFpdHM8IHR5cGVuYW1lIHNl
cXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgogICAgICAgIDo6dGVtcGxhdGUgYWxnb3JpdGht
PCBTZXF1ZW5jZSxUID4KewogICAKfTsKCnRlbXBsYXRlPD4gc3RydWN0IHB1c2hfYmFjazwgdm9p
ZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1l
IFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1
Y3QgYXBwbHkgOiBwdXNoX2JhY2s8IFQxLFQyID4geyB9OyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBs
YW1iZGE8IHB1c2hfYmFjazwgdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRlZiBwdXNoX2JhY2s8IHZv
aWRfLHZvaWRfID4gdHlwZTsgfTsKCn0KfQojIDE3ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2Fu
eS9mdW5jdGlvbi5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY29u
dGFpbnMuaHBwIiAxCiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9jb250YWlu
cy5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2ZpbmQuaHBwIiAxCiMg
MjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9maW5kLmhwcCIKIyAxICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvc2FtZV9hcy5ocHAiIDEKIyAyNCAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvbXBsL3NhbWVfYXMuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3Bh
Y2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUMSA+CnN0cnVjdCBzYW1lX2FzCnsKICAgIHRl
bXBsYXRlPCB0eXBlbmFtZSBUMiA+IHN0cnVjdCBhcHBseQoKICAgICAgICA6IGlzX3NhbWU8VDEs
VDI+CiAgICB7CgoKCgogICAgfTsKfTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUMSA+CnN0cnVjdCBu
b3Rfc2FtZV9hcwp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDIgPiBzdHJ1Y3QgYXBwbHkKCiAg
ICAgICAgOiBub3RfPCBpc19zYW1lPFQxLFQyPiA+CiAgICB7CgoKCgogICAgfTsKfTsKCnRlbXBs
YXRlPCB0eXBlbmFtZSBUMSA+IHN0cnVjdCBsYW1iZGE8IHNhbWVfYXM8IFQxID4gPiB7IHR5cGVk
ZWYgc2FtZV9hczwgVDEgPiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgPiBzdHJ1Y3Qg
bGFtYmRhPCBub3Rfc2FtZV9hczwgVDEgPiA+IHsgdHlwZWRlZiBub3Rfc2FtZV9hczwgVDEgPiB0
eXBlOyB9OwoKfQp9CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9maW5kLmhw
cCIgMgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgoKdGVtcGxhdGU8CiAg
ICAgIHR5cGVuYW1lIFNlcXVlbmNlID0gdm9pZF8KICAgICwgdHlwZW5hbWUgVCA9IHZvaWRfCiAg
ICA+CnN0cnVjdCBmaW5kCiAgICA6IGZpbmRfaWY8IFNlcXVlbmNlLHNhbWVfYXM8VD4gPgp7CiAg
IAp9OwoKCgogdGVtcGxhdGU8PiBzdHJ1Y3QgZmluZDwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRl
PCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUg
VDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBmaW5kPCBUMSxU
MiA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBmaW5kPCB2b2lkXyx2b2lkXyA+
ID4geyB0eXBlZGVmIGZpbmQ8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsKCn0KfQojIDIyICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY29udGFpbnMuaHBwIiAyCgoKCgoKbmFtZXNwYWNl
IGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgU2VxdWVu
Y2UgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUID0gdm9pZF8KICAgID4Kc3RydWN0IGNvbnRhaW5z
CiAgICA6IG5vdF88IGlzX3NhbWU8CiAgICAgICAgICB0eXBlbmFtZSBmaW5kPFNlcXVlbmNlLFQ+
Ojp0eXBlCiAgICAgICAgLCB0eXBlbmFtZSBlbmQ8U2VxdWVuY2U+Ojp0eXBlCiAgICAgICAgPiA+
CnsKICAgCn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBjb250YWluczwgdm9pZF8sdm9pZF8gPiB7IHRl
bXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlw
ZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBjb250
YWluczwgVDEsVDIgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgY29udGFpbnM8
IHZvaWRfLHZvaWRfID4gPiB7IHR5cGVkZWYgY29udGFpbnM8IHZvaWRfLHZvaWRfID4gdHlwZTsg
fTsKCn0KfQojIDE4ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5ocHAiIDIK
CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3RyYW5zZm9ybS5ocHAiIDEKIyAy
NCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3RyYW5zZm9ybS5ocHAiCiMgMSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FwcGx5LmhwcCIgMQojIDI1ICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvdHJhbnNmb3JtLmhwcCIgMgoKCgpuYW1lc3BhY2UgYm9vc3Qg
ewpuYW1lc3BhY2UgbXBsIHsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8IHR5cGVuYW1lIE9w
ID4Kc3RydWN0IHRyYW5zZm9ybV9vcAp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2Us
IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYXBwbHkKICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1l
IHB1c2hfZnJvbnQ8CiAgICAgICAgICAgICAgU2VxdWVuY2UKICAgICAgICAgICAgLCB0eXBlbmFt
ZSBhcHBseTE8T3AsVD46OnR5cGUKICAgICAgICAgICAgPjo6dHlwZSB0eXBlOwogICAgfTsKfTsK
Cn0KCgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFNlcXVlbmNlID0gdm9pZF8KICAgICwgdHlw
ZW5hbWUgT3BlcmF0aW9uID0gdm9pZF8KICAgID4Kc3RydWN0IHRyYW5zZm9ybQp7CiBwcml2YXRl
OgogICAgdHlwZWRlZiB0eXBlbmFtZSBsYW1iZGE8T3BlcmF0aW9uPjo6dHlwZSBvcF87CiAgICB0
eXBlZGVmIHR5cGVuYW1lIGNsZWFyPFNlcXVlbmNlPjo6dHlwZSByZXN1bHRfOwoKIHB1YmxpYzoK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgZm9sZF9iYWNrd2FyZDwKICAgICAgICAgIFNlcXVlbmNlCiAg
ICAgICAgLCByZXN1bHRfCiAgICAgICAgLCBwcm90ZWN0PCBhdXg6OnRyYW5zZm9ybV9vcDxvcF8+
ID4KICAgICAgICA+Ojp0eXBlIHR5cGU7Cn07CgoKCiB0ZW1wbGF0ZTw+IHN0cnVjdCB0cmFuc2Zv
cm08IHZvaWRfLHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIgLCB0
eXBlbmFtZSBUMyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRf
ID4gc3RydWN0IGFwcGx5IDogdHJhbnNmb3JtPCBUMSxUMiA+IHsgfTsgfTsgdGVtcGxhdGU8PiBz
dHJ1Y3QgbGFtYmRhPCB0cmFuc2Zvcm08IHZvaWRfLHZvaWRfID4gPiB7IHR5cGVkZWYgdHJhbnNm
b3JtPCB2b2lkXyx2b2lkXyA+IHR5cGU7IH07Cgp9Cn0KIyAyMCAiLi4vLi4vLi4vYm9vc3QvZHlu
YW1pY19hbnkvZnVuY3Rpb24uaHBwIiAyCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L21wbC9lcmFzZS5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Vy
YXNlLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZXJhc2VfZndkLmhw
cCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZXJhc2VfZndkLmhwcCIK
bmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVGFn
ID4gc3RydWN0IGVyYXNlX3RyYWl0czsKdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlLCB0eXBl
bmFtZSBGaXJzdCwgdHlwZW5hbWUgTGFzdCA+IHN0cnVjdCBlcmFzZTsKCn0KfQojIDIxICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZXJhc2UuaHBwIiAyCgojIDEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2VyYXNlX2ltcGwuaHBwIiAxCiMgMjYgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2VyYXNlX2ltcGwuaHBwIgpuYW1lc3BhY2UgYm9v
c3QgewpuYW1lc3BhY2UgbXBsIHsKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3Qg
ZXJhc2VfdHJhaXRzCnsKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UK
ICAgICAgICAsIHR5cGVuYW1lIEZpcnN0CiAgICAgICAgLCB0eXBlbmFtZSBMYXN0CiAgICAgICAg
PgogICAgc3RydWN0IGFsZ29yaXRobQogICAgewogICAgIHByaXZhdGU6CgogICAgICAgIHR5cGVk
ZWYgaXRlcmF0b3JfcmFuZ2U8CiAgICAgICAgICAgICAgdHlwZW5hbWUgYmVnaW48U2VxdWVuY2U+
Ojp0eXBlCiAgICAgICAgICAgICwgRmlyc3QKICAgICAgICAgICAgPiBmaXJzdF9oYWxmXzsKCgog
ICAgICAgIHR5cGVkZWYgaXRlcmF0b3JfcmFuZ2U8CiAgICAgICAgICAgICAgTGFzdAogICAgICAg
ICAgICAsIHR5cGVuYW1lIGVuZDxTZXF1ZW5jZT46OnR5cGUKICAgICAgICAgICAgPiBzZWNvbmRf
aGFsZl87CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY29weV9iYWNrd2FyZDwKICAgICAgICAg
ICAgICBzZWNvbmRfaGFsZl8KICAgICAgICAgICAgLCB0eXBlbmFtZSBjbGVhcjxTZXF1ZW5jZT46
OnR5cGUKICAgICAgICAgICAgLCBwdXNoX2Zyb250PF8sXz4KICAgICAgICAgICAgPjo6dHlwZSBo
YWxmX3NlcXVlbmNlXzsKCiAgICAgcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY29w
eV9iYWNrd2FyZDwKICAgICAgICAgICAgICBmaXJzdF9oYWxmXwogICAgICAgICAgICAsIGhhbGZf
c2VxdWVuY2VfCiAgICAgICAgICAgICwgcHVzaF9mcm9udDxfLF8+CiAgICAgICAgICAgID46OnR5
cGUgdHlwZTsKICAgIH07Cgp9OwoKfQp9CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L21wbC9lcmFzZS5ocHAiIDIKCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsK
Cm5hbWVzcGFjZSBhdXggewp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBlcmFzZV9wYXJh
bQp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6Om5leHQgdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IGVyYXNlX3BhcmFtPHZvaWRfPgp7CiAgICB0eXBlZGVmIHZvaWRfIHR5cGU7Cn07Cn0KCnRl
bXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIEZp
cnN0ID0gdm9pZF8KICAgICwgdHlwZW5hbWUgTGFzdCA9IHR5cGVuYW1lIGF1eDo6ZXJhc2VfcGFy
YW08Rmlyc3Q+Ojp0eXBlCiAgICA+CnN0cnVjdCBlcmFzZQogICAgOiBlcmFzZV90cmFpdHM8IHR5
cGVuYW1lIHNlcXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgogICAgICAgIDo6dGVtcGxhdGUg
YWxnb3JpdGhtPCBTZXF1ZW5jZSxGaXJzdCxMYXN0ID4KewogICAKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IGVyYXNlPCB2b2lkXyx2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxLHR5cGVuYW1l
IFQyICwgdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1
ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGVyYXNlPCBUMSxUMiA+IHsgfTsgfTsgdGVtcGxhdGU8
PiBzdHJ1Y3QgbGFtYmRhPCBlcmFzZTwgdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRlZiBlcmFzZTwg
dm9pZF8sdm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMjIgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNf
YW55L2Z1bmN0aW9uLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv
cGx1cy5ocHAiIDEKIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3BsdXMuaHBw
IgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBl
bmFtZSBULCBUIE4xLCBUIE4yLCBUIE4zID0gMCwgVCBONCA9IDAsIFQgTjUgPSAwCiAgICA+CnN0
cnVjdCBwbHVzX2MKewogICAgc3RhdGljIGNvbnN0IFQgdmFsdWUgPSAoTjEgKyBOMiArIE4zICsg
TjQgKyBONSk7CgogICAgdHlwZWRlZiBpbnRlZ3JhbF9jPFQsdmFsdWU+IHR5cGU7CgoKCn07Cgp0
ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDEgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUMiA9IHZv
aWRfCiAgICAsIHR5cGVuYW1lIFQzID0gaW50ZWdyYWxfYzxpbnQsMD4KICAgICwgdHlwZW5hbWUg
VDQgPSBpbnRlZ3JhbF9jPGludCwwPgogICAgLCB0eXBlbmFtZSBUNSA9IGludGVncmFsX2M8aW50
LDA+CiAgICA+CnN0cnVjdCBwbHVzCiAgICA6IHBsdXNfYzwKICAgICAgICAgIHR5cGVuYW1lIGJv
b3N0OjptcGw6OmF1eDo6dHlwZW9mX2M8IHNpemVvZig6OmJvb3N0OjptcGw6OmF1eDo6dHlwZV9p
bmRleChUMTo6dmFsdWUgKyBUMjo6dmFsdWUgKyBUMzo6dmFsdWUgKyBUNDo6dmFsdWUgKyBUNTo6
dmFsdWUpKSA+Ojp0eXBlCgoKICAgICAgICAsIFQxOjp2YWx1ZQogICAgICAgICwgVDI6OnZhbHVl
CiAgICAgICAgLCBUMzo6dmFsdWUKICAgICAgICAsIFQ0Ojp2YWx1ZQogICAgICAgICwgVDU6OnZh
bHVlCiAgICAgICAgPgp7CiAgIAp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgcGx1czwgdm9pZF8sdm9p
ZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12
b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBw
bHkgOiBwbHVzPCBUMSxUMiA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBwbHVz
PCB2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVmIHBsdXM8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsK
Cn0KfQojIDI0ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5ocHAiIDIKIyAx
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbWludXMuaHBwIiAxCiMgMjggIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9taW51cy5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5h
bWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQsIFQgTjEsIFQgTjIsIFQg
TjMgPSAwLCBUIE40ID0gMCwgVCBONSA9IDAKICAgID4Kc3RydWN0IG1pbnVzX2MKewogICAgc3Rh
dGljIGNvbnN0IFQgdmFsdWUgPSAoTjEgLSBOMiAtIE4zIC0gTjQgLSBONSk7CgogICAgdHlwZWRl
ZiBpbnRlZ3JhbF9jPFQsdmFsdWU+IHR5cGU7CgoKCn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5h
bWUgVDEgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUMiA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFQz
ID0gaW50ZWdyYWxfYzxpbnQsMD4KICAgICwgdHlwZW5hbWUgVDQgPSBpbnRlZ3JhbF9jPGludCww
PgogICAgLCB0eXBlbmFtZSBUNSA9IGludGVncmFsX2M8aW50LDA+CiAgICA+CnN0cnVjdCBtaW51
cwogICAgOiBtaW51c19jPAogICAgICAgICAgdHlwZW5hbWUgYm9vc3Q6Om1wbDo6YXV4Ojp0eXBl
b2ZfYzwgc2l6ZW9mKDo6Ym9vc3Q6Om1wbDo6YXV4Ojp0eXBlX2luZGV4KFQxOjp2YWx1ZSAtIFQy
Ojp2YWx1ZSAtIFQzOjp2YWx1ZSAtIFQ0Ojp2YWx1ZSAtIFQ1Ojp2YWx1ZSkpID46OnR5cGUKCgog
ICAgICAgICwgVDE6OnZhbHVlCiAgICAgICAgLCBUMjo6dmFsdWUKICAgICAgICAsIFQzOjp2YWx1
ZQogICAgICAgICwgVDQ6OnZhbHVlCiAgICAgICAgLCBUNTo6dmFsdWUKICAgICAgICA+CnsKICAg
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBtaW51czwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0
eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQg
PXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBtaW51czwgVDEsVDIg
PiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgbWludXM8IHZvaWRfLHZvaWRfID4g
PiB7IHR5cGVkZWYgbWludXM8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsKCn0KfQojIDI1ICIuLi8u
Li8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvY2FsbF90cmFpdHMuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L2NhbGxfdHJhaXRzLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9kZXRhaWwvY2FsbF90cmFpdHMuaHBwIiAxCiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L2RldGFpbC9jYWxsX3RyYWl0cy5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHlwZV90cmFpdHMvYXJpdGhtZXRpY190cmFpdHMuaHBwIiAxCiMgMTUgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FyaXRobWV0aWNfdHJhaXRzLmhwcCIKIyAxICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1ldGljLmhwcCIg
MQojIDEzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1l
dGljLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19p
bnRlZ3JhbC5ocHAiIDEKIyAxNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp
dHMvaXNfaW50ZWdyYWwuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf
dHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIKIyAxICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJp
dHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDE3ICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7
CgoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19pbnRlZ3JhbCA6IG1wbDo6Ym9v
bF88IGZhbHNlID4geyB9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVk
IGNoYXIgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2lu
dGVncmFsPCB1bnNpZ25lZCBjaGFyIGNvbnN0ID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0
ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgdW5zaWduZWQgY2hhciB2b2xhdGlsZSA+IDog
bXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVu
c2lnbmVkIGNoYXIgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CnRl
bXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCB1bnNpZ25lZCBzaG9ydCA+IDogbXBsOjpib29s
XzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIHNo
b3J0IGNvbnN0ID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBp
c19pbnRlZ3JhbDwgdW5zaWduZWQgc2hvcnQgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUg
PiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCB1bnNpZ25lZCBzaG9ydCBjb25z
dCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3Qg
aXNfaW50ZWdyYWw8IHVuc2lnbmVkIGludCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVt
cGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGludCBjb25zdCA+IDogbXBsOjpi
b29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVk
IGludCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGludCBjb25zdCB2b2xhdGlsZSA+IDogbXBsOjpib29s
XzwgdHJ1ZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGxv
bmcgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVn
cmFsPCB1bnNpZ25lZCBsb25nIGNvbnN0ID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1w
bGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgdW5zaWduZWQgbG9uZyB2b2xhdGlsZSA+IDogbXBs
Ojpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2ln
bmVkIGxvbmcgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgc2lnbmVkIGNoYXIgPiA6IG1wbDo6Ym9vbF88IHRy
dWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBzaWduZWQgY2hhciBjb25z
dCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdy
YWw8IHNpZ25lZCBjaGFyIHZvbGF0aWxlID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1w
bGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgc2lnbmVkIGNoYXIgY29uc3Qgdm9sYXRpbGUgPiA6
IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBz
aWduZWQgc2hvcnQgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0
IGlzX2ludGVncmFsPCBzaWduZWQgc2hvcnQgY29uc3QgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7
IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBzaWduZWQgc2hvcnQgdm9sYXRpbGUg
PiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFs
PCBzaWduZWQgc2hvcnQgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07
CnRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBzaWduZWQgaW50ID4gOiBtcGw6OmJvb2xf
PCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgc2lnbmVkIGludCBj
b25zdCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50
ZWdyYWw8IHNpZ25lZCBpbnQgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRl
bXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBzaWduZWQgaW50IGNvbnN0IHZvbGF0aWxlID4g
OiBtcGw6OmJvb2xfPCB0cnVlID4geyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwg
c2lnbmVkIGxvbmcgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0
IGlzX2ludGVncmFsPCBzaWduZWQgbG9uZyBjb25zdCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsg
fTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHNpZ25lZCBsb25nIHZvbGF0aWxlID4g
OiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwg
c2lnbmVkIGxvbmcgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgYm9vbCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+
IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IGJvb2wgY29uc3QgPiA6IG1wbDo6
Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBib29sIHZv
bGF0aWxlID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19p
bnRlZ3JhbDwgYm9vbCBjb25zdCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsK
dGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IGNoYXIgPiA6IG1wbDo6Ym9vbF88IHRydWUg
PiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBjaGFyIGNvbnN0ID4gOiBtcGw6
OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgY2hhciB2
b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf
aW50ZWdyYWw8IGNoYXIgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07
CgoKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHdjaGFyX3QgPiA6IG1wbDo6Ym9vbF88
IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCB3Y2hhcl90IGNvbnN0
ID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3Jh
bDwgd2NoYXJfdCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8
PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHdjaGFyX3QgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9v
bF88IHRydWUgPiB7IH07CiMgNTIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh
aXRzL2lzX2ludGVncmFsLmhwcCIKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2ln
bmVkIGxvbmcgbG9uZyA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdCA+IDogbXBsOjpib29sXzwg
dHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGxvbmcg
bG9uZyB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdCB2b2xhdGlsZSA+IDogbXBs
Ojpib29sXzwgdHJ1ZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IGxvbmcg
bG9uZyA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50
ZWdyYWw8IGxvbmcgbG9uZyBjb25zdCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxh
dGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IGxvbmcgbG9uZyB2b2xhdGlsZSA+IDogbXBsOjpib29s
XzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IGxvbmcgbG9uZyBj
b25zdCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsKCgoKCgp9CgojIDEgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3Vu
ZGVmLmhwcCIgMQojIDYyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9p
c19pbnRlZ3JhbC5ocHAiIDIKIyAxNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90
cmFpdHMvaXNfYXJpdGhtZXRpYy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAiIDEKIyAxNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvdHlwZV90cmFpdHMvaXNfZmxvYXQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm
LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
dGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDE1ICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAiIDIKCm5hbWVzcGFj
ZSBib29zdCB7CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfZmxvYXQgOiBtcGw6
OmJvb2xfPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZmxvYXQ8IGZsb2F0ID4g
OiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDwgZmxv
YXQgY29uc3QgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlz
X2Zsb2F0PCBmbG9hdCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxh
dGU8PiBzdHJ1Y3QgaXNfZmxvYXQ8IGZsb2F0IGNvbnN0IHZvbGF0aWxlID4gOiBtcGw6OmJvb2xf
PCB0cnVlID4geyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDwgZG91YmxlID4gOiBtcGw6
OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDwgZG91YmxlIGNv
bnN0ID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9h
dDwgZG91YmxlIHZvbGF0aWxlID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+
IHN0cnVjdCBpc19mbG9hdDwgZG91YmxlIGNvbnN0IHZvbGF0aWxlID4gOiBtcGw6OmJvb2xfPCB0
cnVlID4geyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDwgbG9uZyBkb3VibGUgPiA6IG1w
bDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Zsb2F0PCBsb25nIGRv
dWJsZSBjb25zdCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3Qg
aXNfZmxvYXQ8IGxvbmcgZG91YmxlIHZvbGF0aWxlID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9
OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDwgbG9uZyBkb3VibGUgY29uc3Qgdm9sYXRpbGUg
PiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07Cgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDI3ICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAiIDIKIyAx
NSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfYXJpdGhtZXRpYy5o
cHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
aWNlX29yLmhwcCIgMQojIDE1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0
cy9kZXRhaWwvaWNlX29yLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIHR5cGVfdHJh
aXRzIHsKCnRlbXBsYXRlIDxib29sIGIxLCBib29sIGIyLCBib29sIGIzID0gZmFsc2UsIGJvb2wg
YjQgPSBmYWxzZSwgYm9vbCBiNSA9IGZhbHNlLCBib29sIGI2ID0gZmFsc2UsIGJvb2wgYjcgPSBm
YWxzZT4Kc3RydWN0IGljZV9vcjsKCnRlbXBsYXRlIDxib29sIGIxLCBib29sIGIyLCBib29sIGIz
LCBib29sIGI0LCBib29sIGI1LCBib29sIGI2LCBib29sIGI3PgpzdHJ1Y3QgaWNlX29yCnsKICAg
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBp
Y2Vfb3I8ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2U+CnsK
ICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7Cn07Cgp9Cn0KIyAxNiAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfYXJpdGhtZXRpYy5ocHAiIDIKCgoK
IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90
cmFpdF9kZWYuaHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0
X2RlZi5ocHAiIDIKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMv
aXNfYXJpdGhtZXRpYy5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgpuYW1lc3BhY2UgZGV0YWls
IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4Kc3RydWN0IGlzX2FyaXRobWV0aWNfaW1wbAp7CiAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX29y
PCA6OmJvb3N0Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX2Zsb2F0PFQ+Ojp2
YWx1ZSA+Ojp2YWx1ZSk7CgoKCgp9OwoKfQoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0
IGlzX2FyaXRobWV0aWMgOiBtcGw6OmJvb2xfPCA6OmJvb3N0OjpkZXRhaWw6OmlzX2FyaXRobWV0
aWNfaW1wbDxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDQzICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1ldGljLmhwcCIgMgoj
IDE2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9hcml0aG1ldGljX3Ry
YWl0cy5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMv
aXNfZnVuZGFtZW50YWwuaHBwIiAxCiMgMTQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5
cGVfdHJhaXRzL2lzX2Z1bmRhbWVudGFsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC90eXBlX3RyYWl0cy9pc192b2lkLmhwcCIgMQojIDE2ICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC90eXBlX3RyYWl0cy9pc192b2lkLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxCiMgMTkgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2Rl
Zi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls
L3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIKIyAxNyAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfdm9pZC5ocHAiIDIKCm5hbWVzcGFj
ZSBib29zdCB7CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfdm9pZCA6IG1wbDo6
Ym9vbF88IGZhbHNlID4geyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc192b2lkPCB2b2lkID4gOiBt
cGw6OmJvb2xfPCB0cnVlID4geyB9OwoKCnRlbXBsYXRlPD4gc3RydWN0IGlzX3ZvaWQ8IHZvaWQg
Y29uc3QgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX3Zv
aWQ8IHZvaWQgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CnRlbXBsYXRlPD4g
c3RydWN0IGlzX3ZvaWQ8IHZvaWQgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUg
PiB7IH07CgoKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9k
ZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyAzMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvdHlwZV90cmFpdHMvaXNfdm9pZC5ocHAiIDIKIyAxNSAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfZnVuZGFtZW50YWwuaHBwIiAyCgoKCiMgMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhw
cCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
Ym9vbF90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf
dHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIwICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAy
CiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmRhbWVu
dGFsLmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19mdW5kYW1lbnRhbF9pbXBsCiAgICA6IDo6Ym9vc3Q6
OnR5cGVfdHJhaXRzOjppY2Vfb3I8CiAgICAgICAgICA6OmJvb3N0Ojppc19hcml0aG1ldGljPFQ+
Ojp2YWx1ZQogICAgICAgICwgOjpib29zdDo6aXNfdm9pZDxUPjo6dmFsdWUKICAgICAgICA+CnsK
fTsKCn0KCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19mdW5kYW1lbnRhbCA6IG1w
bDo6Ym9vbF88IDo6Ym9vc3Q6OmRldGFpbDo6aXNfZnVuZGFtZW50YWxfaW1wbDxUPjo6dmFsdWUg
PiB7IH07Cgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Rl
dGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDQxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC90eXBlX3RyYWl0cy9pc19mdW5kYW1lbnRhbC5ocHAiIDIKIyAxOCAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYXJpdGhtZXRpY190cmFpdHMuaHBwIiAyCiMgMjgg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2RldGFpbC9jYWxsX3RyYWl0cy5ocHAiIDIKCgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2NvbXBvc2l0ZV90cmFp
dHMuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Nv
bXBvc2l0ZV90cmFpdHMuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf
dHJhaXRzL2lzX2FycmF5LmhwcCIgMQojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90
eXBlX3RyYWl0cy9pc19hcnJheS5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMQojIDE5ICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0
ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBl
X3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyCiMgMjUgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0
IHsKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfYXJyYXkgOiBtcGw6OmJvb2xf
PCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1
Y3QgaXNfYXJyYXk8IFRbTl0gPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CnRlbXBsYXRlPCB0
eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IGlzX2FycmF5PCBUIGNvbnN0W05dID4g
OiBtcGw6OmJvb2xfPCB0cnVlID4geyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXpl
X3QgTiA+IHN0cnVjdCBpc19hcnJheTwgVCB2b2xhdGlsZVtOXSA+IDogbXBsOjpib29sXzwgdHJ1
ZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgaXNf
YXJyYXk8IFQgY29uc3Qgdm9sYXRpbGVbTl0gPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CiMg
NzUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcCIK
fQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9v
bF90cmFpdF91bmRlZi5ocHAiIDEKIyA3OCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw
ZV90cmFpdHMvaXNfYXJyYXkuaHBwIiAyCiMgMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L3R5cGVfdHJhaXRzL2NvbXBvc2l0ZV90cmFpdHMuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHAiIDEKIyAxNCAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHAiCiMgMSAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3JlZmVyZW5jZS5ocHAiIDEKIyAxOCAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3JlZmVyZW5jZS5ocHAiCiMg
MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJh
aXRfZGVmLmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0
cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIwICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9k
ZWYuaHBwIiAyCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Fk
ZF9yZWZlcmVuY2UuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFpbCB7
CiMgNTYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZlcmVu
Y2UuaHBwIgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGFkZF9yZWZlcmVuY2VfaW1wbAp7
CiAgICB0eXBlZGVmIFQmIHR5cGU7Cn07CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3Qg
YWRkX3JlZmVyZW5jZV9pbXBsPFQmPiB7IHR5cGVkZWYgVCYgdHlwZTsgfTsKCgoKCgp0ZW1wbGF0
ZTw+IHN0cnVjdCBhZGRfcmVmZXJlbmNlX2ltcGw8dm9pZD4geyB0eXBlZGVmIHZvaWQgdHlwZTsg
fTsKCnRlbXBsYXRlPD4gc3RydWN0IGFkZF9yZWZlcmVuY2VfaW1wbDx2b2lkIGNvbnN0PiB7IHR5
cGVkZWYgdm9pZCBjb25zdCB0eXBlOyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBhZGRfcmVmZXJlbmNl
X2ltcGw8dm9pZCB2b2xhdGlsZT4geyB0eXBlZGVmIHZvaWQgdm9sYXRpbGUgdHlwZTsgfTsKdGVt
cGxhdGU8PiBzdHJ1Y3QgYWRkX3JlZmVyZW5jZV9pbXBsPHZvaWQgY29uc3Qgdm9sYXRpbGU+IHsg
dHlwZWRlZiB2b2lkIGNvbnN0IHZvbGF0aWxlIHR5cGU7IH07CgoKfQoKdGVtcGxhdGU8IHR5cGVu
YW1lIFQgPiBzdHJ1Y3QgYWRkX3JlZmVyZW5jZSB7IHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjph
ZGRfcmVmZXJlbmNlX2ltcGw8VD46OnR5cGUgdHlwZTsgfTsKCgoKCgoKCn0KCiMgMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfdW5kZWYu
aHBwIiAxCiMgODkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9y
ZWZlcmVuY2UuaHBwIiAyCiMgMTUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh
aXRzL2lzX2VudW0uaHBwIiAyCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBl
X3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC95ZXNfbm9fdHlwZS5ocHAiIDEKIyAxNSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBl
LmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIHR5cGVfdHJhaXRzIHsKCnR5cGVkZWYg
Y2hhciB5ZXNfdHlwZTsKc3RydWN0IG5vX3R5cGUKewogICBjaGFyIHBhZGRpbmdbOF07Cn07Cgp9
Cn0KIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVy
dGlibGUuaHBwIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp
dHMvaWNlLmhwcCIgMQojIDE3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0
cy9pY2UuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Rl
dGFpbC9pY2VfYW5kLmhwcCIgMQojIDE1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBl
X3RyYWl0cy9kZXRhaWwvaWNlX2FuZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSB0
eXBlX3RyYWl0cyB7Cgp0ZW1wbGF0ZSA8Ym9vbCBiMSwgYm9vbCBiMiwgYm9vbCBiMyA9IHRydWUs
IGJvb2wgYjQgPSB0cnVlLCBib29sIGI1ID0gdHJ1ZSwgYm9vbCBiNiA9IHRydWUsIGJvb2wgYjcg
PSB0cnVlPgpzdHJ1Y3QgaWNlX2FuZDsKCnRlbXBsYXRlIDxib29sIGIxLCBib29sIGIyLCBib29s
IGIzLCBib29sIGI0LCBib29sIGI1LCBib29sIGI2LCBib29sIGI3PgpzdHJ1Y3QgaWNlX2FuZAp7
CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwp9OwoKdGVtcGxhdGUgPD4Kc3Ry
dWN0IGljZV9hbmQ8dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZT4Kewog
ICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOwp9OwoKfQp9CiMgMTggIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2ljZS5ocHAiIDIKIyAxICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaWNlX25vdC5ocHAiIDEKIyAxNSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2ljZV9ub3QuaHBw
IgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgdHlwZV90cmFpdHMgewoKdGVtcGxhdGUgPGJv
b2wgYj4Kc3RydWN0IGljZV9ub3QKewogICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl
Owp9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IGljZV9ub3Q8dHJ1ZT4KewogICAgc3RhdGljIGNvbnN0
IGJvb2wgdmFsdWUgPSBmYWxzZTsKfTsKCn0KfQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC90eXBlX3RyYWl0cy9pY2UuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHlwZV90cmFpdHMvZGV0YWlsL2ljZV9lcS5ocHAiIDEKIyAxNSAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2ljZV9lcS5ocHAiCm5hbWVzcGFjZSBib29z
dCB7Cm5hbWVzcGFjZSB0eXBlX3RyYWl0cyB7Cgp0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjI+CnN0
cnVjdCBpY2VfZXEKewogICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoYjEgPT0gYjIpOwp9
OwoKdGVtcGxhdGUgPGludCBiMSwgaW50IGIyPgpzdHJ1Y3QgaWNlX25lCnsKICAgIHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gKGIxICE9IGIyKTsKfTsKCgp0ZW1wbGF0ZSA8aW50IGIxLCBpbnQg
YjI+IGJvb2wgY29uc3QgaWNlX2VxPGIxLGIyPjo6dmFsdWU7CnRlbXBsYXRlIDxpbnQgYjEsIGlu
dCBiMj4gYm9vbCBjb25zdCBpY2VfbmU8YjEsYjI+Ojp2YWx1ZTsKCgp9Cn0KIyAyMCAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaWNlLmhwcCIgMgojIDI0ICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiIDIKCgoK
CgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9v
bF90cmFpdF9kZWYuaHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf
dHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMg
MjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3Ry
YWl0X2RlZi5ocHAiIDIKIyAzMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp
dHMvaXNfY29udmVydGlibGUuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewojIDQ0ICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiCm5hbWVz
cGFjZSBkZXRhaWwgewojIDE2NSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp
dHMvaXNfY29udmVydGlibGUuaHBwIgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUg
VG8+CnN0cnVjdCBpc19jb252ZXJ0aWJsZV9iYXNpY19pbXBsCnsKICAgIHN0YXRpYyA6OmJvb3N0
Ojp0eXBlX3RyYWl0czo6bm9fdHlwZSBfbV9jaGVjayguLi4pOwogICAgc3RhdGljIDo6Ym9vc3Q6
OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSBfbV9jaGVjayhUbyk7CiAgICBzdGF0aWMgRnJvbSBfbV9m
cm9tOwoKICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKCBfbV9jaGVjayhfbV9m
cm9tKSApID09IHNpemVvZig6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUpOwoKCn07CgoK
Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUgVG8+CnN0cnVjdCBpc19jb252ZXJ0
aWJsZV9pbXBsCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYWRkX3JlZmVyZW5jZTxGcm9tPjo6dHlw
ZSByZWZfdHlwZTsKICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gKDo6Ym9vc3Q6OnR5cGVf
dHJhaXRzOjppY2VfYW5kPCA6OmJvb3N0OjpkZXRhaWw6OmlzX2NvbnZlcnRpYmxlX2Jhc2ljX2lt
cGw8cmVmX3R5cGUsVG8+Ojp2YWx1ZSwgOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9ub3Q8IDo6
Ym9vc3Q6OmlzX2FycmF5PFRvPjo6dmFsdWUgPjo6dmFsdWUgPjo6dmFsdWUpOwoKCgoKCgoKfTsK
IyAyMTUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRp
YmxlLmhwcCIKICAgIHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQs
dm9pZCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4g
c3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQsdm9pZCBjb25zdCA+IHsgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRp
YmxlX2ltcGw8IHZvaWQsdm9pZCB2b2xhdGlsZSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg
PSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQs
dm9pZCBjb25zdCB2b2xhdGlsZSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7
IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qsdm9p
ZCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3Ry
dWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qsdm9pZCBjb25zdCA+IHsgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZl
cnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qsdm9pZCB2b2xhdGlsZSA+IHsgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2lt
cGw8IHZvaWQgY29uc3Qsdm9pZCBjb25zdCB2b2xhdGlsZSA+IHsgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8
IHZvaWQgdm9sYXRpbGUsdm9pZCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7
IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgdm9sYXRpbGUs
dm9pZCBjb25zdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBs
YXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgdm9sYXRpbGUsdm9pZCB2b2xh
dGlsZSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4g
c3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgdm9sYXRpbGUsdm9pZCBjb25zdCB2b2xh
dGlsZSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4g
c3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qgdm9sYXRpbGUsdm9pZCA+IHsg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlz
X2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qgdm9sYXRpbGUsdm9pZCBjb25zdCA+IHsgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv
bnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qgdm9sYXRpbGUsdm9pZCB2b2xhdGlsZSA+IHsgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv
bnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qgdm9sYXRpbGUsdm9pZCBjb25zdCB2b2xhdGlsZSA+
IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07CiMgMjI1ICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiCnRlbXBsYXRl
PCB0eXBlbmFtZSBUbyA+IHN0cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsPCB2b2lkLFRvID4geyBz
dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IChmYWxzZSk7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBG
cm9tID4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IEZyb20sdm9pZCA+IHsgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSAoZmFsc2UpOyB9OwoKdGVtcGxhdGU8IHR5cGVuYW1lIFRvID4gc3Ry
dWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3QsVG8gPiB7IHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gKGZhbHNlKTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFRvID4gc3RydWN0IGlz
X2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgdm9sYXRpbGUsVG8gPiB7IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gKGZhbHNlKTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFRvID4gc3RydWN0IGlzX2Nv
bnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qgdm9sYXRpbGUsVG8gPiB7IHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gKGZhbHNlKTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIEZyb20gPiBzdHJ1Y3Qg
aXNfY29udmVydGlibGVfaW1wbDwgRnJvbSx2b2lkIGNvbnN0ID4geyBzdGF0aWMgY29uc3QgYm9v
bCB2YWx1ZSA9IChmYWxzZSk7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBGcm9tID4gc3RydWN0IGlz
X2NvbnZlcnRpYmxlX2ltcGw8IEZyb20sdm9pZCB2b2xhdGlsZSA+IHsgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSAoZmFsc2UpOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgRnJvbSA+IHN0cnVjdCBp
c19jb252ZXJ0aWJsZV9pbXBsPCBGcm9tLHZvaWQgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gKGZhbHNlKTsgfTsKCgoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIEZy
b20sIHR5cGVuYW1lIFRvID4gc3RydWN0IGlzX2NvbnZlcnRpYmxlIDogbXBsOjpib29sXzwgKDo6
Ym9vc3Q6OmRldGFpbDo6aXNfY29udmVydGlibGVfaW1wbDxGcm9tLFRvPjo6dmFsdWUpID4geyB9
OwojIDI4MyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVy
dGlibGUuaHBwIgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRz
L2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDI4NiAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwIiAyCiMgMTggIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VudW0uaHBwIiAyCgoKCgoKCgojIDEg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0
X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMv
ZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm
LmhwcCIgMgojIDI2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19l
bnVtLmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsKCgoKbmFtZXNwYWNlIGRldGFpbCB7CgpzdHJ1
Y3QgaW50X2NvbnZlcnRpYmxlCnsKICAgIGludF9jb252ZXJ0aWJsZShpbnQpOwp9OwoKCgp0ZW1w
bGF0ZSA8Ym9vbCBpc190eXBlbmFtZV9hcml0aG1ldGljX29yX3JlZmVyZW5jZSA9IHRydWU+CnN0
cnVjdCBpc19lbnVtX2hlbHBlcgp7CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IHR5
cGUKICAgIHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwogICAgfTsK
fTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBpc19lbnVtX2hlbHBlcjxmYWxzZT4KewogICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCB0eXBlCiAgICAgICAgOiA6OmJvb3N0Ojppc19jb252ZXJ0
aWJsZTxULDo6Ym9vc3Q6OmRldGFpbDo6aW50X2NvbnZlcnRpYmxlPgogICAgewogICAgfTsKfTsK
CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgaXNfZW51bV9pbXBsCnsKICAgdHlwZWRlZiA6
OmJvb3N0OjphZGRfcmVmZXJlbmNlPFQ+IGFyX3Q7CiAgIHR5cGVkZWYgdHlwZW5hbWUgYXJfdDo6
dHlwZSByX3R5cGU7CiMgNzQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRz
L2lzX2VudW0uaHBwIgogICBzdGF0aWMgY29uc3QgYm9vbCBzZWxlY3RvciA9ICg6OmJvb3N0Ojp0
eXBlX3RyYWl0czo6aWNlX29yPCA6OmJvb3N0Ojppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSAsIDo6
Ym9vc3Q6OmlzX3JlZmVyZW5jZTxUPjo6dmFsdWUgPjo6dmFsdWUpOwojIDg4ICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19lbnVtLmhwcCIKICAgIHR5cGVkZWYgOjpi
b29zdDo6ZGV0YWlsOjppc19lbnVtX2hlbHBlcjxzZWxlY3Rvcj4gc2VfdDsKCiAgICB0eXBlZGVm
IHR5cGVuYW1lIHNlX3Q6OnRlbXBsYXRlIHR5cGU8cl90eXBlPiBoZWxwZXI7CiAgICBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9IGhlbHBlcjo6dmFsdWU7Cn07CgoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
aXNfZW51bV9pbXBsPCBmbG9hdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoZmFsc2Up
OyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19lbnVtX2ltcGw8IGRvdWJsZSA+IHsgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSAoZmFsc2UpOyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19lbnVtX2lt
cGw8IGxvbmcgZG91YmxlID4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IChmYWxzZSk7IH07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19lbnVtX2ltcGw8IHZvaWQgPiB7IHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gKGZhbHNlKTsgfTsKCnRlbXBsYXRlPD4gc3RydWN0IGlzX2VudW1faW1wbDwg
dm9pZCBjb25zdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoZmFsc2UpOyB9Owp0ZW1w
bGF0ZTw+IHN0cnVjdCBpc19lbnVtX2ltcGw8IHZvaWQgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gKGZhbHNlKTsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZW51bV9pbXBs
PCB2b2lkIGNvbnN0IHZvbGF0aWxlID4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IChmYWxz
ZSk7IH07CgoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfZW51bSA6IG1wbDo6
Ym9vbF88IDo6Ym9vc3Q6OmRldGFpbDo6aXNfZW51bV9pbXBsPFQ+Ojp2YWx1ZSA+IHsgfTsKIyAx
MTggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VudW0uaHBwIgp9
CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s
X3RyYWl0X3VuZGVmLmhwcCIgMQojIDEyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw
ZV90cmFpdHMvaXNfZW51bS5ocHAiIDIKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
dHlwZV90cmFpdHMvY29tcG9zaXRlX3RyYWl0cy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJfcG9pbnRlci5ocHAiIDEKIyAxNyAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX3BvaW50ZXIuaHBw
IgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9m
dW5jdGlvbl9wb2ludGVyLmhwcCIgMQojIDE3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90
eXBlX3RyYWl0cy9pc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlci5ocHAiCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2lzX21lbV9mdW5fcG9pbnRlcl9p
bXBsLmhwcCIgMQojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9k
ZXRhaWwvaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGwuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1l
c3BhY2UgdHlwZV90cmFpdHMgewoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbAp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwp9
OwoKCgoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2lu
dGVyX2ltcGw8UiAoVDo6KikoKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9
OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVy
X2ltcGw8UiAoVDo6KikoKSBjb25zdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl
OyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50
ZXJfaW1wbDxSIChUOjoqKSgpIHZvbGF0aWxlID4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUID4Kc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNz
IFQwPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwKSA+IHsgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFQgLCBjbGFzcyBUMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU
MCkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p
bXBsPFIgKFQ6OiopKCBUMCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g
dHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMD4Kc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDE+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKSggVDAgLCBUMSkgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKCnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMT4Kc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxKSBjb25zdCA+IHsg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDE+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKSggVDAgLCBUMSkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl
ID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz
IFQxPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEpIGNv
bnN0IHZvbGF0aWxlID4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CgoKdGVt
cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDI+
CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyKSA+
IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDI+CnN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyKSBjb25zdCA+IHsgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAs
IGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIpIHZvbGF0aWxlID4geyBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3Mg
VDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8
UiAoVDo6KikoIFQwICwgVDEgLCBUMikgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNz
IFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9w
b2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzKSA+IHsgc3RhdGljIGNvbnN0
IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz
cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMz4Kc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMykgY29uc3QgPiB7IHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg
LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMz4Kc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMykgdm9sYXRpbGUg
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMz4Kc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMykg
Y29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBU
MiAsIGNsYXNzIFQzICwgY2xhc3MgVDQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxS
IChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCkgPiB7IHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBj
bGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUND4Kc3RydWN0IGlzX21lbV9m
dW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0KSBjb25zdCA+
IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xh
c3MgVDQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAs
IFQyICwgVDMgLCBUNCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1
ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg
Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVy
X2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQpIGNvbnN0IHZvbGF0aWxlID4g
eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CgoKdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNs
YXNzIFQ0ICwgY2xhc3MgVDU+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq
KSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1KSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFs
dWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNs
YXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDU+CnN0cnVj
dCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBU
NCAsIFQ1KSBjb25zdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs
IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUpIHZvbGF0aWxlID4g
eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLCBj
bGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFz
cyBUNCAsIGNsYXNzIFQ1PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6Kiko
IFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAs
IGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBj
bGFzcyBUNSAsIGNsYXNzIFQ2PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6
KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2KSA+IHsgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBU
MCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUg
LCBjbGFzcyBUNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNikgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAs
IGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBj
bGFzcyBUNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNikgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAs
IGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBj
bGFzcyBUNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNikgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDc+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNykgPiB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFz
cyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBU
NCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNz4Kc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
KSBjb25zdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8
Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNz
IFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDc+CnN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAs
IFQ1ICwgVDYgLCBUNykgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1
ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg
Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNs
YXNzIFQ3PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEg
LCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcpIGNvbnN0IHZvbGF0aWxlID4geyBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CgoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg
LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg
Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDg+CnN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwg
VDYgLCBUNyAsIFQ4KSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVt
cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg
LCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwg
Y2xhc3MgVDg+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBU
MSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4KSBjb25zdCA+IHsgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOD4Kc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs
IFQ3ICwgVDgpIHZvbGF0aWxlID4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07
CnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNz
IFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBU
NyAsIGNsYXNzIFQ4PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQw
ICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCkgY29uc3Qgdm9sYXRpbGUg
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwg
Y2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNs
YXNzIFQ5PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEg
LCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5KSA+IHsgc3RhdGljIGNvbnN0
IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz
cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg
VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOT4Kc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl
ID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz
IFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBU
NiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOT4Kc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
ICwgVDggLCBUOSkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh
c3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNz
IFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBs
PFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBU
OSkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFz
cyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3Mg
VDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9w
b2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwg
VDcgLCBUOCAsIFQ5ICwgVDEwKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9
OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh
c3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNz
IFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMD4Kc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs
IFQ3ICwgVDggLCBUOSAsIFQxMCkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g
dHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx
ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs
IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMD4Kc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg
LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAs
IGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBj
bGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMD4Kc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3Mg
VDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5
ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8
UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5
ICwgVDEwICwgVDExKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVt
cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg
LCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwg
Y2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMT4Kc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg
LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBU
MCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUg
LCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAs
IGNsYXNzIFQxMT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSkg
dm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz
cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg
VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMT4Kc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs
IFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2lt
cGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAs
IFQ5ICwgVDEwICwgVDExICwgVDEyKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl
OyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg
Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNs
YXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNs
YXNzIFQxMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQx
MikgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz
cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg
VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMj4Kc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0
ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMikgdm9sYXRpbGUgPiB7
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNs
YXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNz
IFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBU
OSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMj4Kc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs
IFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMikgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
VCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg
LCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwg
Y2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzPgpzdHJ1Y3QgaXNf
bWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU
NSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzKSA+IHsgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg
LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg
Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNs
YXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMz4Kc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg
LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMykgY29uc3QgPiB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs
IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMz4Kc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMykgdm9sYXRpbGUg
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNs
YXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFz
cyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMz4Kc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMykgY29u
c3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs
IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBj
bGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwg
Y2xhc3MgVDEzICwgY2xhc3MgVDE0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAo
VDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwg
VDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0KSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg
PSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz
IFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBU
NiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQx
MSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxND4Kc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs
IFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCkgY29uc3QgPiB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs
IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx
ND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx
MyAsIFQxNCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK
dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3Mg
VDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3
ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQx
MiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBs
PFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBU
OSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
VCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg
LCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwg
Y2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0
ICwgY2xhc3MgVDE1PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQw
ICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDEx
ICwgVDEyICwgVDEzICwgVDE0ICwgVDE1KSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0
cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx
ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs
IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAs
IGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNT4Kc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQx
NSkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz
cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg
VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNz
IFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p
bXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDgg
LCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSkgdm9sYXRpbGUgPiB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs
IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx
NCAsIGNsYXNzIFQxNT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU
MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQx
MSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xh
c3MgVDE1ICwgY2xhc3MgVDE2PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6
KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEw
ICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2KSA+IHsgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBU
MCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUg
LCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAs
IGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQx
NSAsIGNsYXNzIFQxNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU
MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQx
MSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNikgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBU
MCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUg
LCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAs
IGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQx
NSAsIGNsYXNzIFQxNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU
MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQx
MSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNikgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz
cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg
VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQx
MCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNz
IFQxNSAsIGNsYXNzIFQxNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs
IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNikgY29uc3Qgdm9sYXRpbGUgPiB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3Mg
VDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5
ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3Mg
VDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3PgpzdHJ1Y3QgaXNfbWVtX2Z1
bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2
ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2
ICwgVDE3KSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz
cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg
VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNz
IFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNz4Kc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQx
NCAsIFQxNSAsIFQxNiAsIFQxNykgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g
dHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx
ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs
IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAs
IGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQx
NiAsIGNsYXNzIFQxNz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU
MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQx
MSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNykgdm9sYXRpbGUgPiB7IHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg
LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg
Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNs
YXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAs
IGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNz4Kc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQx
NykgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFz
cyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3Mg
VDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3Mg
VDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xh
c3MgVDE3ICwgY2xhc3MgVDE4PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6
KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEw
ICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4KSA+IHsgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs
IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx
NCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOD4Kc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0
ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAs
IFQxNSAsIFQxNiAsIFQxNyAsIFQxOCkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl
ID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz
IFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBU
NiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQx
MSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNz
IFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p
bXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDgg
LCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQx
OCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxh
dGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBj
bGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xh
c3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNs
YXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAs
IGNsYXNzIFQxOD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs
IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCkgY29uc3Qgdm9sYXRpbGUg
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwg
Y2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNs
YXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwg
Y2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4
ICwgY2xhc3MgVDE5PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQw
ICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDEx
ICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5KSA+IHsgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs
IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx
NCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNz
IFQxOT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs
IFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSkgY29uc3QgPiB7IHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg
LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg
Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNs
YXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAs
IGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQx
OT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx
MyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSkgdm9sYXRpbGUgPiB7IHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg
LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg
Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNs
YXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAs
IGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQx
OT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx
MyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSkgY29uc3Qgdm9sYXRpbGUgPiB7
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xh
c3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNz
IFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xh
c3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwg
Y2xhc3MgVDE5ICwgY2xhc3MgVDIwPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAo
VDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwg
VDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5
ICwgVDIwKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz
cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg
VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNz
IFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNs
YXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg
VDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAs
IFQxOCAsIFQxOSAsIFQyMCkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1
ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg
Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNs
YXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNs
YXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAs
IGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMD4Kc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQx
NSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz
cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg
VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQx
MCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNz
IFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNs
YXNzIFQyMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQx
MiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCkgY29uc3Qg
dm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNs
YXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFz
cyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xh
c3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwg
Y2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxPgpzdHJ1Y3QgaXNf
bWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU
NSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1
ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5ICwgVDIwICwgVDIxKSA+IHsgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBU
MCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUg
LCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAs
IGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQx
NSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNz
IFQyMCAsIGNsYXNzIFQyMT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs
IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQy
MCAsIFQyMSkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVt
cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg
LCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwg
Y2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAs
IGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQx
NyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMT4Kc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0
ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAs
IFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSkgdm9sYXRpbGUgPiB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs
IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx
NCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNz
IFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p
bXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDgg
LCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQx
OCAsIFQxOSAsIFQyMCAsIFQyMSkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQw
ICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAs
IGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwg
Y2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1
ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3Mg
VDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2lt
cGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAs
IFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4
ICwgVDE5ICwgVDIwICwgVDIxICwgVDIyKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0
cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx
ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs
IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAs
IGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQx
NiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNz
IFQyMSAsIGNsYXNzIFQyMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs
IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQy
MCAsIFQyMSAsIFQyMikgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh
c3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNz
IFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNz
IFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNs
YXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAs
IGNsYXNzIFQyMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs
IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQy
MSAsIFQyMikgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK
dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3Mg
VDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3
ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQx
MiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNz
IFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNs
YXNzIFQyMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQx
MiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAs
IFQyMikgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj
bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xh
c3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xh
c3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwg
Y2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIx
ICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8
UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5
ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwg
VDE5ICwgVDIwICwgVDIxICwgVDIyICwgVDIzKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg
PSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz
IFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBU
NiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQx
MSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNz
IFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNs
YXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQyMz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg
VDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAs
IFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMykgY29uc3QgPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz
cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg
VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQx
MCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNz
IFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNs
YXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQyMz4Kc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg
LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAs
IFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMykgdm9sYXRpbGUg
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNs
YXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFz
cyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNs
YXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAs
IGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQy
Mz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx
MyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAs
IFQyMykgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj
bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xh
c3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xh
c3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwg
Y2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIx
ICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzICwgY2xhc3MgVDI0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9w
b2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwg
VDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwg
VDE3ICwgVDE4ICwgVDE5ICwgVDIwICwgVDIxICwgVDIyICwgVDIzICwgVDI0KSA+IHsgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg
LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg
Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNs
YXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAs
IGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQx
OSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQyMyAsIGNsYXNz
IFQyND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs
IFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQy
MiAsIFQyMyAsIFQyNCkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh
c3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNz
IFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNz
IFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNs
YXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAs
IGNsYXNzIFQyMiAsIGNsYXNzIFQyMyAsIGNsYXNzIFQyND4Kc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQx
NyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMyAsIFQyNCkgdm9sYXRpbGUgPiB7
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNs
YXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNz
IFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBU
OSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNz
IFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNs
YXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQyMyAs
IGNsYXNzIFQyND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs
IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQy
MSAsIFQyMiAsIFQyMyAsIFQyNCkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsgfTsKIyAzMzEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf
dHJhaXRzL2RldGFpbC9pc19tZW1fZnVuX3BvaW50ZXJfaW1wbC5ocHAiCn0KfQojIDE4ICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJfZnVuY3Rpb25fcG9p
bnRlci5ocHAiIDIKIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMv
aXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXIuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm
LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
dGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDI5ICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRl
ci5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3Ry
dWN0IGlzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyIDogbXBsOjpib29sXzwgOjpib29zdDo6dHlw
ZV90cmFpdHM6OmlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFQ+Ojp2YWx1ZSA+IHsgfTsKIyAxMTAg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlv
bl9wb2ludGVyLmhwcCIKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry
YWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyAxMTMgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcCIg
MgojIDE4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJf
cG9pbnRlci5ocHAiIDIKIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp
dHMvaXNfbWVtYmVyX3BvaW50ZXIuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIK
IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxh
dGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw
ZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDI5ICIvdXNyL2xvY2FsL3Ny
Yy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJfcG9pbnRlci5ocHAiIDIKCm5hbWVz
cGFjZSBib29zdCB7CgoKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX21lbWJl
cl9wb2ludGVyIDogbXBsOjpib29sXzwgOjpib29zdDo6aXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50
ZXI8VD46OnZhbHVlID4geyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVSA+IHN0
cnVjdCBpc19tZW1iZXJfcG9pbnRlcjwgVSBUOjoqID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9
OwojIDkzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJf
cG9pbnRlci5ocHAiCn0KCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxCiMgOTYgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9wb2ludGVyLmhwcCIgMgojIDI4ICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9jb21wb3NpdGVfdHJhaXRzLmhwcCIg
MgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19wb2ludGVy
LmhwcCIgMQojIDI4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19w
b2ludGVyLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9k
ZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMu
aHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC9ib29sX3RyYWl0X2RlZi5ocHAiIDIKIyAyOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
dHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCm5hbWVz
cGFjZSBkZXRhaWwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfcG9pbnRlcl9o
ZWxwZXIKewogICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKfTsKIyA0OCAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHAiCnRlbXBs
YXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3BvaW50ZXJfaGVscGVyPFQqPiB7IHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3Qg
aXNfcG9pbnRlcl9oZWxwZXI8VCogY29uc3Q+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0
cnVlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19wb2ludGVyX2hlbHBlcjxU
KiB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRl
PCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3BvaW50ZXJfaGVscGVyPFQqIGNvbnN0IHZvbGF0aWxl
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgoKdGVtcGxhdGU8IHR5cGVu
YW1lIFQgPgpzdHJ1Y3QgaXNfcG9pbnRlcl9pbXBsCnsKICAgIHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2VfYW5kPCA6OmJvb3N0OjpkZXRhaWw6Omlz
X3BvaW50ZXJfaGVscGVyPFQ+Ojp2YWx1ZSAsIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90
PCA6OmJvb3N0Ojppc19tZW1iZXJfcG9pbnRlcjxUPjo6dmFsdWUgPjo6dmFsdWUgPjo6dmFsdWUp
OwoKCgoKCgoKfTsKCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3BvaW50ZXIg
OiBtcGw6OmJvb2xfPCA6OmJvb3N0OjpkZXRhaWw6OmlzX3BvaW50ZXJfaW1wbDxUPjo6dmFsdWUg
PiB7IH07CiMgMTM1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19w
b2ludGVyLmhwcCIKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0
cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyAxMzggIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3BvaW50ZXIuaHBwIiAyCiMgMzAgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2NvbXBvc2l0ZV90cmFpdHMuaHBwIiAyCgojIDEg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3VuaW9uLmhwcCIgMQoj
IDE0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc191bmlvbi5ocHAi
CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2N2Lmhw
cCIgMQojIDE0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVf
Y3YuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Jyb2tl
bl9jb21waWxlcl9zcGVjLmhwcCIgMQojIDgyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90
eXBlX3RyYWl0cy9icm9rZW5fY29tcGlsZXJfc3BlYy5ocHAiCgoKCgoKCgoKCgoKCgoKCiMgMTUg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jdi5ocHAiIDIK
IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvY3ZfdHJh
aXRzX2ltcGwuaHBwIiAxCiMgMTggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9jdl90cmFpdHNfaW1wbC5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFj
ZSBkZXRhaWwgewoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGN2X3RyYWl0c19pbXAg
e307Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGN2X3RyYWl0c19pbXA8VCo+CnsKICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2NvbnN0ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc192b2xhdGlsZSA9IGZhbHNlOwogICAgdHlwZWRlZiBUIHVucXVhbGlmaWVkX3R5cGU7Cn07
Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGN2X3RyYWl0c19pbXA8Y29uc3QgVCo+CnsK
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2NvbnN0ID0gdHJ1ZTsKICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3ZvbGF0aWxlID0gZmFsc2U7CiAgICB0eXBlZGVmIFQgdW5xdWFsaWZpZWRfdHlwZTsK
fTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgY3ZfdHJhaXRzX2ltcDx2b2xhdGlsZSBU
Kj4KewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfY29uc3QgPSBmYWxzZTsKICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3ZvbGF0aWxlID0gdHJ1ZTsKICAgIHR5cGVkZWYgVCB1bnF1YWxpZmllZF90
eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjdl90cmFpdHNfaW1wPGNvbnN0
IHZvbGF0aWxlIFQqPgp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19jb25zdCA9IHRydWU7CiAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc192b2xhdGlsZSA9IHRydWU7CiAgICB0eXBlZGVmIFQgdW5x
dWFsaWZpZWRfdHlwZTsKfTsKCn0KfQojIDE2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90
eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwIiAyCgoKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAxCiMgMTkgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2Rl
Zi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls
L3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDIKIyAyMiAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2N2LmhwcCIgMgoKbmFtZXNw
YWNlIGJvb3N0IHsKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlbW92ZV9jdiB7
IHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpjdl90cmFpdHNfaW1wPFQqPjo6dW5xdWFsaWZpZWRf
dHlwZSB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZW1vdmVfY3Y8VCY+
IHsgdHlwZWRlZiBUJiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3Qg
TiA+IHN0cnVjdCByZW1vdmVfY3Y8VCBjb25zdFtOXT4geyB0eXBlZGVmIFQgdHlwZVtOXTsgfTsK
dGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVtb3ZlX2N2PFQg
dm9sYXRpbGVbTl0+IHsgdHlwZWRlZiBUIHR5cGVbTl07IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBU
LCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IHJlbW92ZV9jdjxUIGNvbnN0IHZvbGF0aWxlW05dPiB7
IHR5cGVkZWYgVCB0eXBlW05dOyB9OwojIDUwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90
eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwIgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhwcCIgMQojIDUzICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwIiAyCiMgMTUg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3VuaW9uLmhwcCIgMgoK
IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pbnRyaW5zaWNzLmhw
cCIgMQojIDE3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc191bmlv
bi5ocHAiIDIKCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Rl
dGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5o
cHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls
L2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90
eXBlX3RyYWl0cy9pc191bmlvbi5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgpuYW1lc3BhY2Ug
ZGV0YWlsIHsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBpc191bmlvbl9pbXBsCnsKICAg
dHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY3Y8VD46OnR5cGUgY3Z0OwogICBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9IGZhbHNlOwp9Owp9Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBp
c191bmlvbiA6IG1wbDo6Ym9vbF88IDo6Ym9vc3Q6OmRldGFpbDo6aXNfdW5pb25faW1wbDxUPjo6
dmFsdWUgPiB7IH07Cgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDM2ICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC90eXBlX3RyYWl0cy9pc191bmlvbi5ocHAiIDIKIyAzMiAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvY29tcG9zaXRlX3RyYWl0cy5ocHAiIDIKIyAzMSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvZGV0YWlsL2NhbGxfdHJhaXRzLmhwcCIgMgoKCm5h
bWVzcGFjZSBib29zdHsKCm5hbWVzcGFjZSBkZXRhaWx7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
Ym9vbCBzbWFsbF8+CnN0cnVjdCBjdF9pbXAyCnsKICAgdHlwZWRlZiBjb25zdCBUJiBwYXJhbV90
eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjdF9pbXAyPFQsIHRydWU+CnsK
ICAgdHlwZWRlZiBjb25zdCBUIHBhcmFtX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
Ym9vbCBpc3AsIGJvb2wgYjE+CnN0cnVjdCBjdF9pbXAKewogICB0eXBlZGVmIGNvbnN0IFQmIHBh
cmFtX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBpc3A+CnN0cnVjdCBjdF9p
bXA8VCwgaXNwLCB0cnVlPgp7CiAgIHR5cGVkZWYgdHlwZW5hbWUgY3RfaW1wMjxULCBzaXplb2Yo
VCkgPD0gc2l6ZW9mKHZvaWQqKT46OnBhcmFtX3R5cGUgcGFyYW1fdHlwZTsKfTsKCnRlbXBsYXRl
IDx0eXBlbmFtZSBULCBib29sIGIxPgpzdHJ1Y3QgY3RfaW1wPFQsIHRydWUsIGIxPgp7CiAgIHR5
cGVkZWYgVCBjb25zdCBwYXJhbV90eXBlOwp9OwoKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0
cnVjdCBjYWxsX3RyYWl0cwp7CnB1YmxpYzoKICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgIHR5
cGVkZWYgVCYgcmVmZXJlbmNlOwogICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsK
CgoKCgoKICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmN0X2ltcDwKICAgICAgVCwKICAgICAg
Ojpib29zdDo6aXNfcG9pbnRlcjxUPjo6dmFsdWUsCiAgICAgIDo6Ym9vc3Q6OmlzX2FyaXRobWV0
aWM8VD46OnZhbHVlCiAgID46OnBhcmFtX3R5cGUgcGFyYW1fdHlwZTsKfTsKCnRlbXBsYXRlIDx0
eXBlbmFtZSBUPgpzdHJ1Y3QgY2FsbF90cmFpdHM8VCY+CnsKICAgdHlwZWRlZiBUJiB2YWx1ZV90
eXBlOwogICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKICAgdHlwZWRlZiBjb25zdCBUJiBjb25zdF9y
ZWZlcmVuY2U7CiAgIHR5cGVkZWYgVCYgcGFyYW1fdHlwZTsKfTsKIyAxMjkgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L2RldGFpbC9jYWxsX3RyYWl0cy5ocHAiCnRlbXBsYXRlIDx0eXBlbmFt
ZSBULCBzdGQ6OnNpemVfdCBOPgpzdHJ1Y3QgY2FsbF90cmFpdHM8VCBbTl0+CnsKcHJpdmF0ZToK
ICAgdHlwZWRlZiBUIGFycmF5X3R5cGVbTl07CnB1YmxpYzoKCiAgIHR5cGVkZWYgY29uc3QgVCog
dmFsdWVfdHlwZTsKICAgdHlwZWRlZiBhcnJheV90eXBlJiByZWZlcmVuY2U7CiAgIHR5cGVkZWYg
Y29uc3QgYXJyYXlfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogICB0eXBlZGVmIGNvbnN0IFQqIGNv
bnN0IHBhcmFtX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTj4K
c3RydWN0IGNhbGxfdHJhaXRzPGNvbnN0IFQgW05dPgp7CnByaXZhdGU6CiAgIHR5cGVkZWYgY29u
c3QgVCBhcnJheV90eXBlW05dOwpwdWJsaWM6CgogICB0eXBlZGVmIGNvbnN0IFQqIHZhbHVlX3R5
cGU7CiAgIHR5cGVkZWYgYXJyYXlfdHlwZSYgcmVmZXJlbmNlOwogICB0eXBlZGVmIGNvbnN0IGFy
cmF5X3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdCBwYXJh
bV90eXBlOwp9OwoKCn0KIyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY2FsbF90cmFp
dHMuaHBwIiAyCiMgMjcgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z1bmN0aW9uLmhwcCIg
MgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R1cGxlL3R1cGxlLmhwcCIgMQojIDM3
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90dXBsZS90dXBsZS5ocHAiCiMgMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvcmVmLmhwcCIgMQojIDkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L3JlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdXRpbGl0eS9h
ZGRyZXNzb2YuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3V0aWxpdHkv
YWRkcmVzc29mLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKCgoKCgoKCnRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBUKgoKYWRkcmVzc29mKFQmIHYpCnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4o
CiAgICAgICAmY29uc3RfY2FzdDxjaGFyJj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2xhdGls
ZSBjaGFyICY+KHYpKSk7Cn0KCn0KIyAxMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvcmVm
LmhwcCIgMgojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9yZWYuaHBwIgpuYW1lc3Bh
Y2UgYm9vc3QKewoKdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgcmVmZXJlbmNlX3dyYXBwZXIKewpw
dWJsaWM6CiAgICB0eXBlZGVmIFQgdHlwZTsKCgoKCgoKCiAgICBleHBsaWNpdCByZWZlcmVuY2Vf
d3JhcHBlcihUJiB0KTogdF8oYWRkcmVzc29mKHQpKSB7fQoKCgogICAgb3BlcmF0b3IgVCYgKCkg
Y29uc3QgeyByZXR1cm4gKnRfOyB9CgogICAgVCYgZ2V0KCkgY29uc3QgeyByZXR1cm4gKnRfOyB9
CgogICAgVCogZ2V0X3BvaW50ZXIoKSBjb25zdCB7IHJldHVybiB0XzsgfQoKcHJpdmF0ZToKCiAg
ICBUKiB0XzsKfTsKCgoKCgoKCnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSByZWZlcmVuY2Vfd3Jh
cHBlcjxUPiBjb25zdCByZWYoVCAmIHQpCnsKICAgIHJldHVybiByZWZlcmVuY2Vfd3JhcHBlcjxU
Pih0KTsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHJlZmVyZW5jZV93cmFwcGVyPFQgY29u
c3Q+IGNvbnN0IGNyZWYoVCBjb25zdCAmIHQpCnsKICAgIHJldHVybiByZWZlcmVuY2Vfd3JhcHBl
cjxUIGNvbnN0Pih0KTsKfQoKCgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgaXNfcmVmZXJl
bmNlX3dyYXBwZXIKICAgIDogcHVibGljIG1wbDo6ZmFsc2VfCnsKfTsKCnRlbXBsYXRlPHR5cGVu
YW1lIFQ+CmNsYXNzIGlzX3JlZmVyZW5jZV93cmFwcGVyPHJlZmVyZW5jZV93cmFwcGVyPFQ+ID4K
ICAgIDogcHVibGljIG1wbDo6dHJ1ZV8Kewp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3Mg
dW53cmFwX3JlZmVyZW5jZQp7CiBwdWJsaWM6CiAgICB0eXBlZGVmIFQgdHlwZTsKfTsKCnRlbXBs
YXRlPHR5cGVuYW1lIFQ+CmNsYXNzIHVud3JhcF9yZWZlcmVuY2U8cmVmZXJlbmNlX3dyYXBwZXI8
VD4gPgp7CiBwdWJsaWM6CiAgICB0eXBlZGVmIFQgdHlwZTsKfTsKIyAxNjEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L3JlZi5ocHAiCn0KIyAzOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHVwbGUvdHVwbGUuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHVw
bGUvZGV0YWlsL3R1cGxlX2Jhc2ljLmhwcCIgMQojIDQzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC90dXBsZS9kZXRhaWwvdHVwbGVfYmFzaWMuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jv
b3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2N2X3RyYWl0cy5ocHAiIDEKIyAxNiAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvY3ZfdHJhaXRzLmhwcCIKIyAxICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9hZGRfY29uc3QuaHBwIiAxCiMgMTcgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9jb25zdC5ocHAiCiMgMSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVm
LmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRh
aWwvdHlwZV90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5
cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIwICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBw
IiAyCiMgMTggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9jb25z
dC5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CiMgMzQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL2FkZF9jb25zdC5ocHAiCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3Ry
dWN0IGFkZF9jb25zdCB7IHR5cGVkZWYgVCBjb25zdCB0eXBlOyB9OwoKCgoKCgp0ZW1wbGF0ZTwg
dHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRfY29uc3Q8VCY+IHsgdHlwZWRlZiBUJiB0eXBlOyB9OwoK
Cn0KCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5
cGVfdHJhaXRfdW5kZWYuaHBwIiAxCiMgNDcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5
cGVfdHJhaXRzL2FkZF9jb25zdC5ocHAiIDIKIyAxNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHlwZV90cmFpdHMvY3ZfdHJhaXRzLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF92b2xhdGlsZS5ocHAiIDEKIyAxNyAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCIKIyAxICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBw
IiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90
eXBlX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90
cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDIK
IyAxOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxl
LmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsKIyAzNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCIKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBz
dHJ1Y3QgYWRkX3ZvbGF0aWxlIHsgdHlwZWRlZiBUIHZvbGF0aWxlIHR5cGU7IH07CgoKCgoKCnRl
bXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGFkZF92b2xhdGlsZTxUJj4geyB0eXBlZGVmIFQm
IHR5cGU7IH07CgoKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0
cy9kZXRhaWwvdHlwZV90cmFpdF91bmRlZi5ocHAiIDEKIyA0NyAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCIgMgojIDE4ICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9jdl90cmFpdHMuaHBwIiAyCiMgMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX2N2LmhwcCIgMQojIDE3ICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9hZGRfY3YuaHBwIgojIDEgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5o
cHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls
L3R5cGVfdHJhaXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBl
X3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIg
MgojIDE4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9hZGRfY3YuaHBw
IiAyCgpuYW1lc3BhY2UgYm9vc3QgewojIDM0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90
eXBlX3RyYWl0cy9hZGRfY3YuaHBwIgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRf
Y3YgeyB0eXBlZGVmIFQgY29uc3Qgdm9sYXRpbGUgdHlwZTsgfTsKCgoKCgoKdGVtcGxhdGU8IHR5
cGVuYW1lIFQgPiBzdHJ1Y3QgYWRkX2N2PFQmPiB7IHR5cGVkZWYgVCYgdHlwZTsgfTsKCgp9Cgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3Ry
YWl0X3VuZGVmLmhwcCIgMQojIDQ3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry
YWl0cy9hZGRfY3YuaHBwIiAyCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf
dHJhaXRzL2N2X3RyYWl0cy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90
eXBlX3RyYWl0cy9pc19jb25zdC5ocHAiIDEKIyAyOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhw
cCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVt
cGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDMwICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHAiIDIKCm5hbWVzcGFjZSBi
b29zdCB7CgoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19jb25zdCA6IG1wbDo6
Ym9vbF88IDo6Ym9vc3Q6OmRldGFpbDo6Y3ZfdHJhaXRzX2ltcDxUKj46OmlzX2NvbnN0ID4geyB9
Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19jb25zdDwgVCYgPiA6IG1wbDo6Ym9v
bF88IGZhbHNlID4geyB9OwojIDExOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90
cmFpdHMvaXNfY29uc3QuaHBwIgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5
cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDEyMiAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwIiAyCiMgMjAgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2N2X3RyYWl0cy5ocHAiIDIKIyAxICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5ocHAiIDEK
IyAyNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfdm9sYXRpbGUu
aHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9i
b29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw
ZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEK
IyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xf
dHJhaXRfZGVmLmhwcCIgMgojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry
YWl0cy9pc192b2xhdGlsZS5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCgp0ZW1wbGF0ZTwg
dHlwZW5hbWUgVCA+IHN0cnVjdCBpc192b2xhdGlsZSA6IG1wbDo6Ym9vbF88IDo6Ym9vc3Q6OmRl
dGFpbDo6Y3ZfdHJhaXRzX2ltcDxUKj46OmlzX3ZvbGF0aWxlID4geyB9Owp0ZW1wbGF0ZTwgdHlw
ZW5hbWUgVCA+IHN0cnVjdCBpc192b2xhdGlsZTwgVCYgPiA6IG1wbDo6Ym9vbF88IGZhbHNlID4g
eyB9OwojIDEwOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfdm9s
YXRpbGUuaHBwIgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRz
L2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDExMiAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfdm9sYXRpbGUuaHBwIiAyCiMgMjEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2N2X3RyYWl0cy5ocHAiIDIKIyAxICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY29uc3QuaHBwIiAxCiMgMjIg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jb25zdC5ocHAi
CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVf
dHJhaXRfZGVmLmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry
YWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIw
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFp
dF9kZWYuaHBwIiAyCiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRz
L3JlbW92ZV9jb25zdC5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCm5hbWVzcGFjZSBkZXRh
aWwgewoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgaXNfdm9sPgpzdHJ1Y3QgcmVtb3ZlX2Nv
bnN0X2hlbHBlcgp7CiAgICB0eXBlZGVmIFQgdHlwZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBU
PgpzdHJ1Y3QgcmVtb3ZlX2NvbnN0X2hlbHBlcjxULCB0cnVlPgp7CiAgICB0eXBlZGVmIFQgdm9s
YXRpbGUgdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IHJlbW92ZV9jb25z
dF9pbXBsCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2NvbnN0X2hlbHBlcjwKICAgICAg
ICAgIHR5cGVuYW1lIGN2X3RyYWl0c19pbXA8VCo+Ojp1bnF1YWxpZmllZF90eXBlCiAgICAgICAg
LCA6OmJvb3N0Ojppc192b2xhdGlsZTxUPjo6dmFsdWUKICAgICAgICA+Ojp0eXBlIHR5cGU7Cn07
Cgp9CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlbW92ZV9jb25zdCB7IHR5cGVk
ZWYgdHlwZW5hbWUgZGV0YWlsOjpyZW1vdmVfY29uc3RfaW1wbDxUPjo6dHlwZSB0eXBlOyB9Owp0
ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZW1vdmVfY29uc3Q8VCY+IHsgdHlwZWRlZiBU
JiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTiA+IHN0cnVjdCBy
ZW1vdmVfY29uc3Q8VCBjb25zdFtOXT4geyB0eXBlZGVmIFQgdHlwZVtOXTsgfTsKdGVtcGxhdGU8
IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVtb3ZlX2NvbnN0PFQgY29uc3Qg
dm9sYXRpbGVbTl0+IHsgdHlwZWRlZiBUIHZvbGF0aWxlIHR5cGVbTl07IH07CgoKCgoKCgp9Cgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3Ry
YWl0X3VuZGVmLmhwcCIgMQojIDcwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry
YWl0cy9yZW1vdmVfY29uc3QuaHBwIiAyCiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0
L3R5cGVfdHJhaXRzL2N2X3RyYWl0cy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i
b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfdm9sYXRpbGUuaHBwIiAxCiMgMjIgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV92b2xhdGlsZS5ocHAiCiMgMSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVm
LmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRh
aWwvdHlwZV90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5
cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIwICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBw
IiAyCiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV92
b2xhdGlsZS5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCm5hbWVzcGFjZSBkZXRhaWwgewoK
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgaXNfY29uc3Q+CnN0cnVjdCByZW1vdmVfdm9sYXRp
bGVfaGVscGVyCnsKICAgIHR5cGVkZWYgVCB0eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CnN0cnVjdCByZW1vdmVfdm9sYXRpbGVfaGVscGVyPFQsdHJ1ZT4KewogICAgdHlwZWRlZiBUIGNv
bnN0IHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IHJlbW92ZV92b2xhdGls
ZV9pbXBsCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX3ZvbGF0aWxlX2hlbHBlcjwKICAg
ICAgICAgIHR5cGVuYW1lIGN2X3RyYWl0c19pbXA8VCo+Ojp1bnF1YWxpZmllZF90eXBlCiAgICAg
ICAgLCA6OmJvb3N0Ojppc19jb25zdDxUPjo6dmFsdWUKICAgICAgICA+Ojp0eXBlIHR5cGU7Cn07
Cgp9CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlbW92ZV92b2xhdGlsZSB7IHR5
cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpyZW1vdmVfdm9sYXRpbGVfaW1wbDxUPjo6dHlwZSB0eXBl
OyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZW1vdmVfdm9sYXRpbGU8VCY+IHsg
dHlwZWRlZiBUJiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTiA+
IHN0cnVjdCByZW1vdmVfdm9sYXRpbGU8VCB2b2xhdGlsZVtOXT4geyB0eXBlZGVmIFQgdHlwZVtO
XTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVtb3Zl
X3ZvbGF0aWxlPFQgY29uc3Qgdm9sYXRpbGVbTl0+IHsgdHlwZWRlZiBUIGNvbnN0IHR5cGVbTl07
IH07CgoKCgoKCgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRz
L2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhwcCIgMQojIDY5ICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfdm9sYXRpbGUuaHBwIiAyCiMgMjMgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2N2X3RyYWl0cy5ocHAiIDIKIyA0NCAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHVwbGUvZGV0YWlsL3R1cGxlX2Jhc2ljLmhwcCIgMgoj
IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Z1bmN0aW9uX3RyYWl0
cy5ocHAiIDEKIyAxNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZnVu
Y3Rpb25fdHJhaXRzLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry
YWl0cy9pc19mdW5jdGlvbi5ocHAiIDEKIyAxOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
dHlwZV90cmFpdHMvaXNfZnVuY3Rpb24uaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9mYWxzZV9yZXN1bHQuaHBwIiAxCiMgMTIgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9mYWxzZV9yZXN1bHQuaHBwIgpu
YW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgdHlwZV90cmFpdHMgewoKCnN0cnVjdCBmYWxzZV9y
ZXN1bHQKewogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCByZXN1bHRfCiAgICB7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKICAgIH07Cn07Cgp9fQojIDE5
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19mdW5jdGlvbi5ocHAi
IDIKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
aXNfZnVuY3Rpb25fcHRyX2hlbHBlci5ocHAiIDEKIyAyOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2lzX2Z1bmN0aW9uX3B0cl9oZWxwZXIuaHBwIgpuYW1l
c3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgdHlwZV90cmFpdHMgewoKdGVtcGxhdGUgPGNsYXNzIFI+
CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyCnsKICAgIHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gZmFsc2U7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUj4Kc3RydWN0IGlzX2Z1bmN0aW9u
X3B0cl9oZWxwZXI8UiAoKikoKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMD4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxw
ZXI8UiAoKikoVDApPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBs
YXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxPgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hl
bHBlcjxSICgqKShUMCxUMSk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoK
dGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDI+CnN0cnVjdCBpc19m
dW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFz
cyBUMixjbGFzcyBUMz4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEs
VDIsVDMpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxj
bGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0PgpzdHJ1
Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxUMixUMyxUNCk+IHsgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAs
Y2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDU+CnN0cnVjdCBpc19m
dW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1KT4geyBzdGF0aWMgY29u
c3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFz
cyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNj4Kc3RydWN0
IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYpPiB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNz
IFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2
LGNsYXNzIFQ3PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxUMixU
MyxUNCxUNSxUNixUNyk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVt
cGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3Mg
VDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDg+CnN0cnVjdCBpc19mdW5jdGlv
bl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4KT4geyBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxj
bGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFz
cyBUNyxjbGFzcyBUOCxjbGFzcyBUOT4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAo
KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDkpPiB7IHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNz
IFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4
LGNsYXNzIFQ5LGNsYXNzIFQxMD4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKiko
VDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFz
cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBU
OCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExPgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hl
bHBlcjxSICgqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExKT4geyBzdGF0
aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBU
MCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixj
bGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMj4K
c3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYs
VDcsVDgsVDksVDEwLFQxMSxUMTIpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQz
LGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNs
YXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMz4Kc3RydWN0IGlzX2Z1bmN0aW9u
X3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxU
MTIsVDEzKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz
cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg
VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRy
X2hlbHBlcjxSICgqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixU
MTMsVDE0KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz
cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg
VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNT4Kc3RydWN0IGlzX2Z1
bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEw
LFQxMSxUMTIsVDEzLFQxNCxUMTUpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQz
LGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNs
YXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1
LGNsYXNzIFQxNj4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIs
VDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2KT4geyBzdGF0
aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBU
MCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixj
bGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixj
bGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3PgpzdHJ1Y3Qg
aXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxU
OSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFz
cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBU
OCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3Mg
VDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOD4Kc3RydWN0IGlzX2Z1
bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEw
LFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgpPiB7IHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNz
IFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4
LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBU
MTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQxOT4Kc3Ry
dWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcs
VDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5KT4geyBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxj
bGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFz
cyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFz
cyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxj
bGFzcyBUMTksY2xhc3MgVDIwPgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShU
MCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYs
VDE3LFQxOCxUMTksVDIwKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFz
cyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBU
MTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFz
cyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMT4K
c3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYs
VDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5LFQyMCxUMjEp
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBS
LGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNs
YXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xh
c3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcs
Y2xhc3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjAsY2xhc3MgVDIxLGNsYXNzIFQyMj4Kc3RydWN0
IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgs
VDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5LFQyMCxUMjEsVDIyKT4g
eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixj
bGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFz
cyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNz
IFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNs
YXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBUMjIsY2xhc3MgVDIz
PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxUMixUMyxUNCxUNSxU
NixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQy
MSxUMjIsVDIzKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxj
bGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xh
c3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYs
Y2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBU
MjIsY2xhc3MgVDIzLGNsYXNzIFQyND4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAo
KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUs
VDE2LFQxNyxUMTgsVDE5LFQyMCxUMjEsVDIyLFQyMyxUMjQpPiB7IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsgfTsKIyAxMjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf
dHJhaXRzL2RldGFpbC9pc19mdW5jdGlvbl9wdHJfaGVscGVyLmhwcCIKfQp9CiMgMjMgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIgMgoKCgoK
CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s
X3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90
cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAy
MCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJh
aXRfZGVmLmhwcCIgMgojIDMwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0
cy9pc19mdW5jdGlvbi5ocHAiIDIKCgoKCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBk
ZXRhaWwgewoKCnRlbXBsYXRlPGJvb2wgaXNfcmVmID0gdHJ1ZT4Kc3RydWN0IGlzX2Z1bmN0aW9u
X2Nob29zZXIKICAgIDogOjpib29zdDo6dHlwZV90cmFpdHM6OmZhbHNlX3Jlc3VsdAp7Cn07Cgp0
ZW1wbGF0ZSA8PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fY2hvb3NlcjxmYWxzZT4KewogICAgdGVtcGxh
dGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVzdWx0XwogICAgICAgIDogOjpib29zdDo6dHlwZV90
cmFpdHM6OmlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8VCo+CiAgICB7CiAgICB9Owp9OwoKdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19mdW5jdGlvbl9pbXBsCiAgICA6IGlzX2Z1bmN0aW9u
X2Nob29zZXI8IDo6Ym9vc3Q6OmlzX3JlZmVyZW5jZTxUPjo6dmFsdWUgPgogICAgICAgIDo6dGVt
cGxhdGUgcmVzdWx0XzxUPgp7Cn07CiMgNzcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5
cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1
Y3QgaXNfZnVuY3Rpb24gOiBtcGw6OmJvb2xfPCA6OmJvb3N0OjpkZXRhaWw6OmlzX2Z1bmN0aW9u
X2ltcGw8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyA4NCAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfZnVuY3Rpb24uaHBwIiAyCiMgMTgg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Z1bmN0aW9uX3RyYWl0cy5o
cHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9hZGRfcG9p
bnRlci5ocHAiIDEKIyAxMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMv
YWRkX3BvaW50ZXIuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh
aXRzL3JlbW92ZV9yZWZlcmVuY2UuaHBwIiAxCiMgMTcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv
b3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9yZWZlcmVuY2UuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDEKIyAx
OSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJh
aXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9k
ZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMgojIDE4ICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhw
cCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3Qg
cmVtb3ZlX3JlZmVyZW5jZSB7IHR5cGVkZWYgVCB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUg
VCA+IHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPFQmPiB7IHR5cGVkZWYgVCB0eXBlOyB9OwojIDQy
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNl
LmhwcCIKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRh
aWwvdHlwZV90cmFpdF91bmRlZi5ocHAiIDEKIyA0NSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvdHlwZV90cmFpdHMvcmVtb3ZlX3JlZmVyZW5jZS5ocHAiIDIKIyAxNCAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3BvaW50ZXIuaHBwIiAyCgoKIyAxICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYu
aHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC90eXBlX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw
ZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAi
IDIKIyAxNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3BvaW50
ZXIuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFpbCB7CiMgNTYgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9wb2ludGVyLmhwcCIKdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBhZGRfcG9pbnRlcl9pbXBsCnsKICAgIHR5cGVkZWYg
dHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSBub19yZWZfdHlwZTsKICAgIHR5cGVk
ZWYgbm9fcmVmX3R5cGUqIHR5cGU7Cn07CgoKCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3Ry
dWN0IGFkZF9wb2ludGVyIHsgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmFkZF9wb2ludGVyX2lt
cGw8VD46OnR5cGUgdHlwZTsgfTsKCn0KCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfdW5kZWYuaHBwIiAxCiMgNzIgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9wb2ludGVyLmhwcCIgMgojIDE5ICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9mdW5jdGlvbl90cmFpdHMuaHBw
IiAyCgpuYW1lc3BhY2UgYm9vc3QgewoKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rpb24+IHN0cnVjdCBmdW5jdGlvbl90cmFpdHNfaGVscGVyOwoKdGVtcGxhdGU8
dHlwZW5hbWUgUj4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikodm9pZCk+CnsK
ICBzdGF0aWMgY29uc3QgaW50IGFyaXR5ID0gMDsKICB0eXBlZGVmIFIgcmVzdWx0X3R5cGU7Cn07
Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBUMT4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0
c19oZWxwZXI8UiAoKikoVDEpPgp7CiAgc3RhdGljIGNvbnN0IGludCBhcml0eSA9IDE7CiAgdHlw
ZWRlZiBSIHJlc3VsdF90eXBlOwogIHR5cGVkZWYgVDEgYXJnMV90eXBlOwp9OwoKdGVtcGxhdGU8
dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgpzdHJ1Y3QgZnVuY3Rpb25fdHJh
aXRzX2hlbHBlcjxSICgqKShUMSwgVDIpPgp7CiAgc3RhdGljIGNvbnN0IGludCBhcml0eSA9IDI7
CiAgdHlwZWRlZiBSIHJlc3VsdF90eXBlOwogIHR5cGVkZWYgVDEgYXJnMV90eXBlOwogIHR5cGVk
ZWYgVDIgYXJnMl90eXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5
cGVuYW1lIFQyLCB0eXBlbmFtZSBUMz4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAo
KikoVDEsIFQyLCBUMyk+CnsKICBzdGF0aWMgY29uc3QgaW50IGFyaXR5ID0gMzsKICB0eXBlZGVm
IFIgcmVzdWx0X3R5cGU7CiAgdHlwZWRlZiBUMSBhcmcxX3R5cGU7CiAgdHlwZWRlZiBUMiBhcmcy
X3R5cGU7CiAgdHlwZWRlZiBUMyBhcmczX3R5cGU7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUND4Kc3RydWN0
IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQpPgp7CiAgc3RhdGlj
IGNvbnN0IGludCBhcml0eSA9IDQ7CiAgdHlwZWRlZiBSIHJlc3VsdF90eXBlOwogIHR5cGVkZWYg
VDEgYXJnMV90eXBlOwogIHR5cGVkZWYgVDIgYXJnMl90eXBlOwogIHR5cGVkZWYgVDMgYXJnM190
eXBlOwogIHR5cGVkZWYgVDQgYXJnNF90eXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsCiAgICAgICAg
IHR5cGVuYW1lIFQ1PgpzdHJ1Y3QgZnVuY3Rpb25fdHJhaXRzX2hlbHBlcjxSICgqKShUMSwgVDIs
IFQzLCBUNCwgVDUpPgp7CiAgc3RhdGljIGNvbnN0IGludCBhcml0eSA9IDU7CiAgdHlwZWRlZiBS
IHJlc3VsdF90eXBlOwogIHR5cGVkZWYgVDEgYXJnMV90eXBlOwogIHR5cGVkZWYgVDIgYXJnMl90
eXBlOwogIHR5cGVkZWYgVDMgYXJnM190eXBlOwogIHR5cGVkZWYgVDQgYXJnNF90eXBlOwogIHR5
cGVkZWYgVDUgYXJnNV90eXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsCiAgICAgICAgIHR5cGVuYW1l
IFQ1LCB0eXBlbmFtZSBUNj4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEs
IFQyLCBUMywgVDQsIFQ1LCBUNik+CnsKICBzdGF0aWMgY29uc3QgaW50IGFyaXR5ID0gNjsKICB0
eXBlZGVmIFIgcmVzdWx0X3R5cGU7CiAgdHlwZWRlZiBUMSBhcmcxX3R5cGU7CiAgdHlwZWRlZiBU
MiBhcmcyX3R5cGU7CiAgdHlwZWRlZiBUMyBhcmczX3R5cGU7CiAgdHlwZWRlZiBUNCBhcmc0X3R5
cGU7CiAgdHlwZWRlZiBUNSBhcmc1X3R5cGU7CiAgdHlwZWRlZiBUNiBhcmc2X3R5cGU7Cn07Cgp0
ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz
LCB0eXBlbmFtZSBUNCwKICAgICAgICAgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFt
ZSBUNz4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcpPgp7CiAgc3RhdGljIGNvbnN0IGludCBhcml0eSA9IDc7CiAgdHlwZWRlZiBS
IHJlc3VsdF90eXBlOwogIHR5cGVkZWYgVDEgYXJnMV90eXBlOwogIHR5cGVkZWYgVDIgYXJnMl90
eXBlOwogIHR5cGVkZWYgVDMgYXJnM190eXBlOwogIHR5cGVkZWYgVDQgYXJnNF90eXBlOwogIHR5
cGVkZWYgVDUgYXJnNV90eXBlOwogIHR5cGVkZWYgVDYgYXJnNl90eXBlOwogIHR5cGVkZWYgVDcg
YXJnN190eXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1l
IFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsCiAgICAgICAgIHR5cGVuYW1lIFQ1LCB0eXBl
bmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4PgpzdHJ1Y3QgZnVuY3Rpb25fdHJhaXRz
X2hlbHBlcjxSICgqKShUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgpPgp7CiAgc3RhdGlj
IGNvbnN0IGludCBhcml0eSA9IDg7CiAgdHlwZWRlZiBSIHJlc3VsdF90eXBlOwogIHR5cGVkZWYg
VDEgYXJnMV90eXBlOwogIHR5cGVkZWYgVDIgYXJnMl90eXBlOwogIHR5cGVkZWYgVDMgYXJnM190
eXBlOwogIHR5cGVkZWYgVDQgYXJnNF90eXBlOwogIHR5cGVkZWYgVDUgYXJnNV90eXBlOwogIHR5
cGVkZWYgVDYgYXJnNl90eXBlOwogIHR5cGVkZWYgVDcgYXJnN190eXBlOwogIHR5cGVkZWYgVDgg
YXJnOF90eXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1l
IFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsCiAgICAgICAgIHR5cGVuYW1lIFQ1LCB0eXBl
bmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOT4Kc3RydWN0IGZ1
bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSk+CnsKICBzdGF0aWMgY29uc3QgaW50IGFyaXR5ID0gOTsKICB0eXBlZGVmIFIgcmVzdWx0
X3R5cGU7CiAgdHlwZWRlZiBUMSBhcmcxX3R5cGU7CiAgdHlwZWRlZiBUMiBhcmcyX3R5cGU7CiAg
dHlwZWRlZiBUMyBhcmczX3R5cGU7CiAgdHlwZWRlZiBUNCBhcmc0X3R5cGU7CiAgdHlwZWRlZiBU
NSBhcmc1X3R5cGU7CiAgdHlwZWRlZiBUNiBhcmc2X3R5cGU7CiAgdHlwZWRlZiBUNyBhcmc3X3R5
cGU7CiAgdHlwZWRlZiBUOCBhcmc4X3R5cGU7CiAgdHlwZWRlZiBUOSBhcmc5X3R5cGU7Cn07Cgp0
ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz
LCB0eXBlbmFtZSBUNCwKICAgICAgICAgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFt
ZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LAogICAgICAgICB0eXBlbmFtZSBUMTA+CnN0
cnVjdCBmdW5jdGlvbl90cmFpdHNfaGVscGVyPFIgKCopKFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYs
IFQ3LCBUOCwgVDksIFQxMCk+CnsKICBzdGF0aWMgY29uc3QgaW50IGFyaXR5ID0gMTA7CiAgdHlw
ZWRlZiBSIHJlc3VsdF90eXBlOwogIHR5cGVkZWYgVDEgYXJnMV90eXBlOwogIHR5cGVkZWYgVDIg
YXJnMl90eXBlOwogIHR5cGVkZWYgVDMgYXJnM190eXBlOwogIHR5cGVkZWYgVDQgYXJnNF90eXBl
OwogIHR5cGVkZWYgVDUgYXJnNV90eXBlOwogIHR5cGVkZWYgVDYgYXJnNl90eXBlOwogIHR5cGVk
ZWYgVDcgYXJnN190eXBlOwogIHR5cGVkZWYgVDggYXJnOF90eXBlOwogIHR5cGVkZWYgVDkgYXJn
OV90eXBlOwogIHR5cGVkZWYgVDEwIGFyZzEwX3R5cGU7Cn07Cgp9Cgp0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdGlvbj4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0cyA6CiAgICBwdWJsaWMgZGV0YWlsOjpm
dW5jdGlvbl90cmFpdHNfaGVscGVyPHR5cGVuYW1lIGFkZF9wb2ludGVyPEZ1bmN0aW9uPjo6dHlw
ZT4Kewp9OwojIDIzNSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZnVu
Y3Rpb25fdHJhaXRzLmhwcCIKfQojIDQ1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90dXBs
ZS9kZXRhaWwvdHVwbGVfYmFzaWMuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2Ug
dHVwbGVzIHsKCgpzdHJ1Y3QgbnVsbF90eXBlIHt9OwoKCm5hbWVzcGFjZSBkZXRhaWwgewogIGlu
bGluZSBjb25zdCBudWxsX3R5cGUgY251bGwoKSB7IHJldHVybiBudWxsX3R5cGUoKTsgfQoKCgoK
CnRlbXBsYXRlIDxib29sIElmLCBjbGFzcyBUaGVuLCBjbGFzcyBFbHNlPiBzdHJ1Y3QgSUYgeyB0
eXBlZGVmIFRoZW4gUkVUOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFRoZW4sIGNsYXNzIEVsc2U+IHN0
cnVjdCBJRjxmYWxzZSwgVGhlbiwgRWxzZT4gewogIHR5cGVkZWYgRWxzZSBSRVQ7Cn07Cgp9CgoK
dGVtcGxhdGUgPGNsYXNzIEhULCBjbGFzcyBUVD4gc3RydWN0IGNvbnM7CgoKCnRlbXBsYXRlIDwK
ICBjbGFzcyBUMCA9IG51bGxfdHlwZSwgY2xhc3MgVDEgPSBudWxsX3R5cGUsIGNsYXNzIFQyID0g
bnVsbF90eXBlLAogIGNsYXNzIFQzID0gbnVsbF90eXBlLCBjbGFzcyBUNCA9IG51bGxfdHlwZSwg
Y2xhc3MgVDUgPSBudWxsX3R5cGUsCiAgY2xhc3MgVDYgPSBudWxsX3R5cGUsIGNsYXNzIFQ3ID0g
bnVsbF90eXBlLCBjbGFzcyBUOCA9IG51bGxfdHlwZSwKICBjbGFzcyBUOSA9IG51bGxfdHlwZT4K
Y2xhc3MgdHVwbGU7CgoKdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IGxlbmd0aDsKCgoKbmFtZXNw
YWNlIGRldGFpbCB7CiMgMTAwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90dXBsZS9kZXRh
aWwvdHVwbGVfYmFzaWMuaHBwIgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBnZW5lcmF0ZV9lcnJv
cjsKCgoKCnRlbXBsYXRlPCBpbnQgTiA+CnN0cnVjdCBnZXRfY2xhc3MgewogIHRlbXBsYXRlPGNs
YXNzIFJFVCwgY2xhc3MgSFQsIGNsYXNzIFRUID4KICBpbmxpbmUgc3RhdGljIFJFVCBnZXQoY29u
c3QgY29uczxIVCwgVFQ+JiB0KQogIHsKICAgIHJldHVybiBnZXRfY2xhc3M8Ti0xPjo6dGVtcGxh
dGUgZ2V0PFJFVD4odC50YWlsKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgUkVULCBjbGFzcyBIVCwg
Y2xhc3MgVFQgPgogIGlubGluZSBzdGF0aWMgUkVUIGdldChjb25zPEhULCBUVD4mIHQpCiAgewog
ICAgcmV0dXJuIGdldF9jbGFzczxOLTE+Ojp0ZW1wbGF0ZSBnZXQ8UkVUPih0LnRhaWwpOwogIH0K
fTsKCnRlbXBsYXRlPD4Kc3RydWN0IGdldF9jbGFzczwwPiB7CiAgdGVtcGxhdGU8Y2xhc3MgUkVU
LCBjbGFzcyBIVCwgY2xhc3MgVFQ+CiAgaW5saW5lIHN0YXRpYyBSRVQgZ2V0KGNvbnN0IGNvbnM8
SFQsIFRUPiYgdCkKICB7CiAgICByZXR1cm4gdC5oZWFkOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBS
RVQsIGNsYXNzIEhULCBjbGFzcyBUVD4KICBpbmxpbmUgc3RhdGljIFJFVCBnZXQoY29uczxIVCwg
VFQ+JiB0KQogIHsKICAgIHJldHVybiB0LmhlYWQ7CiAgfQp9OwoKfQoKCgoKCgoKdGVtcGxhdGU8
aW50IE4sIGNsYXNzIFQ+CnN0cnVjdCBlbGVtZW50CnsKcHJpdmF0ZToKICB0eXBlZGVmIHR5cGVu
YW1lIFQ6OnRhaWxfdHlwZSBOZXh0OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBlbGVtZW50
PE4tMSwgTmV4dD46OnR5cGUgdHlwZTsKfTsKdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0IGVsZW1l
bnQ8MCxUPgp7CiAgdHlwZWRlZiB0eXBlbmFtZSBUOjpoZWFkX3R5cGUgdHlwZTsKfTsKCnRlbXBs
YXRlPGludCBOLCBjbGFzcyBUPgpzdHJ1Y3QgZWxlbWVudDxOLCBjb25zdCBUPgp7CnByaXZhdGU6
CiAgdHlwZWRlZiB0eXBlbmFtZSBUOjp0YWlsX3R5cGUgTmV4dDsKICB0eXBlZGVmIHR5cGVuYW1l
IGVsZW1lbnQ8Ti0xLCBOZXh0Pjo6dHlwZSB1bnF1YWxpZmllZF90eXBlOwpwdWJsaWM6CiAgdHlw
ZWRlZiB0eXBlbmFtZSBib29zdDo6YWRkX2NvbnN0PHVucXVhbGlmaWVkX3R5cGU+Ojp0eXBlIHR5
cGU7Cn07CnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBlbGVtZW50PDAsY29uc3QgVD4KewogIHR5
cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmFkZF9jb25zdDx0eXBlbmFtZSBUOjpoZWFkX3R5cGU+Ojp0
eXBlIHR5cGU7Cn07CiMgMTgwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90dXBsZS9kZXRh
aWwvdHVwbGVfYmFzaWMuaHBwIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGFjY2Vzc190cmFp
dHMgewogIHR5cGVkZWYgY29uc3QgVCYgY29uc3RfdHlwZTsKICB0eXBlZGVmIFQmIG5vbl9jb25z
dF90eXBlOwoKICB0eXBlZGVmIGNvbnN0IHR5cGVuYW1lIGJvb3N0OjpyZW1vdmVfY3Y8VD46OnR5
cGUmIHBhcmFtZXRlcl90eXBlOwoKCgoKCgp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBh
Y2Nlc3NfdHJhaXRzPFQmPiB7CgogIHR5cGVkZWYgVCYgY29uc3RfdHlwZTsKICB0eXBlZGVmIFQm
IG5vbl9jb25zdF90eXBlOwoKICB0eXBlZGVmIFQmIHBhcmFtZXRlcl90eXBlOwp9OwoKCgp0ZW1w
bGF0ZTxpbnQgTiwgY2xhc3MgSFQsIGNsYXNzIFRUPgppbmxpbmUgdHlwZW5hbWUgYWNjZXNzX3Ry
YWl0czwKICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgZWxlbWVudDxOLCBjb25zPEhULCBUVD4g
Pjo6dHlwZQogICAgICAgICAgICAgICAgPjo6bm9uX2NvbnN0X3R5cGUKZ2V0KGNvbnM8SFQsIFRU
PiYgYyApIHsKICByZXR1cm4gZGV0YWlsOjpnZXRfY2xhc3M8Tj46OnRlbXBsYXRlCiAgICAgICAg
IGdldDwKICAgICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPAogICAgICAgICAgICAgdHlw
ZW5hbWUgZWxlbWVudDxOLCBjb25zPEhULCBUVD4gPjo6dHlwZQogICAgICAgICAgID46Om5vbl9j
b25zdF90eXBlPihjKTsKfQoKCgoKdGVtcGxhdGU8aW50IE4sIGNsYXNzIEhULCBjbGFzcyBUVD4K
aW5saW5lIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8CiAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IGVsZW1lbnQ8TiwgY29uczxIVCwgVFQ+ID46OnR5cGUKICAgICAgICAgICAgICAgID46OmNvbnN0
X3R5cGUKZ2V0KGNvbnN0IGNvbnM8SFQsIFRUPiYgYyApIHsKICByZXR1cm4gZGV0YWlsOjpnZXRf
Y2xhc3M8Tj46OnRlbXBsYXRlCiAgICAgICAgIGdldDwKICAgICAgICAgICB0eXBlbmFtZSBhY2Nl
c3NfdHJhaXRzPAogICAgICAgICAgICAgdHlwZW5hbWUgZWxlbWVudDxOLCBjb25zPEhULCBUVD4g
Pjo6dHlwZQogICAgICAgICA+Ojpjb25zdF90eXBlPihjKTsKfQoKCm5hbWVzcGFjZSBkZXRhaWwg
ewoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIG5vbl9zdG9yZWFibGVfdHlwZSB7CiAg
bm9uX3N0b3JlYWJsZV90eXBlKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHdyYXBf
bm9uX3N0b3JlYWJsZV90eXBlIHsKICB0eXBlZGVmIHR5cGVuYW1lIElGPAogICAgOjpib29zdDo6
aXNfZnVuY3Rpb248VD46OnZhbHVlLCBub25fc3RvcmVhYmxlX3R5cGU8VD4sIFQKICA+OjpSRVQg
dHlwZTsKfTsKdGVtcGxhdGUgPD4gc3RydWN0IHdyYXBfbm9uX3N0b3JlYWJsZV90eXBlPHZvaWQ+
IHsKICB0eXBlZGVmIG5vbl9zdG9yZWFibGVfdHlwZTx2b2lkPiB0eXBlOwp9OwoKfQoKdGVtcGxh
dGUgPGNsYXNzIEhULCBjbGFzcyBUVD4Kc3RydWN0IGNvbnMgewoKICB0eXBlZGVmIEhUIGhlYWRf
dHlwZTsKICB0eXBlZGVmIFRUIHRhaWxfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZQogICAgZGV0
YWlsOjp3cmFwX25vbl9zdG9yZWFibGVfdHlwZTxoZWFkX3R5cGU+Ojp0eXBlIHN0b3JlZF9oZWFk
X3R5cGU7CgogIHN0b3JlZF9oZWFkX3R5cGUgaGVhZDsKICB0YWlsX3R5cGUgdGFpbDsKCiAgdHlw
ZW5hbWUgYWNjZXNzX3RyYWl0czxzdG9yZWRfaGVhZF90eXBlPjo6bm9uX2NvbnN0X3R5cGUKICBn
ZXRfaGVhZCgpIHsgcmV0dXJuIGhlYWQ7IH0KCiAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czx0YWls
X3R5cGU+Ojpub25fY29uc3RfdHlwZQogIGdldF90YWlsKCkgeyByZXR1cm4gdGFpbDsgfQoKICB0
eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPHN0b3JlZF9oZWFkX3R5cGU+Ojpjb25zdF90eXBlCiAgZ2V0
X2hlYWQoKSBjb25zdCB7IHJldHVybiBoZWFkOyB9CgogIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8
dGFpbF90eXBlPjo6Y29uc3RfdHlwZQogIGdldF90YWlsKCkgY29uc3QgeyByZXR1cm4gdGFpbDsg
fQoKICBjb25zKCkgOiBoZWFkKCksIHRhaWwoKSB7fQoKCgoKCgoKICBjb25zKHR5cGVuYW1lIGFj
Y2Vzc190cmFpdHM8c3RvcmVkX2hlYWRfdHlwZT46OnBhcmFtZXRlcl90eXBlIGgsCiAgICAgICBj
b25zdCB0YWlsX3R5cGUmIHQpCiAgICA6IGhlYWQgKGgpLCB0YWlsKHQpIHt9CgogIHRlbXBsYXRl
IDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBUNCwgY2xhc3MgVDUsCiAgICAg
ICAgICAgIGNsYXNzIFQ2LCBjbGFzcyBUNywgY2xhc3MgVDgsIGNsYXNzIFQ5LCBjbGFzcyBUMTA+
CiAgY29ucyggVDEmIHQxLCBUMiYgdDIsIFQzJiB0MywgVDQmIHQ0LCBUNSYgdDUsCiAgICAgICAg
VDYmIHQ2LCBUNyYgdDcsIFQ4JiB0OCwgVDkmIHQ5LCBUMTAmIHQxMCApCiAgICA6IGhlYWQgKHQx
KSwKICAgICAgdGFpbCAodDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5LCB0MTAsIGRldGFp
bDo6Y251bGwoKSkKICAgICAge30KCiAgdGVtcGxhdGUgPGNsYXNzIFQyLCBjbGFzcyBUMywgY2xh
c3MgVDQsIGNsYXNzIFQ1LAogICAgICAgICAgICBjbGFzcyBUNiwgY2xhc3MgVDcsIGNsYXNzIFQ4
LCBjbGFzcyBUOSwgY2xhc3MgVDEwPgogIGNvbnMoIGNvbnN0IG51bGxfdHlwZSYgdDEsIFQyJiB0
MiwgVDMmIHQzLCBUNCYgdDQsIFQ1JiB0NSwKICAgICAgICBUNiYgdDYsIFQ3JiB0NywgVDgmIHQ4
LCBUOSYgdDksIFQxMCYgdDEwICkKICAgIDogaGVhZCAoKSwKICAgICAgdGFpbCAodDIsIHQzLCB0
NCwgdDUsIHQ2LCB0NywgdDgsIHQ5LCB0MTAsIGRldGFpbDo6Y251bGwoKSkKICAgICAge30KCgog
IHRlbXBsYXRlIDxjbGFzcyBIVDIsIGNsYXNzIFRUMj4KICBjb25zKCBjb25zdCBjb25zPEhUMiwg
VFQyPiYgdSApIDogaGVhZCh1LmhlYWQpLCB0YWlsKHUudGFpbCkge30KCiAgdGVtcGxhdGUgPGNs
YXNzIEhUMiwgY2xhc3MgVFQyPgogIGNvbnMmIG9wZXJhdG9yPSggY29uc3QgY29uczxIVDIsIFRU
Mj4mIHUgKSB7CiAgICBoZWFkPXUuaGVhZDsgdGFpbD11LnRhaWw7IHJldHVybiAqdGhpczsKICB9
CgoKCiAgY29ucyYgb3BlcmF0b3I9KGNvbnN0IGNvbnMmIHUpIHsKICAgIGhlYWQgPSB1LmhlYWQ7
IHRhaWwgPSB1LnRhaWw7IHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBUMSwg
Y2xhc3MgVDI+CiAgY29ucyYgb3BlcmF0b3I9KCBjb25zdCBzdGQ6OnBhaXI8VDEsIFQyPiYgdSAp
IHsKICAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2VydF90ZXN0PCBzaXplb2YoOjpib29z
dDo6U1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPCAoYm9vbCkoIGxlbmd0aDxjb25zPjo6dmFsdWUg
PT0gMiApID4pPiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfMzIzOwogICAgaGVhZCA9IHUu
Zmlyc3Q7IHRhaWwuaGVhZCA9IHUuc2Vjb25kOyByZXR1cm4gKnRoaXM7CiAgfQoKCiAgdGVtcGxh
dGUgPGludCBOPgogIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8CiAgICAgICAgICAgICB0eXBlbmFt
ZSBlbGVtZW50PE4sIGNvbnM8SFQsIFRUPiA+Ojp0eXBlCiAgICAgICAgICAgPjo6bm9uX2NvbnN0
X3R5cGUKICBnZXQoKSB7CiAgICByZXR1cm4gYm9vc3Q6OnR1cGxlczo6Z2V0PE4+KCp0aGlzKTsK
ICB9CgogIHRlbXBsYXRlIDxpbnQgTj4KICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPAogICAgICAg
ICAgICAgdHlwZW5hbWUgZWxlbWVudDxOLCBjb25zPEhULCBUVD4gPjo6dHlwZQogICAgICAgICAg
ID46OmNvbnN0X3R5cGUKICBnZXQoKSBjb25zdCB7CiAgICByZXR1cm4gYm9vc3Q6OnR1cGxlczo6
Z2V0PE4+KCp0aGlzKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgSFQ+CnN0cnVjdCBjb25zPEhU
LCBudWxsX3R5cGU+IHsKCiAgdHlwZWRlZiBIVCBoZWFkX3R5cGU7CiAgdHlwZWRlZiBudWxsX3R5
cGUgdGFpbF90eXBlOwogIHR5cGVkZWYgY29uczxIVCwgbnVsbF90eXBlPiBzZWxmX3R5cGU7Cgog
IHR5cGVkZWYgdHlwZW5hbWUKICAgIGRldGFpbDo6d3JhcF9ub25fc3RvcmVhYmxlX3R5cGU8aGVh
ZF90eXBlPjo6dHlwZSBzdG9yZWRfaGVhZF90eXBlOwogIHN0b3JlZF9oZWFkX3R5cGUgaGVhZDsK
CiAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxzdG9yZWRfaGVhZF90eXBlPjo6bm9uX2NvbnN0X3R5
cGUKICBnZXRfaGVhZCgpIHsgcmV0dXJuIGhlYWQ7IH0KCiAgbnVsbF90eXBlIGdldF90YWlsKCkg
eyByZXR1cm4gbnVsbF90eXBlKCk7IH0KCiAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxzdG9yZWRf
aGVhZF90eXBlPjo6Y29uc3RfdHlwZQogIGdldF9oZWFkKCkgY29uc3QgeyByZXR1cm4gaGVhZDsg
fQoKICBjb25zdCBudWxsX3R5cGUgZ2V0X3RhaWwoKSBjb25zdCB7IHJldHVybiBudWxsX3R5cGUo
KTsgfQoKCiAgY29ucygpIDogaGVhZCgpIHt9CgogIGNvbnModHlwZW5hbWUgYWNjZXNzX3RyYWl0
czxzdG9yZWRfaGVhZF90eXBlPjo6cGFyYW1ldGVyX3R5cGUgaCwKICAgICAgIGNvbnN0IG51bGxf
dHlwZSYgPSBudWxsX3R5cGUoKSkKICAgIDogaGVhZCAoaCkge30KCiAgdGVtcGxhdGU8Y2xhc3Mg
VDE+CiAgY29ucyhUMSYgdDEsIGNvbnN0IG51bGxfdHlwZSYsIGNvbnN0IG51bGxfdHlwZSYsIGNv
bnN0IG51bGxfdHlwZSYsCiAgICAgICBjb25zdCBudWxsX3R5cGUmLCBjb25zdCBudWxsX3R5cGUm
LCBjb25zdCBudWxsX3R5cGUmLAogICAgICAgY29uc3QgbnVsbF90eXBlJiwgY29uc3QgbnVsbF90
eXBlJiwgY29uc3QgbnVsbF90eXBlJikKICA6IGhlYWQgKHQxKSB7fQoKICBjb25zKGNvbnN0IG51
bGxfdHlwZSYsCiAgICAgICBjb25zdCBudWxsX3R5cGUmLCBjb25zdCBudWxsX3R5cGUmLCBjb25z
dCBudWxsX3R5cGUmLAogICAgICAgY29uc3QgbnVsbF90eXBlJiwgY29uc3QgbnVsbF90eXBlJiwg
Y29uc3QgbnVsbF90eXBlJiwKICAgICAgIGNvbnN0IG51bGxfdHlwZSYsIGNvbnN0IG51bGxfdHlw
ZSYsIGNvbnN0IG51bGxfdHlwZSYpCiAgOiBoZWFkICgpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBI
VDI+CiAgY29ucyggY29uc3QgY29uczxIVDIsIG51bGxfdHlwZT4mIHUgKSA6IGhlYWQodS5oZWFk
KSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgSFQyPgogIGNvbnMmIG9wZXJhdG9yPShjb25zdCBjb25z
PEhUMiwgbnVsbF90eXBlPiYgdSApCiAgeyBoZWFkID0gdS5oZWFkOyByZXR1cm4gKnRoaXM7IH0K
CgoKICBjb25zJiBvcGVyYXRvcj0oY29uc3QgY29ucyYgdSkgeyBoZWFkID0gdS5oZWFkOyByZXR1
cm4gKnRoaXM7IH0KCiAgdGVtcGxhdGUgPGludCBOPgogIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8
CiAgICAgICAgICAgICB0eXBlbmFtZSBlbGVtZW50PE4sIHNlbGZfdHlwZT46OnR5cGUKICAgICAg
ICAgICAgPjo6bm9uX2NvbnN0X3R5cGUKICBnZXQoKSB7CiAgICByZXR1cm4gYm9vc3Q6OnR1cGxl
czo6Z2V0PE4+KCp0aGlzKTsKICB9CgogIHRlbXBsYXRlIDxpbnQgTj4KICB0eXBlbmFtZSBhY2Nl
c3NfdHJhaXRzPAogICAgICAgICAgICAgdHlwZW5hbWUgZWxlbWVudDxOLCBzZWxmX3R5cGU+Ojp0
eXBlCiAgICAgICAgICAgPjo6Y29uc3RfdHlwZQogIGdldCgpIGNvbnN0IHsKICAgIHJldHVybiBi
b29zdDo6dHVwbGVzOjpnZXQ8Tj4oKnRoaXMpOwogIH0KCn07CgoKCnRlbXBsYXRlPGNsYXNzIFQ+
CnN0cnVjdCBsZW5ndGggewogIHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSAxICsgbGVuZ3RoPHR5
cGVuYW1lIFQ6OnRhaWxfdHlwZT46OnZhbHVlOwp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgbGVuZ3Ro
PHR1cGxlPD4gPiB7CiAgc3RhdGljIGNvbnN0IGludCB2YWx1ZSA9IDA7Cn07Cgp0ZW1wbGF0ZTw+
CnN0cnVjdCBsZW5ndGg8bnVsbF90eXBlPiB7CiAgc3RhdGljIGNvbnN0IGludCB2YWx1ZSA9IDA7
Cn07CgoKbmFtZXNwYWNlIGRldGFpbCB7CgoKdGVtcGxhdGUgPGNsYXNzIFQwLCBjbGFzcyBUMSwg
Y2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBUNCwKICAgICAgICAgIGNsYXNzIFQ1LCBjbGFzcyBU
NiwgY2xhc3MgVDcsIGNsYXNzIFQ4LCBjbGFzcyBUOT4Kc3RydWN0IG1hcF90dXBsZV90b19jb25z
CnsKICB0eXBlZGVmIGNvbnM8VDAsCiAgICAgICAgICAgICAgIHR5cGVuYW1lIG1hcF90dXBsZV90
b19jb25zPFQxLCBUMiwgVDMsIFQ0LCBUNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVDYsIFQ3LCBUOCwgVDksIG51bGxfdHlwZT46OnR5cGUKICAgICAgICAgICAg
ICA+IHR5cGU7Cn07CgoKdGVtcGxhdGUgPD4Kc3RydWN0IG1hcF90dXBsZV90b19jb25zPG51bGxf
dHlwZSwgbnVsbF90eXBlLCBudWxsX3R5cGUsIG51bGxfdHlwZSwgbnVsbF90eXBlLCBudWxsX3R5
cGUsIG51bGxfdHlwZSwgbnVsbF90eXBlLCBudWxsX3R5cGUsIG51bGxfdHlwZT4KewogIHR5cGVk
ZWYgbnVsbF90eXBlIHR5cGU7Cn07Cgp9CgoKCnRlbXBsYXRlIDxjbGFzcyBUMCwgY2xhc3MgVDEs
IGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsCiAgICAgICAgICBjbGFzcyBUNSwgY2xhc3Mg
VDYsIGNsYXNzIFQ3LCBjbGFzcyBUOCwgY2xhc3MgVDk+CgpjbGFzcyB0dXBsZSA6CiAgcHVibGlj
IGRldGFpbDo6bWFwX3R1cGxlX3RvX2NvbnM8VDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3
LCBUOCwgVDk+Ojp0eXBlCnsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUKICAgIGRldGFpbDo6
bWFwX3R1cGxlX3RvX2NvbnM8VDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDk+
Ojp0eXBlIGluaGVyaXRlZDsKICB0eXBlZGVmIHR5cGVuYW1lIGluaGVyaXRlZDo6aGVhZF90eXBl
IGhlYWRfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGluaGVyaXRlZDo6dGFpbF90eXBlIHRhaWxf
dHlwZTsKCgoKICB0dXBsZSgpIHt9CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDA+
OjpwYXJhbWV0ZXJfdHlwZSB0MCkKICAgIDogaW5oZXJpdGVkKHQwLCBkZXRhaWw6OmNudWxsKCks
IGRldGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgpLAogICAgICAgICAgICAgICAgZGV0YWls
OjpjbnVsbCgpLCBkZXRhaWw6OmNudWxsKCksIGRldGFpbDo6Y251bGwoKSwKICAgICAgICAgICAg
ICAgIGRldGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgpLCBkZXRhaWw6OmNudWxsKCkpIHt9
CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDA+OjpwYXJhbWV0ZXJfdHlwZSB0MCwK
ICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQxPjo6cGFyYW1ldGVyX3R5cGUgdDEpCiAg
ICA6IGluaGVyaXRlZCh0MCwgdDEsIGRldGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgpLAog
ICAgICAgICAgICAgICAgZGV0YWlsOjpjbnVsbCgpLCBkZXRhaWw6OmNudWxsKCksIGRldGFpbDo6
Y251bGwoKSwKICAgICAgICAgICAgICAgIGRldGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgp
LCBkZXRhaWw6OmNudWxsKCkpIHt9CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDA+
OjpwYXJhbWV0ZXJfdHlwZSB0MCwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQxPjo6
cGFyYW1ldGVyX3R5cGUgdDEsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMj46OnBh
cmFtZXRlcl90eXBlIHQyKQogICAgOiBpbmhlcml0ZWQodDAsIHQxLCB0MiwgZGV0YWlsOjpjbnVs
bCgpLCBkZXRhaWw6OmNudWxsKCksCiAgICAgICAgICAgICAgICBkZXRhaWw6OmNudWxsKCksIGRl
dGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgpLAogICAgICAgICAgICAgICAgZGV0YWlsOjpj
bnVsbCgpLCBkZXRhaWw6OmNudWxsKCkpIHt9CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFp
dHM8VDA+OjpwYXJhbWV0ZXJfdHlwZSB0MCwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRz
PFQxPjo6cGFyYW1ldGVyX3R5cGUgdDEsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxU
Mj46OnBhcmFtZXRlcl90eXBlIHQyLAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDM+
OjpwYXJhbWV0ZXJfdHlwZSB0MykKICAgIDogaW5oZXJpdGVkKHQwLCB0MSwgdDIsIHQzLCBkZXRh
aWw6OmNudWxsKCksIGRldGFpbDo6Y251bGwoKSwKICAgICAgICAgICAgICAgIGRldGFpbDo6Y251
bGwoKSwgZGV0YWlsOjpjbnVsbCgpLCBkZXRhaWw6OmNudWxsKCksCiAgICAgICAgICAgICAgICBk
ZXRhaWw6OmNudWxsKCkpIHt9CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDA+Ojpw
YXJhbWV0ZXJfdHlwZSB0MCwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQxPjo6cGFy
YW1ldGVyX3R5cGUgdDEsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMj46OnBhcmFt
ZXRlcl90eXBlIHQyLAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDM+OjpwYXJhbWV0
ZXJfdHlwZSB0MywKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQ0Pjo6cGFyYW1ldGVy
X3R5cGUgdDQpCiAgICA6IGluaGVyaXRlZCh0MCwgdDEsIHQyLCB0MywgdDQsIGRldGFpbDo6Y251
bGwoKSwgZGV0YWlsOjpjbnVsbCgpLAogICAgICAgICAgICAgICAgZGV0YWlsOjpjbnVsbCgpLCBk
ZXRhaWw6OmNudWxsKCksIGRldGFpbDo6Y251bGwoKSkge30KCiAgdHVwbGUodHlwZW5hbWUgYWNj
ZXNzX3RyYWl0czxUMD46OnBhcmFtZXRlcl90eXBlIHQwLAogICAgICAgIHR5cGVuYW1lIGFjY2Vz
c190cmFpdHM8VDE+OjpwYXJhbWV0ZXJfdHlwZSB0MSwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3Nf
dHJhaXRzPFQyPjo6cGFyYW1ldGVyX3R5cGUgdDIsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3Ry
YWl0czxUMz46OnBhcmFtZXRlcl90eXBlIHQzLAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFp
dHM8VDQ+OjpwYXJhbWV0ZXJfdHlwZSB0NCwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRz
PFQ1Pjo6cGFyYW1ldGVyX3R5cGUgdDUpCiAgICA6IGluaGVyaXRlZCh0MCwgdDEsIHQyLCB0Mywg
dDQsIHQ1LCBkZXRhaWw6OmNudWxsKCksIGRldGFpbDo6Y251bGwoKSwKICAgICAgICAgICAgICAg
IGRldGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgpKSB7fQoKICB0dXBsZSh0eXBlbmFtZSBh
Y2Nlc3NfdHJhaXRzPFQwPjo6cGFyYW1ldGVyX3R5cGUgdDAsCiAgICAgICAgdHlwZW5hbWUgYWNj
ZXNzX3RyYWl0czxUMT46OnBhcmFtZXRlcl90eXBlIHQxLAogICAgICAgIHR5cGVuYW1lIGFjY2Vz
c190cmFpdHM8VDI+OjpwYXJhbWV0ZXJfdHlwZSB0MiwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3Nf
dHJhaXRzPFQzPjo6cGFyYW1ldGVyX3R5cGUgdDMsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3Ry
YWl0czxUND46OnBhcmFtZXRlcl90eXBlIHQ0LAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFp
dHM8VDU+OjpwYXJhbWV0ZXJfdHlwZSB0NSwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRz
PFQ2Pjo6cGFyYW1ldGVyX3R5cGUgdDYpCiAgICA6IGluaGVyaXRlZCh0MCwgdDEsIHQyLCB0Mywg
dDQsIHQ1LCB0NiwgZGV0YWlsOjpjbnVsbCgpLAogICAgICAgICAgICAgICAgZGV0YWlsOjpjbnVs
bCgpLCBkZXRhaWw6OmNudWxsKCkpIHt9CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8
VDA+OjpwYXJhbWV0ZXJfdHlwZSB0MCwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQx
Pjo6cGFyYW1ldGVyX3R5cGUgdDEsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMj46
OnBhcmFtZXRlcl90eXBlIHQyLAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDM+Ojpw
YXJhbWV0ZXJfdHlwZSB0MywKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQ0Pjo6cGFy
YW1ldGVyX3R5cGUgdDQsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUNT46OnBhcmFt
ZXRlcl90eXBlIHQ1LAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDY+OjpwYXJhbWV0
ZXJfdHlwZSB0NiwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQ3Pjo6cGFyYW1ldGVy
X3R5cGUgdDcpCiAgICA6IGluaGVyaXRlZCh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcs
IGRldGFpbDo6Y251bGwoKSwKICAgICAgICAgICAgICAgIGRldGFpbDo6Y251bGwoKSkge30KCiAg
dHVwbGUodHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMD46OnBhcmFtZXRlcl90eXBlIHQwLAogICAg
ICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDE+OjpwYXJhbWV0ZXJfdHlwZSB0MSwKICAgICAg
ICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQyPjo6cGFyYW1ldGVyX3R5cGUgdDIsCiAgICAgICAg
dHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMz46OnBhcmFtZXRlcl90eXBlIHQzLAogICAgICAgIHR5
cGVuYW1lIGFjY2Vzc190cmFpdHM8VDQ+OjpwYXJhbWV0ZXJfdHlwZSB0NCwKICAgICAgICB0eXBl
bmFtZSBhY2Nlc3NfdHJhaXRzPFQ1Pjo6cGFyYW1ldGVyX3R5cGUgdDUsCiAgICAgICAgdHlwZW5h
bWUgYWNjZXNzX3RyYWl0czxUNj46OnBhcmFtZXRlcl90eXBlIHQ2LAogICAgICAgIHR5cGVuYW1l
IGFjY2Vzc190cmFpdHM8VDc+OjpwYXJhbWV0ZXJfdHlwZSB0NywKICAgICAgICB0eXBlbmFtZSBh
Y2Nlc3NfdHJhaXRzPFQ4Pjo6cGFyYW1ldGVyX3R5cGUgdDgpCiAgICA6IGluaGVyaXRlZCh0MCwg
dDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCBkZXRhaWw6OmNudWxsKCkpIHt9CgogIHR1
cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDA+OjpwYXJhbWV0ZXJfdHlwZSB0MCwKICAgICAg
ICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQxPjo6cGFyYW1ldGVyX3R5cGUgdDEsCiAgICAgICAg
dHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMj46OnBhcmFtZXRlcl90eXBlIHQyLAogICAgICAgIHR5
cGVuYW1lIGFjY2Vzc190cmFpdHM8VDM+OjpwYXJhbWV0ZXJfdHlwZSB0MywKICAgICAgICB0eXBl
bmFtZSBhY2Nlc3NfdHJhaXRzPFQ0Pjo6cGFyYW1ldGVyX3R5cGUgdDQsCiAgICAgICAgdHlwZW5h
bWUgYWNjZXNzX3RyYWl0czxUNT46OnBhcmFtZXRlcl90eXBlIHQ1LAogICAgICAgIHR5cGVuYW1l
IGFjY2Vzc190cmFpdHM8VDY+OjpwYXJhbWV0ZXJfdHlwZSB0NiwKICAgICAgICB0eXBlbmFtZSBh
Y2Nlc3NfdHJhaXRzPFQ3Pjo6cGFyYW1ldGVyX3R5cGUgdDcsCiAgICAgICAgdHlwZW5hbWUgYWNj
ZXNzX3RyYWl0czxUOD46OnBhcmFtZXRlcl90eXBlIHQ4LAogICAgICAgIHR5cGVuYW1lIGFjY2Vz
c190cmFpdHM8VDk+OjpwYXJhbWV0ZXJfdHlwZSB0OSkKICAgIDogaW5oZXJpdGVkKHQwLCB0MSwg
dDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5KSB7fQoKCiAgdGVtcGxhdGU8Y2xhc3MgVTEs
IGNsYXNzIFUyPgogIHR1cGxlKGNvbnN0IGNvbnM8VTEsIFUyPiYgcCkgOiBpbmhlcml0ZWQocCkg
e30KCiAgdGVtcGxhdGUgPGNsYXNzIFUxLCBjbGFzcyBVMj4KICB0dXBsZSYgb3BlcmF0b3I9KGNv
bnN0IGNvbnM8VTEsIFUyPiYgaykgewogICAgaW5oZXJpdGVkOjpvcGVyYXRvcj0oayk7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgVTEsIGNsYXNzIFUyPgogIHR1cGxl
JiBvcGVyYXRvcj0oY29uc3Qgc3RkOjpwYWlyPFUxLCBVMj4mIGspIHsKICAgIHR5cGVkZWYgOjpi
b29zdDo6c3RhdGljX2Fzc2VydF90ZXN0PCBzaXplb2YoOjpib29zdDo6U1RBVElDX0FTU0VSVElP
Tl9GQUlMVVJFPCAoYm9vbCkoIGxlbmd0aDx0dXBsZT46OnZhbHVlID09IDIgKSA+KT4gYm9vc3Rf
c3RhdGljX2Fzc2VydF90eXBlZGVmXzU3MTsKICAgIHRoaXMtPmhlYWQgPSBrLmZpcnN0OwogICAg
dGhpcy0+dGFpbC5oZWFkID0gay5zZWNvbmQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKfTsKCgp0
ZW1wbGF0ZSA8PgpjbGFzcyB0dXBsZTxudWxsX3R5cGUsIG51bGxfdHlwZSwgbnVsbF90eXBlLCBu
dWxsX3R5cGUsIG51bGxfdHlwZSwgbnVsbF90eXBlLCBudWxsX3R5cGUsIG51bGxfdHlwZSwgbnVs
bF90eXBlLCBudWxsX3R5cGU+IDoKICBwdWJsaWMgbnVsbF90eXBlCnsKcHVibGljOgogIHR5cGVk
ZWYgbnVsbF90eXBlIGluaGVyaXRlZDsKfTsKCgoKbmFtZXNwYWNlIGRldGFpbCB7CgpzdHJ1Y3Qg
c3dhbGxvd19hc3NpZ24gewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogIHN3YWxsb3dfYXNzaWdu
JiBvcGVyYXRvcj0oY29uc3QgVCYpIHsKICAgIHJldHVybiAqdGhpczsKICB9Cn07Cgp9CgoKbmFt
ZXNwYWNlIHsKIGRldGFpbDo6c3dhbGxvd19hc3NpZ24gaWdub3JlOwp9CiMgNjI0ICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC90dXBsZS9kZXRhaWwvdHVwbGVfYmFzaWMuaHBwIgp0ZW1wbGF0
ZTxjbGFzcyBUPgpzdHJ1Y3QgbWFrZV90dXBsZV90cmFpdHMgewogIHR5cGVkZWYgVCB0eXBlOwoK
CgoKCgoKfTsKIyA2NDggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R1cGxlL2RldGFpbC90
dXBsZV9iYXNpYy5ocHAiCnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBtYWtlX3R1cGxlX3RyYWl0
czxUJj4gewogIHR5cGVkZWYgdHlwZW5hbWUKICAgICBkZXRhaWw6OmdlbmVyYXRlX2Vycm9yPFQm
Pjo6CiAgICAgICBkb19ub3RfdXNlX3dpdGhfcmVmZXJlbmNlX3R5cGUgZXJyb3I7Cn07CgoKCgoK
dGVtcGxhdGU8Y2xhc3MgVCwgaW50IG4+IHN0cnVjdCBtYWtlX3R1cGxlX3RyYWl0cyA8VFtuXT4g
ewogIHR5cGVkZWYgY29uc3QgVCAoJnR5cGUpW25dOwp9OwoKdGVtcGxhdGU8Y2xhc3MgVCwgaW50
IG4+CnN0cnVjdCBtYWtlX3R1cGxlX3RyYWl0czxjb25zdCBUW25dPiB7CiAgdHlwZWRlZiBjb25z
dCBUICgmdHlwZSlbbl07Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBULCBpbnQgbj4gc3RydWN0IG1ha2Vf
dHVwbGVfdHJhaXRzPHZvbGF0aWxlIFRbbl0+IHsKICB0eXBlZGVmIGNvbnN0IHZvbGF0aWxlIFQg
KCZ0eXBlKVtuXTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQsIGludCBuPgpzdHJ1Y3QgbWFrZV90dXBs
ZV90cmFpdHM8Y29uc3Qgdm9sYXRpbGUgVFtuXT4gewogIHR5cGVkZWYgY29uc3Qgdm9sYXRpbGUg
VCAoJnR5cGUpW25dOwp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0IG1ha2VfdHVwbGVfdHJh
aXRzPHJlZmVyZW5jZV93cmFwcGVyPFQ+ID57CiAgdHlwZWRlZiBUJiB0eXBlOwp9OwoKdGVtcGxh
dGU8Y2xhc3MgVD4Kc3RydWN0IG1ha2VfdHVwbGVfdHJhaXRzPGNvbnN0IHJlZmVyZW5jZV93cmFw
cGVyPFQ+ID57CiAgdHlwZWRlZiBUJiB0eXBlOwp9OwoKCgoKbmFtZXNwYWNlIGRldGFpbCB7CgoK
CnRlbXBsYXRlIDwKICBjbGFzcyBUMCA9IG51bGxfdHlwZSwgY2xhc3MgVDEgPSBudWxsX3R5cGUs
IGNsYXNzIFQyID0gbnVsbF90eXBlLAogIGNsYXNzIFQzID0gbnVsbF90eXBlLCBjbGFzcyBUNCA9
IG51bGxfdHlwZSwgY2xhc3MgVDUgPSBudWxsX3R5cGUsCiAgY2xhc3MgVDYgPSBudWxsX3R5cGUs
IGNsYXNzIFQ3ID0gbnVsbF90eXBlLCBjbGFzcyBUOCA9IG51bGxfdHlwZSwKICBjbGFzcyBUOSA9
IG51bGxfdHlwZQo+CnN0cnVjdCBtYWtlX3R1cGxlX21hcHBlciB7CiAgdHlwZWRlZgogICAgdHVw
bGU8dHlwZW5hbWUgbWFrZV90dXBsZV90cmFpdHM8VDA+Ojp0eXBlLAogICAgICAgICAgdHlwZW5h
bWUgbWFrZV90dXBsZV90cmFpdHM8VDE+Ojp0eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFrZV90
dXBsZV90cmFpdHM8VDI+Ojp0eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFrZV90dXBsZV90cmFp
dHM8VDM+Ojp0eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFrZV90dXBsZV90cmFpdHM8VDQ+Ojp0
eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFrZV90dXBsZV90cmFpdHM8VDU+Ojp0eXBlLAogICAg
ICAgICAgdHlwZW5hbWUgbWFrZV90dXBsZV90cmFpdHM8VDY+Ojp0eXBlLAogICAgICAgICAgdHlw
ZW5hbWUgbWFrZV90dXBsZV90cmFpdHM8VDc+Ojp0eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFr
ZV90dXBsZV90cmFpdHM8VDg+Ojp0eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFrZV90dXBsZV90
cmFpdHM8VDk+Ojp0eXBlPiB0eXBlOwp9OwoKfQoKCmlubGluZSB0dXBsZTw+IG1ha2VfdHVwbGUo
KSB7CiAgcmV0dXJuIHR1cGxlPD4oKTsKfQoKdGVtcGxhdGU8Y2xhc3MgVDA+CmlubGluZSB0eXBl
bmFtZSBkZXRhaWw6Om1ha2VfdHVwbGVfbWFwcGVyPFQwPjo6dHlwZQptYWtlX3R1cGxlKGNvbnN0
IFQwJiB0MCkgewogIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjptYWtlX3R1cGxlX21hcHBlcjxU
MD46OnR5cGUgdDsKICByZXR1cm4gdCh0MCk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQwLCBjbGFzcyBU
MT4KaW5saW5lIHR5cGVuYW1lIGRldGFpbDo6bWFrZV90dXBsZV9tYXBwZXI8VDAsIFQxPjo6dHlw
ZQptYWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwgY29uc3QgVDEmIHQxKSB7CiAgdHlwZWRlZiB0eXBl
bmFtZSBkZXRhaWw6Om1ha2VfdHVwbGVfbWFwcGVyPFQwLCBUMT46OnR5cGUgdDsKICByZXR1cm4g
dCh0MCwgdDEpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUMCwgY2xhc3MgVDEsIGNsYXNzIFQyPgppbmxp
bmUgdHlwZW5hbWUgZGV0YWlsOjptYWtlX3R1cGxlX21hcHBlcjxUMCwgVDEsIFQyPjo6dHlwZQpt
YWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwgY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIpIHsKICB0
eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6bWFrZV90dXBsZV9tYXBwZXI8VDAsIFQxLCBUMj46OnR5
cGUgdDsKICByZXR1cm4gdCh0MCwgdDEsIHQyKTsKfQoKdGVtcGxhdGU8Y2xhc3MgVDAsIGNsYXNz
IFQxLCBjbGFzcyBUMiwgY2xhc3MgVDM+CmlubGluZSB0eXBlbmFtZSBkZXRhaWw6Om1ha2VfdHVw
bGVfbWFwcGVyPFQwLCBUMSwgVDIsIFQzPjo6dHlwZQptYWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwg
Y29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQzJiB0MykgewogIHR5cGVkZWYgdHlw
ZW5hbWUgZGV0YWlsOjptYWtlX3R1cGxlX21hcHBlcjxUMCwgVDEsIFQyLCBUMz46OnR5cGUgdDsK
ICByZXR1cm4gdCh0MCwgdDEsIHQyLCB0Myk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQwLCBjbGFzcyBU
MSwgY2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBUND4KaW5saW5lIHR5cGVuYW1lIGRldGFpbDo6
bWFrZV90dXBsZV9tYXBwZXI8VDAsIFQxLCBUMiwgVDMsIFQ0Pjo6dHlwZQptYWtlX3R1cGxlKGNv
bnN0IFQwJiB0MCwgY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQzJiB0MywKICAg
ICAgICAgICAgICAgICAgY29uc3QgVDQmIHQ0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6
Om1ha2VfdHVwbGVfbWFwcGVyPFQwLCBUMSwgVDIsIFQzLCBUND46OnR5cGUgdDsKICByZXR1cm4g
dCh0MCwgdDEsIHQyLCB0MywgdDQpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUMCwgY2xhc3MgVDEsIGNs
YXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsIGNsYXNzIFQ1PgppbmxpbmUgdHlwZW5hbWUgZGV0
YWlsOjptYWtlX3R1cGxlX21hcHBlcjxUMCwgVDEsIFQyLCBUMywgVDQsIFQ1Pjo6dHlwZQptYWtl
X3R1cGxlKGNvbnN0IFQwJiB0MCwgY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQz
JiB0MywKICAgICAgICAgICAgICAgICAgY29uc3QgVDQmIHQ0LCBjb25zdCBUNSYgdDUpIHsKICB0
eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6bWFrZV90dXBsZV9tYXBwZXI8VDAsIFQxLCBUMiwgVDMs
IFQ0LCBUNT46OnR5cGUgdDsKICByZXR1cm4gdCh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1KTsKfQoK
dGVtcGxhdGU8Y2xhc3MgVDAsIGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0
LCBjbGFzcyBUNSwgY2xhc3MgVDY+CmlubGluZSB0eXBlbmFtZSBkZXRhaWw6Om1ha2VfdHVwbGVf
bWFwcGVyPFQwLCBUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2Pjo6dHlwZQptYWtlX3R1cGxlKGNvbnN0
IFQwJiB0MCwgY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQzJiB0MywKICAgICAg
ICAgICAgICAgICAgY29uc3QgVDQmIHQ0LCBjb25zdCBUNSYgdDUsIGNvbnN0IFQ2JiB0Nikgewog
IHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjptYWtlX3R1cGxlX21hcHBlcgogICAgICAgICAgIDxU
MCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNj46OnR5cGUgdDsKICByZXR1cm4gdCh0MCwgdDEsIHQy
LCB0MywgdDQsIHQ1LCB0Nik7Cn0KCnRlbXBsYXRlPGNsYXNzIFQwLCBjbGFzcyBUMSwgY2xhc3Mg
VDIsIGNsYXNzIFQzLCBjbGFzcyBUNCwgY2xhc3MgVDUsIGNsYXNzIFQ2LAogICAgICAgICBjbGFz
cyBUNz4KaW5saW5lIHR5cGVuYW1lIGRldGFpbDo6bWFrZV90dXBsZV9tYXBwZXI8VDAsIFQxLCBU
MiwgVDMsIFQ0LCBUNSwgVDYsIFQ3Pjo6dHlwZQptYWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwgY29u
c3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQzJiB0MywKICAgICAgICAgICAgICAgICAg
Y29uc3QgVDQmIHQ0LCBjb25zdCBUNSYgdDUsIGNvbnN0IFQ2JiB0NiwgY29uc3QgVDcmIHQ3KSB7
CiAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6Om1ha2VfdHVwbGVfbWFwcGVyCiAgICAgICAgICAg
PFQwLCBUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNz46OnR5cGUgdDsKICByZXR1cm4gdCh0MCwg
dDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUMCwgY2xhc3Mg
VDEsIGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsIGNsYXNzIFQ1LCBjbGFzcyBUNiwKICAg
ICAgICAgY2xhc3MgVDcsIGNsYXNzIFQ4PgppbmxpbmUgdHlwZW5hbWUgZGV0YWlsOjptYWtlX3R1
cGxlX21hcHBlcgogIDxUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4Pjo6dHlwZQpt
YWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwgY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0
IFQzJiB0MywKICAgICAgICAgICAgICAgICAgY29uc3QgVDQmIHQ0LCBjb25zdCBUNSYgdDUsIGNv
bnN0IFQ2JiB0NiwgY29uc3QgVDcmIHQ3LAogICAgICAgICAgICAgICAgICBjb25zdCBUOCYgdDgp
IHsKICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6bWFrZV90dXBsZV9tYXBwZXIKICAgICAgICAg
ICA8VDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOD46OnR5cGUgdDsKICByZXR1cm4g
dCh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KTsKfQoKdGVtcGxhdGU8Y2xhc3Mg
VDAsIGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0LCBjbGFzcyBUNSwgY2xh
c3MgVDYsCiAgICAgICAgIGNsYXNzIFQ3LCBjbGFzcyBUOCwgY2xhc3MgVDk+CmlubGluZSB0eXBl
bmFtZSBkZXRhaWw6Om1ha2VfdHVwbGVfbWFwcGVyCiAgPFQwLCBUMSwgVDIsIFQzLCBUNCwgVDUs
IFQ2LCBUNywgVDgsIFQ5Pjo6dHlwZQptYWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwgY29uc3QgVDEm
IHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQzJiB0MywKICAgICAgICAgICAgICAgICAgY29uc3Qg
VDQmIHQ0LCBjb25zdCBUNSYgdDUsIGNvbnN0IFQ2JiB0NiwgY29uc3QgVDcmIHQ3LAogICAgICAg
ICAgICAgICAgICBjb25zdCBUOCYgdDgsIGNvbnN0IFQ5JiB0OSkgewogIHR5cGVkZWYgdHlwZW5h
bWUgZGV0YWlsOjptYWtlX3R1cGxlX21hcHBlcgogICAgICAgICAgIDxUMCwgVDEsIFQyLCBUMywg
VDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOT46OnR5cGUgdDsKICByZXR1cm4gdCh0MCwgdDEsIHQyLCB0
MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSk7Cn0KCgoKCnRlbXBsYXRlPGNsYXNzIFQxPgppbmxp
bmUgdHVwbGU8VDEmPiB0aWUoVDEmIHQxKSB7CiAgcmV0dXJuIHR1cGxlPFQxJj4gKHQxKTsKfQoK
dGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyPgppbmxpbmUgdHVwbGU8VDEmLCBUMiY+IHRpZShU
MSYgdDEsIFQyJiB0MikgewogIHJldHVybiB0dXBsZTxUMSYsIFQyJj4gKHQxLCB0Mik7Cn0KCnRl
bXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDM+CmlubGluZSB0dXBsZTxUMSYsIFQy
JiwgVDMmPiB0aWUoVDEmIHQxLCBUMiYgdDIsIFQzJiB0MykgewogIHJldHVybiB0dXBsZTxUMSYs
IFQyJiwgVDMmPiAodDEsIHQyLCB0Myk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMiwg
Y2xhc3MgVDMsIGNsYXNzIFQ0PgppbmxpbmUgdHVwbGU8VDEmLCBUMiYsIFQzJiwgVDQmPiB0aWUo
VDEmIHQxLCBUMiYgdDIsIFQzJiB0MywgVDQmIHQ0KSB7CiAgcmV0dXJuIHR1cGxlPFQxJiwgVDIm
LCBUMyYsIFQ0Jj4gKHQxLCB0MiwgdDMsIHQ0KTsKfQoKdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNz
IFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsIGNsYXNzIFQ1PgppbmxpbmUgdHVwbGU8VDEmLCBUMiYs
IFQzJiwgVDQmLCBUNSY+CnRpZShUMSYgdDEsIFQyJiB0MiwgVDMmIHQzLCBUNCYgdDQsIFQ1JiB0
NSkgewogIHJldHVybiB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYsIFQ1Jj4gKHQxLCB0MiwgdDMs
IHQ0LCB0NSk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNz
IFQ0LCBjbGFzcyBUNSwgY2xhc3MgVDY+CmlubGluZSB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYs
IFQ1JiwgVDYmPgp0aWUoVDEmIHQxLCBUMiYgdDIsIFQzJiB0MywgVDQmIHQ0LCBUNSYgdDUsIFQ2
JiB0NikgewogIHJldHVybiB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYsIFQ1JiwgVDYmPiAodDEs
IHQyLCB0MywgdDQsIHQ1LCB0Nik7Cn0KCnRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xh
c3MgVDMsIGNsYXNzIFQ0LCBjbGFzcyBUNSwgY2xhc3MgVDYsIGNsYXNzIFQ3PgppbmxpbmUgdHVw
bGU8VDEmLCBUMiYsIFQzJiwgVDQmLCBUNSYsIFQ2JiwgVDcmPgp0aWUoVDEmIHQxLCBUMiYgdDIs
IFQzJiB0MywgVDQmIHQ0LCBUNSYgdDUsIFQ2JiB0NiwgVDcmIHQ3KSB7CiAgcmV0dXJuIHR1cGxl
PFQxJiwgVDImLCBUMyYsIFQ0JiwgVDUmLCBUNiYsIFQ3Jj4gKHQxLCB0MiwgdDMsIHQ0LCB0NSwg
dDYsIHQ3KTsKfQoKdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3Mg
VDQsIGNsYXNzIFQ1LCBjbGFzcyBUNiwgY2xhc3MgVDcsCiAgICAgICAgIGNsYXNzIFQ4Pgppbmxp
bmUgdHVwbGU8VDEmLCBUMiYsIFQzJiwgVDQmLCBUNSYsIFQ2JiwgVDcmLCBUOCY+CnRpZShUMSYg
dDEsIFQyJiB0MiwgVDMmIHQzLCBUNCYgdDQsIFQ1JiB0NSwgVDYmIHQ2LCBUNyYgdDcsIFQ4JiB0
OCkgewogIHJldHVybiB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYsIFQ1JiwgVDYmLCBUNyYsIFQ4
Jj4KICAgICAgICAgICAodDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KTsKfQoKdGVtcGxh
dGU8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsIGNsYXNzIFQ1LCBjbGFz
cyBUNiwgY2xhc3MgVDcsCiAgICAgICAgIGNsYXNzIFQ4LCBjbGFzcyBUOT4KaW5saW5lIHR1cGxl
PFQxJiwgVDImLCBUMyYsIFQ0JiwgVDUmLCBUNiYsIFQ3JiwgVDgmLCBUOSY+CnRpZShUMSYgdDEs
IFQyJiB0MiwgVDMmIHQzLCBUNCYgdDQsIFQ1JiB0NSwgVDYmIHQ2LCBUNyYgdDcsIFQ4JiB0OCwK
ICAgICAgICAgICBUOSYgdDkpIHsKICByZXR1cm4gdHVwbGU8VDEmLCBUMiYsIFQzJiwgVDQmLCBU
NSYsIFQ2JiwgVDcmLCBUOCYsIFQ5Jj4KICAgICAgICAgICAgKHQxLCB0MiwgdDMsIHQ0LCB0NSwg
dDYsIHQ3LCB0OCwgdDkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQz
LCBjbGFzcyBUNCwgY2xhc3MgVDUsIGNsYXNzIFQ2LCBjbGFzcyBUNywKICAgICAgICAgY2xhc3Mg
VDgsIGNsYXNzIFQ5LCBjbGFzcyBUMTA+CmlubGluZSB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYs
IFQ1JiwgVDYmLCBUNyYsIFQ4JiwgVDkmLCBUMTAmPgp0aWUoVDEmIHQxLCBUMiYgdDIsIFQzJiB0
MywgVDQmIHQ0LCBUNSYgdDUsIFQ2JiB0NiwgVDcmIHQ3LCBUOCYgdDgsCiAgICAgICAgICAgVDkm
IHQ5LCBUMTAmIHQxMCkgewogIHJldHVybiB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYsIFQ1Jiwg
VDYmLCBUNyYsIFQ4JiwgVDkmLCBUMTAmPgogICAgICAgICAgICh0MSwgdDIsIHQzLCB0NCwgdDUs
IHQ2LCB0NywgdDgsIHQ5LCB0MTApOwp9Cgp9Cn0KIyAzOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv
Ym9vc3QvdHVwbGUvdHVwbGUuaHBwIiAyCgoKCm5hbWVzcGFjZSBib29zdCB7Cgp1c2luZyB0dXBs
ZXM6OnR1cGxlOwp1c2luZyB0dXBsZXM6Om1ha2VfdHVwbGU7CnVzaW5nIHR1cGxlczo6dGllOwoK
dXNpbmcgdHVwbGVzOjpnZXQ7CiMgOTIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R1cGxl
L3R1cGxlLmhwcCIKfQojIDI4ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5o
cHAiIDIKCgojIDEgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2FueS5ocHAiIDEKIyAxMiAi
Li4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19jbGFzcy5ocHAiIDEKIyAyMSAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY2xhc3MuaHBwIgojIDEgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3NjYWxhci5ocHAiIDEKIyAyMSAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2NhbGFyLmhwcCIKIyAxICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYu
aHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC9ib29sX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw
ZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAi
IDIKIyAyMiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2NhbGFy
LmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19zY2FsYXJfaW1wbAp7CiAgIHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfb3I8IDo6Ym9vc3Q6OmlzX2FyaXRo
bWV0aWM8VD46OnZhbHVlLCA6OmJvb3N0Ojppc19lbnVtPFQ+Ojp2YWx1ZSwgOjpib29zdDo6aXNf
cG9pbnRlcjxUPjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX21lbWJlcl9wb2ludGVyPFQ+Ojp2YWx1ZSA+
Ojp2YWx1ZSk7CgoKCgoKCn07CgoKCnRlbXBsYXRlIDw+IHN0cnVjdCBpc19zY2FsYXJfaW1wbDx2
b2lkPnsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKCnRlbXBsYXRlIDw+IHN0
cnVjdCBpc19zY2FsYXJfaW1wbDx2b2lkIGNvbnN0Pnsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg
PSBmYWxzZTsgfTsKdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NjYWxhcl9pbXBsPHZvaWQgdm9sYXRp
bGU+eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOyB9Owp0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgaXNfc2NhbGFyX2ltcGw8dm9pZCBjb25zdCB2b2xhdGlsZT57IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gZmFsc2U7IH07CgoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNf
c2NhbGFyIDogbXBsOjpib29sXzwgOjpib29zdDo6ZGV0YWlsOjppc19zY2FsYXJfaW1wbDxUPjo6
dmFsdWUgPiB7IH07Cgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDU1ICIvdXNyL2xvY2FsL3NyYy9i
b29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19zY2FsYXIuaHBwIiAyCiMgMjIgIi91c3IvbG9jYWwv
c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcCIgMgoKCgoKCgoKIyAxICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9k
ZWYuaHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Rl
dGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3Iv
bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5o
cHAiIDIKIyAzMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY2xh
c3MuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFpbCB7CiMgNjQgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcCIKdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19jbGFzc19pbXBsCnsKCiAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX2FuZDwgOjpib29zdDo6dHlw
ZV90cmFpdHM6OmljZV9ub3Q8IDo6Ym9vc3Q6OmlzX3VuaW9uPFQ+Ojp2YWx1ZSA+Ojp2YWx1ZSwg
Ojpib29zdDo6dHlwZV90cmFpdHM6OmljZV9ub3Q8IDo6Ym9vc3Q6OmlzX3NjYWxhcjxUPjo6dmFs
dWUgPjo6dmFsdWUsIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc19h
cnJheTxUPjo6dmFsdWUgPjo6dmFsdWUsIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90PCA6
OmJvb3N0Ojppc19yZWZlcmVuY2U8VD46OnZhbHVlPjo6dmFsdWUsIDo6Ym9vc3Q6OnR5cGVfdHJh
aXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc192b2lkPFQ+Ojp2YWx1ZSA+Ojp2YWx1ZSwgOjpib29z
dDo6dHlwZV90cmFpdHM6OmljZV9ub3Q8IDo6Ym9vc3Q6OmlzX2Z1bmN0aW9uPFQ+Ojp2YWx1ZSA+
Ojp2YWx1ZSA+Ojp2YWx1ZSk7CiMgODcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf
dHJhaXRzL2lzX2NsYXNzLmhwcCIKfTsKCgoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1
Y3QgaXNfY2xhc3MgOiBtcGw6OmJvb2xfPCA6OmJvb3N0OjpkZXRhaWw6OmlzX2NsYXNzX2ltcGw8
VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBl
X3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyA5OCAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY2xhc3MuaHBwIiAyCiMgMTMgIi4uLy4uLy4u
L2Jvb3N0L2R5bmFtaWNfYW55L2FueS5ocHAiIDIKCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2lv
c2Z3ZCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdmd2Qu
aCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RyaW5nZndkLmgi
IDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0
IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsKCiAg
dGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAg
dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3Ry
aW5nOwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBzdHJpbmc7CiAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsKfQojIDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9pb3Nmd2QiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBv
cy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDMK
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j
Kytpby5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0
ZGlvIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCgoKCgoj
IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv
c3RkaW8uaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyA0NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVk
ZS9zdGRpby5oIiAyIDMKIyA1NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7
CiMgNjQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1
ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIvdXNyL2luY2x1
ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMjEgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoj
IDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIu
aCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewog
ICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJz
dGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1
Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7
CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0
ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIv
dXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs
dWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZf
Tk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZ
X0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAog
IF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1Is
CiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1Qg
PSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBf
X2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9h
ZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpf
X2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9k
YXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoq
LCBjb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29u
dl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2Nv
bnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19n
Y29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5z
aWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRl
ZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7
CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3Qg
Y2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsK
CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5z
X2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAg
X19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAg
c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9z
dGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBj
b25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9u
YW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9p
bml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50
IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5f
bmVlZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAg
dm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVk
IGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBf
X2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5h
bF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoK
CgogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3Ry
dWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0
ZXAgKl9fc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbMV07Cn0gKl9f
Z2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlv
bgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBf
X2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAg
fSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IDsKdHlw
ZWRlZiBpbnQgX0dfaW50MzJfdCA7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IDsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgOwojIDMzICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMg
NDMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv
c3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1
NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFy
a2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1
ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51
bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWws
CiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBfSU9f
Y29kZWN2dAp7CiAgdm9pZCAoKl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2dCAq
KTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0IF9J
T19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2Nv
ZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJz
dGF0ZV90ICosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19j
b2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqLCB3
Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No
YXJfdCAqLCB3Y2hhcl90ICoqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChzdHJ1
Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYpIChz
dHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0cnVj
dCBfSU9fY29kZWN2dCAqLCBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2NvZGVj
dnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZfdCBf
X2NkX2luOwogIF9HX2ljb252X3QgX19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2RhdGEK
ewogIHdjaGFyX3QgKl9JT19yZWFkX3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAgd2No
YXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hhcl90
ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAqX0lP
X2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9i
YXNlOwogIHdjaGFyX3QgKl9JT19iYWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfZW5k
OwoKICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3RhdGU7
CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1ZlsxXTsK
CiAgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJTEUg
ewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVh
ZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBj
aGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1
Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNo
YXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9f
bWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmls
ZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVk
IHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIg
X3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2dCAq
X2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGludCBf
bW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZv
aWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lP
X0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9J
T18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJy
XzsKIyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9f
cmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoK
CgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIGNv
bnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9f
b2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZv
aWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0
aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlw
ZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Ns
b3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lv
X3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpz
ZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7
CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7
CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAo
c3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5j
dGlvbnNfdCBfX2Zucyk7CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93
IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4g
aW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVy
ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7
CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQyNiAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9f
ZnApIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0
ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9y
IChfSU9fRklMRSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklM
RSAqX19mcCkgOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsK
ZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lP
X2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiAsIGNvbnN0IGNoYXIgKiAsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKikgOwpleHRlcm4gaW50
IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIDsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lP
X0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIDsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19G
SUxFICosIHZvaWQgKiwgc2l6ZV90KSA7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChf
SU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSA7CmV4dGVybiBfX29mZjY0X3QgX0lPX3Nl
ZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSA7CgpleHRlcm4gdm9pZCBfSU9fZnJl
ZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgOwoKCmV4dGVybiB3aW50X3QgX0lPX2dldHdjIChf
SU9fRklMRSAqX19mcCkgOwpleHRlcm4gd2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3djLCBf
SU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19md2lkZSAoX0lPX0ZJTEUgKl9fZnAsIGlu
dCBfX21vZGUpIDsKIyA1MDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lP
X3Zmd3NjYW5mIChfSU9fRklMRSAqICwgY29uc3Qgd2NoYXJfdCAqICwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKikgOwpleHRlcm4gaW50IF9JT192Zndwcmlu
dGYgKF9JT19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUg
Kiwgd2ludF90LCBfX3NzaXplX3QpIDsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfd2JhY2t1cF9hcmVh
IChfSU9fRklMRSAqKSA7CgoKCn0KIyA3NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA4MyAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRhcmcu
aCIgMSAzCiMgMTEwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
Mi9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyA4
NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z
dGRpby5oIiAyIDMKCgoKCgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9H
X2Zwb3M2NF90IGZwb3M2NF90OwojIDEzOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
c3RkaW9fbGltLmgiIDEgMwojIDEzOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpl
eHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwojIDE1MyAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4
dGVybiBpbnQgcmVtb3ZlIChjb25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7CgpleHRlcm4gaW50IHJl
bmFtZSAoY29uc3QgY2hhciAqX19vbGQsIGNvbnN0IGNoYXIgKl9fbmV3KSA7CgoKCgpleHRlcm4g
RklMRSAqdG1wZmlsZSAodm9pZCkgOwojIDE2OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxl
NjQgKHZvaWQpIDsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCgoKCmV4dGVy
biBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSA7CiMgMTg5ICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIg
KnRlbXBuYW0gKGNvbnN0IGNoYXIgKl9fZGlyLCBjb25zdCBjaGFyICpfX3BmeCkKICAgICA7CgoK
CgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNo
IChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAq
X19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSA7CgoKCgoKZXh0ZXJu
IEZJTEUgKmZvcGVuIChjb25zdCBjaGFyICogX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICogX19tb2RlcykgOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKGNvbnN0IGNo
YXIgKiBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fbW9k
ZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICogX19zdHJlYW0pIDsKIyAyMzMgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIg
MwpleHRlcm4gRklMRSAqZm9wZW42NCAoY29uc3QgY2hhciAqIF9fZmlsZW5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19tb2RlcykgOwpleHRlcm4gRklMRSAqZnJlb3Bl
bjY0IChjb25zdCBjaGFyICogX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqIF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKiBfX3N0cmVh
bSkgOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIGNvbnN0IGNoYXIgKl9fbW9k
ZXMpIDsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKiBfX21hZ2ljX2Nvb2tp
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19tb2RlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3Mp
IDsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBjb25z
dCBjaGFyICpfX21vZGVzKSA7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIg
KiogX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogX19zaXpl
bG9jKSA7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICogX19zdHJlYW0sIGNoYXIgKiBf
X2J1ZikgOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKiBfX3N0cmVhbSwgY2hhciAqIF9f
YnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSA7CgoKCgpl
eHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKiBfX3N0cmVhbSwgY2hhciAqIF9fYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIDsKCgpleHRlcm4gdm9pZCBzZXRsaW5l
YnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICogX19z
dHJlYW0sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pIDsK
CmV4dGVybiBpbnQgcHJpbnRmIChjb25zdCBjaGFyICogX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJu
IGludCBzcHJpbnRmIChjaGFyICogX19zLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KiBfX2Zvcm1hdCwgLi4uKSA7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqIF9fcywgY29u
c3QgY2hhciAqIF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZykgOwoKZXh0ZXJuIGludCB2cHJpbnRmIChjb25zdCBjaGFyICogX19mb3JtYXQsIF9fZ251
Y192YV9saXN0IF9fYXJnKQogICAgIDsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKiBfX3Ms
IGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp
c3QgX19hcmcpIDsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqIF9fcywgc2l6ZV90IF9f
bWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19mb3JtYXQsIC4uLikK
ICAgICA7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqIF9fcywgc2l6ZV90IF9fbWF4bGVu
LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LCBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICA7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKiogX19w
dHIsIGNvbnN0IGNoYXIgKiBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICA7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKiBfX3B0ciwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19mbXQsIC4uLikKICAgICA7CmV4dGVy
biBpbnQgYXNwcmludGYgKGNoYXIgKiogX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKiBfX2ZtdCwgLi4uKQogICAgIDsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19m
ZCwgY29uc3QgY2hhciAqIF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICA7CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIGNvbnN0IGNoYXIg
KiBfX2ZtdCwgLi4uKQogICAgIDsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICogX19zdHJl
YW0sCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19mb3JtYXQsIC4uLikgOwoKZXh0
ZXJuIGludCBzY2FuZiAoY29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQg
c3NjYW5mIChjb25zdCBjaGFyICogX19zLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
IF9fZm9ybWF0LCAuLi4pIDsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICogX19zLCBjb25z
dCBjaGFyICogX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h
cmcpCiAgICAgOwoKCmV4dGVybiBpbnQgdnNjYW5mIChjb25zdCBjaGFyICogX19mb3JtYXQsIF9f
Z251Y192YV9saXN0IF9fYXJnKQogICAgIDsKCgpleHRlcm4gaW50IHZzc2NhbmYgKGNvbnN0IGNo
YXIgKiBfX3MsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LCBfX2du
dWNfdmFfbGlzdCBfX2FyZykKICAgICA7CgoKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0
cmVhbSkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBn
ZXRjaGFyICh2b2lkKSA7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgOwoKCgoKZXh0ZXJu
IGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnB1
dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywg
RklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIDsKCgoKCgoK
CmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoK
CgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4
dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4dGVybiBpbnQgZ2V0
dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9f
c3RyZWFtKSA7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKiBfX3MsIGludCBfX24sIEZJ
TEUgKiBfX3N0cmVhbSkKICAgICA7CgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hh
ciAqIF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICogX19z
dHJlYW0pIDsKCgoKCmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIDsKIyA0MzcgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIg
MwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKiogX19saW5lcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICogX19zdHJlYW0pIDsKZXh0ZXJuIF9f
c3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKiBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICogX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRklMRSAqIF9fc3RyZWFtKSA7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5l
IChjaGFyICoqIF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKiBfX3N0cmVhbSkgOwoKCgoK
ZXh0ZXJuIGludCBmcHV0cyAoY29uc3QgY2hhciAqIF9fcywgRklMRSAqIF9fc3RyZWFtKQogICAg
IDsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoY29uc3QgY2hhciAqIF9fcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRklMRSAqIF9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgcHV0
cyAoY29uc3QgY2hhciAqX19zKSA7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxF
ICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICogX19wdHIsIHNpemVf
dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKiBfX3N0cmVh
bSkgOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKGNvbnN0IHZvaWQgKiBfX3B0ciwgc2l6ZV90IF9f
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKiBfX3MpIDsKCgoK
ZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXpl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICogX19zdHJl
YW0pIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKGNvbnN0IHZvaWQgKiBfX3B0ciwg
c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s
IEZJTEUgKiBfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0s
IGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsKCmV4dGVybiBsb25nIGludCBmdGVsbCAo
RklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIDsK
IyA1MDAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1
ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3Qg
X19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0
cmVhbSkgOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKiBfX3N0cmVhbSwgZnBvc190ICog
X19wb3MpCiAgICAgOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgY29uc3Qg
ZnBvc190ICpfX3BvcykgOwojIDUzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUg
Kl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgOwpleHRlcm4gX19vZmY2
NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklM
RSAqIF9fc3RyZWFtLCBmcG9zNjRfdCAqIF9fcG9zKQogICAgIDsKZXh0ZXJuIGludCBmc2V0cG9z
NjQgKEZJTEUgKl9fc3RyZWFtLCBjb25zdCBmcG9zNjRfdCAqX19wb3MpIDsKCgoKZXh0ZXJuIHZv
aWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9f
c3RyZWFtKSA7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJu
IHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVv
Zl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKGNvbnN0IGNoYXIgKl9f
cykgOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHN5
c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBjb25zdCBjaGFyICpj
b25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJl
YW0pIDsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoK
CgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKGNvbnN0IGNoYXIgKl9fY29tbWFuZCwgY29uc3QgY2hh
ciAqX19tb2RlcykgOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgOwoKCgoK
CmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsKCgoKCgpleHRlcm4gY2hhciAqY3Vz
ZXJpZCAoY2hhciAqX19zKSA7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3Rh
Y2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqIF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pIDsKZXh0ZXJuIGludCBvYnN0YWNr
X3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICogX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSA7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUg
KEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0
cmVhbSkgOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwojIDY0
NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z
dGRpby5oIiAzCn0KIyA1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAyIDMK
IyA5NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVhcmVycjsK
ICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7CiAgdXNp
bmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAgdXNpbmcg
OjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2luZyA6OmZw
dXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZyZW9wZW47
CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRwb3M7CiAg
dXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAgdXNpbmcg
OjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2luZyA6OnBy
aW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6cHV0czsK
ICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2luZDsKICB1
c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsKICB1c2lu
ZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwogIHVzaW5n
IDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAgdXNpbmcg
Ojp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAxNTMgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2NzdGRpbyIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OnNucHJp
bnRmOwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6OnZzY2FuZjsKICB1c2luZyA6OnZzbnBy
aW50ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251
X2N4eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251
X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNucHJpbnRmOwogIHVzaW5nIF9fZ251
X2N4eDo6dnNzY2FuZjsKfQojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBj
LWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMSAzCiMgOTggIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1
bHQuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgt
Z251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAx
IDMKIyAyMCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zY2hl
ZC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgi
IDMKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsK
CmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAqX19h
cmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAgICBpbnQgX19mbGFncywg
dm9pZCAqX19hcmcpIDsKCgp9CiMgMzMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgoKCmV4
dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIGNv
bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICA7CgoKZXh0ZXJuIGludCBzY2hl
ZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSA7
CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3Bv
bGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9w
YXJhbSAqX19wYXJhbSkgOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90
IF9fcGlkKSA7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgOwoKCmV4dGVybiBpbnQg
c2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSA7CgoKZXh0ZXJuIGludCBz
Y2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0pIDsKCgpleHRlcm4gaW50IHNj
aGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3Qp
IDsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuICJDIiB7CgoK
CgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAyIDMKIyAxMTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRtCnsKICBpbnQgdG1f
c2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRt
X21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQg
dG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgY29uc3QgY2hhciAqdG1fem9uZTsK
CgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9p
bnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdl
dmVudDsKIyAxNjMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGNsb2NrX3QgY2xvY2sg
KHZvaWQpIDsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgOwoKCmV4dGVy
biBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkKICAgICA7
CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOwoKCgoKCmV4dGVybiBz
aXplX3Qgc3RyZnRpbWUgKGNoYXIgKiBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RydWN0IHRtICogX190cCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChj
b25zdCBjaGFyICogX19zLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX2Zt
dCwgc3RydWN0IHRtICpfX3RwKQogICAgIDsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUg
KGNvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUg
KGNvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3Ig
KGNvbnN0IHRpbWVfdCAqIF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgdG0gKiBfX3RwKSA7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChjb25zdCB0
aW1lX3QgKiBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRt
ICogX190cCkgOwoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqX190
cCkgOwoKCmV4dGVybiBjaGFyICpjdGltZSAoY29uc3QgdGltZV90ICpfX3RpbWVyKSA7CgoKCgoK
CmV4dGVybiBjaGFyICphc2N0aW1lX3IgKGNvbnN0IHN0cnVjdCB0bSAqIF9fdHAsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKiBfX2J1ZikgOwoKCmV4dGVybiBjaGFyICpjdGltZV9yIChj
b25zdCB0aW1lX3QgKiBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqIF9fYnVm
KSA7CgoKCgpleHRlcm4gY2hhciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsK
ZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoK
CgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkgOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRl
cm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoY29uc3QgdGltZV90
ICpfX3doZW4pIDsKIyAyNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0
aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1
Y3QgdG0gKl9fdHApIDsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgOwoKCgoKCmV4
dGVybiBpbnQgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3Rp
bWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSA7
CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0
IHRpbWVzcGVjICpfX3JlcykgOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90
IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgOwoKCmV4dGVybiBpbnQgY2xvY2tf
c2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190
cCkKICAgICA7CgoKCmV4dGVybiBpbnQgY2xvY2tfbmFub3NsZWVwIChjbG9ja2lkX3QgX19jbG9j
a19pZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1
Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRp
bWVzcGVjICpfX3JlbSkgOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3Qg
X19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgOwoKCgoKZXh0ZXJuIGludCB0aW1lcl9jcmVh
dGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNpZ2V2ZW50ICogX19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICogX190
aW1lcmlkKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSA7
CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50IF9fZmxh
Z3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKiBf
X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjICogX19v
dmFsdWUpIDsKCgpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBz
dHJ1Y3QgaXRpbWVyc3BlYyAqX192YWx1ZSkKICAgICA7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRv
dmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUg
KGNvbnN0IGNoYXIgKl9fc3RyaW5nKSA7CiMgMzU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4
dGVybiBpbnQgZ2V0ZGF0ZV9yIChjb25zdCBjaGFyICogX19zdHJpbmcsCiAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgdG0gKiBfX3Jlc2J1ZnApIDsKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUv
cHRocmVhZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91
c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2lnc2V0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwojIDM3MSAi
L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDI2ICIvdXNy
L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5o
IiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMg
NTkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9J
TkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9J
TkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRI
UkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0Kewog
IFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAg
UFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAK
CiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQ
VEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBU
SFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQ
VEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVB
RF9NVVRFWF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0Kewog
IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoK
CmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xP
Q0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJF
Q1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tf
UFJFRkVSX1dSSVRFUl9OUAp9OwojIDEzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpzdHJ1
Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICop
OwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2Ns
ZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJM
RSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxf
REVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90
ICogX190aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfYXR0
cl90ICogX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKl9fc3RhcnRf
cm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBfX2Fy
ZykgOwoKCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSA7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQy
KSA7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICA7CgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVh
ZF9yZXR1cm4pIDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190
aCkgOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3Qg
Kl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0
cl90ICpfX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAo
cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2RldGFjaHN0YXRlKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0
ZGV0YWNoc3RhdGUgKGNvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIDsKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqIF9fYXR0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVk
X3BhcmFtICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkg
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKGNvbnN0IHB0aHJlYWRf
YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
KiBfX3BhcmFtKQogICAgIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGlj
eSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAgIDsKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAoY29uc3QgcHRocmVhZF9hdHRyX3QgKgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKiBfX3Bv
bGljeSkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChw
dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2luaGVyaXQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhl
cml0c2NoZWQgKGNvbnN0IHB0aHJlYWRfYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqIF9faW5oZXJpdCkKICAgICA7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBf
X3Njb3BlKQogICAgIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAoY29uc3Qg
cHRocmVhZF9hdHRyX3QgKiBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgKiBfX3Njb3BlKSA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6
ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19ndWFyZHNpemUpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n
ZXRndWFyZHNpemUgKGNvbnN0IHB0aHJlYWRfYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqIF9fZ3VhcmRzaXplKQogICAgIDsKCgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAq
X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fc3Rh
Y2thZGRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChjb25zdCBw
dGhyZWFkX2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19h
dHRyLCB2b2lkICoqIF9fc3RhY2thZGRyKQogICAgIDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9zZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIDsK
CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFjayAoY29uc3QgcHRocmVhZF9hdHRyX3Qg
KiBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqIF9fc3Rh
Y2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogX19zdGFj
a3NpemUpIDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fc3RhY2tzaXplKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tz
aXplIChjb25zdCBwdGhyZWFkX2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19hdHRyLCBzaXplX3QgKiBfX3N0YWNrc2l6ZSkKICAgICA7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9nZXRhdHRyX25wIChwdGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3QgKl9f
YXR0cikgOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90
IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIDsKCgpleHRl
cm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIF9fcG9saWN5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICogX19wYXJhbSkK
ICAgICA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIDsKCgoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9pZCkgOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
bXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICogX19tdXRleCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIDsKCgpleHRlcm4gaW50
IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSA7CgoKCmV4dGVy
biBpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqIF9fbXV0ZXgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3Bl
YyAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgOwoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgp
IDsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4
YXR0cl90ICpfX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kg
KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl
eGF0dHJfZ2V0cHNoYXJlZCAoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCAqIF9fcHNoYXJlZCkgOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIDsK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhh
dHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4YXR0cl9nZXR0eXBlIChjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqIF9fa2luZCkgOwoKCgoKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9jb25kX3QgKiBfX2NvbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSA7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX2NvbmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoK
CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqIF9fY29uZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICogX19tdXRleCkg
OwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3Qg
KiBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRl
eF90ICogX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dHJ1Y3QgdGltZXNwZWMgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJz
dGltZSkgOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRfY29u
ZGF0dHJfdCAqX19hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kg
KHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRh
dHRyX2dldHBzaGFyZWQgKGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKiBfX3BzaGFyZWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSA7CgoKCgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0aHJlYWRfcndsb2NrX3QgKiBfX3J3bG9j
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX3J3bG9ja2F0
dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyKSA7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykg
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpf
X3J3bG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFk
X3J3bG9ja190ICpfX3J3bG9jaykgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVk
cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICogX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgOwoKCgpleHRlcm4gaW50IHB0aHJl
YWRfcndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIDsKCgpleHRlcm4g
aW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2sp
IDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9yd2xv
Y2tfdCAqIF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdHJ1Y3QgdGltZXNwZWMgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2Fic3RpbWUpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0
aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSA7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j
a2F0dHJfaW5pdCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIp
IDsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChjb25zdCBwdGhy
ZWFkX3J3bG9ja2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
ICogX19wc2hhcmVkKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJl
ZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y
d2xvY2thdHRyX2dldGtpbmRfbnAgKGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSA7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xv
Y2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fcHJlZikgOwojIDUwOSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4g
aW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50IF9f
cHNoYXJlZCkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fZGVzdHJveSAocHRocmVh
ZF9zcGlubG9ja190ICpfX2xvY2spIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChw
dGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3Ry
eWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3NwaW5fdW5sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9iYXJyaWVyX3QgKiBfX2JhcnJpZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJf
dCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgdW5zaWduZWQgaW50
IF9fY291bnQpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRf
YmFycmllcl90ICpfX2JhcnJpZXIpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9p
bml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgOwoKZXh0ZXJuIGludCBwdGhyZWFk
X2JhcnJpZXJhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSA7Cgpl
eHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNoYXJlZCAoY29uc3QgcHRocmVhZF9i
YXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq
IF9fcHNoYXJlZCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX3NldHBzaGFyZWQg
KHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2Jh
cnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgOwojIDU1NiAiL3Vzci9p
bmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVh
ZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19k
ZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0
ZSAocHRocmVhZF9rZXlfdCBfX2tleSkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZp
YyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB2b2lkICpfX3BvaW50ZXIpIDsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZp
YyAocHRocmVhZF9rZXlfdCBfX2tleSkgOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MwpleHRlcm4gaW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9s
LAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkp
IDsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwg
aW50ICpfX29sZHN0YXRlKSA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChp
bnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwg
KHB0aHJlYWRfdCBfX3RocmVhZCkgOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2Vs
ICh2b2lkKSA7CiMgNjEwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9w
dGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5l
KSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Fy
ZykgOwoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRo
cmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19leGVjdXRlKSA7CiMgNjMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAz
CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFk
X2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FyZykgOwojIDY0MiAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3JlIChz
dHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVjdXRlKSA7CgoKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19jbG9ja19pZCkgOwoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9i
aXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3cs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICogX19uZXdtYXNr
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdzZXRfdCAqIF9fb2xkbWFzayk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8p
IDsKIyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDY3MSAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJl
KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZv
aWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSA7
CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgOwoK
fQojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2d0aHItZGVmYXVsdC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5
X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhy
ZWFkX211dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFk
X29uY2UKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVh
ZF9rZXlfZGVsZXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2Vh
ayBwdGhyZWFkX3NldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdt
YSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdHJ5
bG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIAojIDgwICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAz
CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2
b2lkICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0
ZTsKICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsKfQojIDQzNyAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIg
MwpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25j
ZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAg
ICByZXR1cm4gcHRocmVhZF9vbmNlIChvbmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7
Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5
X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2Ny
ZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kdG9y
IChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2b2lkICpwdHIpCnsKCiAgaWYgKHB0cikKICAgIHJldHVy
biBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIDApOwogIGVsc2UKICAgIHJldHVybiAwOwp9Cgpz
dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtl
eSkKewogIHJldHVybiBwdGhyZWFkX2tleV9kZWxldGUgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUg
dm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJl
dHVybiBwdGhyZWFkX2dldHNwZWNpZmljIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0
aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikK
ewogIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIHB0cik7Cn0KCnN0YXRpYyBpbmxp
bmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsK
ICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9j
ayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0
aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9f
Z3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X3RyeWxvY2sgKG11
dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFk
X211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVh
ZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X3VubG9jayAobXV0ZXgpOwog
IGVsc2UKICAgIHJldHVybiAwOwp9CiMgOTkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2
ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBz
dGQKewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVh
bXNpemU7CgogIHR5cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3Nf
dCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoK
CiAgdHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAg
dHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9
IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0Owog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
b2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAw
ODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
dW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2Fz
ZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0g
MHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
YmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWls
Yml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9jd2NoYXIiIDMKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jdGlt
ZSIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAzCiMgNjQgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n
IDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNs
b2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1l
OwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwog
IHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0
eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAzCnN0cnVjdCB0bTsKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3
Y2hhcl90ICogX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICog
X19zcmMpIDsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90ICogX19kZXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIF9fc3JjLCBzaXplX3QgX19uKQog
ICAgIDsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICogX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICogX19zcmMpIDsKCmV4dGVybiB3Y2hhcl90
ICp3Y3NuY2F0ICh3Y2hhcl90ICogX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgd2NoYXJfdCAqIF9fc3JjLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gaW50IHdjc2Nt
cCAoY29uc3Qgd2NoYXJfdCAqX19zMSwgY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICA7CgpleHRl
cm4gaW50IHdjc25jbXAgKGNvbnN0IHdjaGFyX3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIs
IHNpemVfdCBfX24pCiAgICAgOwoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKGNvbnN0IHdjaGFy
X3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIpIDsKCgpleHRlcm4gaW50IHdjc25jYXNlY21w
IChjb25zdCB3Y2hhcl90ICpfX3MxLCBjb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uKSA7CgoKCgoKZXh0ZXJuIGludCBfX3djc2Nhc2VjbXBfbCAo
Y29uc3Qgd2NoYXJfdCAqX19zMSwgY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwoKZXh0ZXJuIGludCBfX3djc25jYXNlY21w
X2wgKGNvbnN0IHdjaGFyX3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSA7CgoKCgpleHRl
cm4gaW50IHdjc2NvbGwgKGNvbnN0IHdjaGFyX3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIp
IDsKCgoKZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICogX19zMSwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB3Y2hhcl90ICogX19zMiwgc2l6ZV90IF9fbikgOwoKCgoKCgoKZXh0
ZXJuIGludCBfX3djc2NvbGxfbCAoY29uc3Qgd2NoYXJfdCAqX19zMSwgY29uc3Qgd2NoYXJfdCAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwoKCgpleHRl
cm4gc2l6ZV90IF9fd2NzeGZybV9sICh3Y2hhcl90ICpfX3MxLCBjb25zdCB3Y2hhcl90ICpfX3My
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9j
KSA7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoY29uc3Qgd2NoYXJfdCAqX19zKSA7CgoKCmV4
dGVybiB3Y2hhcl90ICp3Y3NjaHIgKGNvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2Mp
CiAgICAgOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKGNvbnN0IHdjaGFyX3QgKl9fd2NzLCB3
Y2hhcl90IF9fd2MpCiAgICAgOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nocm51bCAoY29uc3Qg
d2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Nj
c3BuIChjb25zdCB3Y2hhcl90ICpfX3djcywgY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAg
OwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChjb25zdCB3Y2hhcl90ICpfX3djcywgY29uc3Qgd2No
YXJfdCAqX19hY2NlcHQpCiAgICAgOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKGNvbnN0IHdj
aGFyX3QgKl9fd2NzLCBjb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICA7CgpleHRlcm4gd2No
YXJfdCAqd2Nzc3RyIChjb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBjb25zdCB3Y2hhcl90ICpf
X25lZWRsZSkKICAgICA7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKGNvbnN0IHdjaGFyX3Qg
Kl9faGF5c3RhY2ssIGNvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIDsKCgoKZXh0ZXJuIHdj
aGFyX3QgKndjc3RvayAod2NoYXJfdCAqIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgd2NoYXJfdCAqIF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiog
X19wdHIpIDsKCgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoY29uc3Qgd2NoYXJfdCAqX19zKSA7CgoK
CmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhs
ZW4pCiAgICAgOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKGNvbnN0IHdjaGFyX3QgKl9f
cywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgICAgOwoKCmV4dGVybiBpbnQgd21lbWNtcCAo
Y29uc3Qgd2NoYXJfdCAqIF9fczEsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAq
IF9fczIsIHNpemVfdCBfX24pCiAgICAgOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hh
cl90ICogX19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBfX3My
LCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19z
MSwgY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICA7CgoKZXh0ZXJuIHdjaGFy
X3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIDsKCgoK
CmV4dGVybiB3Y2hhcl90ICp3bWVtcGNweSAod2NoYXJfdCAqIF9fczEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIF9fczIsIHNpemVfdCBfX24pCiAgICAgOwoKCgoK
CmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIDsKCgoKZXh0ZXJuIGludCB3Y3RvYiAod2lu
dF90IF9fYykgOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKGNvbnN0IG1ic3RhdGVfdCAqX19wcykg
OwoKCgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKiBfX3B3YywKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICogX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAg
ICAgICAgIG1ic3RhdGVfdCAqX19wKSA7CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICog
X19zLCB3Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICogX19w
cykgOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKGNvbnN0IGNoYXIgKiBfX3MsIHNpemVfdCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqIF9fcHMpIDsKZXh0ZXJuIHNp
emVfdCBtYnJsZW4gKGNvbnN0IGNoYXIgKiBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg
ICAgICAgICBtYnN0YXRlX3QgKiBfX3BzKSA7CiMgMjk3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqIF9fZHN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqKiBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgbWJzdGF0ZV90ICogX19wcykgOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0
b21icyAoY2hhciAqIF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJf
dCAqKiBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0
ZV90ICogX19wcykgOwoKCgoKCmV4dGVybiBzaXplX3QgbWJzbnJ0b3djcyAod2NoYXJfdCAqIF9f
ZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiogX19zcmMsIHNpemVf
dCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVf
dCAqIF9fcHMpIDsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICogX19kc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiBfX3NyYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYnN0YXRlX3QgKiBfX3BzKSA7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0
aCAod2NoYXJfdCBfX2MpIDsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoY29uc3Qgd2NoYXJfdCAq
X19zLCBzaXplX3QgX19uKSA7CgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKGNvbnN0IHdjaGFy
X3QgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqIF9fZW5kcHRyKSA7
CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKiogX19lbmRwdHIpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHdj
c3RvbGQgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqIF9fZW5kcHRyKSA7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoY29u
c3Qgd2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKiBf
X2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91
bCAoY29uc3Qgd2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdjaGFyX3QgKiogX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwojIDM3OSAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMKCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKGNvbnN0IHdj
aGFyX3QgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiog
X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgd2NzdG91bGwgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqIF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgOwojIDQxMCAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDMKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wgKGNvbnN0IHdjaGFyX3Qg
KiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqIF9fZW5kcHRy
LCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xv
YykgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChjb25zdCB3Y2hhcl90
ICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KiogX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwgX19sb2NhbGVfdCBfX2xvYykgOwoKCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9s
bF9sIChjb25zdCB3Y2hhcl90ICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIDsKCgpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3djc3RvdWxsX2wgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBf
X2xvY2FsZV90IF9fbG9jKQogICAgIDsKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfbCAoY29uc3Qg
d2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqIF9f
ZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIDsKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9s
IChjb25zdCB3Y2hhcl90ICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKiBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICA7CgpleHRlcm4gbG9uZyBkb3Vi
bGUgX193Y3N0b2xkX2wgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7CgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3djc3Rv
ZF9pbnRlcm5hbCAoY29uc3Qgd2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRl
cm4gZmxvYXQgX193Y3N0b2ZfaW50ZXJuYWwgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwgaW50IF9fZ3Jv
dXApCiAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVybmFsIChjb25zdCB3
Y2hhcl90ICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqIF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19ncm91cCkgOwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoY29u
c3Qgd2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqIF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3dj
c3RvdWxfaW50ZXJuYWwgKGNvbnN0IHdjaGFyX3QgKiBfX25wdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv
dXApIDsKCgoKCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoY29uc3Qg
d2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqIF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVybmFsIChjb25zdCB3Y2hhcl90ICoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW5kcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19ncm91cCkgOwojIDUyOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdj
aGFyX3QgKndjcGNweSAod2NoYXJfdCAqX19kZXN0LCBjb25zdCB3Y2hhcl90ICpfX3NyYykgOwoK
CgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0LCBjb25zdCB3Y2hhcl90
ICpfX3NyYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoKCgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJ
TEUgKl9fZnAsIGludCBfX21vZGUpIDsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICog
X19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBfX2Zvcm1hdCwg
Li4uKQogICAgIDsKCmV4dGVybiBpbnQgd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqIF9fZm9ybWF0
LCAuLi4pCiAgICAgOwoKZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqIF9fcywgc2l6ZV90
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIF9fZm9ybWF0LCAuLi4p
CiAgICAgOwoKCmV4dGVybiBpbnQgdmZ3cHJpbnRmIChfX0ZJTEUgKiBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB3Y2hhcl90ICogX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChjb25z
dCB3Y2hhcl90ICogX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0
IF9fYXJnKQogICAgIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqIF9fcywgc2l6
ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBfX2Zvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIDsKCgoKZXh0
ZXJuIGludCBmd3NjYW5mIChfX0ZJTEUgKiBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBj
b25zdCB3Y2hhcl90ICogX19mb3JtYXQsIC4uLikKICAgICA7CgpleHRlcm4gaW50IHdzY2FuZiAo
Y29uc3Qgd2NoYXJfdCAqIF9fZm9ybWF0LCAuLi4pCiAgICAgOwoKZXh0ZXJuIGludCBzd3NjYW5m
IChjb25zdCB3Y2hhcl90ICogX19zLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3Qg
KiBfX2Zvcm1hdCwgLi4uKQogICAgIDsKCgoKCmV4dGVybiBpbnQgdmZ3c2NhbmYgKF9fRklMRSAq
IF9fcywKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIF9fZm9ybWF0LAogICAg
ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICA7CgpleHRlcm4gaW50
IHZ3c2NhbmYgKGNvbnN0IHdjaGFyX3QgKiBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBf
X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChjb25zdCB3
Y2hhcl90ICogX19zLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICogX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIDsKCgoK
CmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiB3aW50X3Qg
Z2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gd2ludF90IGdldHdjaGFyICh2b2lk
KSA7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJl
YW0pIDsKZXh0ZXJuIHdpbnRfdCBwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFt
KSA7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhciAod2NoYXJfdCBfX3djKSA7CgoKCgpleHRlcm4g
d2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICogX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgX19GSUxFICogX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IGZwdXR3cyAoY29uc3Qg
d2NoYXJfdCAqIF9fd3MsCiAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKiBfX3N0cmVhbSkgOwoK
CgpleHRlcm4gd2ludF90IHVuZ2V0d2MgKHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSA7
CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgOwpl
eHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9ja2VkICh2b2lkKSA7CgoKZXh0ZXJuIHdpbnRfdCBm
Z2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gd2ludF90IGZwdXR3
Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiB3
aW50X3QgcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgOwpl
eHRlcm4gd2ludF90IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpIDsKCgoKZXh0ZXJu
IHdjaGFyX3QgKmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAqIF9fd3MsIGludCBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqIF9fc3RyZWFtKSA7CgoKZXh0ZXJu
IGludCBmcHV0d3NfdW5sb2NrZWQgKGNvbnN0IHdjaGFyX3QgKiBfX3dzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19GSUxFICogX19zdHJlYW0pIDsKCgoKCgoKZXh0ZXJuIHNpemVfdCB3
Y3NmdGltZSAod2NoYXJfdCAqIF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdHJ1Y3QgdG0gKiBfX3RwKSA7CiMgNjgwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
Mwp9CiMgNTUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIgMiAzCiMgNjkgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu
ZyA6Om1ic3RhdGVfdDsKfQojIDEzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3djaGFy
IiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OmJ0b3djOwog
IHVzaW5nIDo6ZmdldHdjOwogIHVzaW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1dHdjOwogIHVz
aW5nIDo6ZnB1dHdzOwogIHVzaW5nIDo6ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50ZjsKICB1c2lu
ZyA6OmZ3c2NhbmY7CiAgdXNpbmcgOjpnZXR3YzsKICB1c2luZyA6OmdldHdjaGFyOwogIHVzaW5n
IDo6bWJybGVuOwogIHVzaW5nIDo6bWJydG93YzsKICB1c2luZyA6Om1ic2luaXQ7CiAgdXNpbmcg
OjptYnNydG93Y3M7CiAgdXNpbmcgOjpwdXR3YzsKICB1c2luZyA6OnB1dHdjaGFyOwogIHVzaW5n
IDo6c3dwcmludGY7CiAgdXNpbmcgOjpzd3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3YzsKICB1c2lu
ZyA6OnZmd3ByaW50ZjsKICB1c2luZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3cHJpbnRmOwog
IHVzaW5nIDo6dnN3c2NhbmY7CiAgdXNpbmcgOjp2d3ByaW50ZjsKICB1c2luZyA6OnZ3c2NhbmY7
CiAgdXNpbmcgOjp3Y3J0b21iOwogIHVzaW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6d2NzY21wOwog
IHVzaW5nIDo6d2NzY29sbDsKICB1c2luZyA6Ondjc2NweTsKICB1c2luZyA6Ondjc2NzcG47CiAg
dXNpbmcgOjp3Y3NmdGltZTsKICB1c2luZyA6Ondjc2xlbjsKICB1c2luZyA6Ondjc25jYXQ7CiAg
dXNpbmcgOjp3Y3NuY21wOwogIHVzaW5nIDo6d2NzbmNweTsKICB1c2luZyA6Ondjc3J0b21iczsK
ICB1c2luZyA6Ondjc3NwbjsKICB1c2luZyA6Ondjc3RvZDsKICB1c2luZyA6Ondjc3RvZjsKICB1
c2luZyA6Ondjc3RvazsKICB1c2luZyA6Ondjc3RvbDsKICB1c2luZyA6Ondjc3RvdWw7CiAgdXNp
bmcgOjp3Y3N4ZnJtOwogIHVzaW5nIDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21wOwogIHVzaW5n
IDo6d21lbWNweTsKICB1c2luZyA6OndtZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNldDsKICB1c2lu
ZyA6OndwcmludGY7CiAgdXNpbmcgOjp3c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hyOwoKICBpbmxp
bmUgd2NoYXJfdCoKICB3Y3NjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVy
biB3Y3NjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2lu
ZyA6Ondjc3Bicms7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3Bicmsod2NoYXJfdCogX19zMSwg
d2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJf
dCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6Ondjc3JjaHI7CgogIGlubGluZSB3Y2hhcl90
KgogIHdjc3JjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NyY2hy
KGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3Nz
dHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBf
X3MyKQogIHsgcmV0dXJuIHdjc3N0cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwg
X19zMik7IH0KCiAgdXNpbmcgOjp3bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hy
KHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gd21lbWNo
cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MsIF9fbik7IH0KfQoKCgoKCgoK
bmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5nIDo6d2NzdG9s
bDsKICB1c2luZyA6Ondjc3RvdWxsOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9j
eHg6Ondjc3RvbGQ7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5nIF9fZ251X2N4
eDo6d2NzdG91bGw7Cn0KIyA0NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9z
LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4K
ICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBf
X3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAg
X19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAg
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUo
X19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01f
b2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhz
dHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAg
IDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1v
ZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y
Kz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0g
X19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFt
b2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAr
PSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9w
ZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7
CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAg
IGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRv
ciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19w
b3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2Zm
IF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3Rh
dGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOwoK
fQojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDIgMwojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsK
CiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xv
Z2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRl
cmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWls
dXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
aW9zZndkIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
aW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29z
dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4s
CiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxs
b2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+
ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAg
dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3Ry
aW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs
YXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVm
IGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3Ry
ZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hh
cj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwog
IHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFz
aWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVi
dWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNp
Y19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdp
b3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4g
d2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7
CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3Ry
ZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+
IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cn0K
IyAxOSAiLi4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIgMgoKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDY1
ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19h
c3NlcnRfZmFpbCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgY29uc3QgY2hh
ciAqX19mdW5jdGlvbikKICAgICA7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwg
KGludCBfX2Vycm51bSwgY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgOwoKCgoKZXh0ZXJuIHZvaWQg
X19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGlu
dCBfX2xpbmUpCiAgICAgOwoKCn0KIyA0OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY2Fz
c2VydCIgMiAzCiMgMjEgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2FueS5ocHAiIDIKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMSAzCiMgMzggIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvZXhj
ZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBl
eGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZp
cnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hh
dCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGlj
IGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0K
CgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYg
dm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3Rl
ZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWlu
YXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIDsKCgogIHVuZXhwZWN0
ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoK
ICB2b2lkIHVuZXhwZWN0ZWQoKSA7CiMgOTggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2V4
Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFtZXNw
YWNlIF9fZ251X2N4eAp7CiMgMTExICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9leGNlcHRp
b24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFuZGxlciAoKTsKfQoKfQojIDM5ICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMiAzCgpleHRlcm4gIkMrKyIgewoK
bmFtZXNwYWNlIF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzCm5hbWVzcGFjZSBzdGQKewoK
CgogIGNsYXNzIHR5cGVfaW5mbwogIHsKICBwdWJsaWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9p
bmZvKCk7CgogIHByaXZhdGU6CgogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9p
bmZvJik7CiAgICB0eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAg
IGNvbnN0IGNoYXIgKl9fbmFtZTsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZv
KGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQoKICBwdWJsaWM6CgoKCiAgICBjb25z
dCBjaGFyKiBuYW1lKCkgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQojIDk4ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMwogICAgYm9vbCBiZWZvcmUoY29uc3QgdHlw
ZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA8IF9fYXJnLl9fbmFtZTsg
fQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7
IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9CgogICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PShfX2Fy
Zyk7IH0KCgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2ludGVyX3AoKSBjb25z
dDsKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9wKCkgY29uc3Q7CgoKCgoKCgogICAg
dmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lk
ICoqX190aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgX19vdXRl
cikgY29uc3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3VwY2FzdChjb25zdCBfX2N4eGFiaXYx
OjpfX2NsYXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoKICBjbGFzcyBiYWRfY2FzdCA6IHB1
YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQoK
CiAgICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsKCgogIGNsYXNzIGJhZF90eXBl
aWQgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhy
b3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7CiAgfTsKfQoKfQoj
IDIyICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9hbnkuaHBwIiAyCgojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2FsZ29yaXRobSIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Nz
dHJpbmciIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAzCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAzCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqIF9fZGVzdCwKICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0
ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgY29uc3Qgdm9pZCAqX19zcmMsIHNpemVf
dCBfX24pCiAgICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICogX19kZXN0LCBj
b25zdCB2b2lkICogX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3Qg
X19uKQogICAgIDsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywg
c2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChjb25zdCB2b2lkICpfX3MxLCBjb25z
dCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChj
b25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIDsKCgoKCmV4dGVybiB2
b2lkICpyYXdtZW1jaHIgKGNvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgOwoKCmV4dGVybiB2b2lk
ICptZW1yY2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIDsK
CgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBfX3Ny
YykKICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqIF9fZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBj
aGFyICpzdHJjYXQgKGNoYXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBfX3NyYykKICAgICA7Cgpl
eHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqIF9fZGVzdCwgY29uc3QgY2hhciAqIF9fc3JjLAog
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY21wIChj
b25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3MyKQogICAgIDsKCmV4dGVybiBpbnQgc3Ry
bmNtcCAoY29uc3QgY2hhciAqX19zMSwgY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAg
ICA7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChjb25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpf
X3MyKQogICAgIDsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqIF9fZGVzdCwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19zcmMsIHNpemVfdCBfX24pIDsKIyAxMTEg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IF9fc3RyY29sbF9sIChjb25zdCBj
aGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICA7CgpleHRl
cm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIGNvbnN0IGNoYXIgKl9fc3JjLCBz
aXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgOwoK
CgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoY29uc3QgY2hhciAqX19zKSA7CgoKCgoKCmV4dGVybiBj
aGFyICpzdHJuZHVwIChjb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICA7CiMg
MTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNociAoY29uc3Qg
Y2hhciAqX19zLCBpbnQgX19jKSA7CgpleHRlcm4gY2hhciAqc3RycmNociAoY29uc3QgY2hhciAq
X19zLCBpbnQgX19jKSA7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChjb25zdCBjaGFyICpf
X3MsIGludCBfX2MpIDsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoY29uc3QgY2hhciAqX19z
LCBjb25zdCBjaGFyICpfX3JlamVjdCkKICAgICA7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKGNv
bnN0IGNoYXIgKl9fcywgY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgOwoKZXh0ZXJuIGNoYXIg
KnN0cnBicmsgKGNvbnN0IGNoYXIgKl9fcywgY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgOwoK
ZXh0ZXJuIGNoYXIgKnN0cnN0ciAoY29uc3QgY2hhciAqX19oYXlzdGFjaywgY29uc3QgY2hhciAq
X19uZWVkbGUpCiAgICAgOwoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoY29uc3QgY2hhciAq
X19oYXlzdGFjaywgY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgOwoKCgpleHRlcm4gY2hhciAq
c3RydG9rIChjaGFyICogX19zLCBjb25zdCBjaGFyICogX19kZWxpbSkKICAgICA7CgoKCmV4dGVy
biBjaGFyICpfX3N0cnRva19yIChjaGFyICogX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqIF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9f
c2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqIF9fcywgY29uc3QgY2hh
ciAqIF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX3NhdmVfcHRyKSA7
CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKGNvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVf
dCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpfX25lZWRs
ZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIDsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAo
dm9pZCAqIF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIF9fc3Jj
LCBzaXplX3QgX19uKSA7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICogX19kZXN0LAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIF9fc3JjLCBzaXplX3QgX19uKSA7CgoKCgpl
eHRlcm4gc2l6ZV90IHN0cmxlbiAoY29uc3QgY2hhciAqX19zKSA7CgoKCgpleHRlcm4gc2l6ZV90
IHN0cm5sZW4gKGNvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgOwoK
CgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIDsKCgoKZXh0ZXJuIGNoYXIg
KnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg
OwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCmV4
dGVybiB2b2lkIGJjb3B5IChjb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3Qg
X19uKSA7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4
dGVybiBpbnQgYmNtcCAoY29uc3Qgdm9pZCAqX19zMSwgY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90
IF9fbikKICAgICA7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChjb25zdCBjaGFyICpfX3MsIGludCBf
X2MpIDsKCgpleHRlcm4gY2hhciAqcmluZGV4IChjb25zdCBjaGFyICpfX3MsIGludCBfX2MpIDsK
CgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIDsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBp
bnQgX19sKSA7CgoKCgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKGNvbnN0IGNoYXIgKl9fczEs
IGNvbnN0IGNoYXIgKl9fczIpCiAgICAgOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKGNvbnN0
IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCmV4
dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKGNvbnN0IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9f
czIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIDsKCmV4dGVy
biBpbnQgX19zdHJuY2FzZWNtcF9sIChjb25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3My
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xv
YykKICAgICA7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKiBfX3N0cmluZ3AsCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX2RlbGltKSA7CgoKCgpleHRlcm4gaW50
IHN0cnZlcnNjbXAgKGNvbnN0IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9fczIpCiAgICAgOwoK
CmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgOwoKCmV4dGVybiBjaGFyICpfX3N0
cGNweSAoY2hhciAqIF9fZGVzdCwgY29uc3QgY2hhciAqIF9fc3JjKQogICAgIDsKZXh0ZXJuIGNo
YXIgKnN0cGNweSAoY2hhciAqIF9fZGVzdCwgY29uc3QgY2hhciAqIF9fc3JjKQogICAgIDsKCgoK
ZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqIF9fZGVzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqIF9fc3JjLCBzaXplX3QgX19uKSA7CmV4dGVybiBjaGFyICpzdHBu
Y3B5IChjaGFyICogX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9f
c3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcp
IDsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCgoK
CmV4dGVybiBjaGFyICpiYXNlbmFtZSAoY29uc3QgY2hhciAqX19maWxlbmFtZSkgOwojIDM2NCAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyA1MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvY3N0cmluZyIgMiAzCiMgNzcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmci
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwog
IHVzaW5nIDo6c3RyY3B5OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1
c2luZyA6OnN0cm5jYXQ7CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNp
bmcgOjpzdHJjb2xsOwogIHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNp
bmcgOjpzdHJjc3BuOwogIHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5n
IDo6bWVtc2V0OwogIHVzaW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5n
IDo6bWVtY2hyOwoKICBpbmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBz
aXplX3QgX19uKQogIHsgcmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3Ap
LCBfX2MsIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNo
cihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3Rf
Y2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBp
bmxpbmUgY2hhcioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyBy
ZXR1cm4gX19idWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9f
czIpOyB9CgogIHVzaW5nIDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFy
KiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8
Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUg
Y2hhcioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBf
X2J1aWx0aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9
CiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NsaW1pdHMiIDEgMwojIDQ4ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAzCgojIDEgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDUwICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAyIDMKIyA2NyAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9uZXciIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
Mi9uZXciIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2Fs
bG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJv
dygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVj
dCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5
cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRs
ZXIobmV3X2hhbmRsZXIpIHRocm93KCk7Cn0KIyA3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvbmV3IiAzCnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFk
X2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJh
ZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXpl
X3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10o
c3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRv
ciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVy
YXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlu
bGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7
IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2
b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CgoKaW5saW5lIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlICh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwppbmxpbmUgdm9pZCBvcGVyYXRvciBk
ZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwoKfQojIDcwICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMwojIDkwICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKc3RydWN0IF9fdHJ1ZV90eXBlIHt9
OwpzdHJ1Y3QgX19mYWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9f
dHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211
c3RfYmVfZmlyc3Q7CiMgMTEzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVf
dHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj
aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBp
bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9u
Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19p
bnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxz
aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf
dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Igewog
ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgK
ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xh
c3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBz
dGQKewojIDgwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9i
YXNlX3R5cGVzLmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qg
b3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDog
cHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcge307CiMgMTAwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgIHR5cGVuYW1l
IF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVyZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3Qg
aXRlcmF0b3IgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7Cgog
ICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlm
ZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlw
ZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVy
ZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2lu
dGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5j
ZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90
cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0
ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVy
OwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5
cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAg
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
Y2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYg
Y29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRv
cl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJl
dHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgp
OyB9Cgp9CiMgNzQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9y
X2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4yL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9jb25jZXB0X2NoZWNrLmgiIDMKIyA2OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCgoKCm5hbWVzcGFjZSBz
dGQKewp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19kaXN0
YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0
X2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkgewogICAgICArK19fZmlyc3Q7ICsrX19uOwogICAgfQogICAgcmV0dXJuIF9f
bjsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgaW5saW5l
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcpCiAgewoKICAgCiAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICB9CiMgMTEx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNz
LmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIGRpc3Rh
bmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7Cgog
ICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QpKTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
RGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlz
dGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICB3aGlsZSAoX19uLS0p
ICsrX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5
cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIGlmIChfX24gPiAwKQogICAgICB3aGlsZSAoX19u
LS0pICsrX19pOwogICAgZWxzZQogICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogIH0KCnRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgog
IGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlz
dGFuY2UgX19uLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7Cgog
ICAKICAgIF9faSArPSBfX247CiAgfQojIDE2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBhZHZhbmNlKF9J
bnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgewoKICAgIF9fYWR2YW5jZShfX2ks
IF9fbiwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICB9Cgp9CiMgNzUgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDY4ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQKewoj
IDg5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgog
ICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46
Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBv
aW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3Ig
Y3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9p
bnRlcjsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDog
Y3VycmVudChfX3gpIHsgfQoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNl
X2l0ZXJhdG9yJiBfX3gpCiAgICAgIDogY3VycmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgICAgIDogY3VycmVudChfX3guYmFz
ZSgpKSB7IH0KCgoKCiAgICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0
dXJuIGN1cnJlbnQ7IH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNv
bnN0CiAgICAgIHsKICAgICAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJl
dHVybiAqLS1fX3RtcDsKICAgICAgfQoKCgoKCgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNl
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsK
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRv
cgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3Ig
X190bXAgPSAqdGhpczsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwog
ICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQog
ICAgICB7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK
CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAg
ICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAg
ICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgog
ICAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4g
cmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAg
ICAgICBjdXJyZW50IC09IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoK
ICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9f
bikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsg
fQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVu
Y2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10o
ZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAg
IH07CiMgMjY5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg
ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1
cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAg
ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAh
KF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kp
CiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVyYXRvci0o
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFz
ZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBp
bmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5hbWUg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAg
ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1
cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI3
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
CiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2
b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWlu
ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBl
OwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm
IF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgMzUzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgog
ICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFs
dWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVy
YXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19p
bnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAg
ICB9OwojIDM4NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3Iu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194
KQogICAgeyByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQoj
IDM5NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBmcm9udF9pbnNlcnRfaXRl
cmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZv
aWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNv
bnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy
X3R5cGU7CgoKICAgICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm
IF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgNDIyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3Zh
bHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAg
ICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRf
aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZy
b250X2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7
IH0KICAgIH07CiMgNDUzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVy
YXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9u
dF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWlu
ZXImIF9feCkKICAgIHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihf
X3gpOyB9CiMgNDcwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRv
ci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGluc2VydF9p
dGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwg
dm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciog
Y29udGFpbmVyOwogICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwoKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgoKCgog
ICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVy
OjppdGVyYXRvciBfX2kpCiAgICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KIyA1
MTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAg
ICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRh
aW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBpdGVyID0gY29u
dGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICAgICAgKytpdGVyOwogICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0
b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDU0NCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJh
dG9yIF9faSkKICAgIHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoK
CgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9y
OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAg
IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVl
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgog
ICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJs
aWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9p
bnRlcjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigp
KSB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVy
YXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2ku
YmFzZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19u
b3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0
ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9y
bWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVy
YXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10o
Y29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJl
bnRbX19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29u
c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVy
biAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0
IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVy
YXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAg
IG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVu
dCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAg
b3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVy
biBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0
ZXJhdG9yJgogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsK
IyA2NDUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBl
bmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAg
eyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy
YXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9f
bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0
eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAg
ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMp
CiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBv
cGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4m
IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2Uo
KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y
UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPChjb25zdCBf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo
cykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAg
b3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4m
IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs
IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAg
ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMp
CiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w
ZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBf
X2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5
cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg
IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykK
ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w
ZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D
b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs
IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo
cykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAog
IG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy
PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFz
ZSgpOyB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl
cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSB0eXBlbmFtZSBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgb3BlcmF0
b3ItKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo
cywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250
YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgLSBfX3Jocy5iYXNlKCk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu
bGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+CiAgb3BlcmF0b3Ir
KHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZl
cmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cn0KIyA3NiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKbmFtZXNwYWNlIHN0
ZAp7CiMgOTEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0Zv
cndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFs
dWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190
bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQoj
IDExOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYgX19h
LCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAgIF9f
YSA9IF9fYjsKICAgICAgX19iID0gX190bXA7CiAgICB9CiMgMTQ2ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw
JiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0
dXJuIF9fYTsKICAgIH0KIyAxNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3Qg
X1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAg
CgogICAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4
NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3Qg
X1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19j
b21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVy
biBfX2E7CiAgICB9CiMgMjA0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg
X19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkg
cmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMjEgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19j
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewog
ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAg
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJ
dGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46
OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5j
ZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0Owog
ICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJz
dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUo
X19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAg
ICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf
T3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5
cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29w
eV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29w
eV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9f
cmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19s
YXN0LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJl
dHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu
ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5
cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5
X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1Zh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+
OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAg
ICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0
ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29w
eV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgp
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9y
bWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJu
IF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9
CiMgMzM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg
ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46Ol9O
b3JtYWwgX19Ob3JtYWw7CiAgICAgICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIGlubGlu
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jl
c3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAg
IF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAg
ewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uOwogICAgICBmb3IgKF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+
IDA7IC0tX19uKQogICAgICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4g
X19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs
SXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUg
X0Jvb2xUeXBlPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAogICAgewogICAg
ICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAgICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFj
a3dhcmQoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QpKTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
c3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4K
ICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNv
bnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgY29uc3QgcHRy
ZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICAgIG1lbW1vdmUoX19yZXN1bHQg
LSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAgICAgIHJldHVybiBfX3Jl
c3VsdCAtIF9OdW07CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg
IHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVl
X3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2Zp
cnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJl
dHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAg
ICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIH0KICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJ
MgogICAgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkky
IF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIF9Ucml2aWFsOwog
ICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFs
PgogICAgICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAg
ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5l
IF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19m
aXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5
X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOyB9CgogIHRl
bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAg
IF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJ
MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkky
IF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx
LCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1
dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6
X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9y
bWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFs
KCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAg
IGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9C
STEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwog
ICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDQ3NyAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBf
QkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIGNvcHlfYmFja3dhcmQoX0JJ
MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg
CiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkx
Pjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9u
b3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMg
NTA5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAg
ICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAg
IF9PdXRwdXRJdGVyCiAgICBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX24gPiAwOyAt
LV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgICAgcmV0dXJu
IF9fZmlyc3Q7CiAgICB9CgoKCiAgaW5saW5lIHZvaWQKICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9f
Zmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQog
IHsKICAgIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgX190
bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKHNpZ25lZCBj
aGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LCBjb25zdCBzaWduZWQgY2hhciYgX19j
KQogIHsKICAgIHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoK
ICBpbmxpbmUgdm9pZAogIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBj
aGFyJiBfX2MpCiAgewogICAgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgdW5zaWduZWQgY2hhcioKICAg
IGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVuc2lnbmVk
IGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2Mp
OwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1NpemU+CiAgICBpbmxpbmUgc2lnbmVkIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwg
X1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmly
c3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAgZmlsbF9u
KGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewogICAgICBm
aWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsg
X19uOwogICAgfQojIDYwNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2go
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIp
IHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAg
cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp
OwogICAgfQojIDY0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ
dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9J
bnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3Qx
LCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu
YW1lIF9JbnB1dEl0ZXIyPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9
IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCEoKl9fZmlyc3Qx
ID09ICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVl
OwogICAgfQojIDY5OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ
dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVh
bChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4g
dHJ1ZTsKICAgIH0KIyA3MzIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu
cHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmly
c3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MjsKICAgIH0KIyA3NjcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg
dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsr
X19maXJzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz
dDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0
MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CgogIGlubGluZSBib29s
CiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEs
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFz
dDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICAg
IGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgICBjb25zdCBpbnQg
X19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIp
KTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19s
ZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBj
aGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKICB7CgogICAg
cmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9fZmly
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hh
ciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNp
Z25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCiAgfQoKfQojIDY3ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoK
CiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAgIF9D
b25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0aWNf
Y2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFz
cyBfVDE+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsgbmV3
IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0KIyA5OCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkK
ICAgIHsgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBfRGVzdHJveSgmKl9f
Zmlyc3QpOyB9CiMgMTEyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25z
dHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5l
IHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRv
ciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAg
aW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXIt
Pn5fVHAoKTsgfQojIDEzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29u
c3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGlu
ZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
cmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgICAgICAgICAgICAgIF9W
YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5
cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgX0hhc190
cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0KIyA2OCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAg
aW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
dHJ1ZV90eXBlKQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh
bHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAg
ICB0cnkgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytf
X2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgICAgIHJl
dHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAg
X0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAg
IH0KIyAxMDYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6
ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfY29weShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRm9yd2FyZEl0ZXIgX19yZXN1bHQp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf
dHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191
bmluaXRpYWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0Qo
KSk7CiAgICB9CgogIGlubGluZSBjaGFyKgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFy
KiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsIGNoYXIqIF9fcmVzdWx0KQogIHsKICAgIG1l
bW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9f
cmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHdjaGFyX3QqCiAgdW5p
bml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCiAgewogICAgbWVt
bW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmly
c3QpKTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
dm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lk
CiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJz
dDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikK
ICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgfQogICAgICBjYXRjaCgu
Li4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAgICAg
ICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDE2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9m
aWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm
IF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5p
bml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAg
IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAg
ICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0Zv
cndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19m
aXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3Vy
KQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1
cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3ko
X19maXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1
ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVk
X2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFs
aXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w
dXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlhbGl6
ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICB0cnkgewogICAgICAg
IHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICAg
ICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1
bHQsIF9fbWlkKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0
ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5
KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg
dW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICAgICAgdHJ5IHsKICAg
ICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwog
ICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jl
c3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1
dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIF9G
b3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEs
IF9fZmlyc3QyKTsKICAgICAgdHJ5IHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQy
LCBfX2xhc3QyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg
ICAgICBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsKICAgICAgICAgIHRocm93OwogICAgICAg
IH0KICAgIH0KCn0KIyA2OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDEgMwoj
IDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9oZWFwLmgiIDEgMwojIDYzICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBf
RGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUlu
ZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0
YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9s
ZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7
CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQp
OwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19o
b2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp
ID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVf
dHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg
ICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wdXNoX2hlYXAoX19maXJz
dCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgw
KSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3Rh
bmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p
ZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5j
ZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAg
X192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQg
PSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9w
SW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICAg
ICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAg
ICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRl
eCAtIDEpIC8gMjsKICAgICAgfQogICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3Zh
bHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAg
IF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlw
ZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9f
bGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAg
IF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFt
ZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0g
X19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUlu
ZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlm
ICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxk
IC0gMSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9f
aG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUlu
ZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29u
ZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsK
ICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRD
aGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAg
ICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBf
X3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFu
Y2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAg
IF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgq
KF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNlIF9f
c2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNvbmRD
aGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENo
aWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAgICAgICAgX19zZWNv
bmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCAr
IF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAg
ICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAg
ICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hv
bGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hv
bGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9f
Zmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwg
X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf
RGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAg
ICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHBv
cF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19s
YXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9p
ZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFs
dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoK
ICAgICAKCiAgICAgCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAg
ICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgq
KF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJu
OwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lk
CiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBpZiAoX19sYXN0IC0g
X19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoK
ICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFy
ZW50LCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsg
X19wYXJlbnQpKSwgX19jb21wKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwog
ICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewoKICAg
ICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAgICAgIHBv
cF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHNvcnRf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAg
ICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0
LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0KCn0KIyA2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF90ZW1wYnVmLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyCnsKCiAK
CiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9UcCog
X01fYnVmZmVyOwoKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBfTV9vcmlnaW5h
bF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9sZW4gPiAocHRy
ZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4gPSAyMTQ3NDgz
NjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAgX01fYnVm
ZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChfTV9i
dWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0KCiAgdm9p
ZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30KICB2b2lk
IF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsKICAg
IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1Ymxp
YzoKCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KCiAgcHRyZGlm
Zl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9Cgog
IF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KCiAgX1RwKiBlbmQoKSB7IHJldHVy
biBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
CiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IGRpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAo
X01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZp
YWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBmcmVlKF9NX2J1ZmZl
cik7CiAgICAgICAgX01fYnVmZmVyID0gMDsKICAgICAgICBfTV9sZW4gPSAwOwogICAgICAgIHRo
cm93OwogICAgICB9CiAgfQoKICB+X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBfRGVzdHJveShf
TV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoK
cHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7
fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCn0KIyA2
NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFt
ZXNwYWNlIHN0ZAp7CiMgODQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29uc3QgX1RwJgogICAg
X19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykK
ICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYgKF9fYiA8IF9fYykK
ICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAg
ICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBl
bHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19i
IDwgX19jKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19i
OwogICAgfQojIDExOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu
ZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Is
IGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAo
X19jb21wKF9fYSwgX19iKSkKICAgICAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICAg
IHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICAg
IHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxz
ZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlm
IChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAg
ICByZXR1cm4gX19iOwogICAgfQojIDE1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X0Z1bmN0aW9uPgogICAgX0Z1bmN0aW9uCiAgICBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQogICAgewoKICAgICAKICAgICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIF9fZigqX19maXJzdCk7
CiAgICAgIHJldHVybiBfX2Y7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCwKICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiAgICAgICAgKytfX2ZpcnN0Owog
ICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZp
bmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
X1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsK
ICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAg
ICAgICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21B
Y2Nlc3NJdGVyCiAgICBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgICAg
ICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQg
PiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl
dHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgq
X19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAg
ICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19m
aXJzdDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2Fz
ZSAzOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
ICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFs
KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMToKICAgICAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJz
dDsKICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAg
ICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBmaW5kX2lmKF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAgPSAoX19sYXN0IC0g
X19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlw
X2NvdW50KSB7CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Owog
ICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBf
X2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkp
IHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgq
X19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQoKICAg
ICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmIChf
X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IGNhc2UgMjoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJz
dCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAg
ICBkZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyAyODkgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAg
ICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNv
bnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmQoX19m
aXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9
CiMgMzA5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5s
aW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAg
IAoKICAgICAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMyOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
PgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIg
X19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAg
ICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAg
ICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9
CiMgMzU4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQg
PSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAo
X19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgICAgICByZXR1cm4gX19maXJz
dDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7
CiAgICB9CiMgMzg3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291
bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh
bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192
YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQxMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudF9pZihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICAr
K19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0NTAgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2go
X0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAg
ICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2Zp
cnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2Fy
ZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09
IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0
Mik7CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmly
c3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoK
ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9IGZp
bmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3QxID09
IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsK
ICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0g
X19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9fY3Vy
cmVudCA9PSAqX19wKSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAg
ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEp
CiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJl
ZD4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf
Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg
X0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRl
KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xh
c3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAg
ICAgIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBp
ZiAoX190bXAgPT0gX19sYXN0MikgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmly
c3QxOwogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgfQoKCgogICAgICBfRm9yd2FyZEl0
ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0Zv
cndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAg
ICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAg
ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAg
ICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJl
bnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJu
IF9fbGFzdDE7CgogICAgICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkg
ewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2Zp
cnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICBy
ZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAg
ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDU5NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFy
Y2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAg
IAoKICAgICAKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgIGVsc2UgewogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192
YWwpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVn
ZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJz
dDsKICAgICAgICAgICsrX19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19u
ICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICAgICArK19faTsKICAgICAgICAgICAg
LS1fX247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAgICAgICAgICAgIHJl
dHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2ZpcnN0ID0gZmluZChf
X2ksIF9fbGFzdCwgX192YWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAg
ICB9CiAgICB9CiMgNjQzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2Vy
LCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWQ+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwK
ICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAg
IAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
IGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgaWYg
KF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsrX19pOwogICAgICAgICAgd2hpbGUg
KF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkp
IHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAgfQogICAg
ICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewogICAgICAgICAgICAg
IGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9fZmlyc3QgPSBf
X2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0K
ICAgIH0KIyA2OTcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cjI+CiAgICBfRm9yd2FyZEl0ZXIyCiAgICBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmly
c3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIy
IF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3Ig
KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAg
aXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX2ZpcnN0MjsKICAg
IH0KIyA3MzIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBl
bmFtZSBfVW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQogICAgewoKICAgICAKICAg
ICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVz
dWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3QpOwogICAgICByZXR1
cm4gX19yZXN1bHQ7CiAgICB9CiMgNzY1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg
X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9C
aW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICBfQmluYXJ5T3Bl
cmF0aW9uIF9fYmluYXJ5X29wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9y
ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVz
dWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy
KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc5NiAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3Zh
bHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgq
X19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7
CiAgICB9CiMgODI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUs
IHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
LCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAg
ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3By
ZWQoKl9fZmlyc3QpKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4
NTYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf
VHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25l
d192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJl
dHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4ODggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9U
cD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBf
X25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQg
PSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgfQojIDkxOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf
R2VuZXJhdG9yPgogICAgdm9pZAogICAgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAogICAgIAoK
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAqX19m
aXJzdCA9IF9fZ2VuKCk7CiAgICB9CiMgOTQyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5h
bWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJh
dGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAg
ICB7CgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAg
ICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5
NjkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf
VHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBj
b25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCEoKl9fZmlyc3Qg
PT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICAg
KytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDAz
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1By
ZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgh
X19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAg
ICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoj
IDEwMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJ
dGVyCiAgICByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAg
CgoKICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICAgICAg
X0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFz
dCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHko
KytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBy
ZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIF9f
Zmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0ZvcndhcmRJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmly
c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ks
IF9fbGFzdCwgX19maXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg
X191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgb3V0
cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3Vs
dCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlm
ICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7
CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1cm4g
KytfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv
cl90YWcpCiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsr
X19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkK
ICAgICAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0
OwogICAgfQojIDExNDUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsK
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1
cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXRlclR5cGUoKSk7
CiAgICB9CiMgMTE3MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIs
IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFn
KQogICAgewoKICAgICAKCgoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192
YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2Jp
bmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2Zp
cnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0
dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE5OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJ
dGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9f
YmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDEyMzIgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg
aW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAg
IAogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJ
dGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmly
c3QsIF9fbGFzdCwKX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsIF9JdGVyVHlwZSgpKTsKICAgIH0K
IyAxMjYzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAg
ICAgIAogICAgICAgICAKCgogICAgICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJz
dCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fZmlyc3QpOwogICAgfQojIDEyOTAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNh
dGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIF9fZmlyc3QgPSBh
ZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7CiAgICAgIHJldHVy
biB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwog
ICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2
b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBpdGVyX3N3YXAo
X19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAoX19m
aXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgLS1fX2xhc3Qp
OwogICAgfQojIDEzNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSB2
b2lkCiAgICByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0KQogICAgewoKICAgICAgICAgCgogICAgICAgICAgX19yZXZlcnNlKF9fZmly
c3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMTM3NCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9P
dXRwdXRJdGVyCiAgICByZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpf
X2xhc3Q7CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7
CiAgICB9CiMgMTM5OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgogICAgX0V1Y2xp
ZGVhblJpbmdFbGVtZW50CiAgICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLCBfRXVj
bGlkZWFuUmluZ0VsZW1lbnQgX19uKQogICAgewogICAgICB3aGlsZSAoX19uICE9IDApIHsKICAg
ICAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgICAgIF9fbSA9
IF9fbjsKICAgICAgICBfX24gPSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbTsKICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICBfX3Jv
dGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9y
d2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkg
fHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0ZvcndhcmRJ
dGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0
KyssICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAg
ICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFz
dCk7CgogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fZmlyc3QyICE9
IF9fbGFzdCkgewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAg
IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsK
ICAgICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAgICBfX2ZpcnN0MiA9
IF9fbWlkZGxlOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19t
aWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9f
cmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7
CiAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZygpKTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9
IF9fbGFzdCkKICAgICAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19taWRkbGUpIHsKICAgICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFz
dCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAg
ICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZygpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkg
fHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUgX0Rpc3RhbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBf
X24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBf
X2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9
PSBfX2wpIHsKICAgICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUp
OwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9f
biwgX19rKTsKCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKysp
IHsKICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9fbCkgewogICAgICAg
ICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAg
ICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAgICAqX19wID0gKihf
X3AgLSBfX2wpOwogICAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAg
ICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNl
IF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICAgICAgaWYgKF9f
cCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAg
ICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9
ICogKF9fcCAtIF9fbCk7CiAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICB9CiAgICAg
ICAgfQoKICAgICAgICAqX19wID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAg
ICB9CiMgMTU2MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJv
dGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKICAg
ICAgX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBlKCkpOwogICAg
fQojIDE1ODkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg
ICBfT3V0cHV0SXRlcgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9P
dXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gY29w
eShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwog
ICAgfQojIDE2MTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSBfRGlzdGFuY2UKICAg
IF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKQogICAgewoKICAgICAgcmV0dXJuIGxyYW5k
NDgoKSAlIF9fbjsKCgoKICAgIH0KIyAxNjM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4K
ICAgIGlubGluZSB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9f
aSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAo
X19pLCBfX2ZpcnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAg
IH0KIyAxNjYwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51
bWJlckdlbmVyYXRvcj4KICAgIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
IF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dh
cChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmly
c3QpKQogICAgICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAg
ICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0
ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2Fw
KCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAg
ICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIK
ICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKQogICAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAg
ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAg
ICAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0Owog
ICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJz
dCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0Zvcndh
cmRJdGVyCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAg
IAoKCiAgICAgIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNl
PgogICAgX0ZvcndhcmRJdGVyCiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCiAgICB7CiAgICAg
IGlmIChfX2xlbiA9PSAxKQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0
IDogX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAg
YWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4g
PSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0
aXRpb24oX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7CiAgICAgIHJvdGF0
ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3Rh
bmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBl
bmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3
YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBf
X2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7
CiAgICAgICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICAgICAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmly
c3QpKSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICAgICAgKytf
X3Jlc3VsdDE7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgKl9fcmVz
dWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MjsKICAgICAgICAgIH0KICAg
ICAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICAgICAgcmV0dXJu
IF9fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19t
aWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUo
X19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19i
dWZmZXJfc2l6ZSk7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0
aW9uX2FkYXB0aXZlKCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAv
IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRlKF9fYmVnaW4sIF9f
bWlkZGxlLCBfX2VuZCk7CiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRs
ZSwgX19lbmQpKTsKICAgICAgICByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAgfQojIDE4NDgg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJk
SXRlcgogICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7
CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1
cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKICAgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9y
d2FyZEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYg
KF9fYnVmLnNpemUoKSA+IDApCiAgICAgICAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2Fk
YXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdp
bigpLCBfX2J1Zi5zaXplKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2lucGxh
Y2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVl
c3RlZF9zaXplKCkpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAg
X191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCkK
ICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bp
dm90KQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxl
IChfX3Bpdm90IDwgKl9fbGFzdCkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9f
Zmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9z
d2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRf
cGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19j
b21wKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlIChfX2NvbXAoKl9f
Zmlyc3QsIF9fcGl2b3QpKQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0Owog
ICAgICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpCiAgICAgICAgICAtLV9fbGFz
dDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJz
dDsKICAgICAgfQogICAgfQojIDE5MjkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAg
ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw
IF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAg
ICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAgICAgKl9f
bGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0
OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUg
KF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAg
ICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAgKl9f
bGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf
X2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0g
Kl9faTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29weV9iYWNr
d2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsK
ICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2Vy
dChfX2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5zZXJ0
aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRl
ciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAg
ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl
IF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAg
ICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAgICpf
X2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFy
ZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQK
ICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xh
c3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVU
eXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJkZWRf
aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191bmd1
YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAg
ICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBf
TV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3Qg
KyBfTV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmly
c3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg
ICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkg
ewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9s
ZCwgX19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsg
X01fdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xnKF9TaXpl
IF9fbikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9fbiAhPSAx
OyBfX24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAgIHZvaWQK
ICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBf
X2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkg
ewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAg
ICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihf
X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlw
ZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0g
MSkpKSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xp
bWl0KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
X1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xk
KSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlhbF9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuOwog
ICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSks
CiAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xh
c3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAg
IH0KICAgIH0KIyAyMTY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2
b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgog
ICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9f
Zmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmlu
YWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu
ZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAg
IF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3Qp
ICogMiwgX19jb21wKTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAg
ICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAg
ICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9faW5w
bGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICAgICAgX19tZXJnZV93aXRob3V0
X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xhc3QgLSBfX21pZGRsZSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg
ICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp
IC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2Nv
bXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21w
KTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBl
bmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNj
ZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9z
aXplKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsK
CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgICAgICBf
X3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0
ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICAgICAgX19maXJzdCAr
PSBfX3R3b19zdGVwOwogICAgICB9CgogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2Uo
X19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2UoX19maXJzdCwgX19m
aXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAg
ICAgICAgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBf
RGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xv
b3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0
YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAg
ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1
bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQogICAgICBf
X3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl
KTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAg
ICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0LAog
ICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5j
ZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0g
X19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19z
aXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0
YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlvbl9z
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5r
X3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2No
dW5rX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAg
IH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRl
cj4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0
YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Q
b2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNl
IF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6
ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBf
X2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAg
X19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3Rl
cF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9
IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZl
ciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsK
ICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXpl
LCBfX2NvbXApOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBf
X21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwg
X19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9s
b29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19jb21w
KTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rp
c3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAg
IHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBp
ZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2
ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9f
c3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1
ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIF9fbWVyZ2Vfc29ydF93
aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgIH0KICAgICAgX19t
ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRk
bGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0g
X19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rp
c3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19zdGFi
bGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy
LCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19m
aXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0
ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0
YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19z
dGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgIH0KICAg
ICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo
X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgIH0KICAgICAgX19tZXJn
ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUg
LSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19t
aWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwogICAgfQojIDI0MzAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5s
aW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlm
ZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfVGVtcG9y
YXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9f
bGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFi
bGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29y
dF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1
Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlz
dGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5k
b21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYg
KGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3Qs
IF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp
dmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjUwMiAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgbWFrZV9o
ZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAoKl9faSA8ICpfX2Zp
cnN0KQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVU
eXBlKCpfX2kpKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIH0KIyAy
NTQwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBtYWtl
X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKF9f
Y29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChfX2Zp
cnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgIH0KIyAyNTc5ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBw
YXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFs
dWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46
OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAg
CgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVz
dWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9f
cmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9y
ZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3Qg
PSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmly
c3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFs
X2xhc3QpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9f
Zmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0
X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAgICAgKytfX2ZpcnN0
OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s
YXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjMzICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091
dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAog
ICAgIAogICAgIAogICAgIAoKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9s
YXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1
bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19s
YXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9f
cmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0
OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmly
c3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g
X19sYXN0KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkK
ICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCks
CiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0
IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5
cGUoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgICsr
X19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0
X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAg
IH0KIyAyNjg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIG50aF9l
bGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
Y3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoo
X19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgaWYg
KF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UK
ICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAyNzI4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgs
CiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU
eXBlOwoKCiAgICAgCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7
CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRf
cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp
LzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KihfX2xhc3QgLSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0
OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQojIDI3NjggIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBs
b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u
c3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rp
c3RhbmNlVHlwZTsKCgoKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUg
X19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9f
aGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4g
MCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2Zp
cnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21p
ZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICAr
K19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9
CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjgxNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3Vu
ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFs
dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAg
X0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9E
aXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3
aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBf
X21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg
ICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0g
X19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0g
X19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hh
bGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjg1NiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2Jv
dW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm
IF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VU
eXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAg
ICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAg
ICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAg
ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX192YWwgPCAqX19taWRk
bGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9f
Zmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0g
X19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJz
dDsKICAgIH0KIyAyOTAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VU
eXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlw
ZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xl
biA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0g
X19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChf
X2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAg
ICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJz
dDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAg
fQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyOTQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAg
ICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg
Y29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg
X0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUg
X19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9f
aGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAg
ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAg
ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsK
ICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAg
ICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0g
bG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2Uo
X19maXJzdCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRk
bGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwg
X0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICBy
ZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7
CiAgICB9CiMgMzAwMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVx
dWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25z
dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAg
CiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAg
IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAg
IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUs
IF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2Zp
cnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0g
X19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19m
aXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0
LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19m
aXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs
IF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAg
cmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3Qp
OwogICAgfQojIDMwNTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAg
Ym9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCgogICAg
IAogICAgIAoKICAgICAKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2Zp
cnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3Zh
bCA8ICpfX2kpOwogICAgfQojIDMwODMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg
IAoKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9f
dmFsLCAqX19pKTsKICAgIH0KIyAzMTE1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg
X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIG1l
cmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAg
CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MikgewogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAg
IGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4g
Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp
KTsKICAgIH0KIyAzMTY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRl
cjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQog
ICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9f
Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAg
ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg
ICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJz
dDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlz
dGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E
aXN0YW5jZSBfX2xlbjIpCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0g
MCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAg
ICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19m
aXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAg
ICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAg
ICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwg
X19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9f
bGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUs
IF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9f
bGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAg
IF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9j
dXQpOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAg
ICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsK
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAg
ICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkp
OwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25l
d19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7
CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBf
X2xlbjIgLSBfX2xlbjIyKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xl
bjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAg
aWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUs
ICpfX2ZpcnN0KSkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwog
ICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9j
dXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19t
aWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVu
MjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9f
bGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAg
X19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0
LCBfX2NvbXApOwogICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRf
Y3V0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsK
ICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9j
dXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21w
KTsKICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAg
ICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAg
YWR2YW5jZShfX25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsK
ICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdf
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIsIF9f
Y29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29u
ZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xl
bjExLCBfX2xlbjIgLSBfX2xlbjIyLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIs
CiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQog
ICAgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwKICAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf
X2J1ZmZlcl9lbmQ7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVm
ZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3Qs
IF9fYnVmZmVyKTsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh
c3QpOwogICAgICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3Qp
OwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAg
ICAgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAg
ICAgIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAgICAgcmV0dXJuIGNvcHlf
YmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgfQogICAgICBl
bHNlIHsKICAgICAgICByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAg
YWR2YW5jZShfX2ZpcnN0LCBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KSk7CiAgICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg
IHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjM+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAg
ICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQogICAgewogICAgICBpZiAoX19m
aXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0Miwg
X19sYXN0MiwgX19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAg
ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAg
ICAtLV9fbGFzdDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg
ICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19s
YXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1
cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAg
ICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1
bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAg
ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQo
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlk
aXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlf
YmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3Qy
ID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFz
dDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAg
ICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09
IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19f
bGFzdDIsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9f
Zmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly
c3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9
CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBf
X21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVy
IF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgICAgIGlmIChf
X2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAg
IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVy
KTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9f
bGFzdCwgX19maXJzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xlbjIgPD0g
X19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5
KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9iYWNrd2Fy
ZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAg
ICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19z
ZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsK
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4x
ID4gX19sZW4yKSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAg
ICAgICAgICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAg
ICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmly
c3RfY3V0KTsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBf
X3NlY29uZF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShf
X3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVw
cGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAg
ICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAg
ICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3Nl
Y29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9f
bGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0
LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAg
X19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xl
bjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVu
MjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgIH0KICAgIH0KCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwg
dHlwZW5hbWUgX1BvaW50ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lk
CiAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Q
b2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xl
bjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19i
dWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAg
ICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0
LCBfX2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVm
ZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21p
ZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19m
aXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICAgIH0K
ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9j
dXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0
ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4y
KSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAg
ICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19z
ZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBf
X2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9f
c2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9f
c2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBw
ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAg
ICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9
CiAgICAgICAgICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRs
ZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl
bjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUo
X19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21w
KTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1
dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAg
ICAgICAgfQogICAgfQojIDM1MDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZv
aWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAg
X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGly
ZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoK
CiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUg
PT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0g
ZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9
IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0Jp
ZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAg
ICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogICAgICBlbHNlCiAg
ICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEs
IF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5j
ZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiMgMzU1OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBl
CiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0
YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUg
fHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5
cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VU
eXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFy
eV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBf
X2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0
aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9f
Y29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgX19i
dWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAg
ICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAg
ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytf
X2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAg
ICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQog
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAg
KytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0
SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlv
bihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoK
CiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQog
ICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmly
c3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsK
ICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0
MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAg
ICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5pb24oX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9f
Zmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f
Zmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytf
X2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp
cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9u
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAog
ICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikK
ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmly
c3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmly
c3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1
dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2Zp
cnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19m
aXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2Ugewog
ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg
dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0
ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAg
IHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmly
c3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg
ICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAg
ZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwog
ICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0
ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAg
ICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsK
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsK
ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAg
ICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVu
Y2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAg
ICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2Zp
cnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAg
IGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsr
X19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0Miwg
Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0
SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBz
ZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAg
ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7
CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp
IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7
CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJu
IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3
YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7
CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19yZXN1bHQg
PCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9f
cmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg
ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9fcmVz
dWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0
ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl
dHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAg
ICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPCAqX19y
ZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy
biBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3
aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAq
X19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4K
ICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBf
X2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0t
X19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBf
X2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19paSkgewogICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghKCpfX2kg
PCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsK
ICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2Uo
X19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3Qp
CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoK
ICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAg
ICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoIV9fY29t
cCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwg
X19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJl
dmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9
CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgog
ICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9f
bGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1f
X2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9f
aTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19pKSB7CiAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEoKi0tX19q
IDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog
ICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShf
X2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkK
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7Cgog
ICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAg
ICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghX19jb21w
KCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBf
X2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2
ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0K
ICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRl
ciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAK
ICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQog
ICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19s
YXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAg
ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h
bWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rfb2YoX0lu
cHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK
ICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQog
ICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19s
YXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikp
CiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9
CiMgNDIwMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4K
ICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg
X0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly
c3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0
b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09
IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9G
b3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAg
ICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2Zp
cnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgICAgICAgaWYgKF9fbmV3X3Jl
c3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9f
Zmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg
fQogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQ
cmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEg
X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9C
aW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0
MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJ
dGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9G
b3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgICAgIGlmIChfX25ld19y
ZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICBf
X2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRp
cmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y
PF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0
MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9S
ZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9f
cmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJu
IF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1
bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5j
ZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBf
QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+
CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQog
ICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJl
Y3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf
QmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEo
X19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2
SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3Js
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwoKICAgICAg
aWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAg
ZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5i
YXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xh
c3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAgICB9CgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlu
bGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf
Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3Qy
LCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAg
ICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBf
Rm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy
ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9y
d2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkK
ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmly
c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOwogICAgfQoKfQojIDcwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0i
IDIgMwojIDI0ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9hbnkuaHBwIiAyCiMgMzMgIi4u
Ly4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2FueS5ocHAiCiMgMSAiLi4vLi4vLi4vYm9vc3QvZHlu
YW1pY19hbnkvZndkLmhwcCIgMQoKCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
c3RyaW5nIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAzCgoK
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMK
IyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAzCgoK
CgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3Qg
Y2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAg
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBw
b3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg
bWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hh
cl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wK
ICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoK
ICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNo
YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAg
IHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsKCiAgICAg
IHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3Ms
IHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5
cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp
emVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUq
IF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMg
Y2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJf
dHlwZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29u
c3QgaW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5
cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50
X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsKCiAgICAg
IHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAg
ICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAg
ICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9z
IHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRl
ZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihj
aGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19j
MjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBj
b25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAg
ICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFy
X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMg
aW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUq
IF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24p
OyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9f
cykKICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0
IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5
cGUqPihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgog
ICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3Qg
X19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEs
IF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJf
dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0K
CiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6
ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90
eXBlKj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQog
ICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAg
ICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAg
ICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29u
c3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAg
c3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBl
PigoLTEpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50
X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAg
fTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsK
ICAgICAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50
X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdz
dHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7Cgog
ICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFy
X3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAg
ICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAg
ICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNv
bnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVy
biBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNo
YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7
IHJldHVybiB3bWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QK
ICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4o
X19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBj
aGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsg
cmV0dXJuIHdtZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq
CiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90
eXBlIF9fbikKICAgICAgeyByZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAg
ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNo
YXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBf
X3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90
eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1z
ZXQoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hh
cl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9Cgog
ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBf
X2MpIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVx
X2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAg
ICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg
ZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9Cgog
ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQog
ICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0
IF9DaGFyX3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJf
dHJhaXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJv
b2wKICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6
ZXEoX01fYywgX19hKTsgfQogICAgfTsKfQojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
Mi9zdHJpbmciIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMSAz
CiMgNTMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwoKCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgODQgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDY1ICIvdXNy
L2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRf
ZmFpbCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgY29uc3QgY2hhciAqX19m
dW5jdGlvbikKICAgICA7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBf
X2Vycm51bSwgY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3Nl
cnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xp
bmUpCiAgICAgOwoKCn0KIyA0OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY2Fzc2VydCIg
MiAzCiMgODUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAz
CiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMwoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwoj
IDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRf
Y2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlk
X2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Ro
cm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA4NiAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyA1NCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICBzdHJ1
Y3QgX1JlZmNvdW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoKICAgIHZv
bGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgogICAgX19ndGhyZWFkX211dGV4X3QgX01fcmVm
X2NvdW50X2xvY2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3Vu
dChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IHswLCAwLCAwLCBQ
VEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAgICAgIF9NX3JlZl9jb3VudF9sb2Nr
ID0gX190bXA7CgoKCgoKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbmNyKCkKICAgIHsKICAgICAg
X19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgKytfTV9yZWZf
Y291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsK
ICAgIH0KCiAgICBfUkNfdAogICAgX01fZGVjcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRl
eF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHZvbGF0aWxlIF9SQ190IF9fdG1wID0g
LS1fTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3Vu
dF9sb2NrKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07CiMgMTA5ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB0ZW1wbGF0ZTxpbnQgX19k
dW1teT4KICAgIHN0cnVjdCBfU3dhcF9sb2NrX3N0cnVjdAogICAgeyBzdGF0aWMgX19ndGhyZWFk
X211dGV4X3QgX1Nfc3dhcF9sb2NrOyB9OwoKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIF9f
Z3RocmVhZF9tdXRleF90CiAgICBfU3dhcF9sb2NrX3N0cnVjdDxfX2R1bW15Pjo6X1Nfc3dhcF9s
b2NrID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKCgoKICBp
bmxpbmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBsb25nICogX19wLCB1
bnNpZ25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX1N3YXBfbG9j
a19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1bnNpZ25lZCBsb25nIF9fcmVzdWx0ID0g
Kl9fcDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfU3dhcF9s
b2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CiMg
MTUxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBz
dHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9s
b2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQogICAgewojIDE4NCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgICB9CgogICAgdm9pZAog
ICAgX01fYWNxdWlyZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2so
Jl9NX2xvY2spOwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlbGVhc2VfbG9jaygpCiAgICB7CgoK
CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogICAgfQogIH07CiMgMjIw
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1
Y3QgX1NUTF9hdXRvX2xvY2sKICB7CiAgICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7CgogICAg
X1NUTF9hdXRvX2xvY2soX1NUTF9tdXRleF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2sp
CiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KCiAgICB+X1NUTF9hdXRvX2xvY2so
KSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KCiAgcHJpdmF0ZToKICAgIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgICBfU1RMX2F1dG9fbG9jayhjb25zdCBf
U1RMX2F1dG9fbG9jayYpOwogIH07Cgp9CiMgODcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgOTggIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICBjbGFzcyBfX25ld19hbGxvYwog
IHsKICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg
ICB7IHJldHVybiA6Om9wZXJhdG9yIG5ldyhfX24pOyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRl
YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QpCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7
IH0KICB9OwojIDEyMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2Mu
aCIgMwogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGUKICAgIHsKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9j
KHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90
KTsKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7Cgog
ICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikK
ICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYg
KDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgICAgIHJl
dHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0
ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgogICAgICBzdGF0aWMg
dm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19z
eikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6
KTsKICAgICAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhf
X3AsIF9fbmV3X3N6KTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAgICAgIHN0
YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgICAg
IHsKICAgICAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7
CiAgICAgICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICAgICAgcmV0dXJu
KF9fb2xkKTsKICAgICAgfQogICAgfTsKCgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9p
ZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21f
aGFuZGxlcikoKSA9IDA7CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikK
ICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBf
X3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2Nf
aGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKDAgPT0g
X19teV9tYWxsb2NfaGFuZGxlcikKICAgICAgICAgICAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygp
OwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAgX19yZXN1bHQg
PSBtYWxsb2MoX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJu
KF9fcmVzdWx0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAg
dm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9j
KHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19o
YW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAg
ewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k
bGVyOwogICAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikKICAgICAgICAgICAg
c3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVy
KSgpOwogICAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICAgIGlm
IChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICB9
CgoKCgoKCiAgdHlwZWRlZiBfX25ld19hbGxvYyBfX21lbV9pbnRlcmZhY2U7CiMgMjE5ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICB7CiAgcHVibGlj
OgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDAgPT0g
X19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0K
CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSgpCiAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjph
bGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAq
IF9fcCwgc2l6ZV90IF9fbikKICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUo
X19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShf
VHAqIF9fcCkKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQog
IH07CiMgMjUxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAz
CiAgdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KICBjbGFzcyBfX2RlYnVnX2FsbG9jCiAgewogIHBy
aXZhdGU6CiAgICBlbnVtIHtfU19leHRyYSA9IDh9OwoKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2
b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgewogICAgICBjaGFyKiBfX3Jlc3VsdCA9IChj
aGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgKihzaXpl
X3QqKV9fcmVzdWx0ID0gX19uOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRy
YTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9f
bikKICAgIHsKICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0
cmE7CiAgICAgICgodm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDI3MCwgKChjb25zdCBjaGFyICopIDApKSwg
MCkpKTsKICAgICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19l
eHRyYSk7CiAgICB9CgogICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl
X3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICAgIHsKICAgICAgY2hhciogX19yZWFsX3Ag
PSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgICgodm9pZCkgKCgqKHNpemVfdCop
X19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9f
cmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsbG9jLmgiLCAyNzcsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CiAgICAgIGNoYXIqIF9f
cmVzdWx0ID0gKGNoYXIqKQogICAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19v
bGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQg
PSBfX25ld19zejsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9
CiAgfTsKIyAzMjQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgi
IDMKdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2xhc3MgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlCiAgewogIHByaXZhdGU6CiAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAg
IGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZ
VEVTIC8gX0FMSUdOfTsKCiAgICB1bmlvbiBfT2JqCiAgICB7CiAgICAgIHVuaW9uIF9PYmoqIF9N
X2ZyZWVfbGlzdF9saW5rOwogICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogICAgfTsKCiAg
ICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCgogICAg
c3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7
CiAgICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCiAgICBzdGF0aWMgX1NUTF9tdXRleF9s
b2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgogICAgc3RhdGljIHNpemVfdAogICAgX1Nfcm91
bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3Qp
IF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgc3RhdGljIHNpemVf
dAogICAgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChf
X2J5dGVzKSArIChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAg
IHN0YXRpYyB2b2lkKgogICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgc3RhdGljIGNo
YXIqCiAgICBfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKCgog
ICAgY2xhc3MgX0xvY2sKICAgIHsKICAgIHB1YmxpYzoKICAgICAgX0xvY2soKSB7IGlmIChfX3Ro
cmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAg
fl9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3JlbGVh
c2VfbG9jaygpOyB9CiAgICB9IDsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCiAgcHVibGljOgoK
ICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9p
ZCogX19yZXQgPSAwOwoKICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAg
ICAgX19yZXQgPSBfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fbik7CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVl
X2xpc3QKICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAgICAgICAg
X0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAgX09iaiogX19yZXN0cmljdF9fIF9fcmVz
dWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAg
ICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAgZWxz
ZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQg
LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfTsKCgogICAgc3Rh
dGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAg
ICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgICBfX21lbV9pbnRlcmZhY2U6
OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX09i
aiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsg
X1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7
CgoKCiAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfX3EgLT4gX01f
ZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAqX19teV9mcmVlX2xp
c3QgPSBfX3E7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyB2b2lkKgogICAgcmVhbGxvY2F0
ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKICB9OwoKCiAg
dGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAg
ICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQog
ICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg
X19pbnN0PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
IF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9i
anMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9ieXRl
cyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRf
ZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxf
Ynl0ZXMpCiAgICAgIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg
X1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7
CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7
CiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAg
ICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0ID0g
X1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsK
ICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg
ewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90
YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAgaWYg
KF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2b2xh
dGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1Nf
ZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilfU19z
dGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAg
ICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAg
ICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19tZW1faW50ZXJmYWNlOjph
bGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVl
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBf
T2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoK
CgogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9
IChzaXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsg
X1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJl
ZV9saXN0OwogICAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApCiAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2Zy
ZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFy
KilfX3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUg
KyBfX2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl
LCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUg
PSAoY2hhciopX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKICAg
ICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAg
ICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAg
ICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICAgICAgfQog
ICAgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lk
KgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVm
aWxsKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIq
IF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xh
dGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBf
X2N1cnJlbnRfb2JqOwogICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAg
ICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgICBfX215X2ZyZWVfbGlz
dCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1
bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9
IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewog
ICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAo
X09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEg
PT0gX19pKSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0g
MDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfX2N1cnJlbnRf
b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0K
ICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wgdGhyZWFkcywg
aW50IGluc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMs
IGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3
X3N6KQogICAgewogICAgICB2b2lkKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9zejsK
CiAgICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAo
c2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19z
eikpOwogICAgICB9CiAgICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRf
dXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25l
d19zeik7CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDog
X19uZXdfc3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBk
ZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoK
ICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBfU1RMX211dGV4X2xvY2sK
ICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2Fs
bG9jYXRvcl9sb2NrCiAgPSB7IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAs
IDAgfX0gfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2hhciog
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJl
ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIGNoYXIqIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0g
MDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgc2l6ZV90IF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7
CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIHR5cGVuYW1lIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZnJlZV9saXN0
W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwg
MD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4g
X19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBhbGxvY2F0b3IK
ewogIHR5cGVkZWYgX19hbGxvYyBfQWxsb2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXpl
X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYg
X1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0
eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl
YmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0
b3IoKSB0aHJvdygpIHt9CiAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYp
IHRocm93KCkge30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3Mo
cmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRk
cmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1Rw
KiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBf
X24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9m
KF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUo
cG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3As
IF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJv
dygpCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25z
dHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFs
KTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVt
cGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qg
c2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5
cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl
YmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBh
bGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4g
ZmFsc2U7Cn0KIyA2OTUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9j
LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0
b3IKewogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVf
dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAq
IHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBf
VHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmVi
aW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoK
ICBfX2FsbG9jYXRvcigpIHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRv
ciYgX19hKSB0aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5n
X2FsbG9jKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9f
YWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdf
YWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygp
IHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194
OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsg
cmV0dXJuICZfX3g7IH0KCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9p
ZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+
KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAg
OiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikK
ICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1Rw
KSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4g
c2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19w
LCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ry
b3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxs
b2M+CmNsYXNzIF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2
b2lkKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBl
ZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJp
bmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBf
X2ExLl9fdW5kZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5f
X3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgoKCgoKCnRl
bXBsYXRlIDxpbnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxp
bnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2Fs
bG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0Fs
bG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+
JikgewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsK
fQojIDg0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0
cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2Nh
dG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25z
dCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9U
cCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz
cyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190
eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1Nf
aW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv
Y2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5
cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9B
bGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0
eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9j
X3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+
IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwg
aW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAg
ICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7
CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9f
c2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxv
Y190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw
LAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0
PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw
ZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rocixf
X2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxv
Y2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBf
QWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWJ1
Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz
ID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxs
b2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxs
b2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdj
aGFyX3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8dHJ1ZSwgMD47Cgp9CiMgNTYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIg
MiAzCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3Jh
Z2VfaXRlci5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
cmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJh
dG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lk
LCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9yd2FyZEl0ZXJhdG9y
IF9NX2l0ZXI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICByYXdfc3RvcmFnZV9p
dGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KCiAgICAgIHJh
d19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoK
ICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9f
ZWxlbWVudCkKICAgICAgewogICAgICAgIF9Db25zdHJ1Y3QoJipfTV9pdGVyLCBfX2VsZW1lbnQp
OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0
b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAg
ICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICByYXdf
c3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CiAgICAgIG9wZXJhdG9yKyso
aW50KQogICAgICB7CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRv
ciwgX1RwPiBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrX01faXRlcjsKICAgICAgICByZXR1cm4g
X190bXA7CiAgICAgIH0KICAgIH07Cn0KIyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
bWVtb3J5IiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KcGFpcjxfVHAqLCBwdHJk
aWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAg
aWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xl
biA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg
X1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3RkOjpzaXplX3QpX19sZW4gKiBzaXpl
b2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRy
ZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0gMjsKICB9CgogIHJldHVybiBwYWly
PF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KIyAxMDYgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHBhaXI8
X1RwKixwdHJkaWZmX3Q+CiAgZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQog
IHsKICAgIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7CiAg
fQojIDEyMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICB2b2lkCiAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCiAg
ewogICAgc3RkOjpmcmVlKF9fcCk7CiAgfQojIDEzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgc3RydWN0IGF1dG9fcHRyX3Jl
Zgp7CiAgIF9UcDEqIF9NX3B0cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBf
X3ApCiAgIDogX01fcHRyKF9fcCkge30KfTsKIyAxNzUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgY2xhc3MgYXV0b19wdHIKewpw
cml2YXRlOgogIF9UcCogX01fcHRyOwoKcHVibGljOgoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5
cGU7CgoKCgoKCgogIGV4cGxpY2l0CiAgYXV0b19wdHIoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0
aHJvdygpCiAgOiBfTV9wdHIoX19wKSB7IH0KIyAyMDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4yL21lbW9yeSIgMwogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkKICA6IF9NX3B0
cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMTQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21l
bW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRvX3B0cihhdXRvX3B0cjxf
VHAxPiYgX19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMjYg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyJgogIG9wZXJh
dG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpCiAgICB7CiAgICAgIHJlc2V0KF9fYS5yZWxlYXNl
KCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMjQzICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwMT4KICAgIGF1dG9fcHRy
JgogICAgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIHsKICAgICAg
cmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KIyAyNjMgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIH5hdXRvX3B0cigpIHsgZGVsZXRl
IF9NX3B0cjsgfQojIDI3MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAg
ZWxlbWVudF90eXBlJgogIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gKl9NX3B0
cjsgfQoKCgoKCgoKICBlbGVtZW50X3R5cGUqCiAgb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkg
eyByZXR1cm4gX01fcHRyOyB9CiMgMjk1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9tZW1v
cnkiIDMKICBlbGVtZW50X3R5cGUqCiAgZ2V0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9w
dHI7IH0KIyAzMDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1l
bnRfdHlwZSoKICByZWxlYXNlKCkgdGhyb3coKQogICAgewogICAgICBlbGVtZW50X3R5cGUqIF9f
dG1wID0gX01fcHRyOwogICAgICBfTV9wdHIgPSAwOwogICAgICByZXR1cm4gX190bXA7CiAgICB9
CiMgMzI0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB2b2lkCiAgcmVz
ZXQoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX3AgIT0g
X01fcHRyKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICBfTV9w
dHIgPSBfX3A7CiAgICAgICAgfQogICAgfQojIDM0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYp
IHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImCiAgb3Bl
cmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICB7CiAg
ICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAgewogICAgICAgICAg
ZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAg
IG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgICAgeyByZXR1cm4gYXV0
b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJldHVy
biBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cgp9OwoKfQojIDQ5ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0
eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7
Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0
PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50
X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9S
ZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMgMTI3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsK
ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1
bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUg
X195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gp
IGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKIyAxNzMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVx
dWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90
byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9
IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw
JiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwojIDIyMiAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4Kewog
IGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9n
aWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g
X194IHx8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25v
dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg
X1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAg
X1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0
IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29u
c3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+
CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBf
X3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRf
YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0
ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0
ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwK
ICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3Vt
ZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOwog
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8
X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmlu
YXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0
aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBf
T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJh
dGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVl
OwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAg
Y29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAg
ICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRf
dHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgog
IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBf
T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
b3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xh
c3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJh
dGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRp
b246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9P
cGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09w
ZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09w
ZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2
YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAg
ICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kp
CiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl
c3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9h
cmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9
CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwg
Y2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09w
ZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVy
YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJu
ZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf
QXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQg
KCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9
CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJn
KSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3Qg
eyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3Mg
X1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4g
cHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5
X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEs
IGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5j
dGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnBy
b3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAg
IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9f
YmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01f
cHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkg
Y29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRl
cl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0
ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0
aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAm
IG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWly
OjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf
X3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRv
cigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5h
bWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5
cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5z
ZWNvbmQ7CiAgfQp9OwojIDUyOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
ZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1f
ZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBs
aWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1Jl
dCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpw
cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9S
ZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0
ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoq
X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25z
dCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko
KTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1f
ZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog
X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyBy
ZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29u
c3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh
c3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLF9SZXQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDog
X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0
IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01f
ZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3Qg
X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1Jl
dCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0
b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4q
X01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1l
bV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1
YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkg
OiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29u
c3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9N
X2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdChf
UmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01f
ZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90
KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShf
VHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6
Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90
PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1
YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25z
dCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25z
dCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25z
dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9U
cD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p
ZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToK
ICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNv
bnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs
dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6
OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6
Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh
c3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6
OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19w
LCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQg
KF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYp
IHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAo
X19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNv
bnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4x
X3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9B
cmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoq
X19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwg
X0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9U
cDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs
YXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt
X2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9f
ci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0
Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVu
X3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9m
dW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K
aW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2Yp
KCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0
LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5f
cmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+
CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChf
VHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9U
cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
aW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2Yp
KF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21l
bV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNv
bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9m
dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0Fy
ZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21l
bV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZiko
X0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0Fy
Zz4oX19mKTsgfQoKCgp9CiMgNTMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIg
MSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgi
IDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3Jk
OwoKc3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRp
bGUgX0F0b21pY193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193
b3JkIF9fcmVzdWx0OwogIF9fYXNtX18gdm9sYXRpbGUgKCJsb2NrOyB4YWRkbCAlMCwlMiIKICAg
ICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkKICAgICAgICAgICAgICAgICAg
ICAgICAgOiAiMCIgKF9fdmFsKSwgIm0iICgqX19tZW0pCiAgICAgICAgICAgICAgICAgICAgICAg
IDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCgpf
X2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewog
IF9fYXNtX18gdm9sYXRpbGUgKCJsb2NrOyBhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAg
ICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpfX21lbSkgOiAibWVtb3J5Iik7Cn0KIyA0NiAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKIyA4OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19z
dHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFs
bG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNp
emVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBk
aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2Ug
cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNl
IGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIg
cG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29u
c3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBv
aW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojpf
X25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0
ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv
bnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVy
YXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDEyMyAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBzdHJ1Y3QgX1JlcAog
ICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8
Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTQxICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dHlwZSBfU19tYXhfc2l6ZTsKICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFs
OwoKICAgICAgICBzaXplX3R5cGUgX01fbGVuZ3RoOwogICAgICAgIHNpemVfdHlwZSBfTV9jYXBh
Y2l0eTsKICAgICAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgICAgICAgYm9vbAog
ICAgICAgIF9NX2lzX2xlYWtlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNl
cyA8IDA7IH0KCiAgICAgICAgYm9vbAogICAgICAgIF9NX2lzX3NoYXJlZCgpIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9N
X3NldF9sZWFrZWQoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9CgogICAgICAgIHZv
aWQKICAgICAgICBfTV9zZXRfc2hhcmFibGUoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IDA7
IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmRhdGEoKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxfQ2hhclQqPih0aGlzICsgMSk7IH0KCiAgICAgICAg
X0NoYXJUJgogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcykgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIF9NX3JlZmRhdGEoKSBbX19zXTsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01f
Z3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQogICAg
ICAgIHsKICAgICAgICAgIHJldHVybiAoIV9NX2lzX2xlYWtlZCgpICYmIF9fYWxsb2MxID09IF9f
YWxsb2MyKQogICAgICAgICAgICAgICAgICA/IF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxs
b2MxKTsKICAgICAgICB9CgoKICAgICAgICBzdGF0aWMgX1JlcCoKICAgICAgICBfU19jcmVhdGUo
c2l6ZV90LCBjb25zdCBfQWxsb2MmKTsKCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rpc3Bvc2Uo
Y29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5k
X2FkZCgmX01fcmVmZXJlbmNlcywgLTEpIDw9IDApCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19h
KTsKICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxv
YyYpIHRocm93KCk7CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3co
KQogICAgICAgIHsKICAgICAgICAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAg
ICAgICAgICByZXR1cm4gX01fcmVmZGF0YSgpOwogICAgICAgIH0KCiAgICAgICAgX0NoYXJUKgog
ICAgICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOwogICAg
ICB9OwoKCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MKICAgICAgewogICAgICAg
IF9BbGxvY19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICA6
IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAgICAgICAgX0NoYXJUKiBfTV9wOwogICAg
ICB9OwoKICAgIHB1YmxpYzoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0g
c3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7CgogICAgcHJpdmF0ZToKCiAgICAgIG11dGFibGUg
X0FsbG9jX2hpZGVyIF9NX2RhdGFwbHVzOwoKCgogICAgICBzdGF0aWMgc2l6ZV90eXBlIF9TX2Vt
cHR5X3JlcF9zdG9yYWdlWyhzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihz
aXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKICAgICAgX0NoYXJUKgogICAgICBf
TV9kYXRhKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQoKICAgICAg
X0NoYXJUKgogICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQogICAgICB7IHJldHVybiAoX01fZGF0
YXBsdXMuX01fcCA9IF9fcCk7IH0KCiAgICAgIF9SZXAqCiAgICAgIF9NX3JlcCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+IChfTV9kYXRhKCkpKVstMV0p
OyB9CgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2liZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2llbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICB2
b2lkCiAgICAgIF9NX2xlYWsoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9yZXAoKS0+X01faXNf
bGVha2VkKCkpCiAgICAgICAgICBfTV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0
b3IKICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7CiAgICAgICAg
aWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
ImJhc2ljX3N0cmluZzo6X01fY2hlY2siKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBf
X3BvczsKICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19vZmYpIGNvbnN0CiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG9m
ZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3
b2ZmID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBy
ZXR1cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25ld29mZik7CiAgICAgIH0KCgoKICAgICAg
dGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgX1Nf
Y29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQog
ICAgICAgIHsKICAgICAgICAgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApCiAg
ICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOwogICAgICAgIH0KCiAg
ICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9y
IF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFz
ZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hh
cnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIp
CiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0K
CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFy
VCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19r
MSwgX19rMiAtIF9fazEpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJz
KF9DaGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAg
ICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAg
dm9pZAogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBz
aXplX3R5cGUgX19sZW4yKTsKCiAgICAgIHZvaWQKICAgICAgX01fbGVha19oYXJkKCk7CgogICAg
ICBzdGF0aWMgX1JlcCYKICAgICAgX1NfZW1wdHlfcmVwKCkKICAgICAgeyByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBfc3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6
CgoKCgogICAgICBpbmxpbmUKICAgICAgYmFzaWNfc3RyaW5nKCk7CgogICAgICBleHBsaWNpdAog
ICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpOwoKCiAgICAgIGJhc2ljX3N0cmlu
Zyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNp
emVfdHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBf
X24sIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19h
ID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0
IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9f
biwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB0ZW1w
bGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRl
cmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBj
b25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIH5iYXNpY19zdHJpbmcoKQogICAg
ICB7IF9NX3JlcCgpLT5fTV9kaXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0KCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp
IHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19z
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyBy
ZXR1cm4gdGhpcy0+YXNzaWduKDEsIF9fYyk7IH0KCgogICAgICBpdGVyYXRvcgogICAgICBiZWdp
bigpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9N
X2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29u
c3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRl
cmF0b3IKICAgICAgZW5kKCkKICAgICAgewogICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgIHJl
dHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOwogICAgICB9CgogICAgICBj
b25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVy
YXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9y
CiAgICAgIHJiZWdpbigpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5k
KCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9Cgog
ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKQogICAgICB7IHJldHVybiByZXZlcnNl
X2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
CiAgICAgIHJlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
KHRoaXMtPmJlZ2luKCkpOyB9CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNp
emUoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX1JlcDo6X1Nf
bWF4X3NpemU7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFy
VCBfX2MpOwoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB0aGlzLT5y
ZXNpemUoX19uLCBfQ2hhclQoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBjYXBhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9jYXBhY2l0eTsgfQoKICAgICAgdm9pZAogICAg
ICByZXNlcnZlKHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgY2xl
YXIoKSB7IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCksIDApOyB9CgogICAgICBib29sCiAgICAg
IGVtcHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0KCgogICAgICBjb25z
dF9yZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3Bl
cmF0b3JbXShzaXplX3R5cGUgX19wb3MpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAg
ICAgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107CiAgICAgIH0KCiAgICAgIGNvbnN0X3JlZmVyZW5j
ZQogICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fbiA+
PSB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry
aW5nOjphdCIpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAgICAg
cmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19u
ID49IHNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6
OmF0Iik7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsK
ICAgICAgfQoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zdHIpOyB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJu
IHRoaXMtPmFwcGVuZChfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9y
Kz0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKHNpemVfdHlwZSgxKSwgX19jKTsg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOwoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpCiAgICAg
IHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf
X2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICAgIGFwcGVuZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9N
X2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2JhY2so
X0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCAx
LCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgICAg
ewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAg
ICAgaWYgKF9fcG9zID4gX19zdHJzaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
ImJhc2ljX3N0cmluZzo6YXNzaWduIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19u
IDwgX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9
IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3BvczsKICAgICAgICByZXR1cm4gdGhpcy0+
YXNzaWduKF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zLCBfX25ld3NpemUpOwogICAgICB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAg
ICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6YXNzaWduIik7CiAgICAgICAg
aWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19z
LCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRh
KCkgKyB0aGlzLT5zaXplKCksIF9fcykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZl
KF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgICAgICBlbHNlCiAg
ICAgICAgICB7CgogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3MgLSBfTV9k
YXRhKCk7CiAgICAgICAgICAgIGlmIChfX3BvcyA+PSBfX24pCiAgICAgICAgICAgICAgdHJhaXRz
X3R5cGU6OmNvcHkoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAgIGVsc2UgaWYgKF9f
cG9zKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSwgX19zLCBfX24p
OwogICAgICAgICAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uOwogICAgICAgICAgICBfTV9k
YXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNv
bnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCB0cmFpdHNf
dHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihz
aXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N
X2liZWdpbigpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFzc2lnbihfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1
cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3Qp
OyB9CgogICAgICB2b2lkCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIHNpemVfdHlwZSBfX24s
IF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9
CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkIGluc2Vy
dChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2Vu
ZCkKICAgICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0KCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9f
c3RyLCAwLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2Vy
dChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAg
ICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0
IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zMiA+
IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6
Omluc2VydCIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAt
IF9fcG9zMjsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9f
biA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgICByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9z
MSwgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBfX25ld3NpemUpOwogICAgICB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6
ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgICBf
X3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAo
X19zaXplID4gdGhpcy0+bWF4X3NpemUoKSAtIF9fbikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3Ro
X2Vycm9yKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01f
aXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAg
ICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3Mp
KQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLCBf
TV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Ms
IF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAgewoKCgogICAgICAgICAgICBjb25z
dCBzaXplX3R5cGUgX19vZmYgPSBfX3MgLSBfTV9kYXRhKCk7CiAgICAgICAgICAgIF9NX211dGF0
ZShfX3BvcywgMCwgX19uKTsKICAgICAgICAgICAgX19zID0gX01fZGF0YSgpICsgX19vZmY7CiAg
ICAgICAgICAgIF9DaGFyVCogX19wID0gX01fZGF0YSgpICsgX19wb3M7CiAgICAgICAgICAgIGlm
IChfX3MgKyBfX24gPD0gX19wKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwg
X19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3MgPj0gX19wKQogICAgICAgICAgICAg
IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zICsgX19uLCBfX24pOwogICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBf
X3MsIF9fcCAtIF9fcyk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AgKyAo
X19wIC0gX19zKSwgX19wICsgX19uLCBfX24gLSAoX19wIC0gX19zKSk7CiAgICAgICAgICAgICAg
fQogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgICB9CiAgICAgICB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCog
X19zKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MsIF9fcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7CiAgICAgICAgdGhp
cy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgX19uLCBfX2MpOwogICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0No
YXJUIF9fYyA9IF9DaGFyVCgpKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fcG9zID0gX19w
IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6
ZV90eXBlKDEpLCBfX2MpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAg
ICAgcmV0dXJuIHRoaXMtPl9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9
IG5wb3MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3Bv
cyksIF9NX2ZvbGQoX19wb3MsIF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f
ZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShp
dGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fcG9z
aXRpb24gLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcG9zaXRpb24sIF9f
cG9zaXRpb24gKyAxLCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9N
X3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0K
CiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f
bGFzdCkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX2ZpcnN0IC0gX01faWJlZ2lu
KCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2RhdGEoKSwgX01f
ZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgcmV0dXJu
IF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl
cGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24sIF9fc3RyLl9N
X2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs
YWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKTsK
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19u
MikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7
CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFu
Z2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0bjEg
PSBfX24xIDwgX19zaXplIC0gX19wb3M7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4x
ID0gX190ZXN0bjEgPyBfX24xIDogX19zaXplIC0gX19wb3M7CiAgICAgICAgaWYgKF9fc2l6ZSAt
IF9fZm9sZG4xID4gdGhpcy0+bWF4X3NpemUoKSAtIF9fbjIpCiAgICAgICAgICBfX3Rocm93X2xl
bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICAgaWYgKF9NX3JlcCgp
LT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkp
CiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUs
IF9fcykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19w
b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2liZWdpbigpICsgX19wb3Mg
KyBfX2ZvbGRuMSwgX19zLCBfX3MgKyBfX24yKTsKCiAgICAgICAgZWxzZSByZXR1cm4KICAgICAg
ICAgICAgICAgX01fcmVwbGFjZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9f
cG9zICsgX19mb2xkbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24y
LAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxjb25z
dCBfQ2hhclQqPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25z
dCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uMSwg
X19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9f
bjIsIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19w
b3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19p
MiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcm
CiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19z
LCBfX24pOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p
MSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMt
PnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgcmVwbGFjZShpdGVy
YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig
X19rMSwgX0lucHV0SXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9f
aTEsIF9faTIsIF9fazEsIF9fazIsCiAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKCgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0No
YXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf
X2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl
cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX2sxLCBj
b25zdCBfQ2hhclQqIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0g
X01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo
aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19r
MikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19p
MiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2UoKSwgX19r
MiAtIF9fazEpOwogICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShp
dGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9p
dGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2li
ZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEu
YmFzZSgpLCBfX2syIC0gX19rMSk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIHRlbXBs
YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBf
TV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9f
azEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2syLCBpbnB1dF9pdGVyYXRv
cl90YWcpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgICAgICBi
YXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJh
dG9yIF9faTIsIF9Gb3J3YXJkSXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcmF0b3IgX19rMik7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAg
ICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcs
IF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19mYWxzZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Jbkl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOwogICAgICAgICAg
cmV0dXJuIF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSwgX1RhZygpKTsKICAgICAgICB9
CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAg
ICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25z
dCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAg
ICAgIHsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBl
PihfX2JlZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVl
X3R5cGU+KF9fZW5kKSwgX19hKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5J
dGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIg
X19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0luSXRlcj46Ol9JbnRlZ3JhbCBfSW50
ZWdyYWw7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9f
YSwgX0ludGVncmFsKCkpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVy
PgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAg
ICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVy
PgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJdGVyIF9f
YmVnLCBfRndkSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg
ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgIF9T
X2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19h
KTsKCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgY29weShfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICB2b2lkCiAg
ICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zKTsKCgog
ICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGNfc3RyKCkgY29uc3QKICAgICAgewoKICAgICAgICBz
aXplX3R5cGUgX19uID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24o
X01fZGF0YSgpW19fbl0sIF9SZXA6Ol9TX3Rlcm1pbmFsKTsKICAgICAgICByZXR1cm4gX01fZGF0
YSgpOwogICAgICB9CgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGRhdGEoKSBjb25zdCB7IHJl
dHVybiBfTV9kYXRhKCk7IH0KCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0
b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhcGx1czsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg
IGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg
Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k
KF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlw
ZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPnJmaW5kKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0K
CiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmlu
ZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp
KTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf
X3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2Yo
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0
ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9f
cywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kX2ZpcnN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlw
ZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl
IF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9f
c3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg
ICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5maW5kX2xhc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp
KTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihfQ2hhclQgX19jLCBzaXpl
X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2Ms
IF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3Ry
LnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25v
dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29m
KF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90
eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25v
dF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25v
dF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mg
PSBucG9zKSBjb25zdDsKCiAgICAgIGJhc2ljX3N0cmluZwogICAgICBzdWJzdHIoc2l6ZV90eXBl
IF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBp
ZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgi
YmFzaWNfc3RyaW5nOjpzdWJzdHIiKTsKICAgICAgICByZXR1cm4gYmFzaWNfc3RyaW5nKCp0aGlz
LCBfX3BvcywgX19uKTsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3NpemUg
PSB0aGlzLT5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7
CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6ZSk7CgogICAgICAg
IGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwg
X19sZW4pOwogICAgICAgIGlmICghX19yKQogICAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6
ZTsKICAgICAgICByZXR1cm4gX19yOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp
IGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90
eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90
eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBh
cmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKCgogICAgICBpbnQKICAgICAgY29tcGFyZShz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3Q7
CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24x
LCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7
CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgYmFzaWNfc3RyaW5nKCkKICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlfcmVw
KCkuX01fcmVmY29weSgpLCBfQWxsb2MoKSkgeyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9f
c3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9D
aGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
aXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp
dHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAg
IHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpCiAgICB7CiAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVf
dHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVu
ZChfX3NpemVfdHlwZSgxKSwgX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz
LmNvbXBhcmUoX19yaHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I9PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNv
bXBhcmUoX19saHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9
PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg
ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh
cmUoX19yaHMpID09IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg
ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAg
ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz
KQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQog
ICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jo
cykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBj
b25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAw
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBfQ2hhclQqIF9f
bGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xo
cy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAog
ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNv
bnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9f
bGhzKSA8IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg
ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQog
ICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAg
eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogIHsgcmV0
dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID49IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0g
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19s
aHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9fb3MsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxf
VHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lz
LAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0
ciwgX0NoYXJUIF9fZGVsaW0pOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFy
VCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3N0cik7Cn0KIyA1NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKCgoK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEg
MwojIDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2Mi
IDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAt
IHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0
IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBf
UmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVu
YW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3Jh
Z2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBl
KSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg
X19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0
b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxs
b2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAg
ICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAg
IHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9D
aGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAg
ICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpf
U19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVm
ZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAg
ICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5f
TV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0
YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3Ro
ID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3Ag
PSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+
X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7
CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBf
X3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9
IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNf
dHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBf
X3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAg
ICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAg
ICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5f
TV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJl
dHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAg
IF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxs
b2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7
CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFu
Y2UoX19iZWcsIF9fZW5kKSk7CgoKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX2JlZyA9
PSBfSW5JdGVyKCksIDApKQogICAgICAgICAgX190aHJvd19sb2dpY19lcnJvcigiYXR0ZW1wdCB0
byBjcmVhdGUgc3RyaW5nIHdpdGggbnVsbCBwb2ludGVyIik7CgogICAgICAgIGlmIChfX2JlZyA9
PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVw
KCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9f
ZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3ItPl9N
X3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAg
IHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBfX3It
Pl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0dXJu
IF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90
eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7CiAgICAgIGlmIChf
X24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgp
Ll9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uLCBf
X2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uKQogICAgICAgICAgICB0
cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CiAgICAgICAg
fQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9f
YSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19u
OwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAg
IHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihf
QWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAgICAgICBfX3N0ci5n
ZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAg
IDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwg
X19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo
X19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z
dHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNf
c3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAg
ICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0
YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9fYSkKICAg
IHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBf
QWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19u
LCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3Qg
X0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyA/IF9f
cyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hh
clQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0
KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29u
c3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19l
bmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3Jl
cCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlw
ZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0g
X19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAg
ICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXAp
OwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVz
dHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
c2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7
CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAg
IGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDAp
OwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01f
bXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVu
MikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVu
MTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4x
OwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAt
IF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6
ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9
IGdldF9hbGxvY2F0b3IoKTsKCgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUg
PSA0MDk2OwogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0g
NCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2Fw
YWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9D
aGFyVCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6
ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfUmVwKiBfX3I7CiAgICAgICAgICBpZiAoX19uZXdfc2l6
ZSA+IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6ZSA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAg
ICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipjYXBhY2l0eSgpID8KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCks
IF9fYSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShf
X25ld19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBpZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3Jl
ZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gp
CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9f
cG9zICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9f
aG93X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bv
c2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAg
ICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7Cgog
ICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9f
c3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFi
bGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2Rh
dGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2
b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNp
emVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8
fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVz
ID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh
c2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUo
KSkKICAgICAgICAgICAgX19yZXMgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3Jf
dHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01f
cmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01f
cmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+
X01faXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAg
ICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCkt
Pl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9f
cy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9N
X2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3Mu
X01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg
IGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxv
Y2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwg
X19zLl9NX2llbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2Fs
bG9jYXRvcigpKTsKICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190
bXAxOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNv
bnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNp
dHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNf
c3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0
eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiMgNDIxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICAgICAgY29uc3Qgc2l6
ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9
IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVv
ZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSA+IF9f
cGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAgICAgICAg
ICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19wYWdl
c2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNpdHkgKz0g
X19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9fY2FwYWNpdHkg
KyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0KICAgICAgZWxz
ZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3Qg
X19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxv
Y19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3N1YnBhZ2Vz
aXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAg
ICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXpl
b2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19h
bGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBfUmVwICpfX3AgPSBuZXcgKF9f
cGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5OwogICAgICBf
X3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAgICAgIHJl
dHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmIF9f
YWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3Jl
cXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9z
aXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9j
YXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZSAtIHNp
emVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAg
ICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVkX2NhcCA+IF9NX2NhcGFjaXR5ICYm
IF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgX19yID0gX1JlcDo6
X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2FwYWNpdHkgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAyKl9NX2NhcGFjaXR5LCBfX2FsbG9j
KTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9j
YXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01f
cmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01f
bGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzaXplKHNp
emVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgp
KQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2l6ZSIpOwog
ICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplIDwg
X19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CiAgICAgIGVsc2Ug
aWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0KCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwgX0lucHV0SXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwg
aW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CgogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19r
MSwgX19rMik7CiAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfX2kxLCBfX2kyLCBfX3Mu
X01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCkpOwogICAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9G
b3J3YXJkSXRlciBfX2sxLAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIp
CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBl
PihkaXN0YW5jZShfX2sxLCBfX2syKSk7CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIg
LSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwoKICAg
ICAgICBpZiAoX19kbWF4IDw9IF9fZG5ldykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9y
KCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2UiKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBf
X2kxIC0gX01faWJlZ2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5l
dyk7CgoKICAgICAgICBpZiAoX19kbmV3KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRh
KCkgKyBfX29mZiwgX19rMSwgX19rMik7CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBl
IF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAg
ICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICBjb25z
dCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4g
X19zdHJzaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJl
cGxhY2UiKTsKICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMiA9IF9fbjIgPCBfX3N0cnNpemUgLSBf
X3BvczI7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6
IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBf
X24xLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIs
IF9fZm9sZG4yKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90
eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXpl
ICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAg
ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9N
X2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3N0ci5fTV9pZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xl
biA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAg
aWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVu
KTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19z
dHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9N
X2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsK
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19s
ZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAg
ICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyAr
IF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBw
ZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xl
biA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHko
KSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBs
YWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9D
aGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5
cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9f
c3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19z
dHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhz
KTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXpl
X3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVu
ID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9f
c3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19y
aHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXpl
X3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2ky
IC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAg
ICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAg
ICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9N
X211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRy
YWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNp
emVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgp
KQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAg
ICAgIGlmIChfX24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5z
aXplKCkgLSBfX3BvczsKCiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsg
X19wb3MsIF9fbik7CgogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBf
X3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAo
OyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5
cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJl
dHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2Ms
IHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
aXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9z
IDwgX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01f
ZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAg
ICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3Bvcywg
X19uLCBfX2MpOwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBf
X2RhdGE7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAg
ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9
IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9f
biwgX19wb3MpOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAg
ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpj
b21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJl
dHVybiBfX3BvczsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsK
ICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBz
aXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlz
LT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9f
eHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAg
ICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4g
MDsgKQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBf
X2MpKQogICAgICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4g
bnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9f
cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9D
aGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10p
OwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0K
ICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXpl
X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAg
ICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXpl
ID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRy
YWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAg
ICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXpl
LS0gIT0gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJz
dF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
bikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsg
X194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBl
OjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194
cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJU
IF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0g
X19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAg
ICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAg
ICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw
ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9u
b3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg
Y29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAg
aWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAg
ICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6
ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAg
ICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6
ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAg
X19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAg
ICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXpl
LS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBj
b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBz
aXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXpl
KQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsK
CiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAg
IHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9
IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9f
bGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAg
ICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6
ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVf
dHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNp
emUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAg
ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAg
IHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNp
emVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6
ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRy
YWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBp
ZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBf
X3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewog
ICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpbnQgX19yID0gdHJh
aXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9fc2l6ZSk7CiAgICAgIGlmICghX19y
KQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAg
cmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6
ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlw
ZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6
OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikK
ICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No
YXJUKiBfX3MsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBz
aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUp
CiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoK
ICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBf
X24yKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEp
OwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGlu
dCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xl
bik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAg
ICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzLCBjbGFzcyBfQWxsb2M+CiAgICB2b2lkCiAgICBfU19zdHJpbmdfY29weShjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKICAgICAgICAgICAgICAg
ICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9fYnVmc2l6KQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsK
ICAgICAgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBl
IF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1ZnNpeiAtIDEpOwogICAgICBfVHJhaXRzOjpj
b3B5KF9fYnVmLCBfX3N0ci5kYXRhKCksIF9fYnl0ZXMpOwogICAgICBfX2J1ZltfX2J5dGVzXSA9
IF9DaGFyVCgpOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5n
PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIG9w
ZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYmFzaWNfb3N0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxj
aGFyPiYsIGNvbnN0IHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVh
bTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYsIGNoYXIp
OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIGdldGxpbmUo
YmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
YmFzaWNfc3RyaW5nPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVh
bTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJp
bmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08d2NoYXJfdD4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25zdCB3c3RyaW5nJik7CiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNp
Y19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3
Y2hhcl90PiYsIHdzdHJpbmcmKTsKfQojIDU4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9z
dHJpbmciIDIgMwojIDcgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z3ZC5ocHAiIDIKCgoK
Cm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBkeW5hbWljX2FueSB7CgpuYW1lc3BhY2UgYXV4
IHsKCnN0cnVjdCBlbXB0eV9zZXF1ZW5jZV9pdGVyCnsKICAgIHR5cGVkZWYgOjpib29zdDo6bXBs
Ojpmb3J3YXJkX2l0ZXJhdG9yX3RhZyBjYXRlZ29yeTsKfTsKCnN0cnVjdCBlbXB0eV9zZXF1ZW5j
ZQp7CiAgICB0eXBlZGVmIGVtcHR5X3NlcXVlbmNlX2l0ZXIgYmVnaW47CiAgICB0eXBlZGVmIGVt
cHR5X3NlcXVlbmNlX2l0ZXIgZW5kOwp9OwoKfQoKCgoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9u
TGlzdCA9IGF1eDo6ZW1wdHlfc2VxdWVuY2U+CmNsYXNzIGFueTsKCgoKCmNsYXNzIGJhZF9leHRy
YWN0OwoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgT3BlcmF0aW9uTGlzdD4KVCBleHRyYWN0KGFu
eTxPcGVyYXRpb25MaXN0PiAmKTsKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE9wZXJhdGlvbkxp
c3Q+ClQgZXh0cmFjdChjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gJik7Cgp0ZW1wbGF0ZTxjbGFz
cyBULCBjbGFzcyBPcGVyYXRpb25MaXN0PgpUICogZXh0cmFjdChhbnk8T3BlcmF0aW9uTGlzdD4g
Kik7Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBPcGVyYXRpb25MaXN0PgpUICogZXh0cmFjdChj
b25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gKik7CgoKCgpzdHJ1Y3QgYW55VCB7fTsKCmNsYXNzIGJh
ZF9mdW5jdGlvbl9jYWxsOwoKdGVtcGxhdGU8Y2xhc3MgRW5kRnVuY3Rpb24sIGNsYXNzIFNpZ25h
dHVyZT4Kc3RydWN0IGZ1bmN0aW9uOwoKCgoKCnRlbXBsYXRlPGNsYXNzIFJlc3VsdCwgY2xhc3Mg
SW5kZXgsIGNsYXNzIEFyZyA9IGNvbnN0IGFueVQgJj4Kc3RydWN0IHN1YnNjcmlwdDsKCnN0cnVj
dCBpbmNyZW1lbnQ7CnN0cnVjdCBkZWNyZW1lbnQ7CnN0cnVjdCBkZXJlZmVyZW5jZTsKc3RydWN0
IGVxdWFsX3RvOwpzdHJ1Y3Qgbm90X2VxdWFsX3RvOwpzdHJ1Y3QgbGVzczsKc3RydWN0IGxlc3Nf
ZXF1YWw7CnN0cnVjdCBncmVhdGVyOwpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbDsKc3RydWN0IGxvZ2lj
YWxfYW5kOwpzdHJ1Y3QgbG9naWNhbF9vcjsKc3RydWN0IGxvZ2ljYWxfbm90OwpzdHJ1Y3QgcGx1
czsKc3RydWN0IG1pbnVzOwpzdHJ1Y3QgbXVsdGlwbGllczsKc3RydWN0IGRpdmlkZXM7CnN0cnVj
dCBtb2R1bHVzOwpzdHJ1Y3QgYXNzaWdubWVudF9wbHVzOwpzdHJ1Y3QgYXNzaWdubWVudF9taW51
czsKc3RydWN0IGFzc2lnbm1lbnRfbXVsdGlwbGllczsKc3RydWN0IGFzc2lnbm1lbnRfZGl2aWRl
czsKc3RydWN0IGFzc2lnbm1lbnRfbW9kdWx1czsKc3RydWN0IG5lZ2F0ZTsKCnRlbXBsYXRlPGNs
YXNzIFQ+CnN0cnVjdCBkZXJlZmVyZW5jZV90bzsKCnRlbXBsYXRlPGNsYXNzIENoYXIsIGNsYXNz
IFRyYWl0cyA9IDo6c3RkOjpjaGFyX3RyYWl0czxDaGFyPiA+CnN0cnVjdCB0b19iYXNpY19vc3Ry
ZWFtOwoKdHlwZWRlZiB0b19iYXNpY19vc3RyZWFtPGNoYXI+IHRvX29zdHJlYW07CgoKdHlwZWRl
ZiB0b19iYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHRvX3dvc3RyZWFtOwoKCgp0ZW1wbGF0ZTxjbGFz
cyBTaWduYXR1cmU+CnN0cnVjdCBmdW5jdGlvbl9jYWxsOwoKCgp9IH0KIyAzNCAiLi4vLi4vLi4v
Ym9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNl
IGR5bmFtaWNfYW55IHsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8aW50IE4+IHN0cnVjdCBp
bnRfaWQge307CnRlbXBsYXRlPGJvb2wgQj4gc3RydWN0IGJvb2xfaWQge307Cgp0ZW1wbGF0ZTxj
bGFzcyBUPiBzdHJ1Y3QgdHlwZV9pZAp7CiAgdHlwZWRlZiBUIHR5cGU7Cn07CgoKc3RydWN0IHNp
ZyB7fTsKCgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25zLCBjbGFzcyBCZWdpbiwgY2xhc3MgRW5k
PgpzdHJ1Y3QgcGxhY2Vob2xkZXJfZXhlY3V0ZTsKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMs
IGNsYXNzIEVuZD4Kc3RydWN0IHBsYWNlaG9sZGVyX2V4ZWN1dGU8T3BlcmF0aW9ucyxFbmQsRW5k
Pgp7CiAgdm9pZCBleGVjdXRlKHNpZykgY29uc3Qge30KfTsKCnRlbXBsYXRlPGNsYXNzIE9wZXJh
dGlvbnM+CnN0cnVjdCBwbGFjZWhvbGRlcgogIDogcGxhY2Vob2xkZXJfZXhlY3V0ZQogICAgPAog
ICAgICBPcGVyYXRpb25zLAogICAgICB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmJlZ2luPE9wZXJh
dGlvbnM+Ojp0eXBlLAogICAgICB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmVuZDxPcGVyYXRpb25z
Pjo6dHlwZQogICAgPgp7CiAgdmlydHVhbCB+cGxhY2Vob2xkZXIoKSB0aHJvdygpID0gMDsKICB2
aXJ0dWFsIGNvbnN0IDo6c3RkOjp0eXBlX2luZm8gJiB0eXBlKHNpZykgY29uc3QgPSAwOwogIHZp
cnR1YWwgcGxhY2Vob2xkZXIgKiBjbG9uZShzaWcpIGNvbnN0ID0gMDsKfTsKCnRlbXBsYXRlPGNs
YXNzIE9wZXJhdGlvbnM+CmlubGluZSBwbGFjZWhvbGRlcjxPcGVyYXRpb25zPjo6fnBsYWNlaG9s
ZGVyKCkgdGhyb3coKSB7fQoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQsIGNs
YXNzIEJlZ2luLCBjbGFzcyBFbmQ+CnN0cnVjdCBub25jbGFzc19ob2xkZXJfZXhlY3V0ZTsKCnRl
bXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQsIGNsYXNzIEVuZD4Kc3RydWN0IG5vbmNs
YXNzX2hvbGRlcl9leGVjdXRlPE9wZXJhdGlvbnMsVCxFbmQsRW5kPgogIDogcGxhY2Vob2xkZXI8
T3BlcmF0aW9ucz4Kewp9OwoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9ucywgY2xhc3MgVD4Kc3Ry
dWN0IG5vbmNsYXNzX2hvbGRlcgogIDogbm9uY2xhc3NfaG9sZGVyX2V4ZWN1dGUKICAgIDwKICAg
ICAgT3BlcmF0aW9ucywKICAgICAgVCwKICAgICAgdHlwZW5hbWUgOjpib29zdDo6bXBsOjpiZWdp
bjxPcGVyYXRpb25zPjo6dHlwZSwKICAgICAgdHlwZW5hbWUgOjpib29zdDo6bXBsOjplbmQ8T3Bl
cmF0aW9ucz46OnR5cGUKICAgID4KewogIG5vbmNsYXNzX2hvbGRlcihjb25zdCBUICYgdmFsKQog
ICAgOiB2YWx1ZSh2YWwpIHt9CgogIG5vbmNsYXNzX2hvbGRlcihjb25zdCBub25jbGFzc19ob2xk
ZXIgJiBvdGhlcikKICAgIDogdmFsdWUob3RoZXIudmFsdWUpIHt9CgogIH5ub25jbGFzc19ob2xk
ZXIoKSB0aHJvdygpIHt9CgogIGNvbnN0IDo6c3RkOjp0eXBlX2luZm8gJiB0eXBlKHNpZykgY29u
c3QKICB7CiAgICByZXR1cm4gdHlwZWlkKFQpOwogIH0KCiAgcGxhY2Vob2xkZXI8T3BlcmF0aW9u
cz4gKiBjbG9uZShzaWcpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBub25jbGFzc19ob2xkZXIo
KnRoaXMpOwogIH0KCiAgVCB2YWx1ZTsKfTsKCgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25zLCBj
bGFzcyBULCBjbGFzcyBCZWdpbiwgY2xhc3MgRW5kPgpzdHJ1Y3QgY2xhc3NfaG9sZGVyX2V4ZWN1
dGU7Cgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25zLCBjbGFzcyBULCBjbGFzcyBFbmQ+CnN0cnVj
dCBjbGFzc19ob2xkZXJfZXhlY3V0ZTxPcGVyYXRpb25zLFQsRW5kLEVuZD4KICA6IHBsYWNlaG9s
ZGVyPE9wZXJhdGlvbnM+CnsKfTsKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQ+
CnN0cnVjdCBjbGFzc19ob2xkZXIKICA6IGNsYXNzX2hvbGRlcl9leGVjdXRlCiAgICA8CiAgICAg
IE9wZXJhdGlvbnMsCiAgICAgIFQsCiAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YmVnaW48
T3BlcmF0aW9ucz46OnR5cGUsCiAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6ZW5kPE9wZXJh
dGlvbnM+Ojp0eXBlCiAgICA+CiAgLCBUCgp7CiAgY2xhc3NfaG9sZGVyKGNvbnN0IFQgJiB2YWwp
CiAgICA6IFQodmFsKSB7fQoKICBjbGFzc19ob2xkZXIoY29uc3QgY2xhc3NfaG9sZGVyICYgb3Ro
ZXIpCiAgICA6IFQoc3RhdGljX2Nhc3Q8Y29uc3QgVCAmPihvdGhlcikpIHt9CgogIH5jbGFzc19o
b2xkZXIoKSB0aHJvdygpIHt9CgogIGNvbnN0IDo6c3RkOjp0eXBlX2luZm8gJiB0eXBlKDo6Ym9v
c3Q6OmR5bmFtaWNfYW55OjphdXg6OnNpZykgY29uc3QKICB7CiAgICByZXR1cm4gdHlwZWlkKFQp
OwogIH0KCiAgcGxhY2Vob2xkZXI8T3BlcmF0aW9ucz4gKiBjbG9uZSg6OmJvb3N0OjpkeW5hbWlj
X2FueTo6YXV4OjpzaWcpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBjbGFzc19ob2xkZXIoKnRo
aXMpOwogIH0KCgogIHZvaWQgKiBvcGVyYXRvciBuZXcoOjpzdGQ6OnNpemVfdCBzeikKICB7CiAg
ICByZXR1cm4gOjpvcGVyYXRvciBuZXcoc3opOwogIH0KfTsKCgp0ZW1wbGF0ZTxjbGFzcyBPcGVy
YXRpb25MaXN0PgpzdHJ1Y3QgZmFjdG9yeQp7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdGF0aWMg
cGxhY2Vob2xkZXI8T3BlcmF0aW9uTGlzdD4gKiBjcmVhdGUoY29uc3QgVCAmIHZhbHVlKQogIHsK
ICAgIHR5cGVkZWYgdHlwZW5hbWUKICAgICAgOjpib29zdDo6bXBsOjphcHBseV9pZgogICAgICA8
CiAgICAgICAgOjpib29zdDo6aXNfY2xhc3M8VD4sCiAgICAgICAgOjpib29zdDo6bXBsOjppZGVu
dGl0eTxjbGFzc19ob2xkZXI8T3BlcmF0aW9uTGlzdCwgVD4gPiwKICAgICAgICA6OmJvb3N0Ojpt
cGw6OmlkZW50aXR5PG5vbmNsYXNzX2hvbGRlcjxPcGVyYXRpb25MaXN0LCBUPiA+CiAgICAgID46
OnR5cGUgaG9sZGVyX3R5cGU7CiAgICByZXR1cm4gbmV3IGhvbGRlcl90eXBlKHZhbHVlKTsKICB9
Cn07CgoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQsIGJvb2wgSXNDbGFzcz4K
c3RydWN0IGV4dHJhY3Rvcl9pbXBsCnsKICB0eXBlZGVmIGNsYXNzX2hvbGRlcjxPcGVyYXRpb25z
LFQ+IGhvbGRlcl90eXBlOwoKICBUICYgc3RhdGljX2V4dHJhY3QoaG9sZGVyX3R5cGUgJiByKSBj
b25zdAogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxUICY+KHIpOwogIH0KCiAgVCAqIHN0YXRp
Y19leHRyYWN0KGhvbGRlcl90eXBlICogcCkgY29uc3QKICB7CiAgICBpZihwID09IDApCiAgICAg
IHJldHVybiAwOwogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4ocCk7CiAgfQoKICBUICYgc3Rh
dGljX2V4dHJhY3QocGxhY2Vob2xkZXI8T3BlcmF0aW9ucz4gJiByKSBjb25zdAogIHsKICAgICgo
dm9pZCkgKCgmciAhPSAwICYmIHIudHlwZShzaWcoKSkgPT0gdHlwZWlkKFQpKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoIiZyICE9IDAgJiYgci50eXBlKHNpZygpKSA9PSB0eXBlaWQoVCkiLCAiLi4v
Li4vLi4vYm9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIsIDIwNCwgKChjb25zdCBjaGFyICopIDAp
KSwgMCkpKTsKICAgIHJldHVybiBzdGF0aWNfZXh0cmFjdChzdGF0aWNfY2FzdDxob2xkZXJfdHlw
ZSAmPihyKSk7CiAgfQoKICBUICogc3RhdGljX2V4dHJhY3QocGxhY2Vob2xkZXI8T3BlcmF0aW9u
cz4gKiBwKSBjb25zdAogIHsKICAgIGlmKHAgPT0gMCkKICAgICAgcmV0dXJuIDA7CiAgICAoKHZv
aWQpICgocC0+dHlwZShzaWcoKSkgPT0gdHlwZWlkKFQpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo
InAtPnR5cGUoc2lnKCkpID09IHR5cGVpZChUKSIsICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2Fu
eS9hbnkuaHBwIiwgMjEyLCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogICAgcmV0dXJuIHN0
YXRpY19leHRyYWN0KHN0YXRpY19jYXN0PGhvbGRlcl90eXBlICo+KHApKTsKICB9CgogIFQgKiBl
eHRyYWN0X3B0cihwbGFjZWhvbGRlcjxPcGVyYXRpb25zPiAqIHApIGNvbnN0CiAgewojIDIyNyAi
Li4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIKICAgIHJldHVybiBkeW5hbWljX2Nh
c3Q8VCAqPihwKTsKICB9CgogIGNvbnN0IFQgKiBleHRyYWN0X3B0cihjb25zdCBwbGFjZWhvbGRl
cjxPcGVyYXRpb25zPiAqIHApIGNvbnN0CiAgewogICAgcmV0dXJuIGV4dHJhY3RfcHRyKGNvbnN0
X2Nhc3Q8cGxhY2Vob2xkZXI8T3BlcmF0aW9ucz4gKj4ocCkpOwogIH0KfTsKCnRlbXBsYXRlPGNs
YXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQ+CnN0cnVjdCBleHRyYWN0b3JfaW1wbDxPcGVyYXRpb25z
LFQsZmFsc2U+CnsKICB0eXBlZGVmIG5vbmNsYXNzX2hvbGRlcjxPcGVyYXRpb25zLFQ+IGhvbGRl
cl90eXBlOwoKICBUICYgc3RhdGljX2V4dHJhY3QoaG9sZGVyX3R5cGUgJiByKSBjb25zdAogIHsK
ICAgIHJldHVybiByLnZhbHVlOwogIH0KCiAgVCAqIHN0YXRpY19leHRyYWN0KGhvbGRlcl90eXBl
ICogcCkgY29uc3QKICB7CiAgICBpZihwID09IDApCiAgICAgIHJldHVybiAwOwogICAgcmV0dXJu
ICZwLT52YWx1ZTsKICB9CgogIFQgJiBzdGF0aWNfZXh0cmFjdChwbGFjZWhvbGRlcjxPcGVyYXRp
b25zPiAmIHIpIGNvbnN0CiAgewogICAgKCh2b2lkKSAoKCZyICE9IDAgJiYgci50eXBlKHNpZygp
KSA9PSB0eXBlaWQoVCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiJnIgIT0gMCAmJiByLnR5cGUo
c2lnKCkpID09IHR5cGVpZChUKSIsICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9hbnkuaHBw
IiwgMjU1LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogICAgcmV0dXJuIHN0YXRpY19leHRy
YWN0KHN0YXRpY19jYXN0PGhvbGRlcl90eXBlICY+KHIpKTsKICB9CgogIFQgKiBzdGF0aWNfZXh0
cmFjdChwbGFjZWhvbGRlcjxPcGVyYXRpb25zPiAqIHApIGNvbnN0CiAgewogICAgaWYocCA9PSAw
KQogICAgICByZXR1cm4gMDsKICAgICgodm9pZCkgKChwLT50eXBlKHNpZygpKSA9PSB0eXBlaWQo
VCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgicC0+dHlwZShzaWcoKSkgPT0gdHlwZWlkKFQpIiwg
Ii4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2FueS5ocHAiLCAyNjMsICgoY29uc3QgY2hhciAq
KSAwKSksIDApKSk7CiAgICByZXR1cm4gc3RhdGljX2V4dHJhY3Qoc3RhdGljX2Nhc3Q8aG9sZGVy
X3R5cGUgKj4ocCkpOwogIH0KCiAgVCAqIGV4dHJhY3RfcHRyKHBsYWNlaG9sZGVyPE9wZXJhdGlv
bnM+ICogcCkgY29uc3QKICB7CiAgICBpZihwID09IDAgfHwgcC0+dHlwZShzaWcoKSkgIT0gdHlw
ZWlkKFQpKQogICAgICByZXR1cm4gMDsKICAgIHJldHVybiBzdGF0aWNfZXh0cmFjdChzdGF0aWNf
Y2FzdDxob2xkZXJfdHlwZSAqPihwKSk7CiAgfQoKICBjb25zdCBUICogZXh0cmFjdF9wdHIoY29u
c3QgcGxhY2Vob2xkZXI8T3BlcmF0aW9ucz4gKiBwKSBjb25zdAogIHsKICAgIHJldHVybiBleHRy
YWN0X3B0cihjb25zdF9jYXN0PHBsYWNlaG9sZGVyPE9wZXJhdGlvbnM+ICo+KHApKTsKICB9Cn07
CgoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9ucywgY2xhc3MgVD4Kc3RydWN0IGV4dHJhY3Rvcgog
IDogZXh0cmFjdG9yX2ltcGw8T3BlcmF0aW9ucywgVCwgKDo6Ym9vc3Q6OmlzX2NsYXNzPFQ+Ojp2
YWx1ZSk+CnsKfTsKCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBPcGVyYXRpb25MaXN0Pgpjb25z
dCBUICogZXh0cmFjdF9jb25zdF9wdHIoY29uc3QgcGxhY2Vob2xkZXI8T3BlcmF0aW9uTGlzdD4g
KiBwLAogICAgICAgIHR5cGVfaWQ8Y29uc3QgVD4pCnsKICByZXR1cm4gZXh0cmFjdG9yPE9wZXJh
dGlvbkxpc3QsVD4oKS5leHRyYWN0X3B0cihwKTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNz
IE9wZXJhdGlvbkxpc3Q+ClQgKiBleHRyYWN0X3B0cihjb25zdCBwbGFjZWhvbGRlcjxPcGVyYXRp
b25MaXN0PiAqIHAsIGJvb2xfaWQ8dHJ1ZT4pCnsKICByZXR1cm4gZXh0cmFjdF9jb25zdF9wdHIo
cCwgdHlwZV9pZDxUPigpKTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE9wZXJhdGlvbkxp
c3Q+ClQgKiBleHRyYWN0X3B0cihwbGFjZWhvbGRlcjxPcGVyYXRpb25MaXN0PiAqIHAsIGJvb2xf
aWQ8ZmFsc2U+KQp7CiAgcmV0dXJuIGV4dHJhY3RvcjxPcGVyYXRpb25MaXN0LFQ+KCkuZXh0cmFj
dF9wdHIocCk7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBQbGFjZWhvbGRlcj4KVCAqIGV4
dHJhY3RfcHRyKFBsYWNlaG9sZGVyICogcCkKewogIGJvb2xfaWQ8IDo6Ym9vc3Q6OmlzX2NvbnN0
PFQ+Ojp2YWx1ZT4gaWQ7CgoKICByZXR1cm4gZXh0cmFjdF9wdHI8VD4ocCwgaWQpOwp9CgoKdGVt
cGxhdGU8Y2xhc3MgVCwgY2xhc3MgUGxhY2Vob2xkZXI+ClQgJiBleHRyYWN0X3JlZihQbGFjZWhv
bGRlciAqIHAsIHR5cGVfaWQ8VCAmPikKewogIGlmKFQgKiBwdHIgPSBleHRyYWN0X3B0cjxUPihw
KSkKICAgIHJldHVybiAqcHRyOwogIHRocm93IGJhZF9leHRyYWN0KCk7Cn0KCgp0ZW1wbGF0ZTxj
bGFzcyBULCBjbGFzcyBQbGFjZWhvbGRlcj4KVCBleHRyYWN0X25vbnB0cihQbGFjZWhvbGRlciAq
IHAsIGJvb2xfaWQ8dHJ1ZT4pCnsKICByZXR1cm4gZXh0cmFjdF9yZWYocCwgdHlwZV9pZDxUPigp
KTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFBsYWNlaG9sZGVyPgpUIGV4dHJhY3Rfbm9u
cHRyKFBsYWNlaG9sZGVyICogcCwgYm9vbF9pZDxmYWxzZT4pCnsKICByZXR1cm4gZXh0cmFjdF9y
ZWYocCwgdHlwZV9pZDxjb25zdCBUICY+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBQ
bGFjZWhvbGRlcj4KVCBleHRyYWN0X25vbnB0cihQbGFjZWhvbGRlciAqIHApCnsKICBib29sX2lk
PCA6OmJvb3N0Ojppc19yZWZlcmVuY2U8VD46OnZhbHVlPiBpZDsKICByZXR1cm4gZXh0cmFjdF9u
b25wdHI8VD4ocCwgaWQpOwp9CgoKdGVtcGxhdGU8Y2xhc3MgQW55LCBjbGFzcyBPcGVyYXRpb24s
IGNsYXNzIEJlZ2luLCBjbGFzcyBFbmQ+CnN0cnVjdCBhbnlfb3BlcmF0b3JfYm9keTsKCnRlbXBs
YXRlPGNsYXNzIEFueSwgY2xhc3MgQmVnaW4sIGNsYXNzIEVuZD4Kc3RydWN0IGFueV9vcGVyYXRv
cgogIDogYW55X29wZXJhdG9yX2JvZHkKICAgIDwKICAgICAgQW55LAogICAgICB0eXBlbmFtZSBC
ZWdpbjo6dHlwZSwKICAgICAgQmVnaW4sCiAgICAgIEVuZAogICAgPgp7Cn07Cgp0ZW1wbGF0ZTxj
bGFzcyBBbnksIGNsYXNzIEVuZD4Kc3RydWN0IGFueV9vcGVyYXRvcjxBbnksRW5kLEVuZD4KewoK
ICBzaWcgb3BlcmF0b3IoKShzaWcpIGNvbnN0OwogIHNpZyBvcGVyYXRvcltdKHNpZykgY29uc3Q7
Cn07CgoKdGVtcGxhdGU8Y2xhc3MgQW55LCBjbGFzcyBPcGVyYXRpb24sIGNsYXNzIEJlZ2luLCBj
bGFzcyBFbmQ+CnN0cnVjdCBhbnlfb3BlcmF0b3JfYm9keSA6IGFueV9vcGVyYXRvcjxBbnksIHR5
cGVuYW1lIEJlZ2luOjpuZXh0LCBFbmQ+CnsKfTsKCn0KCgpjbGFzcyBiYWRfZXh0cmFjdCA6IHB1
YmxpYyA6OnN0ZDo6ZXhjZXB0aW9uCnsKcHVibGljOgogIGNvbnN0IGNoYXIgKiB3aGF0KCkgY29u
c3QgdGhyb3coKQogIHsKICAgIHJldHVybiAiYm9vc3QuZHluYW1pY19hbnk6IGZhaWxlZCBleHRy
YWN0IjsKICB9Cn07CgoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbkxpc3Q+CmNsYXNzIGFueQog
IDogcHVibGljIGF1eDo6YW55X29wZXJhdG9yCiAgICAgICAgICAgPAogICAgICAgICAgICAgYW55
PE9wZXJhdGlvbkxpc3Q+LAogICAgICAgICAgICAgdHlwZW5hbWUgOjpib29zdDo6bXBsOjpiZWdp
bjxPcGVyYXRpb25MaXN0Pjo6dHlwZSwKICAgICAgICAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1w
bDo6ZW5kPE9wZXJhdGlvbkxpc3Q+Ojp0eXBlCiAgICAgICAgICAgPgp7CnB1YmxpYzoKCiAgdHlw
ZWRlZiBPcGVyYXRpb25MaXN0IG9wZXJhdGlvbl9saXN0OwoKICBhbnkoKQogICAgOiBtX2NvbnRl
bnQoMCkge30KCiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBhbnkoY29uc3QgVCAmIHZhbHVlKQogICAg
OiBtX2NvbnRlbnQoYXV4OjpmYWN0b3J5PE9wZXJhdGlvbkxpc3Q+OjpjcmVhdGUodmFsdWUpKSB7
fQoKICBhbnkoY29uc3QgYW55ICYgb3RoZXIpCiAgICA6IG1fY29udGVudChvdGhlci5tX2NvbnRl
bnQgPyBvdGhlci5tX2NvbnRlbnQtPmNsb25lKGF1eDo6c2lnKCkpIDogMCkge30KCiAgfmFueSgp
CiAgewogICAgZGVsZXRlIG1fY29udGVudDsKICB9CgogIGFueSAmIG9wZXJhdG9yPShjb25zdCBh
bnkgJiBvdGhlcikKICB7CiAgICBhdXg6OnBsYWNlaG9sZGVyPE9wZXJhdGlvbkxpc3Q+ICogb2xk
ID0gbV9jb250ZW50OwogICAgbV9jb250ZW50ID0gb3RoZXIubV9jb250ZW50ID8gb3RoZXIubV9j
b250ZW50LT5jbG9uZShhdXg6OnNpZygpKSA6IDA7CiAgICBkZWxldGUgb2xkOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBhbnkgJiBvcGVyYXRvcj0oY29uc3Qg
VCAmIHZhbHVlKQogIHsKICAgIGF1eDo6cGxhY2Vob2xkZXI8T3BlcmF0aW9uTGlzdD4gKiBvbGQg
PSBtX2NvbnRlbnQ7CiAgICBtX2NvbnRlbnQgPSBhdXg6OmZhY3Rvcnk8T3BlcmF0aW9uTGlzdD46
OmNyZWF0ZSh2YWx1ZSk7CiAgICBkZWxldGUgb2xkOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAg
dm9pZCBzd2FwKGFueSAmIG90aGVyKQogIHsKICAgIDo6c3RkOjpzd2FwKG1fY29udGVudCwgb3Ro
ZXIubV9jb250ZW50KTsKICB9CgogIGJvb2wgZW1wdHkoKSBjb25zdAogIHsKICAgIHJldHVybiAh
bV9jb250ZW50OwogIH0KCiAgY29uc3QgOjpzdGQ6OnR5cGVfaW5mbyAmIHR5cGUoKSBjb25zdAog
IHsKICAgIHJldHVybiBtX2NvbnRlbnQgPyBtX2NvbnRlbnQtPnR5cGUoYXV4OjpzaWcoKSkgOiB0
eXBlaWQodm9pZCk7CiAgfQoKcHJpdmF0ZToKCgoKICB0ZW1wbGF0ZTxjbGFzcyBPdGhlckxpc3Q+
CiAgYW55KGNvbnN0IGFueTxPdGhlckxpc3Q+ICYpOwoKICB0ZW1wbGF0ZTxjbGFzcyBPdGhlckxp
c3Q+CiAgYW55ICYgb3BlcmF0b3I9KGNvbnN0IGFueTxPdGhlckxpc3Q+ICYpOwojIDQ4MCAiLi4v
Li4vLi4vYm9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIKcHVibGljOgoKCgogIGF1eDo6cGxhY2Vo
b2xkZXI8T3BlcmF0aW9uTGlzdD4gKiBtX2NvbnRlbnQ7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgT3Bl
cmF0aW9uTGlzdD4KaW5saW5lIHZvaWQgc3dhcChhbnk8T3BlcmF0aW9uTGlzdD4gJiBhLCBhbnk8
T3BlcmF0aW9uTGlzdD4gJiBiKQp7CiAgYS5zd2FwKGIpOwp9CgoKCgp0ZW1wbGF0ZTxjbGFzcyBU
LCBjbGFzcyBPcGVyYXRpb25MaXN0PgpUIGV4dHJhY3QoYW55PE9wZXJhdGlvbkxpc3Q+ICYgcmVm
KQp7CiAgYXV4OjpwbGFjZWhvbGRlcjxPcGVyYXRpb25MaXN0PiAqIHAgPSByZWYubV9jb250ZW50
OwogIHJldHVybiBhdXg6OmV4dHJhY3Rfbm9ucHRyPFQ+KHApOwp9CgoKdGVtcGxhdGU8Y2xhc3Mg
VCwgY2xhc3MgT3BlcmF0aW9uTGlzdD4KVCBleHRyYWN0KGNvbnN0IGFueTxPcGVyYXRpb25MaXN0
PiAmIHJlZikKewogIGNvbnN0IGF1eDo6cGxhY2Vob2xkZXI8T3BlcmF0aW9uTGlzdD4gKiBwID0g
cmVmLm1fY29udGVudDsKICByZXR1cm4gYXV4OjpleHRyYWN0X25vbnB0cjxUPihwKTsKfQoKCnRl
bXBsYXRlPGNsYXNzIFQsIGNsYXNzIE9wZXJhdGlvbkxpc3Q+ClQgKiBleHRyYWN0KGFueTxPcGVy
YXRpb25MaXN0PiAqIHB0cikKewogIGlmKHB0ciA9PSAwKQogICAgcmV0dXJuIDA7CiAgYXV4Ojpw
bGFjZWhvbGRlcjxPcGVyYXRpb25MaXN0PiAqIHAgPSBwdHItPm1fY29udGVudDsKICByZXR1cm4g
YXV4OjpleHRyYWN0X3B0cjxUPihwKTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE9wZXJh
dGlvbkxpc3Q+ClQgKiBleHRyYWN0KGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAqIHB0cikKewog
IGlmKHB0ciA9PSAwKQogICAgcmV0dXJuIDA7CiAgY29uc3QgYXV4OjpwbGFjZWhvbGRlcjxPcGVy
YXRpb25MaXN0PiAqIHAgPSBwdHItPm1fY29udGVudDsKICByZXR1cm4gYXV4OjpleHRyYWN0X3B0
cjxUPihwKTsKfQoKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25MaXN0Pgpib29sIG9wZXJh
dG9yPT0oY29uc3QgYW55PE9wZXJhdGlvbkxpc3Q+ICYgYSwgY29uc3QgYW55PE9wZXJhdGlvbkxp
c3Q+ICYgYikKewogIHJldHVybiBlcXVhbF90bygpKGEsIGIpOwp9CgoKdGVtcGxhdGU8Y2xhc3Mg
T3BlcmF0aW9uTGlzdD4KYm9vbCBvcGVyYXRvciE9KGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAm
IGEsIGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGIpCnsKICByZXR1cm4gbm90X2VxdWFsX3Rv
KCkoYSwgYik7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25MaXN0Pgpib29sIG9wZXJhdG9y
PChjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gJiBhLCBjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4g
JiBiKQp7CiAgcmV0dXJuIGxlc3MoKShhLCBiKTsKfQoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlv
bkxpc3Q+CmJvb2wgb3BlcmF0b3I8PShjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gJiBhLCBjb25z
dCBhbnk8T3BlcmF0aW9uTGlzdD4gJiBiKQp7CiAgcmV0dXJuIGxlc3NfZXF1YWwoKShhLCBiKTsK
fQoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbkxpc3Q+CmJvb2wgb3BlcmF0b3I+KGNvbnN0IGFu
eTxPcGVyYXRpb25MaXN0PiAmIGEsIGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGIpCnsKICBy
ZXR1cm4gZ3JlYXRlcigpKGEsIGIpOwp9CgoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9uTGlzdD4K
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGEsIGNvbnN0IGFueTxP
cGVyYXRpb25MaXN0PiAmIGIpCnsKICByZXR1cm4gZ3JlYXRlcl9lcXVhbCgpKGEsIGIpOwp9CgoK
dGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9uTGlzdD4KYm9vbCBvcGVyYXRvciYmKGNvbnN0IGFueTxP
cGVyYXRpb25MaXN0PiAmIGEsIGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGIpCnsKICByZXR1
cm4gbG9naWNhbF9hbmQoKShhLCBiKTsKfQoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbkxpc3Q+
CmJvb2wgb3BlcmF0b3J8fChjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gJiBhLCBjb25zdCBhbnk8
T3BlcmF0aW9uTGlzdD4gJiBiKQp7CiAgcmV0dXJuIGxvZ2ljYWxfb3IoKShhLCBiKTsKfQoKCnRl
bXBsYXRlPGNsYXNzIE9wZXJhdGlvbkxpc3Q+CmFueTxPcGVyYXRpb25MaXN0PgpvcGVyYXRvciso
Y29uc3QgYW55PE9wZXJhdGlvbkxpc3Q+ICYgYSwgY29uc3QgYW55PE9wZXJhdGlvbkxpc3Q+ICYg
YikKewogIHJldHVybiBwbHVzKCkoYSwgYik7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25M
aXN0Pgphbnk8T3BlcmF0aW9uTGlzdD4Kb3BlcmF0b3ItKGNvbnN0IGFueTxPcGVyYXRpb25MaXN0
PiAmIGEsIGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGIpCnsKICByZXR1cm4gbWludXMoKShh
LCBiKTsKfQoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbkxpc3Q+CmFueTxPcGVyYXRpb25MaXN0
PgpvcGVyYXRvciooY29uc3QgYW55PE9wZXJhdGlvbkxpc3Q+ICYgYSwgY29uc3QgYW55PE9wZXJh
dGlvbkxpc3Q+ICYgYikKewogIHJldHVybiBtdWx0aXBsaWVzKCkoYSwgYik7Cn0KCgp0ZW1wbGF0
ZTxjbGFzcyBPcGVyYXRpb25MaXN0Pgphbnk8T3BlcmF0aW9uTGlzdD4Kb3BlcmF0b3IvKGNvbnN0
IGFueTxPcGVyYXRpb25MaXN0PiAmIGEsIGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGIpCnsK
ICByZXR1cm4gZGl2aWRlcygpKGEsIGIpOwp9CgoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9uTGlz
dD4KYW55PE9wZXJhdGlvbkxpc3Q+Cm9wZXJhdG9yJShjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4g
JiBhLCBjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gJiBiKQp7CiAgcmV0dXJuIG1vZHVsdXMoKShh
LCBiKTsKfQoKCnRlbXBsYXRlPGNsYXNzIENoYXIsIGNsYXNzIFRyYWl0cywgY2xhc3MgT3BlcmF0
aW9ucz4KOjpzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwgVHJhaXRzPiAmIG9wZXJhdG9yPDwoCiAg
OjpzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwgVHJhaXRzPiAmIG91dHB1dCwKICBjb25zdCBhbnk8
T3BlcmF0aW9ucz4gJiB2YWx1ZSkKewogIHJldHVybiB0b19iYXNpY19vc3RyZWFtPENoYXIsIFRy
YWl0cz4oKShvdXRwdXQsIHZhbHVlKTsKfQoKCgp9IH0KIyAzMSAiLi4vLi4vLi4vYm9vc3QvZHlu
YW1pY19hbnkvZnVuY3Rpb24uaHBwIiAyCiMgMSAiLi4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkv
YXV4L2Z1bmN0aW9uX2FyZ3VtZW50cy5ocHAiIDEKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z
dC9ib29zdC9tcGwvcG9wX2Zyb250X2Z3ZC5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvbXBsL3BvcF9mcm9udF9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3Bh
Y2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgcG9wX2Zyb250X3RyYWl0
czsKdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHBvcF9mcm9udDsKCn0KfQoj
IDUgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2F1eC9mdW5jdGlvbl9hcmd1bWVudHMuaHBw
IiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3BvcF9iYWNrX2Z3ZC5ocHAi
IDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3BvcF9iYWNrX2Z3ZC5ocHAi
Cm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIFRh
ZyA+IHN0cnVjdCBwb3BfYmFja190cmFpdHM7CnRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+
IHN0cnVjdCBwb3BfYmFjazsKCn0KfQojIDYgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2F1
eC9mdW5jdGlvbl9hcmd1bWVudHMuaHBwIiAyCgoKCm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFj
ZSBkeW5hbWljX2FueSB7IG5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8Y2xhc3MgRnVuVHJhaXRz
LCBsb25nIE4+CnN0cnVjdCBhcmdfYXQ7Cgp0ZW1wbGF0ZTxjbGFzcyBTaWc+CnN0cnVjdCBmdW5f
dHJhaXRzOwoKCgojIDEgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2F1eC9nZW5lcmF0ZWQv
ZnVuY3Rpb25fYXJndW1lbnRzX2ltcGwxMC5ocHAiIDEKCgp0ZW1wbGF0ZTxjbGFzcyBSPgpzdHJ1
Y3QgZnVuX3RyYWl0czxSKCk+IHsKICBzdGF0aWMgY29uc3QgbG9uZyBhcml0eT0wOwogIHR5cGVk
ZWYgUiByZXM7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0
eXBlZGVmIFIodHlwZSkoVCk7CiAgfTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNo
X2JhY2sgewogICAgdHlwZWRlZiBSKHR5cGUpKFQpOwogIH07CiAgdGVtcGxhdGU8Y2xhc3MgVT4K
ICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSkoKTsKICB9Owp9Owp0
ZW1wbGF0ZTxjbGFzcyBUcj4Kc3RydWN0IGFyZ19hdDxUciwwPiB7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBUcjo6dDAgdHlwZTsKfTsKdGVtcGxhdGU8Y2xhc3MgUixjbGFzcyBUMD4Kc3RydWN0IGZ1bl90
cmFpdHM8UihUMCk+IHsKICBzdGF0aWMgY29uc3QgbG9uZyBhcml0eT0xOwogIHR5cGVkZWYgUiBy
ZXM7CiAgdHlwZWRlZiBUMCB0MDsKICB0eXBlZGVmIFIocG9wX2Zyb250KSgpOwogIHR5cGVkZWYg
Uihwb3BfYmFjaykoKTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNoX2Zyb250IHsK
ICAgIHR5cGVkZWYgUih0eXBlKShULFQwKTsKICB9OwogIHRlbXBsYXRlPGNsYXNzIFQ+CiAgc3Ry
dWN0IHB1c2hfYmFjayB7CiAgICB0eXBlZGVmIFIodHlwZSkoVDAsVCk7CiAgfTsKICB0ZW1wbGF0
ZTxjbGFzcyBVPgogIHN0cnVjdCByZWJpbmRfcmVzdWx0IHsKICAgIHR5cGVkZWYgVSh0eXBlKShU
MCk7CiAgfTsKfTsKdGVtcGxhdGU8Y2xhc3MgVHI+CnN0cnVjdCBhcmdfYXQ8VHIsMT4gewogIHR5
cGVkZWYgdHlwZW5hbWUgVHI6OnQxIHR5cGU7Cn07CnRlbXBsYXRlPGNsYXNzIFIsY2xhc3MgVDAs
Y2xhc3MgVDE+CnN0cnVjdCBmdW5fdHJhaXRzPFIoVDAsVDEpPiB7CiAgc3RhdGljIGNvbnN0IGxv
bmcgYXJpdHk9MjsKICB0eXBlZGVmIFIgcmVzOwogIHR5cGVkZWYgVDAgdDA7CiAgdHlwZWRlZiBU
MSB0MTsKICB0eXBlZGVmIFIocG9wX2Zyb250KShUMSk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShU
MCk7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0eXBlZGVm
IFIodHlwZSkoVCxUMCxUMSk7CiAgfTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNo
X2JhY2sgewogICAgdHlwZWRlZiBSKHR5cGUpKFQwLFQxLFQpOwogIH07CiAgdGVtcGxhdGU8Y2xh
c3MgVT4KICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSkoVDAsVDEp
OwogIH07Cn07CnRlbXBsYXRlPGNsYXNzIFRyPgpzdHJ1Y3QgYXJnX2F0PFRyLDI+IHsKICB0eXBl
ZGVmIHR5cGVuYW1lIFRyOjp0MiB0eXBlOwp9Owp0ZW1wbGF0ZTxjbGFzcyBSLGNsYXNzIFQwLGNs
YXNzIFQxLGNsYXNzIFQyPgpzdHJ1Y3QgZnVuX3RyYWl0czxSKFQwLFQxLFQyKT4gewogIHN0YXRp
YyBjb25zdCBsb25nIGFyaXR5PTM7CiAgdHlwZWRlZiBSIHJlczsKICB0eXBlZGVmIFQwIHQwOwog
IHR5cGVkZWYgVDEgdDE7CiAgdHlwZWRlZiBUMiB0MjsKICB0eXBlZGVmIFIocG9wX2Zyb250KShU
MSxUMik7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSk7CiAgdGVtcGxhdGU8Y2xhc3MgVD4K
ICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0eXBlZGVmIFIodHlwZSkoVCxUMCxUMSxUMik7CiAg
fTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRlZiBS
KHR5cGUpKFQwLFQxLFQyLFQpOwogIH07CiAgdGVtcGxhdGU8Y2xhc3MgVT4KICBzdHJ1Y3QgcmVi
aW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSkoVDAsVDEsVDIpOwogIH07Cn07CnRlbXBs
YXRlPGNsYXNzIFRyPgpzdHJ1Y3QgYXJnX2F0PFRyLDM+IHsKICB0eXBlZGVmIHR5cGVuYW1lIFRy
Ojp0MyB0eXBlOwp9Owp0ZW1wbGF0ZTxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQy
LGNsYXNzIFQzPgpzdHJ1Y3QgZnVuX3RyYWl0czxSKFQwLFQxLFQyLFQzKT4gewogIHN0YXRpYyBj
b25zdCBsb25nIGFyaXR5PTQ7CiAgdHlwZWRlZiBSIHJlczsKICB0eXBlZGVmIFQwIHQwOwogIHR5
cGVkZWYgVDEgdDE7CiAgdHlwZWRlZiBUMiB0MjsKICB0eXBlZGVmIFQzIHQzOwogIHR5cGVkZWYg
Uihwb3BfZnJvbnQpKFQxLFQyLFQzKTsKICB0eXBlZGVmIFIocG9wX2JhY2spKFQwLFQxLFQyKTsK
ICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNoX2Zyb250IHsKICAgIHR5cGVkZWYgUih0
eXBlKShULFQwLFQxLFQyLFQzKTsKICB9OwogIHRlbXBsYXRlPGNsYXNzIFQ+CiAgc3RydWN0IHB1
c2hfYmFjayB7CiAgICB0eXBlZGVmIFIodHlwZSkoVDAsVDEsVDIsVDMsVCk7CiAgfTsKICB0ZW1w
bGF0ZTxjbGFzcyBVPgogIHN0cnVjdCByZWJpbmRfcmVzdWx0IHsKICAgIHR5cGVkZWYgVSh0eXBl
KShUMCxUMSxUMixUMyk7CiAgfTsKfTsKdGVtcGxhdGU8Y2xhc3MgVHI+CnN0cnVjdCBhcmdfYXQ8
VHIsND4gewogIHR5cGVkZWYgdHlwZW5hbWUgVHI6OnQ0IHR5cGU7Cn07CnRlbXBsYXRlPGNsYXNz
IFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQ+CnN0cnVjdCBm
dW5fdHJhaXRzPFIoVDAsVDEsVDIsVDMsVDQpPiB7CiAgc3RhdGljIGNvbnN0IGxvbmcgYXJpdHk9
NTsKICB0eXBlZGVmIFIgcmVzOwogIHR5cGVkZWYgVDAgdDA7CiAgdHlwZWRlZiBUMSB0MTsKICB0
eXBlZGVmIFQyIHQyOwogIHR5cGVkZWYgVDMgdDM7CiAgdHlwZWRlZiBUNCB0NDsKICB0eXBlZGVm
IFIocG9wX2Zyb250KShUMSxUMixUMyxUNCk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSxU
MixUMyk7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0eXBl
ZGVmIFIodHlwZSkoVCxUMCxUMSxUMixUMyxUNCk7CiAgfTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgog
IHN0cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRlZiBSKHR5cGUpKFQwLFQxLFQyLFQzLFQ0LFQp
OwogIH07CiAgdGVtcGxhdGU8Y2xhc3MgVT4KICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0
eXBlZGVmIFUodHlwZSkoVDAsVDEsVDIsVDMsVDQpOwogIH07Cn07CnRlbXBsYXRlPGNsYXNzIFRy
PgpzdHJ1Y3QgYXJnX2F0PFRyLDU+IHsKICB0eXBlZGVmIHR5cGVuYW1lIFRyOjp0NSB0eXBlOwp9
Owp0ZW1wbGF0ZTxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNs
YXNzIFQ0LGNsYXNzIFQ1PgpzdHJ1Y3QgZnVuX3RyYWl0czxSKFQwLFQxLFQyLFQzLFQ0LFQ1KT4g
ewogIHN0YXRpYyBjb25zdCBsb25nIGFyaXR5PTY7CiAgdHlwZWRlZiBSIHJlczsKICB0eXBlZGVm
IFQwIHQwOwogIHR5cGVkZWYgVDEgdDE7CiAgdHlwZWRlZiBUMiB0MjsKICB0eXBlZGVmIFQzIHQz
OwogIHR5cGVkZWYgVDQgdDQ7CiAgdHlwZWRlZiBUNSB0NTsKICB0eXBlZGVmIFIocG9wX2Zyb250
KShUMSxUMixUMyxUNCxUNSk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSxUMixUMyxUNCk7
CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0eXBlZGVmIFIo
dHlwZSkoVCxUMCxUMSxUMixUMyxUNCxUNSk7CiAgfTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0
cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRlZiBSKHR5cGUpKFQwLFQxLFQyLFQzLFQ0LFQ1LFQp
OwogIH07CiAgdGVtcGxhdGU8Y2xhc3MgVT4KICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0
eXBlZGVmIFUodHlwZSkoVDAsVDEsVDIsVDMsVDQsVDUpOwogIH07Cn07CnRlbXBsYXRlPGNsYXNz
IFRyPgpzdHJ1Y3QgYXJnX2F0PFRyLDY+IHsKICB0eXBlZGVmIHR5cGVuYW1lIFRyOjp0NiB0eXBl
Owp9Owp0ZW1wbGF0ZTxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQz
LGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2PgpzdHJ1Y3QgZnVuX3RyYWl0czxSKFQwLFQxLFQy
LFQzLFQ0LFQ1LFQ2KT4gewogIHN0YXRpYyBjb25zdCBsb25nIGFyaXR5PTc7CiAgdHlwZWRlZiBS
IHJlczsKICB0eXBlZGVmIFQwIHQwOwogIHR5cGVkZWYgVDEgdDE7CiAgdHlwZWRlZiBUMiB0MjsK
ICB0eXBlZGVmIFQzIHQzOwogIHR5cGVkZWYgVDQgdDQ7CiAgdHlwZWRlZiBUNSB0NTsKICB0eXBl
ZGVmIFQ2IHQ2OwogIHR5cGVkZWYgUihwb3BfZnJvbnQpKFQxLFQyLFQzLFQ0LFQ1LFQ2KTsKICB0
eXBlZGVmIFIocG9wX2JhY2spKFQwLFQxLFQyLFQzLFQ0LFQ1KTsKICB0ZW1wbGF0ZTxjbGFzcyBU
PgogIHN0cnVjdCBwdXNoX2Zyb250IHsKICAgIHR5cGVkZWYgUih0eXBlKShULFQwLFQxLFQyLFQz
LFQ0LFQ1LFQ2KTsKICB9OwogIHRlbXBsYXRlPGNsYXNzIFQ+CiAgc3RydWN0IHB1c2hfYmFjayB7
CiAgICB0eXBlZGVmIFIodHlwZSkoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVCk7CiAgfTsKICB0ZW1w
bGF0ZTxjbGFzcyBVPgogIHN0cnVjdCByZWJpbmRfcmVzdWx0IHsKICAgIHR5cGVkZWYgVSh0eXBl
KShUMCxUMSxUMixUMyxUNCxUNSxUNik7CiAgfTsKfTsKdGVtcGxhdGU8Y2xhc3MgVHI+CnN0cnVj
dCBhcmdfYXQ8VHIsNz4gewogIHR5cGVkZWYgdHlwZW5hbWUgVHI6OnQ3IHR5cGU7Cn07CnRlbXBs
YXRlPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQs
Y2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDc+CnN0cnVjdCBmdW5fdHJhaXRzPFIoVDAsVDEsVDIs
VDMsVDQsVDUsVDYsVDcpPiB7CiAgc3RhdGljIGNvbnN0IGxvbmcgYXJpdHk9ODsKICB0eXBlZGVm
IFIgcmVzOwogIHR5cGVkZWYgVDAgdDA7CiAgdHlwZWRlZiBUMSB0MTsKICB0eXBlZGVmIFQyIHQy
OwogIHR5cGVkZWYgVDMgdDM7CiAgdHlwZWRlZiBUNCB0NDsKICB0eXBlZGVmIFQ1IHQ1OwogIHR5
cGVkZWYgVDYgdDY7CiAgdHlwZWRlZiBUNyB0NzsKICB0eXBlZGVmIFIocG9wX2Zyb250KShUMSxU
MixUMyxUNCxUNSxUNixUNyk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSxUMixUMyxUNCxU
NSxUNik7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0eXBl
ZGVmIFIodHlwZSkoVCxUMCxUMSxUMixUMyxUNCxUNSxUNixUNyk7CiAgfTsKICB0ZW1wbGF0ZTxj
bGFzcyBUPgogIHN0cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRlZiBSKHR5cGUpKFQwLFQxLFQy
LFQzLFQ0LFQ1LFQ2LFQ3LFQpOwogIH07CiAgdGVtcGxhdGU8Y2xhc3MgVT4KICBzdHJ1Y3QgcmVi
aW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSkoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcp
OwogIH07Cn07CnRlbXBsYXRlPGNsYXNzIFRyPgpzdHJ1Y3QgYXJnX2F0PFRyLDg+IHsKICB0eXBl
ZGVmIHR5cGVuYW1lIFRyOjp0OCB0eXBlOwp9Owp0ZW1wbGF0ZTxjbGFzcyBSLGNsYXNzIFQwLGNs
YXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNz
IFQ3LGNsYXNzIFQ4PgpzdHJ1Y3QgZnVuX3RyYWl0czxSKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3
LFQ4KT4gewogIHN0YXRpYyBjb25zdCBsb25nIGFyaXR5PTk7CiAgdHlwZWRlZiBSIHJlczsKICB0
eXBlZGVmIFQwIHQwOwogIHR5cGVkZWYgVDEgdDE7CiAgdHlwZWRlZiBUMiB0MjsKICB0eXBlZGVm
IFQzIHQzOwogIHR5cGVkZWYgVDQgdDQ7CiAgdHlwZWRlZiBUNSB0NTsKICB0eXBlZGVmIFQ2IHQ2
OwogIHR5cGVkZWYgVDcgdDc7CiAgdHlwZWRlZiBUOCB0ODsKICB0eXBlZGVmIFIocG9wX2Zyb250
KShUMSxUMixUMyxUNCxUNSxUNixUNyxUOCk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSxU
MixUMyxUNCxUNSxUNixUNyk7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9u
dCB7CiAgICB0eXBlZGVmIFIodHlwZSkoVCxUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCk7CiAg
fTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRlZiBS
KHR5cGUpKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQpOwogIH07CiAgdGVtcGxhdGU8Y2xh
c3MgVT4KICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSkoVDAsVDEs
VDIsVDMsVDQsVDUsVDYsVDcsVDgpOwogIH07Cn07CnRlbXBsYXRlPGNsYXNzIFRyPgpzdHJ1Y3Qg
YXJnX2F0PFRyLDk+IHsKICB0eXBlZGVmIHR5cGVuYW1lIFRyOjp0OSB0eXBlOwp9Owp0ZW1wbGF0
ZTxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNs
YXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5PgpzdHJ1Y3QgZnVuX3Ry
YWl0czxSKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5KT4gewogIHN0YXRpYyBjb25zdCBs
b25nIGFyaXR5PTEwOwogIHR5cGVkZWYgUiByZXM7CiAgdHlwZWRlZiBUMCB0MDsKICB0eXBlZGVm
IFQxIHQxOwogIHR5cGVkZWYgVDIgdDI7CiAgdHlwZWRlZiBUMyB0MzsKICB0eXBlZGVmIFQ0IHQ0
OwogIHR5cGVkZWYgVDUgdDU7CiAgdHlwZWRlZiBUNiB0NjsKICB0eXBlZGVmIFQ3IHQ3OwogIHR5
cGVkZWYgVDggdDg7CiAgdHlwZWRlZiBUOSB0OTsKICB0eXBlZGVmIFIocG9wX2Zyb250KShUMSxU
MixUMyxUNCxUNSxUNixUNyxUOCxUOSk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSxUMixU
MyxUNCxUNSxUNixUNyxUOCk7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9u
dCB7CiAgICB0eXBlZGVmIFIodHlwZSkoVCxUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSk7
CiAgfTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRl
ZiBSKHR5cGUpKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQpOwogIH07CiAgdGVtcGxh
dGU8Y2xhc3MgVT4KICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSko
VDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDkpOwogIH07Cn07CiMgMjAgIi4uLy4uLy4uL2Jv
b3N0L2R5bmFtaWNfYW55L2F1eC9mdW5jdGlvbl9hcmd1bWVudHMuaHBwIiAyCgoKdGVtcGxhdGU8
Y2xhc3MgUywgbG9uZyBQb3NpdGlvbiwgbG9uZyBBcml0eT4Kc3RydWN0IGZ1bl9hcmdzX2l0ZXIK
ewogICAgdHlwZWRlZiB0eXBlbmFtZSBhcmdfYXQ8ZnVuX3RyYWl0czxTPiwgUG9zaXRpb24+Ojp0
eXBlIHR5cGU7CiAgICB0eXBlZGVmIGZ1bl9hcmdzX2l0ZXI8UywgUG9zaXRpb24gKyAxLCBBcml0
eT4gbmV4dDsKICAgIHR5cGVkZWYgZnVuX2FyZ3NfaXRlcjxTLCBQb3NpdGlvbiAtIDEsIEFyaXR5
PiBwcmlvcjsKICAgIHR5cGVkZWYgOjpib29zdDo6bXBsOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZyBjYXRlZ29yeTsKICAgIHN0YXRpYyBjb25zdCBsb25nIHBvc2l0aW9uID0gUG9zaXRpb247
CgogICAgdGVtcGxhdGU8Y2xhc3MgRGVsdGE+CiAgICBzdHJ1Y3QgYWR2YW5jZQogICAgewogICAg
ICAgIHR5cGVkZWYgZnVuX2FyZ3NfaXRlcjxTLCBwb3NpdGlvbiArIERlbHRhOjp2YWx1ZSwgQXJp
dHk+IHR5cGU7CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPgogICAgc3RydWN0IGRp
c3RhbmNlCiAgICB7CiAgICAgICAgdHlwZWRlZiA6OmJvb3N0OjptcGw6OmludGVncmFsX2M8bG9u
ZywgT3RoZXI6OnBvc2l0aW9uIC0gcG9zaXRpb24+IHR5cGU7CiAgICB9Owp9OwoKdGVtcGxhdGU8
Y2xhc3MgUywgbG9uZyBBcml0eT4Kc3RydWN0IGZ1bl9hcmdzX2l0ZXI8UywgQXJpdHksIEFyaXR5
Pgp7CiAgICB0eXBlZGVmIGZ1bl9hcmdzX2l0ZXI8UywgQXJpdHkgLSAxLCBBcml0eT4gcHJpb3I7
CiAgICB0eXBlZGVmIDo6Ym9vc3Q6Om1wbDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgY2F0
ZWdvcnk7CiAgICBzdGF0aWMgY29uc3QgbG9uZyBwb3NpdGlvbiA9IEFyaXR5OwoKICAgIHRlbXBs
YXRlPGNsYXNzIERlbHRhPgogICAgc3RydWN0IGFkdmFuY2UKICAgIHsKICAgICAgICB0eXBlZGVm
IGZ1bl9hcmdzX2l0ZXI8UywgcG9zaXRpb24gKyBEZWx0YTo6dmFsdWUsIEFyaXR5PiB0eXBlOwog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxjbGFzcyBPdGhlcj4KICAgIHN0cnVjdCBkaXN0YW5jZQogICAg
ewogICAgICAgIHR5cGVkZWYgOjpib29zdDo6bXBsOjppbnRlZ3JhbF9jPGxvbmcsIE90aGVyOjpw
b3NpdGlvbiAtIHBvc2l0aW9uPiB0eXBlOwogICAgfTsKfTsKCnN0cnVjdCBmdW5jdGlvbl9hcmd1
bWVudHNfdGFnIHt9OwoKCnRlbXBsYXRlPGNsYXNzIFNpZ25hdHVyZT4Kc3RydWN0IGZ1bmN0aW9u
X2FyZ3VtZW50cwp7CgogICAgdHlwZWRlZiBTaWduYXR1cmUgc2lnbmF0dXJlOwogICAgdHlwZWRl
ZiBmdW5fdHJhaXRzPFNpZ25hdHVyZT4gX3RyYWl0czsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX3Ry
YWl0czo6cmVzIHJlc3VsdF90eXBlOwoKICAgIHRlbXBsYXRlPGNsYXNzIFU+CiAgICBzdHJ1Y3Qg
cmViaW5kX3Jlc3VsdCA6IF90cmFpdHM6OnRlbXBsYXRlIHJlYmluZF9yZXN1bHQ8VT4ge307Cgog
ICAgc3RhdGljIGNvbnN0IDo6c3RkOjpzaXplX3QgYXJpdHkgPSBfdHJhaXRzOjphcml0eTsKCgog
ICAgdHlwZWRlZiBmdW5fYXJnc19pdGVyPFNpZ25hdHVyZSwgMCwgYXJpdHk+IGJlZ2luOwogICAg
dHlwZWRlZiBmdW5fYXJnc19pdGVyPFNpZ25hdHVyZSwgYXJpdHksIGFyaXR5PiBlbmQ7CiAgICB0
eXBlZGVmIGZ1bmN0aW9uX2FyZ3VtZW50c190YWcgdGFnOwp9OwoKfSB9IH0KCgpuYW1lc3BhY2Ug
Ym9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPD4Kc3RydWN0IGNsZWFyX3RyYWl0czwg
Ojpib29zdDo6ZHluYW1pY19hbnk6OmF1eDo6ZnVuY3Rpb25fYXJndW1lbnRzX3RhZyA+CnsKICAg
IHRlbXBsYXRlPGNsYXNzIFNlcXVlbmNlPgogICAgc3RydWN0IGFsZ29yaXRobQogICAgewogICAg
ICAgIHR5cGVkZWYgOjpib29zdDo6ZHluYW1pY19hbnk6OmF1eDo6ZnVuY3Rpb25fYXJndW1lbnRz
PAogICAgICAgICAgICB0eXBlbmFtZSBTZXF1ZW5jZTo6cmVzdWx0X3R5cGUgKCk+IHR5cGU7CiAg
ICB9Owp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgcHVzaF9mcm9udF90cmFpdHM8IDo6Ym9vc3Q6OmR5
bmFtaWNfYW55OjphdXg6OmZ1bmN0aW9uX2FyZ3VtZW50c190YWcgPgp7CiAgICB0ZW1wbGF0ZTxj
bGFzcyBTZXF1ZW5jZSwgY2xhc3MgVD4KICAgIHN0cnVjdCBhbGdvcml0aG0KICAgIHsKICAgICAg
ICB0eXBlZGVmIDo6Ym9vc3Q6OmR5bmFtaWNfYW55OjphdXg6OmZ1bmN0aW9uX2FyZ3VtZW50czwK
ICAgICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2U6Ol90cmFpdHM6OnRlbXBsYXRlIHB1c2hfZnJv
bnQ8VD46OnR5cGU+IHR5cGU7CiAgICB9Owp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgcHVzaF9iYWNr
X3RyYWl0czwgOjpib29zdDo6ZHluYW1pY19hbnk6OmF1eDo6ZnVuY3Rpb25fYXJndW1lbnRzX3Rh
ZyA+CnsKICAgIHRlbXBsYXRlPGNsYXNzIFNlcXVlbmNlLCBjbGFzcyBUPgogICAgc3RydWN0IGFs
Z29yaXRobQogICAgewogICAgICAgIHR5cGVkZWYgOjpib29zdDo6ZHluYW1pY19hbnk6OmF1eDo6
ZnVuY3Rpb25fYXJndW1lbnRzPAogICAgICAgICAgICB0eXBlbmFtZSBTZXF1ZW5jZTo6X3RyYWl0
czo6dGVtcGxhdGUgcHVzaF9iYWNrPFQ+Ojp0eXBlPiB0eXBlOwogICAgfTsKfTsKCnRlbXBsYXRl
PD4Kc3RydWN0IHBvcF9mcm9udF90cmFpdHM8IDo6Ym9vc3Q6OmR5bmFtaWNfYW55OjphdXg6OmZ1
bmN0aW9uX2FyZ3VtZW50c190YWcgPgp7CiAgICB0ZW1wbGF0ZTxjbGFzcyBTZXF1ZW5jZT4KICAg
IHN0cnVjdCBhbGdvcml0aG0KICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFNlcXVlbmNl
OjpfdHJhaXRzIHRyOwogICAgICAgIHR5cGVkZWYgOjpib29zdDo6ZHluYW1pY19hbnk6OmF1eDo6
ZnVuY3Rpb25fYXJndW1lbnRzPAogICAgICAgICAgICB0eXBlbmFtZSB0cjo6cG9wX2Zyb250PiB0
eXBlOwogICAgfTsKfTsKCnRlbXBsYXRlPD4Kc3RydWN0IHBvcF9iYWNrX3RyYWl0czwgOjpib29z
dDo6ZHluYW1pY19hbnk6OmF1eDo6ZnVuY3Rpb25fYXJndW1lbnRzX3RhZyA+CnsKICAgIHRlbXBs
YXRlPGNsYXNzIFNlcXVlbmNlPgogICAgc3RydWN0IGFsZ29yaXRobQogICAgewogICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgU2VxdWVuY2U6Ol90cmFpdHMgdHI7CiAgICAgICAgdHlwZWRlZiA6OmJv
b3N0OjpkeW5hbWljX2FueTo6YXV4OjpmdW5jdGlvbl9hcmd1bWVudHM8CiAgICAgICAgICAgIHR5
cGVuYW1lIHRyOjpwb3BfYmFjaz4gdHlwZTsKICAgIH07Cn07Cgp9IH0KIyAzMiAiLi4vLi4vLi4v
Ym9vc3QvZHluYW1pY19hbnkvZnVuY3Rpb24uaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1l
c3BhY2UgZHluYW1pY19hbnkgewoKY2xhc3MgYmFkX2Z1bmN0aW9uX2NhbGwgOiBwdWJsaWMgOjpz
dGQ6OmV4Y2VwdGlvbgp7CnB1YmxpYzoKCiAgdmlydHVhbCBjb25zdCBjaGFyICogd2hhdCgpIGNv
bnN0IHRocm93KCkKICB7CiAgICByZXR1cm4gImJvb3N0LmR5bmFtaWNfYW55OiBmYWlsZWQgZnVu
Y3Rpb24gY2FsbCI7CiAgfQp9OwoKbmFtZXNwYWNlIGF1eCB7CgoKCgoKdGVtcGxhdGU8Y2xhc3Mg
VD4Kc3RydWN0IGNvbnRhaW5zX2FueVQKewogIHR5cGVkZWYgdHlwZW5hbWUgOjpib29zdDo6cmVt
b3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSBub25yZWY7CiAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0
OjpyZW1vdmVfY29uc3Q8bm9ucmVmPjo6dHlwZSBuYWtlZDsKICBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9ICg6OmJvb3N0Ojppc19zYW1lPG5ha2VkLGFueVQ+Ojp2YWx1ZSk7Cn07CgoKCgp0ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyBXaXRoPgpzdHJ1Y3QgYmluZF9hbnlUCnsKICB0eXBlZGVmIHR5
cGVuYW1lIDo6Ym9vc3Q6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUgdW5yZWZlZDsKICB0eXBl
ZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6aWZfPAogICAgOjpib29zdDo6aXNfY29uc3Q8dW5y
ZWZlZD4sIGNvbnN0IFdpdGgsIFdpdGg+Ojp0eXBlIG5vbnJlZjsKICB0eXBlZGVmIHR5cGVuYW1l
IDo6Ym9vc3Q6Om1wbDo6aWZfPAogICAgOjpib29zdDo6aXNfcmVmZXJlbmNlPFQ+LCBub25yZWYg
Jiwgbm9ucmVmPjo6dHlwZSB0eXBlOwp9OwoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFdpdGg+
CnN0cnVjdCBiaW5kX2lmX2FueVQKewogIHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6Om1w
bDo6YXBwbHlfaWYKICAgIDwKICAgICAgY29udGFpbnNfYW55VDxUPiwKICAgICAgYmluZF9hbnlU
PFQsV2l0aD4sCiAgICAgIDo6Ym9vc3Q6Om1wbDo6aWRlbnRpdHk8VD4KICAgID46OnR5cGUgdHlw
ZTsKfTsKCgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmUsIGNsYXNzIFdpdGg+CnN0cnVjdCBiaW5k
X2FueVRfYXJndW1lbnRzCnsKICB0eXBlZGVmIHR5cGVuYW1lCiAgICBiaW5kX2FueVRfYXJndW1l
bnRzCiAgICA8CiAgICAgIGZ1bmN0aW9uX2FyZ3VtZW50czxTaWduYXR1cmU+LAogICAgICBXaXRo
CiAgICA+Ojp0eXBlIGFyZ3M7CiAgdHlwZWRlZiB0eXBlbmFtZSBhcmdzOjpzaWduYXR1cmUgdHlw
ZTsKfTsKCnRlbXBsYXRlPGNsYXNzIFNpZ25hdHVyZSwgY2xhc3MgV2l0aD4Kc3RydWN0IGJpbmRf
YW55VF9hcmd1bWVudHM8ZnVuY3Rpb25fYXJndW1lbnRzPFNpZ25hdHVyZT4sIFdpdGg+CnsKICB0
eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJvb3N0OjptcGw6OnRyYW5zZm9ybQogICAgPAogICAgICBm
dW5jdGlvbl9hcmd1bWVudHM8U2lnbmF0dXJlPiwKICAgICAgYmluZF9pZl9hbnlUPCA6OmJvb3N0
OjptcGw6OmFyZzwxPiwgV2l0aD4KICAgID46OnR5cGUgdHlwZTsKfTsKCgoKdGVtcGxhdGU8Y2xh
c3MgU2lnbmF0dXJlPgpzdHJ1Y3Qgc2lnMnR1cGxlOwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3Mg
VDA+CnN0cnVjdCBzaWcydHVwbGU8UihUMCk+CnsKICB0eXBlZGVmIDo6Ym9vc3Q6OnR1cGxlPFQw
PiB0eXBlOwp9OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3MgVDAsIGNsYXNzIFQxPgpzdHJ1Y3Qg
c2lnMnR1cGxlPFIoVDAsVDEpPgp7CiAgdHlwZWRlZiA6OmJvb3N0Ojp0dXBsZTxUMCxUMT4gdHlw
ZTsKfTsKCnRlbXBsYXRlPGNsYXNzIFIsIGNsYXNzIFQwLCBjbGFzcyBUMSwgY2xhc3MgVDI+CnN0
cnVjdCBzaWcydHVwbGU8UihUMCxUMSxUMik+CnsKICB0eXBlZGVmIDo6Ym9vc3Q6OnR1cGxlPFQw
LFQxLFQyPiB0eXBlOwp9OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3MgVDAsIGNsYXNzIFQxLCBj
bGFzcyBUMiwgY2xhc3MgVDM+CnN0cnVjdCBzaWcydHVwbGU8UihUMCxUMSxUMixUMyk+CnsKICB0
eXBlZGVmIDo6Ym9vc3Q6OnR1cGxlPFQwLFQxLFQyLFQzPiB0eXBlOwp9OwoKdGVtcGxhdGU8Y2xh
c3MgUiwgY2xhc3MgVDAsIGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0Pgpz
dHJ1Y3Qgc2lnMnR1cGxlPFIoVDAsVDEsVDIsVDMsVDQpPgp7CiAgdHlwZWRlZiA6OmJvb3N0Ojp0
dXBsZTxUMCxUMSxUMixUMyxUND4gdHlwZTsKfTsKCgoKdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0
IHBhcmFtX2Zvcl9jYWxsCnsKICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6OmNhbGxfdHJhaXRz
PFQ+OjpwYXJhbV90eXBlIHR5cGU7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgU2lnbmF0dXJlPgpzdHJ1
Y3Qgb3B0aW1pemVfYXJndW1lbnRzX2NvcHlpbmcKewogIHR5cGVkZWYgdHlwZW5hbWUKICAgIG9w
dGltaXplX2FyZ3VtZW50c19jb3B5aW5nCiAgICA8CiAgICAgIGZ1bmN0aW9uX2FyZ3VtZW50czxT
aWduYXR1cmU+CiAgICA+Ojp0eXBlIGFyZ3M7CiAgdHlwZWRlZiB0eXBlbmFtZSBhcmdzOjpzaWdu
YXR1cmUgdHlwZTsKfTsKCnRlbXBsYXRlPGNsYXNzIFNpZ25hdHVyZT4Kc3RydWN0IG9wdGltaXpl
X2FyZ3VtZW50c19jb3B5aW5nPGZ1bmN0aW9uX2FyZ3VtZW50czxTaWduYXR1cmU+ID4KewogIHR5
cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6Om1wbDo6dHJhbnNmb3JtCiAgICA8CiAgICAgIGZ1
bmN0aW9uX2FyZ3VtZW50czxTaWduYXR1cmU+LAogICAgICBwYXJhbV9mb3JfY2FsbDwgOjpib29z
dDo6bXBsOjphcmc8MT4gPgogICAgPjo6dHlwZSB0eXBlOwp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBB
cmdzLCBjbGFzcyBMLCBjbGFzcyBDdXIsIGNsYXNzIEVuZD4Kc3RydWN0IGNhbGNfY2FsbF9leF9h
cmdzOwoKCnRlbXBsYXRlPGNsYXNzIEFyZ3MsIGNsYXNzIEwsIGNsYXNzIEN1ciwgY2xhc3MgRW5k
PgpzdHJ1Y3QgaW5zZXJ0X2NhbGxfZXhfYXJncwp7CiAgdHlwZWRlZiB0eXBlbmFtZQogICAgOjpi
b29zdDo6bXBsOjpkaXN0YW5jZQogICAgPAogICAgICB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmJl
Z2luPEFyZ3M+Ojp0eXBlLAogICAgICBDdXIKICAgID46OnR5cGUgY3VyX3BvczsKCiAgdHlwZWRl
ZiB0eXBlbmFtZQogICAgOjpib29zdDo6bXBsOjpwbHVzCiAgICA8CiAgICAgIGN1cl9wb3MsCiAg
ICAgIDo6Ym9vc3Q6Om1wbDo6aW50ZWdyYWxfYzxsb25nLCAyPgogICAgPjo6dHlwZSBuZXdfcG9z
OwoKICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6aW5zZXJ0PAogICAgQXJncywgdHlw
ZW5hbWUgQ3VyOjpuZXh0LCBjb25zdCBhbnk8TD4gJj46OnR5cGUgYXJnczsKCiAgdHlwZWRlZiB0
eXBlbmFtZQogICAgOjpib29zdDo6bXBsOjphZHZhbmNlCiAgICA8CiAgICAgIHR5cGVuYW1lIDo6
Ym9vc3Q6Om1wbDo6YmVnaW48YXJncz46OnR5cGUsCiAgICAgIG5ld19wb3MKICAgID46OnR5cGUg
bmV3X2N1cjsKCiAgdHlwZWRlZiB0eXBlbmFtZQogICAgY2FsY19jYWxsX2V4X2FyZ3MKICAgIDwK
ICAgICAgYXJncywKICAgICAgTCwKICAgICAgbmV3X2N1ciwKICAgICAgdHlwZW5hbWUgOjpib29z
dDo6bXBsOjplbmQ8YXJncz46OnR5cGUKICAgID46OnR5cGUgdHlwZTsKfTsKCgp0ZW1wbGF0ZTxj
bGFzcyBBcmdzLCBjbGFzcyBMLCBjbGFzcyBDdXIsIGNsYXNzIEVuZD4Kc3RydWN0IGNhbGNfY2Fs
bF9leF9hcmdzCnsKICB0eXBlZGVmIHR5cGVuYW1lIEN1cjo6bmV4dCBuZXh0OwogIHR5cGVkZWYg
dHlwZW5hbWUKICAgOjpib29zdDo6bXBsOjphcHBseV9pZgogICA8CiAgICAgY29udGFpbnNfYW55
VDx0eXBlbmFtZSBDdXI6OnR5cGU+LAogICAgIGluc2VydF9jYWxsX2V4X2FyZ3M8QXJncywgTCwg
Q3VyLCBFbmQ+LAogICAgIGNhbGNfY2FsbF9leF9hcmdzPEFyZ3MsIEwsIG5leHQsIEVuZD4KICAg
Pjo6dHlwZSB0eXBlOwp9OwoKCnRlbXBsYXRlPGNsYXNzIEFyZ3MsIGNsYXNzIFQsIGNsYXNzIEVu
ZD4Kc3RydWN0IGNhbGNfY2FsbF9leF9hcmdzPEFyZ3MsIFQsIEVuZCwgRW5kPgp7CiAgdHlwZWRl
ZiBBcmdzIHR5cGU7Cn07CgoKCgp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBMPgpzdHJ1Y3QgY2Fs
bF9leF9hcmd1bWVudHMKewogIHR5cGVkZWYgdHlwZW5hbWUKICAgIGNhbGxfZXhfYXJndW1lbnRz
CiAgICA8CiAgICAgIGZ1bmN0aW9uX2FyZ3VtZW50czxTPiwKICAgICAgTAogICAgPjo6dHlwZSBh
cmdzOwogIHR5cGVkZWYgdHlwZW5hbWUgYXJnczo6c2lnbmF0dXJlIHR5cGU7Cn07Cgp0ZW1wbGF0
ZTxjbGFzcyBTLCBjbGFzcyBMPgpzdHJ1Y3QgY2FsbF9leF9hcmd1bWVudHM8ZnVuY3Rpb25fYXJn
dW1lbnRzPFM+LCBMPgp7CiAgdHlwZWRlZiBmdW5jdGlvbl9hcmd1bWVudHM8Uz4gYXJnczsKICB0
eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YmVnaW48YXJncz46OnR5cGUgYmVnaW47CiAg
dHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmVuZDxhcmdzPjo6dHlwZSBlbmQ7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBjYWxjX2NhbGxfZXhfYXJnczxhcmdzLCBMLCBiZWdpbiwgZW5kPjo6dHlw
ZSB0eXBlOwp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmUsIGNsYXNzIFQsIGNsYXNzIE9w
ZXJhdGlvbnMsIGxvbmcgTj4Kc3RydWN0IGNhbGxfZXhfYXJndW1lbnQKewogIHR5cGVkZWYgdHlw
ZW5hbWUKICAgIGNhbGxfZXhfYXJndW1lbnRzCiAgICA8CiAgICAgIGZ1bmN0aW9uX2FyZ3VtZW50
czxTaWduYXR1cmU+LAogICAgICBPcGVyYXRpb25zCiAgICA+Ojp0eXBlIGFyZ3M7CgogIHR5cGVk
ZWYgdHlwZW5hbWUgYmluZF9hbnlUX2FyZ3VtZW50czxhcmdzLFQ+Ojp0eXBlIGJvdW5kX2FyZ3M7
CiAgdHlwZWRlZiB0eXBlbmFtZSBvcHRpbWl6ZV9hcmd1bWVudHNfY29weWluZzxib3VuZF9hcmdz
Pjo6dHlwZSBvcHRpbWl6ZWQ7CiAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmF0X2M8
b3B0aW1pemVkLE4+Ojp0eXBlIHR5cGU7Cn07CgoKCgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmUs
IGNsYXNzIFdpdGg+CnN0cnVjdCBiaW5kX3NpZ25hdHVyZQp7CiAgdHlwZWRlZiBmdW5jdGlvbl9h
cmd1bWVudHM8U2lnbmF0dXJlPiBhcmdzOwoKICB0eXBlZGVmIHR5cGVuYW1lCiAgICBiaW5kX2lm
X2FueVQKICAgIDwKICAgICAgdHlwZW5hbWUgYXJnczo6cmVzdWx0X3R5cGUsCiAgICAgIFdpdGgK
ICAgID46OnR5cGUgYm91bmRfcmVzdWx0OwoKICB0eXBlZGVmIHR5cGVuYW1lIGJpbmRfYW55VF9h
cmd1bWVudHM8YXJncywgV2l0aD46OnR5cGUgYm91bmRfYXJnczsKICB0eXBlZGVmIHR5cGVuYW1l
IG9wdGltaXplX2FyZ3VtZW50c19jb3B5aW5nPGJvdW5kX2FyZ3M+Ojp0eXBlIG9wdGltaXplZDsK
ICB0eXBlZGVmIHR5cGVuYW1lIG9wdGltaXplZDo6dGVtcGxhdGUgcmViaW5kX3Jlc3VsdDxib3Vu
ZF9yZXN1bHQ+IHJlYmluZDsKICB0eXBlZGVmIHR5cGVuYW1lIHJlYmluZDo6dHlwZSB0eXBlOwp9
OwoKCgp0ZW1wbGF0ZTxjbGFzcyBGdW5jdGlvbiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGV4
ZWN1dGVfYXJndW1lbnQKewogIHR5cGVkZWYgdHlwZW5hbWUKICAgIGJpbmRfc2lnbmF0dXJlCiAg
ICA8CiAgICAgIHR5cGVuYW1lIEZ1bmN0aW9uOjpzaWduYXR1cmUsCiAgICAgIGFueTxPcGVyYXRp
b25zPgogICAgPjo6dHlwZSBib3VuZF9zaWduYXR1cmU7CiAgdHlwZWRlZiB0eXBlbmFtZSBzaWcy
dHVwbGU8Ym91bmRfc2lnbmF0dXJlPjo6dHlwZSB0eXBlOwp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBG
dW5jdGlvbiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGV4ZWN1dGVfcmVzdWx0CnsKICB0eXBl
ZGVmIHR5cGVuYW1lCiAgICBiaW5kX3NpZ25hdHVyZQogICAgPAogICAgICB0eXBlbmFtZSBGdW5j
dGlvbjo6c2lnbmF0dXJlLAogICAgICBhbnk8T3BlcmF0aW9ucz4KICAgID46OnR5cGUgYm91bmRf
c2lnbmF0dXJlOwogIHR5cGVkZWYgdHlwZW5hbWUgZnVuY3Rpb25fYXJndW1lbnRzPGJvdW5kX3Np
Z25hdHVyZT46OnJlc3VsdF90eXBlIHR5cGU7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9u
cywgY2xhc3MgQmVnaW4sIGNsYXNzIEVuZD4Kc3RydWN0IHBsYWNlaG9sZGVyX2V4ZWN1dGUKICA6
IHBsYWNlaG9sZGVyX2V4ZWN1dGU8T3BlcmF0aW9ucywgdHlwZW5hbWUgQmVnaW46Om5leHQsIEVu
ZD4KewogIHR5cGVkZWYgdHlwZW5hbWUgQmVnaW46OnR5cGUgZnVuY3Rpb25fdHlwZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIGV4ZWN1dGVfcmVzdWx0PGZ1bmN0aW9uX3R5cGUsT3BlcmF0aW9ucz46OnR5
cGUgcmVzdWx0X3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBleGVjdXRlX2FyZ3VtZW50PGZ1bmN0
aW9uX3R5cGUsT3BlcmF0aW9ucz46OnR5cGUgYXJnX3R5cGU7CgogIHVzaW5nIHBsYWNlaG9sZGVy
X2V4ZWN1dGU8T3BlcmF0aW9ucywgdHlwZW5hbWUgQmVnaW46Om5leHQsIEVuZD46OmV4ZWN1dGU7
CgogIHZpcnR1YWwgcmVzdWx0X3R5cGUgZXhlY3V0ZShjb25zdCBmdW5jdGlvbl90eXBlICYsCiAg
ICAgICAgICBjb25zdCBhcmdfdHlwZSAmLCA6OnN0ZDo6c2l6ZV90LCBzaWcpID0gMDsKfTsKCgoK
dGVtcGxhdGU8Y2xhc3MgU2lnbmF0dXJlPgpzdHJ1Y3Qgbm9fY2FsbF9kaXNwYXRjaGVyOwoKdGVt
cGxhdGU8Y2xhc3MgUiwgY2xhc3MgVDA+CnN0cnVjdCBub19jYWxsX2Rpc3BhdGNoZXI8UihUMCk+
CnsKICB0ZW1wbGF0ZTxjbGFzcyBGPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3Qg
Ojpib29zdDo6dHVwbGU8VDA+ICYgYXJncykgY29uc3QKICB7CiAgICByZXR1cm4gZi5ub19jYWxs
KDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PDA+KGFyZ3MpKTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBS
LCBjbGFzcyBUMCwgY2xhc3MgVDE+CnN0cnVjdCBub19jYWxsX2Rpc3BhdGNoZXI8UihUMCxUMSk+
CnsKICB0ZW1wbGF0ZTxjbGFzcyBGPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3Qg
Ojpib29zdDo6dHVwbGU8VDAsVDE+ICYgYXJncykgY29uc3QKICB7CiAgICByZXR1cm4gZi5ub19j
YWxsKDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PDA+KGFyZ3MpLAogICAgICAgICAgICAgICAgICAgICA6
OmJvb3N0Ojp0dXBsZXM6OmdldDwxPihhcmdzKSApOwogIH0KfTsKCnRlbXBsYXRlPGNsYXNzIFIs
IGNsYXNzIFQwLCBjbGFzcyBUMSwgY2xhc3MgVDI+CnN0cnVjdCBub19jYWxsX2Rpc3BhdGNoZXI8
UihUMCxUMSxUMik+CnsKICB0ZW1wbGF0ZTxjbGFzcyBGPgogIFIgb3BlcmF0b3IoKShjb25zdCBG
ICYgZiwgY29uc3QgOjpib29zdDo6dHVwbGU8VDAsVDEsVDI+ICYgYXJncykgY29uc3QKICB7CiAg
ICByZXR1cm4gZi5ub19jYWxsKDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PDA+KGFyZ3MpLAogICAgICAg
ICAgICAgICAgICAgICA6OmJvb3N0Ojp0dXBsZXM6OmdldDwxPihhcmdzKSwKICAgICAgICAgICAg
ICAgICAgICAgOjpib29zdDo6dHVwbGVzOjpnZXQ8Mj4oYXJncykgKTsKICB9Cn07Cgp0ZW1wbGF0
ZTxjbGFzcyBSLCBjbGFzcyBUMCwgY2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMz4Kc3RydWN0
IG5vX2NhbGxfZGlzcGF0Y2hlcjxSKFQwLFQxLFQyLFQzKT4KewogIHRlbXBsYXRlPGNsYXNzIEY+
CiAgUiBvcGVyYXRvcigpKGNvbnN0IEYgJiBmLCBjb25zdCA6OmJvb3N0Ojp0dXBsZTxUMCxUMSxU
MixUMz4gJiBhcmdzKSBjb25zdAogIHsKICAgIHJldHVybiBmLm5vX2NhbGwoOjpib29zdDo6dHVw
bGVzOjpnZXQ8MD4oYXJncyksCiAgICAgICAgICAgICAgICAgICAgIDo6Ym9vc3Q6OnR1cGxlczo6
Z2V0PDE+KGFyZ3MpLAogICAgICAgICAgICAgICAgICAgICA6OmJvb3N0Ojp0dXBsZXM6OmdldDwy
PihhcmdzKSwKICAgICAgICAgICAgICAgICAgICAgOjpib29zdDo6dHVwbGVzOjpnZXQ8Mz4oYXJn
cykgKTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBSLCBjbGFzcyBUMCwgY2xhc3MgVDEsIGNsYXNz
IFQyLCBjbGFzcyBUMywgY2xhc3MgVDQ+CnN0cnVjdCBub19jYWxsX2Rpc3BhdGNoZXI8UihUMCxU
MSxUMixUMyxUNCk+CnsKICB0ZW1wbGF0ZTxjbGFzcyBGPgogIFIgb3BlcmF0b3IoKShjb25zdCBG
ICYgZiwgY29uc3QgOjpib29zdDo6dHVwbGU8VDAsVDEsVDIsVDMsVDQ+ICYgYXJncykgY29uc3QK
ICB7CiAgICByZXR1cm4gZi5ub19jYWxsKDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PDA+KGFyZ3MpLAog
ICAgICAgICAgICAgICAgICAgICA6OmJvb3N0Ojp0dXBsZXM6OmdldDwxPihhcmdzKSwKICAgICAg
ICAgICAgICAgICAgICAgOjpib29zdDo6dHVwbGVzOjpnZXQ8Mj4oYXJncyksCiAgICAgICAgICAg
ICAgICAgICAgIDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PDM+KGFyZ3MpLAogICAgICAgICAgICAgICAg
ICAgICA6OmJvb3N0Ojp0dXBsZXM6OmdldDw0PihhcmdzKSApOwogIH0KfTsKCgp0ZW1wbGF0ZTxj
bGFzcyBSZXN1bHQsIGxvbmcgTj4Kc3RydWN0IGdldF90dXBsZV9lbGVtCnsKICB0ZW1wbGF0ZTxj
bGFzcyBUdXBsZSwgY2xhc3MgVD4KICBSZXN1bHQgb3BlcmF0b3IoKShjb25zdCBUdXBsZSAmIGFy
Z3MsIFQgJiwgOjpzdGQ6OnNpemVfdCkgY29uc3QKICB7CiAgICByZXR1cm4gOjpib29zdDo6dHVw
bGVzOjpnZXQ8Tj4oYXJncyk7CiAgfQp9OwoKCnN0cnVjdCBjYW50X2V4dHJhY3Qge307CgoKdGVt
cGxhdGU8Y2xhc3MgUmVzdWx0LCBsb25nIE4sIGxvbmcgTW9yZVRoZW5PbmVBbnlUPgpzdHJ1Y3Qg
Z2V0X2V4dHJhY3RlZF9lbGVtCnsKICB0ZW1wbGF0ZTxjbGFzcyBUdXBsZSwgY2xhc3MgVD4KICBS
ZXN1bHQgb3BlcmF0b3IoKShjb25zdCBUdXBsZSAmIGFyZ3MsIFQgJiBjdXJyZW50LCA6OnN0ZDo6
c2l6ZV90IGluZGV4KSBjb25zdAogIHsKICAgIGlmKGluZGV4ID09IE4pCiAgICAgIHJldHVybiBj
dXJyZW50OwogICAgZWxzZQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6OnJl
bW92ZV9yZWZlcmVuY2U8UmVzdWx0Pjo6dHlwZSBub25yZWY7CiAgICAgIGlmKG5vbnJlZiAqIHB0
ciA9IGV4dHJhY3Q8bm9ucmVmPigmOjpib29zdDo6dHVwbGVzOjpnZXQ8Tj4oYXJncykpKQogICAg
ICAgIHJldHVybiAqcHRyOwogICAgICBlbHNlCiAgICAgICAgdGhyb3cgY2FudF9leHRyYWN0KCk7
CiAgICB9CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgUmVzdWx0LCBsb25nIE4+CnN0cnVjdCBnZXRf
ZXh0cmFjdGVkX2VsZW08UmVzdWx0LE4sMT4KewogIHRlbXBsYXRlPGNsYXNzIFR1cGxlLCBjbGFz
cyBUPgogIFJlc3VsdCBvcGVyYXRvcigpKGNvbnN0IFR1cGxlICYsIFQgJiBjdXJyZW50LCA6OnN0
ZDo6c2l6ZV90IGluZGV4KSBjb25zdAogIHsKICAgICgodm9pZCkgKChpbmRleCA9PSBOKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoImluZGV4ID09IE4iLCAiLi4vLi4vLi4vYm9vc3QvZHluYW1pY19h
bnkvZnVuY3Rpb24uaHBwIiwgNDQ5LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogICAgcmV0
dXJuIGN1cnJlbnQ7CiAgfQp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmUsIGNsYXNzIE9w
ZXJhdGlvbnMsIGxvbmcgTiwgY2xhc3MgVHVwbGUsIGNsYXNzIFQ+CnR5cGVuYW1lIGNhbGxfZXhf
YXJndW1lbnQ8U2lnbmF0dXJlLFQsT3BlcmF0aW9ucyxOPjo6dHlwZQpnZXRfeChjb25zdCBUdXBs
ZSAmIGFyZ3MsIFQgJiBjdXJyZW50LCA6OnN0ZDo6c2l6ZV90IGluZGV4KQp7CiAgdHlwZWRlZiB0
eXBlbmFtZQogICAgY2FsbF9leF9hcmd1bWVudHMKICAgIDwKICAgICAgZnVuY3Rpb25fYXJndW1l
bnRzPFNpZ25hdHVyZT4sCiAgICAgIE9wZXJhdGlvbnMKICAgID46OnR5cGUgYWxsX2FyZ3M7Cgog
IHR5cGVkZWYgOjpib29zdDo6bXBsOjppbnRlZ3JhbF9jPGxvbmcsTj4gbjsKICB0eXBlZGVmIHR5
cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YWR2YW5jZTwKICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6
YmVnaW48YWxsX2FyZ3M+Ojp0eXBlLCBuPjo6dHlwZSBjdXJfaXRlcjsKCiAgdHlwZWRlZiB0eXBl
bmFtZQogICAgOjpib29zdDo6bXBsOjplcmFzZQogICAgPAogICAgICBhbGxfYXJncywKICAgICAg
Y3VyX2l0ZXIsCiAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6ZW5kPGFsbF9hcmdzPjo6dHlw
ZQogICAgPjo6dHlwZSBhcmdzX3RvX2NvdW50OwoKICB0eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJv
b3N0OjptcGw6OmNvdW50X2lmCiAgICA8CiAgICAgIGFyZ3NfdG9fY291bnQsCiAgICAgIGNvbnRh
aW5zX2FueVQ8IDo6Ym9vc3Q6Om1wbDo6YXJnPDE+ID4KICAgID46OnR5cGUgZGVsdGE7CgogIHR5
cGVkZWYgdHlwZW5hbWUgOjpib29zdDo6bXBsOjptaW51czxuLGRlbHRhPjo6dHlwZSBwb3M7Cgog
IHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6Om1wbDo6Y291bnRfaWYKICAgIDwKICAgICAg
YWxsX2FyZ3MsCiAgICAgIGNvbnRhaW5zX2FueVQ8IDo6Ym9vc3Q6Om1wbDo6YXJnPDE+ID4KICAg
ID46OnR5cGUgYW55VF9jb3VudGVyOwoKICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfZXhfYXJndW1l
bnQ8U2lnbmF0dXJlLFQsT3BlcmF0aW9ucyxOPjo6dHlwZSByZXN1bHQ7CgogIHR5cGVkZWYgdHlw
ZW5hbWUKICAgIDo6Ym9vc3Q6Om1wbDo6aWZfCiAgICA8CiAgICAgIGNvbnRhaW5zX2FueVQ8dHlw
ZW5hbWUgY3VyX2l0ZXI6OnR5cGU+LAogICAgICBnZXRfZXh0cmFjdGVkX2VsZW08cmVzdWx0LHBv
czo6dmFsdWUsYW55VF9jb3VudGVyOjp2YWx1ZT4sCiAgICAgIGdldF90dXBsZV9lbGVtPHJlc3Vs
dCxwb3M6OnZhbHVlPgogICAgPjo6dHlwZSBnZXRfZWxlbTsKCiAgcmV0dXJuIGdldF9lbGVtKCko
YXJncywgY3VycmVudCwgaW5kZXgpOwp9CgoKdGVtcGxhdGU8Y2xhc3MgUmVzdWx0LCBjbGFzcyBP
cGVyYXRpb25zLCBsb25nIEFyZ0NvdW50PgpzdHJ1Y3QgY2FsbF9leF9kaXNwYXRjaGVyOwoKdGVt
cGxhdGU8Y2xhc3MgUiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGNhbGxfZXhfZGlzcGF0Y2hl
cjxSLE9wZXJhdGlvbnMsMj4KewogIHRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxlLCBjbGFz
cyBUPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdzLAogICAg
ICAgICAgICAgICBUICYgY3VycmVudCwgOjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QKICB7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIEY6OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1cm4gZi5j
YWxsX2V4KGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQsIGluZGV4
KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMT4oYXJn
cywgY3VycmVudCwgaW5kZXgpICk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3MgT3Bl
cmF0aW9ucz4Kc3RydWN0IGNhbGxfZXhfZGlzcGF0Y2hlcjxSLE9wZXJhdGlvbnMsMz4KewogIHRl
bXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxlLCBjbGFzcyBUPgogIFIgb3BlcmF0b3IoKShjb25z
dCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdzLAogICAgICAgICAgICAgICBUICYgY3VycmVudCwg
OjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEY6OnNp
Z25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1cm4gZi5jYWxsX2V4KGdldF94PHNpZ25hdHVyZSxP
cGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAg
Z2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMT4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAg
ICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucywyPihhcmdzLCBjdXJy
ZW50LCBpbmRleCkgKTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBSLCBjbGFzcyBPcGVyYXRpb25z
PgpzdHJ1Y3QgY2FsbF9leF9kaXNwYXRjaGVyPFIsT3BlcmF0aW9ucyw0Pgp7CiAgdGVtcGxhdGU8
Y2xhc3MgRiwgY2xhc3MgVHVwbGUsIGNsYXNzIFQ+CiAgUiBvcGVyYXRvcigpKGNvbnN0IEYgJiBm
LCBjb25zdCBUdXBsZSAmIGFyZ3MsCiAgICAgICAgICAgICAgIFQgJiBjdXJyZW50LCA6OnN0ZDo6
c2l6ZV90IGluZGV4KSBjb25zdAogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgRjo6c2lnbmF0dXJl
IHNpZ25hdHVyZTsKICAgIHJldHVybiBmLmNhbGxfZXgoZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlv
bnMsMD4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxz
aWduYXR1cmUsT3BlcmF0aW9ucywxPihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAg
ICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDI+KGFyZ3MsIGN1cnJlbnQsIGlu
ZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMz4o
YXJncywgY3VycmVudCwgaW5kZXgpICk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3Mg
T3BlcmF0aW9ucz4Kc3RydWN0IGNhbGxfZXhfZGlzcGF0Y2hlcjxSLE9wZXJhdGlvbnMsNT4Kewog
IHRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxlLCBjbGFzcyBUPgogIFIgb3BlcmF0b3IoKShj
b25zdCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdzLAogICAgICAgICAgICAgICBUICYgY3VycmVu
dCwgOjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEY6
OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1cm4gZi5jYWxsX2V4KGdldF94PHNpZ25hdHVy
ZSxPcGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAg
ICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMT4oYXJncywgY3VycmVudCwgaW5kZXgpLAog
ICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucywyPihhcmdzLCBj
dXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVy
YXRpb25zLDM+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0
X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsND4oYXJncywgY3VycmVudCwgaW5kZXgpICk7CiAgfQp9
OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGNhbGxfZXhfZGlz
cGF0Y2hlcjxSLE9wZXJhdGlvbnMsNj4KewogIHRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxl
LCBjbGFzcyBUPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdz
LAogICAgICAgICAgICAgICBUICYgY3VycmVudCwgOjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QK
ICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEY6OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1
cm4gZi5jYWxsX2V4KGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQs
IGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMs
MT4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWdu
YXR1cmUsT3BlcmF0aW9ucywyPihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAg
ICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDM+KGFyZ3MsIGN1cnJlbnQsIGluZGV4
KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsND4oYXJn
cywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUs
T3BlcmF0aW9ucyw1PihhcmdzLCBjdXJyZW50LCBpbmRleCkgKTsKICB9Cn07Cgp0ZW1wbGF0ZTxj
bGFzcyBSLCBjbGFzcyBPcGVyYXRpb25zPgpzdHJ1Y3QgY2FsbF9leF9kaXNwYXRjaGVyPFIsT3Bl
cmF0aW9ucyw3Pgp7CiAgdGVtcGxhdGU8Y2xhc3MgRiwgY2xhc3MgVHVwbGUsIGNsYXNzIFQ+CiAg
UiBvcGVyYXRvcigpKGNvbnN0IEYgJiBmLCBjb25zdCBUdXBsZSAmIGFyZ3MsCiAgICAgICAgICAg
ICAgIFQgJiBjdXJyZW50LCA6OnN0ZDo6c2l6ZV90IGluZGV4KSBjb25zdAogIHsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgRjo6c2lnbmF0dXJlIHNpZ25hdHVyZTsKICAgIHJldHVybiBmLmNhbGxfZXgo
Z2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMD4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAg
ICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucywxPihhcmdzLCBjdXJy
ZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRp
b25zLDI+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8
c2lnbmF0dXJlLE9wZXJhdGlvbnMsMz4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAg
ICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucyw0PihhcmdzLCBjdXJyZW50LCBp
bmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDU+
KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0
dXJlLE9wZXJhdGlvbnMsNj4oYXJncywgY3VycmVudCwgaW5kZXgpICk7CiAgfQp9OwoKdGVtcGxh
dGU8Y2xhc3MgUiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGNhbGxfZXhfZGlzcGF0Y2hlcjxS
LE9wZXJhdGlvbnMsOD4KewogIHRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxlLCBjbGFzcyBU
PgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdzLAogICAgICAg
ICAgICAgICBUICYgY3VycmVudCwgOjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QKICB7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIEY6OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1cm4gZi5jYWxs
X2V4KGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwK
ICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMT4oYXJncywg
Y3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3Bl
cmF0aW9ucywyPihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdl
dF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDM+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAg
ICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsND4oYXJncywgY3VycmVu
dCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9u
cyw1PihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94PHNp
Z25hdHVyZSxPcGVyYXRpb25zLDY+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAg
ICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsNz4oYXJncywgY3VycmVudCwgaW5k
ZXgpICk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0
IGNhbGxfZXhfZGlzcGF0Y2hlcjxSLE9wZXJhdGlvbnMsOT4KewogIHRlbXBsYXRlPGNsYXNzIEYs
IGNsYXNzIFR1cGxlLCBjbGFzcyBUPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3Qg
VHVwbGUgJiBhcmdzLAogICAgICAgICAgICAgICBUICYgY3VycmVudCwgOjpzdGQ6OnNpemVfdCBp
bmRleCkgY29uc3QKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEY6OnNpZ25hdHVyZSBzaWduYXR1
cmU7CiAgICByZXR1cm4gZi5jYWxsX2V4KGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDA+KGFy
Z3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJl
LE9wZXJhdGlvbnMsMT4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAg
ICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucywyPihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAg
ICAgICAgICAgICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDM+KGFyZ3MsIGN1
cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJh
dGlvbnMsND4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRf
eDxzaWduYXR1cmUsT3BlcmF0aW9ucyw1PihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAg
ICAgICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDY+KGFyZ3MsIGN1cnJlbnQs
IGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMs
Nz4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWdu
YXR1cmUsT3BlcmF0aW9ucyw4PihhcmdzLCBjdXJyZW50LCBpbmRleCkgKTsKICB9Cn07Cgp0ZW1w
bGF0ZTxjbGFzcyBSLCBjbGFzcyBPcGVyYXRpb25zPgpzdHJ1Y3QgY2FsbF9leF9kaXNwYXRjaGVy
PFIsT3BlcmF0aW9ucywxMD4KewogIHRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxlLCBjbGFz
cyBUPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdzLAogICAg
ICAgICAgICAgICBUICYgY3VycmVudCwgOjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QKICB7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIEY6OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1cm4gZi5j
YWxsX2V4KGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQsIGluZGV4
KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMT4oYXJn
cywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUs
T3BlcmF0aW9ucywyPihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAg
IGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDM+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAg
ICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsND4oYXJncywgY3Vy
cmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0
aW9ucyw1PihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94
PHNpZ25hdHVyZSxPcGVyYXRpb25zLDY+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAg
ICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsNz4oYXJncywgY3VycmVudCwg
aW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucyw4
PihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94PHNpZ25h
dHVyZSxPcGVyYXRpb25zLDk+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSApOwogIH0KfTsKCgp0ZW1w
bGF0ZTxjbGFzcyBUPgpzdHJ1Y3QgZXhlY3V0ZV9pbXBsCnsKICB0ZW1wbGF0ZTxjbGFzcyBGdW5j
dGlvbiwgY2xhc3MgT3BlcmF0aW9ucz4KICB0eXBlbmFtZSBleGVjdXRlX3Jlc3VsdDxGdW5jdGlv
bixPcGVyYXRpb25zPjo6dHlwZQogIG9wZXJhdG9yKCkoY29uc3QgRnVuY3Rpb24gJiBmLAogICAg
ICAgICAgICAgY29uc3QgdHlwZW5hbWUgZXhlY3V0ZV9hcmd1bWVudDxGdW5jdGlvbixPcGVyYXRp
b25zPjo6dHlwZSAmIGFyZ3MsCiAgICAgICAgICAgICBwbGFjZWhvbGRlcjxPcGVyYXRpb25zPiAm
IGN1cnJlbnQsIDo6c3RkOjpzaXplX3QgaW5kZXgpIGNvbnN0CiAgewogICAgdHlwZWRlZiB0eXBl
bmFtZSBGdW5jdGlvbjo6c2lnbmF0dXJlIHNpZ25hdHVyZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUK
ICAgICAgY2FsbF9leF9hcmd1bWVudHMKICAgICAgPAogICAgICAgIGZ1bmN0aW9uX2FyZ3VtZW50
czxzaWduYXR1cmU+LAogICAgICAgIE9wZXJhdGlvbnMKICAgICAgPjo6dHlwZSB4X2FyZ3M7Cgog
ICAgdHlwZWRlZiB0eXBlbmFtZSBleGVjdXRlX3Jlc3VsdDxGdW5jdGlvbixPcGVyYXRpb25zPjo6
dHlwZSByZXN1bHQ7CiAgICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6c2l6ZTx4X2Fy
Z3M+Ojp0eXBlIGFueVRfY291bnRlcjsKCiAgICB0cnkKICAgIHsKICAgICAgcmV0dXJuIGNhbGxf
ZXhfZGlzcGF0Y2hlcjxyZXN1bHQsT3BlcmF0aW9ucyxhbnlUX2NvdW50ZXI6OnZhbHVlPigpKAog
ICAgICAgIGYsIGFyZ3MsIGV4dHJhY3RvcjxPcGVyYXRpb25zLFQ+KCkuc3RhdGljX2V4dHJhY3Qo
Y3VycmVudCksIGluZGV4KTsKICAgIH0KICAgIGNhdGNoKGNhbnRfZXh0cmFjdCkKICAgIHsKCiAg
ICB9CgogICAgdHlwZWRlZiB0eXBlbmFtZSBiaW5kX3NpZ25hdHVyZTwKICAgICAgc2lnbmF0dXJl
LCBhbnk8T3BlcmF0aW9ucz4gPjo6dHlwZSBib3VuZF9zaWduYXR1cmU7CgogICAgcmV0dXJuIG5v
X2NhbGxfZGlzcGF0Y2hlcjxib3VuZF9zaWduYXR1cmU+KCkoZiwgYXJncyk7CiAgfQp9OwoKCnRl
bXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQsIGNsYXNzIEJlZ2luLCBjbGFzcyBFbmQ+
CnN0cnVjdCBub25jbGFzc19ob2xkZXJfZXhlY3V0ZQogIDogbm9uY2xhc3NfaG9sZGVyX2V4ZWN1
dGUKICAgIDwKICAgICAgT3BlcmF0aW9ucywKICAgICAgVCwKICAgICAgdHlwZW5hbWUgQmVnaW46
Om5leHQsCiAgICAgIEVuZAogICAgPgp7CiAgdHlwZWRlZiB0eXBlbmFtZSBCZWdpbjo6dHlwZSBm
dW5jdGlvbl90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgZXhlY3V0ZV9yZXN1bHQ8ZnVuY3Rpb25f
dHlwZSxPcGVyYXRpb25zPjo6dHlwZSByZXN1bHRfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGV4
ZWN1dGVfYXJndW1lbnQ8ZnVuY3Rpb25fdHlwZSxPcGVyYXRpb25zPjo6dHlwZSBhcmdfdHlwZTsK
CiAgdmlydHVhbCByZXN1bHRfdHlwZSBleGVjdXRlKGNvbnN0IGZ1bmN0aW9uX3R5cGUgJiBmLAog
ICAgICAgICAgY29uc3QgYXJnX3R5cGUgJiBhcmdzLCA6OnN0ZDo6c2l6ZV90IGluZGV4LCBzaWcp
CiAgewogICAgcmV0dXJuIGV4ZWN1dGVfaW1wbDxUPigpKGYsIGFyZ3MsICp0aGlzLCBpbmRleCk7
CiAgfQp9OwoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQsIGNsYXNzIEJlZ2lu
LCBjbGFzcyBFbmQ+CnN0cnVjdCBjbGFzc19ob2xkZXJfZXhlY3V0ZQogIDogY2xhc3NfaG9sZGVy
X2V4ZWN1dGUKICAgIDwKICAgICAgT3BlcmF0aW9ucywKICAgICAgVCwKICAgICAgdHlwZW5hbWUg
QmVnaW46Om5leHQsCiAgICAgIEVuZAogICAgPgp7CiAgdHlwZWRlZiB0eXBlbmFtZSBCZWdpbjo6
dHlwZSBmdW5jdGlvbl90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgZXhlY3V0ZV9yZXN1bHQ8ZnVu
Y3Rpb25fdHlwZSxPcGVyYXRpb25zPjo6dHlwZSByZXN1bHRfdHlwZTsKICB0eXBlZGVmIHR5cGVu
YW1lIGV4ZWN1dGVfYXJndW1lbnQ8ZnVuY3Rpb25fdHlwZSxPcGVyYXRpb25zPjo6dHlwZSBhcmdf
dHlwZTsKCiAgdmlydHVhbCByZXN1bHRfdHlwZSBleGVjdXRlKGNvbnN0IGZ1bmN0aW9uX3R5cGUg
JiBmLAogICAgICAgICAgY29uc3QgYXJnX3R5cGUgJiBhcmdzLCA6OnN0ZDo6c2l6ZV90IGluZGV4
LCBzaWcpCiAgewogICAgcmV0dXJuIGV4ZWN1dGVfaW1wbDxUPigpKGYsIGFyZ3MsICp0aGlzLCBp
bmRleCk7CiAgfQp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmU+CnN0cnVjdCBmaXJzdF9h
bnlUCnsKICB0eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJvb3N0OjptcGw6OmZpbmRfaWYKICAgIDwK
ICAgICAgZnVuY3Rpb25fYXJndW1lbnRzPFNpZ25hdHVyZT4sCiAgICAgIGNvbnRhaW5zX2FueVQ8
IDo6Ym9vc3Q6Om1wbDo6YXJnPDE+ID4KICAgID46OnR5cGUgZmlyc3RfYW55VF9pdGVyOwoKICB0
eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJvb3N0OjptcGw6OmRpc3RhbmNlCiAgICA8CiAgICAgIHR5
cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YmVnaW48ZnVuY3Rpb25fYXJndW1lbnRzPFNpZ25hdHVyZT4g
Pjo6dHlwZSwKICAgICAgZmlyc3RfYW55VF9pdGVyCiAgICA+Ojp0eXBlIHBvc2l0aW9uOwoKCiAg
dHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFU
SUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggKHBvc2l0aW9uOjp2YWx1ZSA8IGZ1bmN0aW9u
X2FyZ3VtZW50czxTaWduYXR1cmU+Ojphcml0eSkgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90
eXBlZGVmXzc2ODsKCgogIHR5cGVkZWYgdHlwZW5hbWUgZmlyc3RfYW55VF9pdGVyOjp0eXBlIHR5
cGU7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmU+CnN0cnVjdCBmaXJzdF9hbnlUPGZ1bmN0
aW9uX2FyZ3VtZW50czxTaWduYXR1cmU+ID4KewogIHR5cGVkZWYgdHlwZW5hbWUgZmlyc3RfYW55
VDxTaWduYXR1cmU+Ojpwb3NpdGlvbiBwb3NpdGlvbjsKICB0eXBlZGVmIHR5cGVuYW1lIGZpcnN0
X2FueVQ8U2lnbmF0dXJlPjo6dHlwZSB0eXBlOwp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBGdW5jdGlv
biwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGNhbGxfb3BlcmF0b3IKewogIHR5cGVkZWYgdHlw
ZW5hbWUgRnVuY3Rpb246OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgdHlwZWRlZiB0eXBlbmFtZSBl
eGVjdXRlX3Jlc3VsdDxGdW5jdGlvbixPcGVyYXRpb25zPjo6dHlwZSByZXN1bHRfdHlwZTsKICB0
eXBlZGVmIHR5cGVuYW1lIGV4ZWN1dGVfYXJndW1lbnQ8RnVuY3Rpb24sT3BlcmF0aW9ucz46OnR5
cGUgYXJnX3R5cGU7CgogIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoY29uc3QgRnVuY3Rpb24gJiBm
LCBjb25zdCBhcmdfdHlwZSAmIGFyZ3MpIGNvbnN0CiAgewoKICAgIHR5cGVkZWYgdHlwZW5hbWUg
Ojpib29zdDo6bXBsOjpjb250YWluczxPcGVyYXRpb25zLEZ1bmN0aW9uPjo6dHlwZSBjaGVjazsK
ICAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2VydF90ZXN0PCBzaXplb2YoOjpib29zdDo6
U1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPCAoYm9vbCkoIGNoZWNrOjp2YWx1ZSApID4pPiBib29z
dF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfNzkzOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgZmlyc3Rf
YW55VDxzaWduYXR1cmU+Ojpwb3NpdGlvbiBwb3NpdGlvbjsKCiAgICBjb25zdCBhbnk8T3BlcmF0
aW9ucz4gJiBjciA9IDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PChwb3NpdGlvbjo6dmFsdWUpPihhcmdz
KTsKICAgIGFueTxPcGVyYXRpb25zPiAmIGN1cnJlbnQgPSBjb25zdF9jYXN0PGFueTxPcGVyYXRp
b25zPiAmPihjcik7CgoKICAgIGlmKHBsYWNlaG9sZGVyPE9wZXJhdGlvbnM+ICogcCA9IGN1cnJl
bnQubV9jb250ZW50KQogICAgICByZXR1cm4gcC0+ZXhlY3V0ZShmLCBhcmdzLCBwb3NpdGlvbjo6
dmFsdWUsIHNpZygpKTsKICAgIGVsc2UKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZQogICAg
ICAgIGJpbmRfc2lnbmF0dXJlCiAgICAgICAgPAogICAgICAgICAgc2lnbmF0dXJlLAogICAgICAg
ICAgYW55PE9wZXJhdGlvbnM+CiAgICAgICAgPjo6dHlwZSBib3VuZF9zaWduYXR1cmU7CgogICAg
ICByZXR1cm4gbm9fY2FsbF9kaXNwYXRjaGVyPGJvdW5kX3NpZ25hdHVyZT4oKShmLCBhcmdzKTsK
ICAgIH0KICB9Cn07CgoKCgoKdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0IGFueVRfcmVmCnsKICB0
eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJvb3N0OjptcGw6OmlmXwogICAgPAogICAgICA6OmJvb3N0
Ojppc19zYW1lPFQsIGFueVQgJj4sCiAgICAgIGFueVQgJiwKICAgICAgY29uc3QgYW55VCAmCiAg
ICA+Ojp0eXBlIHR5cGU7Cn07CgoKbmFtZXNwYWNlIGdlbmVyYXRlZCB7CgoKCnN0cnVjdCBtYXhf
YXJnX2NvdW50IDogcHVibGljIDo6Ym9vc3Q6Om1wbDo6aW50ZWdyYWxfYzxsb25nLCA1PiB7fTsK
Cgp0ZW1wbGF0ZTxjbGFzcyBGLCBjbGFzcyBTLCBjbGFzcyBGaXJzdEFueVJlZiwgbG9uZyBGaXJz
dEFueVBvcz4Kc3RydWN0IGZpOwojIDg1MyAiLi4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkvZnVu
Y3Rpb24uaHBwIgp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBULCBsb25nIE4+CnN0cnVjdCBiCnsK
ICB0eXBlZGVmIGZ1bmN0aW9uX2FyZ3VtZW50czxTPiBhcmdzOwogIHR5cGVkZWYgdHlwZW5hbWUg
YmluZF9hbnlUX2FyZ3VtZW50czxhcmdzLCBUPjo6dHlwZSBib3VuZF9hcmdzOwogIHR5cGVkZWYg
dHlwZW5hbWUgOjpib29zdDo6bXBsOjphdF9jPGJvdW5kX2FyZ3MsIE4+Ojp0eXBlIHQ7Cn07Cgp0
ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBMLCBsb25nIE4+CnN0cnVjdCBhCnsKICB0eXBlZGVmIHR5
cGVuYW1lIGI8UywgYW55PEw+LCBOPjo6dCB0Owp9OwoKCnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNz
IFQsIGNsYXNzIEwsIGxvbmcgTj4Kc3RydWN0IHgKewogIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF9l
eF9hcmd1bWVudDxTLFQsTCxOPjo6dHlwZSB0Owp9OwoKdGVtcGxhdGU8Y2xhc3MgRiwgY2xhc3Mg
TD4Kc3RydWN0IHIKewogIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF9vcGVyYXRvcjxGLCBMPjo6cmVz
dWx0X3R5cGUgdDsKfTsKCnRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIEw+CnN0cnVjdCB1CnsKICB0
eXBlZGVmIHR5cGVuYW1lIGNhbGxfb3BlcmF0b3I8RiwgTD46OmFyZ190eXBlIHQ7Cn07CgoKdGVt
cGxhdGU8Y2xhc3MgU2lnbmF0dXJlLCBsb25nIE4+CnN0cnVjdCBmYQp7CiAgdHlwZWRlZiBmdW5j
dGlvbl9hcmd1bWVudHM8U2lnbmF0dXJlPiBhcmdzOwogIHR5cGVkZWYgdHlwZW5hbWUgOjpib29z
dDo6bXBsOjphdF9jPGFyZ3MsIE4+Ojp0eXBlIHQ7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgRiwgY2xh
c3MgUywgY2xhc3MgU1g+CnN0cnVjdCBjeDsKCgpzdHJ1Y3Qgbm9hcmcge307Cgp0ZW1wbGF0ZTxj
bGFzcyBGLCBjbGFzcyBTLCBjbGFzcyBULCBjbGFzcyBMPgpzdHJ1Y3QgZ2V0X2N4CnsKICB0eXBl
ZGVmIHR5cGVuYW1lIGNhbGxfZXhfYXJndW1lbnRzPGZ1bmN0aW9uX2FyZ3VtZW50czxTPiwgTD46
OnR5cGUgeF9hcmdzOwogIHR5cGVkZWYgdHlwZW5hbWUgb3B0aW1pemVfYXJndW1lbnRzX2NvcHlp
bmc8eF9hcmdzPjo6dHlwZSBvcHRpbWl6ZWQ7CgoKCgogIHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6
Ym9vc3Q6Om1wbDo6YWR2YW5jZQogICAgPAogICAgICB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmJl
Z2luPG9wdGltaXplZD46OnR5cGUsCiAgICAgIHR5cGVuYW1lIGZpcnN0X2FueVQ8b3B0aW1pemVk
Pjo6cG9zaXRpb24KICAgID46OnR5cGUgZmlyc3RfYW55VF9pdGVyOwoKICB0eXBlZGVmIHR5cGVu
YW1lCiAgICA6OmJvb3N0OjptcGw6OmVyYXNlCiAgICA8CiAgICAgIG9wdGltaXplZCwKICAgICAg
dHlwZW5hbWUgZmlyc3RfYW55VF9pdGVyOjpuZXh0CiAgICA+Ojp0eXBlIHNraXBlZDsKCiAgdHlw
ZWRlZiB0eXBlbmFtZQogICAgZmlyc3RfYW55VAogICAgPAogICAgICB0eXBlbmFtZSA6OmJvb3N0
OjptcGw6OmVyYXNlPG9wdGltaXplZCwgZmlyc3RfYW55VF9pdGVyPjo6dHlwZQogICAgPjo6cG9z
aXRpb24gc2Vjb25kX2FueVRfcG9zOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6
Om1wbDo6Y29weQogICAgPAogICAgICBza2lwZWQsCiAgICAgIHNraXBlZCwKICAgICAgOjpib29z
dDo6bXBsOjpwdXNoX2JhY2s8IDo6Ym9vc3Q6Om1wbDo6YXJnPDE+LCBub2FyZz4KICAgID46OnR5
cGUgZXh0cmE7CgogIHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6Om1wbDo6YWR2YW5jZV9j
CiAgICA8CiAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YmVnaW48ZXh0cmE+Ojp0eXBlLAog
ICAgICAoMiAqIG1heF9hcmdfY291bnQ6OnZhbHVlIC0gc2Vjb25kX2FueVRfcG9zOjp2YWx1ZSkK
ICAgID46OnR5cGUgZXJhc2Vfc3RhcnQ7CgogIHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6
Om1wbDo6ZXJhc2UKICAgIDwKICAgICAgZXh0cmEsCiAgICAgIGVyYXNlX3N0YXJ0LAogICAgICB0
eXBlbmFtZSA6OmJvb3N0OjptcGw6OmVuZDxleHRyYT46OnR5cGUKICAgID46OnR5cGUgdW5ib3Vu
ZDsKCiAgdHlwZWRlZiB0eXBlbmFtZSBiaW5kX2FueVRfYXJndW1lbnRzPHVuYm91bmQsIFQ+Ojp0
eXBlIGJvdW5kOwogIHR5cGVkZWYgY3g8RiwgUywgdHlwZW5hbWUgYm91bmQ6OnNpZ25hdHVyZT4g
dHlwZTsKfTsKCgp0ZW1wbGF0ZTxjbGFzcyBGLCBjbGFzcyBTLCBjbGFzcyBTWCwgbG9uZyBOPgpz
dHJ1Y3QgbmV4dF9jeAp7CiAgdHlwZWRlZiBmdW5jdGlvbl9hcmd1bWVudHM8Uz4gYWxsX2FyZ3M7
CiAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmJlZ2luPGFsbF9hcmdzPjo6dHlwZSBi
ZWdpbjsKICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YWR2YW5jZV9jPGJlZ2luLCBO
Pjo6dHlwZSBzdGFydDsKCgogIHR5cGVkZWYgdHlwZW5hbWUgOjpib29zdDo6bXBsOjplcmFzZTwK
ICAgIGFsbF9hcmdzLCBiZWdpbiwgc3RhcnQ+Ojp0eXBlIGFyZ3M7CgogIHR5cGVkZWYgdHlwZW5h
bWUgOjpib29zdDo6bXBsOjpmaW5kX2lmPGFyZ3MsCiAgICBjb250YWluc19hbnlUPCA6OmJvb3N0
OjptcGw6OmFyZzwxPiA+ID46OnR5cGUgbmV4dF9hbnlUX2l0ZXI7CgogIHR5cGVkZWYgdHlwZW5h
bWUKICAgIDo6Ym9vc3Q6Om1wbDo6ZGlzdGFuY2UKICAgIDwKICAgICAgbmV4dF9hbnlUX2l0ZXIs
CiAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YmVnaW48YXJncz46OnR5cGUKICAgID46OnR5
cGUgbWludXNfZXJhc2VfY291bnQ7CgogIHR5cGVkZWYgZnVuY3Rpb25fYXJndW1lbnRzPFNYPiB4
X2FyZ3M7CiAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmVuZDx4X2FyZ3M+Ojp0eXBl
IGVuZDsKICB0eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJvb3N0OjptcGw6OmFkdmFuY2U8ZW5kLCBt
aW51c19lcmFzZV9jb3VudD46OnR5cGUgZXJhc2Vfc3RhcnQ7CgogIHR5cGVkZWYgdHlwZW5hbWUK
ICAgIDo6Ym9vc3Q6Om1wbDo6ZXJhc2U8eF9hcmdzLCBlcmFzZV9zdGFydCwgZW5kPjo6dHlwZSBz
aWdfeDsKCiAgdHlwZWRlZiBjeDxGLCBTLCB0eXBlbmFtZSBzaWdfeDo6c2lnbmF0dXJlPiB0eXBl
Owp9OwoKCnRlbXBsYXRlPGNsYXNzIEYsIGxvbmcgTj4KaW5saW5lIHZvaWQgY2EoKQp7CiAgdHlw
ZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNf
QVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggRjo6YXJpdHkgPT0gTiApID4pPiBib29zdF9zdGF0
aWNfYXNzZXJ0X3R5cGVkZWZfOTk2Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBMLCBjbGFzcyBGLCBjbGFz
cyBTLCBjbGFzcyBBLCBsb25nIE4+CmlubGluZSB0eXBlbmFtZSBjYWxsX29wZXJhdG9yPEYsTD46
OnJlc3VsdF90eXBlIGZjKAogIGNvbnN0IGZpPEYsUyxBLE4+ICogZmltcGwsIHR5cGVuYW1lIGNh
bGxfb3BlcmF0b3I8RixMPjo6YXJnX3R5cGUgJiB0KQp7CiAgY2FsbF9vcGVyYXRvcjxGLEw+IG9w
OwogIHJldHVybiBvcChzdGF0aWNfY2FzdDxjb25zdCBGJj4oKmZpbXBsKSwgdCk7Cn0KCgp0ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyBMLCBjbGFzcyBGLCBjbGFzcyBTLCBjbGFzcyBBLCBsb25nIE4+
CmlubGluZSB0eXBlbmFtZSBnZXRfY3g8RixTLFQsTD46OnR5cGUgbXgoY29uc3QgZmk8RixTLEEs
Tj4gKiBmaW1wbCkKewogIHR5cGVkZWYgdHlwZW5hbWUgZ2V0X2N4PEYsUyxULEw+Ojp0eXBlIHJl
c3VsdDsKICByZXR1cm4gcmVzdWx0KHN0YXRpY19jYXN0PGNvbnN0IEYmPigqZmltcGwpKTsKfQoK
IyAxICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9hdXgvZ2VuZXJhdGVkL2ZpLmhwcCIgMQoK
CgoKdGVtcGxhdGU8Y2xhc3MgRixjbGFzcyBTLGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xh
c3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3Mg
VDg+CnN0cnVjdCBjeDxGLFMsUihUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCk+CnsKICB0eXBl
ZGVmIHR5cGVuYW1lIG5leHRfY3g8RixTLFIoVDAsVDEsVDMsVDQsVDUsVDYsVDcsVDgpLDI+Ojp0
eXBlIGc7CiAgY29uc3QgRiZmOwogIGN4KGNvbnN0IEYmeSk6Zih5KXt9CiAgUiB4KFQwIHYwLFQx
IHYxLFQyKQogIHsKICAgIHJldHVybiBmLmNhbGwodjAsdjEpOwogIH0KICBSIHgoVDAgdjAsVDEg
djEsVDIsVDMgdjMpCiAgewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSx2Myk7CiAgfQogIFIgeChU
MCB2MCxUMSB2MSxUMixUMyB2MyxUNCB2NCkKICB7CiAgICBnIGgoZik7IHJldHVybiBoLngodjAs
djEsdjMsdjQpOwogIH0KICBSIHgoVDAgdjAsVDEgdjEsVDIsVDMgdjMsVDQgdjQsVDUgdjUpCiAg
ewogICAgZyBoKGYpOyByZXR1cm4gaC54KHYwLHYxLHYzLHY0LHY1KTsKICB9CiAgUiB4KFQwIHYw
LFQxIHYxLFQyLFQzIHYzLFQ0IHY0LFQ1IHY1LFQ2IHY2KQogIHsKICAgIGcgaChmKTsgcmV0dXJu
IGgueCh2MCx2MSx2Myx2NCx2NSx2Nik7CiAgfQogIFIgeChUMCB2MCxUMSB2MSxUMixUMyB2MyxU
NCB2NCxUNSB2NSxUNiB2NixUNyB2NykKICB7CiAgICBnIGgoZik7IHJldHVybiBoLngodjAsdjEs
djMsdjQsdjUsdjYsdjcpOwogIH0KICBSIHgoVDAgdjAsVDEgdjEsVDIsVDMgdjMsVDQsVDUgdjUs
VDYsVDcgdjcsVDgpCiAgewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSx2Myx2NSx2Nyk7CiAgfQp9
Owp0ZW1wbGF0ZTxjbGFzcyBGLGNsYXNzIFMsY2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFz
cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNz4Kc3RydWN0
IGN4PEYsUyxSKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3KT4KewogIHR5cGVkZWYgdHlwZW5hbWUg
bmV4dF9jeDxGLFMsUihUMCxUMSxUMixUNCxUNSxUNixUNyksMz46OnR5cGUgZzsKICBjb25zdCBG
JmY7CiAgY3goY29uc3QgRiZ5KTpmKHkpe30KICBSIHgoVDAgdjAsVDEgdjEsVDIgdjIsVDMpCiAg
ewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSx2Mik7CiAgfQogIFIgeChUMCB2MCxUMSB2MSxUMiB2
MixUMyxUNCB2NCkKICB7CiAgICByZXR1cm4gZi5jYWxsKHYwLHYxLHYyLHY0KTsKICB9CiAgUiB4
KFQwIHYwLFQxIHYxLFQyIHYyLFQzLFQ0IHY0LFQ1IHY1KQogIHsKICAgIGcgaChmKTsgcmV0dXJu
IGgueCh2MCx2MSx2Mix2NCx2NSk7CiAgfQogIFIgeChUMCB2MCxUMSB2MSxUMiB2MixUMyxUNCB2
NCxUNSB2NSxUNiB2NikKICB7CiAgICBnIGgoZik7IHJldHVybiBoLngodjAsdjEsdjIsdjQsdjUs
djYpOwogIH0KICBSIHgoVDAgdjAsVDEgdjEsVDIgdjIsVDMsVDQgdjQsVDUsVDYgdjYsVDcpCiAg
ewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSx2Mix2NCx2Nik7CiAgfQp9Owp0ZW1wbGF0ZTxjbGFz
cyBGLGNsYXNzIFMsY2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxj
bGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNj4Kc3RydWN0IGN4PEYsUyxSKFQwLFQxLFQyLFQzLFQ0
LFQ1LFQ2KT4KewogIGNvbnN0IEYmZjsKICBjeChjb25zdCBGJnkpOmYoeSl7fQogIFIgeChUMCB2
MCxUMSB2MSxUMiB2MixUMyB2MyxUNCkKICB7CiAgICByZXR1cm4gZi5jYWxsKHYwLHYxLHYyLHYz
KTsKICB9CiAgUiB4KFQwIHYwLFQxIHYxLFQyIHYyLFQzIHYzLFQ0LFQ1IHY1KQogIHsKICAgIHJl
dHVybiBmLmNhbGwodjAsdjEsdjIsdjMsdjUpOwogIH0KICBSIHgoVDAgdjAsVDEgdjEsVDIgdjIs
VDMgdjMsVDQsVDUgdjUsVDYpCiAgewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSx2Mix2Myx2NSk7
CiAgfQp9Owp0ZW1wbGF0ZTxjbGFzcyBGLGNsYXNzIFMsY2xhc3MgUixjbGFzcyBUMCxjbGFzcyBU
MSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNT4Kc3RydWN0IGN4PEYsUyxSKFQw
LFQxLFQyLFQzLFQ0LFQ1KT4KewogIGNvbnN0IEYmZjsKICBjeChjb25zdCBGJnkpOmYoeSl7fQog
IFIgeChUMCB2MCxUMSB2MSxUMiB2MixUMyB2MyxUNCB2NCxUNSkKICB7CiAgICByZXR1cm4gZi5j
YWxsKHYwLHYxLHYyLHYzLHY0KTsKICB9Cn07CnRlbXBsYXRlPGNsYXNzIEYsY2xhc3MgUyxjbGFz
cyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0PgpzdHJ1Y3Qg
Y3g8RixTLFIoVDAsVDEsVDIsVDMsVDQpPgp7CiAgY29uc3QgRiZmOwogIGN4KGNvbnN0IEYmeSk6
Zih5KXt9CiAgUiB4KFQwIHYwKQogIHsKICAgIHJldHVybiBmLmNhbGwodjApOwogIH0KICBSIHgo
VDAgdjAsVDEgdjEpCiAgewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSk7CiAgfQogIFIgeChUMCB2
MCxUMSB2MSxUMiB2MikKICB7CiAgICByZXR1cm4gZi5jYWxsKHYwLHYxLHYyKTsKICB9CiAgUiB4
KFQwIHYwLFQxIHYxLFQyIHYyLFQzIHYzKQogIHsKICAgIHJldHVybiBmLmNhbGwodjAsdjEsdjIs
djMpOwogIH0KICBSIHgoVDAgdjAsVDEgdjEsVDIgdjIsVDMgdjMsVDQgdjQpCiAgewogICAgcmV0
dXJuIGYuY2FsbCh2MCx2MSx2Mix2Myx2NCk7CiAgfQp9Owp0ZW1wbGF0ZTxjbGFzcyBGLGNsYXNz
IFM+CnN0cnVjdCBmaTxGLFMsYW55VCYsMD4KewogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5h
bWUgcjxGLEw+Ojp0IG5vX2NhbGwoYW55PEw+Ji4uLikgY29uc3QKICB7CiAgICB0aHJvdyBiYWRf
ZnVuY3Rpb25fY2FsbCgpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixM
Pjo6dCBvcGVyYXRvcigpKGFueTxMPiZ2MCkgY29uc3QKICB7CiAgICBjYTxGLDE+KCk7CiAgICB0
eXBlbmFtZSB1PEYsTD46OnQgdCh2MCk7CiAgICByZXR1cm4gZmM8TD4odGhpcyx0KTsKICB9CiAg
dGVtcGxhdGU8Y2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShhbnk8TD4m
djAsdHlwZW5hbWUgYTxTLEwsMT46OnQgdjEpIGNvbnN0CiAgewogICAgY2E8RiwyPigpOwogICAg
dHlwZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAg
fQogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoYW55
PEw+JnYwLHR5cGVuYW1lIGE8UyxMLDE+Ojp0IHYxLHR5cGVuYW1lIGE8UyxMLDI+Ojp0IHYyKSBj
b25zdAogIHsKICAgIGNhPEYsMz4oKTsKICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYy
KTsKICAgIHJldHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5
cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKGFueTxMPiZ2MCx0eXBlbmFtZSBhPFMsTCwxPjo6
dCB2MSx0eXBlbmFtZSBhPFMsTCwyPjo6dCB2Mix0eXBlbmFtZSBhPFMsTCwzPjo6dCB2MykgY29u
c3QKICB7CiAgICBjYTxGLDQ+KCk7CiAgICB0eXBlbmFtZSB1PEYsTD46OnQgdCh2MCx2MSx2Mix2
Myk7CiAgICByZXR1cm4gZmM8TD4odGhpcyx0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgTD4KICB0
eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShhbnk8TD4mdjAsdHlwZW5hbWUgYTxTLEwsMT46
OnQgdjEsdHlwZW5hbWUgYTxTLEwsMj46OnQgdjIsdHlwZW5hbWUgYTxTLEwsMz46OnQgdjMsdHlw
ZW5hbWUgYTxTLEwsND46OnQgdjQpIGNvbnN0CiAgewogICAgY2E8Riw1PigpOwogICAgdHlwZW5h
bWUgdTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMsdjQpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7
CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2Fs
bF9leChUJnYwLGNvbnN0IGFueTxMPiYpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEYqPih0aGlzKS0+Y2FsbCh2MCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3Mg
TD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChUJnYwLGNvbnN0IGFueTxMPiYsdHlwZW5h
bWUgYjxTLFQsMT46OnQgdjEpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IEYqPih0aGlzKS0+Y2FsbCh2MCx2MSk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4K
ICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChUJnYwLGFueTxMPiYsdHlwZW5hbWUgYjxTLFQs
MT46OnQgdjEsdHlwZW5hbWUgeDxTLFQsTCwzPjo6dCB2MikgY29uc3QKICB7CiAgICByZXR1cm4g
bXg8VCxMPih0aGlzKS54KHYwLHYxLHYyKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBM
PgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KFQmdjAsYW55PEw+Jix0eXBlbmFtZSBiPFMs
VCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyLHR5cGVuYW1lIHg8UyxULEwsND46
OnQgdjMpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myk7
CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2Fs
bF9leChUJnYwLGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsMT46OnQgdjEsdHlwZW5hbWUgeDxTLFQs
TCwzPjo6dCB2Mix0eXBlbmFtZSB4PFMsVCxMLDQ+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEwsNT46
OnQgdjQpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myx2
NCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQg
Y2FsbF9leChUJnYwLGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsMT46OnQgdjEsdHlwZW5hbWUgeDxT
LFQsTCwzPjo6dCB2Mix0eXBlbmFtZSB4PFMsVCxMLDQ+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEws
NT46OnQgdjQsdHlwZW5hbWUgeDxTLFQsTCw2Pjo6dCB2NSkgY29uc3QKICB7CiAgICByZXR1cm4g
bXg8VCxMPih0aGlzKS54KHYwLHYxLHYyLHYzLHY0LHY1KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3Mg
VCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KFQmdjAsYW55PEw+Jix0eXBl
bmFtZSBiPFMsVCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyLHR5cGVuYW1lIHg8
UyxULEwsND46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCx0eXBlbmFtZSB4PFMsVCxM
LDY+Ojp0IHY1LHR5cGVuYW1lIHg8UyxULEwsNz46OnQgdjYpIGNvbnN0CiAgewogICAgcmV0dXJu
IG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myx2NCx2NSx2Nik7CiAgfQogIHRlbXBsYXRlPGNs
YXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChUJnYwLGFueTxMPiYs
dHlwZW5hbWUgYjxTLFQsMT46OnQgdjEsdHlwZW5hbWUgeDxTLFQsTCwzPjo6dCB2Mix0eXBlbmFt
ZSB4PFMsVCxMLDQ+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEwsNT46OnQgdjQsdHlwZW5hbWUgeDxT
LFQsTCw2Pjo6dCB2NSx0eXBlbmFtZSB4PFMsVCxMLDc+Ojp0IHY2LHR5cGVuYW1lIHg8UyxULEws
OD46OnQgdjcpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2
Myx2NCx2NSx2Nix2Nyk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFt
ZSByPEYsTD46OnQgY2FsbF9leChUJnYwLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsMT46
OnQgdjEsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwyPjo6dCB2Mixjb25zdCBhbnk8TD4m
LHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsND46
OnQgdjQsY29uc3QgYW55PEw+JikgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYyLHYzLHY0KTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFz
cyBGLGNsYXNzIFM+CnN0cnVjdCBmaTxGLFMsY29uc3QgYW55VCYsMD4KewogIHRlbXBsYXRlPGNs
YXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG5vX2NhbGwoY29uc3QgYW55PEw+Ji4uLikgY29u
c3QKICB7CiAgICB0aHJvdyBiYWRfZnVuY3Rpb25fY2FsbCgpOwogIH0KICB0ZW1wbGF0ZTxjbGFz
cyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKGNvbnN0IGFueTxMPiZ2KSBjb25z
dAogIHsKICAgIGNhPEYsMT4oKTsKICAgIHR5cGVuYW1lIGE8UyxMLDA+Ojp0IHYwKHYpOwogICAg
dHlwZW5hbWUgdTxGLEw+Ojp0IHQodjApOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQog
IHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoY29uc3Qg
YW55PEw+JnYsdHlwZW5hbWUgYTxTLEwsMT46OnQgdjEpIGNvbnN0CiAgewogICAgY2E8RiwyPigp
OwogICAgdHlwZW5hbWUgYTxTLEwsMD46OnQgdjAodik7CiAgICB0eXBlbmFtZSB1PEYsTD46OnQg
dCh2MCx2MSk7CiAgICByZXR1cm4gZmM8TD4odGhpcyx0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3Mg
TD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShjb25zdCBhbnk8TD4mdix0eXBlbmFt
ZSBhPFMsTCwxPjo6dCB2MSx0eXBlbmFtZSBhPFMsTCwyPjo6dCB2MikgY29uc3QKICB7CiAgICBj
YTxGLDM+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwwPjo6dCB2MCh2KTsKICAgIHR5cGVuYW1lIHU8
RixMPjo6dCB0KHYwLHYxLHYyKTsKICAgIHJldHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1w
bGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKGNvbnN0IGFueTxM
PiZ2LHR5cGVuYW1lIGE8UyxMLDE+Ojp0IHYxLHR5cGVuYW1lIGE8UyxMLDI+Ojp0IHYyLHR5cGVu
YW1lIGE8UyxMLDM+Ojp0IHYzKSBjb25zdAogIHsKICAgIGNhPEYsND4oKTsKICAgIHR5cGVuYW1l
IGE8UyxMLDA+Ojp0IHYwKHYpOwogICAgdHlwZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMp
OwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlw
ZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoY29uc3QgYW55PEw+JnYsdHlwZW5hbWUgYTxTLEws
MT46OnQgdjEsdHlwZW5hbWUgYTxTLEwsMj46OnQgdjIsdHlwZW5hbWUgYTxTLEwsMz46OnQgdjMs
dHlwZW5hbWUgYTxTLEwsND46OnQgdjQpIGNvbnN0CiAgewogICAgY2E8Riw1PigpOwogICAgdHlw
ZW5hbWUgYTxTLEwsMD46OnQgdjAodik7CiAgICB0eXBlbmFtZSB1PEYsTD46OnQgdCh2MCx2MSx2
Mix2Myx2NCk7CiAgICByZXR1cm4gZmM8TD4odGhpcyx0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3Mg
VCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3Qg
YW55PEw+JikgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRio+KHRoaXMp
LT5jYWxsKHYwKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8
RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwx
Pjo6dCB2MSkgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRio+KHRoaXMp
LT5jYWxsKHYwLHYxKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1l
IHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMs
VCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyKSBjb25zdAogIHsKICAgIHJldHVy
biBteDxULEw+KHRoaXMpLngodjAsdjEsdjIpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNz
IEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgoY29uc3QgVCZ2MCxjb25zdCBhbnk8TD4m
LHR5cGVuYW1lIGI8UyxULDE+Ojp0IHYxLHR5cGVuYW1lIHg8UyxULEwsMz46OnQgdjIsdHlwZW5h
bWUgeDxTLFQsTCw0Pjo6dCB2MykgY29uc3QKICB7CiAgICByZXR1cm4gbXg8VCxMPih0aGlzKS54
KHYwLHYxLHYyLHYzKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1l
IHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMs
VCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyLHR5cGVuYW1lIHg8UyxULEwsND46
OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCkgY29uc3QKICB7CiAgICByZXR1cm4gbXg8
VCxMPih0aGlzKS54KHYwLHYxLHYyLHYzLHY0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFz
cyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55PEw+
Jix0eXBlbmFtZSBiPFMsVCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyLHR5cGVu
YW1lIHg8UyxULEwsND46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCx0eXBlbmFtZSB4
PFMsVCxMLDY+Ojp0IHY1KSBjb25zdAogIHsKICAgIHJldHVybiBteDxULEw+KHRoaXMpLngodjAs
djEsdjIsdjMsdjQsdjUpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5h
bWUgcjxGLEw+Ojp0IGNhbGxfZXgoY29uc3QgVCZ2MCxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8
UyxULDE+Ojp0IHYxLHR5cGVuYW1lIHg8UyxULEwsMz46OnQgdjIsdHlwZW5hbWUgeDxTLFQsTCw0
Pjo6dCB2Myx0eXBlbmFtZSB4PFMsVCxMLDU+Ojp0IHY0LHR5cGVuYW1lIHg8UyxULEwsNj46OnQg
djUsdHlwZW5hbWUgeDxTLFQsTCw3Pjo6dCB2NikgY29uc3QKICB7CiAgICByZXR1cm4gbXg8VCxM
Pih0aGlzKS54KHYwLHYxLHYyLHYzLHY0LHY1LHY2KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxj
bGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55
PEw+Jix0eXBlbmFtZSBiPFMsVCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyLHR5
cGVuYW1lIHg8UyxULEwsND46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCx0eXBlbmFt
ZSB4PFMsVCxMLDY+Ojp0IHY1LHR5cGVuYW1lIHg8UyxULEwsNz46OnQgdjYsdHlwZW5hbWUgeDxT
LFQsTCw4Pjo6dCB2NykgY29uc3QKICB7CiAgICByZXR1cm4gbXg8VCxMPih0aGlzKS54KHYwLHYx
LHYyLHYzLHY0LHY1LHY2LHY3KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5
cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55PEw+Jix0eXBlbmFt
ZSBiPFMsVCwxPjo6dCB2MSxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyLGNv
bnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsMz46OnQgdjMsY29uc3QgYW55PEw+Jix0eXBlbmFt
ZSBiPFMsVCw0Pjo6dCB2NCxjb25zdCBhbnk8TD4mKSBjb25zdAogIHsKICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIsdjMsdjQpOwogIH0KfTsKCnRl
bXBsYXRlPGNsYXNzIEYsY2xhc3MgUz4Kc3RydWN0IGZpPEYsUyxhbnlUJiwxPgp7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBmYTxTLDA+Ojp0IF90MDsKICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1l
IHI8RixMPjo6dCBub19jYWxsKF90MCxhbnk8TD4mLi4uKSBjb25zdAogIHsKICAgIHRocm93IGJh
ZF9mdW5jdGlvbl9jYWxsKCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxG
LEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLGFueTxMPiZ2MSkgY29uc3QKICB7CiAgICBjYTxGLDI+
KCk7CiAgICB0eXBlbmFtZSB1PEYsTD46OnQgdCh2MCx2MSk7CiAgICByZXR1cm4gZmM8TD4odGhp
cyx0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0
b3IoKShfdDAgdjAsYW55PEw+JnYxLHR5cGVuYW1lIGE8UyxMLDI+Ojp0IHYyKSBjb25zdAogIHsK
ICAgIGNhPEYsMz4oKTsKICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYyKTsKICAgIHJl
dHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8
RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxhbnk8TD4mdjEsdHlwZW5hbWUgYTxTLEwsMj46OnQg
djIsdHlwZW5hbWUgYTxTLEwsMz46OnQgdjMpIGNvbnN0CiAgewogICAgY2E8Riw0PigpOwogICAg
dHlwZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMs
dCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9y
KCkoX3QwIHYwLGFueTxMPiZ2MSx0eXBlbmFtZSBhPFMsTCwyPjo6dCB2Mix0eXBlbmFtZSBhPFMs
TCwzPjo6dCB2Myx0eXBlbmFtZSBhPFMsTCw0Pjo6dCB2NCkgY29uc3QKICB7CiAgICBjYTxGLDU+
KCk7CiAgICB0eXBlbmFtZSB1PEYsTD46OnQgdCh2MCx2MSx2Mix2Myx2NCk7CiAgICByZXR1cm4g
ZmM8TD4odGhpcyx0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1l
IHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxUJnYxLGNvbnN0IGFueTxMPiYpIGNvbnN0CiAgewog
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEYqPih0aGlzKS0+Y2FsbCh2MCx2MSk7CiAgfQog
IHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChf
dDAgdjAsVCZ2MSxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyKSBjb25zdAog
IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIp
OwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IGNh
bGxfZXgoX3QwIHYwLFQmdjEsYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwyPjo6dCB2Mix0eXBlbmFt
ZSB4PFMsVCxMLDQ+Ojp0IHYzKSBjb25zdAogIHsKICAgIHJldHVybiBteDxULEw+KHRoaXMpLngo
djAsdjEsdjIsdjMpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUg
cjxGLEw+Ojp0IGNhbGxfZXgoX3QwIHYwLFQmdjEsYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwyPjo6
dCB2Mix0eXBlbmFtZSB4PFMsVCxMLDQ+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEwsNT46OnQgdjQp
IGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myx2NCk7CiAg
fQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9l
eChfdDAgdjAsVCZ2MSxhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyLHR5cGVuYW1lIHg8
UyxULEwsND46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCx0eXBlbmFtZSB4PFMsVCxM
LDY+Ojp0IHY1KSBjb25zdAogIHsKICAgIHJldHVybiBteDxULEw+KHRoaXMpLngodjAsdjEsdjIs
djMsdjQsdjUpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxG
LEw+Ojp0IGNhbGxfZXgoX3QwIHYwLFQmdjEsYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwyPjo6dCB2
Mix0eXBlbmFtZSB4PFMsVCxMLDQ+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEwsNT46OnQgdjQsdHlw
ZW5hbWUgeDxTLFQsTCw2Pjo6dCB2NSx0eXBlbmFtZSB4PFMsVCxMLDc+Ojp0IHY2KSBjb25zdAog
IHsKICAgIHJldHVybiBteDxULEw+KHRoaXMpLngodjAsdjEsdjIsdjMsdjQsdjUsdjYpOwogIH0K
ICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgo
X3QwIHYwLFQmdjEsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwyPjo6dCB2Mixjb25zdCBh
bnk8TD4mLHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxT
LFQsND46OnQgdjQsY29uc3QgYW55PEw+JikgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYyLHYzLHY0KTsKICB9Cn07Cgp0ZW1wbGF0
ZTxjbGFzcyBGLGNsYXNzIFM+CnN0cnVjdCBmaTxGLFMsY29uc3QgYW55VCYsMT4KewogIHR5cGVk
ZWYgdHlwZW5hbWUgZmE8UywwPjo6dCBfdDA7CiAgdGVtcGxhdGU8Y2xhc3MgTD4KICB0eXBlbmFt
ZSByPEYsTD46OnQgbm9fY2FsbChfdDAsY29uc3QgYW55PEw+Ji4uLikgY29uc3QKICB7CiAgICB0
aHJvdyBiYWRfZnVuY3Rpb25fY2FsbCgpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVu
YW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxjb25zdCBhbnk8TD4mdikgY29uc3QKICB7
CiAgICBjYTxGLDI+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwxPjo6dCB2MSh2KTsKICAgIHR5cGVu
YW1lIHU8RixMPjo6dCB0KHYwLHYxKTsKICAgIHJldHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0
ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxj
b25zdCBhbnk8TD4mdix0eXBlbmFtZSBhPFMsTCwyPjo6dCB2MikgY29uc3QKICB7CiAgICBjYTxG
LDM+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwxPjo6dCB2MSh2KTsKICAgIHR5cGVuYW1lIHU8RixM
Pjo6dCB0KHYwLHYxLHYyKTsKICAgIHJldHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0
ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxjb25zdCBh
bnk8TD4mdix0eXBlbmFtZSBhPFMsTCwyPjo6dCB2Mix0eXBlbmFtZSBhPFMsTCwzPjo6dCB2Mykg
Y29uc3QKICB7CiAgICBjYTxGLDQ+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwxPjo6dCB2MSh2KTsK
ICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYyLHYzKTsKICAgIHJldHVybiBmYzxMPih0
aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVy
YXRvcigpKF90MCB2MCxjb25zdCBhbnk8TD4mdix0eXBlbmFtZSBhPFMsTCwyPjo6dCB2Mix0eXBl
bmFtZSBhPFMsTCwzPjo6dCB2Myx0eXBlbmFtZSBhPFMsTCw0Pjo6dCB2NCkgY29uc3QKICB7CiAg
ICBjYTxGLDU+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwxPjo6dCB2MSh2KTsKICAgIHR5cGVuYW1l
IHU8RixMPjo6dCB0KHYwLHYxLHYyLHYzLHY0KTsKICAgIHJldHVybiBmYzxMPih0aGlzLHQpOwog
IH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IGNhbGxf
ZXgoX3QwIHYwLGNvbnN0IFQmdjEsY29uc3QgYW55PEw+JikgY29uc3QKICB7CiAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxKTsKICB9CiAgdGVtcGxhdGU8
Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxjb25z
dCBUJnYxLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsMj46OnQgdjIpIGNvbnN0CiAgewog
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEYqPih0aGlzKS0+Y2FsbCh2MCx2MSx2Mik7CiAg
fQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9l
eChfdDAgdjAsY29uc3QgVCZ2MSxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYy
LHR5cGVuYW1lIHg8UyxULEwsND46OnQgdjMpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4o
dGhpcykueCh2MCx2MSx2Mix2Myk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0
eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsY29uc3QgVCZ2MSxjb25zdCBhbnk8TD4m
LHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyLHR5cGVuYW1lIHg8UyxULEwsND46OnQgdjMsdHlwZW5h
bWUgeDxTLFQsTCw1Pjo6dCB2NCkgY29uc3QKICB7CiAgICByZXR1cm4gbXg8VCxMPih0aGlzKS54
KHYwLHYxLHYyLHYzLHY0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVu
YW1lIHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxjb25zdCBUJnYxLGNvbnN0IGFueTxMPiYsdHlw
ZW5hbWUgYjxTLFQsMj46OnQgdjIsdHlwZW5hbWUgeDxTLFQsTCw0Pjo6dCB2Myx0eXBlbmFtZSB4
PFMsVCxMLDU+Ojp0IHY0LHR5cGVuYW1lIHg8UyxULEwsNj46OnQgdjUpIGNvbnN0CiAgewogICAg
cmV0dXJuIG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myx2NCx2NSk7CiAgfQogIHRlbXBsYXRl
PGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsY29u
c3QgVCZ2MSxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyLHR5cGVuYW1lIHg8
UyxULEwsND46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCx0eXBlbmFtZSB4PFMsVCxM
LDY+Ojp0IHY1LHR5cGVuYW1lIHg8UyxULEwsNz46OnQgdjYpIGNvbnN0CiAgewogICAgcmV0dXJu
IG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myx2NCx2NSx2Nik7CiAgfQogIHRlbXBsYXRlPGNs
YXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsY29uc3Qg
VCZ2MSxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyLGNvbnN0IGFueTxMPiYs
dHlwZW5hbWUgYjxTLFQsMz46OnQgdjMsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMsVCw0Pjo6
dCB2NCxjb25zdCBhbnk8TD4mKSBjb25zdAogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIsdjMsdjQpOwogIH0KfTsKCnRlbXBsYXRlPGNsYXNz
IEYsY2xhc3MgUz4Kc3RydWN0IGZpPEYsUyxhbnlUJiwyPgp7CiAgdHlwZWRlZiB0eXBlbmFtZSBm
YTxTLDA+Ojp0IF90MDsKICB0eXBlZGVmIHR5cGVuYW1lIGZhPFMsMT46OnQgX3QxOwogIHRlbXBs
YXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG5vX2NhbGwoX3QwLF90MSxhbnk8TD4m
Li4uKSBjb25zdAogIHsKICAgIHRocm93IGJhZF9mdW5jdGlvbl9jYWxsKCk7CiAgfQogIHRlbXBs
YXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLF90MSB2
MSxhbnk8TD4mdjIpIGNvbnN0CiAgewogICAgY2E8RiwzPigpOwogICAgdHlwZW5hbWUgdTxGLEw+
Ojp0IHQodjAsdjEsdjIpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBsYXRl
PGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLF90MSB2MSxh
bnk8TD4mdjIsdHlwZW5hbWUgYTxTLEwsMz46OnQgdjMpIGNvbnN0CiAgewogICAgY2E8Riw0Pigp
OwogICAgdHlwZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMpOwogICAgcmV0dXJuIGZjPEw+
KHRoaXMsdCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9w
ZXJhdG9yKCkoX3QwIHYwLF90MSB2MSxhbnk8TD4mdjIsdHlwZW5hbWUgYTxTLEwsMz46OnQgdjMs
dHlwZW5hbWUgYTxTLEwsND46OnQgdjQpIGNvbnN0CiAgewogICAgY2E8Riw1PigpOwogICAgdHlw
ZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMsdjQpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMs
dCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQg
Y2FsbF9leChfdDAgdjAsX3QxIHYxLFQmdjIsY29uc3QgYW55PEw+JikgY29uc3QKICB7CiAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYyKTsKICB9CiAg
dGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KF90
MCB2MCxfdDEgdjEsVCZ2Mixjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzKSBj
b25zdAogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAs
djEsdjIsdjMpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxG
LEw+Ojp0IGNhbGxfZXgoX3QwIHYwLF90MSB2MSxUJnYyLGFueTxMPiYsdHlwZW5hbWUgYjxTLFQs
Mz46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCkgY29uc3QKICB7CiAgICByZXR1cm4g
bXg8VCxMPih0aGlzKS54KHYwLHYxLHYyLHYzLHY0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxj
bGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxfdDEgdjEsVCZ2Mixh
bnk8TD4mLHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEwsNT46OnQgdjQs
dHlwZW5hbWUgeDxTLFQsTCw2Pjo6dCB2NSkgY29uc3QKICB7CiAgICByZXR1cm4gbXg8VCxMPih0
aGlzKS54KHYwLHYxLHYyLHYzLHY0LHY1KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBM
PgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxfdDEgdjEsVCZ2Mixjb25zdCBh
bnk8TD4mLHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxT
LFQsND46OnQgdjQsY29uc3QgYW55PEw+JikgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYyLHYzLHY0KTsKICB9Cn07Cgp0ZW1wbGF0
ZTxjbGFzcyBGLGNsYXNzIFM+CnN0cnVjdCBmaTxGLFMsY29uc3QgYW55VCYsMj4KewogIHR5cGVk
ZWYgdHlwZW5hbWUgZmE8UywwPjo6dCBfdDA7CiAgdHlwZWRlZiB0eXBlbmFtZSBmYTxTLDE+Ojp0
IF90MTsKICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBub19jYWxsKF90
MCxfdDEsY29uc3QgYW55PEw+Ji4uLikgY29uc3QKICB7CiAgICB0aHJvdyBiYWRfZnVuY3Rpb25f
Y2FsbCgpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVy
YXRvcigpKF90MCB2MCxfdDEgdjEsY29uc3QgYW55PEw+JnYpIGNvbnN0CiAgewogICAgY2E8Riwz
PigpOwogICAgdHlwZW5hbWUgYTxTLEwsMj46OnQgdjIodik7CiAgICB0eXBlbmFtZSB1PEYsTD46
OnQgdCh2MCx2MSx2Mik7CiAgICByZXR1cm4gZmM8TD4odGhpcyx0KTsKICB9CiAgdGVtcGxhdGU8
Y2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShfdDAgdjAsX3QxIHYxLGNv
bnN0IGFueTxMPiZ2LHR5cGVuYW1lIGE8UyxMLDM+Ojp0IHYzKSBjb25zdAogIHsKICAgIGNhPEYs
ND4oKTsKICAgIHR5cGVuYW1lIGE8UyxMLDI+Ojp0IHYyKHYpOwogICAgdHlwZW5hbWUgdTxGLEw+
Ojp0IHQodjAsdjEsdjIsdjMpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBs
YXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLF90MSB2
MSxjb25zdCBhbnk8TD4mdix0eXBlbmFtZSBhPFMsTCwzPjo6dCB2Myx0eXBlbmFtZSBhPFMsTCw0
Pjo6dCB2NCkgY29uc3QKICB7CiAgICBjYTxGLDU+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwyPjo6
dCB2Mih2KTsKICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYyLHYzLHY0KTsKICAgIHJl
dHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlw
ZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgoX3QwIHYwLF90MSB2MSxjb25zdCBUJnYyLGNvbnN0IGFu
eTxMPiYpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEYqPih0aGlzKS0+
Y2FsbCh2MCx2MSx2Mik7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFt
ZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3QxIHYxLGNvbnN0IFQmdjIsY29uc3QgYW55PEw+
Jix0eXBlbmFtZSBiPFMsVCwzPjo6dCB2MykgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYyLHYzKTsKICB9CiAgdGVtcGxhdGU8Y2xh
c3MgVCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxfdDEgdjEs
Y29uc3QgVCZ2Mixjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzLHR5cGVuYW1l
IHg8UyxULEwsNT46OnQgdjQpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcykueCh2
MCx2MSx2Mix2Myx2NCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFt
ZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3QxIHYxLGNvbnN0IFQmdjIsY29uc3QgYW55PEw+
Jix0eXBlbmFtZSBiPFMsVCwzPjo6dCB2Myx0eXBlbmFtZSB4PFMsVCxMLDU+Ojp0IHY0LHR5cGVu
YW1lIHg8UyxULEwsNj46OnQgdjUpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcyku
eCh2MCx2MSx2Mix2Myx2NCx2NSk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0
eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3QxIHYxLGNvbnN0IFQmdjIsY29uc3Qg
YW55PEw+Jix0eXBlbmFtZSBiPFMsVCwzPjo6dCB2Myxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8
UyxULDQ+Ojp0IHY0LGNvbnN0IGFueTxMPiYpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IEYqPih0aGlzKS0+Y2FsbCh2MCx2MSx2Mix2Myx2NCk7CiAgfQp9OwoKdGVtcGxh
dGU8Y2xhc3MgRixjbGFzcyBTPgpzdHJ1Y3QgZmk8RixTLGFueVQmLDM+CnsKICB0eXBlZGVmIHR5
cGVuYW1lIGZhPFMsMD46OnQgX3QwOwogIHR5cGVkZWYgdHlwZW5hbWUgZmE8UywxPjo6dCBfdDE7
CiAgdHlwZWRlZiB0eXBlbmFtZSBmYTxTLDI+Ojp0IF90MjsKICB0ZW1wbGF0ZTxjbGFzcyBMPgog
IHR5cGVuYW1lIHI8RixMPjo6dCBub19jYWxsKF90MCxfdDEsX3QyLGFueTxMPiYuLi4pIGNvbnN0
CiAgewogICAgdGhyb3cgYmFkX2Z1bmN0aW9uX2NhbGwoKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3Mg
TD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShfdDAgdjAsX3QxIHYxLF90MiB2Mixh
bnk8TD4mdjMpIGNvbnN0CiAgewogICAgY2E8Riw0PigpOwogICAgdHlwZW5hbWUgdTxGLEw+Ojp0
IHQodjAsdjEsdjIsdjMpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBsYXRl
PGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLF90MSB2MSxf
dDIgdjIsYW55PEw+JnYzLHR5cGVuYW1lIGE8UyxMLDQ+Ojp0IHY0KSBjb25zdAogIHsKICAgIGNh
PEYsNT4oKTsKICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYyLHYzLHY0KTsKICAgIHJl
dHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlw
ZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgoX3QwIHYwLF90MSB2MSxfdDIgdjIsVCZ2Myxjb25zdCBh
bnk8TD4mKSBjb25zdAogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGKj4odGhpcykt
PmNhbGwodjAsdjEsdjIsdjMpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlw
ZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgoX3QwIHYwLF90MSB2MSxfdDIgdjIsVCZ2Myxjb25zdCBh
bnk8TD4mLHR5cGVuYW1lIGI8UyxULDQ+Ojp0IHY0KSBjb25zdAogIHsKICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIsdjMsdjQpOwogIH0KICB0ZW1w
bGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgoX3QwIHYw
LF90MSB2MSxfdDIgdjIsVCZ2Myxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDQ+Ojp0IHY0
LGNvbnN0IGFueTxMPiYpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEYq
Pih0aGlzKS0+Y2FsbCh2MCx2MSx2Mix2Myx2NCk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgRixj
bGFzcyBTPgpzdHJ1Y3QgZmk8RixTLGNvbnN0IGFueVQmLDM+CnsKICB0eXBlZGVmIHR5cGVuYW1l
IGZhPFMsMD46OnQgX3QwOwogIHR5cGVkZWYgdHlwZW5hbWUgZmE8UywxPjo6dCBfdDE7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBmYTxTLDI+Ojp0IF90MjsKICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVu
YW1lIHI8RixMPjo6dCBub19jYWxsKF90MCxfdDEsX3QyLGNvbnN0IGFueTxMPiYuLi4pIGNvbnN0
CiAgewogICAgdGhyb3cgYmFkX2Z1bmN0aW9uX2NhbGwoKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3Mg
TD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShfdDAgdjAsX3QxIHYxLF90MiB2Mixj
b25zdCBhbnk8TD4mdikgY29uc3QKICB7CiAgICBjYTxGLDQ+KCk7CiAgICB0eXBlbmFtZSBhPFMs
TCwzPjo6dCB2Myh2KTsKICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYyLHYzKTsKICAg
IHJldHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1l
IHI8RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxfdDEgdjEsX3QyIHYyLGNvbnN0IGFueTxMPiZ2
LHR5cGVuYW1lIGE8UyxMLDQ+Ojp0IHY0KSBjb25zdAogIHsKICAgIGNhPEYsNT4oKTsKICAgIHR5
cGVuYW1lIGE8UyxMLDM+Ojp0IHYzKHYpOwogICAgdHlwZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEs
djIsdjMsdjQpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBsYXRlPGNsYXNz
IFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3QxIHYxLF90
MiB2Mixjb25zdCBUJnYzLGNvbnN0IGFueTxMPiYpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IEYqPih0aGlzKS0+Y2FsbCh2MCx2MSx2Mix2Myk7CiAgfQogIHRlbXBsYXRl
PGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3Qx
IHYxLF90MiB2Mixjb25zdCBUJnYzLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsND46OnQg
djQpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEYqPih0aGlzKS0+Y2Fs
bCh2MCx2MSx2Mix2Myx2NCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBl
bmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3QxIHYxLF90MiB2Mixjb25zdCBUJnYzLGNv
bnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsND46OnQgdjQsY29uc3QgYW55PEw+JikgY29uc3QK
ICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYy
LHYzLHY0KTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBGLGNsYXNzIFM+CnN0cnVjdCBmaTxGLFMs
YW55VCYsND4KewogIHR5cGVkZWYgdHlwZW5hbWUgZmE8UywwPjo6dCBfdDA7CiAgdHlwZWRlZiB0
eXBlbmFtZSBmYTxTLDE+Ojp0IF90MTsKICB0eXBlZGVmIHR5cGVuYW1lIGZhPFMsMj46OnQgX3Qy
OwogIHR5cGVkZWYgdHlwZW5hbWUgZmE8UywzPjo6dCBfdDM7CiAgdGVtcGxhdGU8Y2xhc3MgTD4K
ICB0eXBlbmFtZSByPEYsTD46OnQgbm9fY2FsbChfdDAsX3QxLF90MixfdDMsYW55PEw+JikgY29u
c3QKICB7CiAgICB0aHJvdyBiYWRfZnVuY3Rpb25fY2FsbCgpOwogIH0KICB0ZW1wbGF0ZTxjbGFz
cyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxfdDEgdjEsX3QyIHYy
LF90MyB2Myxhbnk8TD4mdjQpIGNvbnN0CiAgewogICAgY2E8Riw1PigpOwogICAgdHlwZW5hbWUg
dTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMsdjQpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAg
fQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9l
eChfdDAgdjAsX3QxIHYxLF90MiB2MixfdDMgdjMsVCZ2NCxjb25zdCBhbnk8TD4mKSBjb25zdAog
IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIs
djMsdjQpOwogIH0KfTsKCnRlbXBsYXRlPGNsYXNzIEYsY2xhc3MgUz4Kc3RydWN0IGZpPEYsUyxj
b25zdCBhbnlUJiw0Pgp7CiAgdHlwZWRlZiB0eXBlbmFtZSBmYTxTLDA+Ojp0IF90MDsKICB0eXBl
ZGVmIHR5cGVuYW1lIGZhPFMsMT46OnQgX3QxOwogIHR5cGVkZWYgdHlwZW5hbWUgZmE8UywyPjo6
dCBfdDI7CiAgdHlwZWRlZiB0eXBlbmFtZSBmYTxTLDM+Ojp0IF90MzsKICB0ZW1wbGF0ZTxjbGFz
cyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBub19jYWxsKF90MCxfdDEsX3QyLF90Myxjb25zdCBh
bnk8TD4mKSBjb25zdAogIHsKICAgIHRocm93IGJhZF9mdW5jdGlvbl9jYWxsKCk7CiAgfQogIHRl
bXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLF90
MSB2MSxfdDIgdjIsX3QzIHYzLGNvbnN0IGFueTxMPiZ2KSBjb25zdAogIHsKICAgIGNhPEYsNT4o
KTsKICAgIHR5cGVuYW1lIGE8UyxMLDQ+Ojp0IHY0KHYpOwogICAgdHlwZW5hbWUgdTxGLEw+Ojp0
IHQodjAsdjEsdjIsdjMsdjQpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBs
YXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAs
X3QxIHYxLF90MiB2MixfdDMgdjMsY29uc3QgVCZ2NCxjb25zdCBhbnk8TD4mKSBjb25zdAogIHsK
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIsdjMs
djQpOwogIH0KfTsKIyAxMDE2ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5o
cHAiIDIKCn0KCgp0ZW1wbGF0ZTxjbGFzcyBGLCBjbGFzcyBTPgpzdHJ1Y3Qgc2VsZWN0X2Z1bmN0
aW9uX2ltcGwKewogIHR5cGVkZWYgdHlwZW5hbWUgZmlyc3RfYW55VDxTPjo6dHlwZSBmaXJzdF9h
bnlUX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBhbnlUX3JlZjxmaXJzdF9hbnlUX3R5cGU+Ojp0
eXBlIGZpcnN0X2FueVRfcmVmOwogIHR5cGVkZWYgdHlwZW5hbWUgZmlyc3RfYW55VDxTPjo6cG9z
aXRpb24gZmlyc3RfYW55VDsKICB0eXBlZGVmIGdlbmVyYXRlZDo6Zmk8RiwgUywgZmlyc3RfYW55
VF9yZWYsIGZpcnN0X2FueVQ6OnZhbHVlPiB0eXBlOwp9OwoKfQoKCnRlbXBsYXRlPGNsYXNzIEZ1
bmN0aW9uLCBjbGFzcyBTaWduYXR1cmU+CnN0cnVjdCBmdW5jdGlvbiA6IGF1eDo6c2VsZWN0X2Z1
bmN0aW9uX2ltcGw8RnVuY3Rpb24sU2lnbmF0dXJlPjo6dHlwZQp7CiAgdHlwZWRlZiBTaWduYXR1
cmUgc2lnbmF0dXJlOwogIHN0YXRpYyBjb25zdCA6OnN0ZDo6c2l6ZV90IGFyaXR5ID0gYXV4Ojpm
dW5jdGlvbl9hcmd1bWVudHM8U2lnbmF0dXJlPjo6YXJpdHk7CgoKCgoKfTsKCn0gfQojIDIgImlv
X2FueS5jcHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9sZXhpY2FsX2Nhc3Qu
aHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2xleGljYWxfY2FzdC5ocHAi
CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbGltaXRzLmhwcCIgMQojIDE5ICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9saW1pdHMuaHBwIgojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2xpbWl0cyIgMSAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xp
bWl0cyIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2NwdV9saW1pdHMuaCIgMSAzCiMgNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2xpbWl0cyIgMiAzCiMgODg3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMK
bmFtZXNwYWNlIHN0ZAp7CiAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZQogIHsKICAgIHJvdW5kX2lu
ZGV0ZXJtaW5hdGUgPSAtMSwKICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgIHJvdW5kX3Rv
X25lYXJlc3QgPSAxLAogICAgcm91bmRfdG93YXJkX2luZmluaXR5ID0gMiwKICAgIHJvdW5kX3Rv
d2FyZF9uZWdfaW5maW5pdHkgPSAzCiAgfTsKCiAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUKICB7
CiAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgZGVub3JtX2Fic2VudCA9IDAsCiAg
ICBkZW5vcm1fcHJlc2VudCA9IDEKICB9OwoKCgoKICBzdHJ1Y3QgX19udW1lcmljX2xpbWl0c19i
YXNlCiAgewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCiAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
czEwID0gMDsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfZXhhY3QgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAwOwoKICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50MTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwog
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp
ZXRfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgc3RhdGljIGNv
bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzIDog
cHVibGljIF9fbnVtZXJpY19saW1pdHNfYmFzZQogICAgewogICAgICBzdGF0aWMgX1RwIG1pbigp
IHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1Rw
IG1heCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0
aWMgX1RwIGVwc2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0K
ICAgICAgc3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFOKCkgdGhy
b3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgc2ln
bmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAg
ICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9U
cD4oMCk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRz
PGJvb2w+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
ZTsKCiAgICAgIHN0YXRpYyBib29sIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7
IH0KCiAgICAgIHN0YXRpYyBib29sIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gdHJ1ZTsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0czEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk
aXggPSAyOwogICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0
YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAg
ICBzdGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgIHN0YXRpYyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKCgoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdHJhcHMgPSB0cnVlCiAgICAgICAgICAgICAgIHx8IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCiAg
dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFy
IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIpKC0xMjcgLSAxKTsgfQogICAgICBz
dGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFyKTEyNzsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0czEwID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
CiAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIo
KTsgfQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gY2hhcigpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg
Y2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0
YXRpYyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAg
ICAgIHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNo
YXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEwNzEgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj
X2xpbWl0czxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gKC0xMjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMg
c2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBpbmZp
bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDAp
OyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKIyAxMTI4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1w
bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4KICAgIHsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDEyNyAqIDIg
KyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4OwogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vy
cm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g
ZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9
OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx3Y2hhcl90Pgog
ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh3Y2hhcl90KSgt
MjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuICh3Y2hhcl90KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB3
Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj
IHdjaGFyX3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0
eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IGluZmluaXR5KCkg
dGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3Qg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3Rh
dGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJf
dCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxz
aG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl
OwoKICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC0zMjc2
NyAtIDEpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDMyNzY3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE1OwogICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg
c3RhdGljIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9
CiAgICAgIHN0YXRpYyBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNo
b3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyOTggIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoMzI3NjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzID0gMTY7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
PSA0OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw
OyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh
dGljIHVuc2lnbmVkIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0K
ICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91
bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAg
dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGludD4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGludCBt
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChpbnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAg
ICAgIHN0YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KTIxNDc0ODM2
NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg
aW50IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDAp
OyB9CiAgICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMg
aW50IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
MCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk
X3plcm87CiAgICB9OwojIDE0MTAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIg
MwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+CiAg
ICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAg
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
KHVuc2lnbmVkKSgyMTQ3NDgzNjQ3TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gMzI7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw
OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw
OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQg
aW50IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50
IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf
dG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj
X2xpbWl0czxsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl
ZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
ICgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgbG9uZyBtYXgoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGVwc2ls
b24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgcm91bmRf
ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g
PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0
YXRpYyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNTIyICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n
IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDIxNDc0ODM2NDdMICogMlUgKyAxKTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp
bml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h
YnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoK
ICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7
IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv
dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv
dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgog
IHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGxvbmc+CiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3
NzU4MDdMTCAtIDEpOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gNjM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBs
b25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0
aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y
bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmlu
aXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9
CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2ln
bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k
ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k
X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE2MzQgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVj
dCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
b25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoOTIyMzM3MjAz
Njg1NDc3NTgwN0xMICogMlVMTCArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx
MCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
bG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3JtX21p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGlt
aXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAx
LjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNjsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGZsb2F0IGVw
c2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBlLTA3RjsgfQogICAgICBz
dGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEY7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEyNTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg
PSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGZsb2F0
IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBm
bG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3Rh
dGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0K
ICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAu
MEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93
YXJkX3plcm87CiAgICB9OwojIDE3NjUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xpbWl0
cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+CiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIw
MTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGRvdWJs
ZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2
OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDEuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAyMTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zMDc7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0
eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAg
ICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIGRlbm9ybV9t
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf
c3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg
fTsKIyAxODQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+CiAgICB7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25n
IGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2
MjZlLTQ5MzJMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g
MTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg
IHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjA4
NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHJvdW5k
X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjBMOyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQxMCA9IC00OTMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9
IDE2Mzg0OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gNDkzMjsKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19zaWduYWxpbmdfTmFOID0KICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAgICAgICAgICAgZGVu
b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0KICAg
ICAgICAgICAgICAgIGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmluaXR5KCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBx
dWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxv
bmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0K
ICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDAuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAg
ICAgICByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTkyNCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvbGltaXRzIiAzCn0KIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbGlt
aXRzLmhwcCIgMgojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9sZXhpY2FsX2Nhc3Qu
aHBwIiAyCgoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9zc3RyZWFtIiAxIDMK
IyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3N0cmVhbSIgMwoKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvaXN0cmVhbSIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pb3Mi
IDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pb3MiIDMKCgoKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQ0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAx
IDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jKytsb2NhbGUuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Nsb2NhbGUi
IDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAzCgojIDEgIi91
c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwoj
IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxl
LmgiIDMKZW51bQp7CiAgX19MQ19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwKICBfX0xD
X1RJTUUgPSAyLAogIF9fTENfQ09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQsCiAgX19M
Q19NRVNTQUdFUyA9IDUsCiAgX19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAogIF9fTENf
TkFNRSA9IDgsCiAgX19MQ19BRERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEwLAogIF9f
TENfTUVBU1VSRU1FTlQgPSAxMSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsKIyAzMSAi
L3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDUyICIvdXNyL2luY2x1
ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAg
Y2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAgY2hhciAq
aW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVj
aW1hbF9wb2ludDsKICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBp
bmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIg
aW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIgcF9jc19wcmVjZWRl
czsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNlZGVzOwoKICBjaGFy
IG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25f
cG9zbjsKCgogIGNoYXIgaW50X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X3Bfc2VwX2J5X3Nw
YWNlOwoKICBjaGFyIGludF9uX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9uX3NlcF9ieV9zcGFj
ZTsKCgoKCgoKICBjaGFyIGludF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9uX3NpZ25fcG9zbjsK
IyAxMTkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwp9OwoKCgpleHRlcm4gY2hhciAqc2V0bG9j
YWxlIChpbnQgX19jYXRlZ29yeSwgY29uc3QgY2hhciAqX19sb2NhbGUpIDsKCgpleHRlcm4gc3Ry
dWN0IGxjb252ICpsb2NhbGVjb252ICh2b2lkKSA7CiMgMTQ5ICIvdXNyL2luY2x1ZGUvbG9jYWxl
LmgiIDMKZXh0ZXJuIF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ss
IGNvbnN0IGNoYXIgKl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
b2NhbGVfdCBfX2Jhc2UpIDsKCgoKZXh0ZXJuIF9fbG9jYWxlX3QgX19kdXBsb2NhbGUgKF9fbG9j
YWxlX3QgX19kYXRhc2V0KSA7CgoKCmV4dGVybiB2b2lkIF9fZnJlZWxvY2FsZSAoX19sb2NhbGVf
dCBfX2RhdGFzZXQpIDsKCgp9CiMgNTAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Nsb2Nh
bGUiIDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpz
ZXRsb2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgMzcgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91
c3IvaW5jbHVkZS9sYW5naW5mby5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9u
bF90eXBlcy5oIiAzCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgdm9pZCAqbmxfY2F0ZDsKCgp0eXBl
ZGVmIGludCBubF9pdGVtOwoKCmV4dGVybiBubF9jYXRkIGNhdG9wZW4gKGNvbnN0IGNoYXIgKl9f
Y2F0X25hbWUsIGludCBfX2ZsYWcpIDsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMgKG5sX2NhdGQg
X19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKl9fc3RyaW5nKSA7CgoKZXh0ZXJuIGludCBjYXRjbG9zZSAobmxfY2F0ZCBf
X2NhdGFsb2cpIDsKCn0KIyAyNSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sYW5naW5m
by5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMK
ZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwKCiAgQUJE
QVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwKCiAg
QUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwKCiAgREFZ
XzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoKICBBQk1P
Tl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBB
Qk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEy
LAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05fNSwKCiAg
TU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAgTU9OXzEx
LAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgogIERfRk1U
LAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwKCgoKICBF
UkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9GTVQsCgoK
ICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMsCgogIF9O
TF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9XQUJEQVlf
NCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywKCgogIF9O
TF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQsCiAgX05M
X1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9OXzEsCiAg
X05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05MX1dBQk1P
Tl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84LAogIF9O
TF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05MX1dBQk1P
Tl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAogIF9OTF9X
TU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAgX05MX1dN
T05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAogIF9OTF9X
TU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1RfRk1ULAog
IF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9OTF9XRVJB
X1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9XRVJBX0Rf
VF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAgX05MX1RJ
TUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1FX0ZJUlNU
X1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxfRElSRUNU
SU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RBVEVfRk1U
LAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xM
QVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFU
RV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1C
LAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxf
Q09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBf
TkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRF
X0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hB
U0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1C
X0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFX
QywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoKCiAgX05M
X0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZUEVf
VE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxfQ1RZ
UEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBfTkxfQ1RZ
UEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZUEVf
Q0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lEVEgsCiAg
X05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBDT0RFU0VU
ID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwKICBfTkxf
Q1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NUWVBFX01B
UF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJ
VFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMl9N
QiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCiAg
X05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAogIF9OTF9D
VFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxfQ1RZUEVf
SU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NUWVBFX0lO
RElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lU
UzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X1dD
LAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywKICBf
TkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAgX05MX0NU
WVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9DVFlQRV9P
VVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VURElH
SVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNV9N
QiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCiAg
X05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAogIF9OTF9D
VFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxfQ1RZUEVf
T1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBFX09VVERJ
R0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDZf
V0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dDLAog
IF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFLAog
IF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9U
QkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9f
VEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9OTF9DVFlQ
RV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRV9M
RU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEs
CiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywKICBfTkxf
Q1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9DVFlQRV9F
WFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VYVFJBX01B
UF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLAog
IF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwKICBfTkxf
Q1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05MX05VTV9M
Q19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZKSA8PCAx
NikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxfUE9J
TlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9HUk9VUElORywKCgoKICBf
X1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNfRElH
SVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgogIF9fUF9T
RVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllfU1BBQ0Us
CgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFS
WV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NFUF9CWV9T
UEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZX1NQQUNF
LAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoKCgogIF9O
TF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVO
Q1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9OTF9NT05F
VEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAog
IF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19OX0NT
X1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVU
QVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9C
WV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9OTF9NT05F
VEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BP
U04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lO
VF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwKICBfTkxf
TU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9UTywKICBf
TkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywK
ICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BP
SU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05FVEFSWV9D
T0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgo
X19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9Q
T0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAs
CgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxf
TlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAgX05MX05V
TV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAo
MCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTUVT
U0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hU
ID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05M
X1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFNRV9GTVQg
PSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4sCiAgX05M
X05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1FX01JU1Ms
CiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1fTENfTkFN
RSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwg
KDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9Q
T1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIz
LAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLAog
IF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUsCiAgX05M
X0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FERFJFU1Nf
TEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgog
IF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwg
KDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NF
TEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9DT0RFU0VU
LAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQg
PSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJFTUVOVF9D
T0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNBVElPTl9U
SVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05MX0lERU5U
SUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBfTkxfSURF
TlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAgX05MX0lE
RU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9JREVOVElG
SUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAogIF9OTF9J
REVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElDQVRJT04s
CiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklDQVRJT05f
UkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJQ0FUSU9O
X0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1fTENfSURF
TlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8u
aCIgMwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8gKG5sX2l0ZW0gX19pdGVtKSA7CiMgNTg2ICIv
dXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpleHRlcm4gY2hhciAqX19ubF9sYW5naW5mb19sIChu
bF9pdGVtIF9faXRlbSwgX19sb2NhbGVfdCBsKTsKCgp9CiMgMzggIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91
c3IvaW5jbHVkZS9pY29udi5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDMKIyAx
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMwoKCmV4dGVybiAiQyIg
ewoKCnR5cGVkZWYgdm9pZCAqaWNvbnZfdDsKCgoKCmV4dGVybiBpY29udl90IGljb252X29wZW4g
KGNvbnN0IGNoYXIgKl9fdG9jb2RlLCBjb25zdCBjaGFyICpfX2Zyb21jb2RlKQogICAgIDsKCgoK
CmV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgX19jZCwgY2hhciAqKiBfX2luYnVmLAogICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgKiBfX2luYnl0ZXNsZWZ0LAogICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqIF9fb3V0YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBfX291
dGJ5dGVzbGVmdCk7CgoKZXh0ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKSA7Cgp9
CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMv
YysrbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDEgMwojIDMwICIv
dXNyL2luY2x1ZGUvbGliaW50bC5oIiAzCmV4dGVybiAiQyIgewoKCgoKZXh0ZXJuIGNoYXIgKmdl
dHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpIDsKCgoKZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChj
b25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpCiAgICAgOwpleHRl
cm4gY2hhciAqX19kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFy
ICpfX21zZ2lkKQogICAgIDsKCgoKZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoY29uc3QgY2hhciAq
X19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX21zZ2lk
LCBpbnQgX19jYXRlZ29yeSkgOwpleHRlcm4gY2hhciAqX19kY2dldHRleHQgKGNvbnN0IGNoYXIg
Kl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX21z
Z2lkLCBpbnQgX19jYXRlZ29yeSkKICAgICA7CgoKCgpleHRlcm4gY2hhciAqbmdldHRleHQgKGNv
bnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgOwoKCgpleHRlcm4gY2hhciAqZG5n
ZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQxLAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9u
ZyBpbnQgX19uKQogICAgIDsKCgoKZXh0ZXJuIGNoYXIgKmRjbmdldHRleHQgKGNvbnN0IGNoYXIg
Kl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fY2F0ZWdvcnkpCiAgICAgOwoKCgoKCmV4dGVybiBjaGFy
ICp0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpIDsKCgoKZXh0ZXJuIGNoYXIg
KmJpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19kaXJuYW1lKSA7CgoKCmV4dGVybiBjaGFyICpi
aW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fY29kZXNldCkgOwoj
IDExNSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMwp9CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoKCgpuYW1l
c3BhY2Ugc3RkCnsKICB0eXBlZGVmIF9fbG9jYWxlX3QgX19jX2xvY2FsZTsKfQojIDQ3ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvY2N0eXBlIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMjkg
Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiAiQyIgewojIDQ3ICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMwplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwg
OCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAo
MSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAo
KDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykg
PCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0
ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBf
SVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4
KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2
KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgo
MSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwg
OCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAo
OSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8g
KCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgo
MTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA3
NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGlu
dCAqX19jdHlwZV9iOwpleHRlcm4gY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4
dGVybiBjb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIDsKZXh0ZXJuIGludCBpc2FscGhh
IChpbnQpIDsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIDsKZXh0ZXJuIGludCBpc2RpZ2l0IChp
bnQpIDsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIDsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQp
IDsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIDsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIDsK
ZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIDsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIDsKZXh0
ZXJuIGludCBpc3hkaWdpdCAoaW50KSA7CgoKZXh0ZXJuIGludCBpc2JsYW5rIChpbnQpIDsKCgoK
CmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50
IF9fYykgOwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIDsKCgoKZXh0ZXJuIGlu
dCB0b2FzY2lpIChpbnQgX19jKSA7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgOwpleHRl
cm4gaW50IF90b2xvd2VyIChpbnQpIDsKIyAyMjMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4
dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXNh
bHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAoaW50LCBf
X2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgOwpl
eHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lz
Z3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwg
X19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIDsK
ZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19p
c3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXN4ZGlnaXRfbCAoaW50
LCBfX2xvY2FsZV90KSA7CgpleHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3Qp
IDsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIDsK
CgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgOwojIDI3
NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDUwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9jY3R5cGUiIDIgMwojIDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUi
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsK
ICB1c2luZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsK
ICB1c2luZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsK
ICB1c2luZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7
CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ5ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lk
CiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJm
bG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29u
c3QgY2hhciogX19zKTsKfQojIDUxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv
Y2FsZWZ3ZC5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgY2xhc3MgbG9jYWxlOwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJU
LCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IGJvb2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJULCBjb25zdCBs
b2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg
IGlzdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEo
X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
aW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJULCBj
b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCwgY29uc3QgbG9j
YWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dl
cihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBjbGFzcyBj
dHlwZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xhc3MgY29k
ZWN2dF9iYXNlOwogIGNsYXNzIF9fZW5jX3RyYWl0czsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50
ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2Rl
Y3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwoK
ICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBf
U3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9wdXQ7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRv
cjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBj
bGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1l
X3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsKCgog
IGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X2dl
dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3Q7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFz
cyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3MgbG9jYWxlCiAgewog
IHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsKCgogICAgY2xhc3Mg
ZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZyaWVuZCBjbGFzcyBm
YWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj
ZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2Nh
bGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAg
ICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAgc3RhdGljIGNvbnN0
IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0gMUwg
PDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwgPDwgMTsKICAgIHN0
YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0YXRpYyBjb25zdCBj
YXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtb25ldGFy
eSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAxTCA8PCA1
OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xsYXRlIHwgY3R5cGUgfCBtb25l
dGFyeSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmlj
IHwgdGltZSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAgICBsb2NhbGUo
Y29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUo
Y29uc3QgY2hhciogX19zKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0
IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9f
YmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0Zh
Y2V0KiBfX2YpOwoKICAgIH5sb2NhbGUoKSB0aHJvdygpOwoKICAgIGNvbnN0IGxvY2FsZSYKICAg
IG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUKICAgICAgY29tYmluZShjb25zdCBsb2NhbGUm
IF9fb3RoZXIpIGNvbnN0OwoKCiAgICBzdHJpbmcKICAgIG5hbWUoKSBjb25zdDsKCiAgICBib29s
CiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCk7Cgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25z
dCB0aHJvdyAoKQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIpKTsgfQoK
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAgc3RhdGlj
IGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25zdCBsb2Nh
bGUmCiAgICBjbGFzc2ljKCk7CgogIHByaXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7CgoKICAg
IHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19nbG9iYWw7
CgogICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fY2F0ZWdvcmllcyA9IDY7CgogICAgZXhw
bGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3RhdGljIGlubGluZSB2b2lk
CiAgICBfU19pbml0aWFsaXplKCkKICAgIHsKICAgICAgaWYgKCFfU19jbGFzc2ljKQogICAgICAg
IGNsYXNzaWMoKTsKICAgIH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkKICAgIF9TX25vcm1hbGl6ZV9j
YXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxl
JiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKICB9OwoKCgog
IGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAgcHVibGljOgoKICAgIGZyaWVuZCBjbGFzcyBsb2Nh
bGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25z
dCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBi
b29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKICBwcml2YXRlOgoK
ICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwogICAgZmFjZXQqKiBfTV9mYWNldHM7CiAg
ICBzaXplX3QgX01fZmFjZXRzX3NpemU7CiAgICBjb25zdCBjaGFyKiBfTV9uYW1lc1tfU19udW1f
Y2F0ZWdvcmllc107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY3R5
cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9udW1lcmljW107
CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY29sbGF0ZVtdOwogICAg
c3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX3RpbWVbXTsKICAgIHN0YXRpYyBj
b25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtdOwogICAgc3RhdGljIGNvbnN0
IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107CiAgICBzdGF0aWMgY29uc3QgbG9j
YWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3JpZXNbXTsKCiAgICBpbmxpbmUg
dm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsgX19hdG9taWNfYWRkKCZf
TV9yZWZlcmVuY2VzLCAxKTsgfQoKICAgIGlubGluZSB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJl
bmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZl
cmVuY2VzLCAtMSkgPT0gMSkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBk
ZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7IH0KICAgICAg
ICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXplX3QpOwogICAgX0ltcGwoY29u
c3QgY2hhciosIHNpemVfdCk7CiAgICBfSW1wbChmYWNldCoqLCBzaXplX3QsIGJvb2wpOwoKICAg
fl9JbXBsKCkgdGhyb3coKTsKCiAgICBfSW1wbChjb25zdCBfSW1wbCYpOwoKICAgIHZvaWQKICAg
IG9wZXJhdG9yPShjb25zdCBfSW1wbCYpOwoKICAgIGlubGluZSBib29sCiAgICBfTV9jaGVja19z
YW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0gdHJ1ZTsKICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IF9fcmV0ICYmIGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkKICAgICAg
ICBfX3JldCAmPSAoc3RyY21wKF9NX25hbWVzW2ldLCBfTV9uYW1lc1tpICsgMV0pID09IDApOwog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29y
aWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0
ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCopOwoKICAgIHZvaWQK
ICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKik7Cgog
ICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2NhbGU6OmlkKiwgZmFjZXQqKTsK
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlubGluZSB2b2lkCiAgICAgIF9N
X2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9NX2luc3RhbGxfZmFjZXQoJl9G
YWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog
ICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZikKICAg
IHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsKICAgICAg
X01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mKTsKICAgICAgZm9yIChz
aXplX3QgX19pID0gMDsgX19pIDwgX1NfbnVtX2NhdGVnb3JpZXM7ICsrX19pKQogICAgICAgIF9N
X2ltcGwtPl9NX25hbWVzW19faV0gPSAiKiI7CiAgICB9CgoKICBjbGFzcyBsb2NhbGU6OmZhY2V0
CiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNz
IGxvY2FsZTo6X0ltcGw7CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogIHByb3Rl
Y3RlZDoKCgogICAgc3RhdGljIF9fY19sb2NhbGUgX1NfY19sb2NhbGU7CgogICAgZXhwbGljaXQK
ICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoKICAgIHZpcnR1YWwKICAgIH5m
YWNldCgpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2Fs
ZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jX2xv
Y2FsZSBfX29sZCA9IDApOwoKICAgIHN0YXRpYyBfX2NfbG9jYWxlCiAgICBfU19jbG9uZV9jX2xv
Y2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95
X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CgogIHByaXZhdGU6CiAgICB2b2lkCiAgICBf
TV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJl
bmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYpOwoKICAgIHZvaWQKICAgIG9w
ZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjppZAogIHsKICBw
cml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6
Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3Qg
X0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2Nh
bGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsKCgogICAgc3Rh
dGljIF9BdG9taWNfd29yZCBfU19oaWdod2F0ZXI7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNv
bnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGljOgoKCiAgICBpZCgpOwoKICAg
IGlubGluZSBzaXplX3QKICAgIF9NX2lkKCkgY29uc3QKICAgIHsKICAgICAgaWYgKCFfTV9pbmRl
eCkKICAgICAgICBfTV9pbmRleCA9IDEgKyBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9TX2hpZ2h3YXRl
ciwgMSk7CiAgICAgIHJldHVybiBfTV9pbmRleCAtIDE7CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxv
Y2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBo
YXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsKfQojIDQ5ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2JpdHMvaW9zX2Jhc2UuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvaW9zX2Jhc2UuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZs
YWdzIHsgX01faW9zX2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0Zt
dGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikK
ICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19j
YXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lv
c19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10Zmxh
Z3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBp
bmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19G
bXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9f
YSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAg
b3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0
dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y
Jj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2Eg
PSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3Nf
Rm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4g
X19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3Mg
X19hKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0K
CgogIGVudW0gX0lvc19PcGVubW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9
OwoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwg
X0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxp
bnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5t
b2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7
IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0
PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19P
cGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUo
c3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp
bmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09w
ZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf
T3Blbm1vZGUKICBvcGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBf
X2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2Rl
CiAgb3BlcmF0b3JePShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsg
cmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJh
dG9yfihfSW9zX09wZW5tb2RlIF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNf
Y2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRl
X2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lv
c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUo
c3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp
bmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0
ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0
YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9y
XihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9z
dGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9Cgog
IGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9z
X0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lv
c19Jb3N0YXRlCiAgb3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9f
YikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog
IG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1
cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4o
X0lvc19Jb3N0YXRlIF9fYSkKICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGlu
dD4oX19hKSk7IH0KCiAgZW51bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAx
TCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBm
YWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAg
dmlydHVhbAogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqCiAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0g
eyBfTV9idWZzaXplID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAg
ICB9OwoKCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxw
aGEpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19kZWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19p
b3NfZmxhZ3M6Ol9TX2ZpeGVkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRm
bGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRl
cm5hbCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7CiAgICBzdGF0aWMgY29u
c3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKICAgIHN0
YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfb2N0KTsK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf
U19yaWdodCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZtdGZsYWdz
KF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBz
aG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CiAgICBzdGF0aWMg
Y29uc3QgZm10ZmxhZ3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dw
b2ludCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9z
X2ZsYWdzOjpfU19zaG93cG9zKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tpcHdzKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyB1bml0YnVmID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBl
cmNhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVzdGZpZWxkID0gZm10ZmxhZ3Mo
X19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBi
YXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZpZWxkKTsKICAgIHN0YXRp
YyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zs
b2F0ZmllbGQpOwoKCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOwogICAgc3RhdGlj
IGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfYmFkYml0KTsK
ICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9T
X2VvZmJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lv
c19mbGFnczo6X1NfZmFpbGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0g
aW9zdGF0ZSgwKTsKCgogICAgdHlwZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5tb2RlOwogICAgc3Rh
dGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOwog
ICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19h
dGUpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2Zs
YWdzOjpfU19iaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19p
b3NfZmxhZ3M6Ol9TX2luKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9k
ZShfX2lvc19mbGFnczo6X1Nfb3V0KTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9
IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU190cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lvc19TZWVr
ZGlyIHNlZWtkaXI7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwog
ICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsKICAgIHN0YXRpYyBjb25z
dCBzZWVrZGlyIGVuZCA9IHNlZWtkaXIoMik7CiMgMjI2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2lvc19iYXNlLmgiIDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2Vf
ZXZlbnQsCiAgICAgIGltYnVlX2V2ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKICAg
IHR5cGVkZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsK
CiAgICB2b2lkCiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQg
X19pbmRleCk7CgogIHByb3RlY3RlZDoKCiAgICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsKICAg
IHN0cmVhbXNpemUgX01fd2lkdGg7CiAgICBmbXRmbGFncyBfTV9mbGFnczsKICAgIGlvc3RhdGUg
X01fZXhjZXB0aW9uOwogICAgaW9zdGF0ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKCiAgICBzdHJ1
Y3QgX0NhbGxiYWNrX2xpc3QKICAgIHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0Owog
ICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsK
ICAgICAgX0F0b21pY193b3JkIF9NX3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9z
X2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4LAogICAgICAgICAgICAgICAg
ICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYikKICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihf
X2ZuKSwgX01faW5kZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAog
ICAgICBfTV9hZGRfcmVmZXJlbmNlKCkgeyBfX2F0b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsg
fQoKCiAgICAgIGludAogICAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX19leGNo
YW5nZV9hbmRfYWRkKCZfTV9yZWZjb3VudCwgLTEpOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tf
bGlzdCogX01fY2FsbGJhY2tzOwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50
IF9fZXYpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7
CgoKICAgIHN0cnVjdCBfV29yZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxv
bmcgX01faXdvcmQ7CiAgICAgIF9Xb3JkcygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsg
fQogICAgfTsKCgogICAgX1dvcmRzIF9NX3dvcmRfemVybzsKCgogICAgc3RhdGljIGNvbnN0IGlu
dCBfU19sb2NhbF93b3JkX3NpemUgPSA4OwogICAgX1dvcmRzIF9NX2xvY2FsX3dvcmRbX1NfbG9j
YWxfd29yZF9zaXplXTsKCgogICAgaW50IF9NX3dvcmRfc2l6ZTsKICAgIF9Xb3JkcyogX01fd29y
ZDsKCiAgICBfV29yZHMmCiAgICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9j
YWxlIF9NX2lvc19sb2NhbGU7CgogICAgdm9pZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoK
CgoKICAgIGNsYXNzIEluaXQKICAgIHsKICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAg
cHVibGljOgogICAgICBJbml0KCk7CiAgICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAog
ICAgICBfU19pb3NfY3JlYXRlKGJvb2wgX19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAg
IF9TX2lvc19kZXN0cm95KCk7CgogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3Nf
YmFzZV9pbml0OwogICAgICBzdGF0aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07
CgoKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFn
czsgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKICAg
IHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgPSBfX2Zt
dGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBz
ZXRmKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxh
Z3M7CiAgICAgIF9NX2ZsYWdzIHw9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0K
CiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3Mg
X19tYXNrKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9m
bGFncyAmPSB+X19tYXNrOwogICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7CiAg
ICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRmKGZtdGZs
YWdzIF9fbWFzaykgeyBfTV9mbGFncyAmPSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0cmVhbXNp
emUKICAgIHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKICAgIGlu
bGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAgICB7CiAg
ICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNpc2lvbiA9
IF9fcHJlYzsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBzdHJlYW1zaXpl
CiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5lIHN0cmVh
bXNpemUKICAgIHdpZHRoKHN0cmVhbXNpemUgX193aWRlKQogICAgewogICAgICBzdHJlYW1zaXpl
IF9fb2xkID0gX01fd2lkdGg7CiAgICAgIF9NX3dpZHRoID0gX193aWRlOwogICAgICByZXR1cm4g
X19vbGQ7CiAgICB9CgogICAgc3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9f
c3luYyA9IHRydWUpOwoKCiAgICBsb2NhbGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2Mp
OwoKICAgIGlubGluZSBsb2NhbGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19s
b2NhbGU7IH0KCgogICAgc3RhdGljIGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAgICBpbmxp
bmUgbG9uZyYKICAgIGl3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9
IChfX2l4IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRb
X19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3Jk
OwogICAgfQoKICAgIGlubGluZSB2b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewogICAg
ICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAg
ICAgICAgICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1
cm4gX193b3JkLl9NX3B3b3JkOwogICAgfQoKCiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVk
OgogICAgaW9zX2Jhc2UoKTsKCgoKICBwcml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jh
c2UmKTsKCiAgICBpb3NfYmFzZSYKICAgIG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9
OwoKCiAgaW5saW5lIGlvc19iYXNlJgogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jh
c2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4g
X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJl
dHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3Bvcyhpb3NfYmFzZSYg
X19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19i
YXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9f
YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3NraXB3cyhpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9f
YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19i
YXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVuaXRidWYoaW9zX2Jhc2UmIF9f
YmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJl
dHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jh
c2U6OmFkanVzdGZpZWxkKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i
YXNlJgogIGxlZnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz
ZTo6bGVmdCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxk
KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaGV4KGlvc19i
YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6
OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog
IG9jdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3Qs
IGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp
b3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7
CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRm
aWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCn0KIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1i
dWYiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKCgoK
CgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxf
Q2hhclQsIF9UcmFpdHM+JiBfaW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zgog
ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0
eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz
X3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190
eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9f
Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFp
dHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNf
dHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgYmFzaWNf
aW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0
cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29z
dHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFt
YnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mg
b3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZyaWVu
ZCBzdHJlYW1zaXplCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlw
ZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmVh
bWJ1Zl90eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVj
dGVkOgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIHNpemVfdCBfTV9idWZf
c2l6ZTsKCgogICAgICBzaXplX3QgX01fYnVmX3NpemVfb3B0OwoKCgogICAgICBib29sIF9NX2J1
Zl91bmlmaWVkOwoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2luX2JlZzsKICAgICAgY2hhcl90
eXBlKiBfTV9pbl9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOwogICAgICBjaGFyX3R5
cGUqIF9NX291dF9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsKICAgICAgY2hhcl90
eXBlKiBfTV9vdXRfZW5kOwoKCiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOwoKCiAg
ICAgIGxvY2FsZSBfTV9idWZfbG9jYWxlOwoKCiAgICAgIGJvb2wgX01fYnVmX2xvY2FsZV9pbml0
OwoKCgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX3BiYWNrX3NpemUgPSAxOwogICAg
ICBjaGFyX3R5cGUgX01fcGJhY2tbX1NfcGJhY2tfc2l6ZV07CiAgICAgIGNoYXJfdHlwZSogX01f
cGJhY2tfY3VyX3NhdmU7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfZW5kX3NhdmU7CiAgICAg
IGJvb2wgX01fcGJhY2tfaW5pdDsKCgogICAgICBmcG9zPF9fc3RhdGVfdHlwZT4gX01fcG9zOwoK
CgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19jcmVhdGUoKQogICAgICB7CiAgICAgICAgaWYg
KCFfTV9wYmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAgICBzaXplX3QgX19kaXN0ID0g
X01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX1Nf
cGJhY2tfc2l6ZSwgX19kaXN0KTsKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJh
Y2ssIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9N
X2luX2N1cjsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAg
ICAgICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsK
ICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoK
CiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAo
X01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9jdXIg
PSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKCgogICAgICAgICAgICBzaXplX3QgX19vZmZfZW5kID0g
MDsKICAgICAgICAgICAgc2l6ZV90IF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7
CiAgICAgICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9i
dWY7CiAgICAgICAgICAgIGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAgICAgICAg
ICAgX19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAgICAgdGhp
cy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICAg
ICAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAgICAgICAg
X01fcGJhY2tfY3VyX3NhdmUgPSAwOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IDA7
CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgfQoK
CgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewog
ICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0g
X19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBf
TV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDIwMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBl
IF9fbikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7CgogICAgICAg
IF9NX291dF9jdXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RpbiAmJiBfTV9idWZfdW5pZmll
ZCkKICAgICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBf
TV9vdXRfZW5kKQogICAgICAgICAgewogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1
cjsKCiAgICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgICBfTV9pbl9lbmQgKz0g
X19uOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICBvZmZfdHlwZQogICAgICBfTV9vdXRf
YnVmX3NpemUoKQogICAgICB7CiAgICAgICAgb2ZmX3R5cGUgX19yZXQgPSAwOwogICAgICAgIGlm
IChfTV9vdXRfY3VyKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX291dF9iZWcgPT0g
X01fYnVmKQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0g
X01fb3V0X2N1cjsKCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IF9NX291
dF9lbmQgLSBfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAg
ICAgfQoKICBwdWJsaWM6CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAg
ICAgIHsKICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNlOwogICAgICAgIF9NX2J1Zl9zaXpl
ID0gMDsKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICAgIF9NX21vZGUgPSBpb3Nf
YmFzZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gZmFsc2U7CiAg
ICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgcHViaW1idWUoY29uc3QgbG9jYWxlICZfX2xvYykK
ICAgICAgewogICAgICAgIGxvY2FsZSBfX3RtcCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgICAgdGhp
cy0+aW1idWUoX19sb2MpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgbG9j
YWxlCiAgICAgIGdldGxvYygpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX01fYnVmX2xvY2Fs
ZV9pbml0KQogICAgICAgICAgcmV0dXJuIF9NX2J1Zl9sb2NhbGU7CiAgICAgICAgZWxzZQogICAg
ICAgICAgcmV0dXJuIGxvY2FsZSgpOwogICAgICB9CgoKICAgICAgX19zdHJlYW1idWZfdHlwZSoK
ICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyBy
ZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVi
c2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19i
YXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21v
ZGUpOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrcG9zKHBvc190eXBlIF9fc3AsCiAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8
IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19zcCwgX19tb2Rl
KTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5zeW5jKCk7IH0K
CgoKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9hdmFpbCgpCiAgICAgIHsKICAgICAgICBzdHJl
YW1zaXplIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5f
ZW5kKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9z
YXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgICAgICAgICAgICBzaXplX3QgX19wYmFja19s
ZW4gPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZl
X2xlbiAtIF9fcGJhY2tfbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgIF9fcmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAg
IH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dtYW55YygpOwogICAg
ICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc25leHRjKCkK
ICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg
ICAgIHJldHVybiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnNidW1wYygpLCBfX2Vv
ZikKICAgICAgICAgICAgICAgID8gX19lb2YgOiB0aGlzLT5zZ2V0YygpKTsKICAgICAgfQoKICAg
ICAgaW50X3R5cGUKICAgICAgc2J1bXBjKCk7CgogICAgICBpbnRfdHlwZQogICAgICBzZ2V0Yygp
CiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYm
IF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRv
X2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQg
PSB0aGlzLT51bmRlcmZsb3coKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAg
IHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQog
ICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CgoKICAgICAgaW50X3R5cGUK
ICAgICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgaW50X3R5cGUKICAgICAgc3Vu
Z2V0YygpOwoKCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpOwoKICAg
ICAgc3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIDogX01fYnVmKDApLCBfTV9idWZf
c2l6ZSgwKSwgX01fYnVmX3NpemVfb3B0KDgxOTIpLAogICAgICBfTV9idWZfdW5pZmllZChmYWxz
ZSksIF9NX2luX2JlZygwKSwgX01faW5fY3VyKDApLCBfTV9pbl9lbmQoMCksCiAgICAgIF9NX291
dF9iZWcoMCksIF9NX291dF9jdXIoMCksIF9NX291dF9lbmQoMCksCiAgICAgIF9NX21vZGUoaW9z
X2Jhc2U6Om9wZW5tb2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2NhbGUoKSksCiAgICAgIF9NX2J1
Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9NX3BiYWNrX2N1cl9zYXZlKDApLCBfTV9wYmFja19lbmRf
c2F2ZSgwKSwKICAgICAgX01fcGJhY2tfaW5pdChmYWxzZSkKICAgICAgeyB9CgoKICAgICAgY2hh
cl90eXBlKgogICAgICBlYmFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAg
Y2hhcl90eXBlKgogICAgICBncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAg
ICBjaGFyX3R5cGUqCiAgICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9Cgog
ICAgICB2b2lkCiAgICAgIGdidW1wKGludCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQoKICAg
ICAgdm9pZAogICAgICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQs
IGNoYXJfdHlwZSogX19nZW5kKQogICAgICB7CiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOwog
ICAgICAgIF9NX2luX2N1ciA9IF9fZ25leHQ7CiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOwog
ICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0
ICYmIF9fZ2VuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOwog
ICAgICB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9N
X291dF9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcHB0cigpIGNvbnN0IHsgcmV0dXJu
IF9NX291dF9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZXBwdHIoKSBjb25zdCB7IHJl
dHVybiBfTV9vdXRfZW5kOyB9CgogICAgICB2b2lkCiAgICAgIHBidW1wKGludCBfX24pIHsgX01f
b3V0X2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJl
ZywgY2hhcl90eXBlKiBfX3BlbmQpCiAgICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0
X2N1ciA9IF9fcGJlZzsKICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICgh
KF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAg
X01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0OwogICAgICB9CgoKCiAgICAgIHZpcnR1
YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAg
X01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBf
X2xvYykKICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBfX2xvYzsKICAgICAgfQoKCiAgICAgIHZp
cnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSxfVHJhaXRzPioKICAgICAgc2V0YnVmKGNo
YXJfdHlwZSosIHN0cmVhbXNpemUpCiAgICAgIHsgcmV0dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1
YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6
Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmly
dHVhbCBwb3NfdHlwZQogICAgICBzZWVrcG9zKHBvc190eXBlLAogICAgICAgICAgICAgIGlvc19i
YXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0
dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5
bmMoKSB7IHJldHVybiAwOyB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dt
YW55YygpIHsgcmV0dXJuIDA7IH0KCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dl
dG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5
cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9
CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVmbG93KCkKICAgICAgewogICAgICAgIGlu
dF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9m
ID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnVuZGVyZmxvdygpLCBfX3JldCk7CiAg
ICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5nID0gX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2lu
X2VuZDsKICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAg
ewogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3Vy
KTsKICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmll
ZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICArK19NX291dF9jdXI7
CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVh
bCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkp
CiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3Ry
ZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
KTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFp
dHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQojIDQ4
NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAzCiAgICBwcml2YXRlOgog
ICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsgfTsKCiAgICAg
IF9fc3RyZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0cmVhbWJ1Zl90eXBl
JikgeyByZXR1cm4gKnRoaXM7IH07CgogICAgfTsKfQoKCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWYudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjb25zdCBzaXplX3QK
ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYmFja19zaXplOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNidW1wYygpCiAgICB7CiAgICAgIGludF90eXBl
IF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAg
ICAgICB7CiAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKih0aGlzLT5ncHRyKCkpOwogICAgICAg
ICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19p
bnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+
dWZsb3coKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBf
X3JldDsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01f
aW5fY3VyOwogICAgICBib29sIF9fdGVzdG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6
ZXEoX19jLCB0aGlzLT5ncHRyKClbLTFdKTsKICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwgX190ZXN0
bmUpCiAgICAgICAgX19yZXQgPSBwYmFja2ZhaWwodHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9f
YykpOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwog
ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7
CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBp
ZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cikKICAgICAgICB7CiAgICAgICAg
ICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19p
bnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9
IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YyhjaGFyX3R5cGUgX19jKQogICAgewogICAg
ICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291dF9idWZfc2l6ZSgpKQogICAgICAgIHsK
ICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEp
OwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBl
Ojp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4c2dldG4oY2hhcl90eXBlKiBf
X3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAg
ICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2J1Zl9s
ZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICBpZiAoX19idWZfbGVuID4gMCkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9f
cmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWlu
aW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2luX2N1ciwgX19s
ZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyArPSBf
X2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92ZShfX2xlbik7CiAgICAgICAgICAgIH0K
CiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
bnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19zKyssIHRyYWl0c190
eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXpl
CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4c3B1dG4oY29uc3Qg
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1zaXplIF9f
cmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAgICAgIG9m
Zl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZfc2l6ZSgpOwogICAgICAgICAgaWYgKF9fYnVm
X2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX3JlbWFpbmlu
ZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIG9mZl90eXBlIF9fbGVuID0gbWluKF9fYnVm
X2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX291
dF9jdXIsIF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAg
ICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19sZW4p
OwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6
OnRvX2ludF90eXBlKCpfX3MpKTsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICAgICsrX19zOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBf
X2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAg
ICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmlu
LAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q
IF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGlu
dF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19i
dWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAg
ICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAg
ICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHdoaWxlIChfX3Rlc3RwdXQgJiYgX19idWZzaXpl
ICE9IC0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNw
dXRuKF9fc2Jpbi0+Z3B0cigpLCBfX2J1ZnNpemUpOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9f
eHRyY3Q7CiAgICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShfX3h0cmN0KTsKICAg
ICAgICAgICAgICBpZiAoX194dHJjdCA9PSBfX2J1ZnNpemUpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX3NiaW4tPnNnZXRjKCks
IF9UcmFpdHM6OmVvZigpKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICB7CiAgICAgICAg
ICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICBpZiAoKF9faW9z
LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpmYWlsYml0KSAhPSAwKQogICAgICAgICAgICB0aHJv
dzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUKICAgIHN0
cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxjaGFyPiYsIGJhc2ljX3N0
cmVhbWJ1ZjxjaGFyPiosCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8Y2hh
cj4qKTsKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PjsK
ICBleHRlcm4gdGVtcGxhdGUKICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJh
c2ljX2lvczx3Y2hhcl90PiYsIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiosCiAgICAgICAgICAg
ICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qKTsKfQojIDQ5OSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAyIDMKIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jh
c2ljX2lvcy5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNp
Y19pb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1
Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dHJlYW1idWZfaXRlcmF0b3IuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0
b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9D
aGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoK
CgogICAgICBtdXRhYmxlIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBpbnRfdHlwZSBf
TV9jOwoKICAgIHB1YmxpYzoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkKICAg
ICAgOiBfTV9zYnVmKDApLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1
ZihfX3MucmRidWYoKSksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJl
YW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3Ni
dWYoX19zKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKCiAgICAgIGNoYXJfdHlwZQog
ICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9NX2dldCgpKTsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3Bl
cmF0b3IrKygpCiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190
eXBlOjplb2YoKTsKICAgICAgICBpZiAoX01fc2J1ZiAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5
cGUoX01fc2J1Zi0+c2J1bXBjKCksIF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYgPSAwOwogICAg
ICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgIH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAg
ICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yIF9fb2xkID0gKnRoaXM7CiAgICAgICAgaWYgKF9N
X3NidWYKICAgICAgICAgICAgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX29sZC5fTV9j
ID0gX01fc2J1Zi0+c2J1bXBjKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19lb2YpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAg
ICAgX01fYyA9IF9fZW9mOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoKICAgICAg
Ym9vbAogICAgICBlcXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CiAg
ICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgICBib29sIF9fdGhpc2VvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9nZXQo
KSwgX19lb2YpOwogICAgICAgIGJvb2wgX19iZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYi5fTV9nZXQoKSwgX19lb2YpOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVv
ZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgogICAgcHJpdmF0ZToKICAg
ICAgaW50X3R5cGUKICAgICAgX01fZ2V0KCkgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGlu
dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGludF90eXBlIF9fcmV0
ID0gX19lb2Y7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlm
ICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2MsIF9fZW9mKSkKICAgICAgICAgICAgICBf
X3JldCA9IF9NX2M7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKChfX3JldCA9IF9NX3NidWYtPnNnZXRjKCkpLCBfX2VvZikpCiAgICAg
ICAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7
CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVh
bChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19i
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj
bGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRl
cmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3Ry
ZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1
ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUKICAgICAg
b3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkKICAgICAgOiBf
TV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJl
YW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9z
YnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGJvb2wK
ICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9mYWlsZWQ7IH0K
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19jKQogICAg
ewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUo
X01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgIF9NX2ZhaWxlZCA9
IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KfQojIDQxICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMi9jd2N0eXBlIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
Y3djdHlwZSIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDEgMwojIDM1ICIvdXNy
L2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL3dj
dHlwZS5oIiAyIDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnQgd2N0eXBlX3Q7CiMgNzkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwplbnVt
CnsKICBfX0lTd3VwcGVyID0gMCwKICBfX0lTd2xvd2VyID0gMSwKICBfX0lTd2FscGhhID0gMiwK
ICBfX0lTd2RpZ2l0ID0gMywKICBfX0lTd3hkaWdpdCA9IDQsCiAgX19JU3dzcGFjZSA9IDUsCiAg
X19JU3dwcmludCA9IDYsCiAgX19JU3dncmFwaCA9IDcsCiAgX19JU3dibGFuayA9IDgsCiAgX19J
U3djbnRybCA9IDksCiAgX19JU3dwdW5jdCA9IDEwLAogIF9fSVN3YWxudW0gPSAxMSwKCiAgX0lT
d3VwcGVyID0gKChfX0lTd3VwcGVyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikp
IDw8IDI0KSA6ICgoX19JU3d1cHBlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVy
KSkgPDwgOCkgOiAoKF9fSVN3dXBwZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBl
cikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA+PiAyNCkpKSksCiAgX0lT
d2xvd2VyID0gKChfX0lTd2xvd2VyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikp
IDw8IDI0KSA6ICgoX19JU3dsb3dlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2Vy
KSkgPDwgOCkgOiAoKF9fSVN3bG93ZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dl
cikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA+PiAyNCkpKSksCiAgX0lT
d2FscGhhID0gKChfX0lTd2FscGhhKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkp
IDw8IDI0KSA6ICgoX19JU3dhbHBoYSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhh
KSkgPDwgOCkgOiAoKF9fSVN3YWxwaGEpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBo
YSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA+PiAyNCkpKSksCiAgX0lT
d2RpZ2l0ID0gKChfX0lTd2RpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkp
IDw8IDI0KSA6ICgoX19JU3dkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0
KSkgPDwgOCkgOiAoKF9fSVN3ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdp
dCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lT
d3hkaWdpdCA9ICgoX19JU3d4ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdp
dCkpIDw8IDI0KSA6ICgoX19JU3d4ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4
ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3d4ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J
U3d4ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDI0KSkp
KSwKICBfSVN3c3BhY2UgPSAoKF9fSVN3c3BhY2UpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3NwYWNlKSkgPDwgMjQpIDogKChfX0lTd3NwYWNlKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3c3BhY2UpKSA8PCA4KSA6ICgoX19JU3dzcGFjZSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd3NwYWNlKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDI0KSkp
KSwKICBfSVN3cHJpbnQgPSAoKF9fSVN3cHJpbnQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3ByaW50KSkgPDwgMjQpIDogKChfX0lTd3ByaW50KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3cHJpbnQpKSA8PCA4KSA6ICgoX19JU3dwcmludCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd3ByaW50KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDI0KSkp
KSwKICBfSVN3Z3JhcGggPSAoKF9fSVN3Z3JhcGgpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2dyYXBoKSkgPDwgMjQpIDogKChfX0lTd2dyYXBoKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3Z3JhcGgpKSA8PCA4KSA6ICgoX19JU3dncmFwaCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2dyYXBoKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDI0KSkp
KSwKICBfSVN3YmxhbmsgPSAoKF9fSVN3YmxhbmspIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2JsYW5rKSkgPDwgMjQpIDogKChfX0lTd2JsYW5rKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3YmxhbmspKSA8PCA4KSA6ICgoX19JU3dibGFuaykgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2JsYW5rKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDI0KSkp
KSwKICBfSVN3Y250cmwgPSAoKF9fSVN3Y250cmwpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2NudHJsKSkgPDwgMjQpIDogKChfX0lTd2NudHJsKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3Y250cmwpKSA8PCA4KSA6ICgoX19JU3djbnRybCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2NudHJsKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDI0KSkp
KSwKICBfSVN3cHVuY3QgPSAoKF9fSVN3cHVuY3QpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3B1bmN0KSkgPDwgMjQpIDogKChfX0lTd3B1bmN0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3cHVuY3QpKSA8PCA4KSA6ICgoX19JU3dwdW5jdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd3B1bmN0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDI0KSkp
KSwKICBfSVN3YWxudW0gPSAoKF9fSVN3YWxudW0pIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2FsbnVtKSkgPDwgMjQpIDogKChfX0lTd2FsbnVtKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3YWxudW0pKSA8PCA4KSA6ICgoX19JU3dhbG51bSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2FsbnVtKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDI0KSkp
KQp9OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW0gKHdpbnRfdCBf
X3djKSA7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBoYSAod2ludF90IF9fd2MpIDsKCgpleHRlcm4g
aW50IGlzd2NudHJsICh3aW50X3QgX193YykgOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50
X3QgX193YykgOwoKCgpleHRlcm4gaW50IGlzd2dyYXBoICh3aW50X3QgX193YykgOwoKCgoKZXh0
ZXJuIGludCBpc3dsb3dlciAod2ludF90IF9fd2MpIDsKCgpleHRlcm4gaW50IGlzd3ByaW50ICh3
aW50X3QgX193YykgOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAod2ludF90IF9fd2MpIDsKCgoK
CmV4dGVybiBpbnQgaXN3c3BhY2UgKHdpbnRfdCBfX3djKSA7CgoKCgpleHRlcm4gaW50IGlzd3Vw
cGVyICh3aW50X3QgX193YykgOwoKCgoKZXh0ZXJuIGludCBpc3d4ZGlnaXQgKHdpbnRfdCBfX3dj
KSA7CgoKCgoKZXh0ZXJuIGludCBpc3dibGFuayAod2ludF90IF9fd2MpIDsKIyAxNzggIi91c3Iv
aW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChjb25zdCBjaGFyICpf
X3Byb3BlcnR5KSA7CgoKCmV4dGVybiBpbnQgaXN3Y3R5cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVf
dCBfX2Rlc2MpIDsKIyAyNDkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIGNvbnN0
IF9faW50MzJfdCAqd2N0cmFuc190OwoKCmV4dGVybiB3aW50X3QgdG93bG93ZXIgKHdpbnRfdCBf
X3djKSA7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2MpIDsKIyAyNzUgIi91
c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp9CiMgMjg4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMK
ZXh0ZXJuICJDIiB7CgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFucyAoY29uc3QgY2hhciAqX19w
cm9wZXJ0eSkgOwoKCmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFu
c190IF9fZGVzYykgOwoKCgoKCgoKZXh0ZXJuIGludCBfX2lzd2FsbnVtX2wgKHdpbnRfdCBfX3dj
LCBfX2xvY2FsZV90IF9fbG9jYWxlKSA7CgoKCgoKZXh0ZXJuIGludCBfX2lzd2FscGhhX2wgKHdp
bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSA7CgoKZXh0ZXJuIGludCBfX2lzd2NudHJs
X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSA7CgoKCmV4dGVybiBpbnQgX19p
c3dkaWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgOwoKCgpleHRlcm4g
aW50IF9faXN3Z3JhcGhfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIDsKCgoK
CmV4dGVybiBpbnQgX19pc3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2Fs
ZSkgOwoKCmV4dGVybiBpbnQgX19pc3dwcmludF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBf
X2xvY2FsZSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzd3B1bmN0X2wgKHdpbnRfdCBfX3djLCBfX2xv
Y2FsZV90IF9fbG9jYWxlKSA7CgoKCgpleHRlcm4gaW50IF9faXN3c3BhY2VfbCAod2ludF90IF9f
d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIDsKCgoKCmV4dGVybiBpbnQgX19pc3d1cHBlcl9sICh3
aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzd3hk
aWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgOwoKCgoKZXh0ZXJuIGlu
dCBfX2lzd2JsYW5rX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSA7CgoKCmV4
dGVybiB3Y3R5cGVfdCBfX3djdHlwZV9sIChjb25zdCBjaGFyICpfX3Byb3BlcnR5LCBfX2xvY2Fs
ZV90IF9fbG9jYWxlKQogICAgIDsKCgoKZXh0ZXJuIGludCBfX2lzd2N0eXBlX2wgKHdpbnRfdCBf
X3djLCB3Y3R5cGVfdCBfX2Rlc2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgOwoKCgoKCgoK
ZXh0ZXJuIHdpbnRfdCBfX3Rvd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j
YWxlKSA7CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2Fs
ZV90IF9fbG9jYWxlKSA7CgoKCmV4dGVybiB3Y3RyYW5zX3QgX193Y3RyYW5zX2wgKGNvbnN0IGNo
YXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgOwoKCmV4dGVybiB3aW50
X3QgX190b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkgOwoKCgp9CiMgNTMgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2N3Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90
OwoKICB1c2luZyA6OndjdHlwZV90OwogIHVzaW5nIDo6d2N0cmFuc190OwoKICB1c2luZyA6Omlz
d2FsbnVtOwogIHVzaW5nIDo6aXN3YWxwaGE7CiAgdXNpbmcgOjppc3dibGFuazsKICB1c2luZyA6
Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3ZGlnaXQ7CiAgdXNpbmcgOjppc3dncmFwaDsKICB1c2lu
ZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dwcmludDsKICB1
c2luZyA6Omlzd3B1bmN0OwogIHVzaW5nIDo6aXN3c3BhY2U7CiAgdXNpbmcgOjppc3d1cHBlcjsK
ICB1c2luZyA6Omlzd3hkaWdpdDsKICB1c2luZyA6Omlzd2N0eXBlOwogIHVzaW5nIDo6dG93bG93
ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsKICB1c2luZyA6OnRvd2N0cmFuczsKICB1c2luZyA6Ondj
dHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7Cn0KIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4yL2lvcyIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxl
X2ZhY2V0cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQ7CgoKCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNl
LmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlwZV9iYXNlCiAgewoKICAgIHR5cGVk
ZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1h
c2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IF9JU3VwcGVyOwogICAgc3RhdGljIGNv
bnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0g
X0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IF9JU2RpZ2l0OwogICAgc3Rh
dGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sg
c3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50ID0gX0lTcHJpbnQ7
CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IF9JU2dyYXBoOwogICAgc3RhdGljIGNvbnN0
IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0gX0lT
cHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9IF9JU2FsbnVtOwogIH07CiMgNjQg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFz
ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBp
cyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
aXMoX19tLCBfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNo
YXJfdHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog
X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19zY2FuX2lzKF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9f
bG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19j
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJf
dHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBf
X2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7
IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19jKTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lk
ZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoK
ICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAg
ICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNv
bnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpf
X3RvKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19k
ZmF1bHQsIF9fdG8pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0
eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0K
CiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykg
Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNv
bnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBt
YXNrKiBfX3ZlYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90
eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl
KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91
cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoK
ICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0
ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0
IGNoYXIqIF9faGksCiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7
CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2Rm
YXVsdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAg
ICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAg
IH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1Ymxp
YyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjpt
YXNrIG1hc2s7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hh
clQ+KF9fcmVmcykgeyB9CgogICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBl
KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBf
X2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNv
bnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyht
YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1h
c2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190
b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFy
X3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19s
bywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNo
YXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxh
dGU8PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNl
PGNoYXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoK
ICAgIHByb3RlY3RlZDoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CiAgICAg
IGJvb2wgX01fZGVsOwogICAgICBfX3RvX3R5cGUgX01fdG91cHBlcjsKICAgICAgX190b190eXBl
IF9NX3RvbG93ZXI7CiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAg
ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVf
c2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNp
dAogICAgICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNl
LCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9j
YWxlIF9fY2xvYywgY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwK
ICAgICAgICAgICAgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAg
aXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgog
ICAgICBpcyhjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykg
Y29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwg
Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUg
Y29uc3QgY2hhcioKICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNv
bnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKICAgICAgY29uc3QgbWFzayoK
ICAgICAgdGFibGUoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgbWFzayoKICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93KCk7Cgog
ICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRv
X2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJf
dHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAog
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xv
LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUK
ICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4o
Y2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNv
bnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9f
ZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19u
YXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAg
ICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAg
dGVtcGxhdGU8PgogICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hh
cj4gPihjb25zdCBsb2NhbGUmIF9fbG9jKTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlw
ZTx3Y2hhcl90PiA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8d2NoYXJfdD4KICAgIHsK
ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgd2N0eXBlX3QgX193bWFza190eXBlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2Fs
ZSBfTV9jX2xvY2FsZV9jdHlwZTsKCiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgbG9jYWxlOjpp
ZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZz
ID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICBfX3dtYXNrX3R5cGUKICAgICAgX01fY29udmVy
dF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5j
dHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5
cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19p
cyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192
ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5f
aXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25v
dChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFy
X3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3Rv
bG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0
IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hh
cgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZh
dWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwoKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0
IGN0eXBlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9j
YWxlJiBfX2xvYyk7CgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29s
CiAgY3R5cGU8Y2hhcj46OgogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVy
biBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXSAmIF9fbTsgfQoKICBj
b25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3Qg
Y2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBf
X2hpZ2gpCiAgICAgICpfX3ZlYysrID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oKl9fbG93KyspXTsKICAgIHJldHVybiBfX2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0
eXBlPGNoYXI+OjoKICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3Qg
Y2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAg
ICAgICYmICEoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBf
X20pKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KCiAgY29uc3QgY2hhcioK
ICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBj
b25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAg
ICAgICAgICAgJiYgKF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyld
ICYgX19tKSAhPSAwKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyA0MDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1Ymxp
YyBjdHlwZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBf
X3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfmN0eXBlX2J5bmFtZSgpIHsgfTsKICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAgICBjdHlwZV9i
eW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOwoKICB0
ZW1wbGF0ZTw+CiAgICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5bmFtZShjb25zdCBj
aGFyKiwgc2l6ZV90IHJlZnMpOwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0
cy9jb2RlY3Z0LmgiIDEgMwojIDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Nv
ZGVjdnQuaCIgMwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0g
cmVzdWx0CiAgICB7CiAgICAgIG9rLAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAg
bm9jb252CiAgICB9OwogIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJz
dHJhY3RfYmFzZQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCBy
ZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg
X0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoK
CiAgICAgIHJlc3VsdAogICAgICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj
b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f
dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBf
X2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAg
ICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f
dHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2Vu
ZCxfX3RvX25leHQpOyB9CgogICAgICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0
ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGlu
dGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90
eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2lu
KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBp
bnQKICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2VuY29kaW5nKCk7IH0KCiAgICAgIGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRo
cm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBp
bnQKICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90
eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVf
dCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9f
ZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25z
dCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHBy
b3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVh
bAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVz
dWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190
bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3Rv
X25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQo
c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAg
ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAw
OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg
IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGlu
dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAg
ICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAg
ICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwg
aW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90
IF9fbWF4KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro
KCkgY29uc3QgdGhyb3coKSA9IDA7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl
cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVj
dnQKICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJu
VCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNl
OjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAg
ICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3Rh
dGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0
X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJl
c3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25z
dCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f
dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190
b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3Rh
dGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
X2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJu
X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rp
bmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19u
b2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3Ro
KGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVu
YW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf
U3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIs
IG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNo
YXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1i
c3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg
ZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAog
ICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv
bSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRl
cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4
dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlw
ZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5f
dHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg
Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUq
IF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBf
X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBj
b25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYo
KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0
IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0
ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAg
IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf
dD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsK
ICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBz
dGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19v
dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom
IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f
ZW5kLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tX2VuZCwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg
ICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg
ICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAog
ICAgICBpbnQgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAg
ICBib29sIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAog
ICAgICBpbnQgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6
ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgo
KSBjb25zdCB0aHJvdygpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5
bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsK
ICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U
LCBfU3RhdGVUPihfX3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQogICAgfTsKCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5o
IiAxIDMKIyA0NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAzCiAgY2xhc3MgX19lbmNfdHJhaXRzCiAg
ewogIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgaWNvbnZfdCBfX2Rlc2NfdHlwZTsKCiAgcHJvdGVj
dGVkOgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX21heF9zaXplID0gMzI7CgogICAgY2hhciBf
TV9pbnRfZW5jW19TX21heF9zaXplXTsKCiAgICBjaGFyIF9NX2V4dF9lbmNbX1NfbWF4X3NpemVd
OwoKCiAgICBfX2Rlc2NfdHlwZSBfTV9pbl9kZXNjOwoKICAgIF9fZGVzY190eXBlIF9NX291dF9k
ZXNjOwoKCiAgICBpbnQgX01fZXh0X2JvbTsKCgogICAgaW50IF9NX2ludF9ib207CgogIHB1Ymxp
YzoKICAgIGV4cGxpY2l0IF9fZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2MoMCksIF9NX291
dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIG1lbXNl
dChfTV9pbnRfZW5jLCAwLCBfU19tYXhfc2l6ZSk7CiAgICAgIG1lbXNldChfTV9leHRfZW5jLCAw
LCBfU19tYXhfc2l6ZSk7CiAgICB9CgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKGNvbnN0IGNo
YXIqIF9faW50LCBjb25zdCBjaGFyKiBfX2V4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19pYm9tID0gMCwgaW50IF9fZWJvbSA9IDApCiAgICA6IF9NX2luX2Rlc2MoMCksIF9NX291
dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIHN0cm5j
cHkoX01faW50X2VuYywgX19pbnQsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRf
ZW5jLCBfX2V4dCwgX1NfbWF4X3NpemUpOwogICAgfQoKCgoKCgogICAgX19lbmNfdHJhaXRzKGNv
bnN0IF9fZW5jX3RyYWl0cyYgX19vYmopOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKQog
ICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21heF9z
aXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19tYXhf
c2l6ZSk7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9pbnRf
Ym9tID0gX19vYmouX01faW50X2JvbTsKICAgIH0KCgogICAgX19lbmNfdHJhaXRzJgogICAgb3Bl
cmF0b3I9KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopCiAgICB7CiAgICAgIHN0cm5jcHkoX01f
aW50X2VuYywgX19vYmouX01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9N
X2V4dF9lbmMsIF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01faW5fZGVz
YyA9IDA7CiAgICAgIF9NX291dF9kZXNjID0gMDsKICAgICAgX01fZXh0X2JvbSA9IF9fb2JqLl9N
X2V4dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogICAgfl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIF9fZGVzY190
eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmIChfTV9p
bl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01faW5f
ZGVzYyk7CiAgICAgIGlmIChfTV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycikKICAg
ICAgICBpY29udl9jbG9zZShfTV9vdXRfZGVzYyk7CiAgICB9CgogICAgdm9pZAogICAgX01faW5p
dCgpCiAgICB7CiAgICAgIGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2Fz
dDxpY29udl90PigtMSk7CiAgICAgIGlmICghX01faW5fZGVzYykKICAgICAgICB7CiAgICAgICAg
ICBfTV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsKICAgICAg
ICAgIGlmIChfTV9pbl9kZXNjID09IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1bnRpbWVf
ZXJyb3IoImNyZWF0aW5nIGljb252IGlucHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAg
IH0KICAgICAgaWYgKCFfTV9vdXRfZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9vdXRfZGVz
YyA9IGljb252X29wZW4oX01fZXh0X2VuYywgX01faW50X2VuYyk7CiAgICAgICAgICBpZiAoX01f
b3V0X2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigiY3Jl
YXRpbmcgaWNvbnYgb3V0cHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0KICAgIH0K
CiAgICBib29sCiAgICBfTV9nb29kKCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19l
cnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgYm9vbCBfX3Rlc3QgPSBf
TV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnI7CiAgICAgIF9fdGVzdCAmPSBfTV9vdXRf
ZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycjsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAgIH0K
CiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9pbl9kZXNjcmlwdG9yKCkKICAgIHsg
cmV0dXJuICZfTV9pbl9kZXNjOyB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRf
b3V0X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX291dF9kZXNjOyB9CgogICAgaW50CiAg
ICBfTV9nZXRfZXh0ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9ib207IH0KCiAgICBp
bnQKICAgIF9NX2dldF9pbnRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01faW50X2JvbTsgfQoK
ICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfaW50ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJuIF9N
X2ludF9lbmM7IH0KCiAgICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2V4dGVybmFsX2VuYygpCiAg
ICB7IHJldHVybiBfTV9leHRfZW5jOyB9CiAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY2xhc3MgY29kZWN2dDxfSW50ZXJuVCwgX0V4
dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl
PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0lu
dGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIHN0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYgX19lbmNf
dHJhaXRzOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFp
dHMgX19lbmNfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fi
c3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMp
CiAgICAgIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChfX2VuY190eXBlKiBfX2Vu
Yywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8aW50
ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsgfQoKICAg
IHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAgdmly
dHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVy
bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2Vu
ZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90
eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlw
ZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNo
aWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAg
ICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg
IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGlu
dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv
X2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19h
bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv
X2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAg
ICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygp
OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5U
PgogICAgbG9jYWxlOjppZAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3Ry
YWl0cz46OmlkOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Q+CiAgICBpbmxpbmUgc2l6ZV90
CiAgICBfX2ljb252X2FkYXB0b3Ioc2l6ZV90KCpfX2Z1bmMpKGljb252X3QsIF9ULCBzaXplX3Qq
LCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGljb252X3QgX19jZCwgY2hh
cioqIF9faW5idWYsIHNpemVfdCogX19pbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgIGNoYXIq
KiBfX291dGJ1Ziwgc2l6ZV90KiBfX291dGJ5dGVzKQogICAgeyByZXR1cm4gX19mdW5jKF9fY2Qs
IChfVClfX2luYnVmLCBfX2luYnl0ZXMsIF9fb3V0YnVmLCBfX291dGJ5dGVzKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jh
c2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46
OgogICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zy
b20sCiAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVy
bl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVy
bl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u
c3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9N
X2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190
eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9f
c3RhdGUuX01fZ2V0X291dF9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19m
bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fZmJ5dGVz
ID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25zdCBz
aXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoZXh0ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90
IF9fdGJ5dGVzID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAg
IGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBj
aGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAgIGlu
dCBfX2ludF9ib20gPSBfX3N0YXRlLl9NX2dldF9pbnRlcm5hbF9ib20oKTsKICAgICAgICAgIGlm
IChfX2ludF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0g
X19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQg
PSBzdGF0aWNfY2FzdDxpbnRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludGVy
bl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0gc3Rh
dGljX2Nhc3Q8aW50ZXJuX3R5cGU+KF9faW50X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90cmFp
dHM8aW50ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwogICAg
ICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAg
ICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19j
ZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZieXRlcywg
Jl9fY3RvLCAmX190Ynl0ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9jYXN0PGlu
dGVybl90eXBlKj4oX19mcm9tKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRh
cHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sICZfX2ZieXRlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJl9fY3RvLCAmX190Ynl0ZXMpOwogICAgICAgICAgICB9
CgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90eXBl
Kj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxl
eHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAg
ICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mYnl0
ZXMgPCBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IGludGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9f
cmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFt
ZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5U
LCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9f
c3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190
b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQg
X19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAg
ICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAg
ICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVzY3Jp
cHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVy
bl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2Vu
ZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNo
YXIqPihfX3RvKTsKICAgICAgICAgIHNpemVfdCBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNv
bnYsKl9fZGVzYywgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJl9fY3RvLCAmX190bGVuKTsKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0
PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIGlmIChfX3RsZW4gPT0gX190bXVs
dGlwbGUgKiAoX190b19lbmQgLSBfX3RvKSkKICAgICAgICAgICAgICAgIF9fcmV0ID0gbm9jb252
OwogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGxlbiA9PSAwKQogICAgICAgICAgICAgICAgX19y
ZXQgPSBvazsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRp
YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yZXQgPSBlcnJv
cjsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQK
ICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2lu
KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg
ICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwKICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19l
bmQsCiAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAg
cmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAg
ICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBl
OwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2lu
X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVv
ZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mbGVuID0gX19mbXVsdGlwbGUgKiAo
X19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUg
PSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRp
cGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAg
ICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19leHRfYm9tID0gX19zdGF0
ZS5fTV9nZXRfZXh0ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19leHRfYm9tKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207
CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8ZXh0ZXJu
X3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihleHRlcm5fdHlwZSkgKiAoX19zaXplICsg
MSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBl
PihfX2V4dF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGV4dGVybl90eXBlPjo6Y29w
eShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9
IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGV4dGVy
bl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2Zyb20pOwogICAg
ICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAg
ICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19j
ZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9f
Y3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNp
emVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICBf
X3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAg
ICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlmIChfX2ZsZW4gPCBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fZnJv
bV9lbmQgLSBfX2Zyb20pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Zy
b21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsK
ICAgICAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRlcm5fdHlw
ZSo+KF9fY3RvKTsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gZXJyb3I7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBj
b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19lbmNvZGlu
ZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gMDsKICAgICAgaWYgKHNp
emVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5UKSkKICAgICAgICBfX3JldCA9IHNpemVv
ZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBib29s
CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19h
bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBj
b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19sZW5ndGgo
Y29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAg
ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICB7IHJl
dHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVfdD4oX19lbmQgLSBfX2Zyb20pKTsgfQoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGlu
dAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9f
bWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIDE7IH0KIyAzMzQgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAyIDMKIyA0MjYgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoKICBjbGFzcyBf
X251bV9iYXNlCiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfYXRv
bXNbXTsKCiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9NX2UgPSBfTV96ZXJv
ICsgMTAsCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3NpemUgPSAyMSArIDEK
ICAgIH07CgoKCiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0KGNvbnN0IGlvc19i
YXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAg
c3RyZWFtc2l6ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZm9ybWF0X2ludChj
b25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLCBjaGFyIF9fbW9k
bCk7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0
IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp
bmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAg
IGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRz
X3NlcDsKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX01fdHJ1ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFsc2VuYW1lOwoKICAg
IHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDAp
IDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgp
OyB9CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlh
bGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9w
b2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoK
ICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGlu
ZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0
cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
dHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2VuYW1lKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog
ICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9w
b2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwg
c3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBp
bmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1ZW5hbWUoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlw
ZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7
IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBf
X2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0ZTw+CiAgICBu
dW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51
bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsK
CgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKTsKCiAgdGVt
cGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVt
cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsK
CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVtcHVuY3Q7CgogICAgcHVibGljOgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdF9ieW5hbWUo
Y29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBudW1wdW5jdDxfQ2hh
clQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2Fs
ZV9udW1wdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9NX2NfbG9j
YWxlX251bXB1bmN0KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+bnVtcHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9j
YWxlX251bXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBw
dWJsaWMgX19udW1fYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGlj
IGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fZ2V0KHNpemVfdCBfX3Jl
ZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u
ZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBf
X2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBp
bnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBf
X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAg
aXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25n
JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19p
bywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9f
aW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQm
IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
LCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p
biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs
IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwgfm51bV9nZXQoKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2Zsb2F0
KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAg
ICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYykgY29uc3Q7CgogICAgICBpdGVyX3R5
cGUKICAgICAgX01fZXh0cmFjdF9pbnQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg
aW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYywg
aW50JiBfX2Jhc2UpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0
KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgYm9v
bCYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5
cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGxvbmcmKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJf
dHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv
X2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nJikgY29u
c3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl
cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAg
IGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0
KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl
LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGRvdWJs
ZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlw
ZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAg
ICAgICAgIGxvbmcgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLAogICAgICAgICAgICAgdm9pZComKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX2dl
dDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKIyA3MjEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwg
cHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9f
cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBi
b29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2Zp
bGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp
bGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAg
ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxv
bmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwg
X19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3Ms
IGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25n
IGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9f
ZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBl
IF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwK
ICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVy
dF9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZCwgX1ZhbHVlVCBfX3YpIGNvbnN0OwoKICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAgICAgICBf
TV9jb252ZXJ0X2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsLCBfVmFsdWVU
IF9fdikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5fZmxvYXQoaXRlcl90
eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywKICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBf
TV93aWRlbl9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwg
Y2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBp
dGVyX3R5cGUKICAgICAgX01faW5zZXJ0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJf
dHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fd3MsIGludCBf
X2xlbikgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFy
X3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog
ICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcg
X192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5
cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29uc3Q7CgoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
LCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f
ZmlsbCwgdW5zaWduZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGRv
dWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3YpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0OwogICAgfTsK
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2Nh
bGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAg
ICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShzaXplX3Qg
X19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xv
Y2FsZV9jb2xsYXRlID0gX1NfY19sb2NhbGU7IH0KCgogICAgICBleHBsaWNpdAogICAgICBjb2xs
YXRlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6
OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19s
b2NhbGUoX19jbG9jKTsgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf
X2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
bG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19j
b21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUK
ICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAg
ICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19o
aSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAg
ICAgIGludAogICAgICBfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNv
bnN0OwoKICAgICAgc2l6ZV90CiAgICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hh
clQqLCBzaXplX3QpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNv
bGxhdGUoKQogICAgICB7CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX2NvbGxhdGUgIT0gX1NfY19s
b2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUp
OwogICAgICB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFy
VCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0No
YXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0
cmluZ190eXBlCiAgICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9D
aGFyVCogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25z
dCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7
CgoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29u
c3QgY2hhciosIGNvbnN0IGNoYXIqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAg
ICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3Qp
IGNvbnN0OwoKCiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9j
b21wYXJlKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KikgY29uc3Q7CgogIHRlbXBsYXRl
PD4KICAgIHNpemVfdAogICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3Qq
LCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KSBjb25zdDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGNsYXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0NoYXJUPgog
ICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAog
ICAgICBjb2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQog
ICAgICA6IGNvbGxhdGU8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBpZiAoX01fY19s
b2NhbGVfY29sbGF0ZSAhPSBfU19jX2xvY2FsZSkKICAgICAgICAgIF9TX2Rlc3Ryb3lfY19sb2Nh
bGUoX01fY19sb2NhbGVfY29sbGF0ZSk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX2NvbGxhdGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNl
CiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5
bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9f
dGltZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAg
ICBzdGF0aWMgY29uc3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IGNoYXIq
IF9NX25hbWVfdGltZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0Owog
ICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9m
b3JtYXQ7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQq
IF9NX2RheTI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9kYXk0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fZGF5NjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9D
aGFyVCogX01fZGF5X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMjsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01f
bW9udGgwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOwogICAgICBjb25zdCBfQ2hh
clQqIF9NX21vbnRoMDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNDsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9tb250aDA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250
aDA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCog
X01fbW9udGgxMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOwogICAgICBjb25zdCBf
Q2hhclQqIF9NX21vbnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v
bnRoX2EwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGhfYTA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwOTsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTExOwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0
CiAgICAgIF9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFj
ZXQoX19yZWZzKSwgX01fbmFtZV90aW1lcHVuY3QoIkMiKQogICAgICB7IF9NX2luaXRpYWxpemVf
dGltZXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KF9fY19sb2Nh
bGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFtZV90aW1lcHVuY3QoX19zKQogICAgICB7IF9NX2lu
aXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0KF9D
aGFyVCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCiAgICAg
ICAgICAgICBjb25zdCB0bSogX190bSkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVf
Zm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2RhdGUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19k
YXRlWzBdID0gX01fZGF0ZV9mb3JtYXQ7CiAgICAgICAgX19kYXRlWzFdID0gX01fZGF0ZV9lcmFf
Zm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBf
Q2hhclQqKiBfX3RpbWUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX190aW1lWzBdID0gX01fdGlt
ZV9mb3JtYXQ7CiAgICAgICAgX190aW1lWzFdID0gX01fdGltZV9lcmFfZm9ybWF0OwogICAgICB9
CgogICAgICB2b2lkCiAgICAgIF9NX2FtcG0oY29uc3QgX0NoYXJUKiogX19hbXBtKSBjb25zdAog
ICAgICB7CiAgICAgICAgX19hbXBtWzBdID0gX01fYW07CiAgICAgICAgX19hbXBtWzFdID0gX01f
cG07CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV90aW1lX2Zvcm1hdHMoY29uc3Qg
X0NoYXJUKiogX19kdCkgY29uc3QKICAgICAgewoKICAgICAgICBfX2R0WzBdID0gX01fZGF0ZV90
aW1lX2Zvcm1hdDsKICAgICAgICBfX2R0WzFdID0gX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNv
bnN0CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXkxOwogICAgICAgIF9fZGF5c1sx
XSA9IF9NX2RheTI7CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5MzsKICAgICAgICBfX2RheXNb
M10gPSBfTV9kYXk0OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheTU7CiAgICAgICAgX19kYXlz
WzVdID0gX01fZGF5NjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXk3OwogICAgICB9CgogICAg
ICB2b2lkCiAgICAgIF9NX2RheXNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19kYXlzKSBj
b25zdAogICAgICB7CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5X2ExOwogICAgICAgIF9fZGF5
c1sxXSA9IF9NX2RheV9hMjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXlfYTM7CiAgICAgICAg
X19kYXlzWzNdID0gX01fZGF5X2E0OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheV9hNTsKICAg
ICAgICBfX2RheXNbNV0gPSBfTV9kYXlfYTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5X2E3
OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX21vbnRocyhjb25zdCBfQ2hhclQqKiBfX21v
bnRocykgY29uc3QKICAgICAgewogICAgICAgIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsKICAg
ICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9t
b250aDAzOwogICAgICAgIF9fbW9udGhzWzNdID0gX01fbW9udGgwNDsKICAgICAgICBfX21vbnRo
c1s0XSA9IF9NX21vbnRoMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aDA2OwogICAg
ICAgIF9fbW9udGhzWzZdID0gX01fbW9udGgwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21v
bnRoMDg7CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aDA5OwogICAgICAgIF9fbW9udGhz
WzldID0gX01fbW9udGgxMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aDExOwogICAg
ICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoMTI7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAg
X01fbW9udGhzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAg
ICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aF9hMDE7CiAgICAgICAgX19tb250aHNb
MV0gPSBfTV9tb250aF9hMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aF9hMDM7CiAg
ICAgICAgX19tb250aHNbM10gPSBfTV9tb250aF9hMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBf
TV9tb250aF9hMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aF9hMDY7CiAgICAgICAg
X19tb250aHNbNl0gPSBfTV9tb250aF9hMDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250
aF9hMDg7CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aF9hMDk7CiAgICAgICAgX19tb250
aHNbOV0gPSBfTV9tb250aF9hMTA7CiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGhfYTEx
OwogICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoX2ExMjsKICAgICAgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+X190aW1lcHVuY3QoKTsKCgogICAgICB2b2lkCiAg
ICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1NfY19sb2Nh
bGUpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBf
X3RpbWVwdW5jdDxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIF9fdGltZXB1bmN0PGNo
YXI+Ojp+X190aW1lcHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY2hhcioKICAgIF9f
dGltZXB1bmN0PGNoYXI+OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lk
CiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2Fs
ZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6
X01fcHV0KGNoYXIqLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSopIGNvbnN0OwoKCiAg
dGVtcGxhdGU8PgogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46On5fX3RpbWVwdW5jdCgpOwoKICB0
ZW1wbGF0ZTw+CiAgICBjb25zdCB3Y2hhcl90KgogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9T
X3RpbWV6b25lc1sxNF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdj
aGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRl
bXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9wdXQod2NoYXJf
dCosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHRtKikgY29uc3Q7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
Y29uc3QgX0NoYXJUKiBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXNbMTRdOwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGlt
ZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J
bkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3Ry
aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIHRpbWVfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9f
cmVmcykgeyB9CgogICAgICBkYXRlb3JkZXIKICAgICAgZGF0ZV9vcmRlcigpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2RhdGVfb3JkZXIoKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IGdldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3RpbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBf
X2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfZGF0ZShpdGVyX3R5cGUg
X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2dldF9kYXRlKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfd2Vl
a2RheShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBl
CiAgICAgIGdldF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9tb250aG5hbWUo
X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF95ZWFyKF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9fdG0pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1l
X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBkYXRlb3JkZXIKICAgICAgZG9fZGF0ZV9vcmRlcigp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3RpbWUoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90
eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog
ICAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
KiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF9tb250
aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAg
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgoKICAgICAgdm9pZAog
ICAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBp
bnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgICBpbnQgX19taW4sIGludCBfX21heCwg
c2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBf
X2N0eXBlLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNv
bnN0OwoKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVn
LCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhsZW4sCiAgICAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0OwoKCiAgICAgIHZvaWQKICAg
ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwg
X0luSXRlcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog
dGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPihfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgdmlydHVhbAogICAgICB+dGltZV9nZXRfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXQg
OiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVy
IGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChf
X3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICBj
b25zdCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdDsKCiAgICAgIGl0
ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlw
ZSBfX2ZpbGwsCiAgICAgICAgICBjb25zdCB0bSogX190bSwgY2hhciBfX2Zvcm1hdCwgY2hhciBf
X21vZCA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIF9f
ZmlsbCwgX190bSwgX19mb3JtYXQsIF9fbW9kKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbAogICAgICB+dGltZV9wdXQoKQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
CiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
ZmlsbCwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9f
bW9kKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNz
IHRpbWVfcHV0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0X2J5
bmFtZShjb25zdCBjaGFyKiAsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfcHV0PF9D
aGFyVCwgX091dEl0ZXI+KF9fcmVmcykKICAgICAgeyB9OwoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+dGltZV9wdXRfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgbW9u
ZXlfYmFzZQogIHsKICBwdWJsaWM6CiAgICBlbnVtIHBhcnQgeyBub25lLCBzcGFjZSwgc3ltYm9s
LCBzaWduLCB2YWx1ZSB9OwogICAgc3RydWN0IHBhdHRlcm4geyBjaGFyIGZpZWxkWzRdOyB9OwoK
ICAgIHN0YXRpYyBjb25zdCBwYXR0ZXJuIF9TX2RlZmF1bHRfcGF0dGVybjsKCgoKICAgIHN0YXRp
YyBwYXR0ZXJuCiAgICBfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIg
X19zcGFjZSwgY2hhciBfX3Bvc24pOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
Ym9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwg
cHVibGljIG1vbmV5X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlw
ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7
CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhv
dXNhbmRzX3NlcDsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9jdXJyX3N5bWJvbDsKICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfTV9wb3NpdGl2ZV9zaWduOwogICAgICBjb25zdCBjaGFyX3R5cGUq
IF9NX25lZ2F0aXZlX3NpZ247CiAgICAgIGludCBfTV9mcmFjX2RpZ2l0czsKICAgICAgcGF0dGVy
biBfTV9wb3NfZm9ybWF0OwogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7CgogICAgcHVibGlj
OgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdCgpOyB9
CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25z
dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19y
ZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MsIF9fcyk7IH0KCiAg
ICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNh
bmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsg
fQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2wo
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBz
dHJpbmdfdHlwZQogICAgICBwb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2
ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnYXRpdmVfc2lnbigpOyB9
CgogICAgICBpbnQKICAgICAgZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19mcmFjX2RpZ2l0cygpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIHBvc19mb3JtYXQoKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0KCiAgICAgIHBhdHRl
cm4KICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ19m
b3JtYXQoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5j
dCgpOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hh
cl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90
aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmlu
Z190eXBlCiAgICAgIGRvX2N1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vy
cl9zeW1ib2w7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fcG9zaXRpdmVf
c2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc2l0aXZlX3NpZ247IH0KCiAgICAgIHZp
cnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX25lZ2F0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2Zy
YWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0KCiAgICAg
IHZpcnR1YWwgcGF0dGVybgogICAgICBkb19wb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fcG9zX2Zvcm1hdDsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX25lZ19m
b3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9CgoKICAgICAgIHZv
aWQKICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9T
X2NfbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9f
bmFtZSA9IDApOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRs
PgogICAgbG9jYWxlOjppZCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0
PF9DaGFyVCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIs
IHRydWU+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIs
IGZhbHNlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlw
dW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNv
bnN0IGNoYXIqKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyLCBm
YWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7
CgoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5j
dCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5
cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0
cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoK
ICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01f
aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnlu
YW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xv
Y2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu
Z190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwoKICAgICAgZXhw
bGljaXQKICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y
ZWZzID0gMCkKICAgICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+KF9fcmVmcykKICAgICAg
ewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3Mp
OwogICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9tb25leXB1bmN0
KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5j
dF9ieW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlw
dW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4K
ICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJULCBfSW50bD46OmludGw7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG1v
bmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0
eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz
dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXpl
X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGws
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25n
IGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywg
X19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdf
dHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9f
ZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2lu
dGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog
ICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0
cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
T3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry
aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykg
eyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRs
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91Ymxl
IF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwg
X19pbywgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy
X3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5
cGUgX19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19p
bnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGxvbmcg
ZG91YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBl
IF9fZmlsbCwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgbG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgc3RydWN0
IG1lc3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6
ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
c3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2Nh
bGVfbWVzc2FnZXM7CgoKICAgICAgY29uc3QgY2hhciogX01fbmFtZV9tZXNzYWdlczsKCgogICAg
cHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz
KSwgX01fbmFtZV9tZXNzYWdlcygiQyIpCiAgICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBf
U19jX2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUg
X19jbG9jLCBjb25zdCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9f
bmFtZTsKICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9f
Y2xvYyk7CiAgICAgIH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJp
bmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihj
b25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29u
c3Q7CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwg
aW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAg
ICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9z
ZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygp
CiAgICAgICB7CiAgICAgICAgIGlmIChfTV9jX2xvY2FsZV9tZXNzYWdlcyAhPSBfU19jX2xvY2Fs
ZSkKICAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsK
ICAgICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBkb19vcGVuKGNvbnN0IGJhc2lj
X3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJp
bmdfdHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZ190eXBl
JiBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2UoY2F0
YWxvZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01fY29udmVydF90b19jaGFyKGNvbnN0
IHN0cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7CiAg
ICAgIH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihjaGFy
KiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0
czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTczMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICAgICAgICByZXR1cm4gc3RyaW5nX3R5cGUo
KTsKICAgICAgfQogICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2Fs
ZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJpbmcKICAg
IG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYp
IGNvbnN0OwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL21lc3NhZ2VzX21lbWJlcnMuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNh
dGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+
JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIF9fZGlyKSBjb25zdAogICAgewogICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19z
dHIoKSwgX19kaXIpOwogICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0No
YXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19z
dHJpbmc8Y2hhcj4mIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9j
YWxlJikgY29uc3QKICAgIHsKCgogICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKICAgICAg
cmV0dXJuIDA7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1l
IG1lc3NhZ2VzPF9DaGFyVD46OnN0cmluZ190eXBlCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19n
ZXQoY2F0YWxvZywgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdAogICAgewoKCgoKCgogICAgICBjaGFyKiBfX29s
ZCA9IHN0cmR1cChzZXRsb2NhbGUoX19MQ19BTEwsIDApKTsKICAgICAgc2V0bG9jYWxlKF9fTENf
QUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2Nv
bnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsIF9fb2xk
KTsKICAgICAgZnJlZShfX29sZCk7CiAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihf
X21zZyk7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBt
ZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAogICAgeyB9CiMgMTc0NCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJs
aWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5
cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19z
LCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKICAg
ICAgewogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3M7CiAgICAgICAgaWYgKF9NX2NfbG9j
YWxlX21lc3NhZ2VzICE9IF9TX2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2Fs
ZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX21lc3NhZ2VzLCBfX3MpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5tZXNzYWdlc19ieW5hbWUoKQogICAgICB7IH0KICAgIH07CgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2Ms
IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9j
YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp
LmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xv
YykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl
X2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg
ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl
OjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGln
aXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBf
X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2Mp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2Fs
bnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hh
clQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBl
PF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9j
YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp
LnRvbG93ZXIoX19jKTsgfQp9CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv
YmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3Nf
YmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFp
dHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlw
ZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19v
c3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1
Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0
PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3Rl
ZDoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11
dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7CiAgICAgIG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7
CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CgoK
ICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1
dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdl
dDsKCiAgICBwdWJsaWM6CiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAg
ICAgIGJvb2wKICAgICAgb3BlcmF0b3IhKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFp
bCgpOyB9CgogICAgICBpb3N0YXRlCiAgICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBf
X3N0YXRlID0gZ29vZGJpdCk7CgogICAgICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19z
dGF0ZSkKICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoK
ICAgICAgYm9vbAogICAgICBnb29kKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0
ZSgpID09IDA7IH0KCiAgICAgIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4g
KHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBmYWls
KCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWls
Yml0KSkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVy
biAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAg
IGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAg
IHZvaWQKICAgICAgZXhjZXB0aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAg
X01fZXhjZXB0aW9uID0gX19leGNlcHQ7CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVm
X3N0YXRlKTsKICAgICAgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhp
cy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoK
ICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPioKICAgICAgdGllKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIp
CiAgICAgIHsKICAgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0g
X01fdGllOwogICAgICAgIF9NX3RpZSA9IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsK
ICAgICAgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJk
YnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNv
bnN0IGJhc2ljX2lvcyYgX19yaHMpOwoKICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25z
dAogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxsX2luaXQpCiAgICAgICAgICB7CiAgICAgICAg
ICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcpOwogICAgICAgICAgICBfTV9maWxsX2luaXQg
PSB0cnVlOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfTV9maWxsOwogICAgICB9CgogICAg
ICBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNo
YXJfdHlwZSBfX29sZCA9IHRoaXMtPmZpbGwoKTsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAg
ICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29u
c3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19j
LCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFy
IF9fYykgY29uc3Q7CgogICAgcHJvdGVjdGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFz
ZSgpCiAgICAgIHsgfQoKICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29u
c3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAg
ICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0K
CiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwog
ICAgfTsKfQoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9z
LnRjYyIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9z
LnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNs
ZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkpCiAgICAg
ICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAgICAgZWxzZQogICAgICAgICAgX01f
c3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgaWYgKCh0aGlzLT5yZHN0
YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUo
ImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpy
ZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKICAgICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOwog
ICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVhcigpOwogICAgICByZXR1
cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoKCiAg
ICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX3NpemUgPD0gX1NfbG9jYWxfd29y
ZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5ldyBfV29yZHNbX19yaHMuX01fd29y
ZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhzLl9NX2NhbGxiYWNr
czsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOwogICAg
ICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3JkICE9IF9N
X2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmQ7CiAgICAg
ICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKCk7
CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kg
PCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhz
Ll9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAg
ICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwog
ICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAgICAgIF9NX3dvcmRfc2l6ZSA9IF9f
cmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOwogICAg
ICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhz
LnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsKICAgICAgdGhpcy0+
ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRp
b25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Om5hcnJvdyhj
aGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgewogICAgICBjaGFyIF9fcmV0
ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5cGUpKQogICAgICAg
IF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVsdCk7CiAgICAgIHJldHVybiBf
X3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBf
X2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3JldCA9IGNoYXJfdHlwZSgpOwogICAg
ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2ZjdHlw
ZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxlCiAgICBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAg
bG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jhc2U6OmltYnVlKF9fbG9j
KTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkg
IT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xvYyk7CiAgICAgIHJldHVy
biBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmluaXQoYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CgogICAgICBpb3NfYmFzZTo6
X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7CiAgICAgIF9N
X3RpZSA9IDA7CiMgMTU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lv
cy50Y2MiIDMKICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBm
YWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9
IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBl
PihfX2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9f
bG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2Zh
Y2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNl
dDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0g
MDsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01f
Zm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAg
ICAgICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi
YXNpY19pb3M8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90
PjsKfQojIDIwOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIg
MiAzCiMgNTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgNDUgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNp
Y19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4KICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0
c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
X19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz
PiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy
VCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hh
clQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVmIGN0eXBl
PF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVhbXNpemUg
X01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJl
YW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmluaXQoX19z
Yik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAgICAgdmly
dHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFtc2l6
ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsK
CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUm
ICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYp
KTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24pOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAgICAg
IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwoKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYg
X19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9hdCYgX19m
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX2Yp
OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBf
X3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBnZXQodm9p
ZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19jKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRo
aXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGlt
KTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5
cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRlbignXG4n
KSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0
cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK
ICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykp
OyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19uID0g
MSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBpbnRfdHlw
ZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJlYWQoY2hh
cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgcmVh
ZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0cmVhbV90
eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7CgogICAgICBw
b3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBz
ZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cob2ZmX3R5
cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBf
X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw
ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdzID0gZmFs
c2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAgcHJpdmF0
ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJU
JiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08
Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19p
biA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
biwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1Ry
YWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJu
IChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVh
bQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBwdWJs
aWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpw
b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlw
ZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgogICAgICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7
CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19vc3Ry
ZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3N0
cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdzKGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCgojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL2lzdHJlYW0udGNjIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2xvY2FsZSIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xv
Y2FsZSIgMwoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh
Y2V0cy50Y2MiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs
ZV9mYWNldHMudGNjIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIg
MSAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMwoKIyAxICIvdXNy
L2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVy
biAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIvdXNy
L2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgi
IDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNs
dWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAy
IDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5vOwoK
CmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIDsKIyAzNyAiL3Vzci9pbmNsdWRl
L2Vycm5vLmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAq
cHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsK
CgoKfQojIDY5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90Owoj
IDQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDIgMwojIDM5ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjIvY21hdGgiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAy
OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwu
aCIgMwpzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBjaGFyIF9fY1s4XTsgZG91YmxlIF9fZDsgfSBf
X2h1Z2VfdmFsID0geyB7IDAsIDAsIDAsIDAsIDAsIDAsIDB4ZjAsIDB4N2YgfSB9OwojIDYzICIv
dXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAzCnN0YXRpYyB1bmlvbiB7IHVuc2lnbmVkIGNo
YXIgX19jWzRdOyBmbG9hdCBfX2Y7IH0gX19odWdlX3ZhbGYgPSB7IHsgMCwgMCwgMHg4MCwgMHg3
ZiB9IH07CiMgNzUgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDMKc3RhdGljIHVuaW9u
IHsgdW5zaWduZWQgY2hhciBfX2NbMTJdOyBsb25nIGRvdWJsZSBfX2xkOyB9IF9faHVnZV92YWxs
ID0geyB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4ODAsIDB4ZmYsIDB4N2YsIDAsIDAgfSB9Owoj
IDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9u
YW4uaCIgMSAzCiMgNDUgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAzCnN0YXRpYyB1bmlvbiB7
IHVuc2lnbmVkIGNoYXIgX19jWzRdOyBmbG9hdCBfX2Q7IH0gX19uYW5fdW5pb24gPSB7IHsgMCwg
MCwgMHhjMCwgMHg3ZiB9IH07CiMgMzggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBk
b3VibGUgZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDYzICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEg
MwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGFj
b3MgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIDsKCmV4
dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXNpbiAoZG91
YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSA7IGV4dGVybiBkb3Vi
bGUgX19hdGFuIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGF0YW4yIChkb3VibGUgX195
LCBkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hdGFuMiAoZG91YmxlIF9feSwgZG91Ymxl
IF9feCkgOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUg
X19jb3MgKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUgX194KSA7IGV4
dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgdGFuIChkb3Vi
bGUgX194KSA7IGV4dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIHZv
aWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIDsg
ZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUg
Kl9fY29zeCkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIDsgZXh0ZXJu
IGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgc2luaCAoZG91Ymxl
IF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJs
ZSB0YW5oIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX190YW5oIChkb3VibGUgX194KSA7
CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2Fj
b3NoIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KSA7IGV4
dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAo
ZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gpIDsKCgoKCgpl
eHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3Vi
bGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRv
dWJsZSBfX2V4cDEwIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUg
X194KSA7IGV4dGVybiBkb3VibGUgX19wb3cxMCAoZG91YmxlIF9feCkgOwoKCgpleHRlcm4gZG91
YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsgZXh0ZXJuIGRvdWJsZSBf
X2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gZG91YmxlIGxk
ZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgOyBleHRlcm4gZG91YmxlIF9fbGRleHAg
KGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJs
ZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZyAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3Vi
bGUgbG9nMTAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194
KSA7CgoKZXh0ZXJuIGRvdWJsZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgOyBl
eHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIDsKCgoKZXh0
ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fZXhwbTEgKGRv
dWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KSA7IGV4dGVybiBk
b3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgbG9nYiAoZG91Ymxl
IF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCkgOwoKCgoKZXh0ZXJuIGRv
dWJsZSBleHAyIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194
KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2cyIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19s
b2cyIChkb3VibGUgX194KSA7CgoKCgoKCmV4dGVybiBkb3VibGUgcG93IChkb3VibGUgX194LCBk
b3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
IDsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3Nx
cnQgKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91
YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
IDsKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f
Y2JydCAoZG91YmxlIF9feCkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gp
IDsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGZh
YnMgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIDsKCgpl
eHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19mbG9vciAo
ZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSkgOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgoK
ZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgOwoKCmV4dGVybiBpbnQgX19maW5p
dGUgKGRvdWJsZSBfX3ZhbHVlKSA7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1
ZSkgOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgOwoKCmV4dGVybiBkb3Vi
bGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9fZHJlbSAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgpleHRlcm4gZG91YmxlIHNpZ25pZmljYW5kIChk
b3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkgOwoK
CgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRl
cm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVy
biBkb3VibGUgbmFuIChjb25zdCBjaGFyICpfX3RhZ2IpIDsgZXh0ZXJuIGRvdWJsZSBfX25hbiAo
Y29uc3QgY2hhciAqX190YWdiKSA7CgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3Zh
bHVlKSA7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSA7CgoKZXh0ZXJuIGRv
dWJsZSBqMCAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19qMCAoZG91YmxlKSA7CmV4dGVybiBk
b3VibGUgajEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgOwpleHRlcm4g
ZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91Ymxl
KSA7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJs
ZSkgOwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3Vi
bGUpIDsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3lu
IChpbnQsIGRvdWJsZSkgOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIDsgZXh0ZXJu
IGRvdWJsZSBfX2VyZiAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSA7IGV4
dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJs
ZSkgOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIDsKCgoKZXh0ZXJuIGRvdWJsZSB0
Z2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fdGdhbW1hIChkb3VibGUpIDsKCgoKCmV4
dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJs
ZSkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2Ft
cCkgOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7
CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f
cmludCAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUgX194
LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIDsKCmV4dGVybiBkb3VibGUgbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSA7
IGV4dGVybiBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgOwoKCgoKZXh0
ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIDsgZXh0ZXJuIGRvdWJsZSBf
X3NjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgOwoKCgpleHRlcm4gaW50IGlsb2diIChkb3Vi
bGUgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkgOwoKCgoKZXh0ZXJuIGRv
dWJsZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIDsgZXh0ZXJuIGRvdWJsZSBf
X3NjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgOwoKCgpleHRlcm4gZG91YmxlIG5l
YXJieWludCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUg
X194KSA7CgoKCmV4dGVybiBkb3VibGUgcm91bmQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJs
ZSBfX3JvdW5kIChkb3VibGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJsZSBf
X3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3RydW5jIChkb3VibGUgX194KSA7CgoKCgpleHRlcm4gZG91
YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgOyBleHRlcm4g
ZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSA7CgoK
CgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBpbnQg
X19scmludCAoZG91YmxlIF9feCkgOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnQgKGRvdWJs
ZSBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIDsKCgoK
ZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBpbnQgX19s
cm91bmQgKGRvdWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91Ymxl
IF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmQgKGRvdWJsZSBfX3gpIDsKCgoK
ZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3Vi
bGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4
IChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3VibGUg
X194LCBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSA7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSA7
CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkKICAgICA7CgoKZXh0
ZXJuIGludCBfX3NpZ25iaXQgKGRvdWJsZSBfX3ZhbHVlKQogICAgIDsKCgoKZXh0ZXJuIGRvdWJs
ZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIDsgZXh0ZXJuIGRvdWJs
ZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgOwojIDY0ICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZs
b2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gp
IDsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGF0YW5m
IChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJu
IGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRh
bjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBf
X3gpIDsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgc2lu
ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJu
IGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gp
IDsKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9h
dCAqX19jb3N4KSA7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19z
aW54LCBmbG9hdCAqX19jb3N4KSA7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194
KSA7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBmbG9hdCBzaW5o
ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpIDsKCmV4dGVy
biBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3RhbmhmIChmbG9hdCBf
X3gpIDsKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBf
X2Fjb3NoZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpIDsg
ZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBmbG9hdCBhdGFuaGYg
KGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hdGFuaGYgKGZsb2F0IF9feCkgOwoKCgoKCmV4
dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQg
X194KSA7CgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQg
X19leHAxMGYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQgX194KSA7
IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBmcmV4
cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSA7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAo
ZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gZmxvYXQgbGRleHBmIChmbG9h
dCBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194
LCBpbnQgX19leHBvbmVudCkgOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIDsgZXh0
ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxv
YXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZs
b2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIDsgZXh0ZXJuIGZsb2F0IF9fbW9k
ZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChm
bG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4g
ZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBf
X3gpIDsKCgpleHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19s
b2diZiAoZmxvYXQgX194KSA7CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgOyBl
eHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChm
bG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgOwoKCgoKCgpleHRl
cm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fcG93
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9f
eCkgOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBo
eXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIDsKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KSA7
IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNl
aWxmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgOwoKCmV4
dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9h
dCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0
IF9fZmxvb3JmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwg
ZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
OwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgOwoKCmV4dGVybiBpbnQg
X19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSA7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQg
X192YWx1ZSkgOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgOwoKCmV4dGVy
biBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fZHJl
bWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYg
KGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgOwoK
CgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJu
IGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCgoKZXh0ZXJuIGZs
b2F0IG5hbmYgKGNvbnN0IGNoYXIgKl9fdGFnYikgOyBleHRlcm4gZmxvYXQgX19uYW5mIChjb25z
dCBjaGFyICpfX3RhZ2IpIDsKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUp
IDsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIDsKCgpleHRlcm4gZmxvYXQg
ajBmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCBq
MWYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IGpu
ZiAoaW50LCBmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19qbmYgKGludCwgZmxvYXQpIDsKZXh0ZXJu
IGZsb2F0IHkwZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCkgOwpleHRlcm4g
ZmxvYXQgeTFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KSA7CmV4dGVybiBm
bG9hdCB5bmYgKGludCwgZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0KSA7
CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZs
b2F0KSA7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fZXJmY2Yg
KGZsb2F0KSA7CmV4dGVybiBmbG9hdCBsZ2FtbWFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19s
Z2FtbWFmIChmbG9hdCkgOwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpIDsgZXh0ZXJu
IGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIDsKCgoKCmV4dGVybiBmbG9hdCBnYW1tYWYgKGZsb2F0
KSA7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxn
YW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFm
X3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChm
bG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBm
bG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19u
ZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dh
cmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gZmxvYXQgX19uZXh0dG93
YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGZsb2F0IHJlbWFp
bmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYg
KGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9f
eCwgZmxvYXQgX19uKSA7IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBf
X24pIDsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIDsgZXh0
ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSA7CgoKCmV4dGVybiBpbnQg
aWxvZ2JmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSA7CgoK
CgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSA7IGV4dGVy
biBmbG9hdCBfX3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgOwoKCgpleHRlcm4g
ZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX25lYXJieWludGYg
KGZsb2F0IF9feCkgOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChmbG9hdCBfX3gpIDsgZXh0ZXJu
IGZsb2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxv
YXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194KSA7CgoKCgpleHRlcm4g
ZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIDsgZXh0ZXJu
IGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIDsKCgoK
CgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSA7IGV4dGVybiBsb25nIGludCBf
X2xyaW50ZiAoZmxvYXQgX194KSA7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGYgKGZsb2F0
IF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgOwoKCgpl
eHRlcm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSA7IGV4dGVybiBsb25nIGludCBfX2xy
b3VuZGYgKGZsb2F0IF9feCkgOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQg
X194KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgOwoKCgpl
eHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBf
X2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxv
YXQgX195KSA7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBl
eHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgoKZXh0ZXJuIGlu
dCBfX2ZwY2xhc3NpZnlmIChmbG9hdCBfX3ZhbHVlKQogICAgIDsKCgpleHRlcm4gaW50IF9fc2ln
bmJpdGYgKGZsb2F0IF9fdmFsdWUpCiAgICAgOwoKCgpleHRlcm4gZmxvYXQgZm1hZiAoZmxvYXQg
X194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSA7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIg
MwojIDk5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0
aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRl
cm4gbG9uZyBkb3VibGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19hY29zbCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwg
KGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBkb3Vi
bGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9u
ZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgOyBleHRl
cm4gbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194
KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4g
bG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJs
ZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9u
ZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194
KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRl
cm4gdm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxv
bmcgZG91YmxlICpfX2Nvc3gpIDsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIDsKCgoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhs
IChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91
YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIDsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4g
bG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwg
KGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2luaGwgKGxvbmcgZG91
YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSA7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KSA7CgoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEw
bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDEwbCAobG9uZyBk
b3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBfX3gp
IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQp
IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19l
eHBvbmVudCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwg
aW50IF9fZXhwb25lbnQpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25nIGRvdWJs
ZSBfX3gsIGludCBfX2V4cG9uZW50KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcg
ZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gp
IDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBk
b3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgOyBleHRl
cm4gbG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19p
cHRyKSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg
X19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAo
bG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJs
ZSBfX3gpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194KSA7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4g
bG9uZyBkb3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg
X19sb2cybCAobG9uZyBkb3VibGUgX194KSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3ds
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUg
X19wb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Nx
cnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlw
b3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2Jy
dGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKGxv
bmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUg
X194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19m
bG9vcmwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbW9kbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1v
ZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gaW50IF9f
aXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSA7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxv
bmcgZG91YmxlIF9fdmFsdWUpIDsKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBf
X3ZhbHVlKSA7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSA7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAobG9uZyBkb3Vi
bGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUg
X194KSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3B5c2lnbmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFu
bCAoY29uc3QgY2hhciAqX190YWdiKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX25hbmwgKGNvbnN0
IGNoYXIgKl9fdGFnYikgOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192
YWx1ZSkgOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2owbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9uZyBkb3VibGUp
IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBk
b3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2pubCAo
aW50LCBsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSkg
OyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRv
dWJsZSB5MWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBk
b3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgOyBleHRl
cm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIDsKCgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmbCAo
bG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSkgOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91
YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwg
KGxvbmcgZG91YmxlKSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJs
ZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRvdWJsZSkgOwoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1h
bF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2xnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgOwoKCgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg
X19yaW50bCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRl
cmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX25leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgpleHRl
cm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVt
YWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIDsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
bikgOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50
IF9fbikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGlu
dCBfX24pIDsKCgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4g
aW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBz
Y2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIDsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSA7CgoKCmV4dGVy
biBsb25nIGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRv
dWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3Vu
ZGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25n
IGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1bmNsIChsb25nIGRvdWJsZSBf
X3gpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9s
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgOwoKCgoKCgpl
eHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgaW50
IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50
bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9u
ZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBf
X3gpIDsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSA7CmV4dGVy
biBsb25nIGxvbmcgaW50IGxscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRv
dWJsZSBmZGltbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxv
bmcgZG91YmxlIF9fdmFsdWUpCiAgICAgOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9uZyBk
b3VibGUgX192YWx1ZSkKICAgICA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSA7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRv
dWJsZSBfX3opIDsKIyAxMDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDExMyAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMgMTU0ICIvdXNyL2luY2x1ZGUv
bWF0aC5oIiAzCmVudW0KICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBf
WkVSTywKCiAgICBGUF9TVUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjQwICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURf
LAogIF9YT1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoK
CmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjYzICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAzCnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAgIGludCB0eXBlOwogICAg
Y2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUg
cmV0dmFsOwogIH07CgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3QgX19leGNlcHRpb24gKl9f
ZXhjKSB0aHJvdyAoKTsKIyA0MTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDUyICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMiAzCiMgNzkgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2NtYXRoIiAzCm5hbWVzcGFjZSBzdGQKewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBfVHAgX19jbWF0aF9wb3dlcihfVHAsIHVuc2lnbmVkIGludCk7CgogIGlubGluZSBkb3Vi
bGUKICBhYnMoZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFicyhfX3gpOyB9Cgog
IGlubGluZSBmbG9hdAogIGFicyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNm
KF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWJzKGxvbmcgZG91YmxlIF9feCkKICB7
IHJldHVybiBfX2J1aWx0aW5fZmFic2woX194KTsgfQoKCiAgaW5saW5lIGZsb2F0CiAgYWNvcyhm
bG9hdCBfX3gpIHsgcmV0dXJuIDo6YWNvc2YoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphY29zOwoK
CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6
YWNvc2woX194KTsgfQoKCgoKCiAgdXNpbmcgOjphc2luOwoKCiAgaW5saW5lIGZsb2F0CiAgYXNp
bihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25n
IGRvdWJsZQogIGFzaW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFzaW5sKF9feCk7IH0K
CgoKCgogIHVzaW5nIDo6YXRhbjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194KSB7
IHJldHVybiA6OmF0YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhdGFu
KGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFubChfX3gpOyB9CgoKCgoKICB1c2luZyA6
OmF0YW4yOwoKCiAgaW5saW5lIGZsb2F0CiAgYXRhbjIoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsg
cmV0dXJuIDo6YXRhbjJmKF9feSwgX194KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBhdGFuMihsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFu
MmwoX195LCBfX3gpOyB9CgoKCgoKCiAgdXNpbmcgOjpjZWlsOwoKCiAgaW5saW5lIGZsb2F0CiAg
Y2VpbChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y2VpbGYoX194KTsgfQoKCgoKCgogIGlubGluZSBs
b25nIGRvdWJsZQogIGNlaWwobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNlaWxsKF9feCk7
IH0KCgoKCgogIHVzaW5nIDo6Y29zOwoKICBpbmxpbmUgZmxvYXQKICBjb3MoZmxvYXQgX194KQog
IHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
Y29zKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9Cgog
IHVzaW5nIDo6Y29zaDsKCgogIGlubGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7IHJldHVy
biA6OmNvc2hmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3NoKGxvbmcg
ZG91YmxlIF9feCkgeyByZXR1cm4gOjpjb3NobChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmV4cDsK
CgogIGlubGluZSBmbG9hdAogIGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9
CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1
cm4gOjpleHBsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6ZmFiczsKCiAgaW5saW5lIGZsb2F0CiAg
ZmFicyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KCiAgaW5s
aW5lIGxvbmcgZG91YmxlCiAgZmFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWls
dGluX2ZhYnNsKF9feCk7IH0KCiAgdXNpbmcgOjpmbG9vcjsKCgogIGlubGluZSBmbG9hdAogIGZs
b29yKGZsb2F0IF9feCkgeyByZXR1cm4gOjpmbG9vcmYoX194KTsgfQoKCgoKCgogIGlubGluZSBs
b25nIGRvdWJsZQogIGZsb29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwoX194
KTsgfQoKCgoKCiAgdXNpbmcgOjpmbW9kOwoKCiAgaW5saW5lIGZsb2F0CiAgZm1vZChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpmbW9kZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5s
aW5lIGxvbmcgZG91YmxlCiAgZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
eyByZXR1cm4gOjpmbW9kbChfX3gsIF9feSk7IH0KCgoKCgoKICB1c2luZyA6OmZyZXhwOwoKCiAg
aW5saW5lIGZsb2F0CiAgZnJleHAoZmxvYXQgX194LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6OmZy
ZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZyZXhwKGxv
bmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGwoX194LCBfX2V4cCk7
IH0KCgoKCgoKICB1c2luZyA6OmxkZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxvYXQg
X194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgoKCgoKCgog
IGlubGluZSBsb25nIGRvdWJsZQogIGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwKSB7
IHJldHVybiA6OmxkZXhwbChfX3gsIF9fZXhwKTsgfQoKCgoKCgogIHVzaW5nIDo6bG9nOwoKCiAg
aW5saW5lIGZsb2F0CiAgbG9nKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2dmKF9feCk7IH0KCgoK
CgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6
OmxvZ2woX194KTsgfQoKCgoKCiAgdXNpbmcgOjpsb2cxMDsKCgogIGlubGluZSBmbG9hdAogIGxv
ZzEwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2cxMGYoX194KTsgfQoKCgoKCgogIGlubGluZSBs
b25nIGRvdWJsZQogIGxvZzEwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2cxMGwoX194
KTsgfQoKCgoKCiAgdXNpbmcgOjptb2RmOwoKCiAgaW5saW5lIGZsb2F0CiAgbW9kZihmbG9hdCBf
X3gsIGZsb2F0KiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CiMgMzc1
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMwogIGlubGluZSBsb25nIGRvdWJs
ZQogIG1vZGYobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSogX19pcHRyKSB7IHJldHVybiA6
Om1vZGZsKF9feCwgX19pcHRyKTsgfQojIDM4OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
Y21hdGgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bv
d19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAg
ICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6IF9fY21hdGhf
cG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2luZyA6OnBvdzsKCgogIGlubGluZSBmbG9hdAog
IHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpwb3dmKF9feCwgX195KTsgfQoK
CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCgoKCgoKICBpbmxpbmUgZG91
YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kpCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9f
eCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBpbnQgX19uKQogIHsg
cmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
cG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194
LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBpbmxpbmUgZmxvYXQKICBzaW4oZmxvYXQgX194
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9
CgogIHVzaW5nIDo6c2luaDsKCgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQgX194KSB7IHJl
dHVybiA6OnNpbmhmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5obChfX3gpOyB9CgoKCgoKICB1c2luZyA6OnNx
cnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp
bl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNxcnQobG9uZyBkb3VibGUg
X194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9CgogIHVzaW5nIDo6dGFuOwoK
CiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5mKF9feCk7IH0K
CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVy
biA6OnRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjp0YW5oOwoKCiAgaW5saW5lIGZsb2F0CiAg
dGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuaGYoX194KTsgfQoKCgoKCgogIGlubGluZSBs
b25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7
IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiAo
c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNp
emVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2Zw
Y2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg
IF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNp
emVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAo
ZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19maW5pdGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2luZihfVHAgX19mKSB7IHJl
dHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc2luZmYgKF9fZikgOiBz
aXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc2luZiAoX19mKSA6IF9faXNpbmZs
IChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVy
ZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQp
ID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19p
c25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1hbChfVHAgX19mKSB7IHJldHVybiAoKHNpemVv
ZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2Yg
KF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNz
aWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9f
ZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRmIChfX2YpIDogc2l6ZW9mIChfX2YpID09
IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAoX19mKSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzZ3JlYXRl
cihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiAoICh7IHR5cGVvZihfX2YxKSBfX3gg
PSAoX19mMSk7IHR5cGVvZihfX2YyKSBfX3kgPSAoX19mMik7ICEoICh7IHR5cGVvZihfX3gpIF9f
dSA9IChfX3gpOyB0eXBlb2YoX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXpl
b2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9m
IChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0g
RlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlm
IChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAo
X192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+IF9feTsg
fSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVf
aXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuICggKHsgdHlw
ZW9mKF9fZjEpIF9feCA9IChfX2YxKTsgdHlwZW9mKF9fZjIpIF9feSA9IChfX2YyKTsgISggKHsg
dHlwZW9mKF9feCkgX191ID0gKF9feCk7IHR5cGVvZihfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9m
IChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAo
X191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3Np
ZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/
IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8g
X19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkg
JiYgX194ID49IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQK
ICAgICBfX2NhcHR1cmVfaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gKCAoeyB0
eXBlb2YoX19mMSkgX194ID0gKF9fZjEpOyB0eXBlb2YoX19mMikgX195ID0gKF9fZjIpOyAhKCAo
eyB0eXBlb2YoX194KSBfX3UgPSAoX194KTsgdHlwZW9mKF9feSkgX192ID0gKF9feSk7IChzaXpl
b2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9m
IChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFz
c2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQp
ID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkg
PyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0p
KSAmJiBfX3ggPCBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50
CiAgICAgX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJl
dHVybiAoICh7IHR5cGVvZihfX2YxKSBfX3ggPSAoX19mMSk7IHR5cGVvZihfX2YyKSBfX3kgPSAo
X19mMik7ICEoICh7IHR5cGVvZihfX3gpIF9fdSA9IChfX3gpOyB0eXBlb2YoX195KSBfX3YgPSAo
X195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9f
dSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3Up
IDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6
ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVv
ZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09
IEZQX05BTjsgfSkpICYmIF9feCA8PSBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBf
X2YyKQogICAgIHsgcmV0dXJuICggKHsgdHlwZW9mKF9fZjEpIF9feCA9IChfX2YxKTsgdHlwZW9m
KF9fZjIpIF9feSA9IChfX2YyKTsgISggKHsgdHlwZW9mKF9feCkgX191ID0gKF9feCk7IHR5cGVv
ZihfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19m
cGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zw
Y2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVv
ZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2Yg
KF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNz
aWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgKF9feCA8IF9feSB8fCBfX3kgPCBfX3gpOyB9
KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9p
c3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKCAoeyB0eXBlb2Yo
X19mMSkgX191ID0gKF9fZjEpOyB0eXBlb2YoX19mMikgX192ID0gKF9fZjIpOyAoc2l6ZW9mIChf
X3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191
KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnls
IChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f
ZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m
cGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSk7IH0K
fQojIDU4MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKbmFtZXNwYWNlIF9f
Z251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBmcGNsYXNzaWZ5
KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9mcGNsYXNzaWZ5KF9fZik7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiBf
X2NhcHR1cmVfaXNmaW5pdGUoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bnQKICAgIGlzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2luZihfX2YpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNuYW4oX1RwIF9fZikgeyByZXR1
cm4gX19jYXB0dXJlX2lzbmFuKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW50CiAgICBpc25vcm1hbChfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNub3JtYWwoX19m
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIHNpZ25iaXQoX1RwIF9f
ZikgeyByZXR1cm4gX19jYXB0dXJlX3NpZ25iaXQoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbnQKICAgIGlzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJu
IF9fY2FwdHVyZV9pc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXJlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7
IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX19mMSwgX19mMik7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xlc3MoX1RwIF9fZjEsIF9UcCBfX2YyKSB7
IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAg
eyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9f
ZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzZ3JlYXRlcihfX2YxLCBfX2YyKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzdW5vcmRlcmVkKF9UcCBfX2Yx
LCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc3Vub3JkZXJlZChfX2YxLCBfX2Yy
KTsgfQp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmZwY2xhc3NpZnk7CiAg
dXNpbmcgX19nbnVfY3h4Ojppc2Zpbml0ZTsKICB1c2luZyBfX2dudV9jeHg6OmlzaW5mOwogIHVz
aW5nIF9fZ251X2N4eDo6aXNuYW47CiAgdXNpbmcgX19nbnVfY3h4Ojppc25vcm1hbDsKICB1c2lu
ZyBfX2dudV9jeHg6OnNpZ25iaXQ7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dyZWF0ZXI7CiAgdXNp
bmcgX19nbnVfY3h4Ojppc2dyZWF0ZXJlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzczsK
ICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2VxdWFsOwogIHVzaW5nIF9fZ251X2N4eDo6aXNsZXNz
Z3JlYXRlcjsKICB1c2luZyBfX2dudV9jeHg6OmlzdW5vcmRlcmVkOwp9CgoKCgojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvY21hdGgudGNjIiAxIDMKIyAzNSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBfX2NtYXRoX3Bvd2VyKF9UcCBfX3gsIHVu
c2lnbmVkIGludCBfX24pCiAgICB7CiAgICAgIF9UcCBfX3kgPSBfX24gJSAyID8gX194IDogMTsK
CiAgICAgIHdoaWxlIChfX24gPj49IDEpCiAgICAgICAgewogICAgICAgICAgX194ID0gX194ICog
X194OwogICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAgICAgICAgIF9feSA9IF9feSAqIF9feDsK
ICAgICAgICB9CgogICAgICByZXR1cm4gX195OwogICAgfQp9CiMgNjU1ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9jbWF0aCIgMiAzCiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs
YXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0
IGxvY2FsZSYgX19vdGhlcikgY29uc3QKICAgIHsKICAgICAgX0ltcGwqIF9fdG1wID0gbmV3IF9J
bXBsKCpfTV9pbXBsLCAxKTsKICAgICAgX190bXAtPl9NX3JlcGxhY2VfZmFjZXQoX19vdGhlci5f
TV9pbXBsLCAmX0ZhY2V0OjppZCk7CiAgICAgIHJldHVybiBsb2NhbGUoX190bXApOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJvb2wKICAgIGxvY2FsZTo6b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0CiAg
ICB7CiAgICAgIHR5cGVkZWYgc3RkOjpjb2xsYXRlPF9DaGFyVD4gX19jb2xsYXRlX3R5cGU7CiAg
ICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlJiBfX2NvbGxhdGUgPSB1c2VfZmFjZXQ8X19jb2xsYXRl
X3R5cGU+KCp0aGlzKTsKICAgICAgcmV0dXJuIChfX2NvbGxhdGUuY29tcGFyZShfX3MxLmRhdGEo
KSwgX19zMS5kYXRhKCkgKyBfX3MxLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fczIuZGF0YSgpLCBfX3MyLmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVz
ZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBzaXplX3QgX19pID0gX0Zh
Y2V0OjppZC5fTV9pZCgpOwogICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5f
TV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIGlmICghKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2Zh
Y2V0c19zaXplICYmIF9fZmFjZXRzW19faV0pKQogICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsK
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9GYWNldCY+KCpfX2ZhY2V0c1tfX2ldKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0
KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9G
YWNldDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2Mu
X01faW1wbC0+X01fZmFjZXRzOwogICAgICByZXR1cm4gKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9N
X2ZhY2V0c19zaXplICYmIF9fZmFjZXRzW19faV0pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0
ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJjKSBjb25zdAogICAgewogICAgICB0eXBlZGVm
IGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgY29uc3QgbG9jYWxlIF9f
bG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBudW1wdW5jdDxf
Q2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKICAg
ICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29u
c3QgY2hhcl90eXBlIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7CiAgICAgIGludCBfX3Bv
cyA9IDA7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGlmICgoX190cmFpdHNf
dHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykp
CiAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMg
Kz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAg
ICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBf
X3plcm8gPSBfX2N0eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAgYm9vbCBfX2Zv
dW5kX3plcm8gPSBmYWxzZTsKICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196
ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX2MgPSAqKCsrX19i
ZWcpOwogICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIGlmIChf
X2ZvdW5kX3plcm8pCiAgICAgICAgewogICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3pl
cm9dOwogICAgICAgICAgKytfX3BvczsKICAgICAgICB9CgoKICAgICAgY29uc3Qgc2l6ZV90IF9f
bGVuID0gX01fRSAtIF9NX3plcm8gKyAxOwogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX19sZW5d
OwogICAgICBfX2N0eXBlLndpZGVuKF9TX2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9t
cyk7CiAgICAgIGJvb2wgX19mb3VuZF9kZWMgPSBmYWxzZTsKICAgICAgYm9vbCBfX2ZvdW5kX3Nj
aSA9IGZhbHNlOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19kZWMgPSBfX25wLmRlY2ltYWxfcG9p
bnQoKTsKCiAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcg
X19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5n
ID0gX19ncm91cGluZy5zaXplKCk7CiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25z
dCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsKCiAgICAgIHdoaWxlIChf
X2JlZyAhPSBfX2VuZCkKICAgICAgICB7CgogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3Ag
PSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCAxMCwgX19jKTsKCgogICAgICAgICAgaWYg
KF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUoKSkpCiAgICAgICAgICAg
IHsKCiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRv
bXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAg
ICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9f
dHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApCiAgICAgICAgICAgICAgICAgICAmJiBfX2NoZWNr
X2dyb3VwaW5nICYmICFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
aWYgKF9fc2VwX3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3Vu
ZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAg
ICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl
IGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fZGVjKSAmJiAhX19mb3VuZF9kZWMpCiAgICAg
ICAgICAgIHsKCgoKICAgICAgICAgICAgICBpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAg
ICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2Vw
X3Bvcyk7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gJy4n
OwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF9k
ZWMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmICgoX190cmFpdHNfdHlw
ZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9lXSkKICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0
c190eXBlOjplcShfX2MsIF9fd2F0b21zW19NX0VdKSkKICAgICAgICAgICAgICAgICAgICYmICFf
X2ZvdW5kX3NjaSAmJiBfX3BvcykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICArK19fcG9z
OwogICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAg
ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKCgogICAgICAgICAgICAgIGlmIChfX3RyYWl0
c190eXBlOjplcShfX2MsIF9fcGx1cykKICAgICAgICAgICAgICAgICAgfHwgX190cmFpdHNfdHlw
ZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
KytfX3BvczsKICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywg
Y2hhcigpKTsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBfX2ZvdW5kX3NjaSA9IHRydWU7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGVsc2UKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9f
Y2hlY2tfZ3JvdXBpbmcgJiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAg
ICAgICAgIGlmICghX19mb3VuZF9kZWMpCiAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0g
c3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3Jv
dXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpCiAgICAgICAgICAgIF9fZXJyIHw9
IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigpOwog
ICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJp
dDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjoKICAgIF9NX2V4dHJhY3RfaW50KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYg
Y2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19s
b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9D
aGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAg
ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFz
ZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAg
ICAgICBfX2Jhc2UgPSA4OwogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6
aGV4KQogICAgICAgIF9fYmFzZSA9IDE2OwogICAgICBlbHNlCiAgICAgICAgX19iYXNlID0gMTA7
CgoKICAgICAgaW50IF9fcG9zID0gMDsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAg
ICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29u
c3QgY2hhcl90eXBlIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7CgogICAgICBpZiAoKF9f
dHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9f
bWludXMpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAg
X194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19wb3M7
CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBjaGFy
X3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSBfX3ggPSBfX2N0eXBlLndpZGVuKCd4Jyk7CiAgICAgIGNvbnN0IGNoYXJf
dHlwZSBfX1ggPSBfX2N0eXBlLndpZGVuKCdYJyk7CiAgICAgIGlmIChfX2Jhc2UgPT0gMTApCiAg
ICAgICAgewogICAgICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAgICAgIHdo
aWxlIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAg
IF9fZm91bmRfemVybyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2ZvdW5k
X3plcm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01f
emVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBpZiAoX19iYXNlZmll
bGQgPT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKChfX3RyYWl0
c190eXBlOjplcShfX2MsIF9feCkKICAgICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190
eXBlOjplcShfX2MsIF9fWCkpCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2JlZyAhPSBfX2Vu
ZCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfX3h0cmMgKz0g
X19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICAgICAgKytfX3Bv
czsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg
ICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSA4OwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpCiAg
ICAgICAgewogICAgICAgICAgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBf
X2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19h
dG9tc1tfTV96ZXJvXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9
ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9f
eCkgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAmJiBf
X2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX194dHJj
ICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAgKytfX3Bv
czsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgc2l6ZV90IF9fbGVuOwogICAgICBpZiAo
X19iYXNlID09IDE2KQogICAgICAgIF9fbGVuID0gX01fc2l6ZTsKICAgICAgZWxzZQogICAgICAg
IF9fbGVuID0gX19iYXNlOwoKCiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfTV9zaXplXTsKICAg
ICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRvbXMpOwog
ICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBp
bmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19jaGVja19ncm91cGluZyA9IF9fZ3Jv
dXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90
eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBf
X2VuZCkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRz
X3R5cGU6OmZpbmQoX193YXRvbXMsIF9fbGVuLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYm
ICFfX3RyYWl0c190eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAg
ICAgICsrX19wb3M7CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNf
dHlwZTo6ZXEoX19jLCBfX3NlcCkgJiYgX19jaGVja19ncm91cGluZykKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3Mp
OwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICBfX2Mg
PSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKCiAgICAgIGlm
IChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsK
CiAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bv
cyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRf
Z3JvdXBpbmcpKQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAg
ICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg
IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgIHsKCiAgICAgIGlmICgh
KF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQogICAgICAgIHsKCgogICAgICAg
ICAgc3RyaW5nIF9feHRyYzsKICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfX2JlZyA9
IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNl
KTsKCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgICAgICBfX2NvbnZlcnRfdG9f
dihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAg
ICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX191bCA8PSAxKQogICAg
ICAgICAgICBfX3YgPSBfX3VsOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2VyciB8PSBp
b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAg
ICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgICAgIGxv
Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hh
clQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAg
ICBjb25zdCBfX3N0cmluZ190eXBlIF9fdHJ1ZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgICAg
IGNvbnN0IF9fc3RyaW5nX3R5cGUgX19mYWxzZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9fdHJ1ZXMgPSBfX3RydWUuY19zdHIoKTsKICAgICAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX19mYWxzZXMgPSBfX2ZhbHNlLmNfc3RyKCk7CiAgICAgICAgICBjb25z
dCBzaXplX3QgX190cnVlbiA9IF9fdHJ1ZS5zaXplKCkgLSAxOwogICAgICAgICAgY29uc3Qgc2l6
ZV90IF9fZmFsc2VuID0gX19mYWxzZS5zaXplKCkgLSAxOwoKICAgICAgICAgIGZvciAoc2l6ZV90
IF9fbiA9IDA7IF9fYmVnICE9IF9fZW5kOyArK19fbikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYg
PSBfX24gPD0gX19mYWxzZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9fdHJhaXRz
X3R5cGU6OmVxKF9fYywgX19mYWxzZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAgICAgICBib29s
IF9fdGVzdHQgPSBfX24gPD0gX190cnVlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g
X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3RydWVzW19fbl0pIDogZmFsc2U7CiAgICAgICAgICAg
ICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYg
X19uID09IF9fZmFsc2VuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3Yg
PSAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9fbiA9PSBfX3RydWVuKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBfX3YgPSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5k
KQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICAgIH0KICAgICAg
cmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAg
ICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0g
X01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2Up
OwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19s
b2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf
Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwog
ICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3Vs
OwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2Nf
bG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQog
ICAgICAgICAgJiYgX191bCA8PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1heCgp
KQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsKICAgICAg
ZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7
CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01f
ZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwog
ICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0
cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJy
ICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRz
PHVuc2lnbmVkIGludD46Om1heCgpKQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxv
bmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFz
ZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf
X3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu
SXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUg
X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3Ry
aW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2lu
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29u
dmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNl
KTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxv
bmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQg
X19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3Ry
KCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0
cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9l
eHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9f
Y29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAg
ICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoK
ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29u
c3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwog
ICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg
X194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIs
IF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D
aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAg
IF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRy
Yy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5
cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlw
ZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0g
X19pby5mbGFncygpOwogICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93
cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
aW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxh
Z3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFz
ZSkpOwoKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcg
PSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz
ZSk7CgoKICAgICAgX19pby5mbGFncyhfX2ZtdCk7CgogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7
CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19s
b2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQog
ICAgICAgIF9fdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fdWwpOwogICAgICBlbHNlCiAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg
IH0KIyA2MTggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50
Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxf
Q2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBp
b3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAg
ICAgICAgICBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCiAgICAgICAgY29uc3QgaW50IF9f
bWF4X2RpZ2l0cyA9IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCArIDE7CiAgICAg
ICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgICBpZiAoX19w
cmVjID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKSkKICAgICAgICAgIF9f
cHJlYyA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cyk7CgoKICAgICAgICBj
aGFyIF9fZmJ1ZlsxNl07CgoKICAgICAgICBpbnQgX19sZW47CgoKCiAgICAgICAgaW50IF9fY3Nf
c2l6ZSA9IF9fbWF4X2RpZ2l0cyAqIDM7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0
PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwoKICAgICAgICBjb25zdCBib29s
IF9fZnAgPSBfU19mb3JtYXRfZmxvYXQoX19pbywgX19mYnVmLCBfX21vZCwgX19wcmVjKTsKICAg
ICAgICBpZiAoX19mcCkKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBf
X2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9TX2NfbG9jYWxlLCBfX3ByZWMpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19j
b252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7
CgoKICAgICAgICBpZiAoX19sZW4gPj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAg
ICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxj
aGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgICAgICAgaWYgKF9fZnAp
CiAgICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwg
X19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2Nf
bG9jYWxlLCBfX3ByZWMpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19sZW4gPSBf
X2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KIyA2
ODEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMK
ICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9f
bGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ
dGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAg
bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfaW50KF9PdXRJdGVy
IF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCgog
ICAgICAgIGNoYXIgX19mYnVmWzE2XTsKICAgICAgICBfU19mb3JtYXRfaW50KF9faW8sIF9fZmJ1
ZiwgX19tb2QsIF9fbW9kbCk7CgoKICAgICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgICAg
Y2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6
ZSkpOwogICAgICAgIGludCBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXpl
LCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2Nf
bG9jYWxlKTsKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAg
ICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIF9f
bGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgICAg
fQoKCgoKCgogICAgICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9f
Y3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog
ICAgX01fd2lkZW5fZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9f
ZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAg
IHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgoKICAg
ICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8
X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAg
ICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp
emVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNf
Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4g
KiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgog
ICAgICBjb25zdCBfQ2hhclQqIF9fcDsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19u
cCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBpZiAoX19wID0g
X190cmFpdHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRlbignLicpKSkKICAg
ICAgICBfX3dzW19fcCAtIF9fd3NdID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CgoKCgogICAgICBj
b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgaW9zX2Jhc2U6
OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVs
ZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFy
VCogX19wMjsKICAgICAgICAgIGludCBfX2RlY2xlbiA9IF9fcCA/IF9fcCAtIF9fd3MgOiBfX2xl
bjsKICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19ucC50aG91c2FuZHNf
c2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSArIF9f
Z3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MsIF9f
d3MgKyBfX2RlY2xlbik7CiAgICAgICAgICBpbnQgX19uZXdsZW4gPSBfX3AyIC0gX193czI7CgoK
ICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3RyYWl0c190
eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgICAgICAgICAgICAgX19u
ZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xlbjsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBfX3dz
ID0gX193czI7CiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVuOwogICAgICAgIH0KCiAgICAgIHJl
dHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy
CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVuX2ludChfT3V0SXRl
ciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAg
ICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAgICBjb25zdCBsb2NhbGUgX19s
b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFyVCogX193cyA9IHN0
YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9f
bGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp
bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsKICAgICAgX19jdHlw
ZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNvbnN0IG51bXB1bmN0
PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAg
ICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGNvbnN0
IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl
OjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgoKCiAg
ICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkg
JiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3Nf
YmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMTsKICAg
ICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsK
ICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwogICAgICAgICAgICAg
IH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19hZGRfZ3JvdXBpbmco
X193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVuKTsKICAgICAgICAg
IF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwog
ICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9pbnNlcnQo
X091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJU
KiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRl
ZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9f
dyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFy
VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYg
KF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAg
ICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywgX19maWxsLCBfX3dz
MiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cp
OwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7
CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAg
ICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAg
IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9f
ZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9f
cywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNl
CiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmlu
Z190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAg
IGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJU
PiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwogICAgICAgICAgaWYg
KF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgZWxz
ZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgX19zID0g
X01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwgX19uYW1lLnNpemUo
KSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No
YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lv
LCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZl
cnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51
bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192
KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1
JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog
ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGws
IGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9f
YiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0
SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5
cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7
IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf
T3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNv
bnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFy
KCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg
ICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0
KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwg
X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hh
cl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAg
ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJh
c2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVw
cGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbGFncyAm
IF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKICAgICAgdHJ5
CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2Zp
bGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFn
cyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAgICAgICAgIF9faW8u
ZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBf
X3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBf
X3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19iZWcg
PSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3N0cik7
CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdp
dHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs
b2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg
ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5jX3N0cigpOwogICAg
ICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkgKyAxLCBjaGFyKCks
IF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1NfY19s
b2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVm
IG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9u
ZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0eXBlZGVmIG1vbmV5
X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6
ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j
KCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90
cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0
PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlw
ZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY29uc3QgbW9uZXlf
YmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7
CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwgPyBfX21wdC5wb3Np
dGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
X19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX25lZ19zaWdu
ID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICBjb25zdCBj
aGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7
CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5n
KCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsKCiAgICAg
IHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwoKICAgICAg
Ym9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRlY2ZvdW5kID0gZmFs
c2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAgY2hhcl90eXBlIF9f
YyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl
PihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAoaW50IF9faSA9IDA7
IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsrX19pKQogICAgICAg
IHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtf
X2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAo
X19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgICAgICAgICB8
fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAgICAgICAgICB8fCAo
KHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFzZTo6bm9uZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAgICAgICAgICAgICAg
ewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9
IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwogICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wuc2l6ZSgpOwogICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBf
X2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAg
ICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5mbGFncygpICYgaW9z
X2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAgICAgICAgICAgaWYg
KF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAgICAgICAgICAgICAg
ICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nf
c2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19uZWdf
c2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
X19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19f
YmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fYyA9
PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsr
X19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
X19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAg
ICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6
dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYmICFfX3Rlc3RkZWNm
b3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19zZXApKQogICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19kKQog
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91
cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz
dGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19n
cm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19z
ZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgogICAgICAgICAg
ICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAgICAgaWYgKF9faSAh
PSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQog
ICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlmIChfX3NpZ24uc2l6
ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpZ24uc2l6
ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBmb3IgKDsgX19jICE9
IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9
IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19i
ZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAgIF9fdGVzdHZhbGlk
ID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19j
dHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShfX3RlbXBfdW5pdHMu
YmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24gPT0gX19uZWdfc2ln
bikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5iZWdpbigpLCBfX2N0
eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSAmJiBfX2dyb3Vw
aW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGlu
ZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0g
ZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlkIHx8ICFfX3RlbXBf
dW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBl
bHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9f
YmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19w
dXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg
X19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAg
IGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9D
aGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAg
ICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9fbGVuID0gX19jb252
ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgIGlmIChfX2xlbiA+
PSBfX2NzX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwog
ICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nf
c2l6ZSkpOwogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6
ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1NfY19sb2NhbGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3Np
emUpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwogICAg
ICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1dChf
X3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlf
cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9f
aW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qg
c3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jh
c2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihf
X2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9f
bW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9u
ZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19t
b25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNl
X2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg
X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25z
dCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1vbmV5X2Jhc2U6OnBh
dHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlmICgqX19iZWcgIT0g
X19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9f
bXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9
X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwog
ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9f
bXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9
X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwog
ICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBfX2N0eXBlLnNjYW5f
bm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBpZiAoX19iZWcgIT0g
X19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19yZXM7CiAgICAgICAg
ICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1i
b2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CgoKICAgICAgICAg
IGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0cygpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdpdHMoKTsKICAgICAg
ICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgY2hh
cl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAg
ICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMs
IF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigp
LCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg
ICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAg
IGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAgICAgICAgICAgICAg
ICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgICAgICAgICAgICAg
ICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywgX196ZXJvKTsKICAg
ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAg
ICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5n
KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBm
Lmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2lu
dGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwogICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7CiAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOwog
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19iZWcpICogMjsKICAg
ICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwog
ICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3JvdXBpbmcoX193czIs
IF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFs
dWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJp
bmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpb3NfYmFz
ZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwog
ICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgp
OwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkg
PyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpcGFkID0gX19mID09
IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAgICAgICAgIGZvciAo
aW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
cGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAg
ICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFn
cygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9f
c3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9u
ZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkpCiAg
ICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CiAgICAgICAgICAg
ICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAgICAgICAgICAgaWYg
KF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193
aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKICAgICAgICAg
ICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3Ry
aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19zaWdu
LnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fc2lnbi5iZWdp
bigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7
CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAgICBfX3Jlcy5hcHBl
bmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVsc2UKCiAgICAgICAg
ICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2Zp
bGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAgICAgIH0KCgogICAg
ICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykK
ICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAgICBfX2lvLndpZHRo
KDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVf
Z2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4g
dGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9D
aGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0
bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8
X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg
X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3Qg
X19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9y
IChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJy
OyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9ybWF0W19faV07CiAg
ICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2Mg
PSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAg
ICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2Mg
PT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsK
ICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3Nb
MTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5c19hYmJy
ZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVn
LCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlz
Mls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIpOwogICAgICAgICAg
ICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2Rh
eXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAg
ICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhz
MVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9u
dGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9f
dG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl
ICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMyWzEyXTsK
ICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsKICAgICAgICAgICAg
ICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRo
czIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoKICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9N
X2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3Zp
YV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj
dF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9
ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr
IDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19l
bmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywg
X19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2Jl
ZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAg
ICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4
dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwgMiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICBpZiAo
X19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAgICAgICAgICAgICsr
X19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU0iOwogICAgICAg
ICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3djcyk7CiAgICAgICAg
ICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1MnOgoKICAgICAg
ICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9zZWMsIDAs
IDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndCc6CiAgICAg
ICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcdCcpCiAgICAg
ICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVI
OiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwg
X193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj
YXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXRlc1syXTsK
ICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CiAgICAgICAg
ICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kYXRlc1sw
XSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWCc6Cgog
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07CiAgICAgICAgICAg
ICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoKICAgICAgICAgICAg
ICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95ZWFyLCAwLCA5OSwg
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1knOgoKICAgICAgICAg
ICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIDQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAg
ICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0g
X19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh
c2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBw
ZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
aW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBf
X2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190aW1l
cHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSBf
X2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09
IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0n
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19jdHlwZS53aWRlbign
KycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwg
NTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUs
IF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAgICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAg
ICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICAgICAgICAg
ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
dm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShp
dGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAg
ICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kg
PSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVl
OwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19l
bmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6
ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJy
b3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsK
ICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgaW50
IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAgaWYgKF9fbWluIDw9
IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19tZW1iZXIgPSBfX3Zh
bHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAg
ICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICgh
X190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAog
ICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90
eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAg
IHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBpbnQqIF9f
bWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkg
KiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKICAgICAgc2l6ZV90
IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNvbnN0IGNo
YXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKCiAgICAgIGZv
ciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQogICAgICAgIGlm
IChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVz
KytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAgICAgIHsKCiAgICAg
ICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAw
OyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21pbmxlbiA9IG1pbihf
X21pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChfX3BvcyA8IF9fbWlu
bGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3Bv
czsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGZvciAoc2l6
ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2kzXV07CiAg
ICAgICAgICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAgICAgICAgICAgICAg
ICAgICBfX21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsK
ICAgICAgICB9CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAgIHsKCiAgICAgICAg
ICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBjb25zdCBzaXplX3Qg
X19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgIHdoaWxlIChf
X3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVn
KQogICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlmIChfX2xlbiA9PSBf
X3BvcykKICAgICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAg
ICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAg
IGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv
YygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBl
PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9f
d2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt
ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193
Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUgX19sb2Mg
PSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg
X19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu
SXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg
ewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAg
bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBj
b25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlh
dGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShf
X2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBp
ZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5
cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3RwLl9NX2RheXMoX19k
YXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19kYXlzW19fdG1wd2Rh
eV07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsK
CiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0g
X19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAg
ICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAh
PSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
ICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV93ZGF5
ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK
ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVy
X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jh
c2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7
CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNv
bnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9NX21vbnRoc19hYmJy
ZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAgX01fZXh0cmFjdF9u
YW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19lcnIpOwoKCgoKCgoK
ICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBfX3Ry
YWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAgICAgIF9fdHAuX01f
bW9udGhzKF9fbW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19t
b250aHNbX190bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQog
ICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRz
X3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVu
ICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10g
PT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAg
ICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6
ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAg
X190bS0+dG1fbW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYgKF9fYmVnID09IF9f
ZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfeWVh
cihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg
ewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxf
Q2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAg
ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3Ry
aW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBf
X2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9f
ZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19i
ZWcpOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IDIgfHwgX19p
ID09IDQpCiAgICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICBfX2NvbnZlcnRf
dG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgICAg
ICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0g
MTkwMDsKICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50PihfX2wp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGlt
ZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl
JiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNvbnN0IF9DaGFyVCog
X19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xv
YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9f
ZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVn
LCAwKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAgICAgICAgY2hhciBf
X21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAgICAgICAgICAgICBf
X2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAgICsrX19iZWc7CiAg
ICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fZm9y
bWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAgICAgKytfX2Jl
ZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf
X2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19wdXQoX19zLCBfX2lv
LCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxf
Q2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f
aW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwg
Y2hhciBfX21vZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2Mo
KTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0g
dXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IHNp
emVfdCBfX21heGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0KICAgICAgICBzdGF0
aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICog
X19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwogICAgICBfX2ZtdFsw
XSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAgICAgICB7CiAgICAg
ICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0gPSBjaGFyX3R5cGUo
KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9f
bW9kOwogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzNdID0g
Y2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19yZXMsIF9fbWF4bGVu
LCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcl90
eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19s
ZW47ICsrX19pLCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsKICAgICAgcmV0dXJu
IF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNv
bGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBj
b25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
c2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBf
Q2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBhcmUo
Y29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgIHsKICAg
ICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAgICAgY29uc3Qgc3Ry
aW5nX3R5cGUgX190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9NX2NvbXBhcmUoX19v
bmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0
ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9D
aGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xv
KSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4o
X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAgICAgIHNpemVfdCBf
X3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAgIGlmIChfX3JlcyA+
PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAgICBzdGF0aWNfY2Fz
dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fcmVzICsgMSkp
KTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsgMSk7CiAgICAgICAg
fQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9faGFzaChjb25z
dCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgdW5z
aWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX2xvKQog
ICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAgICAgICAgICAgICAg
ICAgICAoX192YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3
KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBj
aGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg
ICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7CgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9tX3Yo
Y2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10LAogICAgICAg
ICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0x
KQogICAgewogICAgICBpbnQgX19yZXQ7CiAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxv
Y2FsZShfX0xDX0FMTCwgMCkpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsICJDIik7CiAgICAg
IGlmIChfX3ByZWMgPj0gMCkKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUs
IF9fZm10LCBfX3ByZWMsIF9fdik7CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHNucHJpbnRm
KF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3YpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsIF9f
b2xkKTsKICAgICAgZnJlZShfX29sZCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KIyAyMDE5
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9f
cGFkCiAgICB7CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX3BhZChpb3NfYmFzZSYgX19pbywg
X0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25ld3MsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fb2xkcywgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwKICAgICAgICAgICAgIGNvbnN0IHN0
cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pOwogICAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgX19wYWQ8X0No
YXJULCBfVHJhaXRzPjo6X1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hh
clQqIF9fb2xkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJl
YW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAgICAgIHNpemVf
dCBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19vbGRsZW4pOwogICAg
ICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKF9DaGFyVCkgKiBfX3BsZW4pKTsKICAgICAgX1RyYWl0czo6YXNzaWduKF9fcGFkcywg
X19wbGVuLCBfX2ZpbGwpOwoKICAgICAgX0NoYXJUKiBfX2JlZzsKICAgICAgX0NoYXJUKiBfX2Vu
ZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBp
b3NfYmFzZTo6Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRq
dXN0ZmllbGQ7CgogICAgICBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAg
ewoKICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAg
ICAgX19iZWdsZW4gPSBfX29sZGxlbjsKICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAg
IH0KICAgICAgZWxzZSBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbnVt
KQogICAgICAgIHsKCgoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg
ICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9D
aGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQgX19taW51cyA9IF9fY3R5cGUu
d2lkZW4oJy0nKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX3BsdXMgPSBfX2N0eXBlLndpZGVu
KCcrJyk7CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfVHJhaXRzOjplcShfX29sZHNbMF0s
IF9fbWludXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX29s
ZHNbMF0sIF9fcGx1cyk7CgogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfVHJhaXRzOjplcShf
X2N0eXBlLndpZGVuKCcwJyksIF9fb2xkc1swXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgKF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ3gnKSwgX19vbGRzWzFdKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbignWCcpLCBf
X29sZHNbMV0pKTsKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAgICAgICAgX19uZXdzWzFdID0g
X19vbGRzWzFdOwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAgICAgICAgICAgX19uZXdz
ICs9IDI7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWds
ZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9f
b2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2ln
bikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9UcmFpdHM6OmVxKChfX25ld3NbMF0gPSBf
X29sZHNbMF0pLCBfX3BsdXMpID8gX19wbHVzIDogX19taW51czsKICAgICAgICAgICAgICArK19f
bW9kOwogICAgICAgICAgICAgICsrX19uZXdzOwogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRz
OwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0g
Y29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAg
ICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0
X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxz
ZQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgIF9fYmVnbGVu
ID0gX19wbGVuOwogICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7
CiAgICAgICAgfQogICAgICBfVHJhaXRzOjpjb3B5KF9fbmV3cywgX19iZWcsIF9fYmVnbGVuKTsK
ICAgICAgX1RyYWl0czo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19uZXdsZW4gLSBfX2JlZ2xlbiAtIF9fbW9kKTsKICAgIH0KIyAyMTE0
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgYm9vbAogICAgX192ZXJpZnlfZ3JvdXBpbmco
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAgICAg
ICAgICBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApCiAgICB7CiAgICAgIGlu
dCBfX2kgPSAwOwogICAgICBpbnQgX19qID0gMDsKICAgICAgY29uc3QgaW50IF9fbGVuID0gX19n
cm91cGluZy5zaXplKCk7CiAgICAgIGNvbnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5zaXpl
KCk7CiAgICAgIGJvb2wgX190ZXN0ID0gdHJ1ZTsKCgoKCiAgICAgIHdoaWxlIChfX3Rlc3QgJiYg
X19pIDwgX19uIC0gMSkKICAgICAgICBmb3IgKF9faiA9IDA7IF9fdGVzdCAmJiBfX2ogPCBfX2xl
biAmJiBfX2kgPCBfX24gLSAxOyArK19faiwrK19faSkKICAgICAgICAgIF9fdGVzdCAmPSBfX2dy
b3VwaW5nW19fal0gPT0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CgoKICAgICAgX19q
ID09IF9fbGVuID8gX19qID0gMCA6IF9fajsKICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19q
XSA+PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKICAgICAgcmV0dXJuIF9fdGVzdDsK
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBf
X2FkZF9ncm91cGluZyhfQ2hhclQqIF9fcywgX0NoYXJUIF9fc2VwLAogICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogX19nYmVnLCBjb25zdCBjaGFyKiBfX2dlbmQsCiAgICAgICAgICAgICAg
ICAgICBjb25zdCBfQ2hhclQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0KQogICAgewog
ICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+ICpfX2diZWcpCiAgICAgICAgewogICAgICAgICAg
X19zID0gX19hZGRfZ3JvdXBpbmcoX19zLCBfX3NlcCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChfX2diZWcgKyAxID09IF9fZ2VuZCA/IF9fZ2JlZyA6IF9fZ2JlZyArIDEpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19n
YmVnKTsKICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19nYmVnOwogICAgICAgICAgKl9f
cysrID0gX19zZXA7CiAgICAgICAgfQogICAgICBkbwogICAgICAgICpfX3MrKyA9ICpfX2ZpcnN0
Kys7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBfX3M7CiAg
ICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjsKICBleHRlcm4gdGVt
cGxhdGUgY2xhc3MgbW9uZXlfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25l
eV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwg
ZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCBmYWxz
ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIHRy
dWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIG1vbmV5X3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgbnVtcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFt
ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDxjaGFyPjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgbnVtX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVt
cHVuY3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTx3
Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDx3Y2hhcl90PjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgbnVtX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgX190aW1lcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0PGNo
YXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47CiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyB0aW1lX2dldF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1
bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDx3Y2hhcl90PjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgdGltZV9nZXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNz
YWdlczxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPGNoYXI+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBleHRlcm4gdGVt
cGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBjdHlwZV9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5
bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8Y2hh
ciwgY2hhciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5h
bWU8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29s
bGF0ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPHdjaGFyX3Q+OwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2Rl
Y3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8Y2hh
cj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5j
dDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8
bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv
bnN0IG51bV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgdHJ1
ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Jgog
ICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0
PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IG1vbmV5X2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVwdW5jdDxj
aGFyPiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0
PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Y29uc3QgdGltZV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczxjaGFyPiYK
ICAgIHVzZV9mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGNvbnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiYKICAg
IHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihsb2NhbGUgY29u
c3QmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPHdjaGFyX3Q+JgogICAg
dXNlX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBjb25zdCBudW1wdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1wdW5j
dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0
IG51bV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9nZXQ8d2NoYXJfdD4m
CiAgICB1c2VfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4mCiAgICB1c2Vf
ZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+JgogICAgdXNl
X2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0
PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8d2No
YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3Rp
bWVwdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PHdjaGFy
X3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFj
ZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBjb25zdCBtZXNzYWdlczx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtZXNzYWdlczx3Y2hh
cl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0
PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
b29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1f
Z2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog
ICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5
X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1l
X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKIGV4dGVybiB0
ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8
d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt
cGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0
PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog
ICAgaGFzX2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25l
eXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Ym9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8d2NoYXJf
dD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNf
ZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBs
b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9n
ZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s
CiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKfQojIDQ3
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDIgMwojIDM4ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2lzdHJlYW0udGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjIvb3N0cmVhbSIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwg
cHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0
czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9z
X3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUg
b2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAg
ICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVh
bWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRl
cj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlw
ZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUq
IF9fc2IpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+
YmFzaWNfb3N0cmVhbSgpIHsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNs
YXNzIHNlbnRyeTsKCgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19v
c3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7
CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3Bm
KSAoaW9zX2Jhc2UmKSk7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo
bG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWdu
ZWQgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9v
bCBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19u
KQogICAgICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3Mo
KSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9j
dCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0
b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxz
ZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19u
KSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2ln
bmVkIHNob3J0IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPDwoaW50IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Zt
dCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2Zt
dCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0
dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikp
KTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNf
Y2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPDwodW5zaWduZWQgaW50IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8
PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMt
Pm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgcHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIHdyaXRlKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
bik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlw
ZQogICAgICB0ZWxscCgpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190
eXBlKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jh
c2U6OnNlZWtkaXIpOwogICAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNl
bnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
X1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5
KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQog
ICAgICB7CgogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYg
IXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29z
LnJkYnVmKCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAg
IF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9Cgog
ICAgICBvcGVyYXRvciBib29sKCkKICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hh
ciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRl
bXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIg
X19jKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIs
IF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBf
X291dCwgc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0
PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9U
cmFpdHM+JiBfX291dCwgdW5zaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwg
c3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBf
Q2hhclQqIF9fcyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoK
ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv
bnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19v
dXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8
Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWdu
ZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9f
b3MucHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBlbmRzKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJu
IF9fb3MucHV0KF9DaGFyVCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVz
aChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29z
LmZsdXNoKCk7IH0KCn0KCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv
b3N0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL29z
dHJlYW0udGNjIiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcykK
ICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQogICAgewoKICAgICAgaWYgKF9N
X29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2goKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUm
KSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl
cmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiICYmIF9fc2JpbikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghX19jb3B5X3N0cmVhbWJ1ZnMo
KnRoaXMsIF9fc2JpbiwgdGhpcy0+cmRidWYoKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fc2JpbikKICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46Om9wZXJhdG9yPDwoYm9vbCBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAg
ICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19u
KS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9f
YyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQg
PSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAo
X01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmICgoX19mbXQgJiBp
b3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9m
bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19i
ID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAg
ICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0
KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlz
LT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8
PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6Omhl
eCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2Zu
dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2Ig
PSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAg
ICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywg
dGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJh
dG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBp
ZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxl
ZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgq
dGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkK
ICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5m
aWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBl
IF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19wdXQgPSByZGJ1ZigpLT5zcHV0YyhfX2Mp
OwogICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1dCwgdHJhaXRzX3R5
cGU6OmVvZigpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0No
YXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0
ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAh
PSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQog
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAg
ICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBpZiAoIXRoaXMt
PmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9z
X2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Om91dCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6c2Vla3AocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQog
ICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz
ZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBv
c190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kKQogICAgewogICAg
ICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJy
ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvdXQpOwoKCiAg
ICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykKICAgIHsK
ICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5
cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAg
ICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKF9DaGFyVCkgKiAoX193ICsgMSkpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBf
X2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYg
KF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxf
Q2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBf
X2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAg
ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAg
IHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90
eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAg
ICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193
ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQo
X19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAg
ICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQu
d3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9f
cykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19v
c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi
KF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo
KCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf
X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAgICAgc3Ry
ZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChf
X3MpKTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19v
dXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19z
ID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBf
X291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgoKICAgICAgdHlwZWRlZiBjaGFy
X3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5
cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAg
ICB7CiAgICAgICAgICBzaXplX3QgX19jbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7
CiAgICAgICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5f
YWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBmb3IgKHNp
emVfdCBfX2kgPSAwOyBfX2kgPCBfX2NsZW47ICsrX19pKQogICAgICAgICAgICBfX3dzW19faV0g
PSBfX291dC53aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsK
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19s
ZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgICAgICAgIHN0cmVh
bXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9
IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBf
X3cpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9f
b3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX193cywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBf
X3N0ciA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAg
ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1w
bGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNo
YXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9f
Y2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53
aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihf
X2J1aWx0aW5fYWxsb2NhKF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBz
dGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CgogICAgICAgICAg
ICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
X19wYWQ8Y2hhciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9f
dywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAg
ICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBf
X291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBl
bHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1z
aXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsK
ICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0
ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5m
aWxsKCksIF9fcGFkcywgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgX19zID0gX19wYWRzOwog
ICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW1z
aXplIF9fcmVzID0gX19vdXQucmRidWYoKS0+c3B1dG4oX19zLCBfX2xlbik7CiAgICAgICAgICBf
X291dC53aWR0aCgwKTsKICAgICAgICAgIGlmIChfX3JlcyAhPSBfX2xlbikKICAgICAgICAgICAg
X19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fb3V0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTxj
aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kbChvc3RyZWFtJik7CiAgZXh0ZXJu
IHRlbXBsYXRlIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3Ry
ZWFtJiBmbHVzaChvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9y
PDwob3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8
KG9zdHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3Bl
cmF0b3I8PChvc3RyZWFtJiwgc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFt
JiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9z
dHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsKICBleHRl
cm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3Qgc2lnbmVkIGNo
YXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+Owog
IGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kbCh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1w
bGF0ZSB3b3N0cmVhbSYgZW5kcyh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVh
bSYgZmx1c2god29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9y
PDwod29zdHJlYW0mLCB3Y2hhcl90KTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJh
dG9yPDwod29zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJh
dG9yPDwod29zdHJlYW0mLCBjb25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3QgY2hhciopOwoKfQojIDI3NiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMiAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdzKQogICAgewogICAgICBpZiAoX19pbi5n
b29kKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9faW4udGllKCkpCiAgICAgICAgICAgIF9f
aW4udGllKCktPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxh
Z3MoKSAmIGlvc19iYXNlOjpza2lwd3MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29u
c3QgX19pbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBf
X3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAgIF9faW50
X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9faW4uX01fY2hl
Y2tfZmFjZXQoX19pbi5fTV9mY3R5cGUpKQogICAgICAgICAgICAgICAgd2hpbGUgKCF0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgICAmJiBf
X2luLl9NX2ZjdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkp
CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKCgogICAgICAgICAgICAg
IGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAg
ICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgICAgICAgfQogICAgICAg
IH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9IHRydWU7CiAgICAgIGVs
c2UKICAgICAgICB7CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAgICAgICAgX19pbi5zZXRz
dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0
b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQogICAgewogICAg
ICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0
b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigq
dGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW9z
X2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK
ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19i
YXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsK
ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAg
ICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAg
ICAgICYmIChudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAg
ICAgICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpKQogICAgICAg
ICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf
X2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv
c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf
X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9fbikKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg
ICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n
ZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19l
cnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0
KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgPD0gX19s
CiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpKQogICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0
b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg
ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6
aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh
Y2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAw
LCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0
KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAg
ICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9f
ZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1n
ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0
b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs
c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9z
dGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0
KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq
dGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9u
ZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl
Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp
CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUg
X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51
bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJh
dG9yPj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3Rh
dGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo
aXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri
aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg
ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g
aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl
dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9f
c3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCBmYWxzZSk7CiAgICAgICBpZiAoX19jZXJiKQogICAgICAgICB7CiAgICAgICAgICAgdHJ5CiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAg
ICAgICAgICAgIGlmIChfX3Nib3V0KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAg
ICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91
dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoIV9fc2JvdXQgfHwgIV9f
eHRyY3QpCiAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
OwogICAgICAgICAgICAgfQogICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIGdldCh2b2lkKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190
eXBlOjplb2YoKTsKICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAgICAgIF9NX2djb3VudCA9
IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0g
dGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsK
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBnZXQoY2hhcl90eXBlJiBfX2MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg
X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19idWZ2
YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19idWZ2YWwsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgX19jID0gdHJh
aXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVv
ZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkK
ICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0
b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9
IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
ID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0
YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgogICAgICAgICAg
ICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAg
ICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxp
bSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190
eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25l
eHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAg
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0g
Y2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
Z2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAg
ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhpc19zYiA9IHRo
aXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX190aGlzX3NiLT5zZ2V0
YygpOwogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJf
dHlwZShfX2MpOwoKICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2lu
dF90eXBlKF9fYywgX19pZGVsaW0pCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlw
ZTo6ZXFfaW50X3R5cGUoX19zYi5zcHV0YyhfX2MyKSwgX19lb2YpKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0g
X190aGlzX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgX19jMiA9IHRyYWl0c190eXBl
Ojp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAo
dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hh
cl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0g
PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3Qg
aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJl
YW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUg
X19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEg
PCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf
X2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90
eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAq
X19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAg
IF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVv
ZmJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2ItPnNidW1wYygpOwogICAg
ICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsK
ICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUoc3RyZWFt
c2l6ZSBfX24sIGludF90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+
IDApCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj
b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBf
X3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRf
dHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBfX24gPSBtaW4oX19uLCBu
dW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCkpOwogICAgICAgICAgICAgIHdoaWxlIChf
TV9nY291bnQgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3Vu
dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2lu
dF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgZWxzZSBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90
eXBlKF9fYywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f
c2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBw
ZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19j
ID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZChjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fZ2NvdW50ID0gdGhp
cy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOwogICAgICAgICAgICAgIGlmIChfTV9nY291bnQg
IT0gX19uKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8
IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3Ry
ZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IHRoaXMtPnJk
YnVmKCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgaWYgKF9fbnVtID4gMCkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7CiAgICAg
ICAgICAgICAgICAgIGlmIChfX251bSkKICAgICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSB0
aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog
ICAgICByZXR1cm4gX01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhjaGFyX3R5cGUg
X19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAg
IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlm
ICghX19zYgogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19z
Yi0+c3B1dGJhY2tjKF9fYyksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHVuZ2V0KHZv
aWQpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6
ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVm
KCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRyYWl0c190
eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW50CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQogICAgewogICAg
ICBpbnQgX19yZXQgPSAtMTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhp
cy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoX19zYikKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgaWYgKF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9z
X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lk
KQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgX01fZ2Nv
dW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgIF9f
cmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFz
ZTo6aW4pOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhwb3NfdHlwZSBf
X3BvcykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+
cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgICAgIGlmIChfX2Vy
ciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz
ZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAg
IF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYs
IF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190
eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lu
LCBfQ2hhclQmIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpz
ZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2luLmdldChfX2MpOyB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShp
b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pbiwgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
aXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlw
ZTsKICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3Ry
ZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPT0g
MCkKICAgICAgICAgICAgICAgIF9fbnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1h
eCgpOwoKICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFj
ZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgICAgICAgICBjb25zdCBpbnRf
dHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19z
Yi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAx
CiAgICAgICAgICAgICAgICAgICAgICYmIF9fYyAhPSBfX2VvZiAmJiAhX19jdHlwZS5pcyhjdHlw
ZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
Kl9fcysrID0gX19jOwogICAgICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAg
ICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZW9mYml0KTsKCgoKICAgICAgICAgICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAg
ICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRz
PiYgX19pbikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6
Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGNv
bnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4u
Z2V0bG9jKCkpOwogICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7
CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgIF9faW50
X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgIHdoaWxlIChfX2MgIT0gX19lb2YgJiYg
X19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICBfX2MgPSBfX3NiLT5z
bmV4dGMoKTsKICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICBfX2luLnNldHN0YXRlKGlv
c19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f
Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlw
ZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9
IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBm
YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2Uo
KTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0aCgpOwogICAgICAgICAgX19z
aXplX3R5cGUgX19uOwogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6
ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBjb25zdCBfX2N0eXBl
X3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsK
ICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAg
ICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2lu
dF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVk
IDwgX19uCiAgICAgICAgICAgICAgICAgJiYgX19jICE9IF9fZW9mICYmICFfX2N0eXBlLmlzKGN0
eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIg
Kz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3Rl
ZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlm
ICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQp
OwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
IF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf
dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6
ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwog
ICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90
eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBf
X3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRz
Ojp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ig
PSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygp
OwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAg
ICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKTsK
CiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uCiAgICAgICAgICAgICAgICAgJiYg
IV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgJiYgIV9f
dGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6
dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAg
ICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9U
cmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwogICAgICAgICAgICB9CiAgICAgICAg
ICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgIF9faW4u
c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFj
dGVkICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWls
Yml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwg
Y2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0No
YXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
IF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBf
X3N0cikKICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIsIF9faW4ud2lkZW4oJ1xuJykp
OyB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXI+OwogIGV4
dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiB3cyhpc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlz
dHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0
cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBs
YXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyJik7CiAgZXh0ZXJu
IHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXIqKTsK
ICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNo
YXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Owog
IGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxh
dGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Jik7CiAgZXh0ZXJuIHRl
bXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCopOwoKfQojIDI5
OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaXN0cmVhbSIgMiAzCiMgNDUgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4yL3NzdHJlYW0iIDIgMwoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmIDogcHVibGljIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIF9B
bGxvYyBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6
OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpw
b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2Zm
X3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBl
LCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8Y2hhcl90eXBlLCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgIHBy
b3RlY3RlZDoKCiAgICAgIF9fc3RyaW5nX3R5cGUgX01fc3RyaW5nOwoKICAgIHB1YmxpYzoKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ2J1Zihpb3NfYmFzZTo6b3Blbm1vZGUgX19t
b2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX3N0cmVhbWJ1Zl90
eXBlKCksIF9NX3N0cmluZygpCiAgICAgIHsgX01fc3RyaW5nYnVmX2luaXQoX19tb2RlKTsgfQoK
ICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nYnVmKGNvbnN0IF9fc3RyaW5nX3R5cGUm
IF9fc3RyLAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9
IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19zdHJlYW1idWZfdHlwZSgp
LCBfTV9zdHJpbmcoX19zdHIuZGF0YSgpLCBfX3N0ci5zaXplKCkpCiAgICAgIHsgX01fc3RyaW5n
YnVmX2luaXQoX19tb2RlKTsgfQoKCiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29u
c3QKICAgICAgewogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAg
IHsKCgoKCiAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX01fc3RyaW5nLnNpemUoKTsK
ICAgICAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfYmVnKQogICAgICAgICAgICAgIF9f
bGVuID0gbWF4KF9fc2l6ZV90eXBlKF9NX291dF9lbmQgLSBfTV9vdXRfYmVnKSwgX19sZW4pOwog
ICAgICAgICAgICByZXR1cm4gX19zdHJpbmdfdHlwZShfTV9vdXRfYmVnLCBfTV9vdXRfYmVnICsg
X19sZW4pOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfTV9zdHJp
bmc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9f
cykKICAgICAgewogICAgICAgIF9NX3N0cmluZyA9IF9fczsKICAgICAgICBfTV9zdHJpbmdidWZf
aW5pdChfTV9tb2RlKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKCiAgICAgIHZvaWQKICAgICAg
X01fc3RyaW5nYnVmX2luaXQoaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgICAgewoKCgoK
CiAgICAgICAgX01fYnVmX3NpemUgPSBfTV9zdHJpbmcuc2l6ZSgpOwoKCgoKCiAgICAgICAgX01f
YnVmX3NpemVfb3B0ID0gNTEyOwogICAgICAgIF9NX21vZGUgPSBfX21vZGU7CiAgICAgICAgaWYg
KF9NX21vZGUgJiAoaW9zX2Jhc2U6OmF0ZSB8IGlvc19iYXNlOjphcHApKQogICAgICAgICAgX01f
cmVhbGx5X3N5bmMoMCwgX01fYnVmX3NpemUpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX3Jl
YWxseV9zeW5jKDAsIDApOwogICAgICB9CgoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1
bmRlcmZsb3coKQogICAgICB7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBf
TV9pbl9lbmQpCiAgICAgICAgICByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpncHRy
KCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg
ICAgIH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9f
YyA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92
ZXJmbG93KGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICB2aXJ0dWFs
IF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19zICYmIF9fbikKICAgICAgICAgIHsKICAgICAg
ICAgICAgX01fc3RyaW5nID0gX19zdHJpbmdfdHlwZShfX3MsIF9fbik7CiAgICAgICAgICAgIF9N
X3JlYWxseV9zeW5jKDAsIDApOwogICAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAg
ICB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYs
IGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9k
ZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAgICAgIHZpcnR1YWwg
cG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgIGlvc19i
YXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCgoK
CgoKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIF9NX3JlYWxseV9zeW5jKF9fc2l6ZV90eXBlIF9f
aSwgX19zaXplX3R5cGUgX19vKQogICAgICB7CiAgICAgICAgY2hhcl90eXBlKiBfX2Jhc2UgPSBj
b25zdF9jYXN0PGNoYXJfdHlwZSo+KF9NX3N0cmluZy5kYXRhKCkpOwogICAgICAgIGJvb2wgX190
ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOwogICAgICAgIGJvb2wgX190ZXN0b3V0ID0g
X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfTV9z
dHJpbmcuc2l6ZSgpOwoKICAgICAgICBfTV9idWYgPSBfX2Jhc2U7CiAgICAgICAgaWYgKF9fdGVz
dGluKQogICAgICAgICAgICB0aGlzLT5zZXRnKF9fYmFzZSwgX19iYXNlICsgX19pLCBfX2Jhc2Ug
KyBfX2xlbik7CiAgICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgIHsKICAgICAgICAgICAg
dGhpcy0+c2V0cChfX2Jhc2UsIF9fYmFzZSArIF9fbGVuKTsKICAgICAgICAgICAgX01fb3V0X2N1
ciArPSBfX287CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgIH07CgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg
dHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRy
YWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp
dHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz
X3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdidWZfdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faXN0cmVh
bV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fc3RyaW5nYnVmX3R5cGUgX01fc3RyaW5nYnVm
OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0o
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lzdHJl
YW1fdHlwZSgwKSwgX01fc3RyaW5nYnVmKF9fbW9kZSB8IGlvc19iYXNlOjppbikKICAgICAgeyB0
aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19p
c3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3RyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCiAgICAg
IDogX19pc3RyZWFtX3R5cGUoMCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tb2RlIHwgaW9zX2Jh
c2U6OmluKQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIH5iYXNp
Y19pc3RyaW5nc3RyZWFtKCkKICAgICAgeyB9CgoKICAgICAgX19zdHJpbmdidWZfdHlwZSoKICAg
ICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fc3RyaW5nYnVmX3R5
cGUqPigmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgX19zdHJpbmdfdHlwZQogICAgICBzdHIoKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9zdHJpbmdidWYuc3RyKCk7IH0KCiAgICAgIHZvaWQKICAg
ICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAgICAgeyBfTV9zdHJpbmdidWYuc3Ry
KF9fcyk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbSA6
IHB1YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoK
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRy
YWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwoKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9f
c3RyaW5nYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRy
YWl0c190eXBlPiBfX29zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBfX3N0cmluZ2J1
Zl90eXBlIF9NX3N0cmluZ2J1ZjsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBi
YXNpY19vc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6
b3V0KQogICAgICA6IF9fb3N0cmVhbV90eXBlKDApLCBfTV9zdHJpbmdidWYoX19tb2RlIHwgaW9z
X2Jhc2U6Om91dCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBl
eHBsaWNpdAogICAgICBiYXNpY19vc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9f
c3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUg
PSBpb3NfYmFzZTo6b3V0KQogICAgICA6IF9fb3N0cmVhbV90eXBlKDApLCBfTV9zdHJpbmdidWYo
X19zdHIsIF9fbW9kZSB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3Ry
aW5nYnVmKTsgfQoKICAgICAgfmJhc2ljX29zdHJpbmdzdHJlYW0oKQogICAgICB7IH0KCgogICAg
ICBfX3N0cmluZ2J1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8X19zdHJpbmdidWZfdHlwZSo+KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBfX3N0
cmluZ190eXBlCiAgICAgIHN0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmluZ2J1Zi5z
dHIoKTsgfQoKICAgICAgdm9pZAogICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlwZSYgX19zKQog
ICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFz
cyBiYXNpY19zdHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaW9zdHJlYW08X0NoYXJULCBfVHJh
aXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBfQWxsb2Mg
YWxsb2NhdG9yX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRf
dHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5
cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBl
IG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19pb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lvc3RyZWFtX3R5cGU7CgogICAg
cHJpdmF0ZToKICAgICAgX19zdHJpbmdidWZfdHlwZSBfTV9zdHJpbmdidWY7CgogICAgcHVibGlj
OgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVu
bW9kZSBfX20gPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OmluKQogICAgICA6IF9faW9zdHJl
YW1fdHlwZSgwKSwgX01fc3RyaW5nYnVmKF9fbSkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJp
bmdidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmdzdHJlYW0oY29uc3Qg
X19zdHJpbmdfdHlwZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6
b3Blbm1vZGUgX19tID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lv
c3RyZWFtX3R5cGUoMCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tKQogICAgICB7IHRoaXMtPmlu
aXQoJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIH5iYXNpY19zdHJpbmdzdHJlYW0oKQogICAgICB7
IH0KCgogICAgICBfX3N0cmluZ2J1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8X19zdHJpbmdidWZfdHlwZSo+KCZfTV9zdHJpbmdidWYpOyB9Cgog
ICAgICBfX3N0cmluZ190eXBlCiAgICAgIHN0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0
cmluZ2J1Zi5zdHIoKTsgfQoKICAgICAgdm9pZAogICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlw
ZSYgX19zKQogICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQogICAgfTsKfQoKCgoKCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zc3RyZWFtLnRjYyIgMSAzCiMgMzkg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3N0cmVhbS50Y2MiIDMKCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3N0cmVhbSIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt
cGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdHlw
ZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6aW50X3R5cGUK
ICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcGJhY2tm
YWlsKGludF90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKTsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9j
dXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwoKCgogICAgICBpZiAoX190ZXN0cG9zKQogICAg
ICAgIHsKICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEodHJhaXRzX3R5cGU6OnRvX2NoYXJf
dHlwZShfX2MpLCB0aGlzLT5ncHRyKClbLTFdKQogICAgICAgICAgICAgICYmICFfX3Rlc3Rlb2Yp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICBf
X3JldCA9IF9fYzsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoIV9fdGVzdGVvZikK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIC0tX01faW5fY3VyOwogICAgICAgICAgICAgICpf
TV9pbl9jdXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAg
X19yZXQgPSBfX2M7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGVvZikK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIC0tX01faW5fY3VyOwogICAgICAgICAgICAgIF9f
cmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAg
ICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBib29sIF9fdGVz
dGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fcmV0KTsKICAgICAgYm9vbCBf
X3Rlc3R3cml0ZSA9IF9NX291dF9jdXIgPCBfTV9idWYgKyBfTV9idWZfc2l6ZTsKICAgICAgYm9v
bCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKCgoKICAgICAgaWYgKF9fdGVz
dG91dCkKICAgICAgICB7CiAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gbWF4KF9NX2J1Zl9zaXplLCBfTV9idWZf
c2l6ZV9vcHQpOwogICAgICAgICAgICAgIF9fbGVuICo9IDI7CgogICAgICAgICAgICAgIGlmIChf
X3Rlc3R3cml0ZSkKICAgICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c3B1dGModHJhaXRzX3R5
cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICBlbHNlIGlmIChfX2xlbiA8PSBf
TV9zdHJpbmcubWF4X3NpemUoKSkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAg
IF9NX3N0cmluZyA9IHRoaXMtPnN0cigpOwogICAgICAgICAgICAgICAgICBfTV9zdHJpbmcucmVz
ZXJ2ZShfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9NX2J1Zl9zaXplID0gX19sZW47CiAgICAg
ICAgICAgICAgICAgIF9NX3JlYWxseV9zeW5jKF9NX2luX2N1ciAtIF9NX2luX2JlZywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fb3V0X2N1ciAtIF9NX291dF9iZWcpOwogICAg
ICAgICAgICAgICAgICAqX01fb3V0X2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19j
KTsKICAgICAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgICAgICAg
ICBfX3JldCA9IF9fYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAg
ZWxzZQogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAg
ICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQs
IGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1
ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnBvc190eXBlCiAgICBiYXNpY19zdHJpbmdidWY8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlv
c19iYXNlOjpzZWVrZGlyIF9fd2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewog
ICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CiAgICAgIGJvb2wg
X190ZXN0aW4gPSAoaW9zX2Jhc2U6OmluICYgX01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAg
Ym9vbCBfX3Rlc3RvdXQgPSAoaW9zX2Jhc2U6Om91dCAmIF9NX21vZGUgJiBfX21vZGUpICE9IDA7
CiAgICAgIGJvb2wgX190ZXN0Ym90aCA9IF9fdGVzdGluICYmIF9fdGVzdG91dCAmJiBfX3dheSAh
PSBpb3NfYmFzZTo6Y3VyOwogICAgICBfX3Rlc3RpbiAmPSAhKF9fbW9kZSAmIGlvc19iYXNlOjpv
dXQpOwogICAgICBfX3Rlc3RvdXQgJj0gIShfX21vZGUgJiBpb3NfYmFzZTo6aW4pOwoKICAgICAg
aWYgKF9NX2J1Zl9zaXplICYmIChfX3Rlc3RpbiB8fCBfX3Rlc3RvdXQgfHwgX190ZXN0Ym90aCkp
CiAgICAgICAgewogICAgICAgICAgY2hhcl90eXBlKiBfX2JlZyA9IF9NX2J1ZjsKICAgICAgICAg
IGNoYXJfdHlwZSogX19jdXJpID0gMDsKICAgICAgICAgIGNoYXJfdHlwZSogX19jdXJvID0gMDsK
ICAgICAgICAgIGNoYXJfdHlwZSogX19lbmRpID0gMDsKICAgICAgICAgIGNoYXJfdHlwZSogX19l
bmRvID0gMDsKCiAgICAgICAgICBpZiAoX190ZXN0aW4gfHwgX190ZXN0Ym90aCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9fY3VyaSA9IHRoaXMtPmdwdHIoKTsKICAgICAgICAgICAgICBf
X2VuZGkgPSB0aGlzLT5lZ3B0cigpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX190ZXN0
b3V0IHx8IF9fdGVzdGJvdGgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2N1cm8gPSB0
aGlzLT5wcHRyKCk7CiAgICAgICAgICAgICAgX19lbmRvID0gdGhpcy0+ZXBwdHIoKTsKICAgICAg
ICAgICAgfQoKICAgICAgICAgIG9mZl90eXBlIF9fbmV3b2ZmaSA9IDA7CiAgICAgICAgICBvZmZf
dHlwZSBfX25ld29mZm8gPSAwOwogICAgICAgICAgaWYgKF9fd2F5ID09IGlvc19iYXNlOjpjdXIp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld29mZmkgPSBfX2N1cmkgLSBfX2JlZzsK
ICAgICAgICAgICAgICBfX25ld29mZm8gPSBfX2N1cm8gLSBfX2JlZzsKICAgICAgICAgICAgfQog
ICAgICAgICAgZWxzZSBpZiAoX193YXkgPT0gaW9zX2Jhc2U6OmVuZCkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9fbmV3b2ZmaSA9IF9fZW5kaSAtIF9fYmVnOwogICAgICAgICAgICAgIF9f
bmV3b2ZmbyA9IF9fZW5kbyAtIF9fYmVnOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKChf
X3Rlc3RpbiB8fCBfX3Rlc3Rib3RoKQogICAgICAgICAgICAgICYmIF9fbmV3b2ZmaSArIF9fb2Zm
ID49IDAgJiYgX19lbmRpIC0gX19iZWcgPj0gX19uZXdvZmZpICsgX19vZmYpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfTV9pbl9jdXIgPSBfX2JlZyArIF9fbmV3b2ZmaSArIF9fb2ZmOwog
ICAgICAgICAgICAgIF9fcmV0ID0gcG9zX3R5cGUoX19uZXdvZmZpKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgaWYgKChfX3Rlc3RvdXQgfHwgX190ZXN0Ym90aCkKICAgICAgICAgICAgICAmJiBf
X25ld29mZm8gKyBfX29mZiA+PSAwICYmIF9fZW5kbyAtIF9fYmVnID49IF9fbmV3b2ZmbyArIF9f
b2ZmKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbmV3b2Zm
byArIF9fb2ZmIC0gKF9NX291dF9jdXIgLSBfX2JlZykpOwogICAgICAgICAgICAgIF9fcmV0ID0g
cG9zX3R5cGUoX19uZXdvZmZvKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBj
bGFzcyBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+Ojpwb3NfdHlwZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBzZWVrcG9zKHBvc190eXBlIF9fc3AsIGlvc19iYXNlOjpvcGVubW9kZSBf
X21vZGUpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEp
KTsKCiAgICAgIGlmIChfTV9idWZfc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBf
X3BvcyA9IF9fc3A7CiAgICAgICAgICBjaGFyX3R5cGUqIF9fYmVnID0gMDsKICAgICAgICAgIGNo
YXJfdHlwZSogX19lbmQgPSAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IChpb3NfYmFzZTo6
aW4gJiBfTV9tb2RlICYgX19tb2RlKSAhPSAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSAo
aW9zX2Jhc2U6Om91dCAmIF9NX21vZGUgJiBfX21vZGUpICE9IDA7CiAgICAgICAgICBib29sIF9f
dGVzdGJvdGggPSBfX3Rlc3RpbiAmJiBfX3Rlc3RvdXQ7CiAgICAgICAgICBfX3Rlc3RpbiAmPSAh
KF9fbW9kZSAmIGlvc19iYXNlOjpvdXQpOwogICAgICAgICAgX190ZXN0b3V0ICY9ICEoX19tb2Rl
ICYgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgYm9vbCBfX3Rlc3Rwb3NpID0gZmFsc2U7CiAg
ICAgICAgICBib29sIF9fdGVzdHBvc28gPSBmYWxzZTsKICAgICAgICAgIGlmIChfX3Rlc3RpbiB8
fCBfX3Rlc3Rib3RoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19iZWcgPSB0aGlzLT5l
YmFjaygpOwogICAgICAgICAgICAgIF9fZW5kID0gdGhpcy0+ZWdwdHIoKTsKICAgICAgICAgICAg
ICBpZiAoMCA8PSBfX3BvcyAmJiBfX3BvcyA8PSBfX2VuZCAtIF9fYmVnKQogICAgICAgICAgICAg
ICAgX190ZXN0cG9zaSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX3Rlc3Rv
dXQgfHwgX190ZXN0Ym90aCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYmVnID0gdGhp
cy0+cGJhc2UoKTsKICAgICAgICAgICAgICBfX2VuZCA9IF9NX2J1ZiArIF9NX2J1Zl9zaXplOwog
ICAgICAgICAgICAgIGlmICgwIDw9IF9fcG9zICYmIF9fcG9zIDw9IF9fZW5kIC0gX19iZWcpCiAg
ICAgICAgICAgICAgICBfX3Rlc3Rwb3NvID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAg
aWYgKF9fdGVzdHBvc2kgfHwgX190ZXN0cG9zbykKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGlmIChfX3Rlc3Rwb3NpKQogICAgICAgICAgICAgICAgX01faW5fY3VyID0gX01faW5fYmVnICsg
X19wb3M7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdHBvc28pCiAgICAgICAgICAgICAgICBfTV9v
dXRfY3VyX21vdmUoKF9fcG9zKSAtIChfTV9vdXRfY3VyIC0gX19iZWcpKTsKICAgICAgICAgICAg
ICBfX3JldCA9IHBvc190eXBlKG9mZl90eXBlKF9fcG9zKSk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IGJhc2ljX3N0cmluZ2J1ZjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3Ry
aW5nYnVmPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyaW5nc3Ry
ZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtPHdj
aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PjsKfQojIDM2OCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3N0cmVhbSIgMiAzCiMgMjcgIi91c3IvbG9jYWwvc3Jj
L2Jvb3N0L2Jvb3N0L2xleGljYWxfY2FzdC5ocHAiIDIKIyA0MSAiL3Vzci9sb2NhbC9zcmMvYm9v
c3QvYm9vc3QvbGV4aWNhbF9jYXN0LmhwcCIKbmFtZXNwYWNlIGJvb3N0CnsKCiAgICBjbGFzcyBi
YWRfbGV4aWNhbF9jYXN0IDogcHVibGljIHN0ZDo6YmFkX2Nhc3QKICAgIHsKICAgIHB1YmxpYzoK
ICAgICAgICB2aXJ0dWFsIH5iYWRfbGV4aWNhbF9jYXN0KCkgdGhyb3coKQogICAgICAgIHsKICAg
ICAgICB9CiAgICB9OwoKICAgIG5hbWVzcGFjZSBkZXRhaWwKICAgIHsKICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4KICAgICAgICBjbGFzcyBub19sZXhp
Y2FsX2NvbnZlcnNpb24gOiBwdWJsaWMgYmFkX2xleGljYWxfY2FzdAogICAgICAgIHsKICAgICAg
ICBwdWJsaWM6CiAgICAgICAgICAgIG5vX2xleGljYWxfY29udmVyc2lvbigpCiAgICAgICAgICAg
ICAgOiBkZXNjcmlwdGlvbigKICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoKSArICJiYWQg
bGV4aWNhbCBjYXN0OiAiICsKICAgICAgICAgICAgICAgICAgInNvdXJjZSB0eXBlIHZhbHVlIGNv
dWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyB0YXJnZXQsIFRhcmdldD0iICsKICAgICAgICAgICAg
ICAgICAgdHlwZWlkKFRhcmdldCkubmFtZSgpICsgIiwgU291cmNlPSIgKyB0eXBlaWQoU291cmNl
KS5uYW1lKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgfQogICAgICAgICAgICB2aXJ0dWFs
IH5ub19sZXhpY2FsX2NvbnZlcnNpb24oKSB0aHJvdygpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgfQogICAgICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKndoYXQoKSBjb25zdCB0aHJvdygp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbi5jX3N0cigp
OwogICAgICAgICAgICB9CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcgZGVzY3JpcHRpb247CiAgICAgICAgfTsKICAgIH0KCiAgICBuYW1lc3BhY2UgZGV0YWls
CiAgICB7CiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KICAgICAgICBzdHJ1Y3Qgc3Ry
ZWFtX2NoYXIKICAgICAgICB7CiAgICAgICAgICAgIHR5cGVkZWYgY2hhciB0eXBlOwogICAgICAg
IH07CgoKICAgICAgICB0ZW1wbGF0ZTw+CiAgICAgICAgc3RydWN0IHN0cmVhbV9jaGFyPHdjaGFy
X3Q+CiAgICAgICAgewogICAgICAgICAgICB0eXBlZGVmIHdjaGFyX3QgdHlwZTsKICAgICAgICB9
OwoKICAgICAgICB0ZW1wbGF0ZTw+CiAgICAgICAgc3RydWN0IHN0cmVhbV9jaGFyPHdjaGFyX3Qg
Kj4KICAgICAgICB7CiAgICAgICAgICAgIHR5cGVkZWYgd2NoYXJfdCB0eXBlOwogICAgICAgIH07
CgogICAgICAgIHRlbXBsYXRlPD4KICAgICAgICBzdHJ1Y3Qgc3RyZWFtX2NoYXI8Y29uc3Qgd2No
YXJfdCAqPgogICAgICAgIHsKICAgICAgICAgICAgdHlwZWRlZiB3Y2hhcl90IHR5cGU7CiAgICAg
ICAgfTsKCiAgICAgICAgdGVtcGxhdGU8PgogICAgICAgIHN0cnVjdCBzdHJlYW1fY2hhcjxzdGQ6
OndzdHJpbmc+CiAgICAgICAgewogICAgICAgICAgICB0eXBlZGVmIHdjaGFyX3QgdHlwZTsKICAg
ICAgICB9OwoKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0Q2hhciwgdHlwZW5hbWUg
U291cmNlQ2hhcj4KICAgICAgICBzdHJ1Y3Qgd2lkZXN0X2NoYXIKICAgICAgICB7CiAgICAgICAg
ICAgIHR5cGVkZWYgVGFyZ2V0Q2hhciB0eXBlOwogICAgICAgIH07CgogICAgICAgIHRlbXBsYXRl
PD4KICAgICAgICBzdHJ1Y3Qgd2lkZXN0X2NoYXI8Y2hhciwgd2NoYXJfdD4KICAgICAgICB7CiAg
ICAgICAgICAgIHR5cGVkZWYgd2NoYXJfdCB0eXBlOwogICAgICAgIH07CiAgICB9CgogICAgbmFt
ZXNwYWNlIGRldGFpbAogICAgewogICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRhcmdldCwgdHlw
ZW5hbWUgU291cmNlPgogICAgICAgIGNsYXNzIGxleGljYWxfc3RyZWFtCiAgICAgICAgewogICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgbGV4aWNhbF9zdHJlYW0oKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpza2lwd3MpOwoKICAgICAgICAg
ICAgICAgIGlmKHN0ZDo6bnVtZXJpY19saW1pdHM8VGFyZ2V0Pjo6aXNfc3BlY2lhbGl6ZWQpCiAg
ICAgICAgICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPFRh
cmdldD46OmRpZ2l0czEwICsgMSk7CiAgICAgICAgICAgICAgICBlbHNlIGlmKHN0ZDo6bnVtZXJp
Y19saW1pdHM8U291cmNlPjo6aXNfc3BlY2lhbGl6ZWQpCiAgICAgICAgICAgICAgICAgICAgc3Ry
ZWFtLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPFNvdXJjZT46OmRpZ2l0czEwICsgMSk7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgfmxleGljYWxfc3RyZWFtKCkKICAgICAgICAgICAg
ewoKCgogICAgICAgICAgICB9CiAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I8PChjb25zdCBTb3Vy
Y2UgJmlucHV0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtIDw8
IGlucHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIElucHV0
U3RyZWFtYWJsZT4KICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj4+KElucHV0U3RyZWFtYWJsZSAm
b3V0cHV0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gIWlzX3BvaW50ZXI8
SW5wdXRTdHJlYW1hYmxlPjo6dmFsdWUgJiYKICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0g
Pj4gb3V0cHV0ICYmCiAgICAgICAgICAgICAgICAgICAgICAgKHN0cmVhbSA+PiBzdGQ6OndzKS5l
b2YoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBib29sIG9wZXJhdG9yPj4oc3RkOjpzdHJp
bmcgJm91dHB1dCkKICAgICAgICAgICAgewoKCgogICAgICAgICAgICAgICAgb3V0cHV0ID0gc3Ry
ZWFtLnN0cigpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3I+PihzdGQ6OndzdHJpbmcgJm91dHB1dCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgb3V0cHV0ID0gc3RyZWFtLnN0cigpOwogICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZToKICAgICAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSB3aWRlc3RfY2hhcjwKICAgICAgICAgICAgICAgIHR5cGVuYW1l
IHN0cmVhbV9jaGFyPFRhcmdldD46OnR5cGUsCiAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdHJl
YW1fY2hhcjxTb3VyY2U+Ojp0eXBlPjo6dHlwZSBjaGFyX3R5cGU7CgoKCgoKCiAgICAgICAgICAg
IHN0ZDo6YmFzaWNfc3RyaW5nc3RyZWFtPGNoYXJfdHlwZT4gc3RyZWFtOwoKICAgICAgICB9Owog
ICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPgogICAg
VGFyZ2V0IGxleGljYWxfY2FzdChTb3VyY2UgYXJnKQogICAgewogICAgICAgIGRldGFpbDo6bGV4
aWNhbF9zdHJlYW08VGFyZ2V0LCBTb3VyY2U+IGludGVycHJldGVyOwogICAgICAgIFRhcmdldCBy
ZXN1bHQ7CgogICAgICAgIGlmKCEoaW50ZXJwcmV0ZXIgPDwgYXJnICYmIGludGVycHJldGVyID4+
IHJlc3VsdCkpCiAgICAgICAgICAgIHRocm93IGRldGFpbDo6bm9fbGV4aWNhbF9jb252ZXJzaW9u
PFRhcmdldCwgU291cmNlPigpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Cn0KIyAzICJp
b19hbnkuY3BwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QuaHBw
IiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0LmhwcCIKIyAxICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGltaXRzL2xpc3QuaHBwIiAxCiMgMjYgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0LmhwcCIgMgoKCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2luYy5ocHAiIDEKIyAxNiAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2luYy5ocHAiCiMgMSAiL3Vzci9sb2NhbC9z
cmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvaW5jLmhwcCIgMQojIDE3ICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvaW5jLmhwcCIgMgojIDI5ICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC5ocHAiIDIKCgoKCgoKCiMgMSAiL3Vz
ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvbGlzdDEwLmhwcCIgMQojIDIxICIvdXNy
L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9saXN0MTAuaHBwIgojIDEgIi91c3IvbG9j
YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2xpc3QwLmhwcCIgMQojIDIxICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9saXN0MC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMv
Ym9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy9wdXNoX2Zyb250LmhwcCIgMQojIDIyICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL3B1c2hfZnJvbnQuaHBwIgojIDEgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vbm9kZS5ocHAiIDEKIyAyMSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy9ub2RlLmhwcCIKIyAxICIv
dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL3RhZy5ocHAiIDEKIyAyMCAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy90YWcuaHBwIgpuYW1lc3Bh
Y2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKbmFtZXNwYWNlIGF1eCB7CgpzdHJ1Y3QgbGlzdF90
YWc7Cgp9Cn0KfQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhf
L25vZGUuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRl
PAogICAgICB0eXBlbmFtZSBTaXplCiAgICAsIHR5cGVuYW1lIFQKICAgICwgdHlwZW5hbWUgTmV4
dAogICAgPgpzdHJ1Y3QgbGlzdF9ub2RlCnsKICAgIHR5cGVkZWYgYXV4OjpsaXN0X3RhZyB0YWc7
CiAgICB0eXBlZGVmIGxpc3Rfbm9kZSB0eXBlOwoKICAgIHR5cGVkZWYgU2l6ZSBzaXplOwogICAg
dHlwZWRlZiBUIGl0ZW07CiAgICB0eXBlZGVmIE5leHQgbmV4dDsKfTsKCnN0cnVjdCBudWxsX25v
ZGUKewogICAgdHlwZWRlZiBhdXg6Omxpc3RfdGFnIHRhZzsKICAgIHR5cGVkZWYgbnVsbF9ub2Rl
IHR5cGU7CiAgICB0eXBlZGVmIGludGVncmFsX2M8bG9uZywwPiBzaXplOwp9OwoKfQp9CiMgMjMg
Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vcHVzaF9mcm9udC5ocHAi
IDIKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPD4Kc3RydWN0
IHB1c2hfZnJvbnRfdHJhaXRzPCBhdXg6Omxpc3RfdGFnID4KewogICAgdGVtcGxhdGU8IHR5cGVu
YW1lIExpc3QsIHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYWxnb3JpdGhtCiAgICB7CiAgICAgICAgdHlw
ZWRlZiBsaXN0X25vZGU8CiAgICAgICAgICAgICAgdHlwZW5hbWUgTGlzdDo6c2l6ZTo6bmV4dAog
ICAgICAgICAgICAsIFQKICAgICAgICAgICAgLCB0eXBlbmFtZSBMaXN0Ojp0eXBlCiAgICAgICAg
ICAgID4gdHlwZTsKICAgIH07Cn07Cgp9Cn0KIyAyMiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvbXBsL2xpc3QvbGlzdDAuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv
bXBsL2xpc3QvYXV4Xy9wb3BfZnJvbnQuaHBwIiAxCiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9saXN0L2F1eF8vcG9wX2Zyb250LmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFt
ZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBwb3BfZnJvbnRfdHJhaXRzPCBhdXg6Omxp
c3RfdGFnID4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1lIExpc3QgPiBzdHJ1Y3QgYWxnb3JpdGht
CiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBMaXN0OjpuZXh0IHR5cGU7CiAgICB9Owp9
OwoKfQp9CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2xpc3QwLmhw
cCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vZnJvbnQu
aHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vZnJv
bnQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9mcm9udF9md2QuaHBw
IiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9mcm9udF9md2QuaHBwIgpu
YW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcg
PiBzdHJ1Y3QgZnJvbnRfdHJhaXRzOwp0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UgPiBzdHJ1
Y3QgZnJvbnQ7Cgp9Cn0KIyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3Qv
YXV4Xy9mcm9udC5ocHAiIDIKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRl
bXBsYXRlPD4Kc3RydWN0IGZyb250X3RyYWl0czwgYXV4OjpsaXN0X3RhZyA+CnsKICAgIHRlbXBs
YXRlPCB0eXBlbmFtZSBMaXN0ID4gc3RydWN0IGFsZ29yaXRobQogICAgewogICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgTGlzdDo6aXRlbSB0eXBlOwogICAgfTsKfTsKCn0KfQojIDI0ICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9saXN0MC5ocHAiIDIKIyAxICIvdXNyL2xvY2Fs
L3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL2NsZWFyLmhwcCIgMQojIDI0ICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL2NsZWFyLmhwcCIKbmFtZXNwYWNlIGJv
b3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBjbGVhcl90cmFpdHM8IGF1
eDo6bGlzdF90YWcgPgp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgTGlzdCA+IHN0cnVjdCBhbGdv
cml0aG0KICAgIHsKICAgICAgICB0eXBlZGVmIG51bGxfbm9kZSB0eXBlOwogICAgfTsKfTsKCn0K
fQojIDI1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9saXN0MC5ocHAiIDIK
IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL08xX3NpemUuaHBw
IiAxCiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vTzFfc2l6
ZS5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8PgpzdHJ1
Y3QgTzFfc2l6ZV90cmFpdHM8IGF1eDo6bGlzdF90YWcgPgp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5h
bWUgTGlzdCA+IHN0cnVjdCBhbGdvcml0aG0KICAgICAgICA6IExpc3Q6OnNpemUKICAgIHsKICAg
IH07Cn07Cgp9Cn0KIyAyNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvbGlz
dDAuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy9z
aXplLmhwcCIgMQojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhf
L3NpemUuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPD4K
c3RydWN0IHNpemVfdHJhaXRzPCBhdXg6Omxpc3RfdGFnID4KewogICAgdGVtcGxhdGU8IHR5cGVu
YW1lIExpc3QgPiBzdHJ1Y3QgYWxnb3JpdGhtCiAgICAgICAgOiBMaXN0OjpzaXplCiAgICB7CiAg
ICB9Owp9OwoKfQp9CiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2xp
c3QwLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8v
ZW1wdHkuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1
eF8vZW1wdHkuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9lbXB0eV9m
d2QuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9lbXB0eV9md2Qu
aHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFt
ZSBUYWcgPiBzdHJ1Y3QgZW1wdHlfdHJhaXRzOwp0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2Ug
PiBzdHJ1Y3QgZW1wdHk7Cgp9Cn0KIyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs
L2xpc3QvYXV4Xy9lbXB0eS5ocHAiIDIKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1w
bCB7Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBlbXB0eV90cmFpdHM8IGF1eDo6bGlzdF90YWcgPgp7CiAg
ICB0ZW1wbGF0ZTwgdHlwZW5hbWUgTGlzdCA+IHN0cnVjdCBhbGdvcml0aG0KICAgICAgICA6IG5v
dF88dHlwZW5hbWUgTGlzdDo6c2l6ZT4KICAgIHsKICAgIH07Cn07Cgp9Cn0KIyAyOCAiL3Vzci9s
b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvbGlzdDAuaHBwIiAyCiMgMSAiL3Vzci9sb2Nh
bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy9iZWdpbl9lbmQuaHBwIiAxCiMgMjEgIi91
c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vYmVnaW5fZW5kLmhwcCIKIyAx
ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL2l0ZXJhdG9yLmhwcCIg
MQojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL2l0ZXJhdG9y
LmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgdHlwZW5h
bWUgTm9kZSA+CnN0cnVjdCBsaXN0X2l0ZXJhdG9yCnsKICAgIHR5cGVkZWYgZm9yd2FyZF9pdGVy
YXRvcl90YWcgY2F0ZWdvcnk7CiAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGU6Oml0ZW0gdHlwZTsK
ICAgIHR5cGVkZWYgbGlzdF9pdGVyYXRvcjx0eXBlbmFtZSBOb2RlOjpuZXh0PiBuZXh0Owp9OwoK
dGVtcGxhdGU8PgpzdHJ1Y3QgbGlzdF9pdGVyYXRvcjxudWxsX25vZGU+CnsKICAgIHR5cGVkZWYg
Zm9yd2FyZF9pdGVyYXRvcl90YWcgY2F0ZWdvcnk7Cn07Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEg
PiBzdHJ1Y3QgbGFtYmRhPCBsaXN0X2l0ZXJhdG9yPCBUMSA+ID4geyB0eXBlZGVmIGxpc3RfaXRl
cmF0b3I8IFQxID4gdHlwZTsgfTsKCn0KfQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z
dC9tcGwvbGlzdC9hdXhfL2JlZ2luX2VuZC5ocHAiIDIKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFt
ZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBiZWdpbl90cmFpdHM8IGF1eDo6bGlzdF90
YWcgPgp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgTGlzdCA+IHN0cnVjdCBhbGdvcml0aG0KICAg
IHsKICAgICAgICB0eXBlZGVmIGxpc3RfaXRlcmF0b3I8dHlwZW5hbWUgTGlzdDo6dHlwZT4gdHlw
ZTsKICAgIH07Cn07Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBlbmRfdHJhaXRzPCBhdXg6Omxpc3RfdGFn
ID4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1lID4gc3RydWN0IGFsZ29yaXRobQogICAgewogICAg
ICAgIHR5cGVkZWYgbGlzdF9pdGVyYXRvcjxudWxsX25vZGU+IHR5cGU7CiAgICB9Owp9OwoKfQp9
CiMgMjkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2xpc3QwLmhwcCIgMgoK
Cm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIER1
bW15ID0gdm9pZF8gPiBzdHJ1Y3QgbGlzdDA7CnRlbXBsYXRlPD4gc3RydWN0IGxpc3QwPHZvaWRf
PgogICAgOiBudWxsX25vZGUKewogICAgdHlwZWRlZiBudWxsX25vZGUgdHlwZTsKfTsKCn0KfQoj
IDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9saXN0MTAuaHBwIiAyCiMg
MzAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2xpc3QxMC5ocHAiCiMgMSAi
L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy9pbmNsdWRlX3ByZXByb2Nl
c3NlZC5ocHAiIDEKIyAyNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4
Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v
c3QvbXBsL2xpc3QvYXV4Xy9wcmVwcm9jZXNzZWQvcGxhaW4vbGlzdDEwLmhwcCIgMQoKCgpuYW1l
c3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBU
MAogICAgPgpzdHJ1Y3QgbGlzdDEKICAgIDogbGlzdF9ub2RlPAogICAgICAgICAgaW50ZWdyYWxf
YzwgbG9uZywxID4KICAgICAgICAsIFQwCiAgICAgICAgLCBudWxsX25vZGUKICAgICAgICA+CnsK
ICAgIHR5cGVkZWYgbGlzdDEgdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBUMCwg
dHlwZW5hbWUgVDEKICAgID4Kc3RydWN0IGxpc3QyCiAgICA6IGxpc3Rfbm9kZTwKICAgICAgICAg
IGludGVncmFsX2M8IGxvbmcsMiA+CiAgICAgICAgLCBUMAogICAgICAgICwgbGlzdDE8VDE+CiAg
ICAgICAgPgp7CiAgICB0eXBlZGVmIGxpc3QyIHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlw
ZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMgogICAgPgpzdHJ1Y3QgbGlzdDMKICAg
IDogbGlzdF9ub2RlPAogICAgICAgICAgaW50ZWdyYWxfYzwgbG9uZywzID4KICAgICAgICAsIFQw
CiAgICAgICAgLCBsaXN0MjwgVDEsVDIgPgogICAgICAgID4KewogICAgdHlwZWRlZiBsaXN0MyB0
eXBlOwp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDIsIHR5cGVuYW1lIFQzCiAgICA+CnN0cnVjdCBsaXN0NAogICAgOiBsaXN0X25vZGU8CiAg
ICAgICAgICBpbnRlZ3JhbF9jPCBsb25nLDQgPgogICAgICAgICwgVDAKICAgICAgICAsIGxpc3Qz
PCBUMSxUMixUMyA+CiAgICAgICAgPgp7CiAgICB0eXBlZGVmIGxpc3Q0IHR5cGU7Cn07Cgp0ZW1w
bGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0CiAgICA+CnN0cnVjdCBsaXN0NQogICAgOiBsaXN0X25vZGU8CiAg
ICAgICAgICBpbnRlZ3JhbF9jPCBsb25nLDUgPgogICAgICAgICwgVDAKICAgICAgICAsIGxpc3Q0
PCBUMSxUMixUMyxUNCA+CiAgICAgICAgPgp7CiAgICB0eXBlZGVmIGxpc3Q1IHR5cGU7Cn07Cgp0
ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlw
ZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVuYW1lIFQ1CiAgICA+CnN0cnVjdCBsaXN0
NgogICAgOiBsaXN0X25vZGU8CiAgICAgICAgICBpbnRlZ3JhbF9jPCBsb25nLDYgPgogICAgICAg
ICwgVDAKICAgICAgICAsIGxpc3Q1PCBUMSxUMixUMyxUNCxUNSA+CiAgICAgICAgPgp7CiAgICB0
eXBlZGVmIGxpc3Q2IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVu
YW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVu
YW1lIFQ1LCB0eXBlbmFtZSBUNgogICAgPgpzdHJ1Y3QgbGlzdDcKICAgIDogbGlzdF9ub2RlPAog
ICAgICAgICAgaW50ZWdyYWxfYzwgbG9uZyw3ID4KICAgICAgICAsIFQwCiAgICAgICAgLCBsaXN0
NjwgVDEsVDIsVDMsVDQsVDUsVDYgPgogICAgICAgID4KewogICAgdHlwZWRlZiBsaXN0NyB0eXBl
Owp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUg
VDYsIHR5cGVuYW1lIFQ3CiAgICA+CnN0cnVjdCBsaXN0OAogICAgOiBsaXN0X25vZGU8CiAgICAg
ICAgICBpbnRlZ3JhbF9jPCBsb25nLDggPgogICAgICAgICwgVDAKICAgICAgICAsIGxpc3Q3PCBU
MSxUMixUMyxUNCxUNSxUNixUNyA+CiAgICAgICAgPgp7CiAgICB0eXBlZGVmIGxpc3Q4IHR5cGU7
Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU
MiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBU
NiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4CiAgICA+CnN0cnVjdCBsaXN0OQogICAgOiBsaXN0
X25vZGU8CiAgICAgICAgICBpbnRlZ3JhbF9jPCBsb25nLDkgPgogICAgICAgICwgVDAKICAgICAg
ICAsIGxpc3Q4PCBUMSxUMixUMyxUNCxUNSxUNixUNyxUOCA+CiAgICAgICAgPgp7CiAgICB0eXBl
ZGVmIGxpc3Q5IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1l
IFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVuYW1l
IFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQog
ICAgPgpzdHJ1Y3QgbGlzdDEwCiAgICA6IGxpc3Rfbm9kZTwKICAgICAgICAgIGludGVncmFsX2M8
IGxvbmcsMTAgPgogICAgICAgICwgVDAKICAgICAgICAsIGxpc3Q5PCBUMSxUMixUMyxUNCxUNSxU
NixUNyxUOCxUOSA+CiAgICAgICAgPgp7CiAgICB0eXBlZGVmIGxpc3QxMCB0eXBlOwp9OwoKfQp9
CiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vaW5jbHVkZV9w
cmVwcm9jZXNzZWQuaHBwIiAyCiMgMzEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9s
aXN0L2xpc3QxMC5ocHAiIDIKIyAzNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xp
c3QuaHBwIiAyCiMgNDYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0LmhwcCIK
IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nl
c3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5j
bHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21w
bC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9saXN0LmhwcCIgMQoKCgpuYW1lc3BhY2UgYm9vc3Qg
ewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBUMCA9IHZvaWRfLCB0
eXBlbmFtZSBUMSA9IHZvaWRfLCB0eXBlbmFtZSBUMiA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFQz
ID0gdm9pZF8sIHR5cGVuYW1lIFQ0ID0gdm9pZF8sIHR5cGVuYW1lIFQ1ID0gdm9pZF8KICAgICwg
dHlwZW5hbWUgVDYgPSB2b2lkXywgdHlwZW5hbWUgVDcgPSB2b2lkXywgdHlwZW5hbWUgVDggPSB2
b2lkXwogICAgLCB0eXBlbmFtZSBUOSA9IHZvaWRfCiAgICA+CnN0cnVjdCBsaXN0OwoKdGVtcGxh
dGU8CgogICAgPgpzdHJ1Y3QgbGlzdDwKICAgICAgICAgIHZvaWRfLCB2b2lkXywgdm9pZF8sIHZv
aWRfLCB2b2lkXywgdm9pZF8sIHZvaWRfLCB2b2lkXywgdm9pZF8KICAgICAgICAsIHZvaWRfCiAg
ICAgICAgPgogICAgOiBsaXN0MDwgPgp7CiAgICB0eXBlZGVmIGxpc3QwPCA+IHR5cGU7Cn07Cgp0
ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAKICAgID4Kc3RydWN0IGxpc3Q8CiAgICAgICAgICBU
MCwgdm9pZF8sIHZvaWRfLCB2b2lkXywgdm9pZF8sIHZvaWRfLCB2b2lkXywgdm9pZF8sIHZvaWRf
LCB2b2lkXwogICAgICAgID4KICAgIDogbGlzdDE8VDA+CnsKICAgIHR5cGVkZWYgbGlzdDE8VDA+
IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxCiAgICA+
CnN0cnVjdCBsaXN0PAogICAgICAgICAgVDAsIFQxLCB2b2lkXywgdm9pZF8sIHZvaWRfLCB2b2lk
Xywgdm9pZF8sIHZvaWRfLCB2b2lkXywgdm9pZF8KICAgICAgICA+CiAgICA6IGxpc3QyPCBUMCxU
MSA+CnsKICAgIHR5cGVkZWYgbGlzdDI8IFQwLFQxID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAg
ICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyCiAgICA+CnN0cnVjdCBsaXN0
PCBUMCxUMSxUMix2b2lkXyx2b2lkXyx2b2lkXyx2b2lkXyx2b2lkXyx2b2lkXyx2b2lkXyA+CiAg
ICA6IGxpc3QzPCBUMCxUMSxUMiA+CnsKICAgIHR5cGVkZWYgbGlzdDM8IFQwLFQxLFQyID4gdHlw
ZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1l
IFQyLCB0eXBlbmFtZSBUMwogICAgPgpzdHJ1Y3QgbGlzdDwgVDAsVDEsVDIsVDMsdm9pZF8sdm9p
ZF8sdm9pZF8sdm9pZF8sdm9pZF8sdm9pZF8gPgogICAgOiBsaXN0NDwgVDAsVDEsVDIsVDMgPgp7
CiAgICB0eXBlZGVmIGxpc3Q0PCBUMCxUMSxUMixUMyA+IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAg
ICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5
cGVuYW1lIFQ0CiAgICA+CnN0cnVjdCBsaXN0PCBUMCxUMSxUMixUMyxUNCx2b2lkXyx2b2lkXyx2
b2lkXyx2b2lkXyx2b2lkXyA+CiAgICA6IGxpc3Q1PCBUMCxUMSxUMixUMyxUNCA+CnsKICAgIHR5
cGVkZWYgbGlzdDU8IFQwLFQxLFQyLFQzLFQ0ID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0
eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h
bWUgVDQKICAgICwgdHlwZW5hbWUgVDUKICAgID4Kc3RydWN0IGxpc3Q8IFQwLFQxLFQyLFQzLFQ0
LFQ1LHZvaWRfLHZvaWRfLHZvaWRfLHZvaWRfID4KICAgIDogbGlzdDY8IFQwLFQxLFQyLFQzLFQ0
LFQ1ID4KewogICAgdHlwZWRlZiBsaXN0NjwgVDAsVDEsVDIsVDMsVDQsVDUgPiB0eXBlOwp9OwoK
dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5
cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYKICAg
ID4Kc3RydWN0IGxpc3Q8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LHZvaWRfLHZvaWRfLHZvaWRfID4K
ICAgIDogbGlzdDc8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2ID4KewogICAgdHlwZWRlZiBsaXN0Nzwg
VDAsVDEsVDIsVDMsVDQsVDUsVDYgPiB0eXBlOwp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1l
IFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAog
ICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3CiAgICA+CnN0cnVjdCBs
aXN0PCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyx2b2lkXyx2b2lkXyA+CiAgICA6IGxpc3Q4PCBU
MCxUMSxUMixUMyxUNCxUNSxUNixUNyA+CnsKICAgIHR5cGVkZWYgbGlzdDg8IFQwLFQxLFQyLFQz
LFQ0LFQ1LFQ2LFQ3ID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBUMCwgdHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKICAgICwgdHlw
ZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgKICAgID4Kc3Ry
dWN0IGxpc3Q8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LHZvaWRfID4KICAgIDogbGlzdDk8
IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4ID4KewogICAgdHlwZWRlZiBsaXN0OTwgVDAsVDEs
VDIsVDMsVDQsVDUsVDYsVDcsVDggPiB0eXBlOwp9OwoKCnRlbXBsYXRlPAogICAgICB0eXBlbmFt
ZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQK
ICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgs
IHR5cGVuYW1lIFQ5CiAgICA+CnN0cnVjdCBsaXN0CiAgICA6IGxpc3QxMDwgVDAsVDEsVDIsVDMs
VDQsVDUsVDYsVDcsVDgsVDkgPgp7CiAgICB0eXBlZGVmIGxpc3QxMDwgVDAsVDEsVDIsVDMsVDQs
VDUsVDYsVDcsVDgsVDkgPiB0eXBlOwp9OwoKfQp9CiMgMjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0
L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIgMgojIDQ3ICIvdXNyL2xv
Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC5ocHAiIDIKIyA0ICJpb19hbnkuY3BwIiAyCgoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2lvc3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjIvaW9zdHJlYW0iIDMKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICBl
eHRlcm4gaXN0cmVhbSBjaW47CiAgZXh0ZXJuIG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0cmVh
bSBjZXJyOwogIGV4dGVybiBvc3RyZWFtIGNsb2c7CgogIGV4dGVybiB3aXN0cmVhbSB3Y2luOwog
IGV4dGVybiB3b3N0cmVhbSB3Y291dDsKICBleHRlcm4gd29zdHJlYW0gd2NlcnI7CiAgZXh0ZXJu
IHdvc3RyZWFtIHdjbG9nOwoKCgogIHN0YXRpYyBpb3NfYmFzZTo6SW5pdCBfX2lvaW5pdDsKfQoj
IDYgImlvX2FueS5jcHAiIDIKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL3N0ZGV4
Y2VwdCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL3N0ZGV4Y2VwdCIgMwoK
CgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKICBjbGFzcyBsb2dpY19lcnJvciA6IHB1YmxpYyBleGNl
cHRpb24KICB7CiAgICBzdHJpbmcgX01fbXNnOwoKICBwdWJsaWM6CgogICAgZXhwbGljaXQKICAg
IGxvZ2ljX2Vycm9yKGNvbnN0IHN0cmluZyYgX19hcmcpOwoKICAgIHZpcnR1YWwKICAgIH5sb2dp
Y19lcnJvcigpIHRocm93KCk7CgoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICB3aGF0KCkg
Y29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGRvbWFpbl9lcnJvciA6IHB1YmxpYyBsb2dp
Y19lcnJvcgogIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBkb21haW5fZXJyb3IoY29uc3Qgc3Ry
aW5nJiBfX2FyZyk7CiAgfTsKCgogIGNsYXNzIGludmFsaWRfYXJndW1lbnQgOiBwdWJsaWMgbG9n
aWNfZXJyb3IKICB7CiAgcHVibGljOgogICAgZXhwbGljaXQgaW52YWxpZF9hcmd1bWVudChjb25z
dCBzdHJpbmcmIF9fYXJnKTsKICB9OwoKCgogIGNsYXNzIGxlbmd0aF9lcnJvciA6IHB1YmxpYyBs
b2dpY19lcnJvcgogIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBsZW5ndGhfZXJyb3IoY29uc3Qg
c3RyaW5nJiBfX2FyZyk7CiAgfTsKCgoKICBjbGFzcyBvdXRfb2ZfcmFuZ2UgOiBwdWJsaWMgbG9n
aWNfZXJyb3IKICB7CiAgcHVibGljOgogICAgZXhwbGljaXQgb3V0X29mX3JhbmdlKGNvbnN0IHN0
cmluZyYgX19hcmcpOwogIH07CgoKCgoKCiAgY2xhc3MgcnVudGltZV9lcnJvciA6IHB1YmxpYyBl
eGNlcHRpb24KICB7CiAgICBzdHJpbmcgX01fbXNnOwoKICBwdWJsaWM6CgogICAgZXhwbGljaXQK
ICAgIHJ1bnRpbWVfZXJyb3IoY29uc3Qgc3RyaW5nJiBfX2FyZyk7CgogICAgdmlydHVhbAogICAg
fnJ1bnRpbWVfZXJyb3IoKSB0aHJvdygpOwoKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAg
d2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgogIGNsYXNzIHJhbmdlX2Vycm9yIDogcHVibGlj
IHJ1bnRpbWVfZXJyb3IKICB7CiAgcHVibGljOgogICAgZXhwbGljaXQgcmFuZ2VfZXJyb3IoY29u
c3Qgc3RyaW5nJiBfX2FyZyk7CiAgfTsKCgogIGNsYXNzIG92ZXJmbG93X2Vycm9yIDogcHVibGlj
IHJ1bnRpbWVfZXJyb3IKICB7CiAgcHVibGljOgogICAgZXhwbGljaXQgb3ZlcmZsb3dfZXJyb3Io
Y29uc3Qgc3RyaW5nJiBfX2FyZyk7CiAgfTsKCgogIGNsYXNzIHVuZGVyZmxvd19lcnJvciA6IHB1
YmxpYyBydW50aW1lX2Vycm9yCiAgewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IHVuZGVyZmxvd19l
cnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKICB9Owp9CiMgOSAiaW9fYW55LmNwcCIgMgoKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9tYXAiIDEgMwojIDY1ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9tYXAiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfdHJlZS5oIiAxIDMKIyA5MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfdHJlZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIGVudW0gX1JiX3RyZWVfY29sb3IgeyBfTV9y
ZWQgPSBmYWxzZSwgX01fYmxhY2sgPSB0cnVlIH07CgogIHN0cnVjdCBfUmJfdHJlZV9ub2RlX2Jh
c2UKICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRyOwoKICAgIF9S
Yl90cmVlX2NvbG9yIF9NX2NvbG9yOwogICAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICAgIF9CYXNl
X3B0ciBfTV9sZWZ0OwogICAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoKICAgIHN0YXRpYyBfQmFzZV9w
dHIKICAgIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsKICAgICAgd2hpbGUgKF9feC0+
X01fbGVmdCAhPSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICAgIHJldHVybiBfX3g7CiAgICB9
CgogICAgc3RhdGljIF9CYXNlX3B0cgogICAgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogICAg
ewogICAgICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0Owog
ICAgICByZXR1cm4gX194OwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAg
ICBzdHJ1Y3QgX1JiX3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jhc2UKICAgIHsK
ICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOwogICAgICBfVmFs
IF9NX3ZhbHVlX2ZpZWxkOwogICAgfTsKCiAgc3RydWN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3IK
ICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsK
ICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogICAgX0Jhc2VfcHRyIF9N
X25vZGU7CgogICAgdm9pZAogICAgX01faW5jcmVtZW50KCkKICAgIHsKICAgICAgaWYgKF9NX25v
ZGUtPl9NX3JpZ2h0ICE9IDApCiAgICAgICAgewogICAgICAgICAgX01fbm9kZSA9IF9NX25vZGUt
Pl9NX3JpZ2h0OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkKICAgICAg
ICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgICAgfQogICAgICBlbHNlCiAg
ICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAg
ICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAgIF9feSA9IF9feS0+X01fcGFy
ZW50OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gX195
KQogICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkCiAg
ICBfTV9kZWNyZW1lbnQoKQogICAgewogICAgICBpZiAoX01fbm9kZS0+X01fY29sb3IgPT0gX01f
cmVkCiAgICAgICAgICAmJiBfTV9ub2RlLT5fTV9wYXJlbnQtPl9NX3BhcmVudCA9PSBfTV9ub2Rl
KQogICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgZWxzZSBpZiAoX01f
bm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kgPSBf
TV9ub2RlLT5fTV9sZWZ0OwogICAgICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQgIT0gMCkKICAg
ICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9N
X25vZGUtPl9NX3BhcmVudDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fbGVm
dCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgICAg
ICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX25vZGUg
PSBfX3k7CiAgICAgICAgfQogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5
cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfaXRlcmF0b3Ig
OiBwdWJsaWMgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgogICAgewogICAgICB0eXBlZGVmIF9WYWwg
dmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBf
UHRyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYs
IF9WYWwqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBj
b25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+CiAgICAgIGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBl
ZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+IF9TZWxmOwogICAgICB0eXBl
ZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CgogICAgICBfUmJfdHJlZV9pdGVy
YXRvcigpIHt9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7IF9NX25v
ZGUgPSBfX3g7IH0KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQp
IHsgX01fbm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxk
OyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9w
ZXJhdG9yKigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAg
ICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAg
ICBfU2VsZgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1w
ID0gKnRoaXM7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwog
ICAgICB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3ItLSgpIHsgX01fZGVjcmVtZW50KCk7
IHJldHVybiAqdGhpczsgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3ItLShpbnQpCiAgICAg
IHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIF9NX2RlY3JlbWVudCgpOwog
ICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9W
YWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYgX194LAog
ICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYg
X195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9S
Yl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feCwKICAg
ICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYg
X195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9S
Yl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feCwKICAgICAgICAgICAgICAg
Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYg
X195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYs
IF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWws
IF9SZWYsIF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9k
ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9W
YWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBf
VmFsJiwgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9k
ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX194LAog
ICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwg
Y29uc3QgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9k
ZTsgfQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9SYl90cmVlX25vZGVf
YmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX1JiX3RyZWVf
bm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogICAgX194LT5fTV9yaWdodCA9IF9feS0+
X01fbGVmdDsKICAgIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgICBfX3ktPl9NX2xlZnQtPl9N
X3BhcmVudCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogICAg
aWYgKF9feCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYgKF9feCA9
PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQg
PSBfX3k7CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAg
IF9feS0+X01fbGVmdCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0KCiAgaW5s
aW5lIHZvaWQKICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gs
IF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2Uq
IF9feSA9IF9feC0+X01fbGVmdDsKICAgIF9feC0+X01fbGVmdCA9IF9feS0+X01fcmlnaHQ7CiAg
ICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICBfX3ktPl9NX3JpZ2h0LT5fTV9wYXJlbnQg
PSBfX3g7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICAgIGlmIChfX3gg
PT0gX19yb290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChfX3ggPT0gX194LT5f
TV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7
CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgX195LT5f
TV9yaWdodCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0KCiAgaW5saW5lIHZv
aWQKICBfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVl
X25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfX3gtPl9NX2NvbG9yID0gX01fcmVkOwogICAg
d2hpbGUgKF9feCAhPSBfX3Jvb3QKICAgICAgICAgICAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29s
b3IgPT0gX01fcmVkKQogICAgICB7CiAgICAgICAgaWYgKF9feC0+X01fcGFyZW50ID09IF9feC0+
X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9S
Yl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmln
aHQ7CiAgICAgICAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01f
YmxhY2s7CiAgICAgICAgICAgICAgICBfX3ktPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAg
ICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg
ICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAg
ICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYg
KF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgICAgICAgICAg
ICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAg
ICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7
CiAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9wYXJlbnQtPl9N
X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZWxz
ZQogICAgICAgICAgewogICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+
X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgIGlmIChfX3kgJiYgX195
LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX194
LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3ktPl9N
X2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFy
ZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFy
ZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVm
dCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01f
cGFyZW50OwogICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gsIF9f
cm9vdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50
LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N
X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3Rh
dGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAg
IH0KICAgICAgICAgIH0KICAgICAgfQogICAgX19yb290LT5fTV9jb2xvciA9IF9NX2JsYWNrOwog
IH0KCiAgaW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKICBfUmJfdHJlZV9yZWJhbGFuY2VfZm9y
X2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRtb3N0KQogIHsKICAg
IF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX196OwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBf
X3ggPSAwOwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hfcGFyZW50ID0gMDsKICAgIGlmIChf
X3ktPl9NX2xlZnQgPT0gMCkKICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgIGVsc2UKICAg
ICAgaWYgKF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX3ggPSBfX3ktPl9NX2xlZnQ7CiAg
ICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAg
ICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICAgICAgX195ID0gX195LT5fTV9s
ZWZ0OwogICAgICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgICAgICB9CiAgICBpZiAoX195
ICE9IF9feikKICAgICAgewoKICAgICAgICBfX3otPl9NX2xlZnQtPl9NX3BhcmVudCA9IF9feTsK
ICAgICAgICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAgICAgICAgaWYgKF9feSAhPSBf
X3otPl9NX3JpZ2h0KQogICAgICAgICAgewogICAgICAgICAgICBfX3hfcGFyZW50ID0gX195LT5f
TV9wYXJlbnQ7CiAgICAgICAgICAgIGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9w
YXJlbnQ7CiAgICAgICAgICAgIF9feS0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICAg
ICAgICBfX3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgICAgICAgX196LT5fTV9y
aWdodC0+X01fcGFyZW50ID0gX195OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAg
IF9feF9wYXJlbnQgPSBfX3k7CiAgICAgICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgICAgICBf
X3Jvb3QgPSBfX3k7CiAgICAgICAgZWxzZSBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0g
X196KQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICAgICAgZWxz
ZQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgICAgIF9feS0+
X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgICAgc3RkOjpzd2FwKF9feS0+X01fY29s
b3IsIF9fei0+X01fY29sb3IpOwogICAgICAgIF9feSA9IF9fejsKCiAgICAgIH0KICAgIGVsc2UK
ICAgICAgewogICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICBpZiAo
X194KQogICAgICAgICAgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICBp
ZiAoX19yb290ID09IF9feikKICAgICAgICAgIF9fcm9vdCA9IF9feDsKICAgICAgICBlbHNlCiAg
ICAgICAgICBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICAgICAgICBf
X3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
X196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX194OwogICAgICAgIGlmIChfX2xlZnRtb3N0ID09
IF9feikKICAgICAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAgICAgICAgIF9fbGVm
dG1vc3QgPSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fbGVm
dG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsKICAgICAgICBpZiAo
X19yaWdodG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+X01fbGVmdCA9PSAwKQogICAg
ICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194
KTsKICAgICAgfQogICAgaWYgKF9feS0+X01fY29sb3IgIT0gX01fcmVkKQogICAgICB7CiAgICAg
ICAgd2hpbGUgKF9feCAhPSBfX3Jvb3QgJiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29sb3IgPT0g
X01fYmxhY2spKQogICAgICAgICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0KQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFy
ZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfTV9yZWQp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9i
bGFjazsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAg
ICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7
CiAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIGlmICgoX193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAg
ICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spICYmCiAgICAgICAg
ICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+
X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX194
ID0gX194X3BhcmVudDsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQt
Pl9NX3BhcmVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0ID09IDAKICAgICAg
ICAgICAgICAgICAgICAgIHx8IF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKQog
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX2xl
ZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAg
ICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJl
ZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICAgICAgX193ID0g
X194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAgICAgICAg
ICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIGlm
IChfX3ctPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2Nv
bG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9f
eF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAgICAgICAg
ICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAg
ICAgICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAg
ICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX1Ji
X3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAg
IF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01f
cmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSAmJgogICAgICAgICAgICAgICAgICAoX193LT5f
TV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3Ig
PT0gX01fYmxhY2spKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9N
X2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAg
ICAgICAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8IF9fdy0+X01fbGVmdC0+X01fY29sb3Ig
PT0gX01fYmxhY2spCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
aWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAg
ICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAg
ICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICAg
ICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsK
ICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAg
ICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkKICAgICAgICAgICAgICAgICAgICBfX3ctPl9N
X2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3Jv
dGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIGlmIChfX3gpIF9feC0+X01f
Y29sb3IgPSBfTV9ibGFjazsKICAgICAgfQogICAgcmV0dXJuIF9feTsKICB9CgoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jLCBib29sIF9TX2luc3RhbmNlbGVz
cz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBl
IGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9CgogICAgICBfUmJfdHJlZV9h
bGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX01fbm9kZV9hbGxv
Y2F0b3IoX19hKSwgX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgogICAgICB0eXBlbmFt
ZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5
cGUKICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9N
X2hlYWRlcjsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKSB7
IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAg
ICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgICAgeyBfTV9ub2RlX2Fs
bG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1Rw
LCBfQWxsb2MsIHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9B
bGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK
ICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9j
YXRvcl90eXBlKCk7IH0KCiAgICAgIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9y
X3R5cGUmKSA6IF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3RlZDoKICAgICAgX1JiX3RyZWVf
bm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjpfQWxsb2NfdHlwZQogICAgICBfQWxsb2Nf
dHlwZTsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKSB7IHJl
dHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0
X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUo
X19wLCAxKTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfYmFzZSA6IHB1YmxpYyBfUmJfdHJlZV9hbGxvY19iYXNl
PF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3Ry
YWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgIHsKICAgICAgdHlwZWRlZiBf
UmJfdHJlZV9hbGxvY19iYXNlPF9UcCwKICAgICAgICBfQWxsb2MsIF9BbGxvY190cmFpdHM8X1Rw
LCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+IF9CYXNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIF9SYl90cmVlX2Jh
c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpIHsgX01faGVh
ZGVyID0gX01fZ2V0X25vZGUoKTsgfQogICAgICB+X1JiX3RyZWVfYmFzZSgpIHsgX01fcHV0X25v
ZGUoX01faGVhZGVyKTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlLCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbD4gPgogICAgY2xhc3MgX1JiX3Ry
ZWUgOiBwcm90ZWN0ZWQgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+CiAgICB7CiAgICAgIHR5
cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+IF9CYXNlOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKICAgICAgdHlwZWRl
ZiBfUmJfdHJlZV9ub2RlPF9WYWw+IF9SYl90cmVlX25vZGU7CgogICAgcHVibGljOgogICAgICB0
eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgICAgIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBlOwogICAg
ICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVf
dHlwZSogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7
CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0
eXBlZGVmIF9SYl90cmVlX25vZGUqIF9MaW5rX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAg
ICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6
Z2V0X2FsbG9jYXRvcigpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB1c2luZyBfQmFzZTo6X01f
Z2V0X25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICAgICAgdXNpbmcgX0Jh
c2U6Ol9NX2hlYWRlcjsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY3JlYXRlX25vZGUoY29u
c3QgdmFsdWVfdHlwZSYgX194KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9N
X2dldF9ub2RlKCk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9Db25zdHJ1Y3QoJl9fdG1wLT5f
TV92YWx1ZV9maWVsZCwgX194KTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAg
ICAgICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICAgICAgICAgIHRocm93OwogICAgICAgICAgfQog
ICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9j
bG9uZV9ub2RlKF9MaW5rX3R5cGUgX194KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3Rt
cCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAgICAgIF9fdG1wLT5f
TV9jb2xvciA9IF9feC0+X01fY29sb3I7CiAgICAgICAgX190bXAtPl9NX2xlZnQgPSAwOwogICAg
ICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9Cgog
ICAgICB2b2lkCiAgICAgIGRlc3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICAgICAgewogICAg
ICAgIF9EZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgICAgICBfTV9wdXRfbm9kZShf
X3ApOwogICAgICB9CgogICAgICBzaXplX3R5cGUgX01fbm9kZV9jb3VudDsKICAgICAgX0NvbXBh
cmUgX01fa2V5X2NvbXBhcmU7CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9yb290KCkgY29u
c3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3BhcmVudDsgfQoKICAgICAg
X0xpbmtfdHlwZSYKICAgICAgX01fbGVmdG1vc3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlw
ZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQoKICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01fcmln
aHRtb3N0KCkgY29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3JpZ2h0
OyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfbGVmdChfTGlua190eXBlIF9f
eCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CgogICAgICBzdGF0aWMg
X0xpbmtfdHlwZSYKICAgICAgX1NfcmlnaHQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIChfTGlu
a190eXBlJikoX194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAg
ICBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5f
TV9wYXJlbnQpOyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAgICAgIF9TX3ZhbHVlKF9MaW5r
X3R5cGUgX194KSB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBfS2V5T2ZW
YWx1ZSgpKF9TX3ZhbHVlKF9feCkpOyB9CgogICAgICBzdGF0aWMgX1JiX3RyZWVfY29sb3ImCiAg
ICAgIF9TX2NvbG9yKF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBfX3gtPl9NX2NvbG9yOyB9Cgog
ICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfbGVmdChfQmFzZV9wdHIgX194KSB7IHJl
dHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190
eXBlJgogICAgICBfU19yaWdodChfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYp
KF9feC0+X01fcmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfcGFy
ZW50KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQp
OyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAgICAgIF9TX3ZhbHVlKF9CYXNlX3B0ciBfX3gp
IHsgcmV0dXJuICgoX0xpbmtfdHlwZSlfX3gpLT5fTV92YWx1ZV9maWVsZDsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IF9LZXkmCiAgICAgIF9TX2tleShfQmFzZV9wdHIgX194KSB7IHJldHVybiBfS2V5
T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30KCiAgICAgIHN0YXRpYyBfUmJf
dHJlZV9jb2xvciYKICAgICAgX1NfY29sb3IoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5r
X3R5cGUoX194KS0+X01fY29sb3IpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZQogICAgICBf
U19taW5pbXVtKF9MaW5rX3R5cGUgX194KQogICAgICB7IHJldHVybiAoX0xpbmtfdHlwZSkgX1Ji
X3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190
eXBlCiAgICAgIF9TX21heGltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsgcmV0dXJuIChfTGlu
a190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsgfQoKICAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCByZWZlcmVuY2Us
IHBvaW50ZXI+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVl
X3R5cGUsIGNvbnN0X3JlZmVyZW5jZSwgY29uc3RfcG9pbnRlcj4KICAgICAgY29uc3RfaXRlcmF0
b3I7CgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0
X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRv
cj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgogICAgICBpdGVyYXRvcgogICAgICBf
TV9pbnNlcnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYg
X192KTsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY29weShfTGlua190eXBlIF9feCwgX0xp
bmtfdHlwZSBfX3ApOwoKICAgICAgdm9pZAogICAgICBfTV9lcmFzZShfTGlua190eXBlIF9feCk7
CgogICAgcHVibGljOgoKICAgICAgX1JiX3RyZWUoKQogICAgICAgIDogX0Jhc2UoYWxsb2NhdG9y
X3R5cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKCkKICAgICAgeyBfTV9l
bXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2Nv
bXApCiAgICAgICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwg
X01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoK
ICAgICAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSkKICAgICAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9j
b21wYXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9S
Yl90cmVlKGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+JiBfX3gpCiAgICAgICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwgX01fbm9kZV9j
b3VudCgwKSwKICAgICAgICAgICAgICAgICBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBh
cmUpCiAgICAgIHsKICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAgICAgX01f
ZW1wdHlfaW5pdGlhbGl6ZSgpOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAg
X1NfY29sb3IoX01faGVhZGVyKSA9IF9NX3JlZDsKICAgICAgICAgICAgX01fcm9vdCgpID0gX01f
Y29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICAgICAgICBfTV9sZWZ0bW9zdCgp
ID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9T
X21heGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgIH0KICAgICAgICBfTV9ub2RlX2NvdW50ID0g
X194Ll9NX25vZGVfY291bnQ7CiAgICAgIH0KCiAgICAgIH5fUmJfdHJlZSgpIHsgY2xlYXIoKTsg
fQoKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m
CiAgICAgIG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX194KTsKCiAgICBwcml2YXRlOgogICAgICB2b2lkIF9NX2VtcHR5X2lu
aXRpYWxpemUoKQogICAgICB7CiAgICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9NX3JlZDsK
CiAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVy
OwogICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICB9CgogICAgcHVibGlj
OgoKICAgICAgX0NvbXBhcmUKICAgICAga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlf
Y29tcGFyZTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0
bW9zdCgpOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIF9NX2xlZnRtb3N0KCk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpIHsgcmV0dXJu
IF9NX2hlYWRlcjsgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gX01faGVhZGVyOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigp
IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IoZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSB7IHJl
dHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
KGJlZ2luKCkpOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01f
bm9kZV9jb3VudCA9PSAwOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIF9NX25vZGVfY291bnQ7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgICAgIHZvaWQKICAgICAgc3dhcChf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190KQogICAg
ICB7CiAgICAgICAgc3RkOjpzd2FwKF9NX2hlYWRlciwgX190Ll9NX2hlYWRlcik7CiAgICAgICAg
c3RkOjpzd2FwKF9NX25vZGVfY291bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgICAgICBzdGQ6
OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgICAgIH0KCgogICAg
ICBwYWlyPGl0ZXJhdG9yLGJvb2w+CiAgICAgIGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlw
ZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90
eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAg
aW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7
CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAg
ICBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9p
ZAogICAgICBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7
CgogICAgICBzaXplX3R5cGUKICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAg
ICB2b2lkCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7Cgog
ICAgICB2b2lkCiAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBrZXlf
dHlwZSogX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKQogICAgICB7CiAgICAgICAg
aWYgKF9NX25vZGVfY291bnQgIT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fZXJhc2Uo
X01fcm9vdCgpKTsKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAg
ICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFk
ZXI7CiAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgICAgICAgfQogICAgICB9CgoK
ICAgICAgaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIGNv
bnN0X2l0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAg
ICBzaXplX3R5cGUKICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAg
ICBpdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAg
IGNvbnN0X2l0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0OwoKICAgICAgaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f
eCk7CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlw
ZSYgX194KSBjb25zdDsKCiAgICAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICAgIGVxdWFs
X3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwg
Y29uc3RfaXRlcmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0OwoKCiAgICAgIGJvb2wKICAgICAgX19yYl92ZXJpZnkoKSBjb25zdDsKICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICBy
ZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgZXF1YWwoX194LmJlZ2lu
KCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGlj
YWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3gg
PT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl
bmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgIGNv
bnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp
CiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw
ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv
bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNv
bnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I+PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX194IDwg
X195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt
ZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAg
X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAgICBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBvcGVyYXRv
cj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m
IF9feCkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkKICAgICAgICB7CgogICAgICAgICAg
Y2xlYXIoKTsKICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgICAgICAgX01fa2V5X2Nv
bXBhcmUgPSBfX3guX01fa2V5X2NvbXBhcmU7CiAgICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9
PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAg
ICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9z
dCgpID0gX01faGVhZGVyOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hl
YWRlcik7CiAgICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgp
KTsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsK
ICAgICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAg
X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgX01f
aW5zZXJ0KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195XywgY29uc3QgX1ZhbCYgX192KQog
ICAgewogICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBfX3hfOwogICAgICBfTGlu
a190eXBlIF9feSA9IChfTGlua190eXBlKSBfX3lfOwogICAgICBfTGlua190eXBlIF9fejsKCiAg
ICAgIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9feCAhPSAwIHx8CiAgICAgICAgICBfTV9rZXlf
Y29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3kpKSkKICAgICAgICB7CiAgICAg
ICAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAgICAgX1NfbGVmdChfX3kpID0g
X196OwoKICAgICAgICAgIGlmIChfX3kgPT0gX01faGVhZGVyKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX01fcm9vdCgpID0gX196OwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0g
X196OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3kgPT0gX01fbGVmdG1vc3Qo
KSkKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsKICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAgICAg
X1NfcmlnaHQoX195KSA9IF9fejsKCiAgICAgICAgICBpZiAoX195ID09IF9NX3JpZ2h0bW9zdCgp
KQogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsKICAgICAgICB9CiAgICAgIF9TX3Bh
cmVudChfX3opID0gX195OwogICAgICBfU19sZWZ0KF9feikgPSAwOwogICAgICBfU19yaWdodChf
X3opID0gMDsKICAgICAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5fTV9wYXJl
bnQpOwogICAgICArK19NX25vZGVfY291bnQ7CiAgICAgIHJldHVybiBpdGVyYXRvcihfX3opOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf
S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j
PgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfZXF1YWwoY29uc3QgX1ZhbCYgX192KQogICAgewogICAg
ICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9y
b290KCk7CiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBf
X3g7CiAgICAgICAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9T
X2tleShfX3gpKSA/CiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAg
ICAgICAgfQogICAgICByZXR1cm4gX01faW5zZXJ0KF9feCwgX195LCBfX3YpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1
ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgcGFp
cjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6aXRlcmF0b3IsCiAgICBib29sPgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsJiBfX3YpCiAg
ICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9f
eCA9IF9NX3Jvb3QoKTsKICAgICAgYm9vbCBfX2NvbXAgPSB0cnVlOwogICAgICB3aGlsZSAoX194
ICE9IDApCiAgICAgICAgewogICAgICAgICAgX195ID0gX194OwogICAgICAgICAgX19jb21wID0g
X01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICAgICAg
ICBfX3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogICAgICAgIH0K
ICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAgICAgaWYgKF9fY29tcCkKICAg
ICAgICBpZiAoX19qID09IGJlZ2luKCkpCiAgICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixi
b29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICAgIGVsc2UKICAgICAg
ICAgIC0tX19qOwogICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwg
X0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihf
TV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICByZXR1cm4gcGFpcjxpdGVyYXRv
cixib29sPihfX2osIGZhbHNlKTsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFs
LCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxf
S2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgogICAgaW5zZXJ0X3Vu
aXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIGlm
IChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAgIHsKCiAg
ICAgICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9L
ZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKQogICAgICAgICAg
ICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2Rl
LCBfX3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUo
X192KS5maXJzdDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9
PSBfTV9oZWFkZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19r
ZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICByZXR1
cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQogICAg
ICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsK
ICAgICAgICAgIC0tX19iZWZvcmU7CiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5
KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgICAgICAgJiYg
X01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLF9TX2tleShfX3Bvc2l0aW9uLl9NX25v
ZGUpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5f
TV9ub2RlKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9y
ZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVy
biBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7
CgogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRf
dW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfZXF1
YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBpZiAo
X19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkKICAgICAgICB7CgogICAg
ICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICAhX01fa2V5X2NvbXBhcmUoX1Nf
a2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAg
IHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUs
IF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9f
dik7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVh
ZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVl
KCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgICAgICAgIHJldHVybiBfTV9p
bnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7
CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAgICAgICAtLV9f
YmVmb3JlOwogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiks
IF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkKICAgICAgICAgICAgICAmJiAhX01fa2V5X2NvbXBh
cmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
ZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVy
biBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19w
b3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAg
ICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAg
ICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPGNsYXNzIF9J
ST4KICAgICAgdm9pZAogICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz46
OgogICAgICBpbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAgICAgIHsKICAg
ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgICBpbnNl
cnRfZXF1YWwoKl9fZmlyc3QpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUgX0NtcCwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8Y2xhc3MgX0lJPgogICAgdm9pZAogICAgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUoX0lJIF9f
Zmlyc3QsIF9JSSBfX2xhc3QpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgICAgICBpbnNlcnRfdW5pcXVlKCpfX2ZpcnN0KTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs
CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kg
PQogICAgICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9z
aXRpb24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfTV9oZWFkZXItPl9NX3BhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9yaWdodCk7
CiAgICAgIGRlc3Ryb3lfbm9kZShfX3kpOwogICAgICAtLV9NX25vZGVfY291bnQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZh
bHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6ZXJhc2UoY29uc3QgX0tleSYgX194KQogICAgewogICAgICBwYWlyPGl0ZXJhdG9yLGl0
ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX3gpOwogICAgICBzaXplX3R5cGUgX19uID0gZGlz
dGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgZXJhc2UoX19wLmZpcnN0LCBfX3Au
c2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tl
eSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t
cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwg
X0tvViwgX0NvbXBhcmUsIF9BbGxvYz46Ol9MaW5rX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1Zh
bCxfS29WLF9Db21wYXJlLF9BbGxvYz46OgogICAgX01fY29weShfTGlua190eXBlIF9feCwgX0xp
bmtfdHlwZSBfX3ApCiAgICB7CgogICAgICBfTGlua190eXBlIF9fdG9wID0gX01fY2xvbmVfbm9k
ZShfX3gpOwogICAgICBfX3RvcC0+X01fcGFyZW50ID0gX19wOwoKICAgICAgdHJ5CiAgICAgICAg
ewogICAgICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgICAgIF9fdG9wLT5fTV9yaWdo
dCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX190b3ApOwogICAgICAgICAgX19wID0gX190b3A7
CiAgICAgICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CgogICAgICAgICAgd2hpbGUgKF9feCAhPSAw
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9jbG9uZV9u
b2RlKF9feCk7CiAgICAgICAgICAgICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICAgICAgICAg
IF9feS0+X01fcGFyZW50ID0gX19wOwogICAgICAgICAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQog
ICAgICAgICAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195
KTsKICAgICAgICAgICAgICBfX3AgPSBfX3k7CiAgICAgICAgICAgICAgX194ID0gX1NfbGVmdChf
X3gpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewog
ICAgICAgICAgX01fZXJhc2UoX190b3ApOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX190b3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l
IF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpCiAgICB7Cgog
ICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAgICAgX01fZXJhc2UoX1Nfcmln
aHQoX194KSk7CiAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9TX2xlZnQoX194KTsKICAgICAg
ICAgIGRlc3Ryb3lfbm9kZShfX3gpOwogICAgICAgICAgX194ID0gX195OwogICAgICAgIH0KICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl
eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjoKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsK
ICAgICAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCiAgICAgICAg
Y2xlYXIoKTsKICAgICAgZWxzZQogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJh
c2UoX19maXJzdCsrKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg
X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVyYXNlKGNvbnN0IF9LZXkqIF9fZmlyc3QsIGNv
bnN0IF9LZXkqIF9fbGFzdCkKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQog
ICAgICAgIGVyYXNlKCpfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5
LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFt
ZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf
VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBf
X2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190
eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAo
IV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0gX194LCBf
X3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQo
X194KTsKCiAgICAgIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgICAgIHJldHVybiAo
X19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9ub2RlKSkp
ID8KICAgICAgICBlbmQoKSA6IF9fajsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwg
dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUg
X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZmluZChjb25z
dCBfS2V5JiBfX2spIGNvbnN0CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVy
OwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgd2hpbGUgKF9feCAhPSAw
KQogICAgICAgewogICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2sp
KQogICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICAgICAgIH0KICAgICBjb25zdF9pdGVy
YXRvciBfX2ogPSBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgIHJldHVybiAoX19qID09IGVuZCgp
IHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8KICAgICAgIGVu
ZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFs
LCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgY291bnQoY29uc3QgX0tleSYgX19rKSBjb25z
dAogICAgewogICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gX19wID0g
ZXF1YWxfcmFuZ2UoX19rKTsKICAgICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fcC5maXJz
dCwgX19wLnNlY29uZCk7CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAg
IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9S
Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGxvd2Vy
X2JvdW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9o
ZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9f
eCAhPSAwKQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAg
ICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAg
ICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+OjoKICAgIGxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QK
ICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUg
X194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICghX01f
a2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9
IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gp
OwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAg
IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIHVw
cGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBf
TV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUg
KF9feCAhPSAwKQogICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkK
ICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAg
ICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0b3IoX195KTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUg
X0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46OgogICAgdXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25z
dAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlw
ZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKF9N
X2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAgICAgX195ID0gX194LCBfX3gg
PSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194
KTsKCiAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAg
ICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lCiAgICBw
YWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjppdGVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcj4KICAgIF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVxdWFsX3JhbmdlKGNvbnN0IF9L
ZXkmIF9faykKICAgIHsgcmV0dXJuIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPihsb3dlcl9ib3Vu
ZChfX2spLCB1cHBlcl9ib3VuZChfX2spKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl
LCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lCiAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29u
c3RfaXRlcmF0b3I+CiAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxv
Yz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykgY29uc3QKICB7CiAgICByZXR1cm4g
cGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZChf
X2spKTsKICB9CgogIGlubGluZSBpbnQKICBfX2JsYWNrX2NvdW50KF9SYl90cmVlX25vZGVfYmFz
ZSogX19ub2RlLCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fcm9vdCkKICB7CiAgICBpZiAoX19ub2Rl
ID09IDApCiAgICAgIHJldHVybiAwOwogICAgaW50IF9fc3VtID0gMDsKICAgIGRvCiAgICAgIHsK
ICAgICAgICBpZiAoX19ub2RlLT5fTV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAgICsrX19z
dW07CiAgICAgICAgaWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAgICAgICBicmVhazsKICAgICAg
ICBfX25vZGUgPSBfX25vZGUtPl9NX3BhcmVudDsKICAgICAgfQogICAgd2hpbGUgKDEpOwogICAg
cmV0dXJuIF9fc3VtOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1Zh
bCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CiAgICB7CiAgICBpZiAoX01f
bm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAgICAgIHJldHVybiBfTV9ub2Rl
X2NvdW50ID09IDAgJiYgYmVnaW4oKSA9PSBlbmQoKSAmJgogICAgICAgIF9NX2hlYWRlci0+X01f
bGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBfTV9oZWFkZXI7Cgog
ICAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwog
ICAgZm9yIChjb25zdF9pdGVyYXRvciBfX2l0ID0gYmVnaW4oKTsgX19pdCAhPSBlbmQoKTsgKytf
X2l0KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5f
TV9ub2RlOwogICAgICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChfX3gpOwogICAgICAgIF9M
aW5rX3R5cGUgX19SID0gX1NfcmlnaHQoX194KTsKCiAgICAgICAgaWYgKF9feC0+X01fY29sb3Ig
PT0gX01fcmVkKQogICAgICAgICAgaWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfTV9yZWQp
CiAgICAgICAgICAgICAgfHwgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09IF9NX3JlZCkpCiAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShf
U19rZXkoX194KSwgX1Nfa2V5KF9fTCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
IGlmIChfX1IgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAg
ICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKCFfX0wgJiYgIV9fUiAmJiBfX2JsYWNr
X2NvdW50KF9feCwgX01fcm9vdCgpKSAhPSBfX2xlbikKICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgfQoKICAgIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1Nf
bWluaW11bShfTV9yb290KCkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX01fcmlnaHRt
b3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCiAgICAg
IHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogICAgfQp9CiMgNjcgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4yL21hcCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfbWFwLmgiIDEgMwojIDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9tYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA3NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfbWFwLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxs
b2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KY2xhc3MgbWFwCnsKCiAKICA7CgpwdWJs
aWM6CgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAg
dHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4g
dmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1
ZV9jb21wYXJlCiAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVf
dHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PjsKICBwcm90ZWN0ZWQgOgogICAgX0NvbXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0Nv
bXBhcmUgX19jKSA6IGNvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShj
b25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAg
ICByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6
CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAg
ICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlw
ZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3Bv
aW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVmZXJl
bmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJl
bmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0
b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZXZlcnNlX2l0
ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoKCiAgbWFw
KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAgZXhwbGljaXQgbWFw
KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90
eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7fQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxv
Y2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwK
ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6
IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7
IH0KICBtYXAoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90
KF9feC5fTV90KSB7fQoKICBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRv
cj0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCkKICB7CiAgICBf
TV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtl
eV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFy
ZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21w
KCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N
X3QuZ2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9N
X3QuYmVnaW4oKTsgfQoKCgoKCiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBfTV90LmJlZ2luKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5k
KCk7IH0KCgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVu
ZCgpOyB9CgoKCgoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIF9NX3QucmJl
Z2luKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KCgoKCgoKICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7
IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCgoKCgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVu
ZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKICBib29sIGVtcHR5KCkgY29uc3Qg
eyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gX01fdC5zaXplKCk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g
X01fdC5tYXhfc2l6ZSgpOyB9CiMgMjIxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9tYXAuaCIgMwogIF9UcCYgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rKSB7CiAg
ICBpdGVyYXRvciBfX2kgPSBsb3dlcl9ib3VuZChfX2spOwoKICAgIGlmIChfX2kgPT0gZW5kKCkg
fHwga2V5X2NvbXAoKShfX2ssICgqX19pKS5maXJzdCkpCiAgICAgIF9faSA9IGluc2VydChfX2ks
IHZhbHVlX3R5cGUoX19rLCBfVHAoKSkpOwogICAgcmV0dXJuICgqX19pKS5zZWNvbmQ7CiAgfQoK
ICB2b2lkIHN3YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3
YXAoX194Ll9NX3QpOyB9CiMgMjQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9tYXAuaCIgMwogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUm
IF9feCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9CiMgMjYxICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIGluc2Vy
dChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4g
X01fdC5pbnNlcnRfdW5pcXVlKHBvc2l0aW9uLCBfX3gpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0
LCBfX2xhc3QpOwogIH0KIyAyODQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X21hcC5oIiAzCiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2Uo
X19wb3NpdGlvbik7IH0KIyAyOTcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X21hcC5oIiAzCiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJu
IF9NX3QuZXJhc2UoX194KTsgfQojIDMwOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f
bGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgoKCgoKCiAgdm9pZCBj
bGVhcigpIHsgX01fdC5jbGVhcigpOyB9CiMgMzMyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkg
eyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KIyAzNDUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX21hcC5oIiAzCiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlw
ZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDM1NCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBzaXplX3R5cGUgY291bnQoY29u
c3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZmluZChfX3gpID09IF9N
X3QuZW5kKCkgPyAwIDogMTsKICB9CiMgMzY5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBf
X3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiMgMzgyICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2Jv
dW5kKF9feCk7CiAgfQojIDM5MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
bWFwLmgiIDMKICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0
dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQojIDQwMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25z
dCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gp
OwogIH0KIyA0MjMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAz
CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgNDQzICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIHBhaXI8Y29uc3RfaXRlcmF0
b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0gKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxj
bGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I8IChjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj4oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9
KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNs
YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3Qg
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEo
X194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNjggIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4yL21hcCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfbXVsdGltYXAuaCIgMSAzCiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX211bHRpbWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAg
ICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4K
Y2xhc3MgbXVsdGltYXA7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRp
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feSk7CiMgOTAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX211bHRpbWFwLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xhc3MgbXVsdGltYXAKewoKIAogIDsKCnB1
YmxpYzoKCgoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBl
OwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBf
VHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3Mg
dmFsdWVfY29tcGFyZSA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVf
dHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+OwogIHByb3RlY3RlZDoKICAgIF9Db21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJl
KF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9y
KCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsK
ICAgICAgcmV0dXJuIGNvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2
YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAg
ICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBf
dHlwZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0
X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVm
ZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVm
ZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRl
cmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZXZlcnNl
X2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVm
IHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoKCiAg
bXVsdGltYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkgeyB9CiAgZXhw
bGljaXQgbXVsdGltYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgICAg
ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01f
dChfX2NvbXAsIF9fYSkgeyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBt
dWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAg
ICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRf
ZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21w
LCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQogIG11bHRpbWFw
KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9f
eC5fTV90KSB7IH0KCiAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVy
YXRvcj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7CiAg
ICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJl
IGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29t
cGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9j
b21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IF9NX3QuYmVnaW4oKTsgfQoKCgoKCgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90
LmVuZCgpOyB9CgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01f
dC5lbmQoKTsgfQoKCgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01f
dC5yYmVnaW4oKTsgfQoKCgoKCgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29u
c3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmVu
ZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgogIGJvb2wgZW1wdHkoKSBj
b25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KCgogIHNpemVfdHlwZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5zaXplKCk7IH0KCgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQoKICB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KIyAyNDIgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBpdGVyYXRv
ciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7IHJldHVybiBfTV90Lmluc2VydF9lcXVh
bChfX3gpOyB9CiMgMjU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0
aW1hcC5oIiAzCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZh
bHVlX3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9fcG9zaXRpb24s
IF9feCk7CiAgfQojIDI3MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVs
dGltYXAuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2Vy
dChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9N
X3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQojIDI4NCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIHZvaWQgZXJhc2UoaXRlcmF0
b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiMgMjk3ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgc2l6ZV90eXBlIGVy
YXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQojIDMw
OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIHZv
aWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90LmVy
YXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKCgoKICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFy
KCk7IH0KIyAzMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFw
LmgiIDMKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu
ZmluZChfX3gpOyB9CiMgMzQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9t
dWx0aW1hcC5oIiAzCiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBj
b25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQoKCgoKCgogIHNpemVfdHlwZSBjb3VudChj
b25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KIyAz
NjUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBp
dGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93
ZXJfYm91bmQoX194KTsgfQojIDM3OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfbXVsdGltYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQoK
CgoKCgogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4g
X01fdC51cHBlcl9ib3VuZChfX3gpOyB9CgoKCgoKCgogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2Jv
dW5kKF9feCk7CiAgfQojIDQxMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
bXVsdGltYXAuaCIgMwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0
IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoj
IDQzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwog
IHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtl
eV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0Ex
PgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEs
IF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1Qx
LCBfQzEsIF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9D
MSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbXVsdGltYXA8X0sx
LCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1h
cDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
IG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs
b2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgICAgICAgICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNjkgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4yL21hcCIgMiAzCiMgMTEgImlvX2FueS5jcHAiIDIKCnVzaW5nIGJvb3N0OjpkeW5hbWlj
X2FueTo6YW55VDsKdXNpbmcgYm9vc3Q6OmR5bmFtaWNfYW55OjpleHRyYWN0OwoKc3RydWN0IHJl
YWRlcgogIDogYm9vc3Q6OmR5bmFtaWNfYW55OjpmdW5jdGlvbgogICAgPAogICAgICByZWFkZXIs
CiAgICAgIHN0ZDo6aXN0cmVhbSAmIChzdGQ6OmlzdHJlYW0gJiwgYW55VCAmKQogICAgPgp7CiAg
ICB0ZW1wbGF0ZTxjbGFzcyBUPgogICAgc3RkOjppc3RyZWFtICYgY2FsbChzdGQ6OmlzdHJlYW0g
JiBpbiwgVCAmIG9iaikgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gaW4gPj4gb2JqOwogICAg
fQp9OwoKc3RydWN0IHdyaXRlcgogIDogYm9vc3Q6OmR5bmFtaWNfYW55OjpmdW5jdGlvbgogICAg
PAogICAgICB3cml0ZXIsCiAgICAgIHN0ZDo6b3N0cmVhbSAmIChzdGQ6Om9zdHJlYW0gJiwgY29u
c3QgYW55VCAmKQogICAgPgp7CiAgICB0ZW1wbGF0ZTxjbGFzcyBUPgogICAgc3RkOjpvc3RyZWFt
ICYgY2FsbChzdGQ6Om9zdHJlYW0gJiBvdXQsIGNvbnN0IFQgJiBvYmopIGNvbnN0CiAgICB7CiAg
ICAgICAgcmV0dXJuIG91dCA8PCBvYmo7CiAgICB9Cn07CgoKc3RydWN0IHZpc2l0b3IKewogICAg
dmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoaW50KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0
b3IoKShjb25zdCBzdGQ6OnN0cmluZyAmKSA9IDA7Cn07CgoKc3RydWN0IHRvX2ludCA6IHZpc2l0
b3IKewogICAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoaW50KTsKICAgIHZpcnR1YWwgdm9pZCBv
cGVyYXRvcigpKGNvbnN0IHN0ZDo6c3RyaW5nICYpOwoKICAgIGludCByZXN1bHQ7Cn07Cgp2b2lk
IHRvX2ludDo6b3BlcmF0b3IoKShpbnQgdmFsdWUpCnsKICAgIHJlc3VsdCA9IHZhbHVlOwp9Cgp2
b2lkIHRvX2ludDo6b3BlcmF0b3IoKShjb25zdCBzdGQ6OnN0cmluZyAmIHZhbHVlKQp7CiAgICBy
ZXN1bHQgPSBib29zdDo6bGV4aWNhbF9jYXN0PGludD4odmFsdWUpOwp9CgoKc3RydWN0IHZpc2l0
CiAgOiBib29zdDo6ZHluYW1pY19hbnk8dmlzaXQsIHZvaWQgKHZpc2l0b3IgJiwgY29uc3QgYW55
VCAmKT4KewogICAgdGVtcGxhdGU8Y2xhc3MgVD4KICAgIHZvaWQgY2FsbCh2aXNpdG9yICYgdiwg
Y29uc3QgVCAmIHZhbHVlKSBjb25zdAogICAgewogICAgICAgIHYodmFsdWUpOwogICAgfQp9OwoK
dHlwZWRlZiBib29zdDo6ZHluYW1pY19hbnk6OmFueQogICAgICAgIDwKICAgICAgICAgICAgYm9v
c3Q6Om1wbDo6bGlzdDxyZWFkZXIsIHdyaXRlciwgdmlzaXQ+CiAgICAgICAgPiBpb19hbnk7CgoK
c3RkOjptYXA8Y2hhciwgaW9fYW55PiBleGFtcGxlczsKc3RkOjptYXA8Y29uc3Qgc3RkOjp0eXBl
X2luZm8gKiwgY2hhcj4gcHJlZml4ZXM7CgoKaW9fYW55IHJlYWQoc3RkOjppc3RyZWFtICYgaW4p
CnsKICAgIGNoYXIgcHJlZml4OwogICAgaWYoaW4gPj4gcHJlZml4KQogICAgewogICAgICAgIHN0
ZDo6bWFwPGNoYXIsIGlvX2FueT46OmNvbnN0X2l0ZXJhdG9yIGYgPSBleGFtcGxlcy5maW5kKHBy
ZWZpeCk7CiAgICAgICAgaWYoZiA9PSBleGFtcGxlcy5lbmQoKSkKICAgICAgICAgICAgdGhyb3cg
c3RkOjpydW50aW1lX2Vycm9yKCJpbnZhbGlkIHByZWZpeCIpOwogICAgICAgIGlvX2FueSByZXN1
bHQgPSBmLT5zZWNvbmQ7CiAgICAgICAgaWYocmVhZGVyKCkoaW4sIHJlc3VsdCkpCiAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoInBy
b2JsZW0gd2l0aCBpbnB1dCBzdHJlYW0iKTsKfQoKc3RkOjpvc3RyZWFtICYgd3JpdGUoc3RkOjpv
c3RyZWFtICYgb3V0LCBjb25zdCBpb19hbnkgJiBvYmopCnsKICAgIGNvbnN0IHN0ZDo6dHlwZV9p
bmZvICYgdCA9IG9iai50eXBlKCk7CiAgICBzdGQ6Om1hcDxjb25zdCBzdGQ6OnR5cGVfaW5mbyAq
LCBjaGFyPjo6Y29uc3RfaXRlcmF0b3IgZiA9CiAgICAgICAgcHJlZml4ZXMuZmluZCgmdCk7CiAg
ICBpZihmID09IHByZWZpeGVzLmVuZCgpKQogICAgICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJv
cigidW5rb253biB0eXBlIG9mIGlvX2FueSIpOwogICAgY2hhciBwcmVmaXggPSBmLT5zZWNvbmQ7
CiAgICBvdXQgPDwgcHJlZml4OwogICAgcmV0dXJuIHdyaXRlcigpKG91dCwgb2JqKTsKfQoKCnRl
bXBsYXRlPGNsYXNzIFQ+CnZvaWQgcmVnaXN0ZXJfdHlwZShjaGFyIHByZWZpeCwgY29uc3QgVCAm
IGV4YW1wbGUgPSBUKCkpCnsKICAgIGV4YW1wbGVzW3ByZWZpeF0gPSBleGFtcGxlOwogICAgY29u
c3QgaW9fYW55ICYgciA9IGV4YW1wbGVzLmZpbmQocHJlZml4KS0+c2Vjb25kOwogICAgY29uc3Qg
c3RkOjp0eXBlX2luZm8gJiB0ID0gci50eXBlKCk7CiAgICBwcmVmaXhlc1smdF0gPSBwcmVmaXg7
Cn0KCgppbnQgbWFpbigpCnsKICAgIHRyeQogICAgewogICAgICAgIHJlZ2lzdGVyX3R5cGU8aW50
PignaScpOwogICAgICAgIHJlZ2lzdGVyX3R5cGU8c3RkOjpzdHJpbmc+KCdzJyk7CgogICAgICAg
IHN0ZDo6aXN0cmluZ3N0cmVhbSBpbnB1dCgiaTEzN3NoZWxsbyIpOwoKICAgICAgICBpb19hbnkg
aSA9IHJlYWQoaW5wdXQpOwogICAgICAgIGlvX2FueSBzID0gcmVhZChpbnB1dCk7CgogICAgICAg
IHdyaXRlKHN0ZDo6Y291dCwgaSk7CiAgICAgICAgd3JpdGUoc3RkOjpjb3V0LCBzKTsKCiAgICAg
ICAgc3RkOjpjb3V0IDw8ICdcbic7CiAgICB9CiAgICBjYXRjaChjb25zdCBzdGQ6OmV4Y2VwdGlv
biAmIGV4KQogICAgewogICAgICAgIHN0ZDo6Y2VyciA8PCAiQysrIGV4Y2VwdGlvbjogIiA8PCBl
eC53aGF0KCkgPDwgJ1xuJzsKICAgIH0KfQo=


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]