public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/3277: compiler segfaults compiling attached file
@ 2001-06-19 19:56 seefeld
  0 siblings, 0 replies; 2+ messages in thread
From: seefeld @ 2001-06-19 19:56 UTC (permalink / raw)
  To: gcc-gnats; +Cc: seefeld

>Number:         3277
>Category:       c++
>Synopsis:       compiler segfaults compiling attached file
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 19 19:56:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Stefan Seefeld
>Release:        gcc 3.0
>Organization:
>Environment:
bash$ g++ -v
Reading specs from /usr/local/gcc-3.0/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs
Configured with: ../gcc-3.0/configure --enable-shared --enable-threads --prefix=/usr/local/gcc-3.0
Thread model: posix
gcc version 3.0
the system is based on RH 6.2, with linux kernel 2.4.2, glibc 2.1
>Description:
the compiler segfaults while processing the attached file. The command is:

bash$ g++ -I../../include -I/home/stefan/Berlin/Berlin/include -D_REENTRANT   -I/home/stefan/Berlin/Berlin/include/Command -pipe   -fPIC -c /home/stefan/Berlin/Berlin/src/Command/TelltaleImpl.cc -o TelltaleImpl.o
In file included from /home/stefan/Berlin/Berlin/src/Command/TelltaleImpl.cc:22:
/home/stefan/Berlin/Berlin/include/Command/TelltaleImpl.hh:56: Internal error: 
   Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.

The preprocessed file is attached...
>How-To-Repeat:
see description
>Fix:

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

IyAyMiAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vc3JjL0NvbW1hbmQvVGVsbHRhbGVJbXBs
LmNjIgojIDEgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvQ29tbWFuZC9UZWxs
dGFsZUltcGwuaGgiIDEKIyAyNiAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9D
b21tYW5kL1RlbGx0YWxlSW1wbC5oaCIKIyAxICIuLi8uLi9pbmNsdWRlL1dhcnNhdy9jb25maWcu
aGgiIDEKIyAyNyAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9Db21tYW5kL1Rl
bGx0YWxlSW1wbC5oaCIgMgojIDEgIi4uLy4uL2luY2x1ZGUvV2Fyc2F3L1RlbGx0YWxlLmhoIiAx
CiMgMTAgIi4uLy4uL2luY2x1ZGUvV2Fyc2F3L1RlbGx0YWxlLmhoIgojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9vbW5pT1JCMy9DT1JCQS5oIiAxIDMKIyAyNTUgIi91c3IvbG9jYWwvaW5jbHVkZS9v
bW5pT1JCMy9DT1JCQS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlJ
bnRlcm5hbC5oIiAxIDMKIyAxMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50
ZXJuYWwuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2xvY2FsL2djYy0z
LjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMK
dHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDE5OSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5z
aWduZWQgaW50IHNpemVfdDsKIyAxNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5p
SW50ZXJuYWwuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5ncy5oIiAxIDMKIyAyMiAi
L3Vzci9pbmNsdWRlL3N0cmluZ3MuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy9jZGVmcy5oIiAxIDMKIyAyNTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNzgg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5o
IiAxIDMKIyAyNzkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyMyAiL3Vzci9pbmNs
dWRlL3N0cmluZ3MuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjUgIi91c3IvaW5j
bHVkZS9zdHJpbmdzLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBiY21wIChfX2Nv
bnN0IHZvaWQgKiBfX3MxLCBfX2NvbnN0IHZvaWQgKiBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICogX19zcmMsIHZvaWQgKiBfX2Rl
c3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICogX19z
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93
ICgpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo
cm93ICgpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwg
X19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChf
X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKfQojIDE0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlJbnRlcm5hbC5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3Iv
aW5jbHVkZS9zdHJpbmcuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKiBt
ZW1jcHkgKHZvaWQgKiBfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICogX19yZXN0cmlj
dCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICogbWVtbW92ZSAo
dm9pZCAqIF9fZGVzdCwgX19jb25zdCB2b2lkICogX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gdm9pZCAqIG1lbWNjcHkgKHZvaWQgKiBfX2Rlc3QsIF9fY29uc3Qgdm9p
ZCAqIF9fc3JjLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9p
ZCAqIG1lbXNldCAodm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9pZCAqIF9f
czIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqIG1lbWNociAoX19jb25z
dCB2b2lkICogX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2
b2lkICogcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKiBfX3MsIGludCBfX2MpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkg
KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jl
c3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsK
CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKCmV4dGVybiBzaXpl
X3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L3hsb2NhbGUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBz
dHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1s2
XTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAq
X19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2Fs
ZV90OwojIDEwMCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50IF9fc3Ry
Y29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVf
dCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wgKGNoYXIgKl9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2wpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93
ICgpOwpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKIyAxNDYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hh
ciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCk7CgpleHRlcm4g
Y2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z
dCBjaGFyICpfX3JlamVjdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29u
c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KSB0aHJvdyAoKTsKCmV4dGVybiBj
aGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkg
dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ss
IF9fY29uc3QgY2hhciAqX19uZWVkbGUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJj
YXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUp
IHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlz
dGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
c3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwgY2hhciAqKl9fcmVz
dHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLCBjaGFy
ICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKIyAxOTQgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMwpleHRlcm4gdm9pZCAqIG1lbW1lbSAoX19jb25zdCB2b2lkICogX19oYXlzdGFj
aywgc2l6ZV90IF9faGF5c3RhY2tsZW4sIF9fY29uc3Qgdm9pZCAqIF9fbmVlZGxlLCBzaXplX3Qg
X19uZWVkbGVsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKiBfX21lbXBjcHkgKHZvaWQg
KiBfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICogX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCAqIG1lbXBjcHkgKHZvaWQgKiBfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICogX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmlu
Zywgc2l6ZV90IF9fbWF4bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAo
aW50IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAoaW50
IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKZXh0ZXJu
IGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1
ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICogX19zLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqIF9f
c3JjLCB2b2lkICogX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBi
emVybyAodm9pZCAqIF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21w
IChfX2NvbnN0IHZvaWQgKiBfX3MxLCBfX2NvbnN0IHZvaWQgKiBfX3MyLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50
IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mZnMgKGludCBfX2kpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChjb25zdCkpOwpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9f
bCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVy
biBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0
ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CmV4dGVybiBpbnQgc3RyY2FzZWNt
cCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBf
bCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9f
c3RyaW5ncCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz
dHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4g
dm9pZCAqIG1lbWZyb2IgKHZvaWQgKiBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7
CiMgMzUwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDE0NCAiL3Vzci9sb2NhbC9pbmNs
dWRlL29tbmlPUkIzL29tbmlJbnRlcm5hbC5oIiAyIDMKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvb21uaXRocmVhZC5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbml0aHJlYWQu
aCIgMwpjbGFzcyBvbW5pX211dGV4OwpjbGFzcyBvbW5pX2NvbmRpdGlvbjsKY2xhc3Mgb21uaV9z
ZW1hcGhvcmU7CmNsYXNzIG9tbmlfdGhyZWFkOwojIDEzMCAiL3Vzci9sb2NhbC9pbmNsdWRlL29t
bml0aHJlYWQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pdGhyZWFkL3Bvc2l4Lmgi
IDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaXRocmVhZC9wb3NpeC5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMSAzCiMgMTggIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMTkgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMSAzCiMgMjMgIi91c3Iv
aW5jbHVkZS9zY2hlZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI0
ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAz
CgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5o
IiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGlu
dCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNp
Z25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBl
ZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2ln
bmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxv
bmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYg
X191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3Vf
aW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9f
bW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2Zm
X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVk
ZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBsb25nIGludCBfX3JsaW1fdDsKdHlwZWRlZiBfX3F1
YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRy
X3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0
eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mZF9tYXNrOwojIDEwMCAiL3Vzci9pbmNsdWRl
L2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFzayBmZHNf
Yml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gX19mZF9zZXQ7
CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lw
Y19waWRfdDsKCgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFk
X3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVm
IF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250
X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25n
IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcg
aW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90
OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0
aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRl
L2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9w
cmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAz
CgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQg
X19zcGlubG9jazsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpf
cHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZGV0YWNoc3RhdGU7
CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFt
OwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNp
emU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3Qg
X19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1
Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRp
bmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsK
fSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlf
dDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2Nv
dW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0
IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRl
ZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0
eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3
bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOwogIGludCBfX3J3
X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0aHJlYWRfZGVzY3Ig
X19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZV93YWl0aW5nOwog
IGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja190OwoK
Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBw
dGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVh
ZF90OwojIDE1MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5j
bHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDgzICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2
X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVk
LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNDcgIi91c3Iv
aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IHNj
aGVkX3ByaW9yaXR5OwogIH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50
ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywgaW50IF9fZmxhZ3Ms
IHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKfQojIDMzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg
MiAzCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3Qg
X19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNj
aGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3NjaGVkX2dldHBh
cmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRf
cGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19zY2hlZF9zZXRzY2hlZHVs
ZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFy
YW0gKl9fcGFyYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9f
cGlkX3QgX19waWQsIGludCBfX3BvbGljeSwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f
cGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3Bp
ZF90IF9fcGlkKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlk
X3QgX19waWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19zY2hlZF95aWVsZCAodm9pZCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwpl
eHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRo
bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxn
b3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfcnJfZ2V0X2ludGVydmFsIChf
X3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
c2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9f
dCkgdGhyb3cgKCk7Cgp9CiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAy
IDMKCmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEg
MwojIDQzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKIyA1NyAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDU4ICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwoKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgOTUgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7
CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2Rh
eTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7
CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCmV4dGVybiBjbG9ja190IGNsb2Nr
ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVf
dCBfX3RpbWUwKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6
ZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2NvbnN0IHN0cnVjdCB0bSAq
X19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChf
X2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2ZtdCwgc3RydWN0IHRtICpfX3RwKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAq
X190aW1lcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19jb25z
dCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqX19nbXRp
bWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwgc3RydWN0IHRtICpfX3Jl
c3RyaWN0IF9fdHApIHRocm93ICgpOwoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29u
c3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Rw
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRp
bWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Rw
KSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVy
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3Qg
dG0gKl9fcmVzdHJpY3QgX190cCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVy
LCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqX190
em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpv
bmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9p
ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1l
em9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0aHJv
dyAoKTsKIyAyMjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20g
KHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0
cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1l
c3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhy
b3cgKCk7CiMgMjU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9l
cnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmlu
ZykgdGhyb3cgKCk7CiMgMjcyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0
ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsIHN0cnVjdCB0bSAqX19y
ZXN0cmljdCBfX3Jlc2J1ZnApIHRocm93ICgpOwoKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMjkgIi91c3Iv
aW5jbHVkZS9zaWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAz
MCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5o
IiAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg
ICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBs
b25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgi
IDIgMwojIDQ5ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNp
Z3NldF90OwojIDM2MiAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi
IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0
OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lO
QUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lO
SEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhS
RUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAg
UFRIUkVBRF9NVVRFWF9GQVNUX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBU
SFJFQURfTVVURVhfRVJST1JDSEVDS19OUAoKICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQ
VEhSRUFEX01VVEVYX0ZBU1RfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgPSBQVEhSRUFE
X01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSBQVEhSRUFE
X01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9N
VVRFWF9OT1JNQUwKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRI
UkVBRF9QUk9DRVNTX1NIQVJFRAoKfTsKCgplbnVtCnsKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJf
UkVBREVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAsCiAgUFRIUkVBRF9S
V0xPQ0tfUFJFRkVSX1dSSVRFUl9OT05SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfREVG
QVVMVF9OUCA9IFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAKfTsKCgoKCgoKc3RydWN0
IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKTsK
ICB2b2lkICpfX2FyZzsKICBpbnQgX19jYW5jZWx0eXBlOwogIHN0cnVjdCBfcHRocmVhZF9jbGVh
bnVwX2J1ZmZlciAqX19wcmV2Owp9OwoKCgplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9FTkFCTEUs
CgogIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07CmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0RF
RkVSUkVELAoKICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMKCn07CiMgMTQxICIvdXNyL2lu
Y2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAq
X190aHJlYWQsIF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqKCpfX3N0YXJ0
X3JvdXRpbmUpICh2b2lkICopLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHB0
aHJlYWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cg
KCk7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2pv
aW4gKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoqX190aHJlYWRfcmV0dXJuKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkgdGhyb3cgKCk7CgoK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0
dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRh
Y2hzdGF0ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fZGV0YWNoc3RhdGUpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAoX19jb25zdCBw
dGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19h
dHRyLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsIGludCBfX3BvbGljeSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl
dHNjaGVkcG9saWN5IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCAqX19wb2xp
Y3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQg
KHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwgaW50ICpfX2luaGVyaXQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2NvcGUpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIsIGludCAqX19zY29wZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVf
dCBfX2d1YXJkc2l6ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1
YXJkc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgKl9fZ3VhcmRz
aXplKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRk
ciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9h
dHRyX3QgKl9fYXR0ciwgdm9pZCAqKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNp
emVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl
dHN0YWNrc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgKl9fc3Rh
Y2tzaXplKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0g
KHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGljeSwgX19jb25zdCBzdHJ1Y3Qg
c2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0
c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50ICpfX3BvbGljeSwgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9z
ZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9f
cHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsIF9fY29uc3QgcHRo
cmVhZF9tdXRleGF0dHJfdCAqX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsIF9fY29uc3QgcHRocmVh
ZF9tdXRleGF0dHJfdCAqX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3B0
aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVh
ZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3Ry
eWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBf
X3B0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211
dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2Nr
IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9f
cHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0
cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9k
ZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwpleHRlcm4gaW50
IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0
ciwgaW50IF9fa2luZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJf
Z2V0dHlwZSAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCAqX19raW5k
KSB0aHJvdyAoKTsKIyAzMjMgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBw
dGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCwgX19jb25zdCBwdGhyZWFk
X2NvbmRhdHRyX3QgKl9fY29uZF9hdHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2NvbmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpf
X2NvbmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFk
X2NvbmRfdCAqX19jb25kLCBwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJlYWRfY29uZF90ICpfX2Nv
bmQsIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f
YWJzdGltZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0
IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tf
dCAqX19yd2xvY2ssIF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveSAocHRocmVhZF9yd2xvY2tf
dCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2Nr
IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAq
X19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2Nr
IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3J3bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0
dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9k
ZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2Nr
YXR0cl90ICpfX2F0dHIsIGludCAqX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
cHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0
dHIsIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr
YXR0cl9nZXRraW5kX25wIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsIGlu
dCAqX19wcmVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3Nl
dGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsIGludCBfX3ByZWYpIHRocm93
ICgpOwojIDQyMCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IF9fcHRocmVh
ZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwgdm9pZCAoKl9fZGVzdHJfZnVuY3Rp
b24pICh2b2lkICopKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3JlYXRlIChw
dGhyZWFkX2tleV90ICpfX2tleSwgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lkICopKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3Qg
X19rZXkpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19wdGhyZWFkX3NldHNwZWNpZmljIChwdGhy
ZWFkX2tleV90IF9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksIF9fY29uc3Qg
dm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgKl9fcHRocmVhZF9nZXRz
cGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkICpwdGhy
ZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKIyA0NDUgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBfX3B0aHJlYWRfb25jZSAocHRocmVh
ZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLCB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkg
dGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25j
ZV9jb250cm9sLCB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQgKl9f
b2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZSAo
aW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jYW5jZWwgKHB0aHJlYWRfdCBfX3RocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBw
dGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDQ4MSAiL3Vzci9pbmNsdWRlL3B0
aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0cnVjdCBfcHRo
cmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICop
LCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNDkxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAz
CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKl9fYnVmZmVyLCBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKIyA1MDIgIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2Rl
ZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLCB2b2lkICgqX19y
b3V0aW5lKSAodm9pZCAqKSwgdm9pZCAqX19hcmcpIHRocm93ICgpOwojIDUxMyAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3Jl
IChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLCBpbnQgX19leGVjdXRl
KSB0aHJvdyAoKTsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDEgMwoj
IDMxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRf
c2lnbWFzayAoaW50IF9faG93LCBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fbmV3bWFzaywgX19zaWdz
ZXRfdCAqX19vbGRtYXNrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0
aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8pIHRocm93ICgpOwojIDUxOSAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMiAzCiMgNTM0ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVy
biBpbnQgX19wdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLCB2b2lkICgq
X19wYXJlbnQpICh2b2lkKSwgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLCB2b2lkICgq
X19wYXJlbnQpICh2b2lkKSwgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICh2b2lkKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHZvaWQgX19wdGhyZWFkX2luaXRpYWxpemUgKHZvaWQpIHRocm93ICgpOwoK
fQojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaXRocmVhZC9wb3NpeC5oIiAyIDMKCgoKCmV4
dGVybiAiQyIgdm9pZCogb21uaV90aHJlYWRfd3JhcHBlcih2b2lkKiBwdHIpOwojIDEzMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL29tbml0aHJlYWQuaCIgMiAzCiMgMTc3ICIvdXNyL2xvY2FsL2luY2x1
ZGUvb21uaXRocmVhZC5oIiAzCmNsYXNzIG9tbmlfdGhyZWFkX2ZhdGFsIHsKcHVibGljOgogICAg
aW50IGVycm9yOwogICAgb21uaV90aHJlYWRfZmF0YWwoaW50IGUgPSAwKSA6IGVycm9yKGUpIHt9
Cn07CgoKCgoKCgpjbGFzcyBvbW5pX3RocmVhZF9pbnZhbGlkIHt9OwojIDE5OCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL29tbml0aHJlYWQuaCIgMwpjbGFzcyBvbW5pX211dGV4IHsKCnB1YmxpYzoKICAg
IG9tbmlfbXV0ZXgodm9pZCk7CiAgICB+b21uaV9tdXRleCh2b2lkKTsKCiAgICB2b2lkIGxvY2so
dm9pZCk7CiAgICB2b2lkIHVubG9jayh2b2lkKTsKICAgIHZvaWQgYWNxdWlyZSh2b2lkKSB7IGxv
Y2soKTsgfQogICAgdm9pZCByZWxlYXNlKHZvaWQpIHsgdW5sb2NrKCk7IH0KCgoKICAgIGZyaWVu
ZCBjbGFzcyBvbW5pX2NvbmRpdGlvbjsKCnByaXZhdGU6CgogICAgb21uaV9tdXRleChjb25zdCBv
bW5pX211dGV4Jik7CiAgICBvbW5pX211dGV4JiBvcGVyYXRvcj0oY29uc3Qgb21uaV9tdXRleCYp
OwoKcHJpdmF0ZToKICAgIHB0aHJlYWRfbXV0ZXhfdCBwb3NpeF9tdXRleDsKfTsKIyAyNDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9vbW5pdGhyZWFkLmgiIDMKY2xhc3Mgb21uaV9tdXRleF9sb2NrIHsK
ICAgIG9tbmlfbXV0ZXgmIG11dGV4OwpwdWJsaWM6CiAgICBvbW5pX211dGV4X2xvY2sob21uaV9t
dXRleCYgbSkgOiBtdXRleChtKSB7IG11dGV4LmxvY2soKTsgfQogICAgfm9tbmlfbXV0ZXhfbG9j
ayh2b2lkKSB7IG11dGV4LnVubG9jaygpOyB9CnByaXZhdGU6CgogICAgb21uaV9tdXRleF9sb2Nr
KGNvbnN0IG9tbmlfbXV0ZXhfbG9jayYpOwogICAgb21uaV9tdXRleF9sb2NrJiBvcGVyYXRvcj0o
Y29uc3Qgb21uaV9tdXRleF9sb2NrJik7Cn07CiMgMjU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21u
aXRocmVhZC5oIiAzCmNsYXNzIG9tbmlfY29uZGl0aW9uIHsKCiAgICBvbW5pX211dGV4KiBtdXRl
eDsKCnB1YmxpYzoKICAgIG9tbmlfY29uZGl0aW9uKG9tbmlfbXV0ZXgqIG0pOwoKCgoKICAgIH5v
bW5pX2NvbmRpdGlvbih2b2lkKTsKCiAgICB2b2lkIHdhaXQodm9pZCk7CgoKCgoKICAgIGludCB0
aW1lZHdhaXQodW5zaWduZWQgbG9uZyBzZWNzLCB1bnNpZ25lZCBsb25nIG5hbm9zZWNzID0gMCk7
CgoKCgoKCiAgICB2b2lkIHNpZ25hbCh2b2lkKTsKCgoKCiAgICB2b2lkIGJyb2FkY2FzdCh2b2lk
KTsKCgoKcHJpdmF0ZToKCiAgICBvbW5pX2NvbmRpdGlvbihjb25zdCBvbW5pX2NvbmRpdGlvbiYp
OwogICAgb21uaV9jb25kaXRpb24mIG9wZXJhdG9yPShjb25zdCBvbW5pX2NvbmRpdGlvbiYpOwoK
cHJpdmF0ZToKICAgIHB0aHJlYWRfY29uZF90IHBvc2l4X2NvbmQ7Cn07CiMgMzA5ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvb21uaXRocmVhZC5oIiAzCmNsYXNzIG9tbmlfc2VtYXBob3JlIHsKCnB1Ymxp
YzoKICAgIG9tbmlfc2VtYXBob3JlKHVuc2lnbmVkIGludCBpbml0aWFsID0gMSk7CiAgICB+b21u
aV9zZW1hcGhvcmUodm9pZCk7CgogICAgdm9pZCB3YWl0KHZvaWQpOwoKCgogICAgaW50IHRyeXdh
aXQodm9pZCk7CgoKCiAgICB2b2lkIHBvc3Qodm9pZCk7CgoKCnByaXZhdGU6CgogICAgb21uaV9z
ZW1hcGhvcmUoY29uc3Qgb21uaV9zZW1hcGhvcmUmKTsKICAgIG9tbmlfc2VtYXBob3JlJiBvcGVy
YXRvcj0oY29uc3Qgb21uaV9zZW1hcGhvcmUmKTsKCnByaXZhdGU6CiAgICBvbW5pX211dGV4IG07
IG9tbmlfY29uZGl0aW9uIGM7IGludCB2YWx1ZTsKfTsKCgoKCgpjbGFzcyBvbW5pX3NlbWFwaG9y
ZV9sb2NrIHsKICAgIG9tbmlfc2VtYXBob3JlJiBzZW07CnB1YmxpYzoKICAgIG9tbmlfc2VtYXBo
b3JlX2xvY2sob21uaV9zZW1hcGhvcmUmIHMpIDogc2VtKHMpIHsgc2VtLndhaXQoKTsgfQogICAg
fm9tbmlfc2VtYXBob3JlX2xvY2sodm9pZCkgeyBzZW0ucG9zdCgpOyB9CnByaXZhdGU6CgogICAg
b21uaV9zZW1hcGhvcmVfbG9jayhjb25zdCBvbW5pX3NlbWFwaG9yZV9sb2NrJik7CiAgICBvbW5p
X3NlbWFwaG9yZV9sb2NrJiBvcGVyYXRvcj0oY29uc3Qgb21uaV9zZW1hcGhvcmVfbG9jayYpOwp9
OwojIDM1OCAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbml0aHJlYWQuaCIgMwpjbGFzcyBvbW5pX3Ro
cmVhZCB7CgpwdWJsaWM6CgogICAgZW51bSBwcmlvcml0eV90IHsKICAgICAgICBQUklPUklUWV9M
T1csCiAgICAgICAgUFJJT1JJVFlfTk9STUFMLAogICAgICAgIFBSSU9SSVRZX0hJR0gKICAgIH07
CgogICAgZW51bSBzdGF0ZV90IHsKICAgICAgICBTVEFURV9ORVcsCgogICAgICAgIFNUQVRFX1JV
Tk5JTkcsCiAgICAgICAgU1RBVEVfVEVSTUlOQVRFRAoKICAgIH07CgoKCgoKCgogICAgb21uaV90
aHJlYWQodm9pZCAoKmZuKSh2b2lkKiksIHZvaWQqIGFyZyA9IF9fbnVsbCwKICAgICAgICAgICAg
ICAgIHByaW9yaXR5X3QgcHJpID0gUFJJT1JJVFlfTk9STUFMKTsKICAgIG9tbmlfdGhyZWFkKHZv
aWQqICgqZm4pKHZvaWQqKSwgdm9pZCogYXJnID0gX19udWxsLAogICAgICAgICAgICAgICAgcHJp
b3JpdHlfdCBwcmkgPSBQUklPUklUWV9OT1JNQUwpOwoKCgoKCgoKICAgIHZvaWQgc3RhcnQodm9p
ZCk7CgoKCnByb3RlY3RlZDoKCiAgICBvbW5pX3RocmVhZCh2b2lkKiBhcmcgPSBfX251bGwsIHBy
aW9yaXR5X3QgcHJpID0gUFJJT1JJVFlfTk9STUFMKTsKCgoKCiAgICB2b2lkIHN0YXJ0X3VuZGV0
YWNoZWQodm9pZCk7CgoKCgogICAgdmlydHVhbCB+b21uaV90aHJlYWQodm9pZCk7CgoKCgoKCgpw
dWJsaWM6CgogICAgdm9pZCBqb2luKHZvaWQqKik7CgoKCgoKICAgIHZvaWQgc2V0X3ByaW9yaXR5
KHByaW9yaXR5X3QpOwoKCiAgICBzdGF0aWMgb21uaV90aHJlYWQqIGNyZWF0ZSh2b2lkICgqZm4p
KHZvaWQqKSwgdm9pZCogYXJnID0gX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpb3JpdHlfdCBwcmkgPSBQUklPUklUWV9OT1JNQUwpOwogICAgc3RhdGljIG9tbmlfdGhy
ZWFkKiBjcmVhdGUodm9pZCogKCpmbikodm9pZCopLCB2b2lkKiBhcmcgPSBfX251bGwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eV90IHByaSA9IFBSSU9SSVRZX05PUk1B
TCk7CgoKCgoKICAgIHN0YXRpYyB2b2lkIGV4aXQodm9pZCogcmV0dXJuX3ZhbHVlID0gX19udWxs
KTsKCgogICAgc3RhdGljIG9tbmlfdGhyZWFkKiBzZWxmKHZvaWQpOwoKCgoKICAgIHN0YXRpYyB2
b2lkIHlpZWxkKHZvaWQpOwoKCiAgICBzdGF0aWMgdm9pZCBzbGVlcCh1bnNpZ25lZCBsb25nIHNl
Y3MsIHVuc2lnbmVkIGxvbmcgbmFub3NlY3MgPSAwKTsKCgogICAgc3RhdGljIHZvaWQgZ2V0X3Rp
bWUodW5zaWduZWQgbG9uZyogYWJzX3NlYywgdW5zaWduZWQgbG9uZyogYWJzX25zZWMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHJlbF9zZWMgPSAwLCB1bnNpZ25lZCBs
b25nIHJlbF9uc2VjPTApOwoKCgoKCiAgICBzdGF0aWMgdm9pZCBzdGFja3NpemUodW5zaWduZWQg
bG9uZyBzeik7CiAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFja3NpemUoKTsKCgoKCnByaXZh
dGU6CgogICAgdmlydHVhbCB2b2lkIHJ1bih2b2lkKiBhcmcpIHt9CiAgICB2aXJ0dWFsIHZvaWQq
IHJ1bl91bmRldGFjaGVkKHZvaWQqIGFyZykgeyByZXR1cm4gX19udWxsOyB9CgoKCgogICAgdm9p
ZCBjb21tb25fY29uc3RydWN0b3Iodm9pZCogYXJnLCBwcmlvcml0eV90IHByaSwgaW50IGRldCk7
CgoKICAgIG9tbmlfbXV0ZXggbXV0ZXg7CgoKCiAgICBzdGF0ZV90IF9zdGF0ZTsKICAgIHByaW9y
aXR5X3QgX3ByaW9yaXR5OwoKICAgIHN0YXRpYyBvbW5pX211dGV4KiBuZXh0X2lkX211dGV4Owog
ICAgc3RhdGljIGludCBuZXh0X2lkOwogICAgaW50IF9pZDsKCiAgICB2b2lkICgqZm5fdm9pZCko
dm9pZCopOwogICAgdm9pZCogKCpmbl9yZXQpKHZvaWQqKTsKICAgIHZvaWQqIHRocmVhZF9hcmc7
CiAgICBpbnQgZGV0YWNoZWQ7CgpwdWJsaWM6CgogICAgcHJpb3JpdHlfdCBwcmlvcml0eSh2b2lk
KSB7CgoKCiAgICAgICAgb21uaV9tdXRleF9sb2NrIGwobXV0ZXgpOwogICAgICAgIHJldHVybiBf
cHJpb3JpdHk7CiAgICB9CgogICAgc3RhdGVfdCBzdGF0ZSh2b2lkKSB7CgoKCiAgICAgICAgb21u
aV9tdXRleF9sb2NrIGwobXV0ZXgpOwogICAgICAgIHJldHVybiBfc3RhdGU7CiAgICB9CgogICAg
aW50IGlkKHZvaWQpIHsgcmV0dXJuIF9pZDsgfQoKCgoKCgogICAgY2xhc3MgaW5pdF90IHsKICAg
ICAgICBzdGF0aWMgaW50IGNvdW50OwogICAgcHVibGljOgogICAgICAgIGluaXRfdCh2b2lkKTsK
ICAgIH07CgogICAgZnJpZW5kIGNsYXNzIGluaXRfdDsKCnByaXZhdGU6CiAgICBwdGhyZWFkX3Qg
cG9zaXhfdGhyZWFkOyBzdGF0aWMgaW50IHBvc2l4X3ByaW9yaXR5KHByaW9yaXR5X3QpOyBmcmll
bmQgdm9pZCogb21uaV90aHJlYWRfd3JhcHBlcih2b2lkKiBwdHIpOwp9OwoKCnN0YXRpYyBvbW5p
X3RocmVhZDo6aW5pdF90IG9tbmlfdGhyZWFkX2luaXQ7CiMgMTQ4ICIvdXNyL2xvY2FsL2luY2x1
ZGUvb21uaU9SQjMvb21uaUludGVybmFsLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9v
bW5pT1JCMy9DT1JCQV9zeXNkZXAuaCIgMSAzCiMgMTQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21u
aU9SQjMvb21uaUludGVybmFsLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JC
My9DT1JCQV9iYXNldHlwZXMuaCIgMSAzCiMgNzUgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JC
My9DT1JCQV9iYXNldHlwZXMuaCIgMwp0eXBlZGVmIGJvb2wgX0NPUkJBX0Jvb2xlYW47CgoKCgp0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgX0NPUkJBX0NoYXI7Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
X0NPUkJBX09jdGV0OwoKdHlwZWRlZiBzaG9ydCBfQ09SQkFfU2hvcnQ7Cgp0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IF9DT1JCQV9VU2hvcnQ7CgoKdHlwZWRlZiBsb25nIF9DT1JCQV9Mb25nOwoKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIF9DT1JCQV9VTG9uZzsKIyAxMDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9vbW5pT1JCMy9DT1JCQV9iYXNldHlwZXMuaCIgMwp0eXBlZGVmIGxvbmcgbG9uZyBfQ09SQkFf
TG9uZ0xvbmc7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9DT1JCQV9VTG9uZ0xvbmc7CiMg
MTExICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvQ09SQkFfYmFzZXR5cGVzLmgiIDMKdHlw
ZWRlZiBmbG9hdCBfQ09SQkFfRmxvYXQ7CnR5cGVkZWYgZG91YmxlIF9DT1JCQV9Eb3VibGU7CiMg
MTc3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvQ09SQkFfYmFzZXR5cGVzLmgiIDMKZXh0
ZXJuIHZvaWQgX0NPUkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwpleHRlcm4gdm9pZCBf
Q09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKZXh0ZXJuIHZvaWQgX0NPUkJBX21hcnNoYWxfZXJy
b3IoKTsKZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIF9DT1JCQV91c2VfbmlsX3B0cl9hc19uaWxfb2Jq
cmVmKCk7CmV4dGVybiB2b2lkIF9DT1JCQV9udWxsX3N0cmluZ19wdHIoX0NPUkJBX0Jvb2xlYW4p
OwpleHRlcm4gdm9pZCBfQ09SQkFfaW52b2tlZF9uaWxfcHNldWRvX3JlZigpOwpleHRlcm4gdm9p
ZCBfQ09SQkFfaW52b2tlZF9uaWxfb2JqcmVmKCk7CmV4dGVybiBfQ09SQkFfQm9vbGVhbgpfQ09S
QkFfdXNlX25pbF9wdHJfYXNfbmlsX3BzZXVkb19vYmpyZWYoY29uc3QgY2hhciogb2JqVHlwZSk7
CmV4dGVybiB2b2lkIF9DT1JCQV9iYWRfcGFyYW1fZnJlZWJ1ZigpOwojIDE1MCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL29tbmlPUkIzL29tbmlJbnRlcm5hbC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvb21uaU9SQjMvc2VxdGVtcGxhdGVzLmgiIDEgMwojIDkzICIvdXNyL2xvY2FsL2luY2x1
ZGUvb21uaU9SQjMvc2VxdGVtcGxhdGVzLmgiIDMKY2xhc3MgTmV0QnVmZmVyZWRTdHJlYW07CmNs
YXNzIE1lbUJ1ZmZlcmVkU3RyZWFtOwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBfQ09S
QkFfU2VxdWVuY2UgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfU2VxdWVuY2U8VD4gVF9zZXE7
CgogIGlubGluZSBfQ09SQkFfVUxvbmcgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIHBkX21heDsg
fQogIGlubGluZSBfQ09SQkFfVUxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gcGRfbGVuOyB9
CiAgaW5saW5lIHZvaWQgbGVuZ3RoKF9DT1JCQV9VTG9uZyBsZW4pCiAgewogICAgaWYgKHBkX2Jv
dW5kZWQgJiYgbGVuID4gcGRfbWF4KSB7CiAgICAgIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigp
OwoKICAgIH0KCiAgICBpZiAobGVuKSB7CgoKICAgICAgaWYgKCFwZF9idWYgfHwgbGVuID4gcGRf
bWF4KSB7CiAgICAgICAgY29weWJ1ZmZlcigoKGxlbiA+IHBkX21heCkgPyBsZW4gOiBwZF9tYXgp
KTsKICAgICAgfQogICAgfQoKICAgIHBkX2xlbiA9IGxlbjsKICB9CiAgaW5saW5lIFQgJm9wZXJh
dG9yW10gKF9DT1JCQV9VTG9uZyBpbmRleCkgewogICAgaWYgKGluZGV4ID49IHBkX2xlbikgX0NP
UkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CiAgICByZXR1cm4gcGRfYnVmW2luZGV4XTsKICB9CiAg
aW5saW5lIGNvbnN0IFQmIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBpbmRleCkgY29uc3Qgewog
ICAgaWYgKGluZGV4ID49IHBkX2xlbikgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CiAgICBy
ZXR1cm4gcGRfYnVmW2luZGV4XTsKICB9CiAgc3RhdGljIGlubGluZSBUKiBhbGxvY2J1ZihfQ09S
QkFfVUxvbmcgbmVsZW1zKSB7CiAgICBUKiB0bXAgPSAwOwogICAgaWYgKG5lbGVtcykgewogICAg
ICB0bXAgPSBuZXcgVFtuZWxlbXNdOwogICAgfQogICAgcmV0dXJuIHRtcDsKICB9CiAgc3RhdGlj
IGlubGluZSB2b2lkIGZyZWVidWYoVCAqIGIpIHsKICAgIGlmIChiKSBkZWxldGUgW10gYjsKICB9
CgoKICBpbmxpbmUgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSgpIGNvbnN0IHsgcmV0dXJuIHBkX3Jl
bDsgfQoKICBpbmxpbmUgVCogZ2V0X2J1ZmZlcihfQ09SQkFfQm9vbGVhbiBvcnBoYW4gPSAwKSB7
CiAgICBpZiAocGRfbWF4ICYmICFwZF9idWYpIHsKICAgICAgY29weWJ1ZmZlcihwZF9tYXgpOwog
ICAgfQogICAgaWYgKCFvcnBoYW4pIHsKICAgICAgcmV0dXJuIHBkX2J1ZjsKICAgIH0KICAgIGVs
c2UgewogICAgICBpZiAoIXBkX3JlbCkKICAgICAgICByZXR1cm4gMDsKICAgICAgZWxzZSB7CiAg
ICAgICAgVCogdG1wID0gcGRfYnVmOwogICAgICAgIHBkX2J1ZiA9IDA7CiAgICAgICAgaWYgKCFw
ZF9ib3VuZGVkKSB7CiAgICAgICAgICBwZF9tYXggPSAwOwogICAgICAgIH0KICAgICAgICBwZF9s
ZW4gPSAwOwogICAgICAgIHBkX3JlbCA9IDE7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgfQog
ICAgfQogIH0KCiAgaW5saW5lIGNvbnN0IFQqIGdldF9idWZmZXIoKSBjb25zdCB7CiAgICBpZiAo
cGRfbWF4ICYmICFwZF9idWYpIHsKCiAgICAgIFRfc2VxKiBzID0gY29uc3RfY2FzdDxUX3NlcSo+
KHRoaXMpOwoKCgogICAgICBzLT5jb3B5YnVmZmVyKHBkX21heCk7CiAgICB9CiAgICByZXR1cm4g
cGRfYnVmOwogIH0KCiAgaW5saW5lIH5fQ09SQkFfU2VxdWVuY2UoKSB7CiAgICBpZiAocGRfcmVs
ICYmIHBkX2J1ZikgZnJlZWJ1ZihwZF9idWYpOwogICAgcGRfYnVmID0gMDsKICB9CgoKICBpbmxp
bmUgVCogTlBfZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHBkX2J1ZjsgfQogIGlubGluZSB2b2lkIE5Q
X25vcmVsZWFzZSgpIHsgcGRfcmVsID0gMDsgfQoKICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAo
TmV0QnVmZmVyZWRTdHJlYW0gJnMpIGNvbnN0OwogIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChO
ZXRCdWZmZXJlZFN0cmVhbSAmcyk7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZl
cmVkU3RyZWFtICZzKSBjb25zdDsKICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVy
ZWRTdHJlYW0gJnMpOwoKcHJvdGVjdGVkOgogIGlubGluZSBfQ09SQkFfU2VxdWVuY2UoKSA6IHBk
X21heCgwKSwgcGRfbGVuKDApLCBwZF9yZWwoMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGRfYm91bmRlZCgwKSwgcGRfYnVmKDApIHsgfQoKICBpbmxpbmUgX0NPUkJBX1NlcXVlbmNl
KF9DT1JCQV9VTG9uZyBtYXgsIF9DT1JCQV9Cb29sZWFuIGJvdW5kZWQ9MCkgOgogICAgcGRfbWF4
KG1heCksIHBkX2xlbigwKSwgcGRfcmVsKDEpLCBwZF9ib3VuZGVkKGJvdW5kZWQpLCBwZF9idWYo
MCkge30KCiAgaW5saW5lIF9DT1JCQV9TZXF1ZW5jZShjb25zdCBfQ09SQkFfU2VxdWVuY2U8VD4m
IHMpCiAgICAgICAgICAgICAgOiBwZF9tYXgocy5wZF9tYXgpLAogICAgICAgICAgICAgICAgcGRf
bGVuKDApLAogICAgICAgICAgICAgICAgcGRfcmVsKDEpLAogICAgICAgICAgICAgICAgcGRfYm91
bmRlZChzLnBkX2JvdW5kZWQpLCBwZF9idWYoMCkgewogICAgbGVuZ3RoKHMucGRfbGVuKTsKICAg
IGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaSA8IHBkX2xlbjsgaSsrKSB7CiAgICAgIHBkX2J1Zltp
XSA9IHMucGRfYnVmW2ldOwogICAgfQogIH0KCiAgaW5saW5lIF9DT1JCQV9TZXF1ZW5jZShfQ09S
QkFfVUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX1VMb25nIGxlbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIFQgKnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
Q09SQkFfQm9vbGVhbiBib3VuZGVkID0gMAogICAgICAgICAgICAgICAgICAgICAgICAgKQogICAg
ICA6IHBkX21heChtYXgpLAogICAgICAgIHBkX2xlbihsZW4pLAogICAgICAgIHBkX3JlbChyZWxl
YXNlKSwKICAgICAgICBwZF9ib3VuZGVkKGJvdW5kZWQpLAogICAgICAgIHBkX2J1Zih2YWx1ZSkK
ICB7CiAgICBpZiAobGVuID4gbWF4IHx8IChsZW4gJiYgIXZhbHVlKSkgewogICAgICBfQ09SQkFf
Ym91bmRfY2hlY2tfZXJyb3IoKTsKCiAgICB9CiAgfQoKICBpbmxpbmUgX0NPUkJBX1NlcXVlbmNl
PFQ+ICZvcGVyYXRvcj0gKGNvbnN0IF9DT1JCQV9TZXF1ZW5jZTxUPiAmcykKICB7CiAgICBsZW5n
dGgocy5wZF9sZW4pOwogICAgZm9yICh1bnNpZ25lZCBsb25nIGk9MDsgaSA8IHBkX2xlbjsgaSsr
KSB7CiAgICAgIHBkX2J1ZltpXSA9IHMucGRfYnVmW2ldOwogICAgfQogICAgcmV0dXJuICp0aGlz
OwogIH0KCgoKICBpbmxpbmUgdm9pZCByZXBsYWNlKF9DT1JCQV9VTG9uZyBtYXgsIF9DT1JCQV9V
TG9uZyBsZW4sIFQqIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBy
ZWxlYXNlID0gMCkgewogICAgaWYgKGxlbiA+IG1heCB8fCAobGVuICYmICFkYXRhKSkgewogICAg
ICBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKCiAgICB9CiAgICBpZiAocGRfcmVsICYmIHBk
X2J1ZikgewogICAgICBmcmVlYnVmKHBkX2J1Zik7CiAgICB9CiAgICBwZF9tYXggPSBtYXg7CiAg
ICBwZF9sZW4gPSBsZW47CiAgICBwZF9idWYgPSBkYXRhOwogICAgcGRfcmVsID0gcmVsZWFzZTsK
ICB9CgoKcHJpdmF0ZToKCiAgdm9pZCBjb3B5YnVmZmVyKF9DT1JCQV9VTG9uZyBuZXdtYXgpIHsK
CgoKICAgIFQqIG5ld2J1ZiA9IGFsbG9jYnVmKG5ld21heCk7CiAgICBpZiAoIW5ld2J1Zikgewog
ICAgICBfQ09SQkFfbmV3X29wZXJhdG9yX3JldHVybl9udWxsKCk7CgogICAgfQogICAgZm9yICh1
bnNpZ25lZCBsb25nIGk9MDsgaSA8IHBkX2xlbjsgaSsrKSB7CiAgICAgICBuZXdidWZbaV0gPSBw
ZF9idWZbaV07CiAgICB9CiAgICBpZiAocGRfcmVsICYmIHBkX2J1ZikgewogICAgICBmcmVlYnVm
KHBkX2J1Zik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgcGRfcmVsID0gMTsKICAgIH0KICAgIHBk
X2J1ZiA9IG5ld2J1ZjsKICAgIHBkX21heCA9IG5ld21heDsKICB9CgogIF9DT1JCQV9VTG9uZyBw
ZF9tYXg7CiAgX0NPUkJBX1VMb25nIHBkX2xlbjsKICBfQ09SQkFfQm9vbGVhbiBwZF9yZWw7CiAg
X0NPUkJBX0Jvb2xlYW4gcGRfYm91bmRlZDsKICBUICpwZF9idWY7Cn07CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIFQ+CmNsYXNzIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2UgOiBwdWJsaWMgX0NPUkJB
X1NlcXVlbmNlPFQ+IHsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX1NlcXVlbmNlPFQ+IEJhc2VU
IDsKICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZSgpIHt9CiAgaW5saW5lIF9DT1JC
QV9VbmJvdW5kZWRfU2VxdWVuY2UoX0NPUkJBX1VMb25nIG1heCkgOiBfQ09SQkFfU2VxdWVuY2U8
VD4obWF4KSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlKGNvbnN0IF9DT1JC
QV9VbmJvdW5kZWRfU2VxdWVuY2U8VD4mIHMpCiAgICAgOiBfQ09SQkFfU2VxdWVuY2U8VD4ocykg
e30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZShfQ09SQkFfVUxvbmcgbWF4LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqdmFsdWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApCiAgICAgOiBfQ09S
QkFfU2VxdWVuY2U8VD4obWF4LGxlbix2YWx1ZSxyZWxlYXNlKSB7fQogIGlubGluZSBfQ09SQkFf
VW5ib3VuZGVkX1NlcXVlbmNlPFQ+ICZvcGVyYXRvcj0gKGNvbnN0IF9DT1JCQV9VbmJvdW5kZWRf
U2VxdWVuY2U8VD4gJnMpIHsKICAgIF9DT1JCQV9TZXF1ZW5jZTxUPjo6b3BlcmF0b3I9IChzKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSB+X0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5j
ZSgpIHt9CgoKCiAgaW5saW5lIHZvaWQgcmVwbGFjZShfQ09SQkFfVUxvbmcgbWF4LCBfQ09SQkFf
VUxvbmcgbGVuLCBUKiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4g
cmVsZWFzZSA9IDApIHsKICAgIF9DT1JCQV9TZXF1ZW5jZTxUPjo6cmVwbGFjZShtYXgsbGVuLGRh
dGEscmVsZWFzZSk7CiAgfQoKICBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3Qg
aW5pdGlhbG9mZnNldCkgY29uc3QgewogICAgc2l6ZV90IGFsaWduZWRzaXplID0gKChpbml0aWFs
b2Zmc2V0KzMpICYgfigoaW50KTMpKStzaXplb2YoX0NPUkJBX1VMb25nKTsKICAgIGZvciAodW5z
aWduZWQgbG9uZyBpPTA7IGkgPCBCYXNlVDo6bGVuZ3RoKCk7IGkrKykgewogICAgICBhbGlnbmVk
c2l6ZSA9IEJhc2VUOjpOUF9kYXRhKClbaV0uX05QX2FsaWduZWRTaXplKGFsaWduZWRzaXplKTsK
ICAgIH0KICAgIHJldHVybiBhbGlnbmVkc2l6ZTsKICB9Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNz
IFQsaW50IGVsbVNpemUsaW50IGVsbUFsaWdubWVudD4KY2xhc3MgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50CiAgIDogcHVibGljIF9DT1JCQV9TZXF1ZW5jZTxUPgp7
CnB1YmxpYzoKICB0eXBlZGVmIF9DT1JCQV9TZXF1ZW5jZTxUPiBCYXNlVCA7CiAgaW5saW5lIF9D
T1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudCgpIHt9CiAgaW5saW5lIF9D
T1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudChfQ09SQkFfVUxvbmcgbWF4
KQogICAgOiBfQ09SQkFfU2VxdWVuY2U8VD4obWF4KSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3Vu
ZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQgKGNvbnN0CiAgICAgICBfQ09SQkFfVW5ib3Vu
ZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8VCxlbG1TaXplLGVsbUFsaWdubWVudD4mIHMp
CiAgICA6IF9DT1JCQV9TZXF1ZW5jZTxUPihzKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVk
X1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQoX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICp2
YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQogICAgOiBfQ09SQkFfU2VxdWVuY2U8VD4obWF4
LGxlbix2YWx1ZSxyZWxlYXNlKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNl
X3dfRml4U2l6ZUVsZW1lbnQ8VCxlbG1TaXplLGVsbUFsaWdubWVudD4gJgogICAgICBvcGVyYXRv
cj0KICAgICAgICAoY29uc3QKICAgICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19G
aXhTaXplRWxlbWVudDxULGVsbVNpemUsZWxtQWxpZ25tZW50PiAmCiAgICAgICAgIHMpCiAgewog
ICAgX0NPUkJBX1NlcXVlbmNlPFQ+OjpvcGVyYXRvcj0gKHMpOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBpbmxpbmUgfl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudCgp
IHt9CgoKCiAgaW5saW5lIHZvaWQgcmVwbGFjZShfQ09SQkFfVUxvbmcgbWF4LCBfQ09SQkFfVUxv
bmcgbGVuLCBUKiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVs
ZWFzZSA9IDApIHsKICAgIF9DT1JCQV9TZXF1ZW5jZTxUPjo6cmVwbGFjZShtYXgsbGVuLGRhdGEs
cmVsZWFzZSk7CiAgfQoKICBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5p
dGlhbG9mZnNldCkgY29uc3QgewogICAgc2l6ZV90IGFsaWduZWRzaXplID0gKChpbml0aWFsb2Zm
c2V0KzMpICYgfigoaW50KTMpKStzaXplb2YoX0NPUkJBX1VMb25nKTsKICAgIGlmIChCYXNlVDo6
bGVuZ3RoKCkpIHsKICAgICAgYWxpZ25lZHNpemUgPSAoKGFsaWduZWRzaXplKyhlbG1BbGlnbm1l
bnQtMSkpICYgfihlbG1BbGlnbm1lbnQtMSkpOwogICAgICBhbGlnbmVkc2l6ZSArPSBCYXNlVDo6
bGVuZ3RoKCkgKiBlbG1TaXplOwogICAgfQogICAgcmV0dXJuIGFsaWduZWRzaXplOwogIH0KCiAg
aW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZzKSBjb25zdDsKICBp
bmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMpOwogIGlubGluZSB2
b2lkIG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZv
aWQgb3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZzKTsKfTsKCgoKCgpjbGFzcyBfQ09S
QkFfVW5ib3VuZGVkX1NlcXVlbmNlX19Cb29sZWFuCiAgIDogcHVibGljIF9DT1JCQV9VbmJvdW5k
ZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDxfQ09SQkFfQm9vbGVhbiwxLDE+CnsKcHVibGlj
OgogIHR5cGVkZWYgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PF9D
T1JCQV9Cb29sZWFuLDEsMT4gQmFzZVQgOwogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVl
bmNlX19Cb29sZWFuKCkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fQm9v
bGVhbihfQ09SQkFfVUxvbmcgbWF4KQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX3df
Rml4U2l6ZUVsZW1lbnQ8X0NPUkJBX0Jvb2xlYW4sMSwxPihtYXgpIHt9CiAgaW5saW5lIF9DT1JC
QV9VbmJvdW5kZWRfU2VxdWVuY2VfX0Jvb2xlYW4oX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBs
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q09SQkFfQm9vbGVhbiAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCkKICAgIDogX0NPUkJB
X1VuYm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PF9DT1JCQV9Cb29sZWFuLDEsMT4o
bWF4LGxlbix2YWx1ZSxyZWxlYXNlKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVl
bmNlX19Cb29sZWFuIChjb25zdAogICAgICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fQm9v
bGVhbiYgcykKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50
PF9DT1JCQV9Cb29sZWFuLDEsMT4ocykge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1
ZW5jZV9fQm9vbGVhbiYgb3BlcmF0b3I9IChjb25zdAogICAgICAgICAgICAgICAgIF9DT1JCQV9V
bmJvdW5kZWRfU2VxdWVuY2VfX0Jvb2xlYW4mIHMpIHsKICAgICBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8X0NPUkJBX0Jvb2xlYW4sMSwxPjo6b3BlcmF0b3I9IChz
KTsKICAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlubGluZSB+X0NPUkJBX1VuYm91bmRlZF9TZXF1
ZW5jZV9fQm9vbGVhbigpIHt9CgogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJl
ZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVk
U3RyZWFtICZzKTsKICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0g
JnMpIGNvbnN0OwogIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAm
cyk7Cgp9OwoKCgoKCmNsYXNzIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0CiAgIDog
cHVibGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDxfQ09SQkFf
T2N0ZXQsMSwxPgp7CnB1YmxpYzoKICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9f
T2N0ZXQoKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldChfQ09S
QkFfVUxvbmcgbWF4KQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVs
ZW1lbnQ8X0NPUkJBX09jdGV0LDEsMSA+KG1heCkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZV9fT2N0ZXQoX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfT2N0ZXQg
KnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2Vfd19GaXhTaXplRWxlbWVudDxfQ09SQkFfT2N0ZXQsMSwxID4obWF4LGxlbix2YWx1ZSxy
ZWxlYXNlKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldCAoY29u
c3QKICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0JiBzKQogICAgOiBfQ09S
QkFfVW5ib3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8X0NPUkJBX09jdGV0LDEsMSA+
KHMpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0JiBvcGVyYXRv
cj0gKGNvbnN0CiAgICAgICAgICAgICAgICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0
ZXQmIHMpIHsKICAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8
X0NPUkJBX09jdGV0LDEsMT46Om9wZXJhdG9yPSAocyk7CiAgICAgcmV0dXJuICp0aGlzOwogIH0K
ICBpbmxpbmUgfl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0KCkge30KfTsKCgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgVCxpbnQgbWF4PgpjbGFzcyBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZSA6
IHB1YmxpYyBfQ09SQkFfU2VxdWVuY2U8VD4gewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfU2Vx
dWVuY2U8VD4gQmFzZVQgOwogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZSgpIDogX0NP
UkJBX1NlcXVlbmNlPFQ+KG1heCwxKSB7fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5j
ZShfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICp2
YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVs
ZWFzZSA9IDApCiAgICAgICAgICAgIDogX0NPUkJBX1NlcXVlbmNlPFQ+KG1heCxsZW4sdmFsdWUs
cmVsZWFzZSwxKSB7fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZShjb25zdCBfQ09S
QkFfQm91bmRlZF9TZXF1ZW5jZTxULG1heD4mIHMpCiAgICAgICAgICAgIDogX0NPUkJBX1NlcXVl
bmNlPFQ+KHMpIHt9CiAgaW5saW5lIH5fQ09SQkFfQm91bmRlZF9TZXF1ZW5jZSgpIHt9CiAgaW5s
aW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlPFQsbWF4PiAmb3BlcmF0b3I9IChjb25zdCBfQ09S
QkFfQm91bmRlZF9TZXF1ZW5jZTxULG1heD4gJnMpIHsKICAgIF9DT1JCQV9TZXF1ZW5jZTxUPjo6
b3BlcmF0b3I9IChzKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKICBpbmxpbmUgdm9pZCByZXBs
YWNlKF9DT1JCQV9VTG9uZyBsZW4sIFQqIGRhdGEsX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDAp
IHsKICAgIF9DT1JCQV9TZXF1ZW5jZTxUPjo6cmVwbGFjZShtYXgsbGVuLGRhdGEscmVsZWFzZSk7
CiAgfQoKCiAgaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZz
ZXQpIGNvbnN0IHsKICAgIHNpemVfdCBhbGlnbmVkc2l6ZSA9ICgoaW5pdGlhbG9mZnNldCszKSAm
IH4oKGludCkzKSkrc2l6ZW9mKF9DT1JCQV9VTG9uZyk7CiAgICBmb3IgKHVuc2lnbmVkIGxvbmcg
aT0wOyBpIDwgQmFzZVQ6Omxlbmd0aCgpOyBpKyspIHsKICAgICAgYWxpZ25lZHNpemUgPSBCYXNl
VDo6TlBfZGF0YSgpW2ldLl9OUF9hbGlnbmVkU2l6ZShhbGlnbmVkc2l6ZSk7CiAgICB9CiAgICBy
ZXR1cm4gYWxpZ25lZHNpemU7CiAgfQoKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxpbnQgbWF4
LGludCBlbG1TaXplLCBpbnQgZWxtQWxpZ25tZW50PgpjbGFzcyBfQ09SQkFfQm91bmRlZF9TZXF1
ZW5jZV93X0ZpeFNpemVFbGVtZW50CiAgOiBwdWJsaWMgX0NPUkJBX1NlcXVlbmNlPFQ+CnsKcHVi
bGljOgogIHR5cGVkZWYgX0NPUkJBX1NlcXVlbmNlPFQ+IEJhc2VUIDsKICBpbmxpbmUgX0NPUkJB
X0JvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudCgpIDogX0NPUkJBX1NlcXVlbmNlPFQ+
KG1heCwxKSB7fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVt
ZW50KF9DT1JCQV9VTG9uZyBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQogICAgOiBfQ09SQkFfU2VxdWVuY2U8VD4o
bWF4LGxlbix2YWx1ZSxyZWxlYXNlLDEpIHt9CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVl
bmNlX3dfRml4U2l6ZUVsZW1lbnQoY29uc3QKICAgICAgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vf
d19GaXhTaXplRWxlbWVudDxULG1heCxlbG1TaXplLGVsbUFsaWdubWVudD4mIHMpCiAgICA6IF9D
T1JCQV9TZXF1ZW5jZTxUPihzKSB7fQogIGlubGluZSB+X0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vf
d19GaXhTaXplRWxlbWVudCgpIHt9CgogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV93
X0ZpeFNpemVFbGVtZW50PFQsbWF4LGVsbVNpemUsZWxtQWxpZ25tZW50PiYgb3BlcmF0b3I9KGNv
bnN0IF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8VCxtYXgsZWxtU2l6
ZSxlbG1BbGlnbm1lbnQ+JiBzKSB7CiAgICBfQ09SQkFfU2VxdWVuY2U8VD46Om9wZXJhdG9yPSAo
cyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGlubGluZSB2b2lkIHJlcGxhY2UoX0NPUkJB
X1VMb25nIGxlbiwgVCogZGF0YSxfQ09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCkgewogICAgX0NP
UkJBX1NlcXVlbmNlPFQ+OjpyZXBsYWNlKG1heCxsZW4sZGF0YSxyZWxlYXNlKTsKICB9CgoKICBp
bmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Qg
ewogICAgc2l6ZV90IGFsaWduZWRzaXplID0gKChpbml0aWFsb2Zmc2V0KzMpICYgfigoaW50KTMp
KStzaXplb2YoX0NPUkJBX1VMb25nKTsKICAgIGlmIChCYXNlVDo6bGVuZ3RoKCkpIHsKICAgICAg
YWxpZ25lZHNpemUgPSAoKGFsaWduZWRzaXplKyhlbG1BbGlnbm1lbnQtMSkpICYgfihlbG1BbGln
bm1lbnQtMSkpOwogICAgICBhbGlnbmVkc2l6ZSArPSBCYXNlVDo6bGVuZ3RoKCkgKiBlbG1TaXpl
OwogICAgfQogICAgcmV0dXJuIGFsaWduZWRzaXplOwogIH0KCiAgaW5saW5lIHZvaWQgb3BlcmF0
b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZzKSBjb25zdDsKICBpbmxpbmUgdm9pZCBvcGVyYXRv
cjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMpOwogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChN
ZW1CdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE1l
bUJ1ZmZlcmVkU3RyZWFtICZzKTsKfTsKCgoKCgp0ZW1wbGF0ZSA8aW50IG1heD4KY2xhc3MgX0NP
UkJBX0JvdW5kZWRfU2VxdWVuY2VfX0Jvb2xlYW4KICAgOiBwdWJsaWMgX0NPUkJBX0JvdW5kZWRf
U2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDxfQ09SQkFfQm9vbGVhbixtYXgsMSwxPgp7CnB1Ymxp
YzoKICB0eXBlZGVmIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8X0NP
UkJBX0Jvb2xlYW4sbWF4LDEsMT4gQmFzZVQgOwogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1
ZW5jZV9fQm9vbGVhbigpIHt9CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19Cb29s
ZWFuKF9DT1JCQV9VTG9uZyBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ09SQkFfQm9vbGVhbiAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCkKICAgIDogQmFzZVQo
bGVuLHZhbHVlLHJlbGVhc2UpIHt9CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19C
b29sZWFuKGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm91bmRl
ZF9TZXF1ZW5jZV9fQm9vbGVhbjxtYXg+JiBzKQogICAgOiBfQ09SQkFfQm91bmRlZF9TZXF1ZW5j
ZV93X0ZpeFNpemVFbGVtZW50PF9DT1JCQV9Cb29sZWFuLG1heCwxLDE+KHMpIHt9CiAgaW5saW5l
IF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19Cb29sZWFuJiBvcGVyYXRvcj0gKGNvbnN0CiAgICAg
ICAgICAgICAgICAgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX0Jvb2xlYW4mIHMpIHsKICAgICBC
YXNlVDo6b3BlcmF0b3I9IChzKTsKICAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgfl9D
T1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19Cb29sZWFuKCkge30KCiAgaW5saW5lIHZvaWQgb3BlcmF0
b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZzKSBjb25zdDsKICBpbmxpbmUgdm9pZCBvcGVyYXRv
cjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMpOwogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChN
ZW1CdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE1l
bUJ1ZmZlcmVkU3RyZWFtICZzKTsKCn07CgoKCgoKdGVtcGxhdGUgPGludCBtYXg+CmNsYXNzIF9D
T1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19PY3RldAogICA6IHB1YmxpYyBfQ09SQkFfQm91bmRlZF9T
ZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PF9DT1JCQV9PY3RldCxtYXgsMSwxPgp7CnB1YmxpYzoK
ICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX09jdGV0KCkge30KICBpbmxpbmUgX0NP
UkJBX0JvdW5kZWRfU2VxdWVuY2VfX09jdGV0KF9DT1JCQV9VTG9uZyBsZW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfT2N0ZXQgKnZhbHVlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVs
ZWFzZSA9IDApCiAgICA6IF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8
X0NPUkJBX09jdGV0LG1heCwxLDE+KGxlbix2YWx1ZSxyZWxlYXNlKSB7fQogIGlubGluZSBfQ09S
QkFfQm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQoY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX09jdGV0PG1heD4mIHMpCiAgICA6IF9D
T1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8X0NPUkJBX09jdGV0LG1heCwx
LDE+KHMpIHt9CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19PY3RldCYgb3BlcmF0
b3I9IChjb25zdAogICAgICAgICAgICAgICAgIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19PY3Rl
dCYgcykgewogICAgIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8X0NP
UkJBX09jdGV0LG1heCwxLDE+OjpvcGVyYXRvcj0gKHMpOwogICAgIHJldHVybiAqdGhpczsKICB9
CiAgaW5saW5lIH5fQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQoKSB7fQp9OwoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfc2xpY2UsY2xhc3MgVGVsbSxpbnQgZGltZW5zaW9uPgpj
bGFzcyBfQ09SQkFfU2VxdWVuY2VfQXJyYXkgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfU2Vx
dWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPiBUX3NlcTsKCiAgaW5saW5lIF9D
T1JCQV9VTG9uZyBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gcGRfbWF4OyB9CiAgaW5saW5lIF9D
T1JCQV9VTG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBwZF9sZW47IH0KICBpbmxpbmUgdm9p
ZCBsZW5ndGgoX0NPUkJBX1VMb25nIGxlbikKICB7CiAgICBpZiAocGRfYm91bmRlZCAmJiBsZW4g
PiBwZF9tYXgpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CgogICAgfQoKICAg
IGlmIChsZW4pIHsKCgogICAgICBpZiAoIXBkX2J1ZiB8fCBsZW4gPiBwZF9tYXgpIHsKICAgICAg
ICBjb3B5YnVmZmVyKCgobGVuID4gcGRfbWF4KSA/IGxlbiA6IHBkX21heCkpOwogICAgICB9CiAg
ICB9CgogICAgcGRfbGVuID0gbGVuOwoKICB9CgoKICBpbmxpbmUgVF9zbGljZSogb3BlcmF0b3Jb
XSAoX0NPUkJBX1VMb25nIGluZGV4KQogIHsKICAgIGlmIChpbmRleCA+PSBwZF9sZW4pIF9DT1JC
QV9ib3VuZF9jaGVja19lcnJvcigpOwogICAgcmV0dXJuIChUX3NsaWNlKikocGRfYnVmW2luZGV4
XSk7CiAgfQogIGlubGluZSBjb25zdCBUX3NsaWNlKiBvcGVyYXRvcltdIChfQ09SQkFfVUxvbmcg
aW5kZXgpIGNvbnN0CiAgewogICAgaWYgKGluZGV4ID49IHBkX2xlbikgX0NPUkJBX2JvdW5kX2No
ZWNrX2Vycm9yKCk7CiAgICByZXR1cm4gKGNvbnN0IFRfc2xpY2UqKShwZF9idWZbaW5kZXhdKTsK
ICB9CiAgc3RhdGljIGlubGluZSBUKiBhbGxvY2J1ZihfQ09SQkFfVUxvbmcgbmVsZW1zKQogIHsK
ICAgIGlmIChuZWxlbXMpIHJldHVybiBuZXcgVFtuZWxlbXNdOwogICAgZWxzZSByZXR1cm4gMDsK
ICB9CiAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVidWYoVCAqIGIpCiAgewogICAgaWYgKGIpIGRl
bGV0ZSBbXSBiOwogICAgcmV0dXJuOwogIH0KCgogIGlubGluZSBfQ09SQkFfQm9vbGVhbiByZWxl
YXNlKCkgY29uc3QgeyByZXR1cm4gcGRfcmVsOyB9CgogIGlubGluZSBUKiBnZXRfYnVmZmVyKF9D
T1JCQV9Cb29sZWFuIG9ycGhhbiA9IDApIHsKICAgIGlmIChwZF9tYXggJiYgIXBkX2J1Zikgewog
ICAgICBjb3B5YnVmZmVyKHBkX21heCk7CiAgICB9CiAgICBpZiAoIW9ycGhhbikgewogICAgICBy
ZXR1cm4gcGRfYnVmOwogICAgfQogICAgZWxzZSB7CiAgICAgIGlmICghcGRfcmVsKQogICAgICAg
IHJldHVybiAwOwogICAgICBlbHNlIHsKICAgICAgICBUKiB0bXAgPSBwZF9idWY7CiAgICAgICAg
cGRfYnVmID0gMDsKICAgICAgICBpZiAoIXBkX2JvdW5kZWQpIHsKICAgICAgICAgIHBkX21heCA9
IDA7CiAgICAgICAgfQogICAgICAgIHBkX2xlbiA9IDA7CiAgICAgICAgcGRfcmVsID0gMTsKICAg
ICAgICByZXR1cm4gdG1wOwogICAgICB9CiAgICB9CiAgfQoKICBpbmxpbmUgVCogZ2V0X2J1ZmZl
cigpIGNvbnN0IHsKICAgIGlmIChwZF9tYXggJiYgIXBkX2J1ZikgewoKICAgICAgVF9zZXEqIHMg
PSBjb25zdF9jYXN0PFRfc2VxKj4odGhpcyk7CgoKCiAgICAgIHMtPmNvcHlidWZmZXIocGRfbWF4
KTsKICAgIH0KICAgIHJldHVybiBwZF9idWY7CiAgfQoKICBpbmxpbmUgfl9DT1JCQV9TZXF1ZW5j
ZV9BcnJheSgpIHsKICAgIGlmIChwZF9yZWwgJiYgcGRfYnVmKSBmcmVlYnVmKHBkX2J1Zik7CiAg
ICBwZF9idWYgPSAwOwogICAgcmV0dXJuOwogIH0KCgogIGlubGluZSBUICpOUF9kYXRhKCkgY29u
c3QgeyByZXR1cm4gcGRfYnVmOyB9CiAgaW5saW5lIHZvaWQgTlBfbm9yZWxlYXNlKCkgeyBwZF9y
ZWwgPSAwOyB9CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZz
KSBjb25zdDsKICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMp
OwogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7
CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZzKTsKCnByb3Rl
Y3RlZDoKICBpbmxpbmUgX0NPUkJBX1NlcXVlbmNlX0FycmF5KCkgOiBwZF9tYXgoMCksIHBkX2xl
bigwKSwgcGRfcmVsKDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkX2Jv
dW5kZWQoMCksIHBkX2J1ZigwKSB7IH0KCiAgaW5saW5lIF9DT1JCQV9TZXF1ZW5jZV9BcnJheShf
Q09SQkFfVUxvbmcgbWF4LCBfQ09SQkFfQm9vbGVhbiBib3VuZGVkPTApIDoKICAgIHBkX21heCht
YXgpLCBwZF9sZW4oMCksIHBkX3JlbCgxKSwgcGRfYm91bmRlZChib3VuZGVkKSwgcGRfYnVmKDAp
IHt9CgogIGlubGluZSBfQ09SQkFfU2VxdWVuY2VfQXJyYXkoY29uc3QgX0NPUkJBX1NlcXVlbmNl
X0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4mIHMpCiAgICAgICAgICAgICAgOiBwZF9t
YXgocy5wZF9tYXgpLAogICAgICAgICAgICAgICAgcGRfbGVuKDApLAogICAgICAgICAgICAgICAg
cGRfcmVsKDEpLAogICAgICAgICAgICAgICAgcGRfYm91bmRlZChzLnBkX2JvdW5kZWQpLCBwZF9i
dWYoMCkKICB7CiAgICBsZW5ndGgocy5wZF9sZW4pOwogICAgZm9yIChfQ09SQkFfVUxvbmcgaT0w
OyBpIDwgcGRfbGVuOyBpKyspIHsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaj0wOyBqIDwgZGlt
ZW5zaW9uOyBqKyspIHsKICAgICAgICAqKChUZWxtKikocGRfYnVmW2ldKSArIGopID0gKigoVGVs
bSopKHMucGRfYnVmW2ldKSArIGopOwogICAgICB9CiAgICB9CiAgfQoKICBpbmxpbmUgX0NPUkJB
X1NlcXVlbmNlX0FycmF5KF9DT1JCQV9VTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VCAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBy
ZWxlYXNlID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFu
IGJvdW5kZWQgPSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgIDogcGRf
bWF4KG1heCksCiAgICAgICAgcGRfbGVuKGxlbiksCiAgICAgICAgcGRfcmVsKHJlbGVhc2UpLAog
ICAgICAgIHBkX2JvdW5kZWQoYm91bmRlZCksCiAgICAgICAgcGRfYnVmKHZhbHVlKQogIHsKICAg
IGlmIChsZW4gPiBtYXggfHwgKGxlbiAmJiAhdmFsdWUpKSB7CiAgICAgIF9DT1JCQV9ib3VuZF9j
aGVja19lcnJvcigpOwoKICAgIH0KICB9CgoKICBpbmxpbmUgX0NPUkJBX1NlcXVlbmNlX0FycmF5
PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4gJm9wZXJhdG9yPSAoY29uc3QgX0NPUkJBX1NlcXVl
bmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4gJnMpCiAgewogICAgbGVuZ3RoKHMu
cGRfbGVuKTsKICAgIGZvciAodW5zaWduZWQgbG9uZyBpPTA7IGkgPCBwZF9sZW47IGkrKykgewog
ICAgICBmb3IgKF9DT1JCQV9VTG9uZyBqPTA7IGogPCBkaW1lbnNpb247IGorKykgewogICAgICAg
ICooKFRlbG0qKShwZF9idWZbaV0pICsgaikgPSAqKChUZWxtKikocy5wZF9idWZbaV0pICsgaik7
CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgoKICBpbmxpbmUgdm9pZCByZXBs
YWNlKF9DT1JCQV9VTG9uZyBtYXgsIF9DT1JCQV9VTG9uZyBsZW4sIFQqIGRhdGEsCiAgICAgICAg
ICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCkgewogICAgaWYgKGxlbiA+
IG1heCB8fCAobGVuICYmICFkYXRhKSkgewogICAgICBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3Io
KTsKCiAgICB9CiAgICBpZiAocGRfcmVsICYmIHBkX2J1ZikgewogICAgICBmcmVlYnVmKHBkX2J1
Zik7CiAgICB9CiAgICBwZF9tYXggPSBtYXg7CiAgICBwZF9sZW4gPSBsZW47CiAgICBwZF9idWYg
PSBkYXRhOwogICAgcGRfcmVsID0gcmVsZWFzZTsKICB9CgoKcHJpdmF0ZToKCiAgdm9pZCBjb3B5
YnVmZmVyKF9DT1JCQV9VTG9uZyBuZXdtYXgpIHsKCgoKICAgIFQqIG5ld2J1ZiA9IGFsbG9jYnVm
KG5ld21heCk7CiAgICBpZiAoIW5ld2J1ZikgewogICAgICBfQ09SQkFfbmV3X29wZXJhdG9yX3Jl
dHVybl9udWxsKCk7CgogICAgfQogICAgZm9yICh1bnNpZ25lZCBsb25nIGk9MDsgaSA8IHBkX2xl
bjsgaSsrKSB7CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGo9MDsgaiA8IGRpbWVuc2lvbjsgaisr
KSB7CiAgICAgICAgKigoVGVsbSopKG5ld2J1ZltpXSkgKyBqKSA9ICooKFRlbG0qKShwZF9idWZb
aV0pICsgaik7CiAgICAgIH0KICAgIH0KICAgIGlmIChwZF9yZWwgJiYgcGRfYnVmKSB7CiAgICAg
IGZyZWVidWYocGRfYnVmKTsKICAgIH0KICAgIGVsc2UgewogICAgICBwZF9yZWwgPSAxOwogICAg
fQogICAgcGRfYnVmID0gbmV3YnVmOwogICAgcGRfbWF4ID0gbmV3bWF4OwogIH0KCiAgX0NPUkJB
X1VMb25nIHBkX21heDsKICBfQ09SQkFfVUxvbmcgcGRfbGVuOwogIF9DT1JCQV9Cb29sZWFuIHBk
X3JlbDsKICBfQ09SQkFfQm9vbGVhbiBwZF9ib3VuZGVkOwogIFQqIHBkX2J1ZjsKfTsKCgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0saW50IGRpbWVuc2lvbj4K
Y2xhc3MgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheSA6IHB1YmxpYyBfQ09SQkFfU2Vx
dWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPiB7CnB1YmxpYzoKICB0eXBlZGVm
IF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+IEJhc2VUIDsK
ICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheSgpIHt9CiAgaW5saW5lIF9D
T1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXkoX0NPUkJBX1VMb25nIG1heCkgOiBfQ09SQkFf
U2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPihtYXgpIHt9CiAgaW5saW5l
IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXkoY29uc3QgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+JiBzKQogICAgIDogX0NPUkJB
X1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4ocykge30KICBpbmxpbmUg
X0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheShfQ09SQkFfVUxvbmcgbWF4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqdmFsdWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDAp
CiAgICAgOiBfQ09SQkFfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPiht
YXgsbGVuLHZhbHVlLHJlbGVhc2UpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVu
Y2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPiAmb3BlcmF0b3I9IChjb25zdCBfQ09S
QkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4gJnMp
IHsKICAgIEJhc2VUOjpvcGVyYXRvcj0gKHMpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxp
bmUgfl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXkoKSB7fQoKCgogIGlubGluZSB2b2lk
IHJlcGxhY2UoX0NPUkJBX1VMb25nIG1heCwgX0NPUkJBX1VMb25nIGxlbiwgVCogZGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKSB7CiAgICBCYXNl
VDo6cmVwbGFjZShtYXgsbGVuLGRhdGEscmVsZWFzZSk7CiAgfQoKCgoKCgogIGlubGluZSBzaXpl
X3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSBjb25zdCB7CiAgICBzaXpl
X3QgYWxpZ25lZHNpemUgPSAoKGluaXRpYWxvZmZzZXQrMykgJiB+KChpbnQpMykpK3NpemVvZihf
Q09SQkFfVUxvbmcpOwogICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOwogICAgICAgICBpIDwgQmFz
ZVQ6Omxlbmd0aCgpOwogICAgICAgICBpKyspIHsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaj0w
OyBqPGRpbWVuc2lvbjsgaisrKSB7CiAgICAgICAgYWxpZ25lZHNpemUgPSAoKFRlbG0qKShCYXNl
VDo6TlBfZGF0YSgpW2ldKSArIGopLT5fTlBfYWxpZ25lZFNpemUoYWxpZ25lZHNpemUpOwogICAg
ICB9CiAgICB9CiAgICByZXR1cm4gYWxpZ25lZHNpemU7CiAgfQp9OwoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBULGNsYXNzIFRfc2xpY2UsIGNsYXNzIFRlbG0saW50IGRpbWVuc2lvbixpbnQgZWxtU2l6
ZSxpbnQgZWxtQWxpZ25tZW50PgpjbGFzcyBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5
X3dfRml4U2l6ZUVsZW1lbnQKICAgOiBwdWJsaWMgX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9z
bGljZSxUZWxtLGRpbWVuc2lvbj4KewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfU2VxdWVuY2Vf
QXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPiBCYXNlVCA7CiAgaW5saW5lIF9DT1JCQV9V
bmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudCgpIHt9CiAgaW5saW5lIF9D
T1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudChfQ09SQkFfVUxv
bmcgbWF4KQogICAgOiBfQ09SQkFfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5z
aW9uPihtYXgpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19G
aXhTaXplRWxlbWVudCAoY29uc3QKICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJy
YXlfd19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24sZWxtU2l6ZSxlbG1B
bGlnbm1lbnQ+JiBzKQogICAgOiBfQ09SQkFfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0s
ZGltZW5zaW9uPihzKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5
X3dfRml4U2l6ZUVsZW1lbnQoX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
ICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQogICAgOiBfQ09SQkFfU2VxdWVu
Y2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPihtYXgsbGVuLHZhbHVlLHJlbGVhc2Up
IHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxl
bWVudDxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24sZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+ICYKICAg
ICAgb3BlcmF0b3I9CiAgICAgICAgKGNvbnN0CiAgICAgICAgICBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uLGVs
bVNpemUsZWxtQWxpZ25tZW50PiAmCiAgICAgICAgIHMpCiAgewogICAgQmFzZVQ6Om9wZXJhdG9y
PSAocyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlubGluZSB+X0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50KCkge30KCgoKICBpbmxpbmUgdm9pZCByZXBs
YWNlKF9DT1JCQV9VTG9uZyBtYXgsIF9DT1JCQV9VTG9uZyBsZW4sIFQqIGRhdGEsCiAgICAgICAg
ICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCkgewogICAgQmFzZVQ6OnJl
cGxhY2UobWF4LGxlbixkYXRhLHJlbGVhc2UpOwogIH0KCgoKCgoKICBpbmxpbmUgc2l6ZV90IF9O
UF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3QgewogICAgc2l6ZV90IGFs
aWduZWRzaXplID0gKChpbml0aWFsb2Zmc2V0KzMpICYgfigoaW50KTMpKStzaXplb2YoX0NPUkJB
X1VMb25nKTsKICAgIGlmIChCYXNlVDo6bGVuZ3RoKCkpIHsKICAgICAgYWxpZ25lZHNpemUgPSAo
KGFsaWduZWRzaXplKyhlbG1BbGlnbm1lbnQtMSkpICYgfihlbG1BbGlnbm1lbnQtMSkpOwogICAg
ICBhbGlnbmVkc2l6ZSArPUJhc2VUOjpsZW5ndGgoKSAqCiAgICAgICAgZGltZW5zaW9uICogZWxt
U2l6ZTsKICAgIH0KICAgIHJldHVybiBhbGlnbmVkc2l6ZTsKICB9CgogIGlubGluZSB2b2lkIG9w
ZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZvaWQgb3Bl
cmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZzKTsKICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+
PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpIGNvbnN0OwogIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9
IChNZW1CdWZmZXJlZFN0cmVhbSAmcyk7Cn07CgoKCgoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3Mg
VF9zbGljZSwgaW50IGRpbWVuc2lvbj4KY2xhc3MgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9B
cnJheV9fQm9vbGVhbgogICA6IHB1YmxpYyBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5
X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLF9DT1JCQV9Cb29sZWFuLGRpbWVuc2lvbiwxLDE+
CnsKcHVibGljOgogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X19Cb29s
ZWFuKCkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fQm9vbGVh
bihfQ09SQkFfVUxvbmcgbWF4KQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5
X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLF9DT1JCQV9Cb29sZWFuLGRpbWVuc2lvbiwxLDE+
KG1heCkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fQm9vbGVh
bihfQ09SQkFfVUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICp2YWx1ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jv
b2xlYW4gcmVsZWFzZSA9IDApCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlf
d19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsX0NPUkJBX0Jvb2xlYW4sZGltZW5zaW9uLDEsMT4o
bWF4LGxlbix2YWx1ZSxyZWxlYXNlKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVl
bmNlX0FycmF5X19Cb29sZWFuIChjb25zdAogICAgICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5j
ZV9BcnJheV9fQm9vbGVhbjxULFRfc2xpY2UsZGltZW5zaW9uPiYgcykKICAgIDogX0NPUkJBX1Vu
Ym91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGljZSxfQ09SQkFf
Qm9vbGVhbixkaW1lbnNpb24sMSwxPihzKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlX0FycmF5X19Cb29sZWFuPFQsVF9zbGljZSxkaW1lbnNpb24+JgogICAgICBvcGVyYXRv
cj0gKGNvbnN0CiAgICAgICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fQm9vbGVh
bjxULFRfc2xpY2UsZGltZW5zaW9uPiYgcykgewogICAgICAgICAgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGljZSxfQ09SQkFfQm9vbGVhbixk
aW1lbnNpb24sMSwxPjo6b3BlcmF0b3I9IChzKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICB9
CgogIGlubGluZSB+X0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fQm9vbGVhbigpIHt9
CgogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7
CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZzKTsKICBpbmxp
bmUgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpIGNvbnN0OwogIGlubGlu
ZSB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmcyk7Cgp9OwoKCgoKCnRlbXBs
YXRlPGNsYXNzIFQsIGNsYXNzIFRfc2xpY2UsIGludCBkaW1lbnNpb24+CmNsYXNzIF9DT1JCQV9V
bmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX09jdGV0CiAgIDogcHVibGljIF9DT1JCQV9VbmJvdW5k
ZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsX0NPUkJBX09jdGV0
LGRpbWVuc2lvbiwxLDE+CnsKcHVibGljOgogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVl
bmNlX0FycmF5X19PY3RldCgpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vf
QXJyYXlfX09jdGV0KF9DT1JCQV9VTG9uZyBtYXgpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsX0NPUkJBX09jdGV0LGRpbWVu
c2lvbiwxLDE+KG1heCkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJh
eV9fT2N0ZXQoX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX1VMb25nIGxlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqdmFsdWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9D
T1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNl
X0FycmF5X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLF9DT1JCQV9PY3RldCxkaW1lbnNpb24s
MSwxPihtYXgsbGVuLHZhbHVlLHJlbGVhc2UpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRf
U2VxdWVuY2VfQXJyYXlfX09jdGV0IChjb25zdAogICAgICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1
ZW5jZV9BcnJheV9fT2N0ZXQ8VCxUX3NsaWNlLGRpbWVuc2lvbj4mIHMpCiAgICA6IF9DT1JCQV9V
bmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsX0NPUkJB
X09jdGV0LGRpbWVuc2lvbiwxLDE+KHMpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2VfQXJyYXlfX09jdGV0PFQsVF9zbGljZSxkaW1lbnNpb24+JgogICAgICBvcGVyYXRvcj0g
KGNvbnN0CiAgICAgICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fT2N0ZXQ8VCxU
X3NsaWNlLGRpbWVuc2lvbj4mIHMpIHsKICAgICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVu
Y2VfQXJyYXlfd19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsX0NPUkJBX09jdGV0LGRpbWVuc2lv
biwxLDE+OjpvcGVyYXRvcj0gKHMpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5s
aW5lIH5fQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X19PY3RldCgpIHt9Cn07CgoKCgoK
dGVtcGxhdGUgPGNsYXNzIFQsY2xhc3MgVF9zbGljZSxjbGFzcyBUZWxtLGludCBkaW1lbnNpb24s
aW50IG1heD4KY2xhc3MgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXkgOiBwdWJsaWMgX0NP
UkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4gewpwdWJsaWM6CiAg
dHlwZWRlZiBfQ09SQkFfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPiBC
YXNlVCA7CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5KCkgOiBfQ09SQkFf
U2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPihtYXgsMSkge30KICBpbmxp
bmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXkoX0NPUkJBX1VMb25nIGxlbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqdmFsdWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQogICAg
ICAgICAgICA6IF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+
KG1heCxsZW4sdmFsdWUscmVsZWFzZSwxKSB7fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1
ZW5jZV9BcnJheShjb25zdCBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2Us
VGVsbSxkaW1lbnNpb24sbWF4PiYgcykKICAgICAgICAgICAgOiBfQ09SQkFfU2VxdWVuY2VfQXJy
YXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPihzKSB7fQogIGlubGluZSBfQ09SQkFfQm91bmRl
ZF9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24sbWF4PiAmb3BlcmF0b3I9
IChjb25zdCBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1l
bnNpb24sbWF4PiAmcykgewogICAgQmFzZVQ6Om9wZXJhdG9yPSAocyk7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQoKICBpbmxpbmUgfl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5KCkge30KCgoK
ICBpbmxpbmUgdm9pZCByZXBsYWNlKF9DT1JCQV9VTG9uZyBsZW4sIFQqIGRhdGEsX0NPUkJBX0Jv
b2xlYW4gcmVsZWFzZSA9IDApIHsKICAgIEJhc2VUOjpyZXBsYWNlKG1heCxsZW4sZGF0YSxyZWxl
YXNlKTsKICB9CgogIGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFs
b2Zmc2V0KSBjb25zdCB7CiAgICBzaXplX3QgYWxpZ25lZHNpemUgPSAoKGluaXRpYWxvZmZzZXQr
MykgJiB+KChpbnQpMykpK3NpemVvZihfQ09SQkFfVUxvbmcpOwogICAgZm9yIChfQ09SQkFfVUxv
bmcgaT0wOyBpIDwgQmFzZVQ6Omxlbmd0aCgpOyBpKyspIHsKICAgICAgZm9yIChfQ09SQkFfVUxv
bmcgaj0wOyBqIDwgZGltZW5zaW9uOyBqKyspIHsKICAgICAgICBhbGlnbmVkc2l6ZSA9ICgoVGVs
bSopKEJhc2VUOjpOUF9kYXRhKClbaV0pK2opLT5fTlBfYWxpZ25lZFNpemUoYWxpZ25lZHNpemUp
OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYWxpZ25lZHNpemU7CiAgfQp9OwoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBULGNsYXNzIFRfc2xpY2UsY2xhc3MgVGVsbSxpbnQgZGltZW5zaW9uLGludCBt
YXgsaW50IGVsbVNpemUsIGludCBlbG1BbGlnbm1lbnQ+CmNsYXNzIF9DT1JCQV9Cb3VuZGVkX1Nl
cXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQKICA6IHB1YmxpYyBfQ09SQkFfU2VxdWVuY2Vf
QXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPgp7CnB1YmxpYzoKICB0eXBlZGVmIF9DT1JC
QV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+IEJhc2VUIDsKICBpbmxp
bmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudCgpCiAgICA6
IF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+KG1heCwxKSB7
fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50
KF9DT1JCQV9VTG9uZyBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFQqIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCkKICAgIDogX0NPUkJBX1NlcXVl
bmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4obWF4LGxlbix2YWx1ZSxyZWxlYXNl
LDEpIHt9CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVs
ZW1lbnQoY29uc3QKICAgICAgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXpl
RWxlbWVudDxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24sbWF4LGVsbVNpemUsZWxtQWxpZ25tZW50
PiYgcykKICAgIDogX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lv
bj4ocykge30KICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXpl
RWxlbWVudDxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24sbWF4LGVsbVNpemUsZWxtQWxpZ25tZW50
PiYgb3BlcmF0b3I9KGNvbnN0IF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6
ZUVsZW1lbnQ8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uLG1heCxlbG1TaXplLGVsbUFsaWdubWVu
dD4mIHMpIHsKICAgIF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNp
b24+OjpvcGVyYXRvcj0gKHMpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIH5fQ09S
QkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50KCkge30KCgoKICBpbmxp
bmUgdm9pZCByZXBsYWNlKF9DT1JCQV9VTG9uZyBsZW4sIFQqIGRhdGEsX0NPUkJBX0Jvb2xlYW4g
cmVsZWFzZSA9IDApIHsKICAgIF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxk
aW1lbnNpb24+OjpyZXBsYWNlKG1heCxsZW4sZGF0YSxyZWxlYXNlKTsKICB9CgoKICBpbmxpbmUg
c2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3QgewogICAg
c2l6ZV90IGFsaWduZWRzaXplID0gKChpbml0aWFsb2Zmc2V0KzMpICYgfigoaW50KTMpKStzaXpl
b2YoX0NPUkJBX1VMb25nKTsKICAgIGlmIChCYXNlVDo6bGVuZ3RoKCkpIHsKICAgICAgYWxpZ25l
ZHNpemUgPSAoKGFsaWduZWRzaXplKyhlbG1BbGlnbm1lbnQtMSkpICYgfihlbG1BbGlnbm1lbnQt
MSkpOwogICAgICBhbGlnbmVkc2l6ZSArPSBCYXNlVDo6bGVuZ3RoKCkgKiBkaW1lbnNpb24gKiBl
bG1TaXplOwogICAgfQogICAgcmV0dXJuIGFsaWduZWRzaXplOwogIH0KCiAgaW5saW5lIHZvaWQg
b3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZzKSBjb25zdDsKICBpbmxpbmUgdm9pZCBv
cGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMpOwogIGlubGluZSB2b2lkIG9wZXJhdG9y
Pj49IChNZW1CdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8
PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZzKTsKfTsKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFz
cyBUX3NsaWNlLCBpbnQgZGltZW5zaW9uLCBpbnQgbWF4PgpjbGFzcyBfQ09SQkFfQm91bmRlZF9T
ZXF1ZW5jZV9BcnJheV9fQm9vbGVhbgogICA6IHB1YmxpYyBfQ09SQkFfQm91bmRlZF9TZXF1ZW5j
ZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGljZSxfQ09SQkFfQm9vbGVhbixkaW1lbnNp
b24sbWF4LDEsMT4KewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9B
cnJheV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGljZSxfQ09SQkFfQm9vbGVhbixkaW1lbnNpb24s
bWF4LDEsMT4gQmFzZVQgOwogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV9f
Qm9vbGVhbigpIHt9CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X19Cb29s
ZWFuKF9DT1JCQV9VTG9uZyBsZW4sIFQqIHZhbHVlLCBfQ09SQkFfQm9vbGVhbiByZWxlYXNlPTAp
CiAgICA6IEJhc2VUIChsZW4sdmFsdWUscmVsZWFzZSkge30KICBpbmxpbmUgX0NPUkJBX0JvdW5k
ZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW4oY29uc3QgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vf
QXJyYXlfX0Jvb2xlYW48VCxUX3NsaWNlLGRpbWVuc2lvbixtYXg+JiBzKQogICAgOiBCYXNlVCAo
cykge30KICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW48VCxU
X3NsaWNlLGRpbWVuc2lvbixtYXg+JgogICAgICBvcGVyYXRvcj0gKGNvbnN0CiAgICAgICAgX0NP
UkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW48VCxUX3NsaWNlLGRpbWVuc2lvbixt
YXg+JiBzKSB7CiAgICAgICAgICBCYXNlVCA6Om9wZXJhdG9yPSAocyk7CiAgICAgICAgICByZXR1
cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgfl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X19C
b29sZWFuKCkge30KCiAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFt
ICZzKSBjb25zdDsKICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0g
JnMpOwogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSAmcykgY29u
c3Q7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZzKTsKCn07
CgoKCgoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF9zbGljZSwgaW50IGRpbWVuc2lvbiwgaW50
IG1heD4KY2xhc3MgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX09jdGV0CiAgIDogcHVi
bGljIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3Ns
aWNlLF9DT1JCQV9PY3RldCxkaW1lbnNpb24sbWF4LDEsMT4KewpwdWJsaWM6CiAgdHlwZWRlZiBf
Q09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGljZSxf
Q09SQkFfT2N0ZXQsZGltZW5zaW9uLG1heCwxLDE+IEJhc2VUIDsKICBpbmxpbmUgX0NPUkJBX0Jv
dW5kZWRfU2VxdWVuY2VfQXJyYXlfX09jdGV0KCkge30KICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRf
U2VxdWVuY2VfQXJyYXlfX09jdGV0KF9DT1JCQV9VTG9uZyBsZW4sIFQgKnZhbHVlLCBfQ09SQkFf
Qm9vbGVhbiByZWxlYXNlID0gMCkKICAgIDogQmFzZVQgKGxlbix2YWx1ZSxyZWxlYXNlKSB7fQog
IGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fT2N0ZXQoY29uc3QgX0NPUkJB
X0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX09jdGV0PFQsVF9zbGljZSxkaW1lbnNpb24sbWF4PiYg
cykKICAgIDogQmFzZVQgKHMpIHt9CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0Fy
cmF5X19PY3RldDxULFRfc2xpY2UsZGltZW5zaW9uLG1heD4mCiAgICAgIG9wZXJhdG9yPSAoY29u
c3QKICAgICAgICBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fT2N0ZXQ8VCxUX3NsaWNl
LGRpbWVuc2lvbixtYXg+JiBzKSB7CiAgICAgICAgICBCYXNlVCA6Om9wZXJhdG9yPSAocyk7CiAg
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgfl9DT1JCQV9Cb3VuZGVkX1NlcXVl
bmNlX0FycmF5X19PY3RldCgpIHt9Cn07CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBF
bGVtVCwgY2xhc3MgVF9IZWxwZXI+CmNsYXNzIF9DT1JCQV9TZXF1ZW5jZV9PYmpSZWYgewpwdWJs
aWM6CiAgdHlwZWRlZiBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxwZXI+IFRf
c2VxOwoKICBpbmxpbmUgX0NPUkJBX1VMb25nIG1heGltdW0oKSBjb25zdCB7IHJldHVybiBwZF9t
YXg7IH0KICBpbmxpbmUgX0NPUkJBX1VMb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHBkX2xl
bjsgfQogIGlubGluZSB2b2lkIGxlbmd0aChfQ09SQkFfVUxvbmcgbGVuKSB7CiAgICBpZiAocGRf
Ym91bmRlZCAmJiBsZW4gPiBwZF9tYXgpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9y
KCk7CgogICAgfQoKCiAgICBmb3IoIF9DT1JCQV9VTG9uZyBpID0gbGVuOyBpIDwgcGRfbGVuOyBp
KysgKQogICAgICBvcGVyYXRvcltdKGkpID0gVF9IZWxwZXI6Ol9uaWwoKTsKCiAgICBpZiAobGVu
KSB7CgoKICAgICAgaWYgKCFwZF9kYXRhIHx8IGxlbiA+IHBkX21heCkgewogICAgICAgIGNvcHli
dWZmZXIoKChsZW4gPiBwZF9tYXgpID8gbGVuIDogcGRfbWF4KSk7CiAgICAgIH0KICAgIH0KCiAg
ICBwZF9sZW4gPSBsZW47CiAgfQoKICBpbmxpbmUgRWxlbVQgb3BlcmF0b3JbXSAoX0NPUkJBX1VM
b25nIGkpIHsKICAgIGlmKCBpID49IHBkX2xlbiApIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigp
OwogICAgcmV0dXJuIEVsZW1UKHBkX2RhdGFbaV0scGRfcmVsKTsKICB9CiAgaW5saW5lIGNvbnN0
IEVsZW1UIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBpKSBjb25zdCB7CiAgICBpZiggaSA+PSBw
ZF9sZW4gKSBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIHJldHVybiBFbGVtVChwZF9k
YXRhW2ldLHBkX3JlbCk7CiAgfQoKCiAgdHlwZWRlZiBsb25nIHB0cl9hcml0aF90OwoKCgoKCgog
IHN0YXRpYyBpbmxpbmUgVCoqIGFsbG9jYnVmKF9DT1JCQV9VTG9uZyBuZWxlbXMpIHsKICAgIGlm
ICghbmVsZW1zKSByZXR1cm4gMDsKICAgIFQqKiBiID0gbmV3IFQqW25lbGVtcysyXTsKICAgIHB0
cl9hcml0aF90IGwgPSBuZWxlbXM7CiAgICBmb3IgKF9DT1JCQV9VTG9uZyBpID0gMjsgaSA8IG5l
bGVtcysyOyBpKyspIHsKICAgICAgYltpXSA9IFRfSGVscGVyOjpfbmlsKCk7CiAgICB9CiAgICBi
WzBdID0gKFQqKSAoKHB0cl9hcml0aF90KTB4NTM1MTRGNEFVKTsKICAgIGJbMV0gPSAoVCopIGw7
CiAgICByZXR1cm4gYisyOwogIH0KCiAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVidWYoVCoqIGJ1
ZikgewogICAgaWYgKCFidWYpIHJldHVybjsKICAgIFQqKiBiID0gYnVmLTI7CiAgICBpZiAoKHB0
cl9hcml0aF90KWJbMF0gIT0gKChwdHJfYXJpdGhfdCkgMHg1MzUxNEY0QVUpKSB7CiAgICAgIF9D
T1JCQV9iYWRfcGFyYW1fZnJlZWJ1ZigpOwogICAgICByZXR1cm47CiAgICB9CiAgICBwdHJfYXJp
dGhfdCBsID0gKHB0cl9hcml0aF90KSBiWzFdOwogICAgZm9yIChfQ09SQkFfVUxvbmcgaSA9IDA7
IGkgPCAoX0NPUkJBX1VMb25nKSBsOyBpKyspIHsKICAgICAgaWYgKCFUX0hlbHBlcjo6aXNfbmls
KGJ1ZltpXSkpCiAgICAgICAgVF9IZWxwZXI6OnJlbGVhc2UoYnVmW2ldKTsKICAgIH0KICAgIGJb
MF0gPSAoVCopIDA7CiAgICBkZWxldGUgW10gYjsKICB9CgoKICBpbmxpbmUgX0NPUkJBX0Jvb2xl
YW4gcmVsZWFzZSgpIGNvbnN0IHsgcmV0dXJuIHBkX3JlbDsgfQoKICBpbmxpbmUgVCoqIGdldF9i
dWZmZXIoX0NPUkJBX0Jvb2xlYW4gb3JwaGFuID0gMCkgewogICAgaWYgKHBkX21heCAmJiAhcGRf
ZGF0YSkgewogICAgICBjb3B5YnVmZmVyKHBkX21heCk7CiAgICB9CiAgICBpZiAoIW9ycGhhbikg
ewogICAgICByZXR1cm4gcGRfZGF0YTsKICAgIH0KICAgIGVsc2UgewogICAgICBpZiAoIXBkX3Jl
bCkKICAgICAgICByZXR1cm4gMDsKICAgICAgZWxzZSB7CiAgICAgICAgVCoqIHRtcCA9IHBkX2Rh
dGE7CiAgICAgICAgcGRfZGF0YSA9IDA7CiAgICAgICAgaWYgKCFwZF9ib3VuZGVkKSB7CiAgICAg
ICAgICBwZF9tYXggPSAwOwogICAgICAgIH0KICAgICAgICBwZF9sZW4gPSAwOwogICAgICAgIHBk
X3JlbCA9IDE7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgfQogICAgfQogIH0KCiAgaW5saW5l
IFQqY29uc3QgKiBnZXRfYnVmZmVyKCkgY29uc3QgewogICAgaWYgKHBkX21heCAmJiAhcGRfZGF0
YSkgewoKICAgICAgVF9zZXEqIHMgPSBjb25zdF9jYXN0PFRfc2VxKj4odGhpcyk7CgoKCiAgICAg
IHMtPmNvcHlidWZmZXIocGRfbWF4KTsKICAgIH0KICAgIHJldHVybiBwZF9kYXRhOwogIH0KCiAg
aW5saW5lIH5fQ09SQkFfU2VxdWVuY2VfT2JqUmVmKCkgewogICAgaWYgKHBkX3JlbCAmJiBwZF9k
YXRhKSBmcmVlYnVmKHBkX2RhdGEpOwogICAgcGRfZGF0YSA9IDA7CiAgfQoKCgogIGlubGluZSBz
aXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSBjb25zdCB7CiAgICBz
aXplX3QgYWxpZ25lZHNpemUgPSAoKGluaXRpYWxvZmZzZXQrMykgJiB+KChpbnQpMykpK3NpemVv
ZihfQ09SQkFfVUxvbmcpOwogICAgZm9yICh1bnNpZ25lZCBsb25nIGk9MDsgaSA8IGxlbmd0aCgp
OyBpKyspIHsKICAgICAgYWxpZ25lZHNpemUgPSBUX0hlbHBlcjo6TlBfYWxpZ25lZFNpemUocGRf
ZGF0YVtpXSxhbGlnbmVkc2l6ZSk7CiAgICB9CiAgICByZXR1cm4gYWxpZ25lZHNpemU7CiAgfQoK
ICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMpIGNvbnN0Owog
IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSAmcyk7CiAgaW5saW5l
IHZvaWQgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZzKSBjb25zdDsKICBpbmxpbmUg
dm9pZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpOwoKcHJvdGVjdGVkOgogIGlu
bGluZSBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmKCkKICAgIDogcGRfbWF4KDApLCBwZF9sZW4oMCks
IHBkX3JlbCgxKSwgcGRfYm91bmRlZCgwKSwgcGRfZGF0YSgwKSB7fQoKICBpbmxpbmUgX0NPUkJB
X1NlcXVlbmNlX09ialJlZihfQ09SQkFfVUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIGJvdW5kZWQ9MCkKICAgIDogcGRfbWF4KG1heCksIHBk
X2xlbigwKSwgcGRfcmVsKDEpLCBwZF9ib3VuZGVkKGJvdW5kZWQpLCBwZF9kYXRhKDApIHt9Cgog
IGlubGluZSBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmKF9DT1JCQV9VTG9uZyBtYXgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFQqKiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQ09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ09SQkFfQm9vbGVhbiBib3VuZGVkID0gMCkKICAgIDogcGRfbWF4KG1heCksIHBk
X2xlbihsZW4pLCBwZF9yZWwocmVsZWFzZSksCiAgICAgIHBkX2JvdW5kZWQoYm91bmRlZCksIHBk
X2RhdGEodmFsdWUpCiAgewogICAgaWYgKGxlbiA+IG1heCB8fCAobGVuICYmICF2YWx1ZSkpIHsK
ICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CgogICAgfQogIH0KCiAgaW5saW5lIF9D
T1JCQV9TZXF1ZW5jZV9PYmpSZWYoY29uc3QgVF9zZXEmIHMpCiAgICA6IHBkX21heChzLnBkX21h
eCksIHBkX2xlbigwKSwgcGRfcmVsKDEpLAogICAgICBwZF9ib3VuZGVkKHMucGRfYm91bmRlZCks
IHBkX2RhdGEoMCkgewogICAgbGVuZ3RoKHMucGRfbGVuKTsKICAgIGZvciggX0NPUkJBX1VMb25n
IGkgPSAwOyBpIDwgcGRfbGVuOyBpKysgKQogICAgICBvcGVyYXRvcltdKGkpID0gc1tpXTsKICB9
CgogIGlubGluZSBUX3NlcSYgb3BlcmF0b3I9IChjb25zdCBUX3NlcSYgcykgewogICAgbGVuZ3Ro
KHMucGRfbGVuKTsKICAgIGZvciggX0NPUkJBX1VMb25nIGkgPSAwOyBpIDwgcGRfbGVuOyBpKysg
KQogICAgICBvcGVyYXRvcltdKGkpID0gc1tpXTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKICBp
bmxpbmUgdm9pZCByZXBsYWNlKF9DT1JCQV9VTG9uZyBtYXgsIF9DT1JCQV9VTG9uZyBsZW4sIFQq
KiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDAp
IHsKICAgIGlmIChsZW4gPiBtYXggfHwgKGxlbiAmJiAhZGF0YSkpIHsKICAgICAgX0NPUkJBX2Jv
dW5kX2NoZWNrX2Vycm9yKCk7CgogICAgfQogICAgaWYgKHBkX3JlbCAmJiBwZF9kYXRhKSB7CiAg
ICAgIGZyZWVidWYocGRfZGF0YSk7CiAgICB9CiAgICBwZF9tYXggPSBtYXg7CiAgICBwZF9sZW4g
PSBsZW47CiAgICBwZF9kYXRhID0gZGF0YTsKICAgIHBkX3JlbCA9IHJlbGVhc2U7CiAgfQoKCnBy
aXZhdGU6CgogIHZvaWQgY29weWJ1ZmZlcihfQ09SQkFfVUxvbmcgbmV3bWF4KSB7CgoKCiAgICBU
KiogbmV3ZGF0YSA9IGFsbG9jYnVmKG5ld21heCk7CiAgICBpZiAoIW5ld2RhdGEpIHsKICAgICAg
X0NPUkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwoKICAgIH0KICAgIGZvciAodW5zaWdu
ZWQgbG9uZyBpPTA7IGkgPCBwZF9sZW47IGkrKykgewogICAgICBpZiAocGRfcmVsKSB7CiAgICAg
ICAgbmV3ZGF0YVtpXSA9IHBkX2RhdGFbaV07CiAgICAgICAgcGRfZGF0YVtpXSA9IFRfSGVscGVy
OjpfbmlsKCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgVF9IZWxwZXI6OmR1cGxpY2F0
ZShwZF9kYXRhW2ldKTsKICAgICAgICBuZXdkYXRhW2ldID0gcGRfZGF0YVtpXTsKICAgICAgfQog
ICAgfQogICAgaWYgKHBkX3JlbCAmJiBwZF9kYXRhKSB7CiAgICAgIGZyZWVidWYocGRfZGF0YSk7
CiAgICB9CiAgICBlbHNlIHsKICAgICAgcGRfcmVsID0gMTsKICAgIH0KICAgIHBkX2RhdGEgPSBu
ZXdkYXRhOwogICAgcGRfbWF4ID0gbmV3bWF4OwogIH0KCiAgX0NPUkJBX1VMb25nIHBkX21heDsK
ICBfQ09SQkFfVUxvbmcgcGRfbGVuOwogIF9DT1JCQV9Cb29sZWFuIHBkX3JlbDsKICBfQ09SQkFf
Qm9vbGVhbiBwZF9ib3VuZGVkOwogIFQqKiBwZF9kYXRhOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBFbGVtVCwgY2xhc3MgVF9IZWxwZXI+CmNsYXNzIF9DT1JCQV9VbmJvdW5kZWRf
U2VxdWVuY2VfT2JqUmVmIDogcHVibGljIF9DT1JCQV9TZXF1ZW5jZV9PYmpSZWY8VCxFbGVtVCxU
X0hlbHBlcj4gewpwdWJsaWM6CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2Jq
UmVmKCkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9PYmpSZWYoX0NPUkJB
X1VMb25nIG1heCkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9DT1JCQV9TZXF1ZW5jZV9P
YmpSZWY8VCxFbGVtVCxUX0hlbHBlcj4obWF4KSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVk
X1NlcXVlbmNlX09ialJlZihfQ09SQkFfVUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUICoqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQogICAgIDogX0NP
UkJBX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPihtYXgsbGVuLHZhbHVlLHJlbGVh
c2UpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVmKGNvbnN0IF9D
T1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxwZXI+JiBzKQogICAg
IDogX0NPUkJBX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPihzKSB7fQogIGlubGlu
ZSB+X0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9PYmpSZWYoKSB7fQogIGlubGluZSBfQ09SQkFf
VW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPiAmb3BlcmF0b3I9IChj
b25zdCBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPiAm
cykgewogICAgX0NPUkJBX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPjo6b3BlcmF0
b3I9IChzKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKICBpbmxpbmUgdm9pZCByZXBsYWNlKF9D
T1JCQV9VTG9uZyBtYXgsIF9DT1JCQV9VTG9uZyBsZW4sIFQqKiBkYXRhLAogICAgICAgICAgICAg
ICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApIHsKICAgIF9DT1JCQV9TZXF1ZW5j
ZV9PYmpSZWY8VCxFbGVtVCxUX0hlbHBlcj46OnJlcGxhY2UobWF4LGxlbixkYXRhLHJlbGVhc2Up
OwogIH0KfTsKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBFbGVtVCxjbGFzcyBUX0hlbHBl
cixpbnQgbWF4PgpjbGFzcyBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9PYmpSZWYKICA6IHB1Ymxp
YyBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxwZXI+CnsKcHVibGljOgogIGlu
bGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9PYmpSZWYoKSA6CiAgICAgICAgICAgICAgICAg
ICAgICBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxwZXI+KG1heCwxKXt9CiAg
aW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX09ialJlZihfQ09SQkFfVUxvbmcgbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqKnZhbHVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9
IDApCiAgICAgOiBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxwZXI+KG1heCxs
ZW4sdmFsdWUscmVsZWFzZSwxKSB7fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9P
YmpSZWYoY29uc3QgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxw
ZXIsbWF4PiYgcykgOiBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxwZXI+KHMp
IHt9CiAgaW5saW5lIH5fQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9PYmpSZWYoKSB7fQogIGlubGlu
ZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9PYmpSZWY8VCxFbGVtVCxUX0hlbHBlcixtYXg+ICZv
cGVyYXRvcj0gKGNvbnN0IF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRf
SGVscGVyLG1heD4gJnMpIHsKICAgIF9DT1JCQV9TZXF1ZW5jZV9PYmpSZWY8VCxFbGVtVCxUX0hl
bHBlcj46Om9wZXJhdG9yPSAocyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIHZv
aWQgcmVwbGFjZShfQ09SQkFfVUxvbmcgbGVuLCBUKiogZGF0YSwKICAgICAgICAgICAgICAgICAg
ICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKSB7CiAgICBfQ09SQkFfU2VxdWVuY2VfT2Jq
UmVmPFQsRWxlbVQsVF9IZWxwZXI+OjpyZXBsYWNlKG1heCxsZW4sZGF0YSxyZWxlYXNlKTsKICB9
Cn07CgoKdHlwZWRlZiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldCBfQ09SQkFfVW5i
b3VuZGVkX1NlcXVlbmNlX09jdGV0OwojIDE1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIz
L29tbmlJbnRlcm5hbC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvR0lP
UC5oIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL0dJT1AuaCIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9DT1JCQV9zeXNkZXAuaCIgMSAzCiMgNDkgIi91
c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9HSU9QLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9vbW5pT1JCMy9DT1JCQV9iYXNldHlwZXMuaCIgMSAzCiMgNTAgIi91c3IvbG9jYWwvaW5j
bHVkZS9vbW5pT1JCMy9HSU9QLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JC
My9JT1AuaCIgMSAzCiMgNjIgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9JT1AuaCIgMwpj
bGFzcyBJT1AgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfVUxvbmcgUHJvZmlsZUlkOwogIHN0
YXRpYyBjb25zdCBQcm9maWxlSWQgVEFHX0lOVEVSTkVUX0lPUDsKICBzdGF0aWMgY29uc3QgUHJv
ZmlsZUlkIFRBR19NVUxUSVBMRV9DT01QT05FTlRTOwoKICBzdHJ1Y3QgVGFnZ2VkUHJvZmlsZSB7
CiAgICBQcm9maWxlSWQgdGFnOwogICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9PY3RldCBw
cm9maWxlX2RhdGE7CgoKICAgIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxv
ZmZzZXQpIHsKICAgICAgc2l6ZV90IGFsaWduZWRzaXplID0gKChpbml0aWFsb2Zmc2V0KzMpICYg
figoaW50KTMpKQogICAgICAgICAgICAgKyBzaXplb2YoUHJvZmlsZUlkKTsKICAgICAgcmV0dXJu
IHByb2ZpbGVfZGF0YS5fTlBfYWxpZ25lZFNpemUoYWxpZ25lZHNpemUpOwogICAgfQogICAgdm9p
ZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMpOwogICAgdm9pZCBvcGVyYXRvcjw8
PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMpOwogICAgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVy
ZWRTdHJlYW0gJnMpOwogICAgdm9pZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMp
OwogIH07CgogIHR5cGVkZWYgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTxUYWdnZWRQcm9maWxl
PiBUYWdnZWRQcm9maWxlTGlzdDsKCiAgY2xhc3MgVGFnZ2VkUHJvZmlsZUxpc3RfdmFyIHsKICBw
dWJsaWM6CiAgICBUYWdnZWRQcm9maWxlTGlzdF92YXIoKSB7IF9wdHIgPSAwOyB9CiAgICBUYWdn
ZWRQcm9maWxlTGlzdF92YXIoVGFnZ2VkUHJvZmlsZUxpc3QqIHApIHsgX3B0ciA9IHA7IH0KICAg
IFRhZ2dlZFByb2ZpbGVMaXN0X3ZhcihUYWdnZWRQcm9maWxlTGlzdF92YXImIHApOwogICAgflRh
Z2dlZFByb2ZpbGVMaXN0X3ZhcigpIHsgaWYgKF9wdHIpIGRlbGV0ZSBfcHRyOyB9CiAgICBUYWdn
ZWRQcm9maWxlTGlzdF92YXImIG9wZXJhdG9yPSAoY29uc3QgVGFnZ2VkUHJvZmlsZUxpc3RfdmFy
JiBwKSB7CiAgICAgIGlmIChwLl9wdHIpIHsKICAgICAgICBpZiAoIV9wdHIpIHsKICAgICAgICAg
IF9wdHIgPSBuZXcgVGFnZ2VkUHJvZmlsZUxpc3Q7CiAgICAgICAgICBpZiAoIV9wdHIpIHsKICAg
ICAgICAgICAgX0NPUkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwoKICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgICAgKl9wdHIgPSAqcC5fcHRyOwogICAgICB9CiAgICAgIGVsc2Ugewog
ICAgICAgIGlmIChfcHRyKSBkZWxldGUgX3B0cjsKICAgICAgICBfcHRyID0gMDsKICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBUYWdnZWRQcm9maWxlTGlzdF92YXImIG9wZXJh
dG9yPSAoVGFnZ2VkUHJvZmlsZUxpc3QqIHApIHsKICAgICAgaWYgKF9wdHIpIGRlbGV0ZSBfcHRy
OwogICAgICBfcHRyID0gcDsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgVGFnZ2VkUHJv
ZmlsZSYgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25nIGluZGV4KSB7CiAgICAgIHJldHVybiAoX3B0
ci0+TlBfZGF0YSgpKVtpbmRleF07CiAgICB9CiAgICBjb25zdCBUYWdnZWRQcm9maWxlJiBvcGVy
YXRvcltdIChfQ09SQkFfVUxvbmcgaW5kZXgpIGNvbnN0IHsKICAgICAgcmV0dXJuIChfcHRyLT5O
UF9kYXRhKCkpW2luZGV4XTsKICAgIH0KICAgIGlubGluZSBUYWdnZWRQcm9maWxlTGlzdCogb3Bl
cmF0b3ItPigpIGNvbnN0IHsKICAgICAgcmV0dXJuIChUYWdnZWRQcm9maWxlTGlzdCopX3B0cjsK
ICAgIH0KICAgIFRhZ2dlZFByb2ZpbGVMaXN0KiBfcHRyOwogIH07CgogIHN0cnVjdCBJT1Igewog
ICAgX0NPUkJBX0NoYXIgKnR5cGVfaWQ7CiAgICBUYWdnZWRQcm9maWxlTGlzdCBwcm9maWxlczsK
CgogICAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgewogICAg
ICBzaXplX3QgYWxpZ25lZHNpemUgPSAoKGluaXRpYWxvZmZzZXQrMykgJiB+KChpbnQpMykpCiAg
ICAgICAgICAgICArIHNpemVvZihfQ09SQkFfVUxvbmcpOwogICAgICBhbGlnbmVkc2l6ZSArPSBz
dHJsZW4oKGNvbnN0IGNoYXIgKil0eXBlX2lkKSArIDE7CiAgICAgIHJldHVybiBwcm9maWxlcy5f
TlBfYWxpZ25lZFNpemUoYWxpZ25lZHNpemUpOwogICAgfQogIH07CgogIHR5cGVkZWYgX0NPUkJB
X1VMb25nIENvbXBvbmVudElkOwoKICBzdHJ1Y3QgVGFnZ2VkQ29tcG9uZW50IHsKICAgIENvbXBv
bmVudElkIHRhZzsKICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2N0ZXQgY29tcG9uZW50
X2RhdGE7CgoKICAgIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZzZXQp
IHsKICAgICAgc2l6ZV90IGFsaWduZWRzaXplID0gKChpbml0aWFsb2Zmc2V0KzMpICYgfigoaW50
KTMpKQogICAgICAgICAgICAgKyBzaXplb2YoX0NPUkJBX1VMb25nKTsKICAgICAgcmV0dXJuIGNv
bXBvbmVudF9kYXRhLl9OUF9hbGlnbmVkU2l6ZShhbGlnbmVkc2l6ZSk7CiAgICB9CiAgICB2b2lk
IG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmcyk7CiAgICB2b2lkIG9wZXJhdG9yPDw9
IChOZXRCdWZmZXJlZFN0cmVhbSAmcyk7CiAgICB2b2lkIG9wZXJhdG9yPj49IChNZW1CdWZmZXJl
ZFN0cmVhbSAmcyk7CiAgICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmcyk7
CiAgfTsKCiAgdHlwZWRlZiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPFRhZ2dlZENvbXBvbmVu
dD4gTXVsdGlwbGVDb21wb25lbnRQcm9maWxlOwoKICB0eXBlZGVmIF9DT1JCQV9VTG9uZyBTZXJ2
aWNlSUQ7CgogIHN0cnVjdCBTZXJ2aWNlQ29udGV4dCB7CiAgICBTZXJ2aWNlSUQgY29udGV4dF9p
ZDsKICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0IGNvbnRleHRfZGF0YTsKCgog
ICAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgewogICAgICBz
aXplX3QgYWxpZ25lZHNpemUgPSAoKGluaXRpYWxvZmZzZXQrMykgJiB+KChpbnQpMykpCiAgICAg
ICAgICAgICArIHNpemVvZihfQ09SQkFfVUxvbmcpOwogICAgICByZXR1cm4gY29udGV4dF9kYXRh
Ll9OUF9hbGlnbmVkU2l6ZShhbGlnbmVkc2l6ZSk7CiAgICB9CiAgICB2b2lkIG9wZXJhdG9yPj49
IChOZXRCdWZmZXJlZFN0cmVhbSAmcyk7CiAgICB2b2lkIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJl
ZFN0cmVhbSAmcyk7CiAgICB2b2lkIG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSAmcyk7
CiAgICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmcyk7CiAgfTsKCiAgdHlw
ZWRlZiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPFNlcnZpY2VDb250ZXh0PiBTZXJ2aWNlQ29u
dGV4dExpc3Q7CgogIHN0YXRpYyBjb25zdCBTZXJ2aWNlSUQgVHJhbnNhY3Rpb25TZXJ2aWNlOwoK
CgogIHN0YXRpYyBfQ09SQkFfQ2hhciAqIGlvclRvRW5jYXBTdHIoY29uc3QgX0NPUkJBX0NoYXIg
KnR5cGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUYWdn
ZWRQcm9maWxlTGlzdCAqcHJvZmlsZXMpOwoKCgoKICBzdGF0aWMgdm9pZCBFbmNhcFN0clRvSW9y
KGNvbnN0IF9DT1JCQV9DaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09S
QkFfQ2hhciAqJnR5cGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWdnZWRQcm9m
aWxlTGlzdCAqJnByb2ZpbGVzKTsKCgoKCgp9OwojIDUxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21u
aU9SQjMvR0lPUC5oIiAyIDMKCgpjbGFzcyBHSU9QIHsKcHVibGljOgogIGVudW0gTXNnVHlwZSB7
CiAgICBSZXF1ZXN0ID0gMCwKICAgIFJlcGx5ID0gMSwKICAgIENhbmNlbFJlcXVlc3QgPSAyLAog
ICAgTG9jYXRlUmVxdWVzdCA9IDMsCiAgICBMb2NhdGVSZXBseSA9IDQsCiAgICBDbG9zZUNvbm5l
Y3Rpb24gPSA1LAogICAgTWVzc2FnZUVycm9yID0gNgogIH07CgogIHN0cnVjdCBWZXJzaW9uIHsK
ICAgIF9DT1JCQV9DaGFyIG1ham9yOwogICAgX0NPUkJBX0NoYXIgbWlub3I7CiAgfTsKCiAgc3Ry
dWN0IE1lc3NhZ2VIZWFkZXIgewogICAgX0NPUkJBX0NoYXIgbWFnaWMgWzRdOwogICAgVmVyc2lv
biBHSU9QX3ZlcnNpb247CiAgICBfQ09SQkFfQm9vbGVhbiBieXRlX29yZGVyOwogICAgX0NPUkJB
X09jdGV0IG1lc3NhZ2VfdHlwZTsKICAgIF9DT1JCQV9VTG9uZyBtZXNzYWdlX3NpemU7CiAgfTsK
CiAgY2xhc3MgUmVxdWVzdEhlYWRlciB7CiAgcHVibGljOgogICAgSU9QOjpTZXJ2aWNlQ29udGV4
dExpc3Qgc2VydmljZV9jb250ZXh0OwogICAgX0NPUkJBX1VMb25nIHJlcXVlc3RfaWQ7CiAgICBf
Q09SQkFfQm9vbGVhbiByZXNwb25zZV9leHBlY3RlZDsKICAgIF9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2VfX09jdGV0IG9iamVjdF9rZXk7CiAgICBfQ09SQkFfQ2hhciogb3BlcmF0aW9uOwogICAg
X0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQgcmVxdWVzdGluZ19wcmluY2lwYWw7CiAg
fTsKCiAgZW51bSBSZXBseVN0YXR1c1R5cGUgewogICAgTk9fRVhDRVBUSU9OLAogICAgVVNFUl9F
WENFUFRJT04sCiAgICBTWVNURU1fRVhDRVBUSU9OLAogICAgTE9DQVRJT05fRk9SV0FSRAogIH07
CgogIGNsYXNzIFJlcGx5SGVhZGVyIHsKICBwdWJsaWM6CiAgICBJT1A6OlNlcnZpY2VDb250ZXh0
TGlzdCBzZXJ2aWNlX2NvbnRleHQ7CiAgICBfQ09SQkFfVUxvbmcgcmVxdWVzdF9pZDsKICAgIFJl
cGx5U3RhdHVzVHlwZSByZXBseV9zdGF0dXM7CiAgfTsKCiAgc3RydWN0IENhbmNlbFJlcXVlc3RI
ZWFkZXIgewogICAgX0NPUkJBX1VMb25nIHJlcXVlc3RfaWQ7CiAgfTsKCiAgc3RydWN0IExvY2F0
ZVJlcXVlc3RIZWFkZXIgewogIHB1YmxpYzoKICAgIF9DT1JCQV9VTG9uZyByZXF1ZXN0X2lkOwog
ICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQgb2JqZWN0X2tleTsKICB9OwoKICBl
bnVtIExvY2F0ZVN0YXR1c1R5cGUgewogICAgVU5LTk9XTl9PQkpFQ1QsCiAgICBPQkpFQ1RfSEVS
RSwKICAgIE9CSkVDVF9GT1JXQVJECiAgfTsKCiAgc3RydWN0IExvY2F0ZVJlcGx5SGVhZGVyIHsK
ICAgIF9DT1JCQV9VTG9uZyByZXF1ZXN0X2lkOwogICAgTG9jYXRlU3RhdHVzVHlwZSBsb2NhdGVf
c3RhdHVzOwogIH07Cn07CiMgMTUyICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaUlu
dGVybmFsLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9JSU9QLmgiIDEg
MwojIDc2ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvSUlPUC5oIiAzCmNsYXNzIElJT1Ag
ewpwdWJsaWM6CgogIHN0cnVjdCBWZXJzaW9uIHsKICAgIF9DT1JCQV9DaGFyIG1ham9yOwogICAg
X0NPUkJBX0NoYXIgbWlub3I7CiAgfTsKCgogIHN0YXRpYyBjb25zdCBfQ09SQkFfQ2hhciBjdXJy
ZW50X21ham9yOwogIHN0YXRpYyBjb25zdCBfQ09SQkFfQ2hhciBjdXJyZW50X21pbm9yOwoKICBz
dHJ1Y3QgUHJvZmlsZUJvZHkgewogICAgVmVyc2lvbiBpaW9wX3ZlcnNpb247CiAgICBfQ09SQkFf
Q2hhciogaG9zdDsKICAgIF9DT1JCQV9VU2hvcnQgcG9ydDsKICAgIF9DT1JCQV9VbmJvdW5kZWRf
U2VxdWVuY2VfT2N0ZXQgb2JqZWN0X2tleTsKCiAgICB+UHJvZmlsZUJvZHkoKSB7IGlmIChob3N0
KSBkZWxldGUgW10gaG9zdDsgfQogIH07CgogIHN0YXRpYyBjb25zdCBfQ09SQkFfVVNob3J0IERF
RkFVTFRfQ09SQkFMT0NfUE9SVDsKfTsKIyAxNTMgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JC
My9vbW5pSW50ZXJuYWwuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29t
bmlPYmpLZXkuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pT2Jq
S2V5LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDQxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvb21uaU9SQjMvb21uaU9iaktleS5oIiAyIDMKCgpjbGFzcyBNZW1CdWZmZXJlZFN0
cmVhbTsKY2xhc3MgTmV0QnVmZmVyZWRTdHJlYW07CgoKCgoKCmNsYXNzIG9tbmlPYmpLZXkgewpw
dWJsaWM6CiAgaW5saW5lIG9tbmlPYmpLZXkoKSA6IHBkX2tleShwZF9pbmxpbmVfYnVmKSwgcGRf
c2l6ZSgwKSB7fQoKICBpbmxpbmUgb21uaU9iaktleShjb25zdCBfQ09SQkFfT2N0ZXQqIGtleSwg
aW50IHNpemUpCiAgICA6IHBkX2tleShwZF9pbmxpbmVfYnVmKSwgcGRfc2l6ZShzaXplKSB7CiAg
ICBpZiggc2l6ZSA+IDE0ICkgcGRfa2V5ID0gbmV3IF9DT1JCQV9PY3RldFtzaXplXTsKICAgIG1l
bWNweShwZF9rZXksIGtleSwgc2l6ZSk7CiAgfQoKCiAgaW5saW5lIG9tbmlPYmpLZXkoX0NPUkJB
X09jdGV0KiBrZXksIGludCBzaXplKQogICAgOiBwZF9rZXkoa2V5KSwgcGRfc2l6ZShzaXplKSB7
CiAgICBpZiggc2l6ZSA8PSAxNCApIHsKICAgICAgcGRfa2V5ID0gcGRfaW5saW5lX2J1ZjsKICAg
ICAgbWVtY3B5KHBkX2tleSwga2V5LCBzaXplKTsKICAgICAgZGVsZXRlW10ga2V5OwogICAgfQog
IH0KCgogIGlubGluZSBvbW5pT2JqS2V5KG9tbmlPYmpLZXkmIGssIGludCByZWxlYXNlKQogICAg
OiBwZF9zaXplKGsucGRfc2l6ZSkgewogICAgaWYoIHBkX3NpemUgPD0gMTQgKSB7CiAgICAgIHBk
X2tleSA9IHBkX2lubGluZV9idWY7CiAgICB9CiAgICBlbHNlIGlmKCByZWxlYXNlICkgewoKICAg
ICAgcGRfa2V5ID0gay5wZF9rZXk7CiAgICAgIGsucGRfa2V5ID0gay5wZF9pbmxpbmVfYnVmOwog
ICAgICBrLnBkX3NpemUgPSAwOwogICAgICByZXR1cm47CiAgICB9CiAgICBlbHNlIHsKICAgICAg
cGRfa2V5ID0gbmV3IF9DT1JCQV9PY3RldFtwZF9zaXplXTsKICAgIH0KICAgIG1lbWNweShwZF9r
ZXksIGsucGRfa2V5LCBwZF9zaXplKTsKICB9CgoKCgogIGlubGluZSB+b21uaU9iaktleSgpIHsK
ICAgIGlmKCBwZF9rZXkgIT0gcGRfaW5saW5lX2J1ZiApIGRlbGV0ZVtdIHBkX2tleTsKICB9Cgog
IGlubGluZSBjb25zdCBfQ09SQkFfT2N0ZXQqIGtleSgpIGNvbnN0IHsgcmV0dXJuIHBkX2tleTsg
fQogIGlubGluZSBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHBkX3NpemU7IH0KCiAgaW5saW5l
IGludCBpc19lcXVhbChjb25zdCBfQ09SQkFfT2N0ZXQqIGtleSwgaW50IGtleXNpemUpIGNvbnN0
IHsKICAgIHJldHVybiBrZXlzaXplID09IHBkX3NpemUgJiYgIW1lbWNtcChrZXksIHBkX2tleSwg
a2V5c2l6ZSk7CiAgfQoKICBpbmxpbmUgdm9pZCBzZXRfc2l6ZShpbnQgc2l6ZSkgewogICAgaWYo
IHNpemUgPiBwZF9zaXplICYmIHNpemUgPiAxNCApIHsKICAgICAgaWYoIHBkX2tleSAhPSBwZF9p
bmxpbmVfYnVmICkgZGVsZXRlW10gcGRfa2V5OwogICAgICBwZF9rZXkgPSBuZXcgX0NPUkJBX09j
dGV0W3NpemVdOwogICAgfQogICAgcGRfc2l6ZSA9IHNpemU7CiAgfQogIGlubGluZSBfQ09SQkFf
T2N0ZXQqIHdyaXRlX2tleSgpIHsgcmV0dXJuIHBkX2tleTsgfQoKICBpbmxpbmUgdm9pZCBjb3B5
KGNvbnN0IF9DT1JCQV9PY3RldCoga2V5LCBpbnQga2V5c2l6ZSkgewogICAgc2V0X3NpemUoa2V5
c2l6ZSk7CiAgICBtZW1jcHkocGRfa2V5LCBrZXksIGtleXNpemUpOwogIH0KCgoKCgoKCiAgaW5s
aW5lIF9DT1JCQV9PY3RldCogcmV0dXJuX2tleSgpIHsKICAgIGlmKCBwZF9rZXkgIT0gcGRfaW5s
aW5lX2J1ZiApIHsKICAgICAgX0NPUkJBX09jdGV0KiB0bXAgPSBwZF9rZXk7CiAgICAgIHBkX2tl
eSA9IHBkX2lubGluZV9idWY7CiAgICAgIHBkX3NpemUgPSAwOwogICAgICByZXR1cm4gdG1wOwog
ICAgfQogICAgX0NPUkJBX09jdGV0KiB0bXAgPSBuZXcgX0NPUkJBX09jdGV0W3BkX3NpemVdOwog
ICAgbWVtY3B5KHRtcCwgcGRfa2V5LCBwZF9zaXplKTsKICAgIHJldHVybiB0bXA7CiAgfQoKcHJp
dmF0ZToKICBfQ09SQkFfT2N0ZXQgcGRfaW5saW5lX2J1ZlsxNF07CiAgX0NPUkJBX09jdGV0KiBw
ZF9rZXk7CiAgaW50IHBkX3NpemU7Cn07CiMgMTU0ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9S
QjMvb21uaUludGVybmFsLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy90
cmFjZWR0aHJlYWQuaCIgMSAzCiMgNjAgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy90cmFj
ZWR0aHJlYWQuaCIgMwp0eXBlZGVmIG9tbmlfbXV0ZXggb21uaV90cmFjZWRtdXRleDsKdHlwZWRl
ZiBvbW5pX211dGV4X2xvY2sgb21uaV90cmFjZWRtdXRleF9sb2NrOwp0eXBlZGVmIG9tbmlfY29u
ZGl0aW9uIG9tbmlfdHJhY2VkY29uZGl0aW9uOwojIDE0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL29t
bmlPUkIzL3RyYWNlZHRocmVhZC5oIiAzCmNsYXNzIG9tbmlfb3B0aW9uYWxfbG9jayB7CnB1Ymxp
YzoKICBpbmxpbmUgb21uaV9vcHRpb25hbF9sb2NrKG9tbmlfdHJhY2VkbXV0ZXgmIG0sIGludCBs
b2NrZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG9ja2VkX29uX2V4aXQpCiAg
ICA6IHBkX2xvY2tlZChsb2NrZWRfb25fZXhpdCksIHBkX20obSkKICAgIHsgaWYoICFsb2NrZWQg
KSBwZF9tLmxvY2soKTsgfQoKICBpbmxpbmUgfm9tbmlfb3B0aW9uYWxfbG9jaygpIHsgaWYoICFw
ZF9sb2NrZWQgKSBwZF9tLnVubG9jaygpOyB9Cgpwcml2YXRlOgogIG9tbmlfb3B0aW9uYWxfbG9j
ayhjb25zdCBvbW5pX29wdGlvbmFsX2xvY2smKTsKICBvbW5pX29wdGlvbmFsX2xvY2smIG9wZXJh
dG9yID0gKGNvbnN0IG9tbmlfb3B0aW9uYWxfbG9jayYpOwoKICBpbnQgcGRfbG9ja2VkOwogIG9t
bmlfdHJhY2VkbXV0ZXgmIHBkX207Cn07CiMgMTU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9S
QjMvb21uaUludGVybmFsLmgiIDIgMwoKCgpjbGFzcyBSb3BlOwpjbGFzcyBHSU9QX1M7CmNsYXNz
IEdJT1BfQzsKY2xhc3Mgb21uaU9ialJlZjsKY2xhc3Mgb21uaVNlcnZhbnQ7CmNsYXNzIG9tbmlJ
ZGVudGl0eTsKY2xhc3Mgb21uaUxvY2FsSWRlbnRpdHk7CmNsYXNzIG9tbmlPYmpBZGFwdGVyOwpj
bGFzcyBOZXRCdWZmZXJlZFN0cmVhbTsKY2xhc3MgTWVtQnVmZmVyZWRTdHJlYW07CiMgMTc5ICIv
dXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaUludGVybmFsLmgiIDMKZXh0ZXJuIGNvbnN0
IGNoYXIqIG9tbmlPUkJfM18wOwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3Jv
cGUuaCIgMSAzCiMgMTA3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIiAzCmNs
YXNzIFJvcGU7CmNsYXNzIEVuZHBvaW50OwpjbGFzcyBOZXRCdWZmZXJlZFN0cmVhbTsKY2xhc3Mg
U3RyYW5kX2l0ZXJhdG9yOwpjbGFzcyBSb3BlX2l0ZXJhdG9yOwoKY2xhc3MgU3RyYW5kIHsKcHVi
bGljOgoKICBTdHJhbmQoUm9wZSAqcik7CgoKCgoKCgogIHZpcnR1YWwgflN0cmFuZCgpOwoKCgoK
CgoKICB2aXJ0dWFsIHNpemVfdCBNYXhNVFUoKSBjb25zdCA9IDA7CgoKICBzdHJ1Y3Qgc2J1ZiB7
CiAgICB2b2lkICpidWZmZXI7CiAgICBzaXplX3Qgc2l6ZTsKICB9OwoKICB2aXJ0dWFsIHNidWYg
cmVjZWl2ZShzaXplX3Qgc2l6ZSxfQ09SQkFfQm9vbGVhbiBleGFjdGx5LAogICAgICAgICAgICAg
ICAgICAgICAgIGludCBhbGlnbixfQ09SQkFfQm9vbGVhbiBzdGFydE1UVT0wKT0wOwojIDE3OCAi
L3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIgMwogIHZpcnR1YWwgdm9pZCBnaXZl
YmFja19yZWNlaXZlZChzaXplX3QgbGVmdG92ZXIpPTA7CiMgMTkzICIvdXNyL2xvY2FsL2luY2x1
ZGUvb21uaU9SQjMvcm9wZS5oIiAzCiAgdmlydHVhbCBzaXplX3QgbWF4X3JlY2VpdmVfYnVmZmVy
X3NpemUoKT0wOwoKCgoKICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZV9hbmRfY29weShzYnVmIGIsX0NP
UkJBX0Jvb2xlYW4gc3RhcnRNVFU9MCkgPSAwOwojIDIyMyAiL3Vzci9sb2NhbC9pbmNsdWRlL29t
bmlPUkIzL3JvcGUuaCIgMwogIHZpcnR1YWwgdm9pZCBza2lwKHNpemVfdCBzaXplLF9DT1JCQV9C
b29sZWFuIHN0YXJ0TVRVPTApID0gMDsKIyAyNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JC
My9yb3BlLmgiIDMKICB2aXJ0dWFsIHNidWYgcmVzZXJ2ZShzaXplX3Qgc2l6ZSxfQ09SQkFfQm9v
bGVhbiBleGFjdGx5LGludCBhbGlnbiwKICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9v
bGVhbiB0cmFuc21pdD0wLF9DT1JCQV9Cb29sZWFuIGVuZE1UVT0wKT0wOwojIDI3NSAiL3Vzci9s
b2NhbC9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIgMwogIHZpcnR1YWwgc2J1ZiByZXNlcnZlX2Fu
ZF9zdGFydE1UVShzaXplX3Qgc2l6ZSxfQ09SQkFfQm9vbGVhbiBleGFjdGx5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxpZ24sX0NPUkJBX0Jvb2xlYW4gdHJhbnNt
aXQ9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4g
YXRfbW9zdF9vbmNlPTApPTA7CgoKCgogIHZpcnR1YWwgdm9pZCBnaXZlYmFja19yZXNlcnZlZChz
aXplX3QgbGVmdG92ZXIsX0NPUkJBX0Jvb2xlYW4gdHJhbnNtaXQ9MCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gZW5kTVRVPTApPTA7CiMgMzA4ICIvdXNy
L2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIiAzCiAgdmlydHVhbCBzaXplX3QgbWF4X3Jl
c2VydmVfYnVmZmVyX3NpemUoKSA9IDA7CgoKCgogIHZpcnR1YWwgdm9pZCByZXNlcnZlX2FuZF9j
b3B5KHNidWYgYixfQ09SQkFfQm9vbGVhbiB0cmFuc21pdD0wLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIGVuZE1UVT0wKSA9IDA7CiMgMzM4ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIiAzCiAgaW5saW5lIF9DT1JCQV9VTG9uZyBzZXF1
ZW5jZU51bWJlcigpIHsgcmV0dXJuIHBkX3NlcU51bWJlcisrOyB9CiMgMzUwICIvdXNyL2xvY2Fs
L2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIiAzCiAgdm9pZCBzaHV0ZG93bigpOwojIDM2MiAiL3Vz
ci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIgMwogIHZpcnR1YWwgdm9pZCByZWFsX3No
dXRkb3duKCkgPSAwOwojIDM3NCAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIg
MwogIHZvaWQgaW5jclJlZkNvdW50KF9DT1JCQV9Cb29sZWFuIGhlbGRfcm9wZV9tdXRleCA9IDAp
OwojIDM4MyAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIgMwogIHZvaWQgZGVj
clJlZkNvdW50KF9DT1JCQV9Cb29sZWFuIGhlbGRfcm9wZV9tdXRleCA9IDApOwojIDM5MiAiL3Vz
ci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIgMwogIF9DT1JCQV9Cb29sZWFuIGlzX2lk
bGUoX0NPUkJBX0Jvb2xlYW4gaGVsZF9yb3BlX211dGV4ID0gMCk7CiMgNDAzICIvdXNyL2xvY2Fs
L2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIiAzCiAgX0NPUkJBX0Jvb2xlYW4gaXNfdW51c2VkKF9D
T1JCQV9Cb29sZWFuIGhlbGRfcm9wZV9tdXRleCA9IDApOwojIDQxNSAiL3Vzci9sb2NhbC9pbmNs
dWRlL29tbmlPUkIzL3JvcGUuaCIgMwogIGNsYXNzIFN5bmMgewoKICBwdWJsaWM6CiAgICBTeW5j
KFN0cmFuZCAqcyxfQ09SQkFfQm9vbGVhbiBSZExvY2s9MSxfQ09SQkFfQm9vbGVhbiBXckxvY2s9
MSk7CiMgNDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIiAzCiAgICBTeW5j
KFJvcGUgKnIsX0NPUkJBX0Jvb2xlYW4gUmRMb2NrPTEsX0NPUkJBX0Jvb2xlYW4gV3JMb2NrPTEp
OwojIDQ0OSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIgMwogICAgflN5bmMo
KTsKIyA0NjggIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgiIDMKICAgIF9DT1JC
QV9Cb29sZWFuIGlzUmVVc2luZ0V4aXN0aW5nQ29ubmVjdGlvbigpIGNvbnN0OwojIDQ4MSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIgMwogIHByb3RlY3RlZDoKICAgIHZvaWQg
UmRMb2NrKF9DT1JCQV9Cb29sZWFuIGhlbGRfcm9wZV9tdXRleD0wKTsKICAgIHZvaWQgV3JMb2Nr
KF9DT1JCQV9Cb29sZWFuIGhlbGRfcm9wZV9tdXRleD0wKTsKICAgIHZvaWQgUmRVbmxvY2soX0NP
UkJBX0Jvb2xlYW4gaGVsZF9yb3BlX211dGV4PTApOwogICAgdm9pZCBXclVubG9jayhfQ09SQkFf
Qm9vbGVhbiBoZWxkX3JvcGVfbXV0ZXg9MCk7CiMgNTA1ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21u
aU9SQjMvcm9wZS5oIiAzCiAgcHVibGljOgogICAgc3RhdGljIGludCBjbGlja3NEZWNyQW5kR2V0
KFN0cmFuZCpzKTsKIyA1MTUgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgiIDMK
ICAgIHN0YXRpYyBpbnQgY2xpY2tzR2V0KFN0cmFuZCpzKTsKIyA1MjQgIi91c3IvbG9jYWwvaW5j
bHVkZS9vbW5pT1JCMy9yb3BlLmgiIDMKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIGNsaWNrc1NldChp
bnQgY2xpY2tzLCBfQ09SQkFfQm9vbGVhbiBoZWxkX3JvcGVfbXV0ZXg9MCk7CiMgNTM1ICIvdXNy
L2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIiAzCiAgICBpbmxpbmUgU3RyYW5kICpnZXRf
c3RyYW5kKCkgeyByZXR1cm4gcGRfc3RyYW5kOyB9CgoKCiAgICB2b2lkIHNldFN0cmFuZElzRHlp
bmcoKTsKCgoKCiAgICBfQ09SQkFfQm9vbGVhbiBzdHJhbmRJc0R5aW5nKCk7CgoKCgogIHByaXZh
dGU6CiAgICBTdHJhbmQqIGdldExvY2thYmxlU3RyYW5kKFJvcGUqIHJvcGUsIF9DT1JCQV9Cb29s
ZWFuJiBzZWNvbmRIYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9v
bGVhbiByZGxvY2ssIF9DT1JCQV9Cb29sZWFuIHdybG9jayk7CgoKCgoKICAgIFN0cmFuZCogZ2V0
TG9ja2VkU3RyYW5kKFJvcGUqIHJvcGUsIF9DT1JCQV9Cb29sZWFuJiBzZWNvbmRIYW5kLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmRsb2NrLCBfQ09SQkFfQm9v
bGVhbiB3cmxvY2spOwoKCgoKICAgIFN0cmFuZCAqcGRfc3RyYW5kOwogICAgX0NPUkJBX0Jvb2xl
YW4gcGRfc2Vjb25kSGFuZDsKICAgIFN5bmMoKTsKICB9OwoKICBpbmxpbmUgX0NPUkJBX0Jvb2xl
YW4gX3N0cmFuZElzRHlpbmcoKSB7IHJldHVybiBwZF9keWluZzsgfQoKcHJvdGVjdGVkOgoKICBp
bmxpbmUgdm9pZCBfc2V0U3RyYW5kSXNEeWluZygpIHsgcGRfZHlpbmcgPSAxOyB9CiAgaW5saW5l
IF9DT1JCQV9Cb29sZWFuIGlzT3V0Z29pbmcoKTsKCiAgZnJpZW5kIGNsYXNzIFN5bmM7CiAgZnJp
ZW5kIGNsYXNzIFN0cmFuZF9pdGVyYXRvcjsKICBmcmllbmQgY2xhc3MgUm9wZTsKICBmcmllbmQg
Y2xhc3MgUm9wZV9pdGVyYXRvcjsKCnByaXZhdGU6CiAgb21uaV9jb25kaXRpb24gcGRfcmRjb25k
OwogIGludCBwZF9yZF9ud2FpdGluZzsKCiAgb21uaV9jb25kaXRpb24gcGRfd3Jjb25kOwogIGlu
dCBwZF93cl9ud2FpdGluZzsKCiAgaW50IHBkX3VzZUNvdW50OwoKCgogIFN0cmFuZCAqcGRfbmV4
dDsKICBSb3BlICpwZF9yb3BlOwogIF9DT1JCQV9Cb29sZWFuIHBkX2R5aW5nOwogIGludCBwZF9y
ZWZjb3VudDsKICBfQ09SQkFfVUxvbmcgcGRfc2VxTnVtYmVyOwogIGludCBwZF9jbGlja3M7Cgpw
dWJsaWM6CiAgU3RyYW5kICpwZF9yaXBwZXJfbmV4dDsKCgoKICBTdHJhbmQoKTsKICBTdHJhbmQo
Y29uc3QgU3RyYW5kJik7CiAgU3RyYW5kICZvcGVyYXRvcj0oY29uc3QgU3RyYW5kJik7Cn07Cgp0
eXBlZGVmIFN0cmFuZDo6U3luYyBTdHJhbmRfU3luYzsKCmNsYXNzIEVuZHBvaW50IHsKcHVibGlj
OgogIGlubGluZSBFbmRwb2ludChfQ09SQkFfQ2hhciAqcHJvdG9jb2wpIHsKICAgIHBkX3Byb3Rv
Y29sbmFtZSA9IG5ldyBfQ09SQkFfQ2hhciBbc3RybGVuKChjaGFyICopcHJvdG9jb2wpKzFdOwog
ICAgc3RyY3B5KChjaGFyICopcGRfcHJvdG9jb2xuYW1lLChjaGFyICopcHJvdG9jb2wpOwogICAg
cmV0dXJuOwogIH0KCiAgaW5saW5lIEVuZHBvaW50KGNvbnN0IEVuZHBvaW50ICZlKSB7CiAgICBw
ZF9wcm90b2NvbG5hbWUgPSBuZXcgX0NPUkJBX0NoYXIgW3N0cmxlbigoY2hhciAqKWUucGRfcHJv
dG9jb2xuYW1lKSsxXTsKICAgIHN0cmNweSgoY2hhciAqKXBkX3Byb3RvY29sbmFtZSwoY2hhciAq
KWUucGRfcHJvdG9jb2xuYW1lKTsKICAgIHJldHVybjsKICB9CgogIGlubGluZSBFbmRwb2ludCAm
b3BlcmF0b3I9KGNvbnN0IEVuZHBvaW50ICZlKSB7CiAgICBkZWxldGUgW10gcGRfcHJvdG9jb2xu
YW1lOwogICAgcGRfcHJvdG9jb2xuYW1lID0gbmV3IF9DT1JCQV9DaGFyIFtzdHJsZW4oKGNoYXIg
KillLnBkX3Byb3RvY29sbmFtZSkrMV07CiAgICBzdHJjcHkoKGNoYXIgKilwZF9wcm90b2NvbG5h
bWUsKGNoYXIgKillLnBkX3Byb3RvY29sbmFtZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB2
aXJ0dWFsIH5FbmRwb2ludCgpOwoKICBpbmxpbmUgX0NPUkJBX0Jvb2xlYW4gaXNfcHJvdG9jb2wo
Y29uc3QgX0NPUkJBX0NoYXIgKm5hbWUpIGNvbnN0IHsKICAgIGlmIChzdHJjbXAoKGNvbnN0IGNo
YXIgKiluYW1lLChjaGFyICopcGRfcHJvdG9jb2xuYW1lKSA9PSAwKSB7CiAgICAgIHJldHVybiAx
OwogICAgfQogICAgZWxzZSB7CiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgaW5saW5lIF9D
T1JCQV9DaGFyKiBwcm90b2NvbCgpIGNvbnN0IHsKICAgIHJldHVybiBwZF9wcm90b2NvbG5hbWU7
CiAgfQoKcHJpdmF0ZToKICBfQ09SQkFfQ2hhciAqIHBkX3Byb3RvY29sbmFtZTsKICBFbmRwb2lu
dCgpOwp9OwoKY2xhc3MgRW5kcG9pbnRfdmFyIHsKcHVibGljOgogIGlubGluZSBFbmRwb2ludF92
YXIoKSA6IHBkX3AoMCkge30KICBpbmxpbmUgRW5kcG9pbnRfdmFyKEVuZHBvaW50KiBwKSA6IHBk
X3AocCkge30KICBpbmxpbmUgfkVuZHBvaW50X3ZhcigpIHsgaWYgKHBkX3ApIGRlbGV0ZSBwZF9w
OyB9CiAgaW5saW5lIEVuZHBvaW50X3ZhciYgb3BlcmF0b3I9KEVuZHBvaW50KiBwKSB7CiAgICBp
ZiAocGRfcCkgZGVsZXRlIHBkX3A7CiAgICBwZF9wID0gcDsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgaW5saW5lIG9wZXJhdG9yIEVuZHBvaW50KigpIGNvbnN0IHsgcmV0dXJuIHBkX3A7IH0KcHJp
dmF0ZToKICBFbmRwb2ludCogcGRfcDsKICBFbmRwb2ludF92YXImIG9wZXJhdG9yPShjb25zdCBF
bmRwb2ludF92YXImKTsKfTsKCmNsYXNzIFN0cmFuZF9pdGVyYXRvciB7CnB1YmxpYzoKICBTdHJh
bmRfaXRlcmF0b3IoY29uc3QgUm9wZSAqcixfQ09SQkFfQm9vbGVhbiBoZWxkX3JvcGVfbXV0ZXgg
PSAwKTsKIyA2NzggIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgiIDMKICB+U3Ry
YW5kX2l0ZXJhdG9yKCk7CiMgNjg3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5o
IiAzCiAgU3RyYW5kICpvcGVyYXRvcigpICgpOwoKCgoKcHJpdmF0ZToKICBjb25zdCBSb3BlICpw
ZF9yb3BlOwogIF9DT1JCQV9Cb29sZWFuIHBkX2xlYXZlX211dGV4OwogIF9DT1JCQV9Cb29sZWFu
IHBkX2luaXRpYWxpc2VkOwogIFN0cmFuZCAqcGRfczsKICBTdHJhbmRfaXRlcmF0b3IoKTsKfTsK
CmNsYXNzIEFuY2hvciB7CnB1YmxpYzoKICBBbmNob3IoKTsKICB+QW5jaG9yKCk7Cgpwcml2YXRl
OgogIGZyaWVuZCBjbGFzcyBSb3BlOwogIGZyaWVuZCBjbGFzcyBSb3BlX2l0ZXJhdG9yOwoKICBv
bW5pX211dGV4IHBkX2xvY2s7CiAgUm9wZSAqcGRfaGVhZDsKfTsKCgoKY2xhc3MgUm9wZSB7CnB1
YmxpYzoKICBSb3BlKEFuY2hvciAqYSwKICAgICAgIHVuc2lnbmVkIGludCBtYXhTdHJhbmRzKTsK
CgoKCgoKCiAgdmlydHVhbCB+Um9wZSgpOwoKCgoKCgoKICB2aXJ0dWFsIHZvaWQgQ3V0U3RyYW5k
cyhfQ09SQkFfQm9vbGVhbiBoZWxkX3JvcGVfbXV0ZXggPSAwKTsKIyA3NDMgIi91c3IvbG9jYWwv
aW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgiIDMKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIGlzX2lu
Y29taW5nKCkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIGlzX291dGdv
aW5nKCkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIHJlbW90ZV9pcyhF
bmRwb2ludCAqJmUpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiB0aGlzX2lz
KEVuZHBvaW50IComZSkgPSAwOwoKCgoKCgogIHZvaWQgaW5jclJlZkNvdW50KF9DT1JCQV9Cb29s
ZWFuIGhlbGRfYW5jaG9yX211dGV4ID0gMCk7CiMgNzc3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21u
aU9SQjMvcm9wZS5oIiAzCiAgdm9pZCBkZWNyUmVmQ291bnQoX0NPUkJBX0Jvb2xlYW4gaGVsZF9h
bmNob3JfbXV0ZXggPSAwKTsKIyA3ODYgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9yb3Bl
LmgiIDMKICBfQ09SQkFfQm9vbGVhbiBpc19pZGxlKF9DT1JCQV9Cb29sZWFuIGhlbGRfYW5jaG9y
X211dGV4ID0gMCk7CiMgNzk2ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIiAz
CiAgaW5saW5lIEFuY2hvciogYW5jaG9yKCkgY29uc3QgeyByZXR1cm4gcGRfYW5jaG9yOyB9Cgog
IGZyaWVuZCBjbGFzcyBTdHJhbmQ7CiAgZnJpZW5kIGNsYXNzIFN0cmFuZF9pdGVyYXRvcjsKICBm
cmllbmQgY2xhc3MgUm9wZV9pdGVyYXRvcjsKICBmcmllbmQgY2xhc3MgU3RyYW5kOjpTeW5jOwoK
cHJvdGVjdGVkOgoKICBvbW5pX211dGV4IHBkX2xvY2s7CiAgb21uaV9jb25kaXRpb24gcGRfY29u
ZDsKICBpbnQgcGRfY29uZF9jb3VudGVyOwoKICB2aXJ0dWFsIFN0cmFuZCogZ2V0U3RyYW5kKF9D
T1JCQV9Cb29sZWFuJiBzZWNvbmRIYW5kKTsKIyA4MjkgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5p
T1JCMy9yb3BlLmgiIDMKICB2aXJ0dWFsIFN0cmFuZCAqbmV3U3RyYW5kKCkgPSAwOwojIDg1MyAi
L3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIgMwpwcml2YXRlOgoKCiAgdW5zaWdu
ZWQgaW50IHBkX21heFN0cmFuZHM7CgogIFN0cmFuZCAqcGRfaGVhZDsKICBSb3BlICpwZF9uZXh0
OwogIEFuY2hvciAqcGRfYW5jaG9yOwogIGludCBwZF9yZWZjb3VudDsKCiAgUm9wZSgpOwp9OwoK
Y2xhc3MgUm9wZV92YXIgewpwdWJsaWM6CiAgaW5saW5lIFJvcGVfdmFyKCkgOiBfcHRyKDApIHt9
CgogIGlubGluZSBSb3BlX3ZhcihSb3BlKiBwKSB7IF9wdHIgPSBwOyB9CgogIGlubGluZSB+Um9w
ZV92YXIoKSB7CiAgICBpZiAoX3B0cikKICAgICAgX3B0ci0+ZGVjclJlZkNvdW50KCk7CiAgfQoK
ICBpbmxpbmUgUm9wZV92YXIoY29uc3QgUm9wZV92YXImIHApIHsKICAgIGlmIChwLl9wdHIpIHsK
ICAgICAgcC5fcHRyLT5pbmNyUmVmQ291bnQoKTsKICAgIH0KICAgIF9wdHIgPSBwLl9wdHI7CiAg
fQoKICBpbmxpbmUgUm9wZV92YXImIG9wZXJhdG9yPSAoY29uc3QgUm9wZV92YXImIHApIHsKICAg
IGlmIChfcHRyKSB7CiAgICAgIF9wdHItPmRlY3JSZWZDb3VudCgpOwogICAgICBfcHRyID0gMDsK
ICAgIH0KICAgIGlmIChwLl9wdHIpIHsKICAgICAgcC5fcHRyLT5pbmNyUmVmQ291bnQoKTsKICAg
IH0KICAgIF9wdHIgPSBwLl9wdHI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgUm9w
ZV92YXImIG9wZXJhdG9yPSAoUm9wZSogcCkgewogICAgaWYgKF9wdHIpIHsKICAgICAgX3B0ci0+
ZGVjclJlZkNvdW50KCk7CiAgICAgIF9wdHIgPSAwOwogICAgfQogICAgX3B0ciA9IHA7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgUm9wZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuIF9wdHI7IH0KCiAgaW5saW5lIG9wZXJhdG9yIFJvcGUqKCkgY29uc3QgeyByZXR1cm4gX3B0
cjsgfQoKICBSb3BlKiBfcHRyOwp9OwoKY2xhc3Mgcm9wZUZhY3Rvcnk7CgpjbGFzcyBSb3BlX2l0
ZXJhdG9yIHsKcHVibGljOgogIFJvcGVfaXRlcmF0b3IoY29uc3QgQW5jaG9yICphKTsKCgoKCgoK
CiAgUm9wZV9pdGVyYXRvcihyb3BlRmFjdG9yeSogcmYpOwojIDkzMyAiL3Vzci9sb2NhbC9pbmNs
dWRlL29tbmlPUkIzL3JvcGUuaCIgMwogIH5Sb3BlX2l0ZXJhdG9yKCk7CgoKCgoKCgogIFJvcGUg
Km9wZXJhdG9yKCkgKCk7Cgpwcml2YXRlOgogIGNvbnN0IEFuY2hvciAqcGRfYW5jaG9yOwogIFJv
cGUgKnBkX3I7CiAgUm9wZV9pdGVyYXRvcigpOwp9OwoKCmlubGluZQpfQ09SQkFfQm9vbGVhbgpT
dHJhbmQ6OmlzT3V0Z29pbmcoKSB7CiAgcmV0dXJuIHBkX3JvcGUtPmlzX291dGdvaW5nKCk7Cn0K
IyAxODMgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50ZXJuYWwuaCIgMiAzCgoK
CgoKCmNsYXNzIG9tbmkgewoKcHVibGljOgoKCiAgdHlwZWRlZiBsb25nIHB0cl9hcml0aF90OwoK
CgoKCgogIGVudW0gYWxpZ25tZW50X3QgeyBBTElHTl8xID0gMSwgQUxJR05fMiA9IDIsIEFMSUdO
XzQgPSA0LCBBTElHTl84ID0gOCB9OwoKCiAgc3RhdGljIGNvbnN0IF9DT1JCQV9DaGFyIG15Qnl0
ZU9yZGVyOwogIHN0YXRpYyBvbW5pX3RyYWNlZG11dGV4KiBpbnRlcm5hbExvY2s7CiAgc3RhdGlj
IG9tbmlfdHJhY2VkbXV0ZXgqIG9ianJlZl9yY19sb2NrOwoKICBzdGF0aWMgb21uaV90cmFjZWRt
dXRleCogcG9SY0xvY2s7CgoKICBzdGF0aWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0
ZXQgbXlQcmluY2lwYWxJRDsKICBzdGF0aWMgY29uc3QgYWxpZ25tZW50X3QgbWF4X2FsaWdubWVu
dDsKCgogIHN0YXRpYyBjb25zdCBjaGFyKmNvbnN0IGVtcHR5X3N0cmluZzsKCgoKICBzdGF0aWMg
aW50IHJlbW90ZUludm9jYXRpb25Db3VudDsKICBzdGF0aWMgaW50IGxvY2FsSW52b2NhdGlvbkNv
dW50OwoKCgoKCiAgc3RhdGljIGlubGluZSBwdHJfYXJpdGhfdCBhbGlnbl90byhwdHJfYXJpdGhf
dCBwLCBhbGlnbm1lbnRfdCBhbGlnbikgewogICAgcmV0dXJuIChwICsgKChpbnQpIGFsaWduIC0g
MSkpICYgfigoaW50KSBhbGlnbiAtIDEpOwogIH0KCiAgc3RhdGljIF9DT1JCQV9VTG9uZyBoYXNo
KGNvbnN0IF9DT1JCQV9PY3RldCoga2V5LCBpbnQga2V5c2l6ZSk7CgoKCiAgc3RhdGljIGlubGlu
ZSBjaGFyKiBhbGxvY1N0cmluZyhpbnQgbGVuKSB7IHJldHVybiBuZXcgY2hhcltsZW4gKyAxXTsg
fQoKCgoKICBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZVN0cmluZyhjaGFyKiBzKSB7CiAgICBpZiAo
cyAmJiBzICE9IGVtcHR5X3N0cmluZykgZGVsZXRlW10gczsKICB9CgoKICBzdGF0aWMgb21uaV90
cmFjZWRtdXRleCYgbmlsUmVmTG9jaygpOwoKCgoKICBzdGF0aWMgdm9pZCBkdXBsaWNhdGVPYmpS
ZWYob21uaU9ialJlZiopOwoKCiAgc3RhdGljIHZvaWQgcmVsZWFzZU9ialJlZihvbW5pT2JqUmVm
Kik7CgoKICBzdGF0aWMgb21uaVNlcnZhbnQqIG9ialJlZlRvU2VydmFudChvbW5pT2JqUmVmKiBv
YmopOwoKCgoKCgogIHN0YXRpYyBvbW5pTG9jYWxJZGVudGl0eSogbG9jYXRlSWRlbnRpdHkoY29u
c3QgX0NPUkJBX09jdGV0KiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQga2V5c2l6ZSwgX0NPUkJBX1VMb25nIGhhc2gsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBjcmVhdGVfZHVtbXkgPSAw
KTsKCgoKCgoKICBzdGF0aWMgb21uaUxvY2FsSWRlbnRpdHkqIGFjdGl2YXRlT2JqZWN0KG9tbmlT
ZXJ2YW50KiBzZXJ2YW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb21uaU9iakFkYXB0ZXIqIGFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvbW5pT2JqS2V5JiBrZXkpOwojIDI4MyAiL3Vzci9sb2NhbC9pbmNsdWRl
L29tbmlPUkIzL29tbmlJbnRlcm5hbC5oIiAzCiAgc3RhdGljIG9tbmlMb2NhbElkZW50aXR5KiBk
ZWFjdGl2YXRlT2JqZWN0KGNvbnN0IF9DT1JCQV9PY3RldCoga2V5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5c2l6ZSk7CiMgMzAyICIvdXNyL2xv
Y2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaUludGVybmFsLmgiIDMKICBzdGF0aWMgb21uaU9ialJl
ZiogY3JlYXRlT2JqUmVmKGNvbnN0IGNoYXIqIG1vc3REZXJpdmVkUmVwb0lkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGFyZ2V0UmVwb0lkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCogcHJvZmls
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxl
YXNlX3Byb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jv
b2xlYW4gbG9ja2VkKTsKCgoKCgoKCiAgc3RhdGljIG9tbmlPYmpSZWYqIGNyZWF0ZU9ialJlZihj
b25zdCBjaGFyKiBtb3N0RGVyaXZlZFJlcG9JZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldFJlcG9JZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9tbmlMb2NhbElkZW50aXR5KiBpZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqIHByb2ZpbGVzID0gMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2VfcHJvZmlsZXMg
PSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX09jdGV0KiBrZXkg
PSAwKTsKIyAzMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50ZXJuYWwuaCIg
MwogIHN0YXRpYyB2b2lkIHJldmVydFRvT3JpZ2luYWxQcm9maWxlKG9tbmlPYmpSZWYqIG9ianJl
Zik7CgoKCgoKCgogIHN0YXRpYyB2b2lkIGxvY2F0aW9uRm9yd2FyZChvbW5pT2JqUmVmKiBvYmos
IG9tbmlPYmpSZWYqIG5ld19sb2NhdGlvbik7CiMgMzQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21u
aU9SQjMvb21uaUludGVybmFsLmgiIDMKICBzdGF0aWMgdm9pZCBhc3NlcnRGYWlsKGNvbnN0IGNo
YXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBleHApOwogIHN0YXRpYyB2b2lkIHVjaGVj
a0ZhaWwoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGV4cCk7Cgp9OwoK
CgoKCmNsYXNzIG9tbmlSb3BlQW5kS2V5IHsKcHVibGljOgogIGlubGluZSBvbW5pUm9wZUFuZEtl
eShSb3BlKiByLCBjb25zdCBfQ09SQkFfT2N0ZXQqIGssIGludCBrc2l6ZSkKICAgIDogcGRfcm9w
ZShyKSwgcGRfa2V5KGssIGtzaXplKQogICAgeyByLT5pbmNyUmVmQ291bnQoKTsgfQoKICBpbmxp
bmUgb21uaVJvcGVBbmRLZXkoKSA6IHBkX3JvcGUoMCkge30KCiAgaW5saW5lIH5vbW5pUm9wZUFu
ZEtleSgpIHsgaWYoIHBkX3JvcGUgKSBwZF9yb3BlLT5kZWNyUmVmQ291bnQoKTsgfQoKICBpbmxp
bmUgUm9wZSogcm9wZSgpIGNvbnN0IHsgcmV0dXJuIHBkX3JvcGU7IH0KICBpbmxpbmUgY29uc3Qg
X0NPUkJBX09jdGV0KiBrZXkoKSBjb25zdCB7CiAgICByZXR1cm4gcGRfa2V5LmtleSgpOwogIH0K
ICBpbmxpbmUgX0NPUkJBX1VMb25nIGtleXNpemUoKSBjb25zdCB7IHJldHVybiBwZF9rZXkuc2l6
ZSgpOyB9CgogIGlubGluZSB2b2lkIHJvcGUoUm9wZSogcikgeyBwZF9yb3BlID0gcjsgci0+aW5j
clJlZkNvdW50KCk7IH0KICBpbmxpbmUgdm9pZCBrZXkoY29uc3QgX0NPUkJBX09jdGV0KiBrLCBp
bnQga3NpemUpIHsgcGRfa2V5LmNvcHkoaywga3NpemUpOyB9Cgpwcml2YXRlOgogIG9tbmlSb3Bl
QW5kS2V5JiBvcGVyYXRvcj0oY29uc3Qgb21uaVJvcGVBbmRLZXkmKTsKICBvbW5pUm9wZUFuZEtl
eShjb25zdCBvbW5pUm9wZUFuZEtleSYpOwoKCiAgUm9wZSogcGRfcm9wZTsKICBvbW5pT2JqS2V5
IHBkX2tleTsKfTsKIyA0MDcgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50ZXJu
YWwuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9idWZmZXJlZFN0cmVhbS5o
IiAxIDMKIyAxNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9idWZmZXJlZFN0cmVhbS5o
IiAzCmNsYXNzIE5ldEJ1ZmZlcmVkU3RyZWFtIDogcHVibGljIFN0cmFuZF9TeW5jIHsKcHVibGlj
OgogIE5ldEJ1ZmZlcmVkU3RyZWFtKFN0cmFuZCAqcywKICAgICAgICAgICAgICAgICAgICBfQ09S
QkFfQm9vbGVhbiBSZExvY2s9MSwKICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBX
ckxvY2s9MSwKICAgICAgICAgICAgICAgICAgICBzaXplX3QgQnVmc2l6ZT0wKTsKICBOZXRCdWZm
ZXJlZFN0cmVhbShSb3BlICpyLAogICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIFJk
TG9jaz0xLAogICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIFdyTG9jaz0xLAogICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBCdWZzaXplPTApOwogIH5OZXRCdWZmZXJlZFN0cmVhbSgp
OwoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9DaGFyIGEsIE5ldEJ1
ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9DaGFyICpwID0gKF9DT1JCQV9DaGFyICop
IChzKS5hbGlnbl9hbmRfcHV0X2J5dGVzKG9tbmk6OkFMSUdOXzEsc2l6ZW9mKF9DT1JCQV9DaGFy
KSk7ICpwID0gYTsgfTsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoX0NP
UkJBX0NoYXImIGEsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9DaGFyICpw
ID0gKF9DT1JCQV9DaGFyICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzEs
c2l6ZW9mKF9DT1JCQV9DaGFyKSk7IGEgPSAqcDsgfTsKICB9CgoKCiAgZnJpZW5kIGlubGluZSB2
b2lkIG9wZXJhdG9yPj49IChfQ09SQkFfQm9vbGVhbiBiLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykg
ewogICAgX0NPUkJBX0NoYXIgYyA9IGIgPyAxIDogMDsKICAgIHsgX0NPUkJBX0NoYXIgKnAgPSAo
X0NPUkJBX0NoYXIgKikgKHMpLmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fMSxzaXpl
b2YoX0NPUkJBX0NoYXIpKTsgKnAgPSBjOyB9OwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9w
ZXJhdG9yPDw9IChfQ09SQkFfQm9vbGVhbiYgYiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAg
IF9DT1JCQV9DaGFyIGM7CiAgICB7IF9DT1JCQV9DaGFyICpwID0gKF9DT1JCQV9DaGFyICopIChz
KS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzEsc2l6ZW9mKF9DT1JCQV9DaGFyKSk7
IGMgPSAqcDsgfTsKICAgIGIgPSBjID8gdHJ1ZSA6IGZhbHNlOwogIH0KCgoKICBmcmllbmQgaW5s
aW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9TaG9ydCBhLCBOZXRCdWZmZXJlZFN0cmVhbSYg
cykgewogICAgeyBfQ09SQkFfU2hvcnQgKnAgPSAoX0NPUkJBX1Nob3J0ICopIChzKS5hbGlnbl9h
bmRfcHV0X2J5dGVzKG9tbmk6OkFMSUdOXzIsc2l6ZW9mKF9DT1JCQV9TaG9ydCkpOyAqcCA9IGE7
IH07CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9TaG9ydCYg
YSwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIGlmIChzLlJkTWVzc2FnZUJ5dGVPcmRlcigp
ICE9IG9tbmk6Om15Qnl0ZU9yZGVyKSB7CiAgICAgIF9DT1JCQV9TaG9ydCB0OwogICAgICB7IF9D
T1JCQV9TaG9ydCAqcCA9IChfQ09SQkFfU2hvcnQgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0ZXMo
b21uaTo6QUxJR05fMixzaXplb2YoX0NPUkJBX1Nob3J0KSk7IHQgPSAqcDsgfTsKICAgICAgYSA9
ICgoKCh0KSAmIDB4ZmYpIDw8IDgpIHwgKCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICB9CiAgICBl
bHNlIHsKICAgICAgeyBfQ09SQkFfU2hvcnQgKnAgPSAoX0NPUkJBX1Nob3J0ICopIChzKS5hbGln
bl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzIsc2l6ZW9mKF9DT1JCQV9TaG9ydCkpOyBhID0g
KnA7IH07CiAgICB9CiAgICByZXR1cm47CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0
b3I+Pj0gKF9DT1JCQV9VU2hvcnQgYSwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIHsgX0NP
UkJBX1VTaG9ydCAqcCA9IChfQ09SQkFfVVNob3J0ICopIChzKS5hbGlnbl9hbmRfcHV0X2J5dGVz
KG9tbmk6OkFMSUdOXzIsc2l6ZW9mKF9DT1JCQV9VU2hvcnQpKTsgKnAgPSBhOyB9OwogIH0KCiAg
ZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChfQ09SQkFfVVNob3J0JiBhLCBOZXRCdWZm
ZXJlZFN0cmVhbSYgcykgewogICAgaWYgKHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6
bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX1VTaG9ydCB0OwogICAgICB7IF9DT1JCQV9VU2hv
cnQgKnAgPSAoX0NPUkJBX1VTaG9ydCAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpB
TElHTl8yLHNpemVvZihfQ09SQkFfVVNob3J0KSk7IHQgPSAqcDsgfTsKICAgICAgYSA9ICgoKCh0
KSAmIDB4ZmYpIDw8IDgpIHwgKCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICB9CiAgICBlbHNlIHsK
ICAgICAgeyBfQ09SQkFfVVNob3J0ICpwID0gKF9DT1JCQV9VU2hvcnQgKikgKHMpLmFsaWduX2Fu
ZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fMixzaXplb2YoX0NPUkJBX1VTaG9ydCkpOyBhID0gKnA7
IH07CiAgICB9CiAgICByZXR1cm47CiAgfQoKCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9y
Pj49IChfQ09SQkFfTG9uZyBhLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgeyBfQ09SQkFf
TG9uZyAqcCA9IChfQ09SQkFfTG9uZyAqKSAocykuYWxpZ25fYW5kX3B1dF9ieXRlcyhvbW5pOjpB
TElHTl80LHNpemVvZihfQ09SQkFfTG9uZykpOyAqcCA9IGE7IH07CiAgfQoKICBmcmllbmQgaW5s
aW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9Mb25nJiBhLCBOZXRCdWZmZXJlZFN0cmVhbSYg
cykgewogICAgaWYgKHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIp
IHsKICAgICAgX0NPUkJBX0xvbmcgdDsKICAgICAgeyBfQ09SQkFfTG9uZyAqcCA9IChfQ09SQkFf
TG9uZyAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl80LHNpemVvZihfQ09S
QkFfTG9uZykpOyB0ID0gKnA7IH07CiAgICAgIGEgPSAoKCgodCkgJiAweGZmMDAwMDAwKSA+PiAy
NCkgfCAoKCh0KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodCkgJiAweDAwMDBmZjAwKSA8PCA4
KSB8ICgoKHQpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgIH0KICAgIGVsc2UgewogICAgICB7
IF9DT1JCQV9Mb25nICpwID0gKF9DT1JCQV9Mb25nICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVz
KG9tbmk6OkFMSUdOXzQsc2l6ZW9mKF9DT1JCQV9Mb25nKSk7IGEgPSAqcDsgfTsKICAgIH0KICAg
IHJldHVybjsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoX0NPUkJBX1VM
b25nIGEsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9VTG9uZyAqcCA9IChf
Q09SQkFfVUxvbmcgKikgKHMpLmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fNCxzaXpl
b2YoX0NPUkJBX1VMb25nKSk7ICpwID0gYTsgfTsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBv
cGVyYXRvcjw8PSAoX0NPUkJBX1VMb25nJiBhLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAg
aWYgKHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAgICAg
X0NPUkJBX1VMb25nIHQ7CiAgICAgIHsgX0NPUkJBX1VMb25nICpwID0gKF9DT1JCQV9VTG9uZyAq
KSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl80LHNpemVvZihfQ09SQkFfVUxv
bmcpKTsgdCA9ICpwOyB9OwogICAgICBhID0gKCgoKHQpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwg
KCgodCkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHQpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAo
KCh0KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgeyBfQ09S
QkFfVUxvbmcgKnAgPSAoX0NPUkJBX1VMb25nICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9t
bmk6OkFMSUdOXzQsc2l6ZW9mKF9DT1JCQV9VTG9uZykpOyBhID0gKnA7IH07CiAgICB9CiAgICBy
ZXR1cm47CiAgfQoKCgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoX0NPUkJBX0xv
bmdMb25nIGEsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9Mb25nTG9uZyAq
cCA9IChfQ09SQkFfTG9uZ0xvbmcgKikgKHMpLmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJ
R05fOCxzaXplb2YoX0NPUkJBX0xvbmdMb25nKSk7ICpwID0gYTsgfTsKICB9CgogIGZyaWVuZCBp
bmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoX0NPUkJBX0xvbmdMb25nJiBhLCBOZXRCdWZmZXJlZFN0
cmVhbSYgcykgewogICAgaWYgKHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRl
T3JkZXIpIHsKICAgICAgX0NPUkJBX0xvbmdMb25nIHQ7CiAgICAgIHsgX0NPUkJBX0xvbmdMb25n
ICpwID0gKF9DT1JCQV9Mb25nTG9uZyAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpB
TElHTl84LHNpemVvZihfQ09SQkFfTG9uZ0xvbmcpKTsgdCA9ICpwOyB9OwogICAgICBhID0gKCgo
KHQpICYgKDB4ZmYwMDAwMDAwMDAwMDAwMExMKSkgPj4gNTYpIHwgKCgodCkgJiAoMHgwMGZmMDAw
MDAwMDAwMDAwTEwpKSA+PiA0MCkgfCAoKCh0KSAmICgweDAwMDBmZjAwMDAwMDAwMDBMTCkpID4+
IDI0KSB8ICgoKHQpICYgKDB4MDAwMDAwZmYwMDAwMDAwMExMKSkgPj4gOCkgfCAoKCh0KSAmICgw
eDAwMDAwMDAwZmYwMDAwMDBMTCkpIDw8IDgpIHwgKCgodCkgJiAoMHgwMDAwMDAwMDAwZmYwMDAw
TEwpKSA8PCAyNCkgfCAoKCh0KSAmICgweDAwMDAwMDAwMDAwMGZmMDBMTCkpIDw8IDQwKSB8ICgo
KHQpICYgKDB4MDAwMDAwMDAwMDAwMDBmZkxMKSkgPDwgNTYpKTsKICAgIH0KICAgIGVsc2Ugewog
ICAgICB7IF9DT1JCQV9Mb25nTG9uZyAqcCA9IChfQ09SQkFfTG9uZ0xvbmcgKikgKHMpLmFsaWdu
X2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fOCxzaXplb2YoX0NPUkJBX0xvbmdMb25nKSk7IGEg
PSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVy
YXRvcj4+PSAoX0NPUkJBX1VMb25nTG9uZyBhLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAg
eyBfQ09SQkFfVUxvbmdMb25nICpwID0gKF9DT1JCQV9VTG9uZ0xvbmcgKikgKHMpLmFsaWduX2Fu
ZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fOCxzaXplb2YoX0NPUkJBX1VMb25nTG9uZykpOyAqcCA9
IGE7IH07CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9VTG9u
Z0xvbmcmIGEsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBpZiAocy5SZE1lc3NhZ2VCeXRl
T3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlcikgewogICAgICBfQ09SQkFfVUxvbmdMb25nIHQ7
CiAgICAgIHsgX0NPUkJBX1VMb25nTG9uZyAqcCA9IChfQ09SQkFfVUxvbmdMb25nICopIChzKS5h
bGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzgsc2l6ZW9mKF9DT1JCQV9VTG9uZ0xvbmcp
KTsgdCA9ICpwOyB9OwogICAgICBhID0gKCgoKHQpICYgKDB4ZmYwMDAwMDAwMDAwMDAwMExMKSkg
Pj4gNTYpIHwgKCgodCkgJiAoMHgwMGZmMDAwMDAwMDAwMDAwTEwpKSA+PiA0MCkgfCAoKCh0KSAm
ICgweDAwMDBmZjAwMDAwMDAwMDBMTCkpID4+IDI0KSB8ICgoKHQpICYgKDB4MDAwMDAwZmYwMDAw
MDAwMExMKSkgPj4gOCkgfCAoKCh0KSAmICgweDAwMDAwMDAwZmYwMDAwMDBMTCkpIDw8IDgpIHwg
KCgodCkgJiAoMHgwMDAwMDAwMDAwZmYwMDAwTEwpKSA8PCAyNCkgfCAoKCh0KSAmICgweDAwMDAw
MDAwMDAwMGZmMDBMTCkpIDw8IDQwKSB8ICgoKHQpICYgKDB4MDAwMDAwMDAwMDAwMDBmZkxMKSkg
PDwgNTYpKTsKICAgIH0KICAgIGVsc2UgewogICAgICB7IF9DT1JCQV9VTG9uZ0xvbmcgKnAgPSAo
X0NPUkJBX1VMb25nTG9uZyAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl84
LHNpemVvZihfQ09SQkFfVUxvbmdMb25nKSk7IGEgPSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsK
ICB9CgoKCgoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9GbG9hdCBh
LCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgeyBfQ09SQkFfRmxvYXQgKnAgPSAoX0NPUkJB
X0Zsb2F0ICopIChzKS5hbGlnbl9hbmRfcHV0X2J5dGVzKG9tbmk6OkFMSUdOXzQsc2l6ZW9mKF9D
T1JCQV9GbG9hdCkpOyAqcCA9IGE7IH07CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0
b3I8PD0gKF9DT1JCQV9GbG9hdCYgYSwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIGlmIChz
LlJkTWVzc2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyKSB7CiAgICAgIF9DT1JC
QV9GbG9hdCB0OwogICAgICB7IF9DT1JCQV9GbG9hdCAqcCA9IChfQ09SQkFfRmxvYXQgKikgKHMp
LmFsaWduX2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fNCxzaXplb2YoX0NPUkJBX0Zsb2F0KSk7
IHQgPSAqcDsgfTsKICAgICAgX0NPUkJBX1VMb25nIHRsMSA9ICooKF9DT1JCQV9VTG9uZyAqKSZ0
KTsKICAgICAgX0NPUkJBX1VMb25nIHRsMiA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQp
IHwgKCgodGwxKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDApIDw8
IDgpIHwgKCgodGwxKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIGEgPSAqKChfQ09SQkFf
RmxvYXQgKikgJnRsMik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgeyBfQ09SQkFfRmxvYXQgKnAg
PSAoX0NPUkJBX0Zsb2F0ICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzQs
c2l6ZW9mKF9DT1JCQV9GbG9hdCkpOyBhID0gKnA7IH07CiAgICB9CiAgICByZXR1cm47CiAgfQoK
ICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9Eb3VibGUgYSwgTmV0QnVm
ZmVyZWRTdHJlYW0mIHMpIHsKICAgIHsgX0NPUkJBX0RvdWJsZSAqcCA9IChfQ09SQkFfRG91Ymxl
ICopIChzKS5hbGlnbl9hbmRfcHV0X2J5dGVzKG9tbmk6OkFMSUdOXzgsc2l6ZW9mKF9DT1JCQV9E
b3VibGUpKTsgKnAgPSBhOyB9OwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9
IChfQ09SQkFfRG91YmxlJiBhLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgaWYgKHMuUmRN
ZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX0Rv
dWJsZSB0OwogICAgICB7IF9DT1JCQV9Eb3VibGUgKnAgPSAoX0NPUkJBX0RvdWJsZSAqKSAocyku
YWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl84LHNpemVvZihfQ09SQkFfRG91YmxlKSk7
IHQgPSAqcDsgfTsKICAgICAgX0NPUkJBX1VMb25nIHRsMSA9ICgoX0NPUkJBX1VMb25nICopJnQp
WzFdOwogICAgICBfQ09SQkFfVUxvbmcgdGwyID0gKCgoKHRsMSkgJiAweGZmMDAwMDAwKSA+PiAy
NCkgfCAoKCh0bDEpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0bDEpICYgMHgwMDAwZmYwMCkg
PDwgOCkgfCAoKCh0bDEpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAgKChfQ09SQkFfVUxv
bmcgKikmYSlbMF0gPSB0bDI7CiAgICAgIHRsMSA9ICgoX0NPUkJBX1VMb25nICopJnQpWzBdOwog
ICAgICB0bDIgPSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAw
ZmYwMDAwKSA+PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAw
eDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICAoKF9DT1JCQV9VTG9uZyAqKSZhKVsxXSA9IHRsMjsK
ICAgIH0KICAgIGVsc2UgewogICAgICB7IF9DT1JCQV9Eb3VibGUgKnAgPSAoX0NPUkJBX0RvdWJs
ZSAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl84LHNpemVvZihfQ09SQkFf
RG91YmxlKSk7IGEgPSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgoKCgoKCgogIHZvaWQg
cHV0X2NoYXJfYXJyYXkoY29uc3QgX0NPUkJBX0NoYXIqIGIsIGludCBzaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIG9tbmk6OmFsaWdubWVudF90IGFsaWduPW9tbmk6OkFMSUdOXzEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gc3RhcnRNVFU9MCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBhdF9tb3N0X29uY2U9MCk7CgoKCgoK
ICB2b2lkIGdldF9jaGFyX2FycmF5KF9DT1JCQV9DaGFyKiBiLGludCBzaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIG9tbmk6OmFsaWdubWVudF90IGFsaWduPW9tbmk6OkFMSUdOXzEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gc3RhcnRNVFU9MCk7CgoKCgoK
ICB2b2lkIHNraXAoX0NPUkJBX1VMb25nIHNpemUsX0NPUkJBX0Jvb2xlYW4gc3RhcnRNVFU9MCk7
CgoKCgogIHZvaWQgZmx1c2goX0NPUkJBX0Jvb2xlYW4gZW5kTVRVPTApOwoKCgogIHZvaWQgY29w
eV9mcm9tKE1lbUJ1ZmZlcmVkU3RyZWFtJiwgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAg
b21uaTo6YWxpZ25tZW50X3QgYWxpZ249b21uaTo6QUxJR05fMSk7CiMgNDA1ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvb21uaU9SQjMvYnVmZmVyZWRTdHJlYW0uaCIgMwogIGlubGluZSBzaXplX3QgTWF4
TWVzc2FnZVNpemUoKSBjb25zdCB7IHJldHVybiBwZF9zdHJhbmQtPk1heE1UVSgpOyB9CgogIGlu
bGluZSBzaXplX3QgV3JNZXNzYWdlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHBkX3dybXNnX3NpemU7
IH0KCgogIGlubGluZSBzaXplX3QgUmRNZXNzYWdlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHBkX3Jk
bXNnX3NpemU7IH0KCgogIHNpemVfdCBSZE1lc3NhZ2VBbHJlYWR5UmVhZCgpIGNvbnN0OwoKCgog
IHNpemVfdCBSZE1lc3NhZ2VVblJlYWQoKSBjb25zdDsKCgoKICBpbmxpbmUgX0NPUkJBX0Jvb2xl
YW4gb3ZlcnJ1bihfQ09SQkFfVUxvbmcgbGVuKSBjb25zdCB7CiAgICByZXR1cm4gbGVuID4gKF9D
T1JCQV9VTG9uZykgUmRNZXNzYWdlVW5SZWFkKCk7CiAgfQoKCgogIGlubGluZSBpbnQgcmRDdXJy
ZW50QWxpZ25tZW50KCkgY29uc3QgewogICAgcmV0dXJuIGN1cnJlbnRfaW5iX2FsaWdubWVudCgp
OwogIH0KCiAgc2l6ZV90IFdyTWVzc2FnZUFscmVhZHlXcml0dGVuKCkgY29uc3Q7CgoKCiAgc2l6
ZV90IFdyTWVzc2FnZVNwYWNlTGVmdCgpIGNvbnN0OwoKCgogIGlubGluZSBpbnQgd3JDdXJyZW50
QWxpZ25tZW50KCkgY29uc3QgewogICAgcmV0dXJuIGN1cnJlbnRfb3V0Yl9hbGlnbm1lbnQoKTsK
ICB9CgogIGlubGluZSBfQ09SQkFfQ2hhciBSZE1lc3NhZ2VCeXRlT3JkZXIoKSBjb25zdCB7CiAg
ICByZXR1cm4gcGRfcmRtc2dfYnl0ZV9vcmRlcjsKICB9Cgpwcm90ZWN0ZWQ6CiAgdm9pZCBSZExv
Y2soKTsKICB2b2lkIFJkVW5sb2NrKCk7CiAgdm9pZCBXckxvY2soKTsKICB2b2lkIFdyVW5sb2Nr
KCk7CgogIGlubGluZSBfQ09SQkFfTG9uZyBuZXdSZXF1ZXN0SUQoKSB7IHJldHVybiBwZF9zdHJh
bmQtPnNlcXVlbmNlTnVtYmVyKCk7IH0KCiAgdm9pZCBXck1lc3NhZ2VTaXplKHNpemVfdCBtc2dz
aXplKTsKCgogIHZvaWQgUmRNZXNzYWdlU2l6ZShzaXplX3QgbXNnc2l6ZSwgX0NPUkJBX0NoYXIg
Ynl0ZW9yZGVyKTsKCgpwcml2YXRlOgogIFN0cmFuZCogcGRfc3RyYW5kOwogIHNpemVfdCBwZF9p
ZGVhbF9idWZfc2l6ZTsKICB2b2lkKiBwZF9pbmJfZW5kOwogIHZvaWQqIHBkX291dGJfZW5kOwog
IHZvaWQqIHBkX2luYl9ta3I7CiAgdm9pZCogcGRfb3V0Yl9ta3I7CiAgX0NPUkJBX0Jvb2xlYW4g
cGRfUmRMb2NrOwogIF9DT1JCQV9Cb29sZWFuIHBkX1dyTG9jazsKCiAgc2l6ZV90IHBkX3JkbXNn
X3NpemU7CiAgc2l6ZV90IHBkX3dybXNnX3NpemU7CiAgc2l6ZV90IHBkX3JlYWQ7CiAgc2l6ZV90
IHBkX3dyaXR0ZW47CiAgX0NPUkJBX0NoYXIgcGRfcmRtc2dfYnl0ZV9vcmRlcjsKCiAgdm9pZCBl
bnN1cmVfcmRsb2NrZWQoKTsKICB2b2lkIGVuc3VyZV93cmxvY2tlZCgpOwogIHZvaWQgcmVzZXJ2
ZShzaXplX3QgbWluaW11bSxfQ09SQkFfQm9vbGVhbiBzdGFydE1UVT0wLAogICAgICAgICAgICAg
ICBfQ09SQkFfQm9vbGVhbiBhdF9tb3N0X29uY2U9MCk7CiAgdm9pZCBnaXZlYmFja19yZXNlcnZl
ZChfQ09SQkFfQm9vbGVhbiB0cmFuc21pdCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
Q09SQkFfQm9vbGVhbiBlbmRNVFU9MCk7CiAgdm9pZCByZWNlaXZlKHNpemVfdCBtaW5pbXVtLF9D
T1JCQV9Cb29sZWFuIHN0YXJ0TVRVPTApOwogIHZvaWQgZ2l2ZWJhY2tfcmVjZWl2ZWQoX0NPUkJB
X0Jvb2xlYW4gc3RhcnRNVFU9MCk7CiAgaW50IGN1cnJlbnRfb3V0Yl9hbGlnbm1lbnQoKSBjb25z
dDsKICBpbnQgY3VycmVudF9pbmJfYWxpZ25tZW50KCkgY29uc3Q7CiAgdm9pZCByZXdpbmRfb3V0
Yl9ta3IoaW50IG9sZGFsaWdubWVudCk7CiAgdm9pZCByZXdpbmRfaW5iX21rcihpbnQgb2xkYWxp
Z25tZW50KTsKCiAgaW5saW5lIHZvaWQqIGFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6YWxpZ25t
ZW50X3QgYWxpZ24sIHNpemVfdCBuYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NPUkJBX0Jvb2xlYW4gc3RhcnRNVFU9MCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBhdF9tb3N0X29uY2U9MCkKICB7CgoKCgogICAgaWYg
KHN0YXJ0TVRVKSBnaXZlYmFja19yZXNlcnZlZCgxLDEpOwogICAgb21uaTo6cHRyX2FyaXRoX3Qg
cDEgPW9tbmk6OmFsaWduX3RvKChvbW5pOjpwdHJfYXJpdGhfdClwZF9vdXRiX21rcixhbGlnbik7
CiAgICBvbW5pOjpwdHJfYXJpdGhfdCBwMiA9IHAxICsgbmJ5dGVzOwogICAgaWYoICh2b2lkKilw
MiA+IHBkX291dGJfZW5kICkgewogICAgICByZXNlcnZlKHAyIC0gKG9tbmk6OnB0cl9hcml0aF90
KXBkX291dGJfbWtyLCBzdGFydE1UVSwgYXRfbW9zdF9vbmNlKTsKICAgICAgcDEgPSBvbW5pOjph
bGlnbl90bygob21uaTo6cHRyX2FyaXRoX3QpcGRfb3V0Yl9ta3IsIGFsaWduKTsKICAgICAgcDIg
PSBwMSArIG5ieXRlczsKICAgIH0KICAgIHBkX291dGJfbWtyID0gKHZvaWQqKSBwMjsKICAgIHJl
dHVybiAodm9pZCopIHAxOwogIH0KCiAgaW5saW5lIHZvaWQgKmFsaWduX2FuZF9nZXRfYnl0ZXMo
b21uaTo6YWxpZ25tZW50X3QgYWxpZ24sc2l6ZV90IG5ieXRlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBzdGFydE1UVT0wKSB7CgoKCgogICAgaWYg
KHN0YXJ0TVRVKSBnaXZlYmFja19yZWNlaXZlZCgxKTsKICAgIG9tbmk6OnB0cl9hcml0aF90IHAx
ID0gb21uaTo6YWxpZ25fdG8oKG9tbmk6OnB0cl9hcml0aF90KXBkX2luYl9ta3IsYWxpZ24pOwog
ICAgb21uaTo6cHRyX2FyaXRoX3QgcDIgPSBwMSArIG5ieXRlczsKICAgIGlmICgodm9pZCAqKXAy
ID4gcGRfaW5iX2VuZCkgewogICAgICByZWNlaXZlKHAyIC0gKG9tbmk6OnB0cl9hcml0aF90KXBk
X2luYl9ta3IsIHN0YXJ0TVRVKTsKICAgICAgcDEgPSBvbW5pOjphbGlnbl90bygob21uaTo6cHRy
X2FyaXRoX3QpcGRfaW5iX21rciwgYWxpZ24pOwogICAgICBwMiA9IHAxICsgbmJ5dGVzOwogICAg
fQogICAgcGRfaW5iX21rciA9ICh2b2lkKikgcDI7CiAgICByZXR1cm4gKHZvaWQqKSBwMTsKICB9
CgogIE5ldEJ1ZmZlcmVkU3RyZWFtKCk7CiAgTmV0QnVmZmVyZWRTdHJlYW0oY29uc3QgTmV0QnVm
ZmVyZWRTdHJlYW0mKTsKICBOZXRCdWZmZXJlZFN0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IE5ldEJ1
ZmZlcmVkU3RyZWFtJik7Cn07CgoKCgoKY2xhc3MgTWVtQnVmZmVyZWRTdHJlYW0gewpwdWJsaWM6
CiAgTWVtQnVmZmVyZWRTdHJlYW0oc2l6ZV90IGluaXRpYWxCdWZzaXplPTApOwogIH5NZW1CdWZm
ZXJlZFN0cmVhbSgpOwoKICBNZW1CdWZmZXJlZFN0cmVhbShjb25zdCBNZW1CdWZmZXJlZFN0cmVh
bSYpOwogIE1lbUJ1ZmZlcmVkU3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgTWVtQnVmZmVyZWRTdHJl
YW0mKTsKCiAgTWVtQnVmZmVyZWRTdHJlYW0odm9pZCogZGF0YWJ1ZmZlcik7CiAgTWVtQnVmZmVy
ZWRTdHJlYW0odm9pZCogZGF0YWJ1ZmZlciwgc2l6ZV90IG1heExlbik7CgoKICBmcmllbmQgaW5s
aW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9DaGFyIGEsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBz
KSB7CiAgICB7IF9DT1JCQV9DaGFyICpwID0gKF9DT1JCQV9DaGFyICopIChzKS5hbGlnbl9hbmRf
cHV0X2J5dGVzKG9tbmk6OkFMSUdOXzEsc2l6ZW9mKF9DT1JCQV9DaGFyKSk7ICpwID0gYTsgfTsK
ICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoX0NPUkJBX0NoYXImIGEsIE1l
bUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9DaGFyICpwID0gKF9DT1JCQV9DaGFy
ICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzEsc2l6ZW9mKF9DT1JCQV9D
aGFyKSk7IGEgPSAqcDsgfTsKICB9CgoKCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPj49
IChfQ09SQkFfQm9vbGVhbiBiLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgX0NPUkJBX0No
YXIgYyA9IGIgPyAxIDogMDsKICAgIHsgX0NPUkJBX0NoYXIgKnAgPSAoX0NPUkJBX0NoYXIgKikg
KHMpLmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fMSxzaXplb2YoX0NPUkJBX0NoYXIp
KTsgKnAgPSBjOyB9OwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChfQ09S
QkFfQm9vbGVhbiYgYiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIF9DT1JCQV9DaGFyIGM7
CiAgICB7IF9DT1JCQV9DaGFyICpwID0gKF9DT1JCQV9DaGFyICopIChzKS5hbGlnbl9hbmRfZ2V0
X2J5dGVzKG9tbmk6OkFMSUdOXzEsc2l6ZW9mKF9DT1JCQV9DaGFyKSk7IGMgPSAqcDsgfTsKICAg
IGIgPSBjID8gdHJ1ZSA6IGZhbHNlOwogIH0KCgoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0
b3I+Pj0gKF9DT1JCQV9TaG9ydCBhLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgeyBfQ09S
QkFfU2hvcnQgKnAgPSAoX0NPUkJBX1Nob3J0ICopIChzKS5hbGlnbl9hbmRfcHV0X2J5dGVzKG9t
bmk6OkFMSUdOXzIsc2l6ZW9mKF9DT1JCQV9TaG9ydCkpOyAqcCA9IGE7IH07CiAgfQoKICBmcmll
bmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9TaG9ydCYgYSwgTWVtQnVmZmVyZWRT
dHJlYW0mIHMpIHsKICAgIGlmIChzLmJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyKSB7
CiAgICAgIF9DT1JCQV9TaG9ydCB0OwogICAgICB7IF9DT1JCQV9TaG9ydCAqcCA9IChfQ09SQkFf
U2hvcnQgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fMixzaXplb2YoX0NP
UkJBX1Nob3J0KSk7IHQgPSAqcDsgfTsKICAgICAgYSA9ICgoKCh0KSAmIDB4ZmYpIDw8IDgpIHwg
KCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgeyBfQ09SQkFfU2hv
cnQgKnAgPSAoX0NPUkJBX1Nob3J0ICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFM
SUdOXzIsc2l6ZW9mKF9DT1JCQV9TaG9ydCkpOyBhID0gKnA7IH07CiAgICB9CiAgICByZXR1cm47
CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9VU2hvcnQgYSwg
TWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIHsgX0NPUkJBX1VTaG9ydCAqcCA9IChfQ09SQkFf
VVNob3J0ICopIChzKS5hbGlnbl9hbmRfcHV0X2J5dGVzKG9tbmk6OkFMSUdOXzIsc2l6ZW9mKF9D
T1JCQV9VU2hvcnQpKTsgKnAgPSBhOyB9OwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJh
dG9yPDw9IChfQ09SQkFfVVNob3J0JiBhLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgaWYg
KHMuYnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX1VTaG9y
dCB0OwogICAgICB7IF9DT1JCQV9VU2hvcnQgKnAgPSAoX0NPUkJBX1VTaG9ydCAqKSAocykuYWxp
Z25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl8yLHNpemVvZihfQ09SQkFfVVNob3J0KSk7IHQg
PSAqcDsgfTsKICAgICAgYSA9ICgoKCh0KSAmIDB4ZmYpIDw8IDgpIHwgKCgodCkgPj4gOCkgJiAw
eGZmKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgeyBfQ09SQkFfVVNob3J0ICpwID0gKF9DT1JC
QV9VU2hvcnQgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fMixzaXplb2Yo
X0NPUkJBX1VTaG9ydCkpOyBhID0gKnA7IH07CiAgICB9CiAgICByZXR1cm47CiAgfQoKCiAgZnJp
ZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChfQ09SQkFfTG9uZyBhLCBNZW1CdWZmZXJlZFN0
cmVhbSYgcykgewogICAgeyBfQ09SQkFfTG9uZyAqcCA9IChfQ09SQkFfTG9uZyAqKSAocykuYWxp
Z25fYW5kX3B1dF9ieXRlcyhvbW5pOjpBTElHTl80LHNpemVvZihfQ09SQkFfTG9uZykpOyAqcCA9
IGE7IH07CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9Mb25n
JiBhLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgaWYgKHMuYnl0ZU9yZGVyKCkgIT0gb21u
aTo6bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX0xvbmcgdDsKICAgICAgeyBfQ09SQkFfTG9u
ZyAqcCA9IChfQ09SQkFfTG9uZyAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElH
Tl80LHNpemVvZihfQ09SQkFfTG9uZykpOyB0ID0gKnA7IH07CiAgICAgIGEgPSAoKCgodCkgJiAw
eGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodCkgJiAw
eDAwMDBmZjAwKSA8PCA4KSB8ICgoKHQpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgIH0KICAg
IGVsc2UgewogICAgICB7IF9DT1JCQV9Mb25nICpwID0gKF9DT1JCQV9Mb25nICopIChzKS5hbGln
bl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzQsc2l6ZW9mKF9DT1JCQV9Mb25nKSk7IGEgPSAq
cDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRv
cj4+PSAoX0NPUkJBX1VMb25nIGEsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JC
QV9VTG9uZyAqcCA9IChfQ09SQkFfVUxvbmcgKikgKHMpLmFsaWduX2FuZF9wdXRfYnl0ZXMob21u
aTo6QUxJR05fNCxzaXplb2YoX0NPUkJBX1VMb25nKSk7ICpwID0gYTsgfTsKICB9CgogIGZyaWVu
ZCBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoX0NPUkJBX1VMb25nJiBhLCBNZW1CdWZmZXJlZFN0
cmVhbSYgcykgewogICAgaWYgKHMuYnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIpIHsK
ICAgICAgX0NPUkJBX1VMb25nIHQ7CiAgICAgIHsgX0NPUkJBX1VMb25nICpwID0gKF9DT1JCQV9V
TG9uZyAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl80LHNpemVvZihfQ09S
QkFfVUxvbmcpKTsgdCA9ICpwOyB9OwogICAgICBhID0gKCgoKHQpICYgMHhmZjAwMDAwMCkgPj4g
MjQpIHwgKCgodCkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHQpICYgMHgwMDAwZmYwMCkgPDwg
OCkgfCAoKCh0KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAg
eyBfQ09SQkFfVUxvbmcgKnAgPSAoX0NPUkJBX1VMb25nICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5
dGVzKG9tbmk6OkFMSUdOXzQsc2l6ZW9mKF9DT1JCQV9VTG9uZykpOyBhID0gKnA7IH07CiAgICB9
CiAgICByZXR1cm47CiAgfQoKCgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoX0NP
UkJBX0xvbmdMb25nIGEsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9Mb25n
TG9uZyAqcCA9IChfQ09SQkFfTG9uZ0xvbmcgKikgKHMpLmFsaWduX2FuZF9wdXRfYnl0ZXMob21u
aTo6QUxJR05fOCxzaXplb2YoX0NPUkJBX0xvbmdMb25nKSk7ICpwID0gYTsgfTsKICB9CgogIGZy
aWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoX0NPUkJBX0xvbmdMb25nJiBhLCBNZW1CdWZm
ZXJlZFN0cmVhbSYgcykgewogICAgaWYgKHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6
bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX0xvbmdMb25nIHQ7CiAgICAgIHsgX0NPUkJBX0xv
bmdMb25nICpwID0gKF9DT1JCQV9Mb25nTG9uZyAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhv
bW5pOjpBTElHTl84LHNpemVvZihfQ09SQkFfTG9uZ0xvbmcpKTsgdCA9ICpwOyB9OwogICAgICBh
ID0gKCgoKHQpICYgKDB4ZmYwMDAwMDAwMDAwMDAwMExMKSkgPj4gNTYpIHwgKCgodCkgJiAoMHgw
MGZmMDAwMDAwMDAwMDAwTEwpKSA+PiA0MCkgfCAoKCh0KSAmICgweDAwMDBmZjAwMDAwMDAwMDBM
TCkpID4+IDI0KSB8ICgoKHQpICYgKDB4MDAwMDAwZmYwMDAwMDAwMExMKSkgPj4gOCkgfCAoKCh0
KSAmICgweDAwMDAwMDAwZmYwMDAwMDBMTCkpIDw8IDgpIHwgKCgodCkgJiAoMHgwMDAwMDAwMDAw
ZmYwMDAwTEwpKSA8PCAyNCkgfCAoKCh0KSAmICgweDAwMDAwMDAwMDAwMGZmMDBMTCkpIDw8IDQw
KSB8ICgoKHQpICYgKDB4MDAwMDAwMDAwMDAwMDBmZkxMKSkgPDwgNTYpKTsKICAgIH0KICAgIGVs
c2UgewogICAgICB7IF9DT1JCQV9Mb25nTG9uZyAqcCA9IChfQ09SQkFfTG9uZ0xvbmcgKikgKHMp
LmFsaWduX2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fOCxzaXplb2YoX0NPUkJBX0xvbmdMb25n
KSk7IGEgPSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9p
ZCBvcGVyYXRvcj4+PSAoX0NPUkJBX1VMb25nTG9uZyBhLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykg
ewogICAgeyBfQ09SQkFfVUxvbmdMb25nICpwID0gKF9DT1JCQV9VTG9uZ0xvbmcgKikgKHMpLmFs
aWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fOCxzaXplb2YoX0NPUkJBX1VMb25nTG9uZykp
OyAqcCA9IGE7IH07CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JC
QV9VTG9uZ0xvbmcmIGEsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBpZiAocy5SZE1lc3Nh
Z2VCeXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlcikgewogICAgICBfQ09SQkFfVUxvbmdM
b25nIHQ7CiAgICAgIHsgX0NPUkJBX1VMb25nTG9uZyAqcCA9IChfQ09SQkFfVUxvbmdMb25nICop
IChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzgsc2l6ZW9mKF9DT1JCQV9VTG9u
Z0xvbmcpKTsgdCA9ICpwOyB9OwogICAgICBhID0gKCgoKHQpICYgKDB4ZmYwMDAwMDAwMDAwMDAw
MExMKSkgPj4gNTYpIHwgKCgodCkgJiAoMHgwMGZmMDAwMDAwMDAwMDAwTEwpKSA+PiA0MCkgfCAo
KCh0KSAmICgweDAwMDBmZjAwMDAwMDAwMDBMTCkpID4+IDI0KSB8ICgoKHQpICYgKDB4MDAwMDAw
ZmYwMDAwMDAwMExMKSkgPj4gOCkgfCAoKCh0KSAmICgweDAwMDAwMDAwZmYwMDAwMDBMTCkpIDw8
IDgpIHwgKCgodCkgJiAoMHgwMDAwMDAwMDAwZmYwMDAwTEwpKSA8PCAyNCkgfCAoKCh0KSAmICgw
eDAwMDAwMDAwMDAwMGZmMDBMTCkpIDw8IDQwKSB8ICgoKHQpICYgKDB4MDAwMDAwMDAwMDAwMDBm
ZkxMKSkgPDwgNTYpKTsKICAgIH0KICAgIGVsc2UgewogICAgICB7IF9DT1JCQV9VTG9uZ0xvbmcg
KnAgPSAoX0NPUkJBX1VMb25nTG9uZyAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpB
TElHTl84LHNpemVvZihfQ09SQkFfVUxvbmdMb25nKSk7IGEgPSAqcDsgfTsKICAgIH0KICAgIHJl
dHVybjsKICB9CgoKCgoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9G
bG9hdCBhLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgeyBfQ09SQkFfRmxvYXQgKnAgPSAo
X0NPUkJBX0Zsb2F0ICopIChzKS5hbGlnbl9hbmRfcHV0X2J5dGVzKG9tbmk6OkFMSUdOXzQsc2l6
ZW9mKF9DT1JCQV9GbG9hdCkpOyAqcCA9IGE7IH07CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQg
b3BlcmF0b3I8PD0gKF9DT1JCQV9GbG9hdCYgYSwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAg
IGlmIChzLmJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyKSB7CiAgICAgIF9DT1JCQV9G
bG9hdCB0OwogICAgICB7IF9DT1JCQV9GbG9hdCAqcCA9IChfQ09SQkFfRmxvYXQgKikgKHMpLmFs
aWduX2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fNCxzaXplb2YoX0NPUkJBX0Zsb2F0KSk7IHQg
PSAqcDsgfTsKICAgICAgX0NPUkJBX1VMb25nIHRsMSA9ICooKF9DT1JCQV9VTG9uZyAqKSZ0KTsK
ICAgICAgX0NPUkJBX1VMb25nIHRsMiA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwg
KCgodGwxKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDApIDw8IDgp
IHwgKCgodGwxKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIGEgPSAqKChfQ09SQkFfRmxv
YXQgKikgJnRsMik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgeyBfQ09SQkFfRmxvYXQgKnAgPSAo
X0NPUkJBX0Zsb2F0ICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzQsc2l6
ZW9mKF9DT1JCQV9GbG9hdCkpOyBhID0gKnA7IH07CiAgICB9CiAgICByZXR1cm47CiAgfQoKICBm
cmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9Eb3VibGUgYSwgTWVtQnVmZmVy
ZWRTdHJlYW0mIHMpIHsKICAgIHsgX0NPUkJBX0RvdWJsZSAqcCA9IChfQ09SQkFfRG91YmxlICop
IChzKS5hbGlnbl9hbmRfcHV0X2J5dGVzKG9tbmk6OkFMSUdOXzgsc2l6ZW9mKF9DT1JCQV9Eb3Vi
bGUpKTsgKnAgPSBhOyB9OwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChf
Q09SQkFfRG91YmxlJiBhLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgaWYgKHMuYnl0ZU9y
ZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX0RvdWJsZSB0OwogICAg
ICB7IF9DT1JCQV9Eb3VibGUgKnAgPSAoX0NPUkJBX0RvdWJsZSAqKSAocykuYWxpZ25fYW5kX2dl
dF9ieXRlcyhvbW5pOjpBTElHTl84LHNpemVvZihfQ09SQkFfRG91YmxlKSk7IHQgPSAqcDsgfTsK
ICAgICAgX0NPUkJBX1VMb25nIHRsMSA9ICgoX0NPUkJBX1VMb25nICopJnQpWzFdOwogICAgICBf
Q09SQkFfVUxvbmcgdGwyID0gKCgoKHRsMSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0bDEp
ICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0bDEpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0
bDEpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAgKChfQ09SQkFfVUxvbmcgKikmYSlbMF0g
PSB0bDI7CiAgICAgIHRsMSA9ICgoX0NPUkJBX1VMb25nICopJnQpWzBdOwogICAgICB0bDIgPSAo
KCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAwZmYwMDAwKSA+PiA4
KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAweDAwMDAwMGZmKSA8
PCAyNCkpOwogICAgICAoKF9DT1JCQV9VTG9uZyAqKSZhKVsxXSA9IHRsMjsKICAgIH0KICAgIGVs
c2UgewogICAgICB7IF9DT1JCQV9Eb3VibGUgKnAgPSAoX0NPUkJBX0RvdWJsZSAqKSAocykuYWxp
Z25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl84LHNpemVvZihfQ09SQkFfRG91YmxlKSk7IGEg
PSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgoKCgoKCgogIHZvaWQgcHV0X2NoYXJfYXJy
YXkoY29uc3QgX0NPUkJBX0NoYXIqIHNyYyxpbnQgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
IG9tbmk6OmFsaWdubWVudF90IGFsaWduPW9tbmk6OkFMSUdOXzEpOwogIHZvaWQgZ2V0X2NoYXJf
YXJyYXkoX0NPUkJBX0NoYXIqIGRzdCwgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICBv
bW5pOjphbGlnbm1lbnRfdCBhbGlnbj1vbW5pOjpBTElHTl8xKTsKCiAgZnJpZW5kIGNsYXNzIE5l
dEJ1ZmZlcmVkU3RyZWFtOwoKICB2b2lkIGNvcHlfZnJvbShNZW1CdWZmZXJlZFN0cmVhbSYgZnJv
bSwgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgb21uaTo6YWxpZ25tZW50X3QgYWxpZ249
b21uaTo6QUxJR05fMSk7CiAgdm9pZCBjb3B5X2Zyb20oTmV0QnVmZmVyZWRTdHJlYW0mIGZyb20s
IHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgIG9tbmk6OmFsaWdubWVudF90IGFsaWduPW9t
bmk6OkFMSUdOXzEpOwoKCgoKICBpbmxpbmUgdm9pZCByZXdpbmRfaW5fbWtyKCkgewogICAgcGRf
aW5fbWtyID0gc3RhcnRvZnN0cmVhbSgpOwogIH0KICBpbmxpbmUgdm9pZCByZXdpbmRfaW5vdXRf
bWtyKCkgewogICAgcmV3aW5kX2luX21rcigpOwogICAgcGRfb3V0X21rciA9IHBkX2luX21rcjsK
ICB9CgogIGlubGluZSBfQ09SQkFfQ2hhciBieXRlT3JkZXIoKSBjb25zdCB7CiAgICByZXR1cm4g
X0NPUkJBX0NoYXIocGRfYnl0ZV9vcmRlcik7CiAgfQoKICBpbmxpbmUgdm9pZCBieXRlT3JkZXIo
X0NPUkJBX0NoYXIgYikgewogICAgcGRfYnl0ZV9vcmRlciA9IGIgPyAxIDogMDsKICB9CgogIGlu
bGluZSBfQ09SQkFfQ2hhciBSZE1lc3NhZ2VCeXRlT3JkZXIoKSBjb25zdCB7CiAgICByZXR1cm4g
Ynl0ZU9yZGVyKCk7CiAgfQoKICBpbmxpbmUgc2l6ZV90IGFscmVhZHlSZWFkKCkgY29uc3Qgewog
ICAgaWYgKHBkX2luX21rciA8IHBkX291dF9ta3IpCiAgICAgIHJldHVybiAoKG9tbmk6OnB0cl9h
cml0aF90KXBkX2luX21rciAtCiAgICAgICAgICAgICAgKG9tbmk6OnB0cl9hcml0aF90KXN0YXJ0
b2ZzdHJlYW0oKSk7CiAgICBlbHNlCiAgICAgIHJldHVybiAoKG9tbmk6OnB0cl9hcml0aF90KXBk
X291dF9ta3IgLQogICAgICAgICAgICAgIChvbW5pOjpwdHJfYXJpdGhfdClzdGFydG9mc3RyZWFt
KCkpOwogIH0KCiAgaW5saW5lIHNpemVfdCBSZE1lc3NhZ2VBbHJlYWR5UmVhZCgpIGNvbnN0IHsK
ICAgIHJldHVybiBhbHJlYWR5UmVhZCgpOwogIH0KCiAgaW5saW5lIHNpemVfdCB1blJlYWQoKSBj
b25zdCB7CiAgICBpZiAocGRfaW5fbWtyIDwgcGRfb3V0X21rcikKICAgICAgcmV0dXJuICgob21u
aTo6cHRyX2FyaXRoX3QpcGRfb3V0X21rciAtCiAgICAgICAgICAgICAgKG9tbmk6OnB0cl9hcml0
aF90KXBkX2luX21rcik7CiAgICBlbHNlCiAgICAgIHJldHVybiAwOwogIH0KCiAgaW5saW5lIHNp
emVfdCBSZE1lc3NhZ2VVblJlYWQoKSBjb25zdCB7CiAgICByZXR1cm4gdW5SZWFkKCk7CiAgfQoK
ICBpbmxpbmUgX0NPUkJBX0Jvb2xlYW4gb3ZlcnJ1bihfQ09SQkFfVUxvbmcgbGVuKSBjb25zdCB7
CiAgICByZXR1cm4gbGVuID4gKF9DT1JCQV9VTG9uZykgdW5SZWFkKCk7CiAgfQoKICBpbmxpbmUg
aW50IHJkQ3VycmVudEFsaWdubWVudCgpIGNvbnN0IHsKICAgIGludCBhbGlnbj0oKG9tbmk6OnB0
cl9hcml0aF90KXBkX2luX21rciAmICgoaW50KW9tbmk6Om1heF9hbGlnbm1lbnQgLSAxKSk7CiAg
ICByZXR1cm4gKChhbGlnbik/IGFsaWduOihpbnQpb21uaTo6bWF4X2FsaWdubWVudCk7CiAgfQoK
ICBpbmxpbmUgc2l6ZV90IGFscmVhZHlXcml0dGVuKCkgY29uc3QgewogICAgcmV0dXJuICgob21u
aTo6cHRyX2FyaXRoX3QpcGRfb3V0X21rciAtCiAgICAgICAgICAgIChvbW5pOjpwdHJfYXJpdGhf
dClzdGFydG9mc3RyZWFtKCkpOwogIH0KCiAgaW5saW5lIHNpemVfdCBXck1lc3NhZ2VBbHJlYWR5
V3JpdHRlbigpIGNvbnN0IHsKICAgIHJldHVybiAoKG9tbmk6OnB0cl9hcml0aF90KXBkX291dF9t
a3IgLQogICAgICAgICAgICAob21uaTo6cHRyX2FyaXRoX3Qpc3RhcnRvZnN0cmVhbSgpKTsKICB9
CgogIGlubGluZSBpbnQgd3JDdXJyZW50QWxpZ25tZW50KCkgY29uc3QgewogICAgaW50IGFsaWdu
PSgob21uaTo6cHRyX2FyaXRoX3QpcGRfb3V0X21rciAmICgoaW50KW9tbmk6Om1heF9hbGlnbm1l
bnQgLSAxKSk7CiAgICByZXR1cm4gKChhbGlnbik/YWxpZ246KGludClvbW5pOjptYXhfYWxpZ25t
ZW50KTsKICB9CgogIHZvaWQgc2tpcChfQ09SQkFfVUxvbmcgc2l6ZSk7CgogIGlubGluZSB2b2lk
KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gcGRfaW5fbWtyOyB9Cgpwcml2YXRlOgoKCgogIF9DT1JC
QV9Cb29sZWFuIHBkX2V4dGVybmFsX2J1ZmZlcjsKICB2b2lkKiBwZF9idWZwOwogIHZvaWQqIHBk
X2J1ZmVuZDsKICB2b2lkKiBwZF9pbl9ta3I7CiAgdm9pZCogcGRfb3V0X21rcjsKICBzdGF0aWMg
Y29uc3QgaW50IHBkX2lubGluZV9idWZfc2l6ZTsKICBjaGFyIHBkX2J1ZmZlclszMl07CiAgX0NP
UkJBX0Jvb2xlYW4gcGRfYnl0ZV9vcmRlcjsKCiAgaW5saW5lIHZvaWQqIGFsaWduX2FuZF9wdXRf
Ynl0ZXMob21uaTo6YWxpZ25tZW50X3QgYWxpZ24sIHNpemVfdCBuYnl0ZXMpCiAgewogICAgaWYo
IHBkX2V4dGVybmFsX2J1ZmZlciApIHdyaXRlX3RvX3JlYWRvbmx5X2Vycm9yKCIvdXNyL2xvY2Fs
L2luY2x1ZGUvb21uaU9SQjMvYnVmZmVyZWRTdHJlYW0uaCIsIDgyMyk7CgogICAgb21uaTo6cHRy
X2FyaXRoX3QgcDEgPSBvbW5pOjphbGlnbl90bygob21uaTo6cHRyX2FyaXRoX3QpcGRfb3V0X21r
cixhbGlnbik7CiAgICBvbW5pOjpwdHJfYXJpdGhfdCBwMiA9IHAxICsgbmJ5dGVzOwogICAgaWYo
ICh2b2lkKilwMiA+IHBkX2J1ZmVuZCApIHsKICAgICAgZ3JvdyhwMiAtIChvbW5pOjpwdHJfYXJp
dGhfdClwZF9vdXRfbWtyKTsKICAgICAgcDEgPSBvbW5pOjphbGlnbl90bygob21uaTo6cHRyX2Fy
aXRoX3QpcGRfb3V0X21rciwgYWxpZ24pOwogICAgICBwMiA9IHAxICsgbmJ5dGVzOwogICAgfQog
ICAgcGRfb3V0X21rciA9ICh2b2lkKikgcDI7CiAgICByZXR1cm4gKHZvaWQqKSBwMTsKICB9Cgog
IGlubGluZSB2b2lkKiBhbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OmFsaWdubWVudF90IGFsaWdu
LHNpemVfdCBuYnl0ZXMpIHsKICAgIG9tbmk6OnB0cl9hcml0aF90IHAxID0gb21uaTo6YWxpZ25f
dG8oKG9tbmk6OnB0cl9hcml0aF90KXBkX2luX21rciwgYWxpZ24pOwogICAgcGRfaW5fbWtyID0g
KHZvaWQqKSAocDEgKyBuYnl0ZXMpOwogICAgaWYoIHBkX2luX21rciA+IHBkX291dF9ta3IgKSBv
dmVycnVuX2Vycm9yKCk7CiAgICByZXR1cm4gKHZvaWQqKSBwMTsKICB9CgogIHZvaWQqIHN0YXJ0
b2ZzdHJlYW0oKSBjb25zdDsKICBpbmxpbmUgc2l6ZV90IHNpemUoKSB7CiAgICByZXR1cm4gKG9t
bmk6OnB0cl9hcml0aF90KSBwZF9idWZlbmQgLSAob21uaTo6cHRyX2FyaXRoX3QpIHN0YXJ0b2Zz
dHJlYW0oKTsKICB9CiAgdm9pZCBncm93KHNpemVfdCBtaW5pbXVtKTsKICB2b2lkIGNvcHkoY29u
c3QgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICB2b2lkIG92ZXJydW5fZXJyb3IoKTsKICB2b2lkIHdy
aXRlX3RvX3JlYWRvbmx5X2Vycm9yKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKTsKfTsKCgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgYnVmX3Q+CmlubGluZSB2b2lkCkNkclN0cmVhbUhlbHBlcl91bm1h
cnNoYWxBcnJheVNob3J0KGJ1Zl90JiBzLCBfQ09SQkFfU2hvcnQqIGEsIGludCBsZW5ndGgpCnsK
ICBzLmdldF9jaGFyX2FycmF5KChfQ09SQkFfQ2hhciopIGEsIGxlbmd0aCAqIDIsIG9tbmk6OkFM
SUdOXzIpOwoKICBpZiggcy5SZE1lc3NhZ2VCeXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRl
ciApCiAgICBmb3IoIGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrICkKICAgICAgYVtpXSA9ICgo
KChhW2ldKSAmIDB4ZmYpIDw8IDgpIHwgKCgoYVtpXSkgPj4gOCkgJiAweGZmKSk7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgYnVmX3Q+CmlubGluZSB2b2lkCkNkclN0cmVhbUhlbHBlcl91bm1hcnNoYWxB
cnJheVVTaG9ydChidWZfdCYgcywgX0NPUkJBX1VTaG9ydCogYSwgaW50IGxlbmd0aCkKewogIHMu
Z2V0X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKikgYSwgbGVuZ3RoICogMiwgb21uaTo6QUxJR05f
Mik7CgogIGlmKCBzLlJkTWVzc2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICkK
ICAgIGZvciggaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKQogICAgICBhW2ldID0gKCgoKGFb
aV0pICYgMHhmZikgPDwgOCkgfCAoKChhW2ldKSA+PiA4KSAmIDB4ZmYpKTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBidWZfdD4KaW5saW5lIHZvaWQKQ2RyU3RyZWFtSGVscGVyX3VubWFyc2hhbEFycmF5
TG9uZyhidWZfdCYgcywgX0NPUkJBX0xvbmcqIGEsIGludCBsZW5ndGgpCnsKICBzLmdldF9jaGFy
X2FycmF5KChfQ09SQkFfQ2hhciopIGEsIGxlbmd0aCAqIDQsIG9tbmk6OkFMSUdOXzQpOwoKICBp
Ziggcy5SZE1lc3NhZ2VCeXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlciApCiAgICBmb3Io
IGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrICkKICAgICAgYVtpXSA9ICgoKChhW2ldKSAmIDB4
ZmYwMDAwMDApID4+IDI0KSB8ICgoKGFbaV0pICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKChhW2ld
KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgoYVtpXSkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwp9
CgoKdGVtcGxhdGUgPGNsYXNzIGJ1Zl90PgppbmxpbmUgdm9pZApDZHJTdHJlYW1IZWxwZXJfdW5t
YXJzaGFsQXJyYXlVTG9uZyhidWZfdCYgcywgX0NPUkJBX1VMb25nKiBhLCBpbnQgbGVuZ3RoKQp7
CiAgcy5nZXRfY2hhcl9hcnJheSgoX0NPUkJBX0NoYXIqKSBhLCBsZW5ndGggKiA0LCBvbW5pOjpB
TElHTl80KTsKCiAgaWYoIHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3Jk
ZXIgKQogICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyApCiAgICAgIGFbaV0gPSAo
KCgoYVtpXSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKChhW2ldKSAmIDB4MDBmZjAwMDApID4+
IDgpIHwgKCgoYVtpXSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKGFbaV0pICYgMHgwMDAwMDBm
ZikgPDwgMjQpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBidWZfdD4KaW5saW5lIHZvaWQKQ2RyU3Ry
ZWFtSGVscGVyX3VubWFyc2hhbEFycmF5RmxvYXQoYnVmX3QmIHMsIF9DT1JCQV9GbG9hdCogYSwg
aW50IGxlbmd0aCkKewogIHMuZ2V0X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKikgYSwgbGVuZ3Ro
ICogNCwgb21uaTo6QUxJR05fNCk7CgogIGlmKCBzLlJkTWVzc2FnZUJ5dGVPcmRlcigpICE9IG9t
bmk6Om15Qnl0ZU9yZGVyICkKICAgIGZvciggaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKSB7
CiAgICAgIF9DT1JCQV9VTG9uZyB0bXAgPSAoKCgoKiAoX0NPUkJBX1VMb25nKikgKGEgKyBpKSkg
JiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCgqIChfQ09SQkFfVUxvbmcqKSAoYSArIGkpKSAmIDB4
MDBmZjAwMDApID4+IDgpIHwgKCgoKiAoX0NPUkJBX1VMb25nKikgKGEgKyBpKSkgJiAweDAwMDBm
ZjAwKSA8PCA4KSB8ICgoKCogKF9DT1JCQV9VTG9uZyopIChhICsgaSkpICYgMHgwMDAwMDBmZikg
PDwgMjQpKTsKICAgICAgYVtpXSA9ICogKF9DT1JCQV9GbG9hdCopICZ0bXA7CiAgICB9Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgYnVmX3Q+CmlubGluZSB2b2lkCkNkclN0cmVhbUhlbHBlcl91bm1hcnNo
YWxBcnJheURvdWJsZShidWZfdCYgcywgX0NPUkJBX0RvdWJsZSogYSwgaW50IGxlbmd0aCkKewog
IHMuZ2V0X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKikgYSwgbGVuZ3RoICogOCwgb21uaTo6QUxJ
R05fOCk7CgogIGlmKCBzLlJkTWVzc2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVy
ICkKICAgIGZvciggaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgIF9DT1JCQV9V
TG9uZyB0bXAwID0gKCgoKCgoX0NPUkJBX1VMb25nKikgKGEgKyBpKSlbMF0pICYgMHhmZjAwMDAw
MCkgPj4gMjQpIHwgKCgoKChfQ09SQkFfVUxvbmcqKSAoYSArIGkpKVswXSkgJiAweDAwZmYwMDAw
KSA+PiA4KSB8ICgoKCgoX0NPUkJBX1VMb25nKikgKGEgKyBpKSlbMF0pICYgMHgwMDAwZmYwMCkg
PDwgOCkgfCAoKCgoKF9DT1JCQV9VTG9uZyopIChhICsgaSkpWzBdKSAmIDB4MDAwMDAwZmYpIDw8
IDI0KSk7CiAgICAgIF9DT1JCQV9VTG9uZyB0bXAxID0gKCgoKCgoX0NPUkJBX1VMb25nKikgKGEg
KyBpKSlbMV0pICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgoKChfQ09SQkFfVUxvbmcqKSAoYSAr
IGkpKVsxXSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKCgoX0NPUkJBX1VMb25nKikgKGEgKyBp
KSlbMV0pICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCgoKF9DT1JCQV9VTG9uZyopIChhICsgaSkp
WzFdKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgICgoX0NPUkJBX1VMb25nKikgKGEgKyBp
KSlbMV0gPSB0bXAwOwogICAgICAoKF9DT1JCQV9VTG9uZyopIChhICsgaSkpWzBdID0gdG1wMTsK
ICAgIH0KfQoKCnRlbXBsYXRlIDxjbGFzcyBidWZfdD4KaW5saW5lIHZvaWQKQ2RyU3RyZWFtSGVs
cGVyX3VubWFyc2hhbEFycmF5TG9uZ0xvbmcoYnVmX3QmIHMsIF9DT1JCQV9Mb25nTG9uZyogYSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkKewogIHMu
Z2V0X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKikgYSwgbGVuZ3RoICogOCwgb21uaTo6QUxJR05f
OCk7CgogIGlmKCBzLlJkTWVzc2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICkK
ICAgIGZvciggaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKQogICAgICBhW2ldID0gKCgoKGFb
aV0pICYgKDB4ZmYwMDAwMDAwMDAwMDAwMExMKSkgPj4gNTYpIHwgKCgoYVtpXSkgJiAoMHgwMGZm
MDAwMDAwMDAwMDAwTEwpKSA+PiA0MCkgfCAoKChhW2ldKSAmICgweDAwMDBmZjAwMDAwMDAwMDBM
TCkpID4+IDI0KSB8ICgoKGFbaV0pICYgKDB4MDAwMDAwZmYwMDAwMDAwMExMKSkgPj4gOCkgfCAo
KChhW2ldKSAmICgweDAwMDAwMDAwZmYwMDAwMDBMTCkpIDw8IDgpIHwgKCgoYVtpXSkgJiAoMHgw
MDAwMDAwMDAwZmYwMDAwTEwpKSA8PCAyNCkgfCAoKChhW2ldKSAmICgweDAwMDAwMDAwMDAwMGZm
MDBMTCkpIDw8IDQwKSB8ICgoKGFbaV0pICYgKDB4MDAwMDAwMDAwMDAwMDBmZkxMKSkgPDwgNTYp
KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBidWZfdD4KaW5saW5lIHZvaWQKQ2RyU3RyZWFtSGVscGVy
X3VubWFyc2hhbEFycmF5VUxvbmdMb25nKGJ1Zl90JiBzLCBfQ09SQkFfVUxvbmdMb25nKiBhLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkKewogIHMu
Z2V0X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKikgYSwgbGVuZ3RoICogOCwgb21uaTo6QUxJR05f
OCk7CgogIGlmKCBzLlJkTWVzc2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICkK
ICAgIGZvciggaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKQogICAgICBhW2ldID0gKCgoKGFb
aV0pICYgKDB4ZmYwMDAwMDAwMDAwMDAwMExMKSkgPj4gNTYpIHwgKCgoYVtpXSkgJiAoMHgwMGZm
MDAwMDAwMDAwMDAwTEwpKSA+PiA0MCkgfCAoKChhW2ldKSAmICgweDAwMDBmZjAwMDAwMDAwMDBM
TCkpID4+IDI0KSB8ICgoKGFbaV0pICYgKDB4MDAwMDAwZmYwMDAwMDAwMExMKSkgPj4gOCkgfCAo
KChhW2ldKSAmICgweDAwMDAwMDAwZmYwMDAwMDBMTCkpIDw8IDgpIHwgKCgoYVtpXSkgJiAoMHgw
MDAwMDAwMDAwZmYwMDAwTEwpKSA8PCAyNCkgfCAoKChhW2ldKSAmICgweDAwMDAwMDAwMDAwMGZm
MDBMTCkpIDw8IDQwKSB8ICgoKGFbaV0pICYgKDB4MDAwMDAwMDAwMDAwMDBmZkxMKSkgPDwgNTYp
KTsKfQojIDk3MyAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL2J1ZmZlcmVkU3RyZWFtLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSB2b2lkCl9DT1JCQV9TZXF1ZW5jZTxUPjo6b3Bl
cmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgOjpvcGVyYXRvcj4+PShf
Q09SQkFfVUxvbmcocGRfbGVuKSwgcyk7CiAgZm9yKCBpbnQgaSA9IDA7IGkgPCAoaW50KXBkX2xl
bjsgaSsrICkKICAgIHBkX2J1ZltpXSA+Pj0gczsKfQoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxp
bmUgdm9pZApfQ09SQkFfU2VxdWVuY2U8VD46Om9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVh
bSYgcykKewogIF9DT1JCQV9VTG9uZyBsOwogIGwgPDw9IHM7CiAgaWYgKGwgPiBzLlJkTWVzc2Fn
ZVVuUmVhZCgpIHx8IChwZF9ib3VuZGVkICYmIGwgPiBwZF9tYXgpKSB7CiAgICBfQ09SQkFfbWFy
c2hhbF9lcnJvcigpOwoKICB9CiAgbGVuZ3RoKGwpOwogIGZvciggX0NPUkJBX1VMb25nIGkgPSAw
OyBpIDwgbDsgaSsrICkKICAgIHBkX2J1ZltpXSA8PD0gczsKfQoKCnRlbXBsYXRlIDxjbGFzcyBU
PgppbmxpbmUgdm9pZApfQ09SQkFfU2VxdWVuY2U8VD46Om9wZXJhdG9yPj49IChNZW1CdWZmZXJl
ZFN0cmVhbSYgcykgY29uc3QKewogIHBkX2xlbiA+Pj0gczsKICBmb3IgKGludCBpPTA7IGk8KGlu
dClwZF9sZW47IGkrKykKICAgIHBkX2J1ZltpXSA+Pj0gczsKfQoKCnRlbXBsYXRlIDxjbGFzcyBU
PgppbmxpbmUgdm9pZApfQ09SQkFfU2VxdWVuY2U8VD46Om9wZXJhdG9yPDw9IChNZW1CdWZmZXJl
ZFN0cmVhbSYgcykKewogIF9DT1JCQV9VTG9uZyBsOwogIGwgPDw9IHM7CiAgaWYgKHMudW5SZWFk
KCkgPCBsIHx8IChwZF9ib3VuZGVkICYmIGwgPiBwZF9tYXgpKSB7CiAgICBfQ09SQkFfbWFyc2hh
bF9lcnJvcigpOwoKICB9CiAgbGVuZ3RoKGwpOwogIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxs
OyBpKyspCiAgICBwZF9idWZbaV0gPDw9IHM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULGludCBlbG1T
aXplLGludCBlbG1BbGlnbm1lbnQ+CmlubGluZQp2b2lkCl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVu
Y2Vfd19GaXhTaXplRWxlbWVudDxULGVsbVNpemUsZWxtQWxpZ25tZW50Pjo6b3BlcmF0b3I+Pj0g
KE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgX0NPUkJBX1VMb25nIGwgPSBCYXNlVDo6
bGVuZ3RoKCk7CiAgbCA+Pj0gczsKICBpZiAobD09MCkgcmV0dXJuOwogIGlmICgoaW50KWVsbUFs
aWdubWVudCA9PSAoaW50KW9tbmk6OkFMSUdOXzgpIHsKICAgIF9DT1JCQV9VTG9uZyBwYWRkaW5n
ID0gMDsKICAgIGlmIChzLndyQ3VycmVudEFsaWdubWVudCgpICE9IChpbnQpb21uaTo6QUxJR05f
OCkKICAgICAgcGFkZGluZyA+Pj0gczsKICB9CiAgcy5wdXRfY2hhcl9hcnJheSgoX0NPUkJBX0No
YXIqKUJhc2VUOjpOUF9kYXRhKCksKGludClsKmVsbVNpemUpOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IFQsaW50IGVsbVNpemUsaW50IGVsbUFsaWdubWVudD4KaW5saW5lCnZvaWQKX0NPUkJBX1VuYm91
bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PFQsZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+Ojpv
cGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfVUxvbmcgbDsKICBs
IDw8PSBzOwogIGlmIChsKmVsbVNpemUgPiBzLlJkTWVzc2FnZVVuUmVhZCgpKSB7CiAgICBfQ09S
QkFfbWFyc2hhbF9lcnJvcigpOwoKICB9CiAgQmFzZVQ6Omxlbmd0aChsKTsKICBpZiAobD09MCkg
cmV0dXJuOwogIGlmICgoaW50KWVsbUFsaWdubWVudCA9PSAoaW50KW9tbmk6OkFMSUdOXzgpIHsK
ICAgIGlmIChzLnJkQ3VycmVudEFsaWdubWVudCgpICE9IChpbnQpb21uaTo6QUxJR05fOCkKICAg
ICAgcy5za2lwKHNpemVvZihfQ09SQkFfVUxvbmcpKTsKICB9CiAgcy5nZXRfY2hhcl9hcnJheSgo
X0NPUkJBX0NoYXIqKUJhc2VUOjpOUF9kYXRhKCksKGludClsKmVsbVNpemUpOwogIGlmIChzLlJk
TWVzc2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICYmIGVsbUFsaWdubWVudCAh
PSAxKSB7CiAgICBpZiAoZWxtU2l6ZSA9PSAyKSB7CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGk9
MDsgaTxsOyBpKyspIHsKICAgICAgICBfQ09SQkFfVVNob3J0IHQgPSAoKF9DT1JCQV9VU2hvcnQq
KUJhc2VUOjpOUF9kYXRhKCkpW2ldOwogICAgICAgICgoX0NPUkJBX1VTaG9ydCopQmFzZVQ6Ok5Q
X2RhdGEoKSlbaV0gPSAoKCgodCkgJiAweGZmKSA8PCA4KSB8ICgoKHQpID4+IDgpICYgMHhmZikp
OwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChlbG1TaXplID09IDQpIHsKICAgICAgZm9yIChf
Q09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAgICAgIF9DT1JCQV9VTG9uZyB0ID0gKChf
Q09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldOwogICAgICAgICgoX0NPUkJBX1VMb25n
KilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9ICgoKCh0KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgo
KHQpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgo
dCkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChlbG1T
aXplID09IDgpIHsKICAgICAgbCAqPSAyOwogICAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGk8
bDsgaSs9MikgewogICAgICAgIF9DT1JCQV9VTG9uZyB0bDEgPSAoKF9DT1JCQV9VTG9uZyopQmFz
ZVQ6Ok5QX2RhdGEoKSlbaSsxXTsKICAgICAgICBfQ09SQkFfVUxvbmcgdGwyID0gKCgoKHRsMSkg
JiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0bDEpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0
bDEpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0bDEpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsK
ICAgICAgICB0bDEgPSAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07CiAgICAg
ICAgKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldID0gdGwyOwogICAgICAgICgo
X0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpKzFdID0gKCgoKHRsMSkgJiAweGZmMDAw
MDAwKSA+PiAyNCkgfCAoKCh0bDEpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0bDEpICYgMHgw
MDAwZmYwMCkgPDwgOCkgfCAoKCh0bDEpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAgfQog
ICAgfQogIH0KfQoKCnRlbXBsYXRlIDxjbGFzcyBULGludCBlbG1TaXplLGludCBlbG1BbGlnbm1l
bnQ+CmlubGluZQp2b2lkCl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVu
dDxULGVsbVNpemUsZWxtQWxpZ25tZW50Pjo6b3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFt
JiBzKSBjb25zdAp7CiAgX0NPUkJBX1VMb25nIGwgPSBCYXNlVDo6bGVuZ3RoKCk7CiAgbCA+Pj0g
czsKICBpZiAobD09MCkgcmV0dXJuOwogIGlmICgoaW50KWVsbUFsaWdubWVudCA9PSAoaW50KW9t
bmk6OkFMSUdOXzgpIHsKICAgIF9DT1JCQV9VTG9uZyBwYWRkaW5nID0gMDsKICAgIGlmIChzLndy
Q3VycmVudEFsaWdubWVudCgpICE9IChpbnQpb21uaTo6QUxJR05fOCkKICAgICAgcGFkZGluZyA+
Pj0gczsKICB9CiAgcy5wdXRfY2hhcl9hcnJheSgoX0NPUkJBX0NoYXIqKUJhc2VUOjpOUF9kYXRh
KCksKGludClsKmVsbVNpemUpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQsaW50IGVsbVNpemUsaW50
IGVsbUFsaWdubWVudD4KaW5saW5lCnZvaWQKX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0Zp
eFNpemVFbGVtZW50PFQsZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVyYXRvcjw8PSAoTWVtQnVm
ZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfVUxvbmcgbDsKICBsIDw8PSBzOwogIGlmIChzLnVu
UmVhZCgpIDwgKGwqZWxtU2l6ZSkpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CgogIH0K
ICBCYXNlVDo6bGVuZ3RoKGwpOwogIGlmIChsPT0wKSByZXR1cm47CiAgaWYgKChpbnQpZWxtQWxp
Z25tZW50ID09IChpbnQpb21uaTo6QUxJR05fOCkgewogICAgaWYgKHMucmRDdXJyZW50QWxpZ25t
ZW50KCkgIT0gKGludClvbW5pOjpBTElHTl84KQogICAgICBzLnNraXAoc2l6ZW9mKF9DT1JCQV9V
TG9uZykpOwogIH0KICBzLmdldF9jaGFyX2FycmF5KChfQ09SQkFfQ2hhciopQmFzZVQ6Ok5QX2Rh
dGEoKSwoaW50KWwqZWxtU2l6ZSk7CiAgaWYgKHMuYnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRl
T3JkZXIgJiYgZWxtQWxpZ25tZW50ICE9IDEpIHsKICAgIGlmIChlbG1TaXplID09IDIpIHsKICAg
ICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAgICAgIF9DT1JCQV9VU2hv
cnQgdCA9ICgoX0NPUkJBX1VTaG9ydCopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07CiAgICAgICAgKChf
Q09SQkFfVVNob3J0KilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9ICgoKCh0KSAmIDB4ZmYpIDw8IDgp
IHwgKCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGVsbVNp
emUgPT0gNCkgewogICAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGk8bDsgaSsrKSB7CiAgICAg
ICAgX0NPUkJBX1VMb25nIHQgPSAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07
CiAgICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldID0gKCgoKHQpICYg
MHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodCkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHQpICYg
MHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIH0K
ICAgIH0KICAgIGVsc2UgaWYgKGVsbVNpemUgPT0gOCkgewogICAgICBsICo9IDI7CiAgICAgIGZv
ciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKz0yKSB7CiAgICAgICAgX0NPUkJBX1VMb25nIHRs
MSA9ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpKzFdOwogICAgICAgIF9DT1JC
QV9VTG9uZyB0bDIgPSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAw
eDAwZmYwMDAwKSA+PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkg
JiAweDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICAgIHRsMSA9ICgoX0NPUkJBX1VMb25nKilCYXNl
VDo6TlBfZGF0YSgpKVtpXTsKICAgICAgICAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEo
KSlbaV0gPSB0bDI7CiAgICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2kr
MV0gPSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAwZmYwMDAw
KSA+PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAweDAwMDAw
MGZmKSA8PCAyNCkpOwogICAgICB9CiAgICB9CiAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIFQsaW50
IG1heCxpbnQgZWxtU2l6ZSwgaW50IGVsbUFsaWdubWVudD4KaW5saW5lCnZvaWQKX0NPUkJBX0Jv
dW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDxULG1heCxlbG1TaXplLGVsbUFsaWdubWVu
dD46Om9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSYgcykgY29uc3QKewogIF9DT1JCQV9V
TG9uZyBsID0gQmFzZVQ6Omxlbmd0aCgpOwogIGwgPj49IHM7CiAgaWYgKGw9PTApIHJldHVybjsK
ICBpZiAoKGludCllbG1BbGlnbm1lbnQgPT0gKGludClvbW5pOjpBTElHTl84KSB7CiAgICBfQ09S
QkFfVUxvbmcgcGFkZGluZyA9IDA7CiAgICBpZiAocy53ckN1cnJlbnRBbGlnbm1lbnQoKSAhPSAo
aW50KW9tbmk6OkFMSUdOXzgpCiAgICAgIHBhZGRpbmcgPj49IHM7CiAgfQogIHMucHV0X2NoYXJf
YXJyYXkoKF9DT1JCQV9DaGFyKilCYXNlVDo6TlBfZGF0YSgpLChpbnQpbCplbG1TaXplKTsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBULGludCBtYXgsaW50IGVsbVNpemUsIGludCBlbG1BbGlnbm1lbnQ+
CmlubGluZQp2b2lkCl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8VCxt
YXgsZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0m
IHMpCnsKICBfQ09SQkFfVUxvbmcgbDsKICBsIDw8PSBzOwogIGlmIChsKmVsbVNpemUgPiBzLlJk
TWVzc2FnZVVuUmVhZCgpIHx8IGwgPiBtYXgpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7
CgogIH0KCiAgQmFzZVQ6Omxlbmd0aChsKTsKICBpZiAobD09MCkgcmV0dXJuOwogIGlmICgoaW50
KWVsbUFsaWdubWVudCA9PSAoaW50KW9tbmk6OkFMSUdOXzgpIHsKICAgIGlmIChzLnJkQ3VycmVu
dEFsaWdubWVudCgpICE9IChpbnQpb21uaTo6QUxJR05fOCkKICAgICAgcy5za2lwKHNpemVvZihf
Q09SQkFfVUxvbmcpKTsKICB9CiAgcy5nZXRfY2hhcl9hcnJheSgoX0NPUkJBX0NoYXIqKUJhc2VU
OjpOUF9kYXRhKCksKGludClsKmVsbVNpemUpOwogIGlmIChzLlJkTWVzc2FnZUJ5dGVPcmRlcigp
ICE9IG9tbmk6Om15Qnl0ZU9yZGVyICYmIGVsbUFsaWdubWVudCAhPSAxKSB7CiAgICBpZiAoZWxt
U2l6ZSA9PSAyKSB7CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKyspIHsKICAg
ICAgICBfQ09SQkFfVVNob3J0IHQgPSAoKF9DT1JCQV9VU2hvcnQqKUJhc2VUOjpOUF9kYXRhKCkp
W2ldOwogICAgICAgICgoX0NPUkJBX1VTaG9ydCopQmFzZVQ6Ok5QX2RhdGEoKSlbaV0gPSAoKCgo
dCkgJiAweGZmKSA8PCA4KSB8ICgoKHQpID4+IDgpICYgMHhmZikpOwogICAgICB9CiAgICB9CiAg
ICBlbHNlIGlmIChlbG1TaXplID09IDQpIHsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBp
PGw7IGkrKykgewogICAgICAgIF9DT1JCQV9VTG9uZyB0ID0gKChfQ09SQkFfVUxvbmcqKUJhc2VU
OjpOUF9kYXRhKCkpW2ldOwogICAgICAgICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgp
KVtpXSA9ICgoKCh0KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHQpICYgMHgwMGZmMDAwMCkg
Pj4gOCkgfCAoKCh0KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodCkgJiAweDAwMDAwMGZmKSA8
PCAyNCkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChlbG1TaXplID09IDgpIHsKICAgICAg
bCAqPSAyOwogICAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGk8bDsgaSs9MikgewogICAgICAg
IF9DT1JCQV9VTG9uZyB0bDEgPSAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaSsx
XTsKICAgICAgICBfQ09SQkFfVUxvbmcgdGwyID0gKCgoKHRsMSkgJiAweGZmMDAwMDAwKSA+PiAy
NCkgfCAoKCh0bDEpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0bDEpICYgMHgwMDAwZmYwMCkg
PDwgOCkgfCAoKCh0bDEpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAgICB0bDEgPSAoKF9D
T1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07CiAgICAgICAgKChfQ09SQkFfVUxvbmcq
KUJhc2VUOjpOUF9kYXRhKCkpW2ldID0gdGwyOwogICAgICAgICgoX0NPUkJBX1VMb25nKilCYXNl
VDo6TlBfZGF0YSgpKVtpKzFdID0gKCgoKHRsMSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0
bDEpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0bDEpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAo
KCh0bDEpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAgfQogICAgfQogIH0KfQoKCnRlbXBs
YXRlIDxjbGFzcyBULGludCBtYXgsaW50IGVsbVNpemUsIGludCBlbG1BbGlnbm1lbnQ+CmlubGlu
ZQp2b2lkCl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8VCxtYXgsZWxt
U2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIGNv
bnN0CnsKICBfQ09SQkFfVUxvbmcgbCA9IEJhc2VUOjpsZW5ndGgoKTsKICBsID4+PSBzOwogIGlm
IChsPT0wKSByZXR1cm47CiAgaWYgKChpbnQpZWxtQWxpZ25tZW50ID09IChpbnQpb21uaTo6QUxJ
R05fOCkgewogICAgX0NPUkJBX1VMb25nIHBhZGRpbmcgPSAwOwogICAgaWYgKHMud3JDdXJyZW50
QWxpZ25tZW50KCkgIT0gKGludClvbW5pOjpBTElHTl84KQogICAgICBwYWRkaW5nID4+PSBzOwog
IH0KICBzLnB1dF9jaGFyX2FycmF5KChfQ09SQkFfQ2hhciopQmFzZVQ6Ok5QX2RhdGEoKSwoaW50
KWwqZWxtU2l6ZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxpbnQgbWF4LGludCBlbG1TaXplLCBp
bnQgZWxtQWxpZ25tZW50PgppbmxpbmUKdm9pZApfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV93X0Zp
eFNpemVFbGVtZW50PFQsbWF4LGVsbVNpemUsZWxtQWxpZ25tZW50Pjo6b3BlcmF0b3I8PD0gKE1l
bUJ1ZmZlcmVkU3RyZWFtJiBzKQp7CiAgX0NPUkJBX1VMb25nIGw7CiAgbCA8PD0gczsKICBpZiAo
KHMudW5SZWFkKCkgPCAobCplbG1TaXplKSkgfHwgbCA+IG1heCkgewogICAgX0NPUkJBX21hcnNo
YWxfZXJyb3IoKTsKCiAgfQoKICBCYXNlVDo6bGVuZ3RoKGwpOwogIGlmIChsPT0wKSByZXR1cm47
CiAgaWYgKChpbnQpZWxtQWxpZ25tZW50ID09IChpbnQpb21uaTo6QUxJR05fOCkgewogICAgaWYg
KHMucmRDdXJyZW50QWxpZ25tZW50KCkgIT0gKGludClvbW5pOjpBTElHTl84KQogICAgICBzLnNr
aXAoc2l6ZW9mKF9DT1JCQV9VTG9uZykpOwogIH0KICBzLmdldF9jaGFyX2FycmF5KChfQ09SQkFf
Q2hhciopQmFzZVQ6Ok5QX2RhdGEoKSwoaW50KWwqZWxtU2l6ZSk7CiAgaWYgKHMuYnl0ZU9yZGVy
KCkgIT0gb21uaTo6bXlCeXRlT3JkZXIgJiYgZWxtQWxpZ25tZW50ICE9IDEpIHsKICAgIGlmIChl
bG1TaXplID09IDIpIHsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewog
ICAgICAgIF9DT1JCQV9VU2hvcnQgdCA9ICgoX0NPUkJBX1VTaG9ydCopQmFzZVQ6Ok5QX2RhdGEo
KSlbaV07CiAgICAgICAgKChfQ09SQkFfVVNob3J0KilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9ICgo
KCh0KSAmIDB4ZmYpIDw8IDgpIHwgKCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICAgIH0KICAgIH0K
ICAgIGVsc2UgaWYgKGVsbVNpemUgPT0gNCkgewogICAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7
IGk8bDsgaSsrKSB7CiAgICAgICAgX0NPUkJBX1VMb25nIHQgPSAoKF9DT1JCQV9VTG9uZyopQmFz
ZVQ6Ok5QX2RhdGEoKSlbaV07CiAgICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRh
KCkpW2ldID0gKCgoKHQpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodCkgJiAweDAwZmYwMDAw
KSA+PiA4KSB8ICgoKHQpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0KSAmIDB4MDAwMDAwZmYp
IDw8IDI0KSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGVsbVNpemUgPT0gOCkgewogICAg
ICBsICo9IDI7CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKz0yKSB7CiAgICAg
ICAgX0NPUkJBX1VMb25nIHRsMSA9ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtp
KzFdOwogICAgICAgIF9DT1JCQV9VTG9uZyB0bDIgPSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+
IDI0KSB8ICgoKHRsMSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAw
KSA8PCA4KSB8ICgoKHRsMSkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICAgIHRsMSA9ICgo
X0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXTsKICAgICAgICAoKF9DT1JCQV9VTG9u
ZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV0gPSB0bDI7CiAgICAgICAgKChfQ09SQkFfVUxvbmcqKUJh
c2VUOjpOUF9kYXRhKCkpW2krMV0gPSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgo
KHRsMSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8
ICgoKHRsMSkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICB9CiAgICB9CiAgfQp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfc2xpY2UsY2xhc3MgVGVsbSxpbnQgZGltZW5zaW9uPgpp
bmxpbmUgdm9pZApfQ09SQkFfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9u
Pjo6b3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgcGRfbGVuID4+
PSBzOwogIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxwZF9sZW47IGkrKykgewogICAgZm9yIChf
Q09SQkFfVUxvbmcgaj0wOyBqPGRpbWVuc2lvbjsgaisrKSB7CiAgICAgICooKFRlbG0qKShwZF9i
dWZbaV0pK2opID4+PSBzOwogICAgfQogIH0KICByZXR1cm47Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
VCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0saW50IGRpbWVuc2lvbj4KaW5saW5lIHZvaWQKX0NP
UkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj46Om9wZXJhdG9yPDw9
IChOZXRCdWZmZXJlZFN0cmVhbSYgcykKewogIF9DT1JCQV9VTG9uZyBsOwogIGwgPDw9IHM7CiAg
aWYgKGwgPiBzLlJkTWVzc2FnZVVuUmVhZCgpIHx8IChwZF9ib3VuZGVkICYmIGwgPiBwZF9tYXgp
KSB7CiAgICBfQ09SQkFfbWFyc2hhbF9lcnJvcigpOwoKICB9CiAgbGVuZ3RoKGwpOwogIGZvciAo
X0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKyspIHsKICAgIGZvciAoX0NPUkJBX1VMb25nIGo9MDsg
ajxkaW1lbnNpb247IGorKykgewogICAgICAqKChUZWxtKikocGRfYnVmW2ldKStqKSA8PD0gczsK
ICAgIH0KICB9CiAgcmV0dXJuOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQsY2xhc3MgVF9zbGljZSxj
bGFzcyBUZWxtLGludCBkaW1lbnNpb24+CmlubGluZSB2b2lkCl9DT1JCQV9TZXF1ZW5jZV9BcnJh
eTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+OjpvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJl
YW0mIHMpIGNvbnN0CnsKICBwZF9sZW4gPj49IHM7CiAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBp
PHBkX2xlbjsgaSsrKSB7CiAgICBmb3IgKF9DT1JCQV9VTG9uZyBqPTA7IGo8ZGltZW5zaW9uOyBq
KyspIHsKICAgICAgKigoVGVsbSopKHBkX2J1ZltpXSkraikgPj49IHM7CiAgICB9CiAgfQogIHJl
dHVybjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfc2xpY2UsY2xhc3MgVGVsbSxpbnQg
ZGltZW5zaW9uPgppbmxpbmUgdm9pZApfQ09SQkFfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRl
bG0sZGltZW5zaW9uPjo6b3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKQp7CiAgX0NP
UkJBX1VMb25nIGw7CiAgbCA8PD0gczsKICBpZiAocy51blJlYWQoKSA8IGwgfHwgKHBkX2JvdW5k
ZWQgJiYgbCA+IHBkX21heCkpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CgogIH0KICBs
ZW5ndGgobCk7CiAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAgZm9yIChf
Q09SQkFfVUxvbmcgaj0wOyBqPGRpbWVuc2lvbjsgaisrKSB7CiAgICAgICooKFRlbG0qKShwZF9i
dWZbaV0pK2opIDw8PSBzOwogICAgfQogIH0KICByZXR1cm47Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
VCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0saW50IGRpbWVuc2lvbixpbnQgZWxtU2l6ZSxpbnQg
ZWxtQWxpZ25tZW50PgppbmxpbmUKdm9pZApfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5
X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uLGVsbVNpemUsZWxtQWxp
Z25tZW50Pjo6b3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgX0NP
UkJBX1VMb25nIGwgPSBCYXNlVDo6bGVuZ3RoKCk7CiAgbCA+Pj0gczsKICBpZiAobD09MCkgcmV0
dXJuOwogIGlmICgoaW50KWVsbUFsaWdubWVudCA9PSAoaW50KW9tbmk6OkFMSUdOXzgpIHsKICAg
IF9DT1JCQV9VTG9uZyBwYWRkaW5nID0gMDsKICAgIGlmIChzLndyQ3VycmVudEFsaWdubWVudCgp
ICE9IChpbnQpb21uaTo6QUxJR05fOCkKICAgICAgcGFkZGluZyA+Pj0gczsKICB9CiAgcy5wdXRf
Y2hhcl9hcnJheSgoX0NPUkJBX0NoYXIqKUJhc2VUOjpOUF9kYXRhKCksKGludClsKmRpbWVuc2lv
biplbG1TaXplKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfc2xpY2UsY2xhc3MgVGVs
bSxpbnQgZGltZW5zaW9uLGludCBlbG1TaXplLGludCBlbG1BbGlnbm1lbnQ+CmlubGluZQp2b2lk
Cl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudDxULFRfc2xp
Y2UsVGVsbSxkaW1lbnNpb24sZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVyYXRvcjw8PSAoTmV0
QnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfVUxvbmcgbDsKICBsIDw8PSBzOwogIGlmIChs
KmRpbWVuc2lvbiplbG1TaXplID4gcy5SZE1lc3NhZ2VVblJlYWQoKSkgewogICAgX0NPUkJBX21h
cnNoYWxfZXJyb3IoKTsKCiAgfQogIEJhc2VUOjpsZW5ndGgobCk7CiAgaWYgKGw9PTApIHJldHVy
bjsKICBpZiAoKGludCllbG1BbGlnbm1lbnQgPT0gKGludClvbW5pOjpBTElHTl84KSB7CiAgICBp
ZiAocy5yZEN1cnJlbnRBbGlnbm1lbnQoKSAhPSAoaW50KW9tbmk6OkFMSUdOXzgpCiAgICAgIHMu
c2tpcChzaXplb2YoX0NPUkJBX1VMb25nKSk7CiAgfQogIHMuZ2V0X2NoYXJfYXJyYXkoKF9DT1JC
QV9DaGFyKilCYXNlVDo6TlBfZGF0YSgpLChpbnQpbCpkaW1lbnNpb24qZWxtU2l6ZSk7CiAgaWYg
KHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIgJiYgZWxtQWxpZ25t
ZW50ICE9IDEpIHsKICAgIGlmIChlbG1TaXplID09IDIpIHsKICAgICAgbCAqPSBkaW1lbnNpb247
CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKyspIHsKICAgICAgICBfQ09SQkFf
VVNob3J0IHQgPSAoKF9DT1JCQV9VU2hvcnQqKUJhc2VUOjpOUF9kYXRhKCkpW2ldOwogICAgICAg
ICgoX0NPUkJBX1VTaG9ydCopQmFzZVQ6Ok5QX2RhdGEoKSlbaV0gPSAoKCgodCkgJiAweGZmKSA8
PCA4KSB8ICgoKHQpID4+IDgpICYgMHhmZikpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChl
bG1TaXplID09IDQpIHsKICAgICAgbCAqPSBkaW1lbnNpb247CiAgICAgIGZvciAoX0NPUkJBX1VM
b25nIGk9MDsgaTxsOyBpKyspIHsKICAgICAgICBfQ09SQkFfVUxvbmcgdCA9ICgoX0NPUkJBX1VM
b25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXTsKICAgICAgICAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6
Ok5QX2RhdGEoKSlbaV0gPSAoKCgodCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0KSAmIDB4
MDBmZjAwMDApID4+IDgpIHwgKCgodCkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHQpICYgMHgw
MDAwMDBmZikgPDwgMjQpKTsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoZWxtU2l6ZSA9PSA4
KSB7CiAgICAgIGwgKj0gMipkaW1lbnNpb247CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsg
aTxsOyBpKz0yKSB7CiAgICAgICAgX0NPUkJBX1VMb25nIHRsMSA9ICgoX0NPUkJBX1VMb25nKilC
YXNlVDo6TlBfZGF0YSgpKVtpKzFdOwogICAgICAgIF9DT1JCQV9VTG9uZyB0bDIgPSAoKCgodGwx
KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgo
KHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAweDAwMDAwMGZmKSA8PCAyNCkp
OwogICAgICAgIHRsMSA9ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXTsKICAg
ICAgICAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV0gPSB0bDI7CiAgICAgICAg
KChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2krMV0gPSAoKCgodGwxKSAmIDB4ZmYw
MDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHRsMSkgJiAw
eDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICB9
CiAgICB9CiAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIFQsY2xhc3MgVF9zbGljZSxjbGFzcyBUZWxt
LGludCBkaW1lbnNpb24saW50IGVsbVNpemUsaW50IGVsbUFsaWdubWVudD4KaW5saW5lCnZvaWQK
X0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGlj
ZSxUZWxtLGRpbWVuc2lvbixlbG1TaXplLGVsbUFsaWdubWVudD46Om9wZXJhdG9yPj49IChNZW1C
dWZmZXJlZFN0cmVhbSYgcykgY29uc3QKewogIF9DT1JCQV9VTG9uZyBsID0gQmFzZVQ6Omxlbmd0
aCgpOwogIGwgPj49IHM7CiAgaWYgKGw9PTApIHJldHVybjsKICBpZiAoKGludCllbG1BbGlnbm1l
bnQgPT0gKGludClvbW5pOjpBTElHTl84KSB7CiAgICBfQ09SQkFfVUxvbmcgcGFkZGluZyA9IDA7
CiAgICBpZiAocy53ckN1cnJlbnRBbGlnbm1lbnQoKSAhPSAoaW50KW9tbmk6OkFMSUdOXzgpCiAg
ICAgIHBhZGRpbmcgPj49IHM7CiAgfQogIHMucHV0X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKilC
YXNlVDo6TlBfZGF0YSgpLChpbnQpbCpkaW1lbnNpb24qZWxtU2l6ZSk7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgVCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0saW50IGRpbWVuc2lvbixpbnQgZWxtU2l6
ZSxpbnQgZWxtQWxpZ25tZW50PgppbmxpbmUKdm9pZApfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNl
X0FycmF5X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uLGVsbVNpemUs
ZWxtQWxpZ25tZW50Pjo6b3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKQp7CiAgX0NP
UkJBX1VMb25nIGw7CiAgbCA8PD0gczsKICBpZiggcy51blJlYWQoKSA8IGwgKiBkaW1lbnNpb24g
KiBlbG1TaXplICkgewogICAgX0NPUkJBX21hcnNoYWxfZXJyb3IoKTsKCiAgfQogIEJhc2VUOjps
ZW5ndGgobCk7CiAgaWYgKGw9PTApIHJldHVybjsKICBpZiAoKGludCllbG1BbGlnbm1lbnQgPT0g
KGludClvbW5pOjpBTElHTl84KSB7CiAgICBpZiAocy5yZEN1cnJlbnRBbGlnbm1lbnQoKSAhPSAo
aW50KW9tbmk6OkFMSUdOXzgpCiAgICAgIHMuc2tpcChzaXplb2YoX0NPUkJBX1VMb25nKSk7CiAg
fQogIHMuZ2V0X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKilCYXNlVDo6TlBfZGF0YSgpLChpbnQp
bCpkaW1lbnNpb24qZWxtU2l6ZSk7CiAgaWYgKHMuYnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRl
T3JkZXIgJiYgZWxtQWxpZ25tZW50ICE9IDEpIHsKICAgIGlmIChlbG1TaXplID09IDIpIHsKICAg
ICAgbCAqPSBkaW1lbnNpb247CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKysp
IHsKICAgICAgICBfQ09SQkFfVVNob3J0IHQgPSAoKF9DT1JCQV9VU2hvcnQqKUJhc2VUOjpOUF9k
YXRhKCkpW2ldOwogICAgICAgICgoX0NPUkJBX1VTaG9ydCopQmFzZVQ6Ok5QX2RhdGEoKSlbaV0g
PSAoKCgodCkgJiAweGZmKSA8PCA4KSB8ICgoKHQpID4+IDgpICYgMHhmZikpOwogICAgICB9CiAg
ICB9CiAgICBlbHNlIGlmIChlbG1TaXplID09IDQpIHsKICAgICAgbCAqPSBkaW1lbnNpb247CiAg
ICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKyspIHsKICAgICAgICBfQ09SQkFfVUxv
bmcgdCA9ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXTsKICAgICAgICAoKF9D
T1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV0gPSAoKCgodCkgJiAweGZmMDAwMDAwKSA+
PiAyNCkgfCAoKCh0KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodCkgJiAweDAwMDBmZjAwKSA8
PCA4KSB8ICgoKHQpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAgfQogICAgfQogICAgZWxz
ZSBpZiAoZWxtU2l6ZSA9PSA4KSB7CiAgICAgIGwgKj0gMipkaW1lbnNpb247CiAgICAgIGZvciAo
X0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKz0yKSB7CiAgICAgICAgX0NPUkJBX1VMb25nIHRsMSA9
ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpKzFdOwogICAgICAgIF9DT1JCQV9V
TG9uZyB0bDIgPSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAw
ZmYwMDAwKSA+PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAw
eDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICAgIHRsMSA9ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6
TlBfZGF0YSgpKVtpXTsKICAgICAgICAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlb
aV0gPSB0bDI7CiAgICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2krMV0g
PSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAwZmYwMDAwKSA+
PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAweDAwMDAwMGZm
KSA8PCAyNCkpOwogICAgICB9CiAgICB9CiAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIFQsY2xhc3Mg
VF9zbGljZSxjbGFzcyBUZWxtLGludCBkaW1lbnNpb24saW50IG1heCxpbnQgZWxtU2l6ZSwgaW50
IGVsbUFsaWdubWVudD4KaW5saW5lCnZvaWQKX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlf
d19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24sbWF4LGVsbVNpemUsZWxt
QWxpZ25tZW50Pjo6b3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7CiAg
X0NPUkJBX1VMb25nIGwgPSBCYXNlVDo6bGVuZ3RoKCk7CiAgbCA+Pj0gczsKICBpZiAobD09MCkg
cmV0dXJuOwogIGlmICgoaW50KWVsbUFsaWdubWVudCA9PSAoaW50KW9tbmk6OkFMSUdOXzgpIHsK
ICAgIF9DT1JCQV9VTG9uZyBwYWRkaW5nID0gMDsKICAgIGlmIChzLndyQ3VycmVudEFsaWdubWVu
dCgpICE9IChpbnQpb21uaTo6QUxJR05fOCkKICAgICAgcGFkZGluZyA+Pj0gczsKICB9CiAgcy5w
dXRfY2hhcl9hcnJheSgoX0NPUkJBX0NoYXIqKUJhc2VUOjpOUF9kYXRhKCksKGludClsKmRpbWVu
c2lvbiplbG1TaXplKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfc2xpY2UsY2xhc3Mg
VGVsbSxpbnQgZGltZW5zaW9uLGludCBtYXgsaW50IGVsbVNpemUsIGludCBlbG1BbGlnbm1lbnQ+
CmlubGluZQp2b2lkCl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1l
bnQ8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uLG1heCxlbG1TaXplLGVsbUFsaWdubWVudD46Om9w
ZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSYgcykKewogIF9DT1JCQV9VTG9uZyBsOwogIGwg
PDw9IHM7CiAgaWYgKGwqZGltZW5zaW9uKmVsbVNpemUgPiBzLlJkTWVzc2FnZVVuUmVhZCgpIHx8
IGwgPiBtYXgpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CgogIH0KCiAgQmFzZVQ6Omxl
bmd0aChsKTsKICBpZiAobD09MCkgcmV0dXJuOwogIGlmICgoaW50KWVsbUFsaWdubWVudCA9PSAo
aW50KW9tbmk6OkFMSUdOXzgpIHsKICAgIGlmIChzLnJkQ3VycmVudEFsaWdubWVudCgpICE9IChp
bnQpb21uaTo6QUxJR05fOCkKICAgICAgcy5za2lwKHNpemVvZihfQ09SQkFfVUxvbmcpKTsKICB9
CiAgcy5nZXRfY2hhcl9hcnJheSgoX0NPUkJBX0NoYXIqKUJhc2VUOjpOUF9kYXRhKCksKGludCls
KmRpbWVuc2lvbiplbG1TaXplKTsKICBpZiAocy5SZE1lc3NhZ2VCeXRlT3JkZXIoKSAhPSBvbW5p
OjpteUJ5dGVPcmRlciAmJiBlbG1BbGlnbm1lbnQgIT0gMSkgewogICAgaWYgKGVsbVNpemUgPT0g
MikgewogICAgICBsICo9IGRpbWVuc2lvbjsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBp
PGw7IGkrKykgewogICAgICAgIF9DT1JCQV9VU2hvcnQgdCA9ICgoX0NPUkJBX1VTaG9ydCopQmFz
ZVQ6Ok5QX2RhdGEoKSlbaV07CiAgICAgICAgKChfQ09SQkFfVVNob3J0KilCYXNlVDo6TlBfZGF0
YSgpKVtpXSA9ICgoKCh0KSAmIDB4ZmYpIDw8IDgpIHwgKCgodCkgPj4gOCkgJiAweGZmKSk7CiAg
ICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGVsbVNpemUgPT0gNCkgewogICAgICBsICo9IGRpbWVu
c2lvbjsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAgICAgIF9D
T1JCQV9VTG9uZyB0ID0gKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldOwogICAg
ICAgICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9ICgoKCh0KSAmIDB4ZmYw
MDAwMDApID4+IDI0KSB8ICgoKHQpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0KSAmIDB4MDAw
MGZmMDApIDw8IDgpIHwgKCgodCkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICB9CiAgICB9
CiAgICBlbHNlIGlmIChlbG1TaXplID09IDgpIHsKICAgICAgbCAqPSAyKmRpbWVuc2lvbjsKICAg
ICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrPTIpIHsKICAgICAgICBfQ09SQkFfVUxv
bmcgdGwxID0gKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2krMV07CiAgICAgICAg
X0NPUkJBX1VMb25nIHRsMiA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodGwx
KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgo
dGwxKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgICAgdGwxID0gKChfQ09SQkFfVUxvbmcq
KUJhc2VUOjpOUF9kYXRhKCkpW2ldOwogICAgICAgICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBf
ZGF0YSgpKVtpXSA9IHRsMjsKICAgICAgICAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEo
KSlbaSsxXSA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4MDBm
ZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGwxKSAmIDB4
MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIH0KICAgIH0KICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
VCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0saW50IGRpbWVuc2lvbixpbnQgbWF4LGludCBlbG1T
aXplLCBpbnQgZWxtQWxpZ25tZW50PgppbmxpbmUKdm9pZApfQ09SQkFfQm91bmRlZF9TZXF1ZW5j
ZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbixtYXgsZWxt
U2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIGNv
bnN0CnsKICBfQ09SQkFfVUxvbmcgbCA9IEJhc2VUOjpsZW5ndGgoKTsKICBsID4+PSBzOwogIGlm
IChsPT0wKSByZXR1cm47CiAgaWYgKChpbnQpZWxtQWxpZ25tZW50ID09IChpbnQpb21uaTo6QUxJ
R05fOCkgewogICAgX0NPUkJBX1VMb25nIHBhZGRpbmcgPSAwOwogICAgaWYgKHMud3JDdXJyZW50
QWxpZ25tZW50KCkgIT0gKGludClvbW5pOjpBTElHTl84KQogICAgICBwYWRkaW5nID4+PSBzOwog
IH0KICBzLnB1dF9jaGFyX2FycmF5KChfQ09SQkFfQ2hhciopQmFzZVQ6Ok5QX2RhdGEoKSwoaW50
KWwqZGltZW5zaW9uKmVsbVNpemUpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQsY2xhc3MgVF9zbGlj
ZSxjbGFzcyBUZWxtLGludCBkaW1lbnNpb24saW50IG1heCxpbnQgZWxtU2l6ZSwgaW50IGVsbUFs
aWdubWVudD4KaW5saW5lCnZvaWQKX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhT
aXplRWxlbWVudDxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24sbWF4LGVsbVNpemUsZWxtQWxpZ25t
ZW50Pjo6b3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKQp7CiAgX0NPUkJBX1VMb25n
IGw7CiAgbCA8PD0gczsKICBpZiAoKHMudW5SZWFkKCkgPCAobCpkaW1lbnNpb24qZWxtU2l6ZSkp
IHx8IGwgPiBtYXgpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CgogIH0KCiAgQmFzZVQ6
Omxlbmd0aChsKTsKICBpZiAobD09MCkgcmV0dXJuOwogIGlmICgoaW50KWVsbUFsaWdubWVudCA9
PSAoaW50KW9tbmk6OkFMSUdOXzgpIHsKICAgIGlmIChzLnJkQ3VycmVudEFsaWdubWVudCgpICE9
IChpbnQpb21uaTo6QUxJR05fOCkKICAgICAgcy5za2lwKHNpemVvZihfQ09SQkFfVUxvbmcpKTsK
ICB9CiAgcy5nZXRfY2hhcl9hcnJheSgoX0NPUkJBX0NoYXIqKUJhc2VUOjpOUF9kYXRhKCksKGlu
dClsKmRpbWVuc2lvbiplbG1TaXplKTsKICBpZiAocy5ieXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5
dGVPcmRlciAmJiBlbG1BbGlnbm1lbnQgIT0gMSkgewogICAgaWYgKGVsbVNpemUgPT0gMikgewog
ICAgICBsICo9IGRpbWVuc2lvbjsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkr
KykgewogICAgICAgIF9DT1JCQV9VU2hvcnQgdCA9ICgoX0NPUkJBX1VTaG9ydCopQmFzZVQ6Ok5Q
X2RhdGEoKSlbaV07CiAgICAgICAgKChfQ09SQkFfVVNob3J0KilCYXNlVDo6TlBfZGF0YSgpKVtp
XSA9ICgoKCh0KSAmIDB4ZmYpIDw8IDgpIHwgKCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICAgIH0K
ICAgIH0KICAgIGVsc2UgaWYgKGVsbVNpemUgPT0gNCkgewogICAgICBsICo9IGRpbWVuc2lvbjsK
ICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAgICAgIF9DT1JCQV9V
TG9uZyB0ID0gKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldOwogICAgICAgICgo
X0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9ICgoKCh0KSAmIDB4ZmYwMDAwMDAp
ID4+IDI0KSB8ICgoKHQpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0KSAmIDB4MDAwMGZmMDAp
IDw8IDgpIHwgKCgodCkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICB9CiAgICB9CiAgICBl
bHNlIGlmIChlbG1TaXplID09IDgpIHsKICAgICAgbCAqPSAyKmRpbWVuc2lvbjsKICAgICAgZm9y
IChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrPTIpIHsKICAgICAgICBfQ09SQkFfVUxvbmcgdGwx
ID0gKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2krMV07CiAgICAgICAgX0NPUkJB
X1VMb25nIHRsMiA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4
MDBmZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGwxKSAm
IDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgICAgdGwxID0gKChfQ09SQkFfVUxvbmcqKUJhc2VU
OjpOUF9kYXRhKCkpW2ldOwogICAgICAgICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgp
KVtpXSA9IHRsMjsKICAgICAgICAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaSsx
XSA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4MDBmZjAwMDAp
ID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGwxKSAmIDB4MDAwMDAw
ZmYpIDw8IDI0KSk7CiAgICAgIH0KICAgIH0KICB9Cn0KIyAxNjA3ICIvdXNyL2xvY2FsL2luY2x1
ZGUvb21uaU9SQjMvYnVmZmVyZWRTdHJlYW0uaCIgMwp2b2lkCl9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2VfX0Jvb2xlYW46Om9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSYgcykgY29uc3QK
ewogIF9DT1JCQV9TZXF1ZW5jZTxfQ09SQkFfQm9vbGVhbj46Om9wZXJhdG9yPj49KHMpOwp9CgoK
dm9pZApfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19Cb29sZWFuOjpvcGVyYXRvcjw8PSAoTmV0
QnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfU2VxdWVuY2U8X0NPUkJBX0Jvb2xlYW4+Ojpv
cGVyYXRvcjw8PShzKTsKfQoKCnZvaWQKX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fQm9vbGVh
bjo6b3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgX0NPUkJBX1Nl
cXVlbmNlPF9DT1JCQV9Cb29sZWFuPjo6b3BlcmF0b3I+Pj0ocyk7Cn0KCgp2b2lkCl9DT1JCQV9V
bmJvdW5kZWRfU2VxdWVuY2VfX0Jvb2xlYW46Om9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVh
bSYgcykKewogIF9DT1JCQV9TZXF1ZW5jZTxfQ09SQkFfQm9vbGVhbj46Om9wZXJhdG9yPDw9KHMp
Owp9CgoKdGVtcGxhdGUgPGludCBtYXg+CnZvaWQKX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX0Jv
b2xlYW48bWF4Pjo6b3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7CiAg
X0NPUkJBX1NlcXVlbmNlPF9DT1JCQV9Cb29sZWFuPjo6b3BlcmF0b3I+Pj0ocyk7Cn0KCgp0ZW1w
bGF0ZSA8aW50IG1heD4Kdm9pZApfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9fQm9vbGVhbjxtYXg+
OjpvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfVUxvbmcgbDsK
ICBsIDw8PSBzOwogIGlmIChsID4gcy5SZE1lc3NhZ2VVblJlYWQoKSB8fCBsID4gbWF4KSB7CiAg
ICBfQ09SQkFfbWFyc2hhbF9lcnJvcigpOwoKICB9CgogIEJhc2VUOjpsZW5ndGgobCk7CiAgZm9y
IChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAgX0NPUkJBX1NlcXVlbmNlPF9DT1JC
QV9Cb29sZWFuPjo6TlBfZGF0YSgpW2ldIDw8PSBzOwogIH0KICByZXR1cm47Cn0KCgp0ZW1wbGF0
ZSA8aW50IG1heD4Kdm9pZApfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9fQm9vbGVhbjxtYXg+Ojpv
cGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0CnsKICBfQ09SQkFfU2VxdWVu
Y2U8X0NPUkJBX0Jvb2xlYW4+OjpvcGVyYXRvcj4+PShzKTsKfQoKCnRlbXBsYXRlIDxpbnQgbWF4
Pgp2b2lkCl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19Cb29sZWFuPG1heD46Om9wZXJhdG9yPDw9
IChNZW1CdWZmZXJlZFN0cmVhbSYgcykKewogIF9DT1JCQV9VTG9uZyBsOwogIGwgPDw9IHM7CiAg
aWYgKChzLnVuUmVhZCgpIDwgbCkgfHwgbCA+IG1heCkgewogICAgX0NPUkJBX21hcnNoYWxfZXJy
b3IoKTsKCiAgfQogIEJhc2VUOjpsZW5ndGgobCk7CiAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBp
PGw7IGkrKykgewogICAgX0NPUkJBX1NlcXVlbmNlPF9DT1JCQV9Cb29sZWFuPjo6TlBfZGF0YSgp
W2ldIDw8PSBzOwogIH0KICByZXR1cm47Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Ns
aWNlLCBpbnQgZGltZW5zaW9uPgp2b2lkCl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlf
X0Jvb2xlYW48VCxUX3NsaWNlLGRpbWVuc2lvbj46OgogICAgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZl
cmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxf
Q09SQkFfQm9vbGVhbixkaW1lbnNpb24+OjpvcGVyYXRvcj4+PShzKTsKfQoKCnRlbXBsYXRlPGNs
YXNzIFQsIGNsYXNzIFRfc2xpY2UsIGludCBkaW1lbnNpb24+CnZvaWQKX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZV9BcnJheV9fQm9vbGVhbjxULFRfc2xpY2UsZGltZW5zaW9uPjo6CiAgICBvcGVy
YXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfU2VxdWVuY2VfQXJyYXk8
VCxUX3NsaWNlLF9DT1JCQV9Cb29sZWFuLGRpbWVuc2lvbj46Om9wZXJhdG9yPDw9KHMpOwp9CgoK
dGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF9zbGljZSwgaW50IGRpbWVuc2lvbj4Kdm9pZApfQ09S
QkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X19Cb29sZWFuPFQsVF9zbGljZSxkaW1lbnNpb24+
OjoKICAgIG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSYgcykgY29uc3QKewogIF9DT1JC
QV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsX0NPUkJBX0Jvb2xlYW4sZGltZW5zaW9uPjo6b3Bl
cmF0b3I+Pj0ocyk7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3NsaWNlLCBpbnQgZGlt
ZW5zaW9uPgp2b2lkCl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW48VCxU
X3NsaWNlLGRpbWVuc2lvbj46OgogICAgb3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtJiBz
KQp7CiAgX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxfQ09SQkFfQm9vbGVhbixkaW1l
bnNpb24+OjpvcGVyYXRvcjw8PShzKTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfc2xp
Y2UsIGludCBkaW1lbnNpb24sIGludCBtYXg+CnZvaWQKX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vf
QXJyYXlfX0Jvb2xlYW48VCxUX3NsaWNlLGRpbWVuc2lvbixtYXg+OjoKICAgb3BlcmF0b3I+Pj0g
KE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQs
VF9zbGljZSxfQ09SQkFfQm9vbGVhbixkaW1lbnNpb24+OjpvcGVyYXRvcj4+PShzKTsKfQoKCnRl
bXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfc2xpY2UsIGludCBkaW1lbnNpb24sIGludCBtYXg+CnZv
aWQKX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW48VCxUX3NsaWNlLGRpbWVu
c2lvbixtYXg+OjoKICAgIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSYgcykKewogIF9D
T1JCQV9VTG9uZyBsOwogIGwgPDw9IHM7CiAgaWYgKGwgPiBzLlJkTWVzc2FnZVVuUmVhZCgpIHx8
IGwgPiBtYXgpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CgogIH0KCiAgQmFzZVQ6Omxl
bmd0aChsKTsKICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGk8bDsgaSsrKSB7CiAgICBmb3IgKF9D
T1JCQV9VTG9uZyBqPTA7IGo8ZGltZW5zaW9uOyBqKyspIHsKICAgICAgKigoX0NPUkJBX0Jvb2xl
YW4qKShCYXNlVDo6TlBfZGF0YSgpW2ldKStqKSA8PD0gczsKICAgIH0KICB9CiAgcmV0dXJuOwp9
CgoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF9zbGljZSwgaW50IGRpbWVuc2lvbiwgaW50IG1h
eD4Kdm9pZApfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fQm9vbGVhbjxULFRfc2xpY2Us
ZGltZW5zaW9uLG1heD46OgogICAgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSBj
b25zdAp7CiAgX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxfQ09SQkFfQm9vbGVhbixk
aW1lbnNpb24+OjpvcGVyYXRvcj4+PShzKTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRf
c2xpY2UsIGludCBkaW1lbnNpb24sIGludCBtYXg+CnZvaWQKX0NPUkJBX0JvdW5kZWRfU2VxdWVu
Y2VfQXJyYXlfX0Jvb2xlYW48VCxUX3NsaWNlLGRpbWVuc2lvbixtYXg+OjoKICAgIG9wZXJhdG9y
PDw9IChNZW1CdWZmZXJlZFN0cmVhbSYgcykKewogIF9DT1JCQV9VTG9uZyBsOwogIGwgPDw9IHM7
CiAgaWYgKChzLnVuUmVhZCgpIDwgbCkgfHwgbCA+IG1heCkgewogICAgX0NPUkJBX21hcnNoYWxf
ZXJyb3IoKTsKCiAgfQogIEJhc2VUOjpsZW5ndGgobCk7CiAgZm9yIChfQ09SQkFfVUxvbmcgaT0w
OyBpPGw7IGkrKykgewogICAgZm9yIChfQ09SQkFfVUxvbmcgaj0wOyBqPGRpbWVuc2lvbjsgaisr
KSB7CiAgICAgICooKF9DT1JCQV9Cb29sZWFuKikoQmFzZVQ6Ok5QX2RhdGEoKVtpXSkraikgPDw9
IHM7CiAgICB9CiAgfQogIHJldHVybjsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEVs
ZW1ULGNsYXNzIFRfSGVscGVyPgppbmxpbmUgdm9pZApfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQs
RWxlbVQsVF9IZWxwZXI+OjpvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0
CnsKICA6Om9wZXJhdG9yPj49KF9DT1JCQV9VTG9uZyhwZF9sZW4pLCBzKTsKICBmb3IoIGludCBp
ID0gMDsgaSA8IChpbnQpcGRfbGVuOyBpKysgKQogICAgVF9IZWxwZXI6Om1hcnNoYWxPYmpSZWYo
cGRfZGF0YVtpXSxzKTsKfQoKCgoKCmlubGluZSB2b2lkIG9wZXJhdG9yIDw8PSAob21uaU9iaktl
eSYgaywgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBfQ09SQkFfVUxvbmcgc2l6ZTsKICBzaXpl
IDw8PSBzOwogIGsuc2V0X3NpemUoc2l6ZSk7CiAgcy5nZXRfY2hhcl9hcnJheSgoX0NPUkJBX0No
YXIqKSBrLndyaXRlX2tleSgpLCBzaXplKTsKfQppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKG9t
bmlPYmpLZXkmIGssIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgX0NPUkJBX1VMb25nIHNpemU7
CiAgc2l6ZSA8PD0gczsKICBrLnNldF9zaXplKHNpemUpOwogIHMuZ2V0X2NoYXJfYXJyYXkoKF9D
T1JCQV9DaGFyKikgay53cml0ZV9rZXkoKSwgc2l6ZSk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgRWxlbVQsY2xhc3MgVF9IZWxwZXI+CmlubGluZSB2b2lkCl9DT1JCQV9TZXF1ZW5j
ZV9PYmpSZWY8VCxFbGVtVCxUX0hlbHBlcj46Om9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVh
bSYgcykKewogIF9DT1JCQV9VTG9uZyBsOwogIGwgPDw9IHM7CiAgaWYgKGwgPiBzLlJkTWVzc2Fn
ZVVuUmVhZCgpIHx8IChwZF9ib3VuZGVkICYmIGwgPiBwZF9tYXgpKSB7CiAgICBfQ09SQkFfbWFy
c2hhbF9lcnJvcigpOwoKICB9CiAgbGVuZ3RoKGwpOwogIGZvciggX0NPUkJBX1VMb25nIGkgPSAw
OyBpIDwgbDsgaSsrICkKICAgIG9wZXJhdG9yW10oaSkgPSBUX0hlbHBlcjo6dW5tYXJzaGFsT2Jq
UmVmKHMpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEVsZW1ULGNsYXNzIFRfSGVscGVy
PgppbmxpbmUgdm9pZApfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxwZXI+Ojpv
cGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0CnsKICBwZF9sZW4gPj49IHM7
CiAgZm9yIChpbnQgaT0wOyBpPChpbnQpcGRfbGVuOyBpKyspCiAgICBUX0hlbHBlcjo6bWFyc2hh
bE9ialJlZihwZF9kYXRhW2ldLHMpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEVsZW1U
LCBjbGFzcyBUX0hlbHBlcj4KaW5saW5lIHZvaWQKX0NPUkJBX1NlcXVlbmNlX09ialJlZjxULEVs
ZW1ULFRfSGVscGVyPjo6b3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKQp7CiAgX0NP
UkJBX1VMb25nIGw7CiAgbCA8PD0gczsKICBpZiAocy51blJlYWQoKSA8IGwgfHwgKHBkX2JvdW5k
ZWQgJiYgbCA+IHBkX21heCkpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CgogIH0KICBs
ZW5ndGgobCk7CiAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykKICAgIG9wZXJhdG9y
W10oaSkgPSBUX0hlbHBlcjo6dW5tYXJzaGFsT2JqUmVmKHMpOwp9CiMgNDA4ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvb21uaU9SQjMvb21uaUludGVybmFsLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9vbW5pT1JCMy9naW9wRHJpdmVyLmgiIDEgMwojIDg0ICIvdXNyL2xvY2FsL2luY2x1ZGUv
b21uaU9SQjMvZ2lvcERyaXZlci5oIiAzCmNsYXNzIEdJT1BfQmFzZXR5cGVzIHsKcHVibGljOgog
IGNsYXNzIE1lc3NhZ2VIZWFkZXIgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgX0NPUkJBX0NoYXIg
SGVhZGVyVHlwZVs4XTsKICAgIHN0YXRpYyBjb25zdCBIZWFkZXJUeXBlIFJlcXVlc3Q7CiAgICBz
dGF0aWMgY29uc3QgSGVhZGVyVHlwZSBSZXBseTsKICAgIHN0YXRpYyBjb25zdCBIZWFkZXJUeXBl
IENhbmNlbFJlcXVlc3Q7CiAgICBzdGF0aWMgY29uc3QgSGVhZGVyVHlwZSBMb2NhdGVSZXF1ZXN0
OwogICAgc3RhdGljIGNvbnN0IEhlYWRlclR5cGUgTG9jYXRlUmVwbHk7CiAgICBzdGF0aWMgY29u
c3QgSGVhZGVyVHlwZSBDbG9zZUNvbm5lY3Rpb247CiAgICBzdGF0aWMgY29uc3QgSGVhZGVyVHlw
ZSBNZXNzYWdlRXJyb3I7CiAgfTsKICBzdHJ1Y3QgX1N5c0V4Y2VwdFJlcG9JRCB7CiAgICBfQ09S
QkFfQ2hhciAqaWQ7CiAgICBfQ09SQkFfVUxvbmcgbGVuOwoKICAgIF9TeXNFeGNlcHRSZXBvSUQo
X0NPUkJBX0NoYXIgKmkpIHsKICAgICAgaWQgPSBpOyBsZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIg
KilpKTsKICAgIH0KICB9OwogIGNsYXNzIFN5c0V4Y2VwdFJlcG9JRCB7CiAgcHVibGljOgogICAg
c3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgVU5LTk9XTjsKICAgIHN0YXRpYyBjb25zdCBf
U3lzRXhjZXB0UmVwb0lEIEJBRF9QQVJBTTsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVw
b0lEIE5PX01FTU9SWTsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIElNUF9MSU1J
VDsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIENPTU1fRkFJTFVSRTsKICAgIHN0
YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIElOVl9PQkpSRUY7CiAgICBzdGF0aWMgY29uc3Qg
X1N5c0V4Y2VwdFJlcG9JRCBPQkpFQ1RfTk9UX0VYSVNUOwogICAgc3RhdGljIGNvbnN0IF9TeXNF
eGNlcHRSZXBvSUQgTk9fUEVSTUlTU0lPTjsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVw
b0lEIElOVEVSTkFMOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgTUFSU0hBTDsK
ICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIElOSVRJQUxJWkU7CiAgICBzdGF0aWMg
Y29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBOT19JTVBMRU1FTlQ7CiAgICBzdGF0aWMgY29uc3QgX1N5
c0V4Y2VwdFJlcG9JRCBCQURfVFlQRUNPREU7CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJl
cG9JRCBCQURfT1BFUkFUSU9OOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgTk9f
UkVTT1VSQ0VTOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgTk9fUkVTUE9OU0U7
CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBQRVJTSVNUX1NUT1JFOwogICAgc3Rh
dGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgQkFEX0lOVl9PUkRFUjsKICAgIHN0YXRpYyBjb25z
dCBfU3lzRXhjZXB0UmVwb0lEIFRSQU5TSUVOVDsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0
UmVwb0lEIEZSRUVfTUVNOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgSU5WX0lE
RU5UOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgSU5WX0ZMQUc7CiAgICBzdGF0
aWMgY29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBJTlRGX1JFUE9TOwogICAgc3RhdGljIGNvbnN0IF9T
eXNFeGNlcHRSZXBvSUQgQkFEX0NPTlRFWFQ7CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJl
cG9JRCBPQkpfQURBUFRFUjsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIERBVEFf
Q09OVkVSU0lPTjsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIFRSQU5TQUNUSU9O
X1JFUVVJUkVEOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgVFJBTlNBQ1RJT05f
Uk9MTEVEQkFDSzsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIElOVkFMSURfVFJB
TlNBQ1RJT047CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBXUk9OR19UUkFOU0FD
VElPTjsKICAgIHN0YXRpYyBjb25zdCBfQ09SQkFfVUxvbmcgbWF4SURMZW47CiAgICBzdGF0aWMg
Y29uc3QgX0NPUkJBX0NoYXIgKnZlcnNpb247CiAgICBzdGF0aWMgY29uc3QgX0NPUkJBX1VMb25n
IHZlcnNpb25MZW47CgogIH07CiAgc3RhdGljIHNpemVfdCBtYXhfZ2lvcF9tZXNzYWdlX3NpemU7
Cn07CgoKY2xhc3MgR0lPUF9DIDogcHVibGljIEdJT1BfQmFzZXR5cGVzLCBwdWJsaWMgTmV0QnVm
ZmVyZWRTdHJlYW0gewpwdWJsaWM6CgogIEdJT1BfQyhSb3BlICpyKTsKICB+R0lPUF9DKCk7Cgog
IGVudW0gU3RhdGUgeyBJZGxlLAogICAgICAgICAgICAgICBSZXF1ZXN0SW5Qcm9ncmVzcywKICAg
ICAgICAgICAgICAgV2FpdGluZ0ZvclJlcGx5LAogICAgICAgICAgICAgICBSZXBseUlzQmVpbmdQ
cm9jZXNzZWQsCiAgICAgICAgICAgICAgIFpvbWJpZQogIH07CiMgMjIxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvb21uaU9SQjMvZ2lvcERyaXZlci5oIiAzCiAgdm9pZCBJbml0aWFsaXNlUmVxdWVzdChj
b25zdCB2b2lkKiBvYmprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg
b2Jqa2V5c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9wbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvcG5hbWVzaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG1zZ3NpemUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfQ09SQkFfQm9vbGVhbiBvbmV3YXkpOwoKCgoKCiAgR0lPUDo6UmVwbHlT
dGF0dXNUeXBlIFJlY2VpdmVSZXBseSgpOwoKICB2b2lkIFJlcXVlc3RDb21wbGV0ZWQoX0NPUkJB
X0Jvb2xlYW4gc2tpcD0wKTsKCiAgR0lPUDo6TG9jYXRlU3RhdHVzVHlwZSBJc3N1ZUxvY2F0ZVJl
cXVlc3QoY29uc3Qgdm9pZCAqb2Jqa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvYmprZXlzaXplKTsKCiAgc3RhdGljIHNpemVfdCBS
ZXF1ZXN0SGVhZGVyU2l6ZShjb25zdCBzaXplX3Qgb2Jqa2V5c2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvcG5hbWVzaXplKTsKCgoKICBzaXplX3Qg
TWF4TWVzc2FnZVNpemUoKSBjb25zdCB7IHJldHVybiBwZF9tYXhfbWVzc2FnZV9zaXplOyB9CiMg
MjU2ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvZ2lvcERyaXZlci5oIiAzCnByaXZhdGU6
CiAgU3RhdGUgcGRfc3RhdGU7CiAgX0NPUkJBX1VMb25nIHBkX3JlcXVlc3RfaWQ7CiAgX0NPUkJB
X0Jvb2xlYW4gcGRfcmVzcG9uc2VfZXhwZWN0ZWQ7CiAgc2l6ZV90IHBkX21heF9tZXNzYWdlX3Np
emU7CgogIHZvaWQgVW5NYXJzaGFsbFN5c3RlbUV4Y2VwdGlvbigpOwoKfTsKCgpjbGFzcyBHSU9Q
X1MgOiBwdWJsaWMgR0lPUF9CYXNldHlwZXMsIHB1YmxpYyBOZXRCdWZmZXJlZFN0cmVhbSB7CnB1
YmxpYzoKCiAgc3RhdGljIHZvaWQgZGlzcGF0Y2hlcihTdHJhbmQgKnMpOwojIDI4OCAiL3Vzci9s
b2NhbC9pbmNsdWRlL29tbmlPUkIzL2dpb3BEcml2ZXIuaCIgMwogIEdJT1BfUyhTdHJhbmQgKnMp
OwogIH5HSU9QX1MoKTsKCiAgZW51bSBTdGF0ZSB7IElkbGUsCiAgICAgICAgICAgICAgIFJlcXVl
c3RJc0JlaW5nUHJvY2Vzc2VkLAogICAgICAgICAgICAgICBXYWl0aW5nRm9yUmVwbHksCiAgICAg
ICAgICAgICAgIFJlcGx5SXNCZWluZ0NvbXBvc2VkLAogICAgICAgICAgICAgICBab21iaWUKICB9
OwojIDM2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL2dpb3BEcml2ZXIuaCIgMwogIHZv
aWQgUmVxdWVzdFJlY2VpdmVkKF9DT1JCQV9Cb29sZWFuIHNraXA9MCk7CgogIHZvaWQgSW5pdGlh
bGlzZVJlcGx5KGNvbnN0IEdJT1A6OlJlcGx5U3RhdHVzVHlwZSBzdGF0dXMsIHNpemVfdCBtc2dz
aXplKTsKCgoKCiAgdm9pZCBSZXBseUNvbXBsZXRlZCgpOwoKICBzdGF0aWMgc2l6ZV90IFJlcGx5
SGVhZGVyU2l6ZSgpOwoKCgogIGlubGluZSBzaXplX3QgTWF4TWVzc2FnZVNpemUoKSBjb25zdCB7
IHJldHVybiBwZF9tYXhfbWVzc2FnZV9zaXplOyB9CiMgMzkwICIvdXNyL2xvY2FsL2luY2x1ZGUv
b21uaU9SQjMvZ2lvcERyaXZlci5oIiAzCiAgaW5saW5lIGNvbnN0IF9DT1JCQV9PY3RldCoga2V5
KCkgY29uc3QgeyByZXR1cm4gcGRfa2V5LmtleSgpOyB9CiAgaW5saW5lIGludCBrZXlzaXplKCkg
Y29uc3QgeyByZXR1cm4gcGRfa2V5LnNpemUoKTsgfQogIGlubGluZSBjb25zdCBjaGFyKiBvcGVy
YXRpb24oKSBjb25zdCB7IHJldHVybiAoY29uc3QgY2hhciopIHBkX29wZXJhdGlvbjsgfQogIGlu
bGluZSBfQ09SQkFfQm9vbGVhbiByZXNwb25zZV9leHBlY3RlZCgpIGNvbnN0IHsKICAgIHJldHVy
biBwZF9yZXNwb25zZV9leHBlY3RlZDsKICB9CiAgaW5saW5lIHZvaWQgc2V0X3VzZXJfZXhjZXB0
aW9ucyhjb25zdCBjaGFyKmNvbnN0KiB1ZXMsIGludCBuKSB7CiAgICBwZF91c2VyX2V4bnMgPSB1
ZXM7IHBkX25fdXNlcl9leG5zID0gbjsKICB9CgoKICB2b2lkIFNlbmRNc2dFcnJvck1lc3NhZ2Uo
KTsKCiAgY2xhc3MgdGVybWluYXRlUHJvY2Vzc2luZyB7CiAgcHVibGljOgoKCiAgICBpbmxpbmUg
dGVybWluYXRlUHJvY2Vzc2luZygpIHt9CiAgICBpbmxpbmUgfnRlcm1pbmF0ZVByb2Nlc3Npbmco
KSB7fQogIH07Cgpwcml2YXRlOgogIFN0YXRlIHBkX3N0YXRlOwogIF9DT1JCQV9VTG9uZyBwZF9y
ZXF1ZXN0X2lkOwogIF9DT1JCQV9Cb29sZWFuIHBkX3Jlc3BvbnNlX2V4cGVjdGVkOwogIHNpemVf
dCBwZF9tYXhfbWVzc2FnZV9zaXplOwoKCgogIF9DT1JCQV9PY3RldCogcGRfb3BlcmF0aW9uOwog
IF9DT1JCQV9PY3RldCBwZF9vcF9idWZmZXJbMzJdOwogIF9DT1JCQV9PY3RldCogcGRfcHJpbmNp
cGFsOwogIF9DT1JCQV9PY3RldCBwZF9wcl9idWZmZXJbMzJdOwoKICBvbW5pT2JqS2V5IHBkX2tl
eTsKCgoKICBjb25zdCBjaGFyKmNvbnN0KiBwZF91c2VyX2V4bnM7CiAgaW50IHBkX25fdXNlcl9l
eG5zOwoKCgogIHZvaWQgSGFuZGxlUmVxdWVzdChfQ09SQkFfQm9vbGVhbiBieXRlb3JkZXIpOwog
IHZvaWQgSGFuZGxlTG9jYXRlUmVxdWVzdChfQ09SQkFfQm9vbGVhbiBieXRlb3JkZXIpOwogIHZv
aWQgSGFuZGxlQ2FuY2VsUmVxdWVzdChfQ09SQkFfQm9vbGVhbiBieXRlb3JkZXIpOwogIHZvaWQg
SGFuZGxlTWVzc2FnZUVycm9yKCk7CiAgdm9pZCBIYW5kbGVDbG9zZUNvbm5lY3Rpb24oKTsKCiAg
dm9pZCBNYXliZU1hcnNoYWxVc2VyRXhjZXB0aW9uKHZvaWQqKTsKCgp9OwojIDQwOSAiL3Vzci9s
b2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlJbnRlcm5hbC5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvb21uaU9SQjMvb21uaU9ialJlZi5oIiAxIDMKIyA1MiAiL3Vzci9sb2NhbC9pbmNs
dWRlL29tbmlPUkIzL29tbmlPYmpSZWYuaCIgMwpjbGFzcyBvbW5pOwpjbGFzcyBvbW5pSW50ZXJu
YWw7CmNsYXNzIG9tbmlPYmpLZXk7CmNsYXNzIG9tbmlJZGVudGl0eTsKY2xhc3Mgb21uaUxvY2Fs
SWRlbnRpdHk7CmNsYXNzIG9tbmlSZW1vdGVJZGVudGl0eTsKY2xhc3Mgb21uaUNhbGxEZXNjcmlw
dG9yOwpjbGFzcyBvbW5pU2VydmFudDsKCgpjbGFzcyBvbW5pT2JqUmVmIHsKcHVibGljOgogIHZp
cnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqIHJlcG9JZCkgPSAwOwojIDc3ICIv
dXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9ialJlZi5oIiAzCiAgdmlydHVhbCBfQ09S
QkFfQm9vbGVhbiBfY29tcGF0aWJsZVNlcnZhbnQob21uaVNlcnZhbnQqIHN2bnQpOwoKCgoKCgog
IGludCBfZ2V0Um9wZUFuZEtleShvbW5pUm9wZUFuZEtleSYgcmFrLCBfQ09SQkFfQm9vbGVhbiog
aXNfbG9jYWw9MCkgY29uc3Q7CgoKCgoKCiAgdm9pZCBfZ2V0VGhlS2V5KG9tbmlPYmpLZXkmIGtl
eSwgaW50IGxvY2tlZD0wKSBjb25zdDsKCgoKICBpbmxpbmUgY29uc3QgY2hhciogX21vc3REZXJp
dmVkUmVwb0lkKCkgY29uc3QgewogICAgcmV0dXJuIHBkX21vc3REZXJpdmVkUmVwb0lkOwogIH0K
CgoKCiAgaW5saW5lIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqIF9pb3BQcm9maWxlcygpIGNvbnN0
IHsKICAgIHJldHVybiBwZF9pb3Bwcm9maWxlczsKICB9CgoKCgoKICBfQ09SQkFfQm9vbGVhbiBf
cmVhbF9pc19hKGNvbnN0IGNoYXIqIHJlcG9JZCk7CgoKCgoKCgogIHZvaWQqIF9yZWFsTmFycm93
KGNvbnN0IGNoYXIqIHJlcG9JZCk7CiMgMTI5ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMv
b21uaU9ialJlZi5oIiAzCiAgdm9pZCBfYXNzZXJ0RXhpc3RzQW5kVHlwZVZlcmlmaWVkKCk7CgoK
CgoKCiAgX0NPUkJBX0Jvb2xlYW4gX3JlbW90ZV9pc19hKGNvbnN0IGNoYXIqIHJlcG9JZCk7CgoK
CgoKCiAgX0NPUkJBX0Jvb2xlYW4gX3JlbW90ZV9ub25fZXhpc3RlbnQoKTsKCgoKCgoKICB2b2lk
KiBfdHJhbnNpZW50RXhjZXB0aW9uSGFuZGxlcih2b2lkKiYgY29va2llKTsKCgoKCgoKICB2b2lk
IF90cmFuc2llbnRFeGNlcHRpb25IYW5kbGVyKHZvaWQqIG5ld19oYW5kbGVyLCB2b2lkKiBjb29r
aWUpOwojIDE2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlPYmpSZWYuaCIgMwog
IHZvaWQqIF9jb21tRmFpbHVyZUV4Y2VwdGlvbkhhbmRsZXIodm9pZComIGNvb2tpZSk7CgoKCgoK
CiAgdm9pZCBfY29tbUZhaWx1cmVFeGNlcHRpb25IYW5kbGVyKHZvaWQqIG5ld19oYW5kbGVyLCB2
b2lkKiBjb29raWUpOwojIDE4MiAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlPYmpS
ZWYuaCIgMwogIHZvaWQqIF9zeXN0ZW1FeGNlcHRpb25IYW5kbGVyKHZvaWQqJiBjb29raWUpOwoK
CgoKCgogIHZvaWQgX3N5c3RlbUV4Y2VwdGlvbkhhbmRsZXIodm9pZCogbmV3X2hhbmRsZXIsIHZv
aWQqIGNvb2tpZSk7CiMgMjAwICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9ialJl
Zi5oIiAzCiAgaW5saW5lIG9tbmlPYmpSZWYqKiBfYWRkck9mTG9jYWxSZWZMaXN0KCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
IHJldHVybiAmcGRfbmV4dEluTG9jYWxSZWZMaXN0OwogIH0KICBpbmxpbmUgb21uaU9ialJlZiog
X25leHRJbkxvY2FsUmVmTGlzdCgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICByZXR1cm4gcGRfbmV4dEluTG9jYWxSZWZMaXN0
OwogIH0KCgoKICBpbmxpbmUgb21uaUlkZW50aXR5KiBfaWRlbnRpdHkoKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJu
IHBkX2lkOwogIH0KCgogIGlubGluZSBvbW5pTG9jYWxJZGVudGl0eSogX2xvY2FsSWQoKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgcmV0dXJuIHBkX2xvY2FsSWQ7CiAgfQoKCiAgaW5saW5lIGludCBfaXNGb3J3YXJkTG9jYXRp
b24oKSBjb25zdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgcmV0dXJuIHBkX2ZsYWdzLmZvcndhcmRfbG9jYXRpb247CiAgfQoK
CiAgaW5saW5lIF9DT1JCQV9Cb29sZWFuIF9pc19uaWwoKSB7IHJldHVybiAhcGRfaWQ7IH0KCgog
IGlubGluZSB2b2lkIF9ub0V4aXN0ZW50Q2hlY2soKSB7CiAgICBwZF9mbGFncy50eXBlX3Zlcmlm
aWVkID0gMTsKICAgIHBkX2ZsYWdzLm9iamVjdF9leGlzdHMgPSAxOwogIH0KCgoKCgogIHZvaWQg
X2ludm9rZShvbW5pQ2FsbERlc2NyaXB0b3ImLCBfQ09SQkFfQm9vbGVhbiBkb19hc3NlcnQ9MSk7
CgoKCgoKcHJvdGVjdGVkOgogIHZpcnR1YWwgfm9tbmlPYmpSZWYoKTsKCgogIG9tbmlPYmpSZWYo
KTsKCgoKCiAgb21uaU9ialJlZihjb25zdCBjaGFyKiBpbnRmUmVwb0lkLCBjb25zdCBjaGFyKiBt
b3N0RGVyaXZlZElkLAogICAgICAgICAgICAgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCogcHJvZmls
ZXMsCiAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqIGlkLCBvbW5pTG9jYWxJZGVudGl0eSogbGlk
KTsKCgogIHZvaWQgX2xvY2F0ZVJlcXVlc3QoKTsKCgoKCgpwcml2YXRlOgogIG9tbmlPYmpSZWYo
Y29uc3Qgb21uaU9ialJlZiYpOwogIG9tbmlPYmpSZWYmIG9wZXJhdG9yID0gKGNvbnN0IG9tbmlP
YmpSZWYmKTsKCgoKCgoKICBmcmllbmQgY2xhc3Mgb21uaTsKICBmcmllbmQgY2xhc3Mgb21uaUlu
dGVybmFsOwogIGZyaWVuZCBjbGFzcyBvbW5pUHk7CgogIGlubGluZSB2b2lkIF9zZXRJZGVudGl0
eShvbW5pSWRlbnRpdHkqIGlkLCBvbW5pTG9jYWxJZGVudGl0eSogbGlkKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgcGRfaWQg
PSBpZDsKICAgIHBkX2xvY2FsSWQgPSBsaWQ7CiAgfQoKCgoKCgoKICBpbnQgcGRfcmVmQ291bnQ7
CgoKICBjaGFyKiBwZF9tb3N0RGVyaXZlZFJlcG9JZDsKIyAzMDQgIi91c3IvbG9jYWwvaW5jbHVk
ZS9vbW5pT1JCMy9vbW5pT2JqUmVmLmgiIDMKICBjaGFyKiBwZF9pbnRmUmVwb0lkOwojIDMxNSAi
L3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlPYmpSZWYuaCIgMwogIElPUDo6VGFnZ2Vk
UHJvZmlsZUxpc3QqIHBkX2lvcHByb2ZpbGVzOwoKCiAgb21uaUlkZW50aXR5KiBwZF9pZDsKCgoK
CgogIG9tbmlMb2NhbElkZW50aXR5KiBwZF9sb2NhbElkOwoKCgoKCiAgc3RydWN0IHsKICAgIHVu
c2lnbmVkIGZvcndhcmRfbG9jYXRpb24gOiAxOwoKCgoKICAgIHVuc2lnbmVkIHR5cGVfdmVyaWZp
ZWQgOiAxOwoKCgoKCiAgICB1bnNpZ25lZCBvYmplY3RfZXhpc3RzIDogMTsKCgoKCgogICAgdW5z
aWduZWQgdHJhbnNpZW50X2V4Y2VwdGlvbl9oYW5kbGVyIDogMTsKICAgIHVuc2lnbmVkIGNvbW1m
YWlsX2V4Y2VwdGlvbl9oYW5kbGVyIDogMTsKICAgIHVuc2lnbmVkIHN5c3RlbV9leGNlcHRpb25f
aGFuZGxlciA6IDE7CgoKCiAgfSBwZF9mbGFnczsKCgogIG9tbmlPYmpSZWYqIHBkX25leHRJbkxv
Y2FsUmVmTGlzdDsKCgp9OwojIDQxMCAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlJ
bnRlcm5hbC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcHJveHlGYWN0
b3J5LmgiIDEgMwojIDUxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcHJveHlGYWN0b3J5
LmgiIDMKY2xhc3Mgb21uaUxvY2FsSWRlbnRpdHk7CmNsYXNzIG9tbmlPYmpSZWY7CgoKY2xhc3Mg
cHJveHlPYmplY3RGYWN0b3J5IHsKcHVibGljOgogIHZpcnR1YWwgfnByb3h5T2JqZWN0RmFjdG9y
eSgpOwogIHByb3h5T2JqZWN0RmFjdG9yeShjb25zdCBjaGFyKiByZXBvSWQpOwoKCgoKCiAgc3Rh
dGljIHZvaWQgc2h1dGRvd24oKTsKCgoKICBzdGF0aWMgcHJveHlPYmplY3RGYWN0b3J5KiBsb29r
dXAoY29uc3QgY2hhciogcmVwb0lkKTsKCiAgaW5saW5lIGNvbnN0IGNoYXIqIGlyUmVwb0lkKCkg
Y29uc3QgeyByZXR1cm4gcGRfcmVwb0lkOyB9CgoKCiAgdmlydHVhbCBvbW5pT2JqUmVmKiBuZXdP
YmpSZWYoY29uc3QgY2hhciogbW9zdERlcml2ZWRUeXBlSWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCogcHJvZmlsZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb21uaUlkZW50aXR5KiBpZCwgb21uaUxvY2FsSWRlbnRpdHkq
IGxpZCkgPSAwOwoKCiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19hKGNvbnN0IGNoYXIqIGJh
c2VfcmVwb0lkKSBjb25zdCA9IDA7CgoKCgpwcml2YXRlOgogIGNvbnN0IGNoYXIqIHBkX3JlcG9J
ZDsKfTsKIyA0MTEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50ZXJuYWwuaCIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlTZXJ2YW50LmgiIDEgMwoj
IDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaVNlcnZhbnQuaCIgMwpjbGFzcyBv
bW5pT2JqUmVmOwpjbGFzcyBvbW5pSWRlbnRpdHk7CgoKCgoKY2xhc3Mgb21uaVNlcnZhbnQgewpw
cm90ZWN0ZWQ6CiAgaW5saW5lIG9tbmlTZXJ2YW50KCkgOiBwZF9pZGVudGl0aWVzKDApIHt9CiAg
aW5saW5lIG9tbmlTZXJ2YW50KGNvbnN0IG9tbmlTZXJ2YW50JikgOiBwZF9pZGVudGl0aWVzKDAp
IHt9CiAgaW5saW5lIG9tbmlTZXJ2YW50JiBvcGVyYXRvciA9IChjb25zdCBvbW5pU2VydmFudCYp
IHsgcmV0dXJuICp0aGlzOyB9CgpwdWJsaWM6CiAgdmlydHVhbCB+b21uaVNlcnZhbnQoKTsKCiAg
dmlydHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hhciogcmVwb0lkKTsKIyA3NCAi
L3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlTZXJ2YW50LmgiIDMKICB2aXJ0dWFsIHZv
aWQqIF9kb3duY2FzdCgpOwoKCgoKCgoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZl
ZFJlcG9JZCgpOwojIDkxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaVNlcnZhbnQu
aCIgMwogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2lzX2EoY29uc3QgY2hhciogbG9naWNhbF90
eXBlX2lkKTsKCgoKCiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfbm9uX2V4aXN0ZW50KCk7CgoK
CiAgdmlydHVhbCBvbW5pT2JqUmVmKiBfZG9fZ2V0X2ludGVyZmFjZSgpID0gMDsKCgoKCiAgdmly
dHVhbCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0Y2goR0lPUF9TJik7CiMgMTIwICIvdXNyL2xvY2Fs
L2luY2x1ZGUvb21uaU9SQjMvb21uaVNlcnZhbnQuaCIgMwogIHZvaWQgX2FkZElkZW50aXR5KG9t
bmlMb2NhbElkZW50aXR5Kik7CgoKCiAgdm9pZCBfcmVtb3ZlSWRlbnRpdHkob21uaUxvY2FsSWRl
bnRpdHkqKTsKCgoKICBpbmxpbmUgb21uaUxvY2FsSWRlbnRpdHkqIF9pZGVudGl0aWVzKCkgY29u
c3QgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgIHJldHVybiBwZF9pZGVudGl0aWVzOwogIH0KCgoKcHJpdmF0ZToKICBvbW5pTG9j
YWxJZGVudGl0eSogcGRfaWRlbnRpdGllczsKCgoKCgp9OwojIDQxMiAiL3Vzci9sb2NhbC9pbmNs
dWRlL29tbmlPUkIzL29tbmlJbnRlcm5hbC5oIiAyIDMKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNs
YXNzIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX1ZhcjsKIyAyNTYgIi91c3IvbG9jYWwvaW5j
bHVkZS9vbW5pT1JCMy9DT1JCQS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9S
QjMvdGVtcGxhdGVkZWNscy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIz
L3RlbXBsYXRlZGVjbHMuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGNsYXNz
IF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyOwp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+
IGNsYXNzIF9DT1JCQV9Qc2V1ZG9PYmpfT3V0OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIF9D
T1JCQV9Qc2V1ZG9PYmpfVmFyIHsKcHVibGljOgogIHR5cGVkZWYgVCogVF9wdHI7CiAgdHlwZWRl
ZiBfQ09SQkFfUHNldWRvT2JqX1ZhcjxUPiBUX3ZhcjsKICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9P
YmpfTWVtYmVyPFQsVF92YXI+IFRfbWVtYmVyOwoKICBpbmxpbmUgX0NPUkJBX1BzZXVkb09ial9W
YXIoKTsKICBpbmxpbmUgX0NPUkJBX1BzZXVkb09ial9WYXIoVF9wdHIgcCkgOiBwZF9kYXRhKHAp
IHt9CiAgaW5saW5lIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyKGNvbnN0IFRfdmFyJiB2KTsKICBpbmxp
bmUgX0NPUkJBX1BzZXVkb09ial9WYXIoY29uc3QgVF9tZW1iZXImIG0pOwoKICBpbmxpbmUgfl9D
T1JCQV9Qc2V1ZG9PYmpfVmFyKCk7CgogIGlubGluZSBUX3ZhciYgb3BlcmF0b3I9KFRfcHRyIHAp
OwogIGlubGluZSBUX3ZhciYgb3BlcmF0b3I9KGNvbnN0IFRfdmFyJiB2KTsKICBpbmxpbmUgVF92
YXImIG9wZXJhdG9yPShjb25zdCBUX21lbWJlciYgdik7CgogIGlubGluZSBUX3B0ciBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gcGRfZGF0YTsgfQogIGlubGluZSBvcGVyYXRvciBUX3B0ciAo
KSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CgogIGlubGluZSBUKiBpbigpIGNvbnN0IHsgcmV0
dXJuIHBkX2RhdGE7IH0KICBpbmxpbmUgVF9wdHImIGlub3V0KCkgeyByZXR1cm4gcGRfZGF0YTsg
fQogIGlubGluZSBUX3B0ciYgb3V0KCk7CiAgaW5saW5lIFRfcHRyIF9yZXRuKCk7CgogIGZyaWVu
ZCBjbGFzcyBfQ09SQkFfUHNldWRvT2JqX091dDxULCBfQ09SQkFfUHNldWRvT2JqX1ZhcjxUPiA+
OwogIGZyaWVuZCBjbGFzcyBfQ09SQkFfUHNldWRvT2JqX01lbWJlcjxULCBfQ09SQkFfUHNldWRv
T2JqX1ZhcjxUPiA+OwoKcHJvdGVjdGVkOgogIFRfcHRyIHBkX2RhdGE7Cn07CgoKCgoKdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPgpjbGFzcyBfQ09SQkFfUHNldWRvT2JqX01lbWJlciB7
CnB1YmxpYzoKICB0eXBlZGVmIFQqIFRfcHRyOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9N
ZW1iZXI8VCxUX3Zhcj4gVF9tZW1iZXI7CgogIGlubGluZSBfQ09SQkFfUHNldWRvT2JqX01lbWJl
cigpOwogIGlubGluZSBfQ09SQkFfUHNldWRvT2JqX01lbWJlcihUX3B0ciBwKSA6IF9wdHIocCkg
e30KICBpbmxpbmUgX0NPUkJBX1BzZXVkb09ial9NZW1iZXIoY29uc3QgVF9tZW1iZXImIHApOwog
IGlubGluZSB+X0NPUkJBX1BzZXVkb09ial9NZW1iZXIoKTsKCiAgaW5saW5lIFRfbWVtYmVyJiBv
cGVyYXRvcj0oVF9wdHIgcCk7CiAgaW5saW5lIFRfbWVtYmVyJiBvcGVyYXRvcj0oY29uc3QgVF9t
ZW1iZXImIHApOwogIGlubGluZSBUX21lbWJlciYgb3BlcmF0b3I9KGNvbnN0IFRfdmFyJiBwKTsK
CiAgaW5saW5lIFRfcHRyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBfcHRyOyB9CiAgaW5s
aW5lIG9wZXJhdG9yIFRfcHRyICgpIGNvbnN0IHsgcmV0dXJuIF9wdHI7IH0KCiAgVF9wdHIgX3B0
cjsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIGNsYXNzIFRfbWJyPgpj
bGFzcyBfQ09SQkFfUHNldWRvT2JqX0luT3V0IHsKcHVibGljOgogIGlubGluZSBfQ09SQkFfUHNl
dWRvT2JqX0luT3V0KFQqIHApIDogX2RhdGEocCkge30KICBpbmxpbmUgX0NPUkJBX1BzZXVkb09i
al9Jbk91dChUX3ZhciYgdikgOiBfZGF0YSh2KSB7fQogIGlubGluZSBfQ09SQkFfUHNldWRvT2Jq
X0luT3V0KFRfbWJyJiBtKSA6IF9kYXRhKG0uX3B0cikge30KCiAgVCogX2RhdGE7Cgpwcml2YXRl
OgogIF9DT1JCQV9Qc2V1ZG9PYmpfSW5PdXQoKTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgVF92YXI+CmNsYXNzIF9DT1JCQV9Qc2V1ZG9PYmpfT3V0IHsKcHVibGljOgogIGlubGlu
ZSBfQ09SQkFfUHNldWRvT2JqX091dChUKiYgcCkgOiBfZGF0YShwKSB7fQogIGlubGluZSBfQ09S
QkFfUHNldWRvT2JqX091dChUX3ZhciYgcCk7CgogIGlubGluZSBfQ09SQkFfUHNldWRvT2JqX091
dDxULFRfdmFyPiYgb3BlcmF0b3I9KFQqIHApIHsKICAgIF9kYXRhID0gcDsKICAgIHJldHVybiAq
dGhpczsKICB9CgogIFQqJiBfZGF0YTsKCnByaXZhdGU6CiAgX0NPUkJBX1BzZXVkb09ial9PdXQo
KTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRWxlbVQ+CmNsYXNzIF9DT1JCQV9Q
c2V1ZG9fVW5ib3VuZGVkX1NlcXVlbmNlIHsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX1BzZXVk
b19VbmJvdW5kZWRfU2VxdWVuY2U8VCxFbGVtVD4gVF9zZXE7CgogIGlubGluZSBfQ09SQkFfUHNl
dWRvX1VuYm91bmRlZF9TZXF1ZW5jZSgpCiAgICA6IHBkX21heCgwKSwgcGRfbGVuKDApLCBwZF9y
ZWwoMSksIHBkX2J1ZigwKSB7IH0KICBpbmxpbmUgX0NPUkJBX1BzZXVkb19VbmJvdW5kZWRfU2Vx
dWVuY2UoX0NPUkJBX1VMb25nIG1heCkKICAgIDogcGRfbWF4KG1heCksIHBkX2xlbigwKSwgcGRf
cmVsKDEpCiAgewogICAgaWYoICEocGRfYnVmID0gbmV3IEVsZW1UW21heF0pICkKICAgICAgX0NP
UkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwogIH0KCiAgaW5saW5lIF9DT1JCQV9Qc2V1
ZG9fVW5ib3VuZGVkX1NlcXVlbmNlKF9DT1JCQV9VTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW5ndGgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQqKiB2YWx1ZSwgX0NPUkJBX0Jvb2xlYW4g
cmVsZWFzZSA9IDApCiAgICA6IHBkX21heChtYXgpLCBwZF9sZW4obGVuZ3RoKQogIHsKICAgIGlm
KCBsZW5ndGggPiBtYXggKSBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIHBkX2J1ZiA9
IG5ldyBFbGVtVFtsZW5ndGhdOwogICAgaWYoIHJlbGVhc2UgKSB7CiAgICAgIGZvciggX0NPUkJB
X1VMb25nIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKSBwZF9idWZbaV0gPSB2YWx1ZVtpXTsKICAg
ICAgZGVsZXRlW10gdmFsdWU7CiAgICB9CiAgICBlbHNlIHsKICAgICAgZm9yKCBfQ09SQkFfVUxv
bmcgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyApCiAgICAgICAgcGRfYnVmW2ldID0gdmFsdWVbaV07
CiAgICB9CiAgfQoKICBpbmxpbmUgX0NPUkJBX1BzZXVkb19VbmJvdW5kZWRfU2VxdWVuY2UoY29u
c3QgVF9zZXEmIHMpCiAgICA6IHBkX21heChzLnBkX21heCksIHBkX2xlbihzLnBkX2xlbiksIHBk
X3JlbCgxKQogIHsKICAgIGlmKCAhKHBkX2J1ZiA9IG5ldyBFbGVtVFtzLnBkX21heF0pICkKICAg
ICAgX0NPUkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwogICAgZm9yKCBfQ09SQkFfVUxv
bmcgaT0wOyBpIDwgcy5wZF9sZW47IGkrKyApIHsKICAgICAgcGRfYnVmW2ldID0gcy5wZF9idWZb
aV07CiAgICB9CiAgfQoKICBpbmxpbmUgfl9DT1JCQV9Qc2V1ZG9fVW5ib3VuZGVkX1NlcXVlbmNl
KCkgewogICAgaWYoIHBkX3JlbCAmJiBwZF9idWYgKSBkZWxldGVbXSBwZF9idWY7CiAgfQoKICBp
bmxpbmUgVF9zZXEmIG9wZXJhdG9yPSAoY29uc3QgVF9zZXEmIHMpIHsKICAgIGlmKCAmcyA9PSB0
aGlzICkgcmV0dXJuICp0aGlzOwogICAgaWYoIHBkX21heCA8IHMucGRfbWF4ICkgewogICAgICBF
bGVtVCogbmV3YnVmID0gbmV3IEVsZW1UW3MucGRfbWF4XTsKICAgICAgaWYoICFuZXdidWYgKSBf
Q09SQkFfbmV3X29wZXJhdG9yX3JldHVybl9udWxsKCk7CiAgICAgIHBkX21heCA9IHMucGRfbWF4
OwogICAgICBpZiggcGRfcmVsICYmIHBkX2J1ZiApIGRlbGV0ZVtdIHBkX2J1ZjsKICAgICAgZWxz
ZSBwZF9yZWwgPSAxOwogICAgICBwZF9idWYgPSBuZXdidWY7CiAgICB9CiAgICBwZF9sZW4gPSBz
LnBkX2xlbjsKICAgIGZvciggdW5zaWduZWQgbG9uZyBpPTA7IGkgPCBwZF9sZW47IGkrKyApIHBk
X2J1ZltpXSA9IHMucGRfYnVmW2ldOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9D
T1JCQV9VTG9uZyBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gcGRfbWF4OyB9CiAgaW5saW5lIF9D
T1JCQV9VTG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBwZF9sZW47IH0KICBpbmxpbmUgdm9p
ZCBsZW5ndGgoX0NPUkJBX1VMb25nIGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCA+IHBkX21heCkg
ewogICAgICBFbGVtVCogbmV3YnVmID0gbmV3IEVsZW1UW2xlbmd0aF07CiAgICAgIGlmKCAhbmV3
YnVmICkgX0NPUkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwogICAgICBmb3IoIHVuc2ln
bmVkIGxvbmcgaSA9IDA7IGkgPCBwZF9sZW47IGkrKyApCiAgICAgICAgbmV3YnVmW2ldID0gcGRf
YnVmW2ldOwogICAgICBwZF9tYXggPSBsZW5ndGg7CiAgICAgIGlmKCBwZF9yZWwgJiYgcGRfYnVm
ICkgZGVsZXRlW10gcGRfYnVmOwogICAgICBlbHNlIHBkX3JlbCA9IDE7CiAgICAgIHBkX2J1ZiA9
IG5ld2J1ZjsKICAgIH0KICAgIHBkX2xlbiA9IGxlbmd0aDsKICB9CiAgaW5saW5lIEVsZW1UJiBv
cGVyYXRvcltdIChfQ09SQkFfVUxvbmcgaW5kZXgpIHsKICAgIGlmKCBpbmRleCA+PSBwZF9sZW4g
KSBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIHJldHVybiBwZF9idWZbaW5kZXhdOwog
IH0KICBpbmxpbmUgY29uc3QgRWxlbVQmIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBpbmRleCkg
Y29uc3QgewogICAgaWYoIGluZGV4ID49IHBkX2xlbiApIF9DT1JCQV9ib3VuZF9jaGVja19lcnJv
cigpOwogICAgcmV0dXJuIHBkX2J1ZltpbmRleF07CiAgfQogIHN0YXRpYyBpbmxpbmUgVCoqIGFs
bG9jYnVmKF9DT1JCQV9VTG9uZyBuZWxlbXMpIHsKICAgIFQqKiB2ID0gbmV3IFQqW25lbGVtc107
CiAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGkgPCBuZWxlbXM7IGkrKykgdltpXSA9IFQ6Ol9u
aWwoKTsKICAgIHJldHVybiB2OwogIH0KICBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZWJ1ZihUKiog
YikgeyBpZiggYiApIGRlbGV0ZVtdIGI7IH0KCiAgaW5saW5lIEVsZW1UKiBOUF9kYXRhKCkgeyBy
ZXR1cm4gcGRfYnVmOyB9Cgpwcm90ZWN0ZWQ6CiAgX0NPUkJBX1VMb25nIHBkX21heDsKICBfQ09S
QkFfVUxvbmcgcGRfbGVuOwogIF9DT1JCQV9Cb29sZWFuIHBkX3JlbDsKICBFbGVtVCogcGRfYnVm
Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBfQ09SQkFfUHNldWRvVmFsdWVfU2Vx
dWVuY2UgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvVmFsdWVfU2VxdWVuY2U8VD4g
VF9zZXE7CgogIGlubGluZSBfQ09SQkFfUHNldWRvVmFsdWVfU2VxdWVuY2UoKQogICAgOiBwZF9t
YXgoMCksIHBkX2xlbigwKSwgcGRfcmVsKDEpLCBwZF9idWYoMCkgeyB9CiAgaW5saW5lIF9DT1JC
QV9Qc2V1ZG9WYWx1ZV9TZXF1ZW5jZShfQ09SQkFfVUxvbmcgbWF4KQogICAgOiBwZF9tYXgobWF4
KSwgcGRfbGVuKDApLCBwZF9yZWwoMSkKICB7CiAgICBpZiggIShwZF9idWYgPSBhbGxvY2J1Ziht
YXgpKSApCiAgICAgIF9DT1JCQV9uZXdfb3BlcmF0b3JfcmV0dXJuX251bGwoKTsKICB9CgogIGlu
bGluZSBfQ09SQkFfUHNldWRvVmFsdWVfU2VxdWVuY2UoX0NPUkJBX1VMb25nIG1heCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW5ndGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUKiB2YWx1ZSwgX0NPUkJBX0Jvb2xlYW4g
cmVsZWFzZSA9IDApCiAgICA6IHBkX21heChtYXgpLCBwZF9sZW4obGVuZ3RoKSwgcGRfcmVsKHJl
bGVhc2UpLCBwZF9idWYodmFsdWUpCiAgewogICAgaWYoIGxlbmd0aCA+IG1heCApIF9DT1JCQV9i
b3VuZF9jaGVja19lcnJvcigpOwogIH0KCiAgaW5saW5lIF9DT1JCQV9Qc2V1ZG9WYWx1ZV9TZXF1
ZW5jZShjb25zdCBUX3NlcSYgcykKICAgIDogcGRfbWF4KHMucGRfbWF4KSwgcGRfbGVuKHMucGRf
bGVuKSwgcGRfcmVsKDEpCiAgewogICAgaWYoICEocGRfYnVmID0gYWxsb2NidWYocy5wZF9tYXgp
KSApCiAgICAgIF9DT1JCQV9uZXdfb3BlcmF0b3JfcmV0dXJuX251bGwoKTsKICAgIGZvciggX0NP
UkJBX1VMb25nIGk9MDsgaSA8IHMucGRfbGVuOyBpKysgKSB7CiAgICAgIHBkX2J1ZltpXSA9IHMu
cGRfYnVmW2ldOwogICAgfQogIH0KCiAgaW5saW5lIH5fQ09SQkFfUHNldWRvVmFsdWVfU2VxdWVu
Y2UoKSB7CiAgICBpZiggcGRfcmVsICYmIHBkX2J1ZiApIGRlbGV0ZVtdIHBkX2J1ZjsKICB9Cgog
IGlubGluZSBUX3NlcSYgb3BlcmF0b3I9IChjb25zdCBUX3NlcSYgcykgewogICAgaWYoICZzID09
IHRoaXMgKSByZXR1cm4gKnRoaXM7CiAgICBpZiggcGRfbWF4IDwgcy5wZF9tYXggKSB7CiAgICAg
IFQqIG5ld2J1ZiA9IGFsbG9jYnVmKHMucGRfbWF4KTsKICAgICAgaWYoICFuZXdidWYgKSBfQ09S
QkFfbmV3X29wZXJhdG9yX3JldHVybl9udWxsKCk7CiAgICAgIHBkX21heCA9IHMucGRfbWF4Owog
ICAgICBpZiggcGRfcmVsICYmIHBkX2J1ZiApIGRlbGV0ZVtdIHBkX2J1ZjsKICAgICAgZWxzZSBw
ZF9yZWwgPSAxOwogICAgICBwZF9idWYgPSBuZXdidWY7CiAgICB9CiAgICBwZF9sZW4gPSBzLnBk
X2xlbjsKICAgIGZvciggdW5zaWduZWQgbG9uZyBpPTA7IGkgPCBwZF9sZW47IGkrKyApIHBkX2J1
ZltpXSA9IHMucGRfYnVmW2ldOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9DT1JC
QV9VTG9uZyBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gcGRfbWF4OyB9CiAgaW5saW5lIF9DT1JC
QV9VTG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBwZF9sZW47IH0KICBpbmxpbmUgdm9pZCBs
ZW5ndGgoX0NPUkJBX1VMb25nIGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCA+IHBkX21heCkgewog
ICAgICBUKiBuZXdidWYgPSBhbGxvY2J1ZihsZW5ndGgpOwogICAgICBpZiggIW5ld2J1ZiApIF9D
T1JCQV9uZXdfb3BlcmF0b3JfcmV0dXJuX251bGwoKTsKICAgICAgZm9yKCB1bnNpZ25lZCBsb25n
IGkgPSAwOyBpIDwgcGRfbGVuOyBpKysgKQogICAgICAgIG5ld2J1ZltpXSA9IHBkX2J1ZltpXTsK
ICAgICAgcGRfbWF4ID0gbGVuZ3RoOwogICAgICBpZiggcGRfcmVsICYmIHBkX2J1ZiApIGRlbGV0
ZVtdIHBkX2J1ZjsKICAgICAgZWxzZSBwZF9yZWwgPSAxOwogICAgICBwZF9idWYgPSBuZXdidWY7
CiAgICB9CiAgICBwZF9sZW4gPSBsZW5ndGg7CiAgfQogIGlubGluZSBUJiBvcGVyYXRvcltdIChf
Q09SQkFfVUxvbmcgaW5kZXgpIHsKICAgIGlmKCBpbmRleCA+PSBwZF9sZW4gKSBfQ09SQkFfYm91
bmRfY2hlY2tfZXJyb3IoKTsKICAgIHJldHVybiBwZF9idWZbaW5kZXhdOwogIH0KICBpbmxpbmUg
Y29uc3QgVCYgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25nIGluZGV4KSBjb25zdCB7CiAgICBpZigg
aW5kZXggPj0gcGRfbGVuICkgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CiAgICByZXR1cm4g
cGRfYnVmW2luZGV4XTsKICB9CiAgc3RhdGljIGlubGluZSBUKiBhbGxvY2J1ZihfQ09SQkFfVUxv
bmcgbmVsZW1zKSB7IHJldHVybiBuZXcgVFtuZWxlbXNdOyB9CiAgc3RhdGljIGlubGluZSB2b2lk
IGZyZWVidWYoVCogYikgeyBpZiggYiApIGRlbGV0ZVtdIGI7IH0KCiAgaW5saW5lIFQqIE5QX2Rh
dGEoKSB7IHJldHVybiBwZF9idWY7IH0KCnByb3RlY3RlZDoKICBfQ09SQkFfVUxvbmcgcGRfbWF4
OwogIF9DT1JCQV9VTG9uZyBwZF9sZW47CiAgX0NPUkJBX0Jvb2xlYW4gcGRfcmVsOwogIFQqIHBk
X2J1ZjsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX0hlbHBlcj4KY2xhc3MgX0NP
UkJBX09ialJlZl9NZW1iZXI7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX0hlbHBlcj4KY2xh
c3MgX0NPUkJBX09ialJlZl9FbGVtZW50OwoKdGVtcGxhdGUgPGNsYXNzIFQsY2xhc3MgVF9IZWxw
ZXI+CmNsYXNzIF9DT1JCQV9PYmpSZWZfSU5PVVRfYXJnOwoKdGVtcGxhdGUgPGNsYXNzIFQsY2xh
c3MgVF9IZWxwZXI+CmNsYXNzIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzsKCnRlbXBsYXRlIDxjbGFz
cyBULGNsYXNzIFRfSGVscGVyPgpjbGFzcyBfQ09SQkFfT2JqUmVmX3RjRGVzY19hcmc7Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF9IZWxwZXI+CmNsYXNzIF9DT1JCQV9PYmpSZWZfVmFyIHsK
cHVibGljOgogIHR5cGVkZWYgVCogcHRyX3Q7CiAgdHlwZWRlZiBUKiBUX3B0cjsKICB0eXBlZGVm
IF9DT1JCQV9PYmpSZWZfTWVtYmVyPFQsVF9IZWxwZXI+IFRfbWVtYmVyOwogIHR5cGVkZWYgX0NP
UkJBX09ialJlZl9FbGVtZW50PFQsVF9IZWxwZXI+IFRfZWxlbWVudDsKICB0eXBlZGVmIF9DT1JC
QV9PYmpSZWZfVmFyPFQsVF9IZWxwZXI+IFRfdmFyOwoKICBpbmxpbmUgX0NPUkJBX09ialJlZl9W
YXIoKSA6IHBkX29ianJlZihUX0hlbHBlcjo6X25pbCgpKSB7fQogIGlubGluZSBfQ09SQkFfT2Jq
UmVmX1ZhcihUX3B0ciBwKSA6IHBkX29ianJlZihwKSB7fQogIGlubGluZSBfQ09SQkFfT2JqUmVm
X1Zhcihjb25zdCBUX3ZhciYgcCkgOiBwZF9vYmpyZWYocC5wZF9vYmpyZWYpIHsKICAgIFRfSGVs
cGVyOjpkdXBsaWNhdGUocC5wZF9vYmpyZWYpOwogIH0KCiAgaW5saW5lIF9DT1JCQV9PYmpSZWZf
VmFyKGNvbnN0IFRfbWVtYmVyJiBtKTsKICBpbmxpbmUgX0NPUkJBX09ialJlZl9WYXIoY29uc3Qg
VF9lbGVtZW50JiBtKTsKCiAgaW5saW5lIH5fQ09SQkFfT2JqUmVmX1ZhcigpIHsKCiAgICBUX0hl
bHBlcjo6cmVsZWFzZShwZF9vYmpyZWYpOwoKCgogIH0KCiAgaW5saW5lIFRfdmFyJiBvcGVyYXRv
cj0gKFRfcHRyIHApIHsKICAgIFRfSGVscGVyOjpyZWxlYXNlKHBkX29ianJlZik7CiAgICBwZF9v
YmpyZWYgPSBwOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfdmFyJiBvcGVyYXRv
cj0gKGNvbnN0IFRfdmFyJiBwKSB7CiAgICBpZiggJnAgIT0gdGhpcyApIHsKICAgICAgVF9IZWxw
ZXI6OmR1cGxpY2F0ZShwLnBkX29ianJlZik7CiAgICAgIFRfSGVscGVyOjpyZWxlYXNlKHBkX29i
anJlZik7CiAgICAgIHBkX29ianJlZiA9IHAucGRfb2JqcmVmOwogICAgfQogICAgcmV0dXJuICp0
aGlzOwogIH0KCiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvcj0gKGNvbnN0IFRfbWVtYmVyJiBtKTsK
ICBpbmxpbmUgVF92YXImIG9wZXJhdG9yPSAoY29uc3QgVF9lbGVtZW50JiBtKTsKICBpbmxpbmUg
VF9wdHIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHBkX29ianJlZjsgfQogIGlubGluZSBv
cGVyYXRvciBUX3B0ciAoKSBjb25zdCB7IHJldHVybiBwZF9vYmpyZWY7IH0KCiAgaW5saW5lIFRf
cHRyIGluKCkgY29uc3QgeyByZXR1cm4gcGRfb2JqcmVmOyB9CiAgaW5saW5lIFRfcHRyJiBpbm91
dCgpIHsgcmV0dXJuIHBkX29ianJlZjsgfQogIGlubGluZSBUX3B0ciYgb3V0KCkgewogICAgVF9I
ZWxwZXI6OnJlbGVhc2UocGRfb2JqcmVmKTsKICAgIHBkX29ianJlZiA9IFRfSGVscGVyOjpfbmls
KCk7CiAgICByZXR1cm4gcGRfb2JqcmVmOwogIH0KICBpbmxpbmUgVF9wdHIgX3JldG4oKSB7CiAg
ICBUX3B0ciB0bXAgPSBwZF9vYmpyZWY7CiAgICBwZF9vYmpyZWYgPSBUX0hlbHBlcjo6X25pbCgp
OwogICAgcmV0dXJuIHRtcDsKICB9CgogIGZyaWVuZCBjbGFzcyBfQ09SQkFfT2JqUmVmX0lOT1VU
X2FyZzxULFRfSGVscGVyPjsKICBmcmllbmQgY2xhc3MgX0NPUkJBX09ialJlZl9PVVRfYXJnPFQs
VF9IZWxwZXI+OwogIGZyaWVuZCBjbGFzcyBfQ09SQkFfT2JqUmVmX3RjRGVzY19hcmc8VCxUX0hl
bHBlcj47Cgpwcml2YXRlOgogIFRfcHRyIHBkX29ianJlZjsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgVCxjbGFzcyBUX0hlbHBlcj4KY2xhc3MgX0NPUkJBX09ialJlZl9NZW1iZXIgewpwdWJsaWM6
CiAgdHlwZWRlZiBUKiBUX3B0cjsKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfTWVtYmVyPFQsVF9I
ZWxwZXI+IFRfbWVtYmVyOwogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9FbGVtZW50PFQsVF9IZWxw
ZXI+IFRfZWxlbWVudDsKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPFQsVF9IZWxwZXI+IFRf
dmFyOwoKICBpbmxpbmUgX0NPUkJBX09ialJlZl9NZW1iZXIoKSB7CiAgICBfcHRyID0gVF9IZWxw
ZXI6Ol9uaWwoKTsKICB9CgogIGlubGluZSBfQ09SQkFfT2JqUmVmX01lbWJlcihjb25zdCBUX21l
bWJlciYgcCkgewogICAgVF9IZWxwZXI6OmR1cGxpY2F0ZShwLl9wdHIpOwogICAgX3B0ciA9IHAu
X3B0cjsKICB9CgppbmxpbmUgfl9DT1JCQV9PYmpSZWZfTWVtYmVyKCkgewoKICAgIFRfSGVscGVy
OjpyZWxlYXNlKF9wdHIpOwoKCgogIH0KCiAgaW5saW5lIFRfbWVtYmVyJiBvcGVyYXRvcj0gKFRf
cHRyIHApIHsKICAgIFRfSGVscGVyOjpyZWxlYXNlKF9wdHIpOwogICAgX3B0ciA9IHA7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF9tZW1iZXImIG9wZXJhdG9yPSAoY29uc3QgVF9t
ZW1iZXImIHApIHsKICAgIGlmKCAmcCAhPSB0aGlzICkgewogICAgICBUX0hlbHBlcjo6cmVsZWFz
ZShfcHRyKTsKICAgICAgVF9IZWxwZXI6OmR1cGxpY2F0ZShwLl9wdHIpOwogICAgICBfcHRyID0g
cC5fcHRyOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfbWVtYmVyJiBv
cGVyYXRvcj0gKGNvbnN0IFRfdmFyJiBwKSB7CiAgICBUX0hlbHBlcjo6cmVsZWFzZShfcHRyKTsK
ICAgIFRfSGVscGVyOjpkdXBsaWNhdGUocCk7CiAgICBfcHRyID0gKFRfcHRyKSBwOwogICAgcmV0
dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfbWVtYmVyJiBvcGVyYXRvcj0gKGNvbnN0IFRfZWxl
bWVudCYgcCk7CgogIGlubGluZSBUX3B0ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX3B0
cjsgfQoKICBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNl
dCkgY29uc3QgewogICAgcmV0dXJuIFRfSGVscGVyOjpOUF9hbGlnbmVkU2l6ZShfcHRyLGluaXRp
YWxvZmZzZXQpOwogIH0KCiAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3Ry
ZWFtJiBzKSBjb25zdCB7CiAgICBUX0hlbHBlcjo6bWFyc2hhbE9ialJlZihfcHRyLHMpOwogIH0K
CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBU
X3B0ciBfcmVzdWx0ID0gVF9IZWxwZXI6OnVubWFyc2hhbE9ialJlZihzKTsKICAgIFRfSGVscGVy
OjpyZWxlYXNlKF9wdHIpOwogICAgX3B0ciA9IF9yZXN1bHQ7CiAgfQoKICBpbmxpbmUgdm9pZCBv
cGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0IHsKICAgIFRfSGVscGVyOjpt
YXJzaGFsT2JqUmVmKF9wdHIscyk7CiAgfQoKICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoTWVt
QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIFRfcHRyIF9yZXN1bHQgPSBUX0hlbHBlcjo6dW5tYXJz
aGFsT2JqUmVmKHMpOwogICAgVF9IZWxwZXI6OnJlbGVhc2UoX3B0cik7CiAgICBfcHRyID0gX3Jl
c3VsdDsKICB9CgoKCgogIGlubGluZSBvcGVyYXRvciBUX3B0ciAoKSBjb25zdCB7IHJldHVybiBf
cHRyOyB9CgogIGlubGluZSBUX3B0ciBpbigpIGNvbnN0IHsgcmV0dXJuIF9wdHI7IH0KICBpbmxp
bmUgVF9wdHImIGlub3V0KCkgeyByZXR1cm4gX3B0cjsgfQogIGlubGluZSBUX3B0ciYgb3V0KCkg
ewogICAgVF9IZWxwZXI6OnJlbGVhc2UoX3B0cik7CiAgICBfcHRyID0gVF9IZWxwZXI6Ol9uaWwo
KTsKICAgIHJldHVybiBfcHRyOwogIH0KICBpbmxpbmUgVF9wdHIgX3JldG4oKSB7CiAgICBUX3B0
ciB0bXA7CiAgICB0bXAgPSBfcHRyOwogICAgX3B0ciA9IFRfSGVscGVyOjpfbmlsKCk7CiAgICBy
ZXR1cm4gdG1wOwogIH0KCiAgVF9wdHIgX3B0cjsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxj
bGFzcyBUX0hlbHBlcj4KY2xhc3MgX0NPUkJBX09ialJlZl9FbGVtZW50IHsKcHVibGljOgogIHR5
cGVkZWYgVCogVF9wdHI7CiAgdHlwZWRlZiBfQ09SQkFfT2JqUmVmX0VsZW1lbnQ8VCxUX0hlbHBl
cj4gVF9lbGVtZW50OwogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9NZW1iZXI8VCxUX0hlbHBlcj4g
VF9tZW1iZXI7CiAgdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1ZhcjxULFRfSGVscGVyPiBUX3ZhcjsK
CiAgaW5saW5lIF9DT1JCQV9PYmpSZWZfRWxlbWVudChUX3B0ciYgcCwgX0NPUkJBX0Jvb2xlYW4g
cmVsKQogICAgOiBwZF9yZWwocmVsKSwgcGRfZGF0YShwKSB7fQoKICBpbmxpbmUgX0NPUkJBX09i
alJlZl9FbGVtZW50KGNvbnN0IFRfZWxlbWVudCYgcCkKICAgIDogcGRfcmVsKHAucGRfcmVsKSwg
cGRfZGF0YShwLnBkX2RhdGEpIHt9CgogIGlubGluZSB+X0NPUkJBX09ialJlZl9FbGVtZW50KCkg
ewoKICB9CgogIGlubGluZSBUX2VsZW1lbnQmIG9wZXJhdG9yPSAoVF9wdHIgcCkgewogICAgaWYo
IHBkX3JlbCApIFRfSGVscGVyOjpyZWxlYXNlKHBkX2RhdGEpOwogICAgcGRfZGF0YSA9IHA7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF9lbGVtZW50JiBvcGVyYXRvcj0gKGNvbnN0
IFRfZWxlbWVudCYgcCkgewogICAgaWYoIHBkX3JlbCApIHsKICAgICAgVF9IZWxwZXI6OnJlbGVh
c2UocGRfZGF0YSk7CiAgICAgIFRfSGVscGVyOjpkdXBsaWNhdGUocC5wZF9kYXRhKTsKICAgICAg
cGRfZGF0YSA9IHAucGRfZGF0YTsKICAgIH0KICAgIGVsc2UKICAgICAgcGRfZGF0YSA9IHAucGRf
ZGF0YTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBUX2VsZW1lbnQmIG9wZXJhdG9y
PSAoY29uc3QgVF92YXImIHApIHsKICAgIGlmKCBwZF9yZWwgKSB7CiAgICAgIFRfSGVscGVyOjpy
ZWxlYXNlKHBkX2RhdGEpOwogICAgICBUX0hlbHBlcjo6ZHVwbGljYXRlKHApOwogICAgfQogICAg
cGRfZGF0YSA9IChUX3B0cikgcDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBUX2Vs
ZW1lbnQmIG9wZXJhdG9yPSAoY29uc3QgVF9tZW1iZXImIHApIHsKICAgIGlmKCBwZF9yZWwgKSB7
CiAgICAgIFRfSGVscGVyOjpyZWxlYXNlKHBkX2RhdGEpOwogICAgICBUX0hlbHBlcjo6ZHVwbGlj
YXRlKHApOwogICAgfQogICAgcGRfZGF0YSA9IChUX3B0cikgcDsKICAgIHJldHVybiAqdGhpczsK
ICB9CgogIGlubGluZSBUX3B0ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gcGRfZGF0YTsg
fQoKCgoKICBpbmxpbmUgb3BlcmF0b3IgVF9wdHIgKCkgY29uc3QgeyByZXR1cm4gcGRfZGF0YTsg
fQoKCiAgaW5saW5lIFRfcHRyIGluKCkgY29uc3QgeyByZXR1cm4gcGRfZGF0YTsgfQogIGlubGlu
ZSBUX3B0ciYgaW5vdXQoKSB7IHJldHVybiBwZF9kYXRhOyB9CiAgaW5saW5lIFRfcHRyJiBvdXQo
KSB7CiAgICBpZiAocGRfcmVsKSB7CiAgICAgIFRfSGVscGVyOjpyZWxlYXNlKHBkX2RhdGEpOwog
ICAgfQogICAgcGRfZGF0YSA9IFRfSGVscGVyOjpfbmlsKCk7CiAgICByZXR1cm4gcGRfZGF0YTsK
ICB9CiAgaW5saW5lIFRfcHRyIF9yZXRuKCkgewogICAgVF9wdHIgdG1wID0gcGRfZGF0YTsKICAg
IGlmICghcGRfcmVsKQogICAgICBUX0hlbHBlcjo6ZHVwbGljYXRlKHBkX2RhdGEpOwogICAgcGRf
ZGF0YSA9IFRfSGVscGVyOjpfbmlsKCk7CiAgICByZXR1cm4gdG1wOwogIH0KCiAgaW5saW5lIFRf
cHRyJiBfTlBfcmVmKCkgY29uc3Qge3JldHVybiBwZF9kYXRhO30KICBpbmxpbmUgX0NPUkJBX0Jv
b2xlYW4gX05QX3JlbGVhc2UoKSBjb25zdCB7cmV0dXJuIHBkX3JlbDt9CgogIF9DT1JCQV9Cb29s
ZWFuIHBkX3JlbDsKICBUX3B0ciYgcGRfZGF0YTsKfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBUX0hlbHBlcj4KaW5saW5lCl9DT1JCQV9PYmpSZWZfVmFyPFQsVF9IZWxwZXI+OjoK
X0NPUkJBX09ialJlZl9WYXIoY29uc3QgX0NPUkJBX09ialJlZl9NZW1iZXI8VCxUX0hlbHBlcj4m
IG0pCnsKICBUX0hlbHBlcjo6ZHVwbGljYXRlKG0uX3B0cik7CiAgcGRfb2JqcmVmID0gbS5fcHRy
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF9IZWxwZXI+CmlubGluZQpfQ09SQkFfT2Jq
UmVmX1ZhcjxULFRfSGVscGVyPjo6Cl9DT1JCQV9PYmpSZWZfVmFyKGNvbnN0IF9DT1JCQV9PYmpS
ZWZfRWxlbWVudDxULFRfSGVscGVyPiYgbSkKewogIFRfSGVscGVyOjpkdXBsaWNhdGUobSk7CiAg
cGRfb2JqcmVmID0gKFQqKW07Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF9IZWxwZXI+
CmlubGluZSBfQ09SQkFfT2JqUmVmX1ZhcjxULFRfSGVscGVyPiYKX0NPUkJBX09ialJlZl9WYXI8
VCxUX0hlbHBlcj46Om9wZXJhdG9yPSAoY29uc3QgX0NPUkJBX09ialJlZl9NZW1iZXI8VCxUX0hl
bHBlcj4mIHApCnsKICBUX0hlbHBlcjo6cmVsZWFzZShwZF9vYmpyZWYpOwogIFRfSGVscGVyOjpk
dXBsaWNhdGUocC5fcHRyKTsKICBwZF9vYmpyZWYgPSBwLl9wdHI7CiAgcmV0dXJuICp0aGlzOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF9IZWxwZXI+CmlubGluZSBfQ09SQkFfT2JqUmVm
X1ZhcjxULFRfSGVscGVyPiYKX0NPUkJBX09ialJlZl9WYXI8VCxUX0hlbHBlcj46Om9wZXJhdG9y
PSAoY29uc3QgX0NPUkJBX09ialJlZl9FbGVtZW50PFQsVF9IZWxwZXI+JiBwKQp7CiAgVF9IZWxw
ZXI6OnJlbGVhc2UocGRfb2JqcmVmKTsKICBUX0hlbHBlcjo6ZHVwbGljYXRlKHApOwogIHBkX29i
anJlZiA9IChUKilwOwogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFRfSGVscGVyPgppbmxpbmUgX0NPUkJBX09ialJlZl9NZW1iZXI8VCxUX0hlbHBlcj4mCl9DT1JC
QV9PYmpSZWZfTWVtYmVyPFQsVF9IZWxwZXI+OjpvcGVyYXRvcj0gKGNvbnN0IF9DT1JCQV9PYmpS
ZWZfRWxlbWVudDxULFRfSGVscGVyPiYgcCkKewogIFRfSGVscGVyOjpyZWxlYXNlKF9wdHIpOwog
IFRfSGVscGVyOjpkdXBsaWNhdGUocCk7CiAgX3B0ciA9IChUKilwOwogIHJldHVybiAqdGhpczsK
fQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfSGVscGVyPgpjbGFzcyBfQ09SQkFfT2Jq
UmVmX0lOT1VUX2FyZyB7CnB1YmxpYzoKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfTWVtYmVyPFQs
VF9IZWxwZXI+IFRfbWVtYmVyOwogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9FbGVtZW50PFQsVF9I
ZWxwZXI+IFRfZWxlbWVudDsKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPFQsVF9IZWxwZXI+
IFRfdmFyOwogIGlubGluZSBfQ09SQkFfT2JqUmVmX0lOT1VUX2FyZyhUKiYgcCkgOiBfZGF0YShw
KSB7fQogIGlubGluZSBfQ09SQkFfT2JqUmVmX0lOT1VUX2FyZyhUX3ZhciYgcCkgOiBfZGF0YShw
LnBkX29ianJlZikge30KICBpbmxpbmUgX0NPUkJBX09ialJlZl9JTk9VVF9hcmcoVF9tZW1iZXIm
IHApIDogX2RhdGEocC5fcHRyKSB7fQogIGlubGluZSBfQ09SQkFfT2JqUmVmX0lOT1VUX2FyZyhU
X2VsZW1lbnQmIHApIDogX2RhdGEocC5fTlBfcmVmKCkpIHsKCgoKCgoKICAgIGlmKCAhcC5OUF9y
ZWxlYXNlKCkgKQogICAgICBUX0hlbHBlcjo6ZHVwbGljYXRlKHAuX05QX3JlZigpKTsKICB9CiAg
aW5saW5lIH5fQ09SQkFfT2JqUmVmX0lOT1VUX2FyZygpIHt9CgogIGlubGluZSBvcGVyYXRvciBU
KiYoKSB7IHJldHVybiBfZGF0YTsgfQoKICBUKiYgX2RhdGE7Cgpwcml2YXRlOgogIF9DT1JCQV9P
YmpSZWZfSU5PVVRfYXJnKCk7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsY2xhc3MgVF9IZWxw
ZXI+CmNsYXNzIF9DT1JCQV9PYmpSZWZfT1VUX2FyZyB7CnB1YmxpYzoKICB0eXBlZGVmIF9DT1JC
QV9PYmpSZWZfT1VUX2FyZzxULFRfSGVscGVyPiBUX291dDsKICB0eXBlZGVmIF9DT1JCQV9PYmpS
ZWZfTWVtYmVyPFQsVF9IZWxwZXI+IFRfbWVtYmVyOwogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9F
bGVtZW50PFQsVF9IZWxwZXI+IFRfZWxlbWVudDsKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFy
PFQsVF9IZWxwZXI+IFRfdmFyOwoKICBpbmxpbmUgX0NPUkJBX09ialJlZl9PVVRfYXJnKFQqJiBw
KSA6IF9kYXRhKHApIHsgX2RhdGEgPSBUX0hlbHBlcjo6X25pbCgpOyB9CiAgaW5saW5lIF9DT1JC
QV9PYmpSZWZfT1VUX2FyZyhUX3ZhciYgcCkgOiBfZGF0YShwLnBkX29ianJlZikgewogICAgcCA9
IFRfSGVscGVyOjpfbmlsKCk7CiAgfQogIGlubGluZSBfQ09SQkFfT2JqUmVmX09VVF9hcmcoVF9t
ZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSB7CiAgICBwID0gVF9IZWxwZXI6Ol9uaWwoKTsKICB9
CiAgaW5saW5lIF9DT1JCQV9PYmpSZWZfT1VUX2FyZyhUX2VsZW1lbnQmIHApIDogX2RhdGEocC5f
TlBfcmVmKCkpIHsKICAgIHAgPSBUX0hlbHBlcjo6X25pbCgpOwogIH0KCiAgaW5saW5lIF9DT1JC
QV9PYmpSZWZfT1VUX2FyZyhjb25zdCBUX291dCYgcCkgOiBfZGF0YShwLl9kYXRhKSB7fQogIGlu
bGluZSB+X0NPUkJBX09ialJlZl9PVVRfYXJnKCkge30KCiAgaW5saW5lIFRfb3V0JiBvcGVyYXRv
cj0oY29uc3QgVF9vdXQmIHApIHsgX2RhdGEgPSBwLl9kYXRhOyByZXR1cm4gKnRoaXM7IH0KICBp
bmxpbmUgVF9vdXQmIG9wZXJhdG9yPShUKiBwKSB7IF9kYXRhID0gcDsgcmV0dXJuICp0aGlzOyB9
CgogIGlubGluZSBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBUKiYg
cHRyKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIF9kYXRhOyB9CgogIFQqJiBfZGF0YTsKcHJpdmF0ZToKICBfQ09SQkFfT2JqUmVmX09V
VF9hcmcoKTsKICBUX291dCYgb3BlcmF0b3I9KGNvbnN0IFRfbWVtYmVyJiBwKTsKICBUX291dCYg
b3BlcmF0b3I9KGNvbnN0IFRfZWxlbWVudCYgcCk7CiAgVF9vdXQmIG9wZXJhdG9yPShjb25zdCBU
X3ZhciYgcCk7CgoKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX0hlbHBlcj4KY2xh
c3MgX0NPUkJBX09ialJlZl90Y0Rlc2NfYXJnIHsKcHVibGljOgoKCgoKCgogIHR5cGVkZWYgVCog
VF9wdHI7CiAgdHlwZWRlZiBfQ09SQkFfT2JqUmVmX01lbWJlcjxULFRfSGVscGVyPiBUX21lbWJl
cjsKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfRWxlbWVudDxULFRfSGVscGVyPiBUX2VsZW1lbnQ7
CiAgdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1ZhcjxULFRfSGVscGVyPiBUX3ZhcjsKICBpbmxpbmUg
X0NPUkJBX09ialJlZl90Y0Rlc2NfYXJnKFRfcHRyJiBwLCBfQ09SQkFfQm9vbGVhbiByZWwpCiAg
ICA6IF9kYXRhKHApLCBfcmVsKHJlbCkge30KICBpbmxpbmUgX0NPUkJBX09ialJlZl90Y0Rlc2Nf
YXJnKFRfdmFyJiBwKSA6IF9kYXRhKHAucGRfb2JqcmVmKSwgX3JlbCgxKSB7fQogIGlubGluZSBf
Q09SQkFfT2JqUmVmX3RjRGVzY19hcmcoVF9tZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSwgX3Jl
bCgxKSB7fQogIGlubGluZSBfQ09SQkFfT2JqUmVmX3RjRGVzY19hcmcoVF9lbGVtZW50IHApCiAg
ICA6IF9kYXRhKHAuX05QX3JlZigpKSwgX3JlbChwLl9OUF9yZWxlYXNlKCkpIHt9CiAgaW5saW5l
IH5fQ09SQkFfT2JqUmVmX3RjRGVzY19hcmcoKSB7fQoKICBUKiYgX2RhdGE7CiAgX0NPUkJBX0Jv
b2xlYW4gX3JlbDsKCnByaXZhdGU6CiAgX0NPUkJBX09ialJlZl90Y0Rlc2NfYXJnKCk7Cn07CgoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KY2xhc3MgX0NPUkJBX0NvbnN0clR5
cGVfRml4X09VVF9hcmc7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgX0NPUkJBX0NvbnN0clR5
cGVfRml4X1ZhciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX0ZpeF9WYXI8
VD4gVF92YXI7CgogIGlubGluZSBfQ09SQkFfQ29uc3RyVHlwZV9GaXhfVmFyKCkge30KICBpbmxp
bmUgX0NPUkJBX0NvbnN0clR5cGVfRml4X1ZhcihUKiBwKSB7IHBkX2RhdGEgPSAqcDsgZGVsZXRl
IHA7IH0KICBpbmxpbmUgX0NPUkJBX0NvbnN0clR5cGVfRml4X1Zhcihjb25zdCBUX3ZhciYgcCkg
ewogICAgcGRfZGF0YSA9IHAucGRfZGF0YTsKICB9CiAgaW5saW5lIH5fQ09SQkFfQ29uc3RyVHlw
ZV9GaXhfVmFyKCkge30KICBpbmxpbmUgVF92YXImb3BlcmF0b3I9IChUKiBwKSB7CiAgICBwZF9k
YXRhID0gKnA7CiAgICBkZWxldGUgcDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIFRf
dmFyJiBvcGVyYXRvcj0gKGNvbnN0IFRfdmFyJiBwKSB7CiAgICBwZF9kYXRhID0gcC5wZF9kYXRh
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJhdG9yPSAoVCBwKSB7
CiAgICBwZF9kYXRhID0gcDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIFQqIG9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiAoVCopICZwZF9kYXRhOyB9CgoKCgogIGlubGluZSBvcGVy
YXRvciBjb25zdCBUJiAoKSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CiAgaW5saW5lIG9wZXJh
dG9yIFQmICgpIHsgcmV0dXJuIHBkX2RhdGE7IH0KIyA4MTkgIi91c3IvbG9jYWwvaW5jbHVkZS9v
bW5pT1JCMy90ZW1wbGF0ZWRlY2xzLmgiIDMKICBjb25zdCBUJiBpbigpIGNvbnN0IHsgcmV0dXJu
IHBkX2RhdGE7IH0KICBUJiBpbm91dCgpIHsgcmV0dXJuIHBkX2RhdGE7IH0KICBUJiBvdXQoKSB7
IHJldHVybiBwZF9kYXRhOyB9CiAgVCBfcmV0bigpIHsgcmV0dXJuIHBkX2RhdGE7IH0KCiAgZnJp
ZW5kIGNsYXNzIF9DT1JCQV9Db25zdHJUeXBlX0ZpeF9PVVRfYXJnPFQsIFRfdmFyPjsKCnByb3Rl
Y3RlZDoKICBUIHBkX2RhdGE7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFy
PgpjbGFzcyBfQ09SQkFfQ29uc3RyVHlwZV9GaXhfT1VUX2FyZyB7CnB1YmxpYzoKICB0eXBlZGVm
IF9DT1JCQV9Db25zdHJUeXBlX0ZpeF9PVVRfYXJnPFQsVF92YXI+IFRfb3V0OwogIGlubGluZSBf
Q09SQkFfQ29uc3RyVHlwZV9GaXhfT1VUX2FyZyhUKiYgcCkgOiBfZGF0YShwKSB7IF9kYXRhID0g
MDsgfQogIGlubGluZSBfQ09SQkFfQ29uc3RyVHlwZV9GaXhfT1VUX2FyZyhUX3ZhciYgcCkgOiBf
ZGF0YSgmcC5wZF9kYXRhKSB7fQogIGlubGluZSBfQ09SQkFfQ29uc3RyVHlwZV9GaXhfT1VUX2Fy
Zyhjb25zdCBUX291dCYgcCkgOiBfZGF0YShwLl9kYXRhKSB7fQogIGlubGluZSBUX291dCYgb3Bl
cmF0b3I9KGNvbnN0IFRfb3V0JiBwKSB7IF9kYXRhID0gcC5fZGF0YTsgcmV0dXJuICp0aGlzOyB9
CiAgaW5saW5lIFRfb3V0JiBvcGVyYXRvcj0oVCogcCkgeyBfZGF0YSA9IHA7IHJldHVybiAqdGhp
czsgfQogIGlubGluZSBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBU
KiYgcHRyKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVComIG9wZXJhdG9yLT4oKSB7IHJl
dHVybiBfZGF0YTsgfQoKICBUKiYgX2RhdGE7Cgpwcml2YXRlOgogIF9DT1JCQV9Db25zdHJUeXBl
X0ZpeF9PVVRfYXJnKCk7CiAgVF9vdXQmIG9wZXJhdG9yPShjb25zdCBUX3ZhciYpOwp9OwoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KY2xhc3MgX0NPUkJBX0NvbnN0clR5cGVf
VmFyaWFibGVfT1VUX2FyZzsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBfQ09SQkFfQ29uc3Ry
VHlwZV9WYXJpYWJsZV9WYXIgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9W
YXJpYWJsZV9WYXI8VD4gVF92YXI7CgogIGlubGluZSBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJs
ZV9WYXIoKSB7IHBkX2RhdGEgPSAwOyB9CiAgaW5saW5lIF9DT1JCQV9Db25zdHJUeXBlX1Zhcmlh
YmxlX1ZhcihUKiBwKSB7IHBkX2RhdGEgPSBwOyB9CiAgaW5saW5lIF9DT1JCQV9Db25zdHJUeXBl
X1ZhcmlhYmxlX1Zhcihjb25zdCBUX3ZhciYgcCkgewogICAgaWYoICFwLnBkX2RhdGEgKSBwZF9k
YXRhID0gMDsKICAgIGVsc2UgewogICAgICBwZF9kYXRhID0gbmV3IFQ7CiAgICAgIGlmKCAhcGRf
ZGF0YSApIF9DT1JCQV9uZXdfb3BlcmF0b3JfcmV0dXJuX251bGwoKTsKICAgICAgKnBkX2RhdGEg
PSAqcC5wZF9kYXRhOwogICAgfQogIH0KCiAgaW5saW5lIH5fQ09SQkFfQ29uc3RyVHlwZV9WYXJp
YWJsZV9WYXIoKSB7IGlmKCBwZF9kYXRhICkgZGVsZXRlIHBkX2RhdGE7IH0KCiAgaW5saW5lIFRf
dmFyJiBvcGVyYXRvcj0gKFQqIHApIHsKICAgIGlmKCBwZF9kYXRhICkgZGVsZXRlIHBkX2RhdGE7
CiAgICBwZF9kYXRhID0gcDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBUX3ZhciYg
b3BlcmF0b3I9IChjb25zdCBUX3ZhciYgcCkgewogICAgaWYoICZwID09IHRoaXMgKSByZXR1cm4g
KnRoaXM7CiAgICBpZiggcC5wZF9kYXRhICkgewogICAgICBpZiggIXBkX2RhdGEgKSB7CiAgICAg
ICAgcGRfZGF0YSA9IG5ldyBUOwogICAgICAgIGlmKCAhcGRfZGF0YSApIF9DT1JCQV9uZXdfb3Bl
cmF0b3JfcmV0dXJuX251bGwoKTsKICAgICAgfQogICAgICAqcGRfZGF0YSA9ICpwLnBkX2RhdGE7
CiAgICB9CiAgICBlbHNlIHsKICAgICAgaWYoIHBkX2RhdGEgKSBkZWxldGUgcGRfZGF0YTsKICAg
ICAgcGRfZGF0YSA9IDA7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVCog
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIChUKilwZF9kYXRhOyB9CgoKCgogIGlubGluZSBv
cGVyYXRvciBjb25zdCBUJiAoKSBjb25zdCB7IHJldHVybiAqcGRfZGF0YTsgfQogIGlubGluZSBv
cGVyYXRvciBUJiAoKSB7IHJldHVybiAqcGRfZGF0YTsgfQojIDkyMCAiL3Vzci9sb2NhbC9pbmNs
dWRlL29tbmlPUkIzL3RlbXBsYXRlZGVjbHMuaCIgMwogIGNvbnN0IFQmIGluKCkgY29uc3QgeyBy
ZXR1cm4gKnBkX2RhdGE7IH0KICBUJiBpbm91dCgpIHsgcmV0dXJuICpwZF9kYXRhOyB9CiAgVCom
IG91dCgpIHsgaWYgKHBkX2RhdGEpIHsgZGVsZXRlIHBkX2RhdGE7IHBkX2RhdGEgPSAwOyB9IHJl
dHVybiBwZF9kYXRhOyB9CiAgVCogX3JldG4oKSB7IFQqIHRtcCA9IHBkX2RhdGE7IHBkX2RhdGEg
PSAwOyByZXR1cm4gdG1wOyB9CgogIGZyaWVuZCBjbGFzcyBfQ09SQkFfQ29uc3RyVHlwZV9WYXJp
YWJsZV9PVVRfYXJnPFQsIFRfdmFyPjsKCnByb3RlY3RlZDoKICBUKiBwZF9kYXRhOwp9OwoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KY2xhc3MgX0NPUkJBX0NvbnN0clR5cGVf
VmFyaWFibGVfT1VUX2FyZyB7CnB1YmxpYzoKICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1Zh
cmlhYmxlX09VVF9hcmc8VCxUX3Zhcj4gVF9vdXQ7CiAgaW5saW5lIF9DT1JCQV9Db25zdHJUeXBl
X1ZhcmlhYmxlX09VVF9hcmcoVComIHApIDogX2RhdGEocCkgeyBfZGF0YSA9IDA7IH0KICBpbmxp
bmUgX0NPUkJBX0NvbnN0clR5cGVfVmFyaWFibGVfT1VUX2FyZyhUX3ZhciYgcCkgOiBfZGF0YShw
LnBkX2RhdGEpIHsKICAgIHAgPSAoVCopMDsKICB9CiAgaW5saW5lIF9DT1JCQV9Db25zdHJUeXBl
X1ZhcmlhYmxlX09VVF9hcmcoY29uc3QgVF9vdXQmIHApIDogX2RhdGEocC5fZGF0YSkge30KICBp
bmxpbmUgVF9vdXQmIG9wZXJhdG9yPShjb25zdCBUX291dCYgcCkgeyBfZGF0YSA9IHAuX2RhdGE7
IHJldHVybiAqdGhpczsgfQogIGlubGluZSBUX291dCYgb3BlcmF0b3I9KFQqIHApIHsgX2RhdGEg
PSBwOyByZXR1cm4gKnRoaXM7IH0KICBpbmxpbmUgb3BlcmF0b3IgVComKCkgeyByZXR1cm4gX2Rh
dGE7IH0KICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQqJiBv
cGVyYXRvci0+KCkgeyByZXR1cm4gX2RhdGE7IH0KCiAgVComIF9kYXRhOwoKcHJpdmF0ZToKICBf
Q09SQkFfQ29uc3RyVHlwZV9WYXJpYWJsZV9PVVRfYXJnKCk7CiAgVF9vdXQmIG9wZXJhdG9yPShj
b25zdCBUX3ZhciYpOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KY2xh
c3MgX0NPUkJBX0FycmF5X09VVF9hcmc7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVF9IZWxwZXIsIGNsYXNz
IFQ+CmNsYXNzIF9DT1JCQV9BcnJheV9WYXIgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfQXJy
YXlfVmFyPFRfSGVscGVyLFQ+IFRfdmFyOwoKICBpbmxpbmUgX0NPUkJBX0FycmF5X1ZhciAoKSB7
IHBkX2RhdGEgPSAwOyB9CiAgaW5saW5lIF9DT1JCQV9BcnJheV9WYXIgKFQqIHApIHsgcGRfZGF0
YSA9IHA7IH0KICBpbmxpbmUgX0NPUkJBX0FycmF5X1ZhciAoY29uc3QgVF92YXImIHApIHsKICAg
IGlmKCAhcC5wZF9kYXRhICkgcGRfZGF0YSA9IDA7CiAgICBlbHNlIHsKICAgICAgcGRfZGF0YSA9
IFRfSGVscGVyOjpkdXAocC5wZF9kYXRhKTsKICAgICAgaWYoICFwZF9kYXRhICkgX0NPUkJBX25l
d19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwogICAgfQogIH0KCiAgaW5saW5lIH5fQ09SQkFfQXJy
YXlfVmFyKCkgeyBpZiggcGRfZGF0YSApIFRfSGVscGVyOjpmcmVlKHBkX2RhdGEpOyB9CgogIGlu
bGluZSBUX3ZhciYgb3BlcmF0b3I9IChUKiBwKSB7CiAgICBpZiAocGRfZGF0YSkgVF9IZWxwZXI6
OmZyZWUocGRfZGF0YSk7CiAgICBwZF9kYXRhID0gcDsKICAgIHJldHVybiAqdGhpczsKICB9Cgog
IGlubGluZSBUX3ZhciYgb3BlcmF0b3I9IChjb25zdCBUX3ZhciYgcCkgewogICAgaWYoICZwID09
IHRoaXMgKSByZXR1cm4gKnRoaXM7CiAgICBpZiggcGRfZGF0YSApIFRfSGVscGVyOjpmcmVlKHBk
X2RhdGEpOwoKICAgIGlmKCBwLnBkX2RhdGEgKSB7CiAgICAgIHBkX2RhdGEgPSBUX0hlbHBlcjo6
ZHVwKHAucGRfZGF0YSk7CiAgICAgIGlmKCAhcGRfZGF0YSApIF9DT1JCQV9uZXdfb3BlcmF0b3Jf
cmV0dXJuX251bGwoKTsKICAgIH0KICAgIGVsc2UgewogICAgICBwZF9kYXRhID0gMDsKICAgIH0K
ICAgIHJldHVybiAqdGhpczsKICB9CgoKICBpbmxpbmUgVCYgb3BlcmF0b3JbXSAoX0NPUkJBX1VM
b25nIGluZGV4KSB7CiAgICByZXR1cm4gKihwZF9kYXRhICsgaW5kZXgpOwogIH0KICBpbmxpbmUg
Y29uc3QgVCYgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25nIGluZGV4KSBjb25zdCB7CiAgICByZXR1
cm4gKigoY29uc3QgVCopIChwZF9kYXRhICsgaW5kZXgpKTsKICB9CiAgaW5saW5lIG9wZXJhdG9y
IFQqICgpIGNvbnN0IHsgcmV0dXJuIHBkX2RhdGE7IH0KCgoKCgoKICBjb25zdCBUKiBpbigpIGNv
bnN0IHsgcmV0dXJuIHBkX2RhdGE7IH0KICBUKiBpbm91dCgpIHsgcmV0dXJuIHBkX2RhdGE7IH0K
ICBUKiYgb3V0KCkgewogICAgaWYgKHBkX2RhdGEpIHsKICAgICAgVF9IZWxwZXI6OmZyZWUocGRf
ZGF0YSk7CiAgICAgIHBkX2RhdGEgPSAwOwogICAgfQogICAgcmV0dXJuIHBkX2RhdGE7CiAgfQog
IFQqIF9yZXRuKCkgeyBUKiB0bXAgPSBwZF9kYXRhOyBwZF9kYXRhID0gMDsgcmV0dXJuIHRtcDsg
fQoKICBmcmllbmQgY2xhc3MgX0NPUkJBX0FycmF5X09VVF9hcmc8VCwgVF92YXI+OwoKcHJpdmF0
ZToKICBUKiBwZF9kYXRhOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4K
Y2xhc3MgX0NPUkJBX0FycmF5X09VVF9hcmcgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfQXJy
YXlfT1VUX2FyZzxULFRfdmFyPiBUX291dDsKICBpbmxpbmUgX0NPUkJBX0FycmF5X09VVF9hcmco
VComIHApIDogX2RhdGEocCkgeyBfZGF0YSA9IDA7IH0KICBpbmxpbmUgX0NPUkJBX0FycmF5X09V
VF9hcmcoVF92YXImIHApIDogX2RhdGEocC5wZF9kYXRhKSB7CiAgICBwID0gKFQqKTA7CiAgfQog
IGlubGluZSBfQ09SQkFfQXJyYXlfT1VUX2FyZyhjb25zdCBUX291dCYgcCkgOiBfZGF0YShwLl9k
YXRhKSB7fQogIGlubGluZSBUX291dCYgb3BlcmF0b3I9KGNvbnN0IFRfb3V0JiBwKSB7IF9kYXRh
ID0gcC5fZGF0YTsgcmV0dXJuICp0aGlzOyB9CiAgaW5saW5lIFRfb3V0JiBvcGVyYXRvcj0oVCog
cCkgeyBfZGF0YSA9IHA7IHJldHVybiAqdGhpczsgfQogIGlubGluZSBvcGVyYXRvciBUKiYoKSB7
IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBUKiYgcHRyKCkgeyByZXR1cm4gX2RhdGE7IH0KICBp
bmxpbmUgVCYgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25nIGluZGV4KSB7CiAgICByZXR1cm4gX2Rh
dGFbaW5kZXhdOwogIH0KCiAgVComIF9kYXRhOwpwcml2YXRlOgogIF9DT1JCQV9BcnJheV9PVVRf
YXJnKCk7CiAgVF9vdXQmIG9wZXJhdG9yPShjb25zdCBUX3ZhciYpOwp9OwoKCgoKCnRlbXBsYXRl
IDxjbGFzcyBUX0hlbHBlcixjbGFzcyBUPgpjbGFzcyBfQ09SQkFfQXJyYXlfRm9yYW55IHsKcHVi
bGljOgogIGlubGluZSBfQ09SQkFfQXJyYXlfRm9yYW55ICgpIHsgcGRfZGF0YSA9IDA7IHBkX25v
Y29weSA9IDA7IH0KCgoKCgogIGlubGluZSBfQ09SQkFfQXJyYXlfRm9yYW55IChUKiBwLF9DT1JC
QV9Cb29sZWFuIG5vY29weSA9IDApIHsKICAgIHBkX2RhdGEgPSBwOyBwZF9ub2NvcHkgPSBub2Nv
cHk7CiAgfQoKICBpbmxpbmUgX0NPUkJBX0FycmF5X0ZvcmFueSAoY29uc3QgX0NPUkJBX0FycmF5
X0ZvcmFueTxUX0hlbHBlcixUPiYgcCkgewogICAgcGRfZGF0YSA9IHAucGRfZGF0YTsgcGRfbm9j
b3B5ID0gMDsKICB9CgogIGlubGluZSB+X0NPUkJBX0FycmF5X0ZvcmFueSgpIHsKCiAgfQoKICBp
bmxpbmUgX0NPUkJBX0FycmF5X0ZvcmFueTxUX0hlbHBlcixUPiYgb3BlcmF0b3I9IChUKiBwKSB7
CiAgICBwZF9kYXRhID0gcDsgcGRfbm9jb3B5ID0gMDsgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5s
aW5lIFQmIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBpbmRleCkgeyByZXR1cm4gKihwZF9kYXRh
ICsgaW5kZXgpOyB9CiAgaW5saW5lIGNvbnN0IFQmIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBp
bmRleCkgY29uc3QgewogICAgcmV0dXJuICooIChjb25zdCBUKikgKHBkX2RhdGEgKyBpbmRleCkp
OwogIH0KCiAgaW5saW5lIG9wZXJhdG9yIFQqICgpIGNvbnN0IHsgcmV0dXJuIHBkX2RhdGE7IH0K
ICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgVCogKCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IFQqKXBk
X2RhdGE7IH0KCiAgaW5saW5lIFQqIE5QX2dldFNsaWNlKCkgY29uc3QgeyByZXR1cm4gcGRfZGF0
YTsgfQogIGlubGluZSBfQ09SQkFfQm9vbGVhbiBOUF9ub2NvcHkoKSBjb25zdCB7IHJldHVybiBw
ZF9ub2NvcHk7IH0KCnByaXZhdGU6CiAgVCogcGRfZGF0YTsKICBfQ09SQkFfQm9vbGVhbiBwZF9u
b2NvcHk7Cn07CiMgMjU3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3N0cmluZ3R5cGVzLmgiIDEgMwojIDY3
ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvc3RyaW5ndHlwZXMuaCIgMwpjbGFzcyBfQ09S
QkFfU3RyaW5nX21lbWJlcjsKY2xhc3MgX0NPUkJBX1N0cmluZ19lbGVtZW50OwpjbGFzcyBfQ09S
QkFfU3RyaW5nX2lub3V0OwpjbGFzcyBfQ09SQkFfU3RyaW5nX291dDsKCgoKCgpjbGFzcyBfQ09S
QkFfU3RyaW5nX3ZhciB7CnB1YmxpYzoKCgoKCgogIHR5cGVkZWYgY2hhciogcHRyX3Q7CgogIHN0
YXRpYyBpbmxpbmUgY2hhciogc3RyaW5nX2R1cChjb25zdCBjaGFyKiBwKSB7CiAgICBjaGFyKiBy
ID0gb21uaTo6YWxsb2NTdHJpbmcoc3RybGVuKHApKTsKICAgIHN0cmNweShyLCBwKTsKICAgIHJl
dHVybiByOwogIH0KCiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfdmFyKCkgeyBfZGF0YSA9IDA7IH0K
ICBpbmxpbmUgX0NPUkJBX1N0cmluZ192YXIoY2hhciAqcCkgeyBfZGF0YSA9IHA7IH0KCiAgaW5s
aW5lIF9DT1JCQV9TdHJpbmdfdmFyKGNvbnN0IGNoYXIqIHApIHsKICAgIGlmKCBwICkgX2RhdGEg
PSBzdHJpbmdfZHVwKHApOwogICAgZWxzZSBfZGF0YSA9IDA7CiAgfQoKICBpbmxpbmUgX0NPUkJB
X1N0cmluZ192YXIoY29uc3QgX0NPUkJBX1N0cmluZ192YXImIHMpIHsKICAgIGlmKCAoY29uc3Qg
Y2hhciAqKXMgKSBfZGF0YSA9IHN0cmluZ19kdXAocyk7CiAgICBlbHNlIF9kYXRhID0gMDsKICB9
CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX3Zhcihjb25zdCBfQ09SQkFfU3RyaW5nX21lbWJlciYg
cyk7CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX3Zhcihjb25zdCBfQ09SQkFfU3RyaW5nX2VsZW1l
bnQmIHMpOwoKICBpbmxpbmUgfl9DT1JCQV9TdHJpbmdfdmFyKCkgewogICAgb21uaTo6ZnJlZVN0
cmluZyhfZGF0YSk7CiAgfQoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ192YXImIG9wZXJhdG9yPShj
aGFyKiBwKSB7CiAgICBvbW5pOjpmcmVlU3RyaW5nKF9kYXRhKTsKICAgIF9kYXRhID0gcDsKICAg
IHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX3ZhciYgb3BlcmF0b3I9
KGNvbnN0IGNoYXIqIHApIHsKICAgIG9tbmk6OmZyZWVTdHJpbmcoX2RhdGEpOwogICAgX2RhdGEg
PSAwOwogICAgaWYgKHApIF9kYXRhID0gc3RyaW5nX2R1cChwKTsKICAgIHJldHVybiAqdGhpczsK
ICB9CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX3ZhciYgb3BlcmF0b3I9KGNvbnN0IF9DT1JCQV9T
dHJpbmdfdmFyJiBzKSB7CiAgICBpZiAoJnMgIT0gdGhpcykgewogICAgICBvbW5pOjpmcmVlU3Ry
aW5nKF9kYXRhKTsKICAgICAgX2RhdGEgPSAwOwogICAgICBpZiggKGNvbnN0IGNoYXIqKXMgKSBf
ZGF0YSA9IHN0cmluZ19kdXAocyk7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxp
bmUgX0NPUkJBX1N0cmluZ192YXImIG9wZXJhdG9yPShjb25zdCBfQ09SQkFfU3RyaW5nX21lbWJl
ciYgcyk7CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX3ZhciYgb3BlcmF0b3I9KGNvbnN0IF9DT1JC
QV9TdHJpbmdfZWxlbWVudCYgcyk7CgoKICBpbmxpbmUgb3BlcmF0b3IgY2hhciogKCkgeyByZXR1
cm4gX2RhdGE7IH0KICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1
cm4gX2RhdGE7IH0KCgoKCiAgaW5saW5lIGNoYXImIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBp
bmRleCkgewogICAgaWYgKCFfZGF0YSB8fCAoX0NPUkJBX1VMb25nKXN0cmxlbihfZGF0YSkgPCBp
bmRleCkgewogICAgICBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIH0KICAgIHJldHVy
biBfZGF0YVtpbmRleF07CiAgfQoKICBpbmxpbmUgY2hhciBvcGVyYXRvcltdIChfQ09SQkFfVUxv
bmcgaW5kZXgpIGNvbnN0IHsKICAgIGlmICghX2RhdGEgfHwgKF9DT1JCQV9VTG9uZylzdHJsZW4o
X2RhdGEpIDwgaW5kZXgpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CiAgICB9
CiAgICByZXR1cm4gX2RhdGFbaW5kZXhdOwogIH0KCiAgaW5saW5lIGNvbnN0IGNoYXIqIGluKCkg
Y29uc3QgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgY2hhciomIGlub3V0KCkgeyByZXR1cm4g
X2RhdGE7IH0KICBpbmxpbmUgY2hhciomIG91dCgpIHsKICAgIGlmKCBfZGF0YSApewogICAgICBv
bW5pOjpmcmVlU3RyaW5nKF9kYXRhKTsKICAgICAgX2RhdGEgPSAwOwogICAgfQogICAgcmV0dXJu
IF9kYXRhOwogIH0KICBpbmxpbmUgY2hhciogX3JldG4oKSB7CiAgICBjaGFyKiB0bXAgPSBfZGF0
YTsKICAgIF9kYXRhID0gMDsKICAgIHJldHVybiB0bXA7CiAgfQoKICBmcmllbmQgY2xhc3MgX0NP
UkJBX1N0cmluZ19pbm91dDsKICBmcmllbmQgY2xhc3MgX0NPUkJBX1N0cmluZ19vdXQ7Cgpwcml2
YXRlOgogIGNoYXIqIF9kYXRhOwp9OwoKCgoKCmNsYXNzIF9DT1JCQV9TdHJpbmdfbWVtYmVyIHsK
cHVibGljOgogIHR5cGVkZWYgY2hhciogcHRyX3Q7CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX21l
bWJlcigpCiAgICA6IF9wdHIoKGNoYXIqKSBvbW5pOjplbXB0eV9zdHJpbmcpIHt9CgogIGlubGlu
ZSBfQ09SQkFfU3RyaW5nX21lbWJlcihjb25zdCBfQ09SQkFfU3RyaW5nX21lbWJlciYgcykKICAg
ICAgICAgICA6IF9wdHIoKGNoYXIqKW9tbmk6OmVtcHR5X3N0cmluZykgewogICAgaWYgKHMuX3B0
ciAmJiBzLl9wdHIgIT0gb21uaTo6ZW1wdHlfc3RyaW5nKQogICAgICBfcHRyID0gX0NPUkJBX1N0
cmluZ192YXI6OnN0cmluZ19kdXAocy5fcHRyKTsKICB9CgogIGlubGluZSB+X0NPUkJBX1N0cmlu
Z19tZW1iZXIoKSB7CiAgICBvbW5pOjpmcmVlU3RyaW5nKF9wdHIpOwogIH0KCiAgaW5saW5lIF9D
T1JCQV9TdHJpbmdfbWVtYmVyJiBvcGVyYXRvcj0oY2hhciogcykgewogICAgb21uaTo6ZnJlZVN0
cmluZyhfcHRyKTsKICAgIF9wdHIgPSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5l
IF9DT1JCQV9TdHJpbmdfbWVtYmVyJiBvcGVyYXRvcj0gKGNvbnN0IGNoYXIqIHMpIHsKICAgIG9t
bmk6OmZyZWVTdHJpbmcoX3B0cik7CiAgICBpZiAocykKICAgICAgX3B0ciA9IF9DT1JCQV9TdHJp
bmdfdmFyOjpzdHJpbmdfZHVwKHMpOwogICAgZWxzZQogICAgICBfcHRyID0gMDsKICAgIHJldHVy
biAqdGhpczsKICB9CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX21lbWJlciYgb3BlcmF0b3I9KGNv
bnN0IF9DT1JCQV9TdHJpbmdfbWVtYmVyJiBzKSB7CiAgICBpZiAoJnMgIT0gdGhpcykgewogICAg
ICBvbW5pOjpmcmVlU3RyaW5nKF9wdHIpOwogICAgICBpZiAocy5fcHRyICYmIHMuX3B0ciAhPSBv
bW5pOjplbXB0eV9zdHJpbmcpCiAgICAgICAgX3B0ciA9IF9DT1JCQV9TdHJpbmdfdmFyOjpzdHJp
bmdfZHVwKHMuX3B0cik7CiAgICAgIGVsc2UKICAgICAgICBfcHRyID0gcy5fcHRyOwogICAgfQog
ICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfbWVtYmVyJiBvcGVy
YXRvcj0oY29uc3QgX0NPUkJBX1N0cmluZ192YXImIHMpIHsKICAgIG9tbmk6OmZyZWVTdHJpbmco
X3B0cik7CiAgICBpZiggKGNvbnN0IGNoYXIqKXMgKSB7CiAgICAgIF9wdHIgPSBfQ09SQkFfU3Ry
aW5nX3Zhcjo6c3RyaW5nX2R1cCgoY29uc3QgY2hhciopcyk7CiAgICB9CiAgICBlbHNlIHsKICAg
ICAgX3B0ciA9IChjaGFyKikgMDsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGlu
ZSBfQ09SQkFfU3RyaW5nX21lbWJlciYgb3BlcmF0b3I9KGNvbnN0IF9DT1JCQV9TdHJpbmdfZWxl
bWVudCYgcyk7CgogIGlubGluZSBjaGFyJiBvcGVyYXRvcltdIChfQ09SQkFfVUxvbmcgaW5kZXgp
IHsKICAgIGlmICghX3B0ciB8fCAoX0NPUkJBX1VMb25nKXN0cmxlbihfcHRyKSA8IGluZGV4KSB7
CiAgICAgIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigpOwogICAgfQogICAgcmV0dXJuIF9wdHJb
aW5kZXhdOwogIH0KCiAgaW5saW5lIGNoYXIgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25nIGluZGV4
KSBjb25zdCB7CiAgICBpZiAoIV9wdHIgfHwgKF9DT1JCQV9VTG9uZylzdHJsZW4oX3B0cikgPCBp
bmRleCkgewogICAgICBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIH0KICAgIHJldHVy
biBfcHRyW2luZGV4XTsKICB9CgoKICBpbmxpbmUgb3BlcmF0b3IgY2hhciogKCkgeyByZXR1cm4g
X3B0cjsgfQogIGlubGluZSBvcGVyYXRvciBjb25zdCBjaGFyKiAoKSBjb25zdCB7IHJldHVybiBf
cHRyOyB9CgoKCgogIGlubGluZSBjb25zdCBjaGFyKiBpbigpIGNvbnN0IHsgcmV0dXJuIF9wdHI7
IH0KICBpbmxpbmUgY2hhciomIGlub3V0KCkgeyByZXR1cm4gX3B0cjsgfQogIGlubGluZSBjaGFy
KiYgb3V0KCkgewogICAgb21uaTo6ZnJlZVN0cmluZyhfcHRyKTsKICAgIF9wdHIgPSAwOwogICAg
cmV0dXJuIF9wdHI7CiAgfQoKICBpbmxpbmUgY2hhciogX3JldG4oKSB7CiAgICBjaGFyICp0bXA7
CiAgICB0bXAgPSBfcHRyOwogICAgX3B0ciA9IDA7CiAgICByZXR1cm4gdG1wOwogIH0KCiAgdm9p
ZCBvcGVyYXRvciA+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdDsKICB2b2lkIG9wZXJh
dG9yIDw8PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpOwogIHZvaWQgb3BlcmF0b3IgPj49IChNZW1C
dWZmZXJlZFN0cmVhbSYgcykgY29uc3Q7CiAgdm9pZCBvcGVyYXRvciA8PD0gKE1lbUJ1ZmZlcmVk
U3RyZWFtJiBzKTsKICBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0
KSBjb25zdDsKCiAgaW5saW5lIGNoYXIqJiBfTlBfcmVmKCkge3JldHVybiBfcHRyO30KCiAgY2hh
ciogX3B0cjsKCn07CgoKCgoKY2xhc3MgX0NPUkJBX1N0cmluZ19lbGVtZW50IHsKCnB1YmxpYzoK
CiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfZWxlbWVudChjaGFyKiYgcCwgX0NPUkJBX0Jvb2xlYW4g
cmVsKQogICAgOiBwZF9yZWwocmVsKSwgcGRfZGF0YShwKSB7fQoKICBpbmxpbmUgX0NPUkJBX1N0
cmluZ19lbGVtZW50KGNvbnN0IF9DT1JCQV9TdHJpbmdfZWxlbWVudCYgcykKICA6IHBkX3JlbChz
LnBkX3JlbCksIHBkX2RhdGEocy5wZF9kYXRhKSB7fQoKICBpbmxpbmUgfl9DT1JCQV9TdHJpbmdf
ZWxlbWVudCgpIHsKCiAgfQoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ19lbGVtZW50JiBvcGVyYXRv
cj0oY2hhciogcykgewogICAgaWYgKHBkX3JlbCkKICAgICAgb21uaTo6ZnJlZVN0cmluZyhwZF9k
YXRhKTsKICAgIHBkX2RhdGEgPSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9D
T1JCQV9TdHJpbmdfZWxlbWVudCYgb3BlcmF0b3I9IChjb25zdCBjaGFyKiBzKSB7CiAgICBpZiAo
cGRfcmVsKSB7CiAgICAgIG9tbmk6OmZyZWVTdHJpbmcocGRfZGF0YSk7CiAgICAgIGlmIChzKQog
ICAgICAgIHBkX2RhdGEgPSBfQ09SQkFfU3RyaW5nX3Zhcjo6c3RyaW5nX2R1cChzKTsKICAgICAg
ZWxzZQogICAgICAgIHBkX2RhdGEgPSAwOwogICAgfSBlbHNlIHsKICAgICAgcGRfZGF0YSA9IChj
aGFyKilzOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9DT1JCQV9TdHJp
bmdfZWxlbWVudCYgb3BlcmF0b3I9KGNvbnN0IF9DT1JCQV9TdHJpbmdfZWxlbWVudCYgcykgewog
ICAgaWYgKCZzICE9IHRoaXMpIHsKICAgICAgaWYgKHBkX3JlbCkgewogICAgICAgIG9tbmk6OmZy
ZWVTdHJpbmcocGRfZGF0YSk7CiAgICAgICAgaWYgKHMucGRfZGF0YSAmJiBzLnBkX2RhdGEgIT0g
b21uaTo6ZW1wdHlfc3RyaW5nKQogICAgICAgICAgcGRfZGF0YSA9IF9DT1JCQV9TdHJpbmdfdmFy
OjpzdHJpbmdfZHVwKHMucGRfZGF0YSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcGRfZGF0YSA9
IChjaGFyKilzLnBkX2RhdGE7CiAgICAgIH0gZWxzZQogICAgICAgIHBkX2RhdGEgPSAoY2hhciop
cy5wZF9kYXRhOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9DT1JCQV9T
dHJpbmdfZWxlbWVudCYgb3BlcmF0b3I9KGNvbnN0IF9DT1JCQV9TdHJpbmdfdmFyJiBzKSB7CiAg
ICBpZiAocGRfcmVsKSB7CiAgICAgIG9tbmk6OmZyZWVTdHJpbmcocGRfZGF0YSk7CiAgICAgIGlm
KCAoY29uc3QgY2hhciopcyApCiAgICAgICAgcGRfZGF0YSA9IF9DT1JCQV9TdHJpbmdfdmFyOjpz
dHJpbmdfZHVwKChjb25zdCBjaGFyKilzKTsKICAgICAgZWxzZQogICAgICAgIHBkX2RhdGEgPSAw
OwogICAgfSBlbHNlCiAgICAgIHBkX2RhdGEgPSAoY2hhciopKGNvbnN0IGNoYXIqKXM7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ19lbGVtZW50JiBvcGVyYXRv
cj0oY29uc3QgX0NPUkJBX1N0cmluZ19tZW1iZXImIHMpIHsKICAgIGlmIChwZF9yZWwpIHsKICAg
ICAgb21uaTo6ZnJlZVN0cmluZyhwZF9kYXRhKTsKICAgICAgaWYoIChjb25zdCBjaGFyKilzICYm
IChjb25zdCBjaGFyKikgcyAhPSBvbW5pOjplbXB0eV9zdHJpbmcpCiAgICAgICAgcGRfZGF0YSA9
IF9DT1JCQV9TdHJpbmdfdmFyOjpzdHJpbmdfZHVwKChjb25zdCBjaGFyKilzKTsKICAgICAgZWxz
ZQogICAgICAgIHBkX2RhdGEgPSAoY2hhciopKGNvbnN0IGNoYXIqKXM7CiAgICB9IGVsc2UKICAg
ICAgcGRfZGF0YSA9IChjaGFyKikoY29uc3QgY2hhciopczsKICAgIHJldHVybiAqdGhpczsKICB9
CgogIGlubGluZSBjaGFyJiBvcGVyYXRvcltdIChfQ09SQkFfVUxvbmcgaW5kZXgpIHsKICAgIGlm
ICghKChjaGFyKilwZF9kYXRhKSB8fCAoX0NPUkJBX1VMb25nKXN0cmxlbihwZF9kYXRhKSA8IGlu
ZGV4KSB7CiAgICAgIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigpOwogICAgfQogICAgcmV0dXJu
IHBkX2RhdGFbaW5kZXhdOwogIH0KCiAgaW5saW5lIGNoYXIgb3BlcmF0b3JbXSAoX0NPUkJBX1VM
b25nIGluZGV4KSBjb25zdCB7CiAgICBpZiAoISgoY2hhciopcGRfZGF0YSkgfHwgKF9DT1JCQV9V
TG9uZylzdHJsZW4ocGRfZGF0YSkgPCBpbmRleCkgewogICAgICBfQ09SQkFfYm91bmRfY2hlY2tf
ZXJyb3IoKTsKICAgIH0KICAgIHJldHVybiBwZF9kYXRhW2luZGV4XTsKICB9CgoKICBpbmxpbmUg
b3BlcmF0b3IgY2hhciogKCkgeyByZXR1cm4gcGRfZGF0YTsgfQogIGlubGluZSBvcGVyYXRvciBj
b25zdCBjaGFyKiAoKSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CgoKCgogIGlubGluZSBjb25z
dCBjaGFyKiBpbigpIGNvbnN0IHsgcmV0dXJuIHBkX2RhdGE7IH0KICBpbmxpbmUgY2hhciomIGlu
b3V0KCkgeyByZXR1cm4gcGRfZGF0YTsgfQogIGlubGluZSBjaGFyKiYgb3V0KCkgewogICAgaWYg
KHBkX3JlbCkgewogICAgICBvbW5pOjpmcmVlU3RyaW5nKHBkX2RhdGEpOwogICAgICBwZF9kYXRh
ID0gMDsKICAgIH0KICAgIGVsc2UgewogICAgICBwZF9kYXRhID0gMDsKICAgIH0KICAgIHJldHVy
biBwZF9kYXRhOwogIH0KICBpbmxpbmUgY2hhciogX3JldG4oKSB7CiAgICBjaGFyICp0bXA7CiAg
ICBpZiAocGRfcmVsKSB7CiAgICAgIHRtcCA9IHBkX2RhdGE7CiAgICAgIHBkX2RhdGEgPSAwOwog
ICAgfQogICAgZWxzZSB7CiAgICAgIHRtcCA9ICgoKGNoYXIqKXBkX2RhdGEpID8gX0NPUkJBX1N0
cmluZ192YXI6OnN0cmluZ19kdXAocGRfZGF0YSkgOiAwKTsKICAgICAgcGRfZGF0YSA9IDA7CiAg
ICB9CiAgICByZXR1cm4gdG1wOwogIH0KCgogIGlubGluZSBjaGFyKiYgX05QX3JlZigpIGNvbnN0
IHtyZXR1cm4gcGRfZGF0YTt9CiAgaW5saW5lIF9DT1JCQV9Cb29sZWFuIF9OUF9yZWxlYXNlKCkg
Y29uc3Qge3JldHVybiBwZF9yZWw7fQoKICBfQ09SQkFfQm9vbGVhbiBwZF9yZWw7CiAgY2hhciom
IHBkX2RhdGE7Cn07CiMgNDI2ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvc3RyaW5ndHlw
ZXMuaCIgMwppbmxpbmUgX0NPUkJBX1N0cmluZ192YXI6Ol9DT1JCQV9TdHJpbmdfdmFyKGNvbnN0
IF9DT1JCQV9TdHJpbmdfbWVtYmVyJiBzKQp7CiAgaWYgKChjb25zdCBjaGFyKilzKSB7CiAgICBf
ZGF0YSA9IF9DT1JCQV9TdHJpbmdfdmFyOjpzdHJpbmdfZHVwKHMpOwogIH0KICBlbHNlCiAgICBf
ZGF0YSA9IDA7Cn0KCmlubGluZSBfQ09SQkFfU3RyaW5nX3Zhcjo6X0NPUkJBX1N0cmluZ192YXIo
Y29uc3QgX0NPUkJBX1N0cmluZ19lbGVtZW50JiBzKQp7CiAgaWYgKChjb25zdCBjaGFyKilzKSB7
CiAgICBfZGF0YSA9IF9DT1JCQV9TdHJpbmdfdmFyOjpzdHJpbmdfZHVwKHMpOwogIH0KICBlbHNl
CiAgICBfZGF0YSA9IDA7Cn0KCmlubGluZSBfQ09SQkFfU3RyaW5nX3ZhciYKX0NPUkJBX1N0cmlu
Z192YXI6Om9wZXJhdG9yPSAoY29uc3QgX0NPUkJBX1N0cmluZ19tZW1iZXImIHMpCnsKICBvbW5p
OjpmcmVlU3RyaW5nKF9kYXRhKTsKICBpZiAoKGNvbnN0IGNoYXIqKXMpCiAgICBfZGF0YSA9IF9D
T1JCQV9TdHJpbmdfdmFyOjpzdHJpbmdfZHVwKHMpOwogIGVsc2UKICAgIF9kYXRhID0gMDsKICBy
ZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBfQ09SQkFfU3RyaW5nX3ZhciYKX0NPUkJBX1N0cmluZ192
YXI6Om9wZXJhdG9yPSAoY29uc3QgX0NPUkJBX1N0cmluZ19lbGVtZW50JiBzKQp7CiAgb21uaTo6
ZnJlZVN0cmluZyhfZGF0YSk7CiAgaWYgKChjb25zdCBjaGFyKilzKQogICAgX2RhdGEgPSBfQ09S
QkFfU3RyaW5nX3Zhcjo6c3RyaW5nX2R1cChzKTsKICBlbHNlCiAgICBfZGF0YSA9IDA7CiAgcmV0
dXJuICp0aGlzOwp9CgppbmxpbmUgX0NPUkJBX1N0cmluZ19tZW1iZXImCl9DT1JCQV9TdHJpbmdf
bWVtYmVyOjpvcGVyYXRvcj0oY29uc3QgX0NPUkJBX1N0cmluZ19lbGVtZW50JiBzKSB7CiAgb21u
aTo6ZnJlZVN0cmluZyhfcHRyKTsKICBpZiggKGNvbnN0IGNoYXIqKXMgKQogICAgX3B0ciA9IF9D
T1JCQV9TdHJpbmdfdmFyOjpzdHJpbmdfZHVwKChjb25zdCBjaGFyKilzKTsKICBlbHNlCiAgICBf
cHRyID0gMDsKICByZXR1cm4gKnRoaXM7Cn0KCgoKCgoKY2xhc3MgX0NPUkJBX1N0cmluZ19pbm91
dCB7CnB1YmxpYzoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ19pbm91dChjaGFyKiYgcCkgOiBfZGF0
YShwKSB7fQogIGlubGluZSBfQ09SQkFfU3RyaW5nX2lub3V0KF9DT1JCQV9TdHJpbmdfdmFyJiBw
KSA6IF9kYXRhKHAuX2RhdGEpIHt9CiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfaW5vdXQoX0NPUkJB
X1N0cmluZ19tZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSB7fQogIGlubGluZSBfQ09SQkFfU3Ry
aW5nX2lub3V0KF9DT1JCQV9TdHJpbmdfZWxlbWVudCYgcCkgOiBfZGF0YShwLl9OUF9yZWYoKSkg
ewoKCgoKCgogICAgaWYgKCFwLl9OUF9yZWxlYXNlKCkgJiYgKHAuX05QX3JlZigpKSkgewogICAg
ICBwLl9OUF9yZWYoKSA9ICgocC5fTlBfcmVmKCkpID8KICAgICAgICAgICAgICAgICAgICAgX0NP
UkJBX1N0cmluZ192YXI6OnN0cmluZ19kdXAocC5fTlBfcmVmKCkpIDogMCk7CiAgICB9CiAgfQog
IGlubGluZSB+X0NPUkJBX1N0cmluZ19pbm91dCgpIHt9CgogIGlubGluZSBvcGVyYXRvciBjaGFy
KiYoKSB7IHJldHVybiBfZGF0YTsgfQoKICBjaGFyKiYgX2RhdGE7Cgpwcml2YXRlOgogIF9DT1JC
QV9TdHJpbmdfaW5vdXQoKTsKfTsKCgoKCgpjbGFzcyBfQ09SQkFfU3RyaW5nX291dCB7CnB1Ymxp
YzoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ19vdXQoY2hhciomIHApIDogX2RhdGEocCkgeyBfZGF0
YSA9IDA7IH0KICBpbmxpbmUgX0NPUkJBX1N0cmluZ19vdXQoX0NPUkJBX1N0cmluZ192YXImIHAp
IDogX2RhdGEocC5fZGF0YSkgeyBwID0gKGNoYXIqKTA7IH0KICBpbmxpbmUgX0NPUkJBX1N0cmlu
Z19vdXQoX0NPUkJBX1N0cmluZ19tZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSB7IHAgPSAoY2hh
ciopMDsgfQogIGlubGluZSBfQ09SQkFfU3RyaW5nX291dChfQ09SQkFfU3RyaW5nX2VsZW1lbnQm
IHApIDogX2RhdGEocC5fTlBfcmVmKCkpIHsgcCA9IChjaGFyKikwOyB9CiAgaW5saW5lIH5fQ09S
QkFfU3RyaW5nX291dCgpIHt9CiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfb3V0KGNvbnN0IF9DT1JC
QV9TdHJpbmdfb3V0JiBwKSA6IF9kYXRhKHAuX2RhdGEpIHt9CiAgaW5saW5lIF9DT1JCQV9TdHJp
bmdfb3V0JiBvcGVyYXRvcj0oY29uc3QgX0NPUkJBX1N0cmluZ19vdXQmIHApIHsKICAgIF9kYXRh
ID0gcC5fZGF0YTsgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgX0NPUkJBX1N0cmluZ19vdXQm
IG9wZXJhdG9yPShjaGFyKiBwKSB7CiAgICBfZGF0YSA9IHA7IHJldHVybiAqdGhpczsKICB9CiAg
aW5saW5lIF9DT1JCQV9TdHJpbmdfb3V0JiBvcGVyYXRvcj0oY29uc3QgY2hhciogcCkgewogICAg
X2RhdGEgPSAoKHApID8gX0NPUkJBX1N0cmluZ192YXI6OnN0cmluZ19kdXAocCkgOiAwKTsgcmV0
dXJuICp0aGlzOwogIH0KCiAgb3BlcmF0b3IgY2hhciomICgpIHsgcmV0dXJuIF9kYXRhOyB9CiAg
Y2hhciomIHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9CgogIGNoYXIqJiBfZGF0YTsKCnByaXZhdGU6
CiAgX0NPUkJBX1N0cmluZ19vdXQoKTsKICBfQ09SQkFfU3RyaW5nX291dCYgb3BlcmF0b3I9KGNv
bnN0IF9DT1JCQV9TdHJpbmdfdmFyJiApOwogIF9DT1JCQV9TdHJpbmdfb3V0JiBvcGVyYXRvcj0o
Y29uc3QgX0NPUkJBX1N0cmluZ19tZW1iZXImICk7CiAgX0NPUkJBX1N0cmluZ19vdXQmIG9wZXJh
dG9yPShjb25zdCBfQ09SQkFfU3RyaW5nX2VsZW1lbnQmICk7Cn07CgoKCgoKY2xhc3MgX0NPUkJB
X1NlcXVlbmNlX19TdHJpbmcKewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfU3RyaW5nX2VsZW1l
bnQgRWxlbVQ7CiAgdHlwZWRlZiBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZyBTZXFUOwoKICBpbmxp
bmUgX0NPUkJBX1VMb25nIG1heGltdW0oKSBjb25zdCB7IHJldHVybiBwZF9tYXg7IH0KICBpbmxp
bmUgX0NPUkJBX1VMb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHBkX2xlbjsgfQogIGlubGlu
ZSB2b2lkIGxlbmd0aChfQ09SQkFfVUxvbmcgbGVuKSB7CiAgICBpZiAocGRfYm91bmRlZCAmJiBs
ZW4gPiBwZF9tYXgpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CgogICAgfQoK
CiAgICBmb3IoIF9DT1JCQV9VTG9uZyBpID0gbGVuOyBpIDwgcGRfbGVuOyBpKysgKQogICAgICBv
cGVyYXRvcltdKGkpID0gKGNoYXIqKSBvbW5pOjplbXB0eV9zdHJpbmc7CgogICAgaWYgKGxlbikg
ewoKCiAgICAgIGlmICghcGRfZGF0YSB8fCBsZW4gPiBwZF9tYXgpIHsKICAgICAgICBjb3B5YnVm
ZmVyKCgobGVuID4gcGRfbWF4KSA/IGxlbiA6IHBkX21heCkpOwogICAgICB9CiAgICB9CiAgICBw
ZF9sZW4gPSBsZW47CiAgfQoKICBpbmxpbmUgRWxlbVQgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25n
IGkpIHsKICAgIGlmKCBpID49IHBkX2xlbiApIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigpOwog
ICAgcmV0dXJuIEVsZW1UKHBkX2RhdGFbaV0scGRfcmVsKTsKICB9CiAgaW5saW5lIGNvbnN0IEVs
ZW1UIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBpKSBjb25zdCB7CiAgICBpZiggaSA+PSBwZF9s
ZW4gKSBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIHJldHVybiBFbGVtVChwZF9kYXRh
W2ldLHBkX3JlbCk7CiAgfQoKICBzdGF0aWMgaW5saW5lIGNoYXIqKiBhbGxvY2J1ZihfQ09SQkFf
VUxvbmcgbmVsZW1zKSB7CiAgICBpZiAoIW5lbGVtcykgcmV0dXJuIDA7CiAgICBjaGFyKiogYiA9
IG5ldyBjaGFyKltuZWxlbXMrMl07CiAgICBvbW5pOjpwdHJfYXJpdGhfdCBsID0gbmVsZW1zOwog
ICAgYlswXSA9IChjaGFyKikgKChvbW5pOjpwdHJfYXJpdGhfdCkgMHg1MzUxNTM1NFUpOwogICAg
YlsxXSA9IChjaGFyKikgbDsKICAgIGZvciAoX0NPUkJBX1VMb25nIGluZGV4ID0gMjsgaW5kZXgg
PCAobmVsZW1zKzIpOyBpbmRleCsrKQogICAgICBiW2luZGV4XSA9IChjaGFyKilvbW5pOjplbXB0
eV9zdHJpbmc7CiAgICByZXR1cm4gYisyOwogIH0KCiAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVi
dWYoY2hhcioqIGJ1ZikgewogICAgaWYgKCFidWYpIHJldHVybjsKICAgIGNoYXIqKiBiID0gYnVm
LTI7CiAgICBpZiAoKG9tbmk6OnB0cl9hcml0aF90KWJbMF0gIT0gKChvbW5pOjpwdHJfYXJpdGhf
dCkgMHg1MzUxNTM1NFUpKSB7CiAgICAgIF9DT1JCQV9iYWRfcGFyYW1fZnJlZWJ1ZigpOwogICAg
ICByZXR1cm47CiAgICB9CiAgICBvbW5pOjpwdHJfYXJpdGhfdCBsID0gKG9tbmk6OnB0cl9hcml0
aF90KSBiWzFdOwogICAgZm9yIChfQ09SQkFfVUxvbmcgaSA9IDA7IGkgPCAoX0NPUkJBX1VMb25n
KSBsOyBpKyspIHsKICAgICAgb21uaTo6ZnJlZVN0cmluZyhidWZbaV0pOwogICAgfQogICAgYlsw
XSA9IChjaGFyKikgMDsKICAgIGRlbGV0ZSBbXSBiOwogIH0KCgoKICBpbmxpbmUgX0NPUkJBX0Jv
b2xlYW4gcmVsZWFzZSgpIGNvbnN0IHsgcmV0dXJuIHBkX3JlbDsgfQoKICBpbmxpbmUgY2hhcioq
IGdldF9idWZmZXIoX0NPUkJBX0Jvb2xlYW4gb3JwaGFuID0gMCkgewogICAgaWYgKHBkX21heCAm
JiAhcGRfZGF0YSkgewogICAgICBjb3B5YnVmZmVyKHBkX21heCk7CiAgICB9CiAgICBpZiAoIW9y
cGhhbikgewogICAgICByZXR1cm4gcGRfZGF0YTsKICAgIH0KICAgIGVsc2UgewogICAgICBpZiAo
IXBkX3JlbCkKICAgICAgICByZXR1cm4gMDsKICAgICAgZWxzZSB7CiAgICAgICAgY2hhcioqIHRt
cCA9IHBkX2RhdGE7CiAgICAgICAgcGRfZGF0YSA9IDA7CiAgICAgICAgaWYgKCFwZF9ib3VuZGVk
KSB7CiAgICAgICAgICBwZF9tYXggPSAwOwogICAgICAgIH0KICAgICAgICBwZF9sZW4gPSAwOwog
ICAgICAgIHBkX3JlbCA9IDE7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgfQogICAgfQogIH0K
CiAgaW5saW5lIGNvbnN0IGNoYXIqIGNvbnN0KiBnZXRfYnVmZmVyKCkgY29uc3QgewogICAgaWYg
KHBkX21heCAmJiAhcGRfZGF0YSkgewoKICAgICAgX0NPUkJBX1NlcXVlbmNlX19TdHJpbmcqIHMg
PSBjb25zdF9jYXN0PF9DT1JCQV9TZXF1ZW5jZV9fU3RyaW5nKj4odGhpcyk7CgoKCiAgICAgIHMt
PmNvcHlidWZmZXIocGRfbWF4KTsKICAgIH0KCiAgICByZXR1cm4gcGRfZGF0YTsKCgoKICB9CgoK
ICBpbmxpbmUgfl9DT1JCQV9TZXF1ZW5jZV9fU3RyaW5nKCkgewogICAgaWYgKHBkX3JlbCAmJiBw
ZF9kYXRhKSBmcmVlYnVmKHBkX2RhdGEpOwogICAgcGRfZGF0YSA9IDA7CiAgfQoKCiAgc2l6ZV90
IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CiAgdm9pZCBvcGVy
YXRvciA+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdDsKICB2b2lkIG9wZXJhdG9yIDw8
PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpOwogIHZvaWQgb3BlcmF0b3IgPj49IChNZW1CdWZmZXJl
ZFN0cmVhbSYgcykgY29uc3Q7CiAgdm9pZCBvcGVyYXRvciA8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFt
JiBzKTsKCnByb3RlY3RlZDoKICBpbmxpbmUgX0NPUkJBX1NlcXVlbmNlX19TdHJpbmcoKQogICAg
OiBwZF9tYXgoMCksIHBkX2xlbigwKSwgcGRfcmVsKDEpLCBwZF9ib3VuZGVkKDApLCBwZF9kYXRh
KDApIHt9CgogIGlubGluZSBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZyhfQ09SQkFfVUxvbmcgbWF4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBib3VuZGVk
PTApCiAgICA6IHBkX21heChtYXgpLCBwZF9sZW4oMCksIHBkX3JlbCgxKSwgcGRfYm91bmRlZChi
b3VuZGVkKSwgcGRfZGF0YSgwKSB7CiAgfQoKICBpbmxpbmUgX0NPUkJBX1NlcXVlbmNlX19TdHJp
bmcoX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NP
UkJBX1VMb25nIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcioqIHZh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxl
YXNlID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4g
Ym91bmRlZCA9IDApCiAgICAgOiBwZF9tYXgobWF4KSwgcGRfbGVuKGxlbiksIHBkX3JlbChyZWxl
YXNlKSwKICAgICAgIHBkX2JvdW5kZWQoYm91bmRlZCksIHBkX2RhdGEodmFsdWUpIHsKICAgIGlm
IChsZW4gPiBtYXggfHwgKGxlbiAmJiAhdmFsdWUpKSB7CiAgICAgIF9DT1JCQV9ib3VuZF9jaGVj
a19lcnJvcigpOwoKICAgIH0KICB9CgogIGlubGluZSBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZyhj
b25zdCBTZXFUJiBzKQogICAgOiBwZF9tYXgocy5wZF9tYXgpLCBwZF9sZW4oMCksIHBkX3JlbCgx
KSwKICAgICAgcGRfYm91bmRlZChzLnBkX2JvdW5kZWQpLCBwZF9kYXRhKDApIHsKICAgIGxlbmd0
aChzLnBkX2xlbik7CiAgICBmb3IoIF9DT1JCQV9VTG9uZyBpID0gMDsgaSA8IHBkX2xlbjsgaSsr
ICkKICAgICAgb3BlcmF0b3JbXShpKSA9IHNbaV07CiAgfQoKICBpbmxpbmUgU2VxVCYgb3BlcmF0
b3IgPSAoY29uc3QgU2VxVCYgcykgewogICAgbGVuZ3RoKHMucGRfbGVuKTsKICAgIGZvciggX0NP
UkJBX1VMb25nIGkgPSAwOyBpIDwgcGRfbGVuOyBpKysgKQogICAgICBvcGVyYXRvcltdKGkpID0g
c1tpXTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKICBpbmxpbmUgdm9pZCByZXBsYWNlKF9DT1JC
QV9VTG9uZyBtYXgsIF9DT1JCQV9VTG9uZyBsZW4sIGNoYXIqKiBkYXRhLAogICAgICAgICAgICAg
ICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApIHsKICAgIGlmIChsZW4gPiBtYXgg
fHwgKGxlbiAmJiAhZGF0YSkpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7Cgog
ICAgfQogICAgaWYgKHBkX3JlbCAmJiBwZF9kYXRhKSB7CiAgICAgIGZyZWVidWYocGRfZGF0YSk7
CiAgICB9CiAgICBwZF9tYXggPSBtYXg7CiAgICBwZF9sZW4gPSBsZW47CiAgICBwZF9kYXRhID0g
ZGF0YTsKICAgIHBkX3JlbCA9IHJlbGVhc2U7CiAgfQoKCnByaXZhdGU6CgogIHZvaWQgY29weWJ1
ZmZlcihfQ09SQkFfVUxvbmcgbmV3bWF4KSB7CgoKCiAgICBjaGFyKiogbmV3ZGF0YSA9IGFsbG9j
YnVmKG5ld21heCk7CiAgICBpZiAoIW5ld2RhdGEpIHsKICAgICAgX0NPUkJBX25ld19vcGVyYXRv
cl9yZXR1cm5fbnVsbCgpOwoKICAgIH0KICAgIGZvciAodW5zaWduZWQgbG9uZyBpPTA7IGkgPCBw
ZF9sZW47IGkrKykgewogICAgICBpZiAocGRfcmVsKSB7CiAgICAgICAgbmV3ZGF0YVtpXSA9IHBk
X2RhdGFbaV07CiAgICAgICAgcGRfZGF0YVtpXSA9IDA7CiAgICAgIH0KICAgICAgZWxzZSB7CiAg
ICAgICAgbmV3ZGF0YVtpXSA9ICgocGRfZGF0YVtpXSkgPwogICAgICAgICAgICAgICAgICAgICAg
X0NPUkJBX1N0cmluZ192YXI6OnN0cmluZ19kdXAocGRfZGF0YVtpXSkgOiAwKTsKICAgICAgfQog
ICAgfQogICAgaWYgKHBkX3JlbCkgewogICAgICBpZiAocGRfZGF0YSkgZnJlZWJ1ZihwZF9kYXRh
KTsKICAgIH0KICAgIGVsc2UgewogICAgICBwZF9yZWwgPSAxOwogICAgfQogICAgcGRfZGF0YSA9
IG5ld2RhdGE7CiAgICBwZF9tYXggPSBuZXdtYXg7CiAgfQoKICBfQ09SQkFfVUxvbmcgcGRfbWF4
OwogIF9DT1JCQV9VTG9uZyBwZF9sZW47CiAgX0NPUkJBX0Jvb2xlYW4gcGRfcmVsOwogIF9DT1JC
QV9Cb29sZWFuIHBkX2JvdW5kZWQ7CiAgY2hhcioqIHBkX2RhdGE7Cn07CgoKCgoKdGVtcGxhdGU8
aW50IG1heD4KY2xhc3MgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX1N0cmluZwogIDogcHVibGlj
IF9DT1JCQV9TZXF1ZW5jZV9fU3RyaW5nCnsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX0JvdW5k
ZWRfU2VxdWVuY2VfX1N0cmluZzxtYXg+IFNlcVQ7CgogIGlubGluZSBfQ09SQkFfQm91bmRlZF9T
ZXF1ZW5jZV9fU3RyaW5nKCkKICAgIDogX0NPUkJBX1NlcXVlbmNlX19TdHJpbmcobWF4LDEpIHt9
CgogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5nKF9DT1JCQV9VTG9uZyBs
ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcioqIHZh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29s
ZWFuIHJlbGVhc2UgPSAwKQogICAgOiBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZyhtYXgsIGxlbmd0
aCwgdmFsdWUsIHJlbGVhc2UsIDEpIHt9CgogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5j
ZV9fU3RyaW5nKGNvbnN0IFNlcVQmIHMpCiAgICA6IF9DT1JCQV9TZXF1ZW5jZV9fU3RyaW5nKHMp
IHt9CgogIGlubGluZSB+X0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX1N0cmluZygpIHt9CgogIGlu
bGluZSBTZXFUJiBvcGVyYXRvciA9IChjb25zdCBTZXFUJiBzKSB7CiAgICBfQ09SQkFfU2VxdWVu
Y2VfX1N0cmluZzo6b3BlcmF0b3IgPSAocyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5s
aW5lIHZvaWQgcmVwbGFjZShfQ09SQkFfVUxvbmcgbGVuLCBjaGFyKiogZGF0YSwKICAgICAgICAg
ICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKSB7CiAgICBfQ09SQkFfU2Vx
dWVuY2VfX1N0cmluZzo6cmVwbGFjZShtYXgsbGVuLGRhdGEscmVsZWFzZSk7CiAgfQp9OwoKCgoK
CmNsYXNzIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZwogIDogcHVibGljIF9DT1JC
QV9TZXF1ZW5jZV9fU3RyaW5nCnsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9fU3RyaW5nIFNlcVQ7CgogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNl
X19TdHJpbmcoKSB7fQoKICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5n
KF9DT1JCQV9VTG9uZyBtYXgpIDoKICAgICAgICAgX0NPUkJBX1NlcXVlbmNlX19TdHJpbmcobWF4
KSB7fQoKICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5nKF9DT1JCQV9V
TG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09S
QkFfVUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhcioqIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApCiAgICA6IF9DT1JCQV9TZXF1ZW5jZV9fU3Ry
aW5nKG1heCwgbGVuZ3RoLCB2YWx1ZSwgcmVsZWFzZSkge30KCiAgaW5saW5lIF9DT1JCQV9VbmJv
dW5kZWRfU2VxdWVuY2VfX1N0cmluZyhjb25zdCBTZXFUJiBzKQogICAgOiBfQ09SQkFfU2VxdWVu
Y2VfX1N0cmluZyhzKSB7fQoKICBpbmxpbmUgfl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0
cmluZygpIHt9CgogIGlubGluZSBTZXFUJiBvcGVyYXRvciA9IChjb25zdCBTZXFUJiBzKSB7CiAg
ICBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZzo6b3BlcmF0b3IgPSAocyk7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQoKCiAgaW5saW5lIHZvaWQgcmVwbGFjZShfQ09SQkFfVUxvbmcgbWF4LCBfQ09SQkFf
VUxvbmcgbGVuLCBjaGFyKiogZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29s
ZWFuIHJlbGVhc2UgPSAwKSB7CiAgICBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZzo6cmVwbGFjZSht
YXgsbGVuLGRhdGEscmVsZWFzZSk7CiAgfQoKfTsKIyAyNTggIi91c3IvbG9jYWwvaW5jbHVkZS9v
bW5pT1JCMy9DT1JCQS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvdXNl
cmV4Y2VwdGlvbi5oIiAxIDMKIyAyNTkgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9DT1JC
QS5oIiAyIDMKCgoKY2xhc3Mgb21uaU9yYkJvYVNlcnZhbnQ7CgoKbmFtZXNwYWNlIENPUkJBCgp7
CgoKCiAgdHlwZWRlZiB2b2lkKiBTdGF0dXM7CgoKCgoKCgogIHR5cGVkZWYgX0NPUkJBX0Jvb2xl
YW4gQm9vbGVhbjsKICB0eXBlZGVmIF9DT1JCQV9DaGFyIENoYXI7CiAgdHlwZWRlZiBfQ09SQkFf
T2N0ZXQgT2N0ZXQ7CiAgdHlwZWRlZiBfQ09SQkFfU2hvcnQgU2hvcnQ7CiAgdHlwZWRlZiBfQ09S
QkFfVVNob3J0IFVTaG9ydDsKICB0eXBlZGVmIF9DT1JCQV9Mb25nIExvbmc7CiAgdHlwZWRlZiBf
Q09SQkFfVUxvbmcgVUxvbmc7CgogIHR5cGVkZWYgX0NPUkJBX0xvbmdMb25nIExvbmdMb25nOwog
IHR5cGVkZWYgX0NPUkJBX1VMb25nTG9uZyBVTG9uZ0xvbmc7CgoKICB0eXBlZGVmIF9DT1JCQV9G
bG9hdCBGbG9hdDsKICB0eXBlZGVmIF9DT1JCQV9Eb3VibGUgRG91YmxlOwoKCgoKCiAgdHlwZWRl
ZiBfQ09SQkFfQm9vbGVhbiYgQm9vbGVhbl9vdXQ7CiAgdHlwZWRlZiBfQ09SQkFfQ2hhciYgQ2hh
cl9vdXQ7CiAgdHlwZWRlZiBfQ09SQkFfT2N0ZXQmIE9jdGV0X291dDsKICB0eXBlZGVmIF9DT1JC
QV9TaG9ydCYgU2hvcnRfb3V0OwogIHR5cGVkZWYgX0NPUkJBX1VTaG9ydCYgVVNob3J0X291dDsK
ICB0eXBlZGVmIF9DT1JCQV9Mb25nJiBMb25nX291dDsKICB0eXBlZGVmIF9DT1JCQV9VTG9uZyYg
VUxvbmdfb3V0OwoKICB0eXBlZGVmIF9DT1JCQV9GbG9hdCYgRmxvYXRfb3V0OwogIHR5cGVkZWYg
X0NPUkJBX0RvdWJsZSYgRG91YmxlX291dDsKCgoKCgoKCiAgICAgICAgICAgICAgICAgICBjaGFy
KiBzdHJpbmdfYWxsb2MoVUxvbmcgbGVuKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgc3RyaW5n
X2ZyZWUoY2hhciopOwogICAgICAgICAgICAgICAgICAgY2hhciogc3RyaW5nX2R1cChjb25zdCBj
aGFyKik7CgogIHR5cGVkZWYgX0NPUkJBX1N0cmluZ192YXIgU3RyaW5nX3ZhcjsKICB0eXBlZGVm
IF9DT1JCQV9TdHJpbmdfbWVtYmVyIFN0cmluZ19tZW1iZXI7CiAgdHlwZWRlZiBfQ09SQkFfU3Ry
aW5nX2lub3V0IFN0cmluZ19JTk9VVF9hcmc7CiAgdHlwZWRlZiBfQ09SQkFfU3RyaW5nX291dCBT
dHJpbmdfT1VUX2FyZzsKICB0eXBlZGVmIFN0cmluZ19PVVRfYXJnIFN0cmluZ19vdXQ7CgoKCgoK
CiAgY2xhc3MgT2JqZWN0OwogIGNsYXNzIE9iamVjdF92YXI7CiAgdHlwZWRlZiBPYmplY3QqIE9i
amVjdF9wdHI7CiAgdHlwZWRlZiBPYmplY3RfcHRyIE9iamVjdFJlZjsKCiAgY2xhc3MgVHlwZUNv
ZGU7CiAgdHlwZWRlZiBjbGFzcyBUeXBlQ29kZSogVHlwZUNvZGVfcHRyOwogIHR5cGVkZWYgVHlw
ZUNvZGVfcHRyIFR5cGVDb2RlUmVmOwoKCiAgY2xhc3MgQW55IHsKICBwdWJsaWM6CiAgICBBbnko
KTsKCiAgICB+QW55KCk7CgogICAgQW55KGNvbnN0IEFueSYgYSk7CgogICAgQW55KFR5cGVDb2Rl
X3B0ciB0Yywgdm9pZCogdmFsdWUsIEJvb2xlYW4gcmVsZWFzZSA9IDApOwoKCiAgICB2b2lkIG9w
ZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSYgcykgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9y
PDw9IChOZXRCdWZmZXJlZFN0cmVhbSYgcyk7CgogICAgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVm
ZmVyZWRTdHJlYW0mIHMpIGNvbnN0OwogICAgdm9pZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRT
dHJlYW0mIHMpOwoKICAgIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZz
ZXQpIGNvbnN0OwoKICAgIHZvaWQqIE5QX3BkKCkgeyByZXR1cm4gcGRfcHRyOyB9CiAgICB2b2lk
KiBOUF9wZCgpIGNvbnN0IHsgcmV0dXJuIHBkX3B0cjsgfQoKCiAgICB2b2lkIE5QX21hcnNoYWxE
YXRhT25seShOZXRCdWZmZXJlZFN0cmVhbSYgcykgY29uc3Q7CiAgICB2b2lkIE5QX3VubWFyc2hh
bERhdGFPbmx5KE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKTsKCiAgICB2b2lkIE5QX21hcnNoYWxEYXRh
T25seShNZW1CdWZmZXJlZFN0cmVhbSYgcykgY29uc3Q7CiAgICB2b2lkIE5QX3VubWFyc2hhbERh
dGFPbmx5KE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKTsKCiAgICBzaXplX3QgTlBfYWxpZ25lZERhdGFP
bmx5U2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CgoKICAgIHZvaWQgUFJfcGFja0Zy
b20oVHlwZUNvZGVfcHRyIG5ld3RjLCB2b2lkKiB0Y2Rlc2MpOwogICAgQm9vbGVhbiBQUl91bnBh
Y2tUbyhUeXBlQ29kZV9wdHIgdGMsIHZvaWQqIHRjZGVzYykgY29uc3Q7CgogICAgdm9pZCAqUFJf
Z2V0Q2FjaGVkRGF0YSgpIGNvbnN0OwogICAgdm9pZCBQUl9zZXRDYWNoZWREYXRhKHZvaWQgKmRh
dGEsIHZvaWQoKmRlc3RydWN0b3IpKHZvaWQgKikpOwoKCiAgICBBbnkmIG9wZXJhdG9yPShjb25z
dCBBbnkmIGEpOwoKICAgIHZvaWQgb3BlcmF0b3I8PD0oU2hvcnQgcyk7CgogICAgdm9pZCBvcGVy
YXRvcjw8PShVU2hvcnQgdSk7CgogICAgdm9pZCBvcGVyYXRvcjw8PShMb25nIGwpOwoKICAgIHZv
aWQgb3BlcmF0b3I8PD0oVUxvbmcgdSk7CgoKICAgIHZvaWQgb3BlcmF0b3I8PD0oRmxvYXQgZik7
CgogICAgdm9pZCBvcGVyYXRvcjw8PShEb3VibGUgZCk7CgoKICAgIHZvaWQgb3BlcmF0b3I8PD0o
Y29uc3QgQW55JiBhKTsKCiAgICB2b2lkIG9wZXJhdG9yPDw9KEFueSogYSk7CgogICAgdm9pZCBv
cGVyYXRvcjw8PShUeXBlQ29kZV9wdHIgdGMpOwoKICAgIHZvaWQgb3BlcmF0b3I8PD0oT2JqZWN0
X3B0ciBvYmopOwoKICAgIHZvaWQgb3BlcmF0b3I8PD0oY29uc3QgY2hhciogcyk7CgogICAgc3Ry
dWN0IGZyb21fYm9vbGVhbiB7CiAgICAgIGZyb21fYm9vbGVhbihCb29sZWFuIGIpIDogdmFsKGIp
IHt9CiAgICAgIEJvb2xlYW4gdmFsOwogICAgfTsKCiAgICBzdHJ1Y3QgZnJvbV9vY3RldCB7CiAg
ICAgIGZyb21fb2N0ZXQoT2N0ZXQgYikgOiB2YWwoYikge30KICAgICAgT2N0ZXQgdmFsOwogICAg
fTsKCiAgICBzdHJ1Y3QgZnJvbV9jaGFyIHsKICAgICAgZnJvbV9jaGFyKENoYXIgYikgOiB2YWwo
Yikge30KICAgICAgQ2hhciB2YWw7CiAgICB9OwoKICAgIHN0cnVjdCBmcm9tX3N0cmluZyB7CiAg
ICAgIGZyb21fc3RyaW5nKGNvbnN0IGNoYXIqIHMsIFVMb25nIGIsIEJvb2xlYW4gbm9jb3B5ID0g
MCkKICAgICAgICA6IHZhbCgoY2hhciopcyksIGJvdW5kKGIpLCBuYyhub2NvcHkpIHsgfQogICAg
ICBmcm9tX3N0cmluZyhjaGFyKiBzLCBVTG9uZyBiLCBCb29sZWFuIG5vY29weSA9IDApCiAgICAg
ICAgOiB2YWwocyksIGJvdW5kKGIpLCBuYyhub2NvcHkpIHsgfQoKICAgICAgY2hhciogdmFsOwog
ICAgICBVTG9uZyBib3VuZDsKICAgICAgQm9vbGVhbiBuYzsKICAgIH07CgoKICAgIHZvaWQgb3Bl
cmF0b3I8PD0oZnJvbV9ib29sZWFuIGYpOwoKICAgIHZvaWQgb3BlcmF0b3I8PD0oZnJvbV9jaGFy
IGMpOwoKICAgIHZvaWQgb3BlcmF0b3I8PD0oZnJvbV9vY3RldCBvKTsKCiAgICB2b2lkIG9wZXJh
dG9yPDw9KGZyb21fc3RyaW5nIHMpOwoKCiAgICBCb29sZWFuIG9wZXJhdG9yPj49KFNob3J0JiBz
KSBjb25zdDsKCiAgICBCb29sZWFuIG9wZXJhdG9yPj49KFVTaG9ydCYgdSkgY29uc3Q7CgogICAg
Qm9vbGVhbiBvcGVyYXRvcj4+PShMb25nJiBsKSBjb25zdDsKCiAgICBCb29sZWFuIG9wZXJhdG9y
Pj49KFVMb25nJiB1KSBjb25zdDsKCgogICAgQm9vbGVhbiBvcGVyYXRvcj4+PShGbG9hdCYgZikg
Y29uc3Q7CgogICAgQm9vbGVhbiBvcGVyYXRvcj4+PShEb3VibGUmIGQpIGNvbnN0OwoKCiAgICBC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IEFueSomIGEpIGNvbnN0OwogICAgQm9vbGVhbiBvcGVy
YXRvcj4+PShBbnkqJiBhKSBjb25zdDsKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0oQW55JiBhKSBj
b25zdDsKCiAgICBCb29sZWFuIG9wZXJhdG9yPj49KFR5cGVDb2RlX3B0ciYgdGMpIGNvbnN0OwoK
ICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgY2hhciomIHMpIGNvbnN0OwoKICAgIEJvb2xl
YW4gb3BlcmF0b3I+Pj0oY2hhciomIHMpIGNvbnN0OwoKCiAgICBzdHJ1Y3QgdG9fYm9vbGVhbiB7
CiAgICAgIHRvX2Jvb2xlYW4oQm9vbGVhbiYgYikgOiByZWYoYikge30KICAgICAgQm9vbGVhbiYg
cmVmOwogICAgfTsKCiAgICBzdHJ1Y3QgdG9fY2hhciB7CiAgICAgIHRvX2NoYXIoQ2hhciYgYikg
OiByZWYoYikge30KICAgICAgQ2hhciYgcmVmOwogICAgfTsKCiAgICBzdHJ1Y3QgdG9fb2N0ZXQg
ewogICAgICB0b19vY3RldChPY3RldCYgYikgOiByZWYoYikge30KICAgICAgT2N0ZXQmIHJlZjsK
ICAgIH07CgogICAgc3RydWN0IHRvX3N0cmluZyB7CiAgICAgIHRvX3N0cmluZyhjb25zdCBjaGFy
KiYgcywgVUxvbmcgYikgOiB2YWwoKGNoYXIqJilzKSwgYm91bmQoYikgeyB9CiAgICAgIHRvX3N0
cmluZyhjaGFyKiYgcywgVUxvbmcgYikgOiB2YWwocyksIGJvdW5kKGIpIHsgfQoKICAgICAgY2hh
ciomIHZhbDsKICAgICAgVUxvbmcgYm91bmQ7CiAgICB9OwoKICAgIHN0cnVjdCB0b19vYmplY3Qg
ewogICAgICB0b19vYmplY3QoT2JqZWN0X3B0ciYgb2JqKSA6IHJlZihvYmopIHsgfQogICAgICBP
YmplY3RfcHRyJiByZWY7CiAgICB9OwoKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0odG9fYm9vbGVh
biBiKSBjb25zdDsKCiAgICBCb29sZWFuIG9wZXJhdG9yPj49KHRvX2NoYXIgYykgY29uc3Q7Cgog
ICAgQm9vbGVhbiBvcGVyYXRvcj4+PSh0b19vY3RldCBvKSBjb25zdDsKCgogICAgQm9vbGVhbiBv
cGVyYXRvcj4+PSh0b19zdHJpbmcgcykgY29uc3Q7CgoKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0o
dG9fb2JqZWN0IG8pIGNvbnN0OwoKICAgIHZvaWQgcmVwbGFjZShUeXBlQ29kZV9wdHIgVENwLCB2
b2lkKiB2YWx1ZSwgQm9vbGVhbiByZWxlYXNlID0gMCk7CgogICAgVHlwZUNvZGVfcHRyIHR5cGUo
KSBjb25zdDsKICAgIHZvaWQgdHlwZShUeXBlQ29kZV9wdHIpOwoKICAgIGNvbnN0IHZvaWQqIHZh
bHVlKCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICB2b2lkICpwZF9wdHI7CiAgfTsKCgogIGNsYXNz
IEFueV9PVVRfYXJnOwoKCiAgY2xhc3MgQW55X3ZhciB7CiAgcHVibGljOgogICAgaW5saW5lIEFu
eV92YXIoKSB7IHBkX2RhdGEgPSAwOyB9CiAgICBpbmxpbmUgQW55X3ZhcihBbnkqIHApIHsgcGRf
ZGF0YSA9IHA7IH0KICAgIGlubGluZSBBbnlfdmFyKGNvbnN0IEFueV92YXImIHApIHsKICAgICAg
aWYgKCFwLnBkX2RhdGEpIHsKICAgICAgICBwZF9kYXRhID0gMDsKICAgICAgICByZXR1cm47CiAg
ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcGRfZGF0YSA9IG5ldyBBbnk7CiAgICAgICAgaWYg
KCFwZF9kYXRhKSB7CiAgICAgICAgICBfQ09SQkFfbmV3X29wZXJhdG9yX3JldHVybl9udWxsKCk7
CgogICAgICAgIH0KICAgICAgICAqcGRfZGF0YSA9ICpwLnBkX2RhdGE7CiAgICAgIH0KICAgIH0K
CiAgICBpbmxpbmUgfkFueV92YXIoKSB7IGlmIChwZF9kYXRhKSBkZWxldGUgcGRfZGF0YTsgfQog
ICAgaW5saW5lIEFueV92YXImIG9wZXJhdG9yPSAoQW55KiBwKSB7CiAgICAgIGlmIChwZF9kYXRh
KSBkZWxldGUgcGRfZGF0YTsKICAgICAgcGRfZGF0YSA9IHA7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgICBpbmxpbmUgQW55X3ZhciYgb3BlcmF0b3I9IChjb25zdCBBbnlfdmFyJiBwKSB7
CiAgICAgICAgaWYgKHAucGRfZGF0YSkgewogICAgICAgICAgaWYgKCFwZF9kYXRhKSB7CiAgICAg
ICAgICAgIHBkX2RhdGEgPSBuZXcgQW55OwogICAgICAgICAgICBpZiAoIXBkX2RhdGEpIHsKICAg
ICAgICAgICAgICBfQ09SQkFfbmV3X29wZXJhdG9yX3JldHVybl9udWxsKCk7CgogICAgICAgICAg
ICB9CiAgICAgICAgICB9CiAgICAgICAgICAqcGRfZGF0YSA9ICpwLnBkX2RhdGE7CiAgICAgICAg
fQogICAgICAgIGVsc2UgewogICAgICAgICAgaWYgKHBkX2RhdGEpIGRlbGV0ZSBwZF9kYXRhOwog
ICAgICAgICAgcGRfZGF0YSA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgICBpbmxpbmUgQW55KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gKEFueSopcGRf
ZGF0YTsgfQoKCgoKICAgIGlubGluZSBvcGVyYXRvciBjb25zdCBBbnkmICgpIGNvbnN0IHsgcmV0
dXJuICpwZF9kYXRhOyB9CiAgICBpbmxpbmUgb3BlcmF0b3IgQW55JiAoKSB7IHJldHVybiAqcGRf
ZGF0YTsgfQoKCiAgICBpbmxpbmUgY29uc3QgQW55JiBpbigpIGNvbnN0IHsgcmV0dXJuICpwZF9k
YXRhOyB9CiAgICBpbmxpbmUgQW55JiBpbm91dCgpIHsgcmV0dXJuICpwZF9kYXRhOyB9CiAgICBp
bmxpbmUgQW55KiYgb3V0KCkgewogICAgICBpZiggcGRfZGF0YSApewogICAgICAgIGRlbGV0ZSBw
ZF9kYXRhOwogICAgICAgIHBkX2RhdGEgPSAwOwogICAgICB9CiAgICAgIHJldHVybiBwZF9kYXRh
OwogICAgfQogICAgaW5saW5lIEFueSogX3JldG4oKSB7CiAgICAgIEFueSogdG1wID0gcGRfZGF0
YTsKICAgICAgcGRfZGF0YSA9IDA7CiAgICAgIHJldHVybiB0bXA7CiAgICB9CgoKCiAgICBpbmxp
bmUgdm9pZCBvcGVyYXRvcjw8PShTaG9ydCBzKSB7CiAgICAgICpwZF9kYXRhIDw8PSBzOwogICAg
fQoKICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KFVTaG9ydCB1KSB7CiAgICAgICpwZF9kYXRh
IDw8PSB1OwogICAgfQoKICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KExvbmcgbCkgewogICAg
ICAqcGRfZGF0YSA8PD0gbDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShVTG9u
ZyB1KSB7CiAgICAgICpwZF9kYXRhIDw8PSB1OwogICAgfQoKCiAgICBpbmxpbmUgdm9pZCBvcGVy
YXRvcjw8PShGbG9hdCBmKSB7CiAgICAgICpwZF9kYXRhIDw8PSBmOwogICAgfQoKICAgIGlubGlu
ZSB2b2lkIG9wZXJhdG9yPDw9KERvdWJsZSBkKSB7CiAgICAgICpwZF9kYXRhIDw8PSBkOwogICAg
fQoKCiAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShjb25zdCBBbnkmIGEpIHsKICAgICAgKnBk
X2RhdGEgPDw9IGE7CiAgICB9CgogICAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQW55KiBhKSB7
CiAgICAgICpwZF9kYXRhIDw8PSBhOwogICAgfQoKICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9
KFR5cGVDb2RlX3B0ciB0YykgewogICAgICAqcGRfZGF0YSA8PD0gdGM7CiAgICB9CgogICAgaW5s
aW5lIHZvaWQgb3BlcmF0b3I8PD0oT2JqZWN0X3B0ciBvYmopIHsKICAgICAgKnBkX2RhdGEgPDw9
IG9iajsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShjb25zdCBjaGFyKiBzKSB7
CiAgICAgICpwZF9kYXRhIDw8PSBzOwogICAgfQoKICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9
KEFueTo6ZnJvbV9ib29sZWFuIGYpIHsKICAgICAgKnBkX2RhdGEgPDw9IGY7CiAgICB9CgogICAg
aW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQW55Ojpmcm9tX2NoYXIgYykgewogICAgICAqcGRfZGF0
YSA8PD0gYzsKICAgIH0KCgogICAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQW55Ojpmcm9tX29j
dGV0IG8pIHsKICAgICAgKnBkX2RhdGEgPDw9IG87CiAgICB9CgogICAgaW5saW5lIHZvaWQgb3Bl
cmF0b3I8PD0oQW55Ojpmcm9tX3N0cmluZyBzKXsKICAgICAgKnBkX2RhdGEgPDw9IHM7CiAgICB9
CgoKCgogICAgaW5saW5lIEJvb2xlYW4gb3BlcmF0b3I+Pj0oU2hvcnQmIHMpIGNvbnN0IHsKICAg
ICAgcmV0dXJuICgqcGRfZGF0YSA+Pj0gcyk7CiAgICB9CgogICAgaW5saW5lIEJvb2xlYW4gb3Bl
cmF0b3I+Pj0oVVNob3J0JiB1KSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IHUp
OwogICAgfQoKICAgIGlubGluZSBCb29sZWFuIG9wZXJhdG9yPj49KExvbmcmIGwpIGNvbnN0IHsK
ICAgICAgcmV0dXJuICgqcGRfZGF0YSA+Pj0gbCk7CiAgICB9CgogICAgaW5saW5lIEJvb2xlYW4g
b3BlcmF0b3I+Pj0oVUxvbmcmIHUpIGNvbnN0IHsKICAgICAgcmV0dXJuICgqcGRfZGF0YSA+Pj0g
dSk7CiAgICB9CgoKICAgIGlubGluZSBCb29sZWFuIG9wZXJhdG9yPj49KEZsb2F0JiBmKSBjb25z
dCB7CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IGYpOwogICAgICB9CgogICAgaW5saW5lIEJv
b2xlYW4gb3BlcmF0b3I+Pj0oRG91YmxlJiBkKSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBkX2Rh
dGEgPj49IGQpOwogICAgfQoKCgogICAgaW5saW5lIEJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3Qg
QW55KiYgYSkgY29uc3QgewogICAgICByZXR1cm4gKCpwZF9kYXRhID4+PSBhKTsKICAgIH0KCiAg
ICBpbmxpbmUgQm9vbGVhbiBvcGVyYXRvcj4+PShBbnkqJiBhKSBjb25zdCB7CiAgICAgIHJldHVy
biAoKnBkX2RhdGEgPj49IGEpOwogICAgfQoKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0oQW55JiBh
KSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IGEpOwogICAgfQoKICAgIGlubGlu
ZSBCb29sZWFuIG9wZXJhdG9yPj49KFR5cGVDb2RlX3B0ciYgdGMpIGNvbnN0IHsKICAgICAgcmV0
dXJuICgqcGRfZGF0YSA+Pj0gdGMpOwogICAgfQoKICAgIGlubGluZSBCb29sZWFuIG9wZXJhdG9y
Pj49KGNvbnN0IGNoYXIqJiBzKSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IHMp
OwogICAgfQoKCiAgICBpbmxpbmUgQm9vbGVhbiBvcGVyYXRvcj4+PShjaGFyKiYgcykgY29uc3Qg
ewogICAgICByZXR1cm4gKCpwZF9kYXRhID4+PSBzKTsKICAgIH0KCgogICAgaW5saW5lIEJvb2xl
YW4gb3BlcmF0b3I+Pj0oQW55Ojp0b19ib29sZWFuIGIpIGNvbnN0IHsKICAgICAgcmV0dXJuICgq
cGRfZGF0YSA+Pj0gYik7CiAgICB9CgogICAgaW5saW5lIEJvb2xlYW4gb3BlcmF0b3I+Pj0oQW55
Ojp0b19jaGFyIGMpIGNvbnN0IHsKICAgICAgcmV0dXJuICgqcGRfZGF0YSA+Pj0gYyk7CiAgICB9
CgogICAgaW5saW5lIEJvb2xlYW4gb3BlcmF0b3I+Pj0oQW55Ojp0b19vY3RldCBvKSBjb25zdCB7
CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IG8pOwogICAgfQoKCiAgICBpbmxpbmUgQm9vbGVh
biBvcGVyYXRvcj4+PShBbnk6OnRvX3N0cmluZyBzKSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBk
X2RhdGEgPj49IHMpOwogICAgfQoKCiAgICBpbmxpbmUgQm9vbGVhbiBvcGVyYXRvcj4+PShBbnk6
OnRvX29iamVjdCBvKSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IG8pOwogICAg
fQoKICAgIGZyaWVuZCBjbGFzcyBBbnlfT1VUX2FyZzsKCiAgcHJpdmF0ZToKICAgIEFueSogcGRf
ZGF0YTsKICB9OwoKCiAgY2xhc3MgQW55X09VVF9hcmcgewogIHB1YmxpYzoKICAgIGlubGluZSBB
bnlfT1VUX2FyZyhBbnkqJiBwKSA6IF9kYXRhKHApIHsgX2RhdGEgPSAoQW55KikgMDsgfQogICAg
aW5saW5lIEFueV9PVVRfYXJnKEFueV92YXImIHApIDogX2RhdGEocC5wZF9kYXRhKSB7CiAgICAg
IHAgPSAoQW55KikwOwogICAgfQogICAgaW5saW5lIEFueV9PVVRfYXJnKGNvbnN0IEFueV9PVVRf
YXJnJiBwKSA6IF9kYXRhKHAuX2RhdGEpIHt9CiAgICBpbmxpbmUgQW55X09VVF9hcmcmIG9wZXJh
dG9yPShjb25zdCBBbnlfT1VUX2FyZyYgcCkgewogICAgICBfZGF0YSA9IHAuX2RhdGE7IHJldHVy
biAqdGhpczsKICAgIH0KICAgIGlubGluZSBBbnlfT1VUX2FyZyYgb3BlcmF0b3I9KEFueSogcCkg
eyBfZGF0YSA9IHA7IHJldHVybiAqdGhpczsgfQoKICAgIG9wZXJhdG9yIEFueSomICgpIHsgcmV0
dXJuIF9kYXRhOyB9CiAgICBBbnkqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQoKICAgIEFueSom
IF9kYXRhOwogIHByaXZhdGU6CiAgICBBbnlfT1VUX2FyZygpOwogICAgQW55X09VVF9hcmcmIG9w
ZXJhdG9yPShjb25zdCBBbnlfdmFyJik7CiAgfTsKCiAgdHlwZWRlZiBBbnlfT1VUX2FyZyBBbnlf
b3V0OwoKCgoKCgogIGNsYXNzIEV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCB+RXhj
ZXB0aW9uKCk7CgogICAgdmlydHVhbCB2b2lkIF9yYWlzZSgpID0gMDsKCgogICAgc3RhdGljIGlu
bGluZSBFeGNlcHRpb24qIF9kb3duY2FzdChFeGNlcHRpb24qIGUpIHsgcmV0dXJuIGU7IH0KCgoK
ICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgRXhjZXB0aW9uKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0
aW9uKiBlKSB7IHJldHVybiBlOyB9CgoKCiAgICBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbiogX25h
cnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIGU7IH0KCgoKCiAgICBzdGF0aWMgRXhjZXB0aW9u
KiBfZHVwbGljYXRlKEV4Y2VwdGlvbiogZSk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX05Q
X3JlcG9JZChpbnQqIHNpemUpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgc2l6ZV90IF9OUF9hbGln
bmVkU2l6ZShzaXplX3QpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE5ldEJ1
ZmZlcmVkU3RyZWFtJikgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1l
bUJ1ZmZlcmVkU3RyZWFtJikgY29uc3QgPSAwOwoKICAgIHN0YXRpYyBpbmxpbmUgX0NPUkJBX0Jv
b2xlYW4gUFJfaXNfdmFsaWQoRXhjZXB0aW9uKiBwICkgewogICAgICByZXR1cm4gKChwKSA/IChw
LT5wZF9tYWdpYyA9PSBQUl9tYWdpYykgOiAxKTsKICAgIH0KICAgIHN0YXRpYyBjb25zdCBfQ09S
QkFfVUxvbmcgUFJfbWFnaWM7CgogICAgdHlwZWRlZiB2b2lkICgqaW5zZXJ0RXhjZXB0aW9uVG9B
bnkpIChBbnkmLCBjb25zdCBFeGNlcHRpb24mKTsKICAgIHR5cGVkZWYgdm9pZCAoKmluc2VydEV4
Y2VwdGlvblRvQW55TkNQKSAoQW55JiwgY29uc3QgRXhjZXB0aW9uKik7CgogICAgaW5saW5lIGlu
c2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm4oKSBjb25zdCB7CiAgICAgIHJldHVybiBw
ZF9pbnNlcnRUb0FueUZuOwogICAgfQogICAgaW5saW5lIGluc2VydEV4Y2VwdGlvblRvQW55TkNQ
IGluc2VydFRvQW55Rm5OQ1AoKSBjb25zdCB7CiAgICAgIHJldHVybiBwZF9pbnNlcnRUb0FueUZu
TkNQOwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgRXhjZXB0aW9uKCkgOgogICAgICBw
ZF9pbnNlcnRUb0FueUZuKDApLAogICAgICBwZF9pbnNlcnRUb0FueUZuTkNQKDApLAogICAgICBw
ZF9tYWdpYyhQUl9tYWdpYykKICAgICAge30KICAgIGlubGluZSBFeGNlcHRpb24mIG9wZXJhdG9y
ID0gKGNvbnN0IEV4Y2VwdGlvbiYgZXgpIHsKICAgICAgcGRfbWFnaWMgPSBleC5wZF9tYWdpYzsK
ICAgICAgcGRfaW5zZXJ0VG9BbnlGbiA9IGV4LnBkX2luc2VydFRvQW55Rm47CiAgICAgIHBkX2lu
c2VydFRvQW55Rm5OQ1AgPSBleC5wZF9pbnNlcnRUb0FueUZuTkNQOwogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CiAgICBzdGF0aWMgRXhjZXB0aW9uKiBfTlBfaXNfYShjb25zdCBFeGNlcHRpb24q
IGUsIGNvbnN0IGNoYXIqIHR5cGVJZCk7CgogICAgaW5zZXJ0RXhjZXB0aW9uVG9BbnkgcGRfaW5z
ZXJ0VG9BbnlGbjsKICAgIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIHBkX2luc2VydFRvQW55Rm5O
Q1A7CgoKCgoKICAgIGlubGluZSBFeGNlcHRpb24oY29uc3QgRXhjZXB0aW9uJiBleCkgOgogICAg
ICBwZF9pbnNlcnRUb0FueUZuKGV4LnBkX2luc2VydFRvQW55Rm4pLAogICAgICBwZF9pbnNlcnRU
b0FueUZuTkNQKGV4LnBkX2luc2VydFRvQW55Rm5OQ1ApLAogICAgICBwZF9tYWdpYyhleC5wZF9t
YWdpYykKICAgICAge30KCiAgcHJpdmF0ZToKICAgIHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVw
bGljYXRlKCkgY29uc3QgPSAwOwoKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlk
KCkgY29uc3QgPSAwOwoKCgoKICAgIFVMb25nIHBkX21hZ2ljOwogIH07CgoKCgoKCiAgZW51bSBD
b21wbGV0aW9uU3RhdHVzIHsgQ09NUExFVEVEX1lFUywgQ09NUExFVEVEX05PLCBDT01QTEVURURf
TUFZQkUgfTsKICBlbnVtIGV4Y2VwdGlvbl90eXBlIHsgTk9fRVhDRVBUSU9OLCBVU0VSX0VYQ0VQ
VElPTiwgU1lTVEVNX0VYQ0VQVElPTiB9OwoKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
TG9uZwogICAgICAgT01HVk1DSUQgPSAxMzMwNDQ2MzM2OwoKCiAgY2xhc3MgU3lzdGVtRXhjZXB0
aW9uIDogcHVibGljIEV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCB+U3lzdGVtRXhj
ZXB0aW9uKCk7CgoKCgoKCgogICAgaW5saW5lIFVMb25nIG1pbm9yKCkgY29uc3QgeyByZXR1cm4g
cGRfbWlub3I7IH0KICAgIGlubGluZSB2b2lkIG1pbm9yKFVMb25nIG0pIHsgcGRfbWlub3IgPSBt
OyB9CgogICAgaW5saW5lIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKCkgY29uc3QgeyByZXR1
cm4gcGRfc3RhdHVzOyB9CiAgICBpbmxpbmUgdm9pZCBjb21wbGV0ZWQoQ29tcGxldGlvblN0YXR1
cyBzKSB7IHBkX3N0YXR1cyA9IHM7IH0KCiAgICBzdGF0aWMgU3lzdGVtRXhjZXB0aW9uKiBfZG93
bmNhc3QoRXhjZXB0aW9uKik7CiAgICBzdGF0aWMgY29uc3QgU3lzdGVtRXhjZXB0aW9uKiBfZG93
bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7CiAgICBzdGF0aWMgaW5saW5lIFN5c3RlbUV4Y2VwdGlv
biogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsKICAgICAgcmV0dXJuIF9kb3duY2FzdChlKTsKICAg
IH0KCiAgICBpbmxpbmUgU3lzdGVtRXhjZXB0aW9uKCkgewogICAgICBwZF9taW5vciA9IDA7CiAg
ICAgIHBkX3N0YXR1cyA9IENPTVBMRVRFRF9OTzsKICAgIH0KICAgIGlubGluZSBTeXN0ZW1FeGNl
cHRpb24oY29uc3QgU3lzdGVtRXhjZXB0aW9uJiBlKSA6IEV4Y2VwdGlvbihlKSB7CiAgICAgIHBk
X21pbm9yID0gZS5wZF9taW5vcjsKICAgICAgcGRfc3RhdHVzID0gZS5wZF9zdGF0dXM7CiAgICB9
CiAgICBpbmxpbmUgU3lzdGVtRXhjZXB0aW9uKFVMb25nIG1pbm9yLCBDb21wbGV0aW9uU3RhdHVz
IHN0YXR1cykgewogICAgICBwZF9taW5vciA9IG1pbm9yOwogICAgICBwZF9zdGF0dXMgPSBzdGF0
dXM7CiAgICB9CiAgICBpbmxpbmUgU3lzdGVtRXhjZXB0aW9uJiBvcGVyYXRvcj0oY29uc3QgU3lz
dGVtRXhjZXB0aW9uJiBlKSB7CiAgICAgIEV4Y2VwdGlvbjo6b3BlcmF0b3I9KGUpOwogICAgICBw
ZF9taW5vciA9IGUucGRfbWlub3I7CiAgICAgIHBkX3N0YXR1cyA9IGUucGRfc3RhdHVzOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHByb3RlY3RlZDoKICAgIFVMb25nIHBkX21pbm9yOwog
ICAgQ29tcGxldGlvblN0YXR1cyBwZF9zdGF0dXM7CgogIHByaXZhdGU6CiAgICB2aXJ0dWFsIHNp
emVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90KSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBfTlBf
bWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIF9OUF9t
YXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7CiAgfTsKIyA5MzkgIi91c3IvbG9jYWwv
aW5jbHVkZS9vbW5pT1JCMy9DT1JCQS5oIiAzCiAgY2xhc3MgVU5LTk9XTiA6IHB1YmxpYyBTeXN0
ZW1FeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBVTktOT1dOKFVMb25nIG1pbm9yID0gMCwgQ29t
cGxldGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9u
IChtaW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBw
ZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgVU5LTk9XTihj
b25zdCBVTktOT1dOJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBVTktOT1dO
JiBvcGVyYXRvcj0oY29uc3QgVU5LTk9XTiYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRv
cj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+VU5LTk9XTigpOyB2aXJ0dWFsIHZvaWQg
X3JhaXNlKCk7IHN0YXRpYyBVTktOT1dOKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBj
b25zdCBVTktOT1dOKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUg
VU5LTk9XTiogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4
Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2Vw
dGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTog
dmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBj
aGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07IGNsYXNzIEJBRF9QQVJBTSA6IHB1YmxpYyBTeXN0
ZW1FeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBCQURfUEFSQU0oVUxvbmcgbWlub3IgPSAwLCBD
b21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRp
b24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47
IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBCQURfUEFS
QU0oY29uc3QgQkFEX1BBUkFNJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBC
QURfUEFSQU0mIG9wZXJhdG9yPShjb25zdCBCQURfUEFSQU0mIGV4KSB7IFN5c3RlbUV4Y2VwdGlv
bjo6b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfkJBRF9QQVJBTSgpOyB2
aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBCQURfUEFSQU0qIF9kb3duY2FzdChFeGNlcHRp
b24qKTsgc3RhdGljIGNvbnN0IEJBRF9QQVJBTSogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiop
OyBzdGF0aWMgaW5saW5lIEJBRF9QQVJBTSogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJu
IF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXpl
KSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9B
bnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9B
bnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25z
dDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07IGNsYXNzIE5PX01F
TU9SWSA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBOT19NRU1PUlko
VUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9O
TykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlG
biA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQ
OyB9IGlubGluZSBOT19NRU1PUlkoY29uc3QgTk9fTUVNT1JZJiBleCkgOiBTeXN0ZW1FeGNlcHRp
b24oZXgpIHt9IGlubGluZSBOT19NRU1PUlkmIG9wZXJhdG9yPShjb25zdCBOT19NRU1PUlkmIGV4
KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1
YWwgfk5PX01FTU9SWSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBOT19NRU1PUlkq
IF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IE5PX01FTU9SWSogX2Rvd25jYXN0
KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIE5PX01FTU9SWSogX25hcnJvdyhFeGNl
cHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9O
UF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0
aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9u
VG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9O
UF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29u
c3Q7IH07IGNsYXNzIElNUF9MSU1JVCA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6
IGlubGluZSBJTVBfTElNSVQoVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBs
ZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQp
IHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1Ag
PSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBJTVBfTElNSVQoY29uc3QgSU1QX0xJTUlUJiBl
eCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBJTVBfTElNSVQmIG9wZXJhdG9yPShj
b25zdCBJTVBfTElNSVQmIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsgcmV0
dXJuICp0aGlzOyB9IHZpcnR1YWwgfklNUF9MSU1JVCgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7
IHN0YXRpYyBJTVBfTElNSVQqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IElN
UF9MSU1JVCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIElNUF9M
SU1JVCogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0
dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2Vw
dGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlv
bjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmly
dHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFy
KiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07IGNsYXNzIENPTU1fRkFJTFVSRSA6IHB1YmxpYyBTeXN0
ZW1FeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBDT01NX0ZBSUxVUkUoVUxvbmcgbWlub3IgPSAw
LCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNl
cHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55
Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBDT01N
X0ZBSUxVUkUoY29uc3QgQ09NTV9GQUlMVVJFJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9
IGlubGluZSBDT01NX0ZBSUxVUkUmIG9wZXJhdG9yPShjb25zdCBDT01NX0ZBSUxVUkUmIGV4KSB7
IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwg
fkNPTU1fRkFJTFVSRSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBDT01NX0ZBSUxV
UkUqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IENPTU1fRkFJTFVSRSogX2Rv
d25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIENPTU1fRkFJTFVSRSogX25h
cnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5z
ZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0
RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNl
cHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlw
ZUlkKCkgY29uc3Q7IH07IGNsYXNzIElOVl9PQkpSRUYgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9u
IHsgcHVibGljOiBpbmxpbmUgSU5WX09CSlJFRihVTG9uZyBtaW5vciA9IDAsIENvbXBsZXRpb25T
dGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlvbiAobWlub3Is
IGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0
VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIElOVl9PQkpSRUYoY29uc3Qg
SU5WX09CSlJFRiYgZXgpIDogU3lzdGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxpbmUgSU5WX09CSlJF
RiYgb3BlcmF0b3I9KGNvbnN0IElOVl9PQkpSRUYmIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3Bl
cmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfklOVl9PQkpSRUYoKTsgdmlydHVh
bCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgSU5WX09CSlJFRiogX2Rvd25jYXN0KEV4Y2VwdGlvbiop
OyBzdGF0aWMgY29uc3QgSU5WX09CSlJFRiogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBz
dGF0aWMgaW5saW5lIElOVl9PQkpSRUYqIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBf
ZG93bmNhc3QoZSk7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkg
Y29uc3Q7IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55
Rm47IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55
Rm5OQ1A7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7
IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFzcyBPQkpFQ1Rf
Tk9UX0VYSVNUIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIE9CSkVD
VF9OT1RfRVhJU1QoVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9
IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRf
aW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNl
cnRUb0FueUZuTkNQOyB9IGlubGluZSBPQkpFQ1RfTk9UX0VYSVNUKGNvbnN0IE9CSkVDVF9OT1Rf
RVhJU1QmIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIE9CSkVDVF9OT1RfRVhJ
U1QmIG9wZXJhdG9yPShjb25zdCBPQkpFQ1RfTk9UX0VYSVNUJiBleCkgeyBTeXN0ZW1FeGNlcHRp
b246Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5PQkpFQ1RfTk9UX0VY
SVNUKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIE9CSkVDVF9OT1RfRVhJU1QqIF9k
b3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IE9CSkVDVF9OT1RfRVhJU1QqIF9kb3du
Y2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBPQkpFQ1RfTk9UX0VYSVNUKiBf
bmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29u
c3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjpp
bnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNl
cnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4
Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90
eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgTk9fUEVSTUlTU0lPTiA6IHB1YmxpYyBTeXN0ZW1FeGNl
cHRpb24geyBwdWJsaWM6IGlubGluZSBOT19QRVJNSVNTSU9OKFVMb25nIG1pbm9yID0gMCwgQ29t
cGxldGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9u
IChtaW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBw
ZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgTk9fUEVSTUlT
U0lPTihjb25zdCBOT19QRVJNSVNTSU9OJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlu
bGluZSBOT19QRVJNSVNTSU9OJiBvcGVyYXRvcj0oY29uc3QgTk9fUEVSTUlTU0lPTiYgZXgpIHsg
U3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+
Tk9fUEVSTUlTU0lPTigpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBOT19QRVJNSVNT
SU9OKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBOT19QRVJNSVNTSU9OKiBf
ZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgTk9fUEVSTUlTU0lPTiog
X25hcnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNv
bnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6
aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5z
ZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBF
eGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBf
dHlwZUlkKCkgY29uc3Q7IH07IGNsYXNzIElOVEVSTkFMIDogcHVibGljIFN5c3RlbUV4Y2VwdGlv
biB7IHB1YmxpYzogaW5saW5lIElOVEVSTkFMKFVMb25nIG1pbm9yID0gMCwgQ29tcGxldGlvblN0
YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9uIChtaW5vciwg
Y29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRU
b0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgSU5URVJOQUwoY29uc3QgSU5U
RVJOQUwmIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIElOVEVSTkFMJiBvcGVy
YXRvcj0oY29uc3QgSU5URVJOQUwmIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4
KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfklOVEVSTkFMKCk7IHZpcnR1YWwgdm9pZCBfcmFp
c2UoKTsgc3RhdGljIElOVEVSTkFMKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25z
dCBJTlRFUk5BTCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIElO
VEVSTkFMKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZp
cnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhj
ZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0
aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2
aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNo
YXIqIF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgTUFSU0hBTCA6IHB1YmxpYyBTeXN0ZW1F
eGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBNQVJTSEFMKFVMb25nIG1pbm9yID0gMCwgQ29tcGxl
dGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9uICht
aW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9p
bnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgTUFSU0hBTChjb25z
dCBNQVJTSEFMJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBNQVJTSEFMJiBv
cGVyYXRvcj0oY29uc3QgTUFSU0hBTCYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0o
ZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+TUFSU0hBTCgpOyB2aXJ0dWFsIHZvaWQgX3Jh
aXNlKCk7IHN0YXRpYyBNQVJTSEFMKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25z
dCBNQVJTSEFMKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgTUFS
U0hBTCogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0
dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2Vw
dGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlv
bjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmly
dHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFy
KiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07IGNsYXNzIElOSVRJQUxJWkUgOiBwdWJsaWMgU3lzdGVt
RXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgSU5JVElBTElaRShVTG9uZyBtaW5vciA9IDAsIENv
bXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlv
biAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsg
cGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIElOSVRJQUxJ
WkUoY29uc3QgSU5JVElBTElaRSYgZXgpIDogU3lzdGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxpbmUg
SU5JVElBTElaRSYgb3BlcmF0b3I9KGNvbnN0IElOSVRJQUxJWkUmIGV4KSB7IFN5c3RlbUV4Y2Vw
dGlvbjo6b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfklOSVRJQUxJWkUo
KTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgSU5JVElBTElaRSogX2Rvd25jYXN0KEV4
Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgSU5JVElBTElaRSogX2Rvd25jYXN0KGNvbnN0IEV4Y2Vw
dGlvbiopOyBzdGF0aWMgaW5saW5lIElOSVRJQUxJWkUqIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7
IHJldHVybiBfZG93bmNhc3QoZSk7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGlu
dCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55IGlu
c2VydFRvQW55Rm47IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGlu
c2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRl
KCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFz
cyBOT19JTVBMRU1FTlQgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUg
Tk9fSU1QTEVNRU5UKFVMb25nIG1pbm9yID0gMCwgQ29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQg
PSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9uIChtaW5vciwgY29tcGxldGVkKSB7IHBk
X2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5z
ZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgTk9fSU1QTEVNRU5UKGNvbnN0IE5PX0lNUExFTUVOVCYg
ZXgpIDogU3lzdGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxpbmUgTk9fSU1QTEVNRU5UJiBvcGVyYXRv
cj0oY29uc3QgTk9fSU1QTEVNRU5UJiBleCkgeyBTeXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShl
eCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5OT19JTVBMRU1FTlQoKTsgdmlydHVhbCB2b2lk
IF9yYWlzZSgpOyBzdGF0aWMgTk9fSU1QTEVNRU5UKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0
YXRpYyBjb25zdCBOT19JTVBMRU1FTlQqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3Rh
dGljIGlubGluZSBOT19JTVBMRU1FTlQqIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBf
ZG93bmNhc3QoZSk7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkg
Y29uc3Q7IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55
Rm47IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55
Rm5OQ1A7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7
IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFzcyBCQURfVFlQ
RUNPREUgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgQkFEX1RZUEVD
T0RFKFVMb25nIG1pbm9yID0gMCwgQ29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVU
RURfTk8pIDogU3lzdGVtRXhjZXB0aW9uIChtaW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRv
QW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlG
bk5DUDsgfSBpbmxpbmUgQkFEX1RZUEVDT0RFKGNvbnN0IEJBRF9UWVBFQ09ERSYgZXgpIDogU3lz
dGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxpbmUgQkFEX1RZUEVDT0RFJiBvcGVyYXRvcj0oY29uc3Qg
QkFEX1RZUEVDT0RFJiBleCkgeyBTeXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShleCk7IHJldHVy
biAqdGhpczsgfSB2aXJ0dWFsIH5CQURfVFlQRUNPREUoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgp
OyBzdGF0aWMgQkFEX1RZUEVDT0RFKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25z
dCBCQURfVFlQRUNPREUqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGlu
ZSBCQURfVFlQRUNPREUqIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3Qo
ZSk7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0
YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRp
YyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHBy
aXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwg
Y29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFzcyBCQURfT1BFUkFUSU9OIDog
cHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIEJBRF9PUEVSQVRJT04oVUxv
bmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykg
OiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9
IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9
IGlubGluZSBCQURfT1BFUkFUSU9OKGNvbnN0IEJBRF9PUEVSQVRJT04mIGV4KSA6IFN5c3RlbUV4
Y2VwdGlvbihleCkge30gaW5saW5lIEJBRF9PUEVSQVRJT04mIG9wZXJhdG9yPShjb25zdCBCQURf
T1BFUkFUSU9OJiBleCkgeyBTeXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShleCk7IHJldHVybiAq
dGhpczsgfSB2aXJ0dWFsIH5CQURfT1BFUkFUSU9OKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsg
c3RhdGljIEJBRF9PUEVSQVRJT04qIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0
IEJBRF9PUEVSQVRJT04qIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGlu
ZSBCQURfT1BFUkFUSU9OKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0
KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBz
dGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0
aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBw
cml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFs
IGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgTk9fUkVTT1VSQ0VTIDog
cHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIE5PX1JFU09VUkNFUyhVTG9u
ZyBtaW5vciA9IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6
IFN5c3RlbUV4Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0g
aW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0g
aW5saW5lIE5PX1JFU09VUkNFUyhjb25zdCBOT19SRVNPVVJDRVMmIGV4KSA6IFN5c3RlbUV4Y2Vw
dGlvbihleCkge30gaW5saW5lIE5PX1JFU09VUkNFUyYgb3BlcmF0b3I9KGNvbnN0IE5PX1JFU09V
UkNFUyYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7
IH0gdmlydHVhbCB+Tk9fUkVTT1VSQ0VTKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGlj
IE5PX1JFU09VUkNFUyogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgTk9fUkVT
T1VSQ0VTKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgTk9fUkVT
T1VSQ0VTKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZp
cnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhj
ZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0
aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2
aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNo
YXIqIF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgTk9fUkVTUE9OU0UgOiBwdWJsaWMgU3lz
dGVtRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgTk9fUkVTUE9OU0UoVUxvbmcgbWlub3IgPSAw
LCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNl
cHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55
Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBOT19S
RVNQT05TRShjb25zdCBOT19SRVNQT05TRSYgZXgpIDogU3lzdGVtRXhjZXB0aW9uKGV4KSB7fSBp
bmxpbmUgTk9fUkVTUE9OU0UmIG9wZXJhdG9yPShjb25zdCBOT19SRVNQT05TRSYgZXgpIHsgU3lz
dGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+Tk9f
UkVTUE9OU0UoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgTk9fUkVTUE9OU0UqIF9k
b3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IE5PX1JFU1BPTlNFKiBfZG93bmNhc3Qo
Y29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgTk9fUkVTUE9OU0UqIF9uYXJyb3coRXhj
ZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBf
TlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2Vw
dGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlv
blRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBf
TlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNv
bnN0OyB9OyBjbGFzcyBQRVJTSVNUX1NUT1JFIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1
YmxpYzogaW5saW5lIFBFUlNJU1RfU1RPUkUoVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3Rh
dHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBj
b21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRv
QW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBQRVJTSVNUX1NUT1JFKGNvbnN0
IFBFUlNJU1RfU1RPUkUmIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIFBFUlNJ
U1RfU1RPUkUmIG9wZXJhdG9yPShjb25zdCBQRVJTSVNUX1NUT1JFJiBleCkgeyBTeXN0ZW1FeGNl
cHRpb246Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5QRVJTSVNUX1NU
T1JFKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIFBFUlNJU1RfU1RPUkUqIF9kb3du
Y2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IFBFUlNJU1RfU1RPUkUqIF9kb3duY2FzdChj
b25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBQRVJTSVNUX1NUT1JFKiBfbmFycm93KEV4
Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hhciog
X05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNl
cHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRp
b25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiog
X05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBj
b25zdDsgfTsgY2xhc3MgQkFEX0lOVl9PUkRFUiA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBw
dWJsaWM6IGlubGluZSBCQURfSU5WX09SREVSKFVMb25nIG1pbm9yID0gMCwgQ29tcGxldGlvblN0
YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9uIChtaW5vciwg
Y29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRU
b0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgQkFEX0lOVl9PUkRFUihjb25z
dCBCQURfSU5WX09SREVSJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBCQURf
SU5WX09SREVSJiBvcGVyYXRvcj0oY29uc3QgQkFEX0lOVl9PUkRFUiYgZXgpIHsgU3lzdGVtRXhj
ZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+QkFEX0lOVl9P
UkRFUigpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBCQURfSU5WX09SREVSKiBfZG93
bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBCQURfSU5WX09SREVSKiBfZG93bmNhc3Qo
Y29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgQkFEX0lOVl9PUkRFUiogX25hcnJvdyhF
eGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhj
ZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0
aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24q
IF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkg
Y29uc3Q7IH07IGNsYXNzIFRSQU5TSUVOVCA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJs
aWM6IGlubGluZSBUUkFOU0lFTlQoVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNv
bXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0
ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5O
Q1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBUUkFOU0lFTlQoY29uc3QgVFJBTlNJRU5U
JiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBUUkFOU0lFTlQmIG9wZXJhdG9y
PShjb25zdCBUUkFOU0lFTlQmIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsg
cmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgflRSQU5TSUVOVCgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNl
KCk7IHN0YXRpYyBUUkFOU0lFTlQqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0
IFRSQU5TSUVOVCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIFRS
QU5TSUVOVCogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4
Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2Vw
dGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTog
dmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBj
aGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07IGNsYXNzIEZSRUVfTUVNIDogcHVibGljIFN5c3Rl
bUV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIEZSRUVfTUVNKFVMb25nIG1pbm9yID0gMCwgQ29t
cGxldGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9u
IChtaW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBw
ZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgRlJFRV9NRU0o
Y29uc3QgRlJFRV9NRU0mIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIEZSRUVf
TUVNJiBvcGVyYXRvcj0oY29uc3QgRlJFRV9NRU0mIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3Bl
cmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfkZSRUVfTUVNKCk7IHZpcnR1YWwg
dm9pZCBfcmFpc2UoKTsgc3RhdGljIEZSRUVfTUVNKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0
YXRpYyBjb25zdCBGUkVFX01FTSogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMg
aW5saW5lIEZSRUVfTUVNKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0
KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBz
dGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0
aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBw
cml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFs
IGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgSU5WX0lERU5UIDogcHVi
bGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIElOVl9JREVOVChVTG9uZyBtaW5v
ciA9IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3Rl
bUV4Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0
VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5l
IElOVl9JREVOVChjb25zdCBJTlZfSURFTlQmIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30g
aW5saW5lIElOVl9JREVOVCYgb3BlcmF0b3I9KGNvbnN0IElOVl9JREVOVCYgZXgpIHsgU3lzdGVt
RXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+SU5WX0lE
RU5UKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIElOVl9JREVOVCogX2Rvd25jYXN0
KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgSU5WX0lERU5UKiBfZG93bmNhc3QoY29uc3QgRXhj
ZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgSU5WX0lERU5UKiBfbmFycm93KEV4Y2VwdGlvbiogZSkg
eyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChp
bnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBp
bnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBp
bnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0
ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xh
c3MgSU5WX0ZMQUcgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgSU5W
X0ZMQUcoVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBM
RVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0
VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0Fu
eUZuTkNQOyB9IGlubGluZSBJTlZfRkxBRyhjb25zdCBJTlZfRkxBRyYgZXgpIDogU3lzdGVtRXhj
ZXB0aW9uKGV4KSB7fSBpbmxpbmUgSU5WX0ZMQUcmIG9wZXJhdG9yPShjb25zdCBJTlZfRkxBRyYg
ZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmly
dHVhbCB+SU5WX0ZMQUcoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgSU5WX0ZMQUcq
IF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IElOVl9GTEFHKiBfZG93bmNhc3Qo
Y29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgSU5WX0ZMQUcqIF9uYXJyb3coRXhjZXB0
aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfTlBf
cmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlv
blRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRv
QW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBf
ZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0
OyB9OyBjbGFzcyBJTlRGX1JFUE9TIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzog
aW5saW5lIElOVEZfUkVQT1MoVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBs
ZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQp
IHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1Ag
PSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBJTlRGX1JFUE9TKGNvbnN0IElOVEZfUkVQT1Mm
IGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIElOVEZfUkVQT1MmIG9wZXJhdG9y
PShjb25zdCBJTlRGX1JFUE9TJiBleCkgeyBTeXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShleCk7
IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5JTlRGX1JFUE9TKCk7IHZpcnR1YWwgdm9pZCBfcmFp
c2UoKTsgc3RhdGljIElOVEZfUkVQT1MqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNv
bnN0IElOVEZfUkVQT1MqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGlu
ZSBJTlRGX1JFUE9TKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUp
OyB9IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0
aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMg
RXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2
YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNv
bnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgQkFEX0NPTlRFWFQgOiBwdWJs
aWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgQkFEX0NPTlRFWFQoVUxvbmcgbWlu
b3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0
ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2Vy
dFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGlu
ZSBCQURfQ09OVEVYVChjb25zdCBCQURfQ09OVEVYVCYgZXgpIDogU3lzdGVtRXhjZXB0aW9uKGV4
KSB7fSBpbmxpbmUgQkFEX0NPTlRFWFQmIG9wZXJhdG9yPShjb25zdCBCQURfQ09OVEVYVCYgZXgp
IHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVh
bCB+QkFEX0NPTlRFWFQoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgQkFEX0NPTlRF
WFQqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEJBRF9DT05URVhUKiBfZG93
bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgQkFEX0NPTlRFWFQqIF9uYXJy
b3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0gdmlydHVhbCBjb25zdCBj
aGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNlcHRpb246Omluc2Vy
dEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4
Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0
aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJ
ZCgpIGNvbnN0OyB9OyBjbGFzcyBPQkpfQURBUFRFUiA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24g
eyBwdWJsaWM6IGlubGluZSBPQkpfQURBUFRFUihVTG9uZyBtaW5vciA9IDAsIENvbXBsZXRpb25T
dGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlvbiAobWlub3Is
IGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0
VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIE9CSl9BREFQVEVSKGNvbnN0
IE9CSl9BREFQVEVSJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBPQkpfQURB
UFRFUiYgb3BlcmF0b3I9KGNvbnN0IE9CSl9BREFQVEVSJiBleCkgeyBTeXN0ZW1FeGNlcHRpb246
Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5PQkpfQURBUFRFUigpOyB2
aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBPQkpfQURBUFRFUiogX2Rvd25jYXN0KEV4Y2Vw
dGlvbiopOyBzdGF0aWMgY29uc3QgT0JKX0FEQVBURVIqIF9kb3duY2FzdChjb25zdCBFeGNlcHRp
b24qKTsgc3RhdGljIGlubGluZSBPQkpfQURBUFRFUiogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsg
cmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50
KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5z
ZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5z
ZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUo
KSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07IGNsYXNz
IERBVEFfQ09OVkVSU0lPTiA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IGlubGlu
ZSBEQVRBX0NPTlZFUlNJT04oVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBs
ZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQp
IHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1Ag
PSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBEQVRBX0NPTlZFUlNJT04oY29uc3QgREFUQV9D
T05WRVJTSU9OJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBEQVRBX0NPTlZF
UlNJT04mIG9wZXJhdG9yPShjb25zdCBEQVRBX0NPTlZFUlNJT04mIGV4KSB7IFN5c3RlbUV4Y2Vw
dGlvbjo6b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfkRBVEFfQ09OVkVS
U0lPTigpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBEQVRBX0NPTlZFUlNJT04qIF9k
b3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IERBVEFfQ09OVkVSU0lPTiogX2Rvd25j
YXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIERBVEFfQ09OVkVSU0lPTiogX25h
cnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5z
ZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0
RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNl
cHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlw
ZUlkKCkgY29uc3Q7IH07IGNsYXNzIFRSQU5TQUNUSU9OX1JFUVVJUkVEIDogcHVibGljIFN5c3Rl
bUV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIFRSQU5TQUNUSU9OX1JFUVVJUkVEKFVMb25nIG1p
bm9yID0gMCwgQ29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lz
dGVtRXhjZXB0aW9uIChtaW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNl
cnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxp
bmUgVFJBTlNBQ1RJT05fUkVRVUlSRUQoY29uc3QgVFJBTlNBQ1RJT05fUkVRVUlSRUQmIGV4KSA6
IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIFRSQU5TQUNUSU9OX1JFUVVJUkVEJiBvcGVy
YXRvcj0oY29uc3QgVFJBTlNBQ1RJT05fUkVRVUlSRUQmIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6
b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgflRSQU5TQUNUSU9OX1JFUVVJ
UkVEKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIFRSQU5TQUNUSU9OX1JFUVVJUkVE
KiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBUUkFOU0FDVElPTl9SRVFVSVJF
RCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIFRSQU5TQUNUSU9O
X1JFUVVJUkVEKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9
IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMg
RXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhj
ZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRl
OiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgVFJBTlNBQ1RJT05fUk9MTEVEQkFD
SyA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBUUkFOU0FDVElPTl9S
T0xMRURCQUNLKFVMb25nIG1pbm9yID0gMCwgQ29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQgPSBD
T01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9uIChtaW5vciwgY29tcGxldGVkKSB7IHBkX2lu
c2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0
VG9BbnlGbk5DUDsgfSBpbmxpbmUgVFJBTlNBQ1RJT05fUk9MTEVEQkFDSyhjb25zdCBUUkFOU0FD
VElPTl9ST0xMRURCQUNLJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBUUkFO
U0FDVElPTl9ST0xMRURCQUNLJiBvcGVyYXRvcj0oY29uc3QgVFJBTlNBQ1RJT05fUk9MTEVEQkFD
SyYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0g
dmlydHVhbCB+VFJBTlNBQ1RJT05fUk9MTEVEQkFDSygpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7
IHN0YXRpYyBUUkFOU0FDVElPTl9ST0xMRURCQUNLKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0
YXRpYyBjb25zdCBUUkFOU0FDVElPTl9ST0xMRURCQUNLKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0
aW9uKik7IHN0YXRpYyBpbmxpbmUgVFJBTlNBQ1RJT05fUk9MTEVEQkFDSyogX25hcnJvdyhFeGNl
cHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9O
UF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0
aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9u
VG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9O
UF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29u
c3Q7IH07IGNsYXNzIElOVkFMSURfVFJBTlNBQ1RJT04gOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9u
IHsgcHVibGljOiBpbmxpbmUgSU5WQUxJRF9UUkFOU0FDVElPTihVTG9uZyBtaW5vciA9IDAsIENv
bXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlv
biAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsg
cGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIElOVkFMSURf
VFJBTlNBQ1RJT04oY29uc3QgSU5WQUxJRF9UUkFOU0FDVElPTiYgZXgpIDogU3lzdGVtRXhjZXB0
aW9uKGV4KSB7fSBpbmxpbmUgSU5WQUxJRF9UUkFOU0FDVElPTiYgb3BlcmF0b3I9KGNvbnN0IElO
VkFMSURfVFJBTlNBQ1RJT04mIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsg
cmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfklOVkFMSURfVFJBTlNBQ1RJT04oKTsgdmlydHVhbCB2
b2lkIF9yYWlzZSgpOyBzdGF0aWMgSU5WQUxJRF9UUkFOU0FDVElPTiogX2Rvd25jYXN0KEV4Y2Vw
dGlvbiopOyBzdGF0aWMgY29uc3QgSU5WQUxJRF9UUkFOU0FDVElPTiogX2Rvd25jYXN0KGNvbnN0
IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIElOVkFMSURfVFJBTlNBQ1RJT04qIF9uYXJyb3co
RXhjZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0gdmlydHVhbCBjb25zdCBjaGFy
KiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4
Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2Vw
dGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9u
KiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgp
IGNvbnN0OyB9OyBjbGFzcyBXUk9OR19UUkFOU0FDVElPTiA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRp
b24geyBwdWJsaWM6IGlubGluZSBXUk9OR19UUkFOU0FDVElPTihVTG9uZyBtaW5vciA9IDAsIENv
bXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlv
biAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsg
cGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIFdST05HX1RS
QU5TQUNUSU9OKGNvbnN0IFdST05HX1RSQU5TQUNUSU9OJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24o
ZXgpIHt9IGlubGluZSBXUk9OR19UUkFOU0FDVElPTiYgb3BlcmF0b3I9KGNvbnN0IFdST05HX1RS
QU5TQUNUSU9OJiBleCkgeyBTeXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShleCk7IHJldHVybiAq
dGhpczsgfSB2aXJ0dWFsIH5XUk9OR19UUkFOU0FDVElPTigpOyB2aXJ0dWFsIHZvaWQgX3JhaXNl
KCk7IHN0YXRpYyBXUk9OR19UUkFOU0FDVElPTiogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0
aWMgY29uc3QgV1JPTkdfVFJBTlNBQ1RJT04qIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsg
c3RhdGljIGlubGluZSBXUk9OR19UUkFOU0FDVElPTiogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsg
cmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50
KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5z
ZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5z
ZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUo
KSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07CiMgOTQ4
ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIgMwogIGNsYXNzIFVzZXJFeGNl
cHRpb24gOiBwdWJsaWMgRXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5Vc2VyRXhj
ZXB0aW9uKCk7CiAgICBzdGF0aWMgVXNlckV4Y2VwdGlvbiogX2Rvd25jYXN0KEV4Y2VwdGlvbiog
ZSk7CiAgICBzdGF0aWMgY29uc3QgVXNlckV4Y2VwdGlvbiogX2Rvd25jYXN0KGNvbnN0IEV4Y2Vw
dGlvbiogZSk7CiAgICBzdGF0aWMgaW5saW5lIFVzZXJFeGNlcHRpb24qIF9uYXJyb3coRXhjZXB0
aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0KCiAgcHJvdGVjdGVkOgogICAgaW5saW5l
IFVzZXJFeGNlcHRpb24oKSB7fQoKCgoKCiAgICBpbmxpbmUgVXNlckV4Y2VwdGlvbihjb25zdCBV
c2VyRXhjZXB0aW9uJiBleCkgOiBFeGNlcHRpb24oZXgpIHt9CgogIHB1YmxpYzoKICAgIFVzZXJF
eGNlcHRpb24mIG9wZXJhdG9yPShjb25zdCBVc2VyRXhjZXB0aW9uJiBleCkgewogICAgICBFeGNl
cHRpb246Om9wZXJhdG9yPShleCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICB9OwoKCgoK
CgogIGNsYXNzIFVua25vd25Vc2VyRXhjZXB0aW9uIDogcHVibGljIFVzZXJFeGNlcHRpb24gewog
IHB1YmxpYzoKICAgIHZpcnR1YWwgflVua25vd25Vc2VyRXhjZXB0aW9uKCk7CgogICAgVW5rbm93
blVzZXJFeGNlcHRpb24oQW55KiBleCk7CgoKICAgIGlubGluZSBVbmtub3duVXNlckV4Y2VwdGlv
bihjb25zdCBVbmtub3duVXNlckV4Y2VwdGlvbiYgZXgpCiAgICAgIDogVXNlckV4Y2VwdGlvbihl
eCkgewogICAgICBwZF9leGNlcHRpb24gPSBuZXcgQW55KCpleC5wZF9leGNlcHRpb24pOwogICAg
fQogICAgVW5rbm93blVzZXJFeGNlcHRpb24mIG9wZXJhdG9yPShjb25zdCBVbmtub3duVXNlckV4
Y2VwdGlvbiYgZXgpIHsKICAgICAgVXNlckV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsKICAgICAg
aWYgKHBkX2V4Y2VwdGlvbikgZGVsZXRlIHBkX2V4Y2VwdGlvbjsKICAgICAgcGRfZXhjZXB0aW9u
ID0gbmV3IEFueSgqZXgucGRfZXhjZXB0aW9uKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICAgIEFueSYgZXhjZXB0aW9uKCk7CgogICAgdmlydHVhbCB2b2lkIF9yYWlzZSgpOwogICAgc3Rh
dGljIFVua25vd25Vc2VyRXhjZXB0aW9uKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7CiAgICBzdGF0
aWMgY29uc3QgVW5rbm93blVzZXJFeGNlcHRpb24qIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24q
KTsKICAgIHN0YXRpYyBpbmxpbmUgVW5rbm93blVzZXJFeGNlcHRpb24qIF9uYXJyb3coRXhjZXB0
aW9uKiBlKSB7CiAgICAgIHJldHVybiBfZG93bmNhc3QoZSk7CiAgICB9CgogICAgc3RhdGljIEV4
Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsKICAgIHN0YXRpYyBF
eGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7CgogIHBy
aXZhdGU6CiAgICB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OwogICAg
dmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBfTlBf
bWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIF9OUF9t
YXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7CgogICAgQW55KiBwZF9leGNlcHRpb247
CiAgfTsKCgoKCgoKICBjbGFzcyBXcm9uZ1RyYW5zYWN0aW9uIDogcHVibGljIFVzZXJFeGNlcHRp
b24geyBwdWJsaWM6IGlubGluZSBXcm9uZ1RyYW5zYWN0aW9uKCkgeyBwZF9pbnNlcnRUb0FueUZu
ID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7
IH0gaW5saW5lIFdyb25nVHJhbnNhY3Rpb24oY29uc3QgV3JvbmdUcmFuc2FjdGlvbiYgX2V4KSA6
IFVzZXJFeGNlcHRpb24oX2V4KSB7fSBpbmxpbmUgV3JvbmdUcmFuc2FjdGlvbiYgb3BlcmF0b3I9
KGNvbnN0IFdyb25nVHJhbnNhY3Rpb24mIF9leCkgeyAqIChVc2VyRXhjZXB0aW9uKikgdGhpcyA9
IF9leDsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfldyb25nVHJhbnNhY3Rpb24oKTsgdmlydHVh
bCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgV3JvbmdUcmFuc2FjdGlvbiogX2Rvd25jYXN0KEV4Y2Vw
dGlvbiopOyBzdGF0aWMgY29uc3QgV3JvbmdUcmFuc2FjdGlvbiogX2Rvd25jYXN0KGNvbnN0IEV4
Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIFdyb25nVHJhbnNhY3Rpb24qIF9uYXJyb3coRXhjZXB0
aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3duY2FzdChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2Fs
aWduZWRTaXplKHNpemVfdCBvcykgY29uc3QgeyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3Bl
cmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRv
cj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9
KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVy
ZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsg
c3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBj
b25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1
cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsg
dmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwg
dm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQg
X05QX21hcnNoYWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgfTsKCgoKCgoKICBjbGFzcyBF
bnZpcm9ubWVudDsKICB0eXBlZGVmIEVudmlyb25tZW50KiBFbnZpcm9ubWVudF9wdHI7CiAgdHlw
ZWRlZiBFbnZpcm9ubWVudF9wdHIgRW52aXJvbm1lbnRSZWY7CiAgdHlwZWRlZiBfQ09SQkFfUHNl
dWRvT2JqX1ZhcjxFbnZpcm9ubWVudD4gRW52aXJvbm1lbnRfdmFyOwogIHR5cGVkZWYgX0NPUkJB
X1BzZXVkb09ial9PdXQ8RW52aXJvbm1lbnQsRW52aXJvbm1lbnRfdmFyPiBFbnZpcm9ubWVudF9v
dXQ7CgogIGNsYXNzIEVudmlyb25tZW50IHsKICBwdWJsaWM6CiAgICBFbnZpcm9ubWVudCgpOwoK
ICAgIHZpcnR1YWwgfkVudmlyb25tZW50KCk7CgogICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihF
eGNlcHRpb24qKTsKICAgIHZpcnR1YWwgRXhjZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdDsKICAg
IHZpcnR1YWwgdm9pZCBjbGVhcigpOwoKICAgIHZpcnR1YWwgQm9vbGVhbiBOUF9pc19uaWwoKSBj
b25zdDsKICAgIHZpcnR1YWwgRW52aXJvbm1lbnRfcHRyIE5QX2R1cGxpY2F0ZSgpOwoKICAgIHN0
YXRpYyBFbnZpcm9ubWVudF9wdHIgX2R1cGxpY2F0ZShFbnZpcm9ubWVudF9wdHIpOwogICAgc3Rh
dGljIEVudmlyb25tZW50X3B0ciBfbmlsKCk7CgogICAgc3RhdGljIGlubGluZSBfQ09SQkFfQm9v
bGVhbiBQUl9pc192YWxpZChFbnZpcm9ubWVudF9wdHIgcCApIHsKICAgICAgcmV0dXJuICgocCkg
PyAocC0+cGRfbWFnaWMgPT0gUFJfbWFnaWMpIDogMSk7CiAgICB9CgogICAgc3RhdGljIGNvbnN0
IF9DT1JCQV9VTG9uZyBQUl9tYWdpYzsKCiAgcHJpdmF0ZToKICAgIENPUkJBOjpFeGNlcHRpb24q
IHBkX2V4Y2VwdGlvbjsKICAgIF9DT1JCQV9VTG9uZyBwZF9tYWdpYzsKCiAgICBFbnZpcm9ubWVu
dChjb25zdCBFbnZpcm9ubWVudCYpOwogICAgRW52aXJvbm1lbnQmIG9wZXJhdG9yPShjb25zdCBF
bnZpcm9ubWVudCYpOwoKICBwdWJsaWM6CiAgICBDT1JCQTo6Qm9vbGVhbiBwZF9pc19wc2V1ZG87
CiAgfTsKCgoKCgoKICBlbnVtIF9GbGFncyB7CiAgICBBUkdfSU4gPSAweDEsCiAgICBBUkdfT1VU
ID0gMHgyLAogICAgQVJHX0lOT1VUID0gMHg0LAogICAgQ1RYX1JFU1RSSUNUX1NDT1BFID0gMHg4
LAogICAgT1VUX0xJU1RfTUVNT1JZID0gMHgxMCwKICAgIElOX0NPUFlfVkFMVUUgPSAweDIwCiAg
fTsKCiAgdHlwZWRlZiBVTG9uZyBGbGFnczsKCiAgY2xhc3MgTmFtZWRWYWx1ZTsKICB0eXBlZGVm
IE5hbWVkVmFsdWUqIE5hbWVkVmFsdWVfcHRyOwogIHR5cGVkZWYgTmFtZWRWYWx1ZV9wdHIgTmFt
ZWRWYWx1ZVJlZjsKICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPE5hbWVkVmFsdWU+IE5h
bWVkVmFsdWVfdmFyOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9PdXQ8TmFtZWRWYWx1ZSxO
YW1lZFZhbHVlX3Zhcj4gTmFtZWRWYWx1ZV9vdXQ7CgogIGNsYXNzIE5hbWVkVmFsdWUgewogIHB1
YmxpYzoKICAgIHZpcnR1YWwgfk5hbWVkVmFsdWUoKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IG5hbWUoKSBjb25zdCA9IDA7CgoKICAgIHZpcnR1YWwgQW55KiB2YWx1ZSgpIGNvbnN0ID0gMDsK
CgogICAgdmlydHVhbCBGbGFncyBmbGFncygpIGNvbnN0ID0gMDsKCiAgICB2aXJ0dWFsIEJvb2xl
YW4gTlBfaXNfbmlsKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBOYW1lZFZhbHVlX3B0ciBOUF9k
dXBsaWNhdGUoKSA9IDA7CgogICAgc3RhdGljIE5hbWVkVmFsdWVfcHRyIF9kdXBsaWNhdGUoTmFt
ZWRWYWx1ZV9wdHIpOwogICAgc3RhdGljIE5hbWVkVmFsdWVfcHRyIF9uaWwoKTsKCiAgICBzdGF0
aWMgaW5saW5lIF9DT1JCQV9Cb29sZWFuIFBSX2lzX3ZhbGlkKE5hbWVkVmFsdWVfcHRyIHAgKSB7
CiAgICAgIHJldHVybiAoKHApID8gKHAtPnBkX21hZ2ljID09IFBSX21hZ2ljKSA6IDEpOwogICAg
fQoKICAgIHN0YXRpYyBjb25zdCBfQ09SQkFfVUxvbmcgUFJfbWFnaWM7CgogIHByb3RlY3RlZDoK
ICAgIE5hbWVkVmFsdWUoKSB7IHBkX21hZ2ljID0gUFJfbWFnaWM7IH0KCiAgcHJpdmF0ZToKICAg
IF9DT1JCQV9VTG9uZyBwZF9tYWdpYzsKCiAgICBOYW1lZFZhbHVlKGNvbnN0IE5hbWVkVmFsdWUm
KTsKICAgIE5hbWVkVmFsdWUmIG9wZXJhdG9yPShjb25zdCBOYW1lZFZhbHVlJik7CiAgfTsKCgoK
CgoKICBjbGFzcyBOVkxpc3Q7CiAgdHlwZWRlZiBOVkxpc3QqIE5WTGlzdF9wdHI7CiAgdHlwZWRl
ZiBOVkxpc3RfcHRyIE5WTGlzdFJlZjsKICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPE5W
TGlzdD4gTlZMaXN0X3ZhcjsKICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfT3V0PE5WTGlzdCxO
Vkxpc3RfdmFyPiBOVkxpc3Rfb3V0OwoKICBjbGFzcyBOVkxpc3QgewogIHB1YmxpYzoKICAgIHZp
cnR1YWwgfk5WTGlzdCgpOwoKICAgIHZpcnR1YWwgVUxvbmcgY291bnQoKSBjb25zdCA9IDA7CiAg
ICB2aXJ0dWFsIE5hbWVkVmFsdWVfcHRyIGFkZChGbGFncykgPSAwOwogICAgdmlydHVhbCBOYW1l
ZFZhbHVlX3B0ciBhZGRfaXRlbShjb25zdCBjaGFyKiwgRmxhZ3MpID0gMDsKICAgIHZpcnR1YWwg
TmFtZWRWYWx1ZV9wdHIgYWRkX3ZhbHVlKGNvbnN0IGNoYXIqLCBjb25zdCBBbnkmLCBGbGFncykg
PSAwOwogICAgdmlydHVhbCBOYW1lZFZhbHVlX3B0ciBhZGRfaXRlbV9jb25zdW1lKGNoYXIqLEZs
YWdzKSA9IDA7CiAgICB2aXJ0dWFsIE5hbWVkVmFsdWVfcHRyIGFkZF92YWx1ZV9jb25zdW1lKGNo
YXIqLCBBbnkqLCBGbGFncykgPSAwOwogICAgdmlydHVhbCBOYW1lZFZhbHVlX3B0ciBpdGVtKFVM
b25nIGluZGV4KSA9IDA7CiAgICB2aXJ0dWFsIFN0YXR1cyByZW1vdmUgKFVMb25nKSA9IDA7Cgog
ICAgdmlydHVhbCBCb29sZWFuIE5QX2lzX25pbCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgTlZM
aXN0X3B0ciBOUF9kdXBsaWNhdGUoKSA9IDA7CgogICAgc3RhdGljIE5WTGlzdF9wdHIgX2R1cGxp
Y2F0ZShOVkxpc3RfcHRyKTsKICAgIHN0YXRpYyBOVkxpc3RfcHRyIF9uaWwoKTsKCgoKICAgIGNs
YXNzIEJvdW5kcyA6IHB1YmxpYyBVc2VyRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgQm91bmRz
KCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5D
UCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIEJvdW5kcyhjb25zdCBCb3VuZHMmIF9leCkg
OiBVc2VyRXhjZXB0aW9uKF9leCkge30gaW5saW5lIEJvdW5kcyYgb3BlcmF0b3I9KGNvbnN0IEJv
dW5kcyYgX2V4KSB7ICogKFVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7
IH0gdmlydHVhbCB+Qm91bmRzKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIEJvdW5k
cyogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgQm91bmRzKiBfZG93bmNhc3Qo
Y29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgQm91bmRzKiBfbmFycm93KEV4Y2VwdGlv
biogX2V4KSB7IHJldHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGln
bmVkU2l6ZShzaXplX3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJh
dG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+
Pj0oTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShO
ZXRCdWZmZXJlZFN0cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVk
U3RyZWFtJikge30gc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0
YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29u
c3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBs
aWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZp
cnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZv
aWQgX05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9O
UF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CgogICAgc3RhdGljIGlubGlu
ZSBfQ09SQkFfQm9vbGVhbiBQUl9pc192YWxpZChOVkxpc3RfcHRyIHAgKSB7CiAgICAgIHJldHVy
biAoKHApID8gKHAtPnBkX21hZ2ljID09IFBSX21hZ2ljKSA6IDEpOwogICAgfQoKICAgIHN0YXRp
YyBjb25zdCBfQ09SQkFfVUxvbmcgUFJfbWFnaWM7CgogIHByb3RlY3RlZDoKICAgIE5WTGlzdCgp
IHsgcGRfbWFnaWMgPSBQUl9tYWdpYzsgfQoKICBwcml2YXRlOgogICAgX0NPUkJBX1VMb25nIHBk
X21hZ2ljOwoKICAgIE5WTGlzdChjb25zdCBOVkxpc3QmIG52bCk7CiAgICBOVkxpc3QmIG9wZXJh
dG9yPShjb25zdCBOVkxpc3QmKTsKICB9OwoKCgoKCgogIGNsYXNzIENvbnRleHQ7CiAgdHlwZWRl
ZiBDb250ZXh0KiBDb250ZXh0X3B0cjsKICB0eXBlZGVmIENvbnRleHRfcHRyIENvbnRleHRSZWY7
CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX1ZhcjxDb250ZXh0PiBDb250ZXh0X3ZhcjsKICB0
eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfT3V0PENvbnRleHQsQ29udGV4dF92YXI+IENvbnRleHRf
b3V0OwoKICBjbGFzcyBDb250ZXh0IHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5Db250ZXh0KCk7
CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBjb250ZXh0X25hbWUoKSBjb25zdCA9IDA7CiAgICB2
aXJ0dWFsIENPUkJBOjpDb250ZXh0X3B0ciBwYXJlbnQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFs
IENPUkJBOjpTdGF0dXMgY3JlYXRlX2NoaWxkKGNvbnN0IGNoYXIqLCBDb250ZXh0X291dCkgPSAw
OwogICAgdmlydHVhbCBDT1JCQTo6U3RhdHVzIHNldF9vbmVfdmFsdWUoY29uc3QgY2hhciosIGNv
bnN0IEFueSYpID0gMDsKICAgIHZpcnR1YWwgQ09SQkE6OlN0YXR1cyBzZXRfdmFsdWVzKENPUkJB
OjpOVkxpc3RfcHRyKSA9IDA7CiAgICB2aXJ0dWFsIENPUkJBOjpTdGF0dXMgZGVsZXRlX3ZhbHVl
cyhjb25zdCBjaGFyKikgPSAwOwogICAgdmlydHVhbCBDT1JCQTo6U3RhdHVzIGdldF92YWx1ZXMo
Y29uc3QgY2hhciogc3RhcnRfc2NvcGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6RmxhZ3Mgb3BfZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBwYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ09SQkE6Ok5WTGlzdF9vdXQgdmFsdWVzKSA9IDA7CgoKCiAgICB2aXJ0dWFsIEJv
b2xlYW4gTlBfaXNfbmlsKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBDT1JCQTo6Q29udGV4dF9w
dHIgTlBfZHVwbGljYXRlKCkgPSAwOwoKICAgIHN0YXRpYyBDb250ZXh0X3B0ciBfZHVwbGljYXRl
KENvbnRleHRfcHRyKTsKICAgIHN0YXRpYyBDb250ZXh0X3B0ciBfbmlsKCk7CgoKICAgIHN0YXRp
YyBzaXplX3QgX05QX2FsaWduZWRTaXplKENvbnRleHRfcHRyIGN0eHQsIGNvbnN0IGNoYXIqY29u
c3QqIHdoaWNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoaWNobGVu
LCBzaXplX3QgaW5pdGlhbG9mZnNldCk7CiAgICBzdGF0aWMgdm9pZCBtYXJzaGFsQ29udGV4dChD
b250ZXh0X3B0ciBjdHh0LCBjb25zdCBjaGFyKmNvbnN0KiB3aGljaCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCB3aGljaGxlbiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpOwogICAg
c3RhdGljIHZvaWQgbWFyc2hhbENvbnRleHQoQ29udGV4dF9wdHIgY3R4dCwgY29uc3QgY2hhcipj
b25zdCogd2hpY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2hpY2hsZW4s
IE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKTsKICAgIHN0YXRpYyBDb250ZXh0X3B0ciB1bm1hcnNoYWxD
b250ZXh0KE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKTsKICAgIHN0YXRpYyBDb250ZXh0X3B0ciB1bm1h
cnNoYWxDb250ZXh0KE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKTsKCiAgICBzdGF0aWMgaW5saW5lIF9D
T1JCQV9Cb29sZWFuIFBSX2lzX3ZhbGlkKENvbnRleHRfcHRyIHAgKSB7CiAgICAgIHJldHVybiAo
KHApID8gKHAtPnBkX21hZ2ljID09IFBSX21hZ2ljKSA6IDEpOwogICAgfQoKICAgIHN0YXRpYyBj
b25zdCBfQ09SQkFfVUxvbmcgUFJfbWFnaWM7CgogIHByb3RlY3RlZDoKICAgIENvbnRleHQoKSB7
IHBkX21hZ2ljID0gUFJfbWFnaWM7IH0KCiAgcHJpdmF0ZToKICAgIF9DT1JCQV9VTG9uZyBwZF9t
YWdpYzsKCiAgICBDb250ZXh0KGNvbnN0IENvbnRleHQmKTsKICAgIENvbnRleHQmIG9wZXJhdG9y
PShjb25zdCBDb250ZXh0Jik7CiAgfTsKCgoKCgoKICBjbGFzcyBDb250ZXh0TGlzdDsKICB0eXBl
ZGVmIENvbnRleHRMaXN0KiBDb250ZXh0TGlzdF9wdHI7CiAgdHlwZWRlZiBDb250ZXh0TGlzdF9w
dHIgQ29udGV4dExpc3RSZWY7CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX1ZhcjxDb250ZXh0
TGlzdD4gQ29udGV4dExpc3RfdmFyOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9PdXQ8Q29u
dGV4dExpc3QsQ29udGV4dExpc3RfdmFyPiBDb250ZXh0TGlzdF9vdXQ7CgogIGNsYXNzIENvbnRl
eHRMaXN0IHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5Db250ZXh0TGlzdCgpOwoKICAgIHZpcnR1
YWwgVUxvbmcgY291bnQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNo
YXIqIGN0eHQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBhZGRfY29uc3VtZShjaGFyKiBjdHh0KSA9
IDA7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogaXRlbShVTG9uZyBpbmRleCkgPSAwOwoKCiAg
ICB2aXJ0dWFsIFN0YXR1cyByZW1vdmUoVUxvbmcgaW5kZXgpID0gMDsKCiAgICB2aXJ0dWFsIEJv
b2xlYW4gTlBfaXNfbmlsKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBDb250ZXh0TGlzdF9wdHIg
TlBfZHVwbGljYXRlKCkgPSAwOwoKICAgIHN0YXRpYyBDb250ZXh0TGlzdF9wdHIgX2R1cGxpY2F0
ZShDb250ZXh0TGlzdF9wdHIpOwogICAgc3RhdGljIENvbnRleHRMaXN0X3B0ciBfbmlsKCk7CgoK
CiAgICBjbGFzcyBCb3VuZHMgOiBwdWJsaWMgVXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5l
IEJvdW5kcygpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRv
QW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBCb3VuZHMoY29uc3QgQm91bmRz
JiBfZXgpIDogVXNlckV4Y2VwdGlvbihfZXgpIHt9IGlubGluZSBCb3VuZHMmIG9wZXJhdG9yPShj
b25zdCBCb3VuZHMmIF9leCkgeyAqIChVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0dXJu
ICp0aGlzOyB9IHZpcnR1YWwgfkJvdW5kcygpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRp
YyBCb3VuZHMqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEJvdW5kcyogX2Rv
d25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIEJvdW5kcyogX25hcnJvdyhF
eGNlcHRpb24qIF9leCkgeyByZXR1cm4gX2Rvd25jYXN0KF9leCk7IH0gaW5saW5lIHNpemVfdCBf
TlBfYWxpZ25lZFNpemUoc2l6ZV90IG9zKSBjb25zdCB7IHJldHVybiBvczsgfSBpbmxpbmUgdm9p
ZCBvcGVyYXRvcj4+PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9w
ZXJhdG9yPj49KE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0
b3I8PD0oTmV0QnVmZmVyZWRTdHJlYW0mKSB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1C
dWZmZXJlZFN0cmVhbSYpIHt9IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0Fu
eUZuOyBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgc3Rh
dGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBf
TlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNv
bnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmly
dHVhbCB2b2lkIF9OUF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwg
dm9pZCBfTlBfbWFyc2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwoKICAgIHN0YXRp
YyBpbmxpbmUgX0NPUkJBX0Jvb2xlYW4gUFJfaXNfdmFsaWQoQ29udGV4dExpc3RfcHRyIHAgKSB7
CiAgICAgIHJldHVybiAoKHApID8gKHAtPnBkX21hZ2ljID09IFBSX21hZ2ljKSA6IDEpOwogICAg
fQoKICAgIHN0YXRpYyBjb25zdCBfQ09SQkFfVUxvbmcgUFJfbWFnaWM7CgogIHByb3RlY3RlZDoK
ICAgIENvbnRleHRMaXN0KCkgeyBwZF9tYWdpYyA9IFBSX21hZ2ljOyB9CgogIHByaXZhdGU6CiAg
ICBfQ09SQkFfVUxvbmcgcGRfbWFnaWM7CgogICAgQ29udGV4dExpc3QoY29uc3QgQ29udGV4dExp
c3QmKTsKICAgIENvbnRleHRMaXN0JiBvcGVyYXRvcj0oY29uc3QgQ29udGV4dExpc3QmKTsKICB9
OwoKCgoKCgogIGNsYXNzIFByaW5jaXBhbDsKICB0eXBlZGVmIFByaW5jaXBhbCogUHJpbmNpcGFs
X3B0cjsKICB0eXBlZGVmIFByaW5jaXBhbF9wdHIgUHJpbmNpcGFsUmVmOwoKCgogIGNsYXNzIFBy
aW5jaXBhbElEIDogcHVibGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0IHsKICBw
dWJsaWM6CiAgICBpbmxpbmUgUHJpbmNpcGFsSUQoKSB7fQogICAgaW5saW5lIFByaW5jaXBhbElE
KGNvbnN0IFByaW5jaXBhbElEJiBzZXEpCiAgICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5j
ZV9fT2N0ZXQoc2VxKSB7fQogICAgaW5saW5lIFByaW5jaXBhbElEKENPUkJBOjpVTG9uZyBtYXgp
CiAgICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQobWF4KSB7fQogICAgaW5s
aW5lIFByaW5jaXBhbElEKENPUkJBOjpVTG9uZyBtYXgsIENPUkJBOjpVTG9uZyBsZW4sIENPUkJB
OjpPY3RldCogdmFsLCBDT1JCQTo6Qm9vbGVhbiByZWw9MCkKICAgICAgOiBfQ09SQkFfVW5ib3Vu
ZGVkX1NlcXVlbmNlX19PY3RldChtYXgsIGxlbiwgdmFsLCByZWwpIHt9CiAgICBpbmxpbmUgUHJp
bmNpcGFsSUQmIG9wZXJhdG9yID0gKGNvbnN0IFByaW5jaXBhbElEJiBzZXEpIHsKICAgICAgX0NP
UkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQ6Om9wZXJhdG9yPShzZXEpOwogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9OwogIH07CgogIGNsYXNzIFByaW5jaXBhbCB7CiAgcHVibGljOgogICAg
c3RhdGljIFByaW5jaXBhbF9wdHIgX2R1cGxpY2F0ZShQcmluY2lwYWxfcHRyKTsKICAgIHN0YXRp
YyBQcmluY2lwYWxfcHRyIF9uaWwoKTsKICBwcml2YXRlOgogICAgUHJpbmNpcGFsKCk7CiAgfTsK
CgoKCgoKICBjbGFzcyBFeGNlcHRpb25MaXN0OwogIHR5cGVkZWYgRXhjZXB0aW9uTGlzdCogRXhj
ZXB0aW9uTGlzdF9wdHI7CiAgdHlwZWRlZiBFeGNlcHRpb25MaXN0X3B0ciBFeGNlcHRpb25MaXN0
UmVmOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8RXhjZXB0aW9uTGlzdD4gRXhjZXB0
aW9uTGlzdF92YXI7CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX091dDxFeGNlcHRpb25MaXN0
LEV4Y2VwdGlvbkxpc3RfdmFyPiBFeGNlcHRpb25MaXN0X291dDsKCiAgY2xhc3MgRXhjZXB0aW9u
TGlzdCB7CiAgcHVibGljOgogICAgdmlydHVhbCB+RXhjZXB0aW9uTGlzdCgpOwoKICAgIHZpcnR1
YWwgVUxvbmcgY291bnQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgYWRkKFR5cGVDb2Rl
X3B0ciB0YykgPSAwOwogICAgdmlydHVhbCB2b2lkIGFkZF9jb25zdW1lKFR5cGVDb2RlX3B0ciB0
YykgPSAwOwoKCiAgICB2aXJ0dWFsIFR5cGVDb2RlX3B0ciBpdGVtKFVMb25nIGluZGV4KSA9IDA7
CgoKICAgIHZpcnR1YWwgU3RhdHVzIHJlbW92ZShVTG9uZyBpbmRleCkgPSAwOwoKICAgIHZpcnR1
YWwgQm9vbGVhbiBOUF9pc19uaWwoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIEV4Y2VwdGlvbkxp
c3RfcHRyIE5QX2R1cGxpY2F0ZSgpID0gMDsKCiAgICBzdGF0aWMgRXhjZXB0aW9uTGlzdF9wdHIg
X2R1cGxpY2F0ZShFeGNlcHRpb25MaXN0X3B0cik7CiAgICBzdGF0aWMgRXhjZXB0aW9uTGlzdF9w
dHIgX25pbCgpOwoKCgogICAgY2xhc3MgQm91bmRzIDogcHVibGljIFVzZXJFeGNlcHRpb24geyBw
dWJsaWM6IGlubGluZSBCb3VuZHMoKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZu
OyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgQm91bmRz
KGNvbnN0IEJvdW5kcyYgX2V4KSA6IFVzZXJFeGNlcHRpb24oX2V4KSB7fSBpbmxpbmUgQm91bmRz
JiBvcGVyYXRvcj0oY29uc3QgQm91bmRzJiBfZXgpIHsgKiAoVXNlckV4Y2VwdGlvbiopIHRoaXMg
PSBfZXg7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5Cb3VuZHMoKTsgdmlydHVhbCB2b2lkIF9y
YWlzZSgpOyBzdGF0aWMgQm91bmRzKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25z
dCBCb3VuZHMqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBCb3Vu
ZHMqIF9uYXJyb3coRXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3duY2FzdChfZXgpOyB9IGlu
bGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykgY29uc3QgeyByZXR1cm4gb3M7
IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBp
bmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGlu
ZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30gaW5saW5lIHZvaWQgb3Bl
cmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9B
bnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRv
QW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2YXRlOiB2aXJ0dWFs
IEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9O
UF90eXBlSWQoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6
ZSkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNv
bnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsg
fTsKCiAgICBzdGF0aWMgaW5saW5lIF9DT1JCQV9Cb29sZWFuIFBSX2lzX3ZhbGlkKEV4Y2VwdGlv
bkxpc3RfcHRyIHAgKSB7CiAgICAgIHJldHVybiAoKHApID8gKHAtPnBkX21hZ2ljID09IFBSX21h
Z2ljKSA6IDEpOwogICAgfQoKICAgIHN0YXRpYyBjb25zdCBfQ09SQkFfVUxvbmcgUFJfbWFnaWM7
CgogIHByb3RlY3RlZDoKICAgIEV4Y2VwdGlvbkxpc3QoKSB7IHBkX21hZ2ljID0gUFJfbWFnaWM7
IH0KCiAgcHJpdmF0ZToKICAgIF9DT1JCQV9VTG9uZyBwZF9tYWdpYzsKCiAgICBFeGNlcHRpb25M
aXN0KGNvbnN0IEV4Y2VwdGlvbkxpc3QmIGVsKTsKICAgIEV4Y2VwdGlvbkxpc3QmIG9wZXJhdG9y
PShjb25zdCBFeGNlcHRpb25MaXN0Jik7CiAgfTsKCgoKCgoKICBjbGFzcyBUeXBlQ29kZV92YXI7
CgogIGNsYXNzIFR5cGVDb2RlX21lbWJlciB7CiAgcHVibGljOgogICAgVHlwZUNvZGVfbWVtYmVy
KCk7CiAgICBpbmxpbmUgVHlwZUNvZGVfbWVtYmVyKFR5cGVDb2RlX3B0ciBwKSA6IF9wdHIocCkg
e30KICAgIFR5cGVDb2RlX21lbWJlcihjb25zdCBUeXBlQ29kZV9tZW1iZXImIHApOwogICAgflR5
cGVDb2RlX21lbWJlcigpOwoKICAgIFR5cGVDb2RlX21lbWJlciYgb3BlcmF0b3I9KFR5cGVDb2Rl
X3B0ciBwKTsKICAgIFR5cGVDb2RlX21lbWJlciYgb3BlcmF0b3I9KGNvbnN0IFR5cGVDb2RlX21l
bWJlciYgcCk7CiAgICBUeXBlQ29kZV9tZW1iZXImIG9wZXJhdG9yPShjb25zdCBUeXBlQ29kZV92
YXImIHApOwoKICAgIGlubGluZSBUeXBlQ29kZV9wdHIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuIF9wdHI7IH0KICAgIGlubGluZSBvcGVyYXRvciBUeXBlQ29kZV9wdHIoKSBjb25zdCB7IHJl
dHVybiBfcHRyOyB9CgogICAgVHlwZUNvZGVfcHRyIF9wdHI7CgogICAgdm9pZCBvcGVyYXRvcj4+
PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OwogICAgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZm
ZXJlZFN0cmVhbSYpOwogICAgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNv
bnN0OwogICAgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0cmVhbSYpOwogICAgc2l6ZV90
IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QpIGNvbnN0OwogIH07CgoKCn0KCm5hbWVzcGFjZSBDT1JC
QQp7CiMgMTQyMCAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL0NPUkJBLmgiIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvY29yYmFpZGxfZGVmcy5oaCIgMSAzCgoKCgoKCgpj
bGFzcyBJRExUeXBlOwpjbGFzcyBfb2JqcmVmX0lETFR5cGU7CmNsYXNzIF9pbXBsX0lETFR5cGU7
Cgp0eXBlZGVmIF9vYmpyZWZfSURMVHlwZSogSURMVHlwZV9wdHI7CnR5cGVkZWYgSURMVHlwZV9w
dHIgSURMVHlwZVJlZjsKCmNsYXNzIElETFR5cGVfSGVscGVyIHsKcHVibGljOgogIHR5cGVkZWYg
SURMVHlwZV9wdHIgX3B0cl90eXBlOwoKICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKICBzdGF0
aWMgX0NPUkJBX0Jvb2xlYW4gaXNfbmlsKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgcmVsZWFz
ZShfcHRyX3R5cGUpOwogIHN0YXRpYyB2b2lkIGR1cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRp
YyBzaXplX3QgTlBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyB2b2lk
IG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBf
cHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIHZv
aWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGlj
IF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mKTsKfTsKCnR5cGVk
ZWYgX0NPUkJBX09ialJlZl9WYXI8X29ianJlZl9JRExUeXBlLCBJRExUeXBlX0hlbHBlcj4gSURM
VHlwZV92YXI7CnR5cGVkZWYgX0NPUkJBX09ialJlZl9PVVRfYXJnPF9vYmpyZWZfSURMVHlwZSxJ
RExUeXBlX0hlbHBlciA+IElETFR5cGVfb3V0OwoKCgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVD
b2RlX3B0ciBfdGNfSWRlbnRpZmllcjsKCnR5cGVkZWYgY2hhciogSWRlbnRpZmllcjsKdHlwZWRl
ZiBDT1JCQTo6U3RyaW5nX3ZhciBJZGVudGlmaWVyX3ZhcjsKCnN0cnVjdCBTdHJ1Y3RNZW1iZXIg
ewogIHR5cGVkZWYgX0NPUkJBX0NvbnN0clR5cGVfVmFyaWFibGVfVmFyPFN0cnVjdE1lbWJlcj4g
X3Zhcl90eXBlOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciBuYW1lOwoKICBDT1JCQTo6VHlwZUNv
ZGVfbWVtYmVyIHR5cGU7CgogIF9DT1JCQV9PYmpSZWZfTWVtYmVyPCBfb2JqcmVmX0lETFR5cGUs
IElETFR5cGVfSGVscGVyPiB0eXBlX2RlZjsKCiAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXpl
X3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CiAgdm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRT
dHJlYW0gJikgY29uc3Q7CiAgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJik7
CiAgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgdm9pZCBv
cGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0gJik7Cn07Cgp0eXBlZGVmIFN0cnVjdE1lbWJl
cjo6X3Zhcl90eXBlIFN0cnVjdE1lbWJlcl92YXI7Cgp0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBl
X1ZhcmlhYmxlX09VVF9hcmc8IFN0cnVjdE1lbWJlcixTdHJ1Y3RNZW1iZXJfdmFyID4gU3RydWN0
TWVtYmVyX291dDsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TdHJ1Y3RN
ZW1iZXI7CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU3RydWN0TWVtYmVy
U2VxOwoKY2xhc3MgU3RydWN0TWVtYmVyU2VxX3ZhcjsKCmNsYXNzIFN0cnVjdE1lbWJlclNlcSA6
IHB1YmxpYyBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBTdHJ1Y3RNZW1iZXI+IHsKcHVibGlj
OgogIHR5cGVkZWYgU3RydWN0TWVtYmVyU2VxX3ZhciBfdmFyX3R5cGU7CiAgaW5saW5lIFN0cnVj
dE1lbWJlclNlcSgpIHt9CiAgaW5saW5lIFN0cnVjdE1lbWJlclNlcShjb25zdCBTdHJ1Y3RNZW1i
ZXJTZXEmIHMpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IFN0cnVjdE1lbWJlcj4g
KHMpIHt9CgogIGlubGluZSBTdHJ1Y3RNZW1iZXJTZXEoX0NPUkJBX1VMb25nIF9tYXgpCiAgICA6
IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IFN0cnVjdE1lbWJlcj4gKF9tYXgpIHt9CiAgaW5s
aW5lIFN0cnVjdE1lbWJlclNlcShfQ09SQkFfVUxvbmcgX21heCwgX0NPUkJBX1VMb25nIF9sZW4s
IFN0cnVjdE1lbWJlciogX3ZhbCwgX0NPUkJBX0Jvb2xlYW4gX3JlbD0wKQogICAgOiBfQ09SQkFf
VW5ib3VuZGVkX1NlcXVlbmNlPCBTdHJ1Y3RNZW1iZXI+IChfbWF4LCBfbGVuLCBfdmFsLCBfcmVs
KSB7fQoKICBpbmxpbmUgU3RydWN0TWVtYmVyU2VxJiBvcGVyYXRvciA9IChjb25zdCBTdHJ1Y3RN
ZW1iZXJTZXEmIHMpIHsKICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IFN0cnVjdE1lbWJl
cj4gOjpvcGVyYXRvcj0ocyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKY2xhc3MgU3RydWN0
TWVtYmVyU2VxX291dDsKCmNsYXNzIFN0cnVjdE1lbWJlclNlcV92YXIgewpwdWJsaWM6CiAgdHlw
ZWRlZiBTdHJ1Y3RNZW1iZXJTZXEgVDsKICB0eXBlZGVmIFN0cnVjdE1lbWJlclNlcV92YXIgVF92
YXI7CgogIGlubGluZSBTdHJ1Y3RNZW1iZXJTZXFfdmFyKCkgOiBfcGRfc2VxKDApIHt9CiAgaW5s
aW5lIFN0cnVjdE1lbWJlclNlcV92YXIoVCogcykgOiBfcGRfc2VxKHMpIHt9CiAgaW5saW5lIFN0
cnVjdE1lbWJlclNlcV92YXIoY29uc3QgVF92YXImIHMpIHsKICAgIGlmKCBzLl9wZF9zZXEgKSBf
cGRfc2VxID0gbmV3IFQoKnMuX3BkX3NlcSk7CiAgICBlbHNlIF9wZF9zZXEgPSAwOwogIH0KICBp
bmxpbmUgflN0cnVjdE1lbWJlclNlcV92YXIoKSB7IGlmKCBfcGRfc2VxICkgZGVsZXRlIF9wZF9z
ZXE7IH0KCiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICBpZiggX3BkX3Nl
cSApIGRlbGV0ZSBfcGRfc2VxOwogICAgX3BkX3NlcSA9IHM7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoY29uc3QgVF92YXImIHMpIHsKICAgIGlmKCBz
Ll9wZF9zZXEgKSB7CiAgICAgIGlmKCAhX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVDsKICAgICAg
Kl9wZF9zZXEgPSAqcy5fcGRfc2VxOwogICAgfSBlbHNlIGlmKCBfcGRfc2VxICkgewogICAgICBk
ZWxldGUgX3BkX3NlcTsKICAgICAgX3BkX3NlcSA9IDA7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7
CiAgfQoKICBpbmxpbmUgU3RydWN0TWVtYmVyJiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIHMp
IHsKICAgIHJldHVybiAoKl9wZF9zZXEpW3NdOwogIH0KCiAgaW5saW5lIFQqIG9wZXJhdG9yIC0+
ICgpIHsgcmV0dXJuIF9wZF9zZXE7IH0KCgoKICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgVCYgKCkg
Y29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxpbmUgb3BlcmF0b3IgVCYgKCkgeyByZXR1
cm4gKl9wZF9zZXE7IH0KCgogIGlubGluZSBjb25zdCBUJiBpbigpIGNvbnN0IHsgcmV0dXJuICpf
cGRfc2VxOyB9CiAgaW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxp
bmUgVComIG91dCgpIHsKICAgIGlmKCBfcGRfc2VxICkgeyBkZWxldGUgX3BkX3NlcTsgX3BkX3Nl
cSA9IDA7IH0KICAgIHJldHVybiBfcGRfc2VxOwogIH0KICBpbmxpbmUgVCogX3JldG4oKSB7IFQq
IHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEgPSAwOyByZXR1cm4gdG1wOyB9CgogIGZyaWVuZCBjbGFz
cyBTdHJ1Y3RNZW1iZXJTZXFfb3V0OwoKcHJpdmF0ZToKICBUKiBfcGRfc2VxOwp9OwoKY2xhc3Mg
U3RydWN0TWVtYmVyU2VxX291dCB7CnB1YmxpYzoKICB0eXBlZGVmIFN0cnVjdE1lbWJlclNlcSBU
OwogIHR5cGVkZWYgU3RydWN0TWVtYmVyU2VxX3ZhciBUX3ZhcjsKCiAgaW5saW5lIFN0cnVjdE1l
bWJlclNlcV9vdXQoVComIHMpIDogX2RhdGEocykgeyBfZGF0YSA9IDA7IH0KICBpbmxpbmUgU3Ry
dWN0TWVtYmVyU2VxX291dChUX3ZhciYgcykKICAgIDogX2RhdGEocy5fcGRfc2VxKSB7IHMgPSAo
VCopIDA7IH0KICBpbmxpbmUgU3RydWN0TWVtYmVyU2VxX291dChjb25zdCBTdHJ1Y3RNZW1iZXJT
ZXFfb3V0JiBzKSA6IF9kYXRhKHMuX2RhdGEpIHt9CiAgaW5saW5lIFN0cnVjdE1lbWJlclNlcV9v
dXQmIG9wZXJhdG9yID0gKGNvbnN0IFN0cnVjdE1lbWJlclNlcV9vdXQmIHMpIHsKICAgIF9kYXRh
ID0gcy5fZGF0YTsKICAgIHJldHVybiAqdGhpczsKICB9IGlubGluZSBTdHJ1Y3RNZW1iZXJTZXFf
b3V0JiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICBfZGF0YSA9IHM7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIGlubGluZSBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBU
KiYgcHRyKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVCogb3BlcmF0b3ItPigpIHsgcmV0
dXJuIF9kYXRhOyB9CgogIGlubGluZSBTdHJ1Y3RNZW1iZXImIG9wZXJhdG9yIFtdIChfQ09SQkFf
VUxvbmcgaSkgewogICAgcmV0dXJuICgqX2RhdGEpW2ldOwogIH0KCiAgVComIF9kYXRhOwoKcHJp
dmF0ZToKICBTdHJ1Y3RNZW1iZXJTZXFfb3V0KCk7CiAgU3RydWN0TWVtYmVyU2VxX291dCYgb3Bl
cmF0b3I9KGNvbnN0IFRfdmFyJik7Cn07CgpzdHJ1Y3QgVW5pb25NZW1iZXIgewogIHR5cGVkZWYg
X0NPUkJBX0NvbnN0clR5cGVfVmFyaWFibGVfVmFyPFVuaW9uTWVtYmVyPiBfdmFyX3R5cGU7Cgog
IENPUkJBOjpTdHJpbmdfbWVtYmVyIG5hbWU7CgogIENPUkJBOjpBbnkgbGFiZWw7CgogIENPUkJB
OjpUeXBlQ29kZV9tZW1iZXIgdHlwZTsKCiAgX0NPUkJBX09ialJlZl9NZW1iZXI8IF9vYmpyZWZf
SURMVHlwZSwgSURMVHlwZV9IZWxwZXI+IHR5cGVfZGVmOwoKICBzaXplX3QgX05QX2FsaWduZWRT
aXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPj49IChOZXRC
dWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0
cmVhbSAmKTsKICB2b2lkIG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsK
ICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmKTsKfTsKCnR5cGVkZWYgVW5p
b25NZW1iZXI6Ol92YXJfdHlwZSBVbmlvbk1lbWJlcl92YXI7Cgp0eXBlZGVmIF9DT1JCQV9Db25z
dHJUeXBlX1ZhcmlhYmxlX09VVF9hcmc8IFVuaW9uTWVtYmVyLFVuaW9uTWVtYmVyX3ZhciA+IFVu
aW9uTWVtYmVyX291dDsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Vbmlv
bk1lbWJlcjsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Vbmlvbk1lbWJl
clNlcTsKCmNsYXNzIFVuaW9uTWVtYmVyU2VxX3ZhcjsKCmNsYXNzIFVuaW9uTWVtYmVyU2VxIDog
cHVibGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IFVuaW9uTWVtYmVyPiB7CnB1YmxpYzoK
ICB0eXBlZGVmIFVuaW9uTWVtYmVyU2VxX3ZhciBfdmFyX3R5cGU7CiAgaW5saW5lIFVuaW9uTWVt
YmVyU2VxKCkge30KICBpbmxpbmUgVW5pb25NZW1iZXJTZXEoY29uc3QgVW5pb25NZW1iZXJTZXEm
IHMpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IFVuaW9uTWVtYmVyPiAocykge30K
CiAgaW5saW5lIFVuaW9uTWVtYmVyU2VxKF9DT1JCQV9VTG9uZyBfbWF4KQogICAgOiBfQ09SQkFf
VW5ib3VuZGVkX1NlcXVlbmNlPCBVbmlvbk1lbWJlcj4gKF9tYXgpIHt9CiAgaW5saW5lIFVuaW9u
TWVtYmVyU2VxKF9DT1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgVW5pb25NZW1i
ZXIqIF92YWwsIF9DT1JCQV9Cb29sZWFuIF9yZWw9MCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZTwgVW5pb25NZW1iZXI+IChfbWF4LCBfbGVuLCBfdmFsLCBfcmVsKSB7fQoKICBpbmxp
bmUgVW5pb25NZW1iZXJTZXEmIG9wZXJhdG9yID0gKGNvbnN0IFVuaW9uTWVtYmVyU2VxJiBzKSB7
CiAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBVbmlvbk1lbWJlcj4gOjpvcGVyYXRvcj0o
cyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKY2xhc3MgVW5pb25NZW1iZXJTZXFfb3V0OwoK
Y2xhc3MgVW5pb25NZW1iZXJTZXFfdmFyIHsKcHVibGljOgogIHR5cGVkZWYgVW5pb25NZW1iZXJT
ZXEgVDsKICB0eXBlZGVmIFVuaW9uTWVtYmVyU2VxX3ZhciBUX3ZhcjsKCiAgaW5saW5lIFVuaW9u
TWVtYmVyU2VxX3ZhcigpIDogX3BkX3NlcSgwKSB7fQogIGlubGluZSBVbmlvbk1lbWJlclNlcV92
YXIoVCogcykgOiBfcGRfc2VxKHMpIHt9CiAgaW5saW5lIFVuaW9uTWVtYmVyU2VxX3Zhcihjb25z
dCBUX3ZhciYgcykgewogICAgaWYoIHMuX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVCgqcy5fcGRf
c2VxKTsKICAgIGVsc2UgX3BkX3NlcSA9IDA7CiAgfQogIGlubGluZSB+VW5pb25NZW1iZXJTZXFf
dmFyKCkgeyBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRfc2VxOyB9CgogIGlubGluZSBUX3ZhciYg
b3BlcmF0b3IgPSAoVCogcykgewogICAgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsKICAg
IF9wZF9zZXEgPSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJh
dG9yID0gKGNvbnN0IFRfdmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2VxICkgewogICAgICBpZigg
IV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQ7CiAgICAgICpfcGRfc2VxID0gKnMuX3BkX3NlcTsK
ICAgIH0gZWxzZSBpZiggX3BkX3NlcSApIHsKICAgICAgZGVsZXRlIF9wZF9zZXE7CiAgICAgIF9w
ZF9zZXEgPSAwOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFVuaW9uTWVt
YmVyJiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIHMpIHsKICAgIHJldHVybiAoKl9wZF9zZXEp
W3NdOwogIH0KCiAgaW5saW5lIFQqIG9wZXJhdG9yIC0+ICgpIHsgcmV0dXJuIF9wZF9zZXE7IH0K
CgoKICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgVCYgKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7
IH0KICBpbmxpbmUgb3BlcmF0b3IgVCYgKCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KCgogIGlubGlu
ZSBjb25zdCBUJiBpbigpIGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQmIGlu
b3V0KCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxpbmUgVComIG91dCgpIHsKICAgIGlmKCBf
cGRfc2VxICkgeyBkZWxldGUgX3BkX3NlcTsgX3BkX3NlcSA9IDA7IH0KICAgIHJldHVybiBfcGRf
c2VxOwogIH0KICBpbmxpbmUgVCogX3JldG4oKSB7IFQqIHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEg
PSAwOyByZXR1cm4gdG1wOyB9CgogIGZyaWVuZCBjbGFzcyBVbmlvbk1lbWJlclNlcV9vdXQ7Cgpw
cml2YXRlOgogIFQqIF9wZF9zZXE7Cn07CgpjbGFzcyBVbmlvbk1lbWJlclNlcV9vdXQgewpwdWJs
aWM6CiAgdHlwZWRlZiBVbmlvbk1lbWJlclNlcSBUOwogIHR5cGVkZWYgVW5pb25NZW1iZXJTZXFf
dmFyIFRfdmFyOwoKICBpbmxpbmUgVW5pb25NZW1iZXJTZXFfb3V0KFQqJiBzKSA6IF9kYXRhKHMp
IHsgX2RhdGEgPSAwOyB9CiAgaW5saW5lIFVuaW9uTWVtYmVyU2VxX291dChUX3ZhciYgcykKICAg
IDogX2RhdGEocy5fcGRfc2VxKSB7IHMgPSAoVCopIDA7IH0KICBpbmxpbmUgVW5pb25NZW1iZXJT
ZXFfb3V0KGNvbnN0IFVuaW9uTWVtYmVyU2VxX291dCYgcykgOiBfZGF0YShzLl9kYXRhKSB7fQog
IGlubGluZSBVbmlvbk1lbWJlclNlcV9vdXQmIG9wZXJhdG9yID0gKGNvbnN0IFVuaW9uTWVtYmVy
U2VxX291dCYgcykgewogICAgX2RhdGEgPSBzLl9kYXRhOwogICAgcmV0dXJuICp0aGlzOwogIH0g
aW5saW5lIFVuaW9uTWVtYmVyU2VxX291dCYgb3BlcmF0b3IgPSAoVCogcykgewogICAgX2RhdGEg
PSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgb3BlcmF0b3IgVComKCkgeyByZXR1
cm4gX2RhdGE7IH0KICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5l
IFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBfZGF0YTsgfQoKICBpbmxpbmUgVW5pb25NZW1iZXIm
IG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgaSkgewogICAgcmV0dXJuICgqX2RhdGEpW2ldOwog
IH0KCiAgVComIF9kYXRhOwoKcHJpdmF0ZToKICBVbmlvbk1lbWJlclNlcV9vdXQoKTsKICBVbmlv
bk1lbWJlclNlcV9vdXQmIG9wZXJhdG9yPShjb25zdCBUX3ZhciYpOwp9OwoKZXh0ZXJuIGNvbnN0
IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0VudW1NZW1iZXJTZXE7CgpjbGFzcyBFbnVtTWVtYmVy
U2VxX3ZhcjsKCmNsYXNzIEVudW1NZW1iZXJTZXEgOiBwdWJsaWMgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9fU3RyaW5nIHsKcHVibGljOgogIHR5cGVkZWYgRW51bU1lbWJlclNlcV92YXIgX3Zh
cl90eXBlOwogIGlubGluZSBFbnVtTWVtYmVyU2VxKCkge30KICBpbmxpbmUgRW51bU1lbWJlclNl
cShjb25zdCBFbnVtTWVtYmVyU2VxJiBzKQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNl
X19TdHJpbmcocykge30KCiAgaW5saW5lIEVudW1NZW1iZXJTZXEoX0NPUkJBX1VMb25nIF9tYXgp
CiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZyhfbWF4KSB7fQogIGlubGlu
ZSBFbnVtTWVtYmVyU2VxKF9DT1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgY2hh
cioqIF92YWwsIF9DT1JCQV9Cb29sZWFuIF9yZWw9MCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9fU3RyaW5nKF9tYXgsIF9sZW4sIF92YWwsIF9yZWwpIHt9CgogIGlubGluZSBFbnVt
TWVtYmVyU2VxJiBvcGVyYXRvciA9IChjb25zdCBFbnVtTWVtYmVyU2VxJiBzKSB7CiAgICBfQ09S
QkFfVW5ib3VuZGVkX1NlcXVlbmNlX19TdHJpbmc6Om9wZXJhdG9yPShzKTsKICAgIHJldHVybiAq
dGhpczsKICB9Cn07CgpjbGFzcyBFbnVtTWVtYmVyU2VxX291dDsKCmNsYXNzIEVudW1NZW1iZXJT
ZXFfdmFyIHsKcHVibGljOgogIHR5cGVkZWYgRW51bU1lbWJlclNlcSBUOwogIHR5cGVkZWYgRW51
bU1lbWJlclNlcV92YXIgVF92YXI7CgogIGlubGluZSBFbnVtTWVtYmVyU2VxX3ZhcigpIDogX3Bk
X3NlcSgwKSB7fQogIGlubGluZSBFbnVtTWVtYmVyU2VxX3ZhcihUKiBzKSA6IF9wZF9zZXEocykg
e30KICBpbmxpbmUgRW51bU1lbWJlclNlcV92YXIoY29uc3QgVF92YXImIHMpIHsKICAgIGlmKCBz
Ll9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQoKnMuX3BkX3NlcSk7CiAgICBlbHNlIF9wZF9zZXEg
PSAwOwogIH0KICBpbmxpbmUgfkVudW1NZW1iZXJTZXFfdmFyKCkgeyBpZiggX3BkX3NlcSApIGRl
bGV0ZSBfcGRfc2VxOyB9CgogIGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoVCogcykgewogICAg
aWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsKICAgIF9wZF9zZXEgPSBzOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKGNvbnN0IFRfdmFyJiBzKSB7
CiAgICBpZiggcy5fcGRfc2VxICkgewogICAgICBpZiggIV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3
IFQ7CiAgICAgICpfcGRfc2VxID0gKnMuX3BkX3NlcTsKICAgIH0gZWxzZSBpZiggX3BkX3NlcSAp
IHsKICAgICAgZGVsZXRlIF9wZF9zZXE7CiAgICAgIF9wZF9zZXEgPSAwOwogICAgfQogICAgcmV0
dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfZWxlbWVudCBvcGVyYXRvciBb
XSAoX0NPUkJBX1VMb25nIHMpIHsKICAgIHJldHVybiAoKl9wZF9zZXEpW3NdOwogIH0KCiAgaW5s
aW5lIFQqIG9wZXJhdG9yIC0+ICgpIHsgcmV0dXJuIF9wZF9zZXE7IH0KCgoKICBpbmxpbmUgb3Bl
cmF0b3IgY29uc3QgVCYgKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxpbmUgb3Bl
cmF0b3IgVCYgKCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KCgogIGlubGluZSBjb25zdCBUJiBpbigp
IGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4g
Kl9wZF9zZXE7IH0KICBpbmxpbmUgVComIG91dCgpIHsKICAgIGlmKCBfcGRfc2VxICkgeyBkZWxl
dGUgX3BkX3NlcTsgX3BkX3NlcSA9IDA7IH0KICAgIHJldHVybiBfcGRfc2VxOwogIH0KICBpbmxp
bmUgVCogX3JldG4oKSB7IFQqIHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEgPSAwOyByZXR1cm4gdG1w
OyB9CgogIGZyaWVuZCBjbGFzcyBFbnVtTWVtYmVyU2VxX291dDsKCnByaXZhdGU6CiAgVCogX3Bk
X3NlcTsKfTsKCmNsYXNzIEVudW1NZW1iZXJTZXFfb3V0IHsKcHVibGljOgogIHR5cGVkZWYgRW51
bU1lbWJlclNlcSBUOwogIHR5cGVkZWYgRW51bU1lbWJlclNlcV92YXIgVF92YXI7CgogIGlubGlu
ZSBFbnVtTWVtYmVyU2VxX291dChUKiYgcykgOiBfZGF0YShzKSB7IF9kYXRhID0gMDsgfQogIGlu
bGluZSBFbnVtTWVtYmVyU2VxX291dChUX3ZhciYgcykKICAgIDogX2RhdGEocy5fcGRfc2VxKSB7
IHMgPSAoVCopIDA7IH0KICBpbmxpbmUgRW51bU1lbWJlclNlcV9vdXQoY29uc3QgRW51bU1lbWJl
clNlcV9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkge30KICBpbmxpbmUgRW51bU1lbWJlclNlcV9v
dXQmIG9wZXJhdG9yID0gKGNvbnN0IEVudW1NZW1iZXJTZXFfb3V0JiBzKSB7CiAgICBfZGF0YSA9
IHMuX2RhdGE7CiAgICByZXR1cm4gKnRoaXM7CiAgfSBpbmxpbmUgRW51bU1lbWJlclNlcV9vdXQm
IG9wZXJhdG9yID0gKFQqIHMpIHsKICAgIF9kYXRhID0gczsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgaW5saW5lIG9wZXJhdG9yIFQqJigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQqJiBw
dHIoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4g
X2RhdGE7IH0KCiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfZWxlbWVudCBvcGVyYXRvciBbXSAoX0NP
UkJBX1VMb25nIGkpIHsKICAgIHJldHVybiAoKl9kYXRhKVtpXTsKICB9CgogIFQqJiBfZGF0YTsK
CnByaXZhdGU6CiAgRW51bU1lbWJlclNlcV9vdXQoKTsKICBFbnVtTWVtYmVyU2VxX291dCYgb3Bl
cmF0b3I9KGNvbnN0IFRfdmFyJik7Cn07CiMgMTQyMSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlP
UkIzL0NPUkJBLmgiIDIgMwoKCiAgY2xhc3MgSW50ZXJmYWNlRGVmOwogIGNsYXNzIF9vYmpyZWZf
SW50ZXJmYWNlRGVmOwoKICBjbGFzcyBJbXBsZW1lbnRhdGlvbkRlZiB7fTsKICB0eXBlZGVmIElt
cGxlbWVudGF0aW9uRGVmKiBJbXBsZW1lbnRhdGlvbkRlZl9wdHI7CiAgdHlwZWRlZiBJbXBsZW1l
bnRhdGlvbkRlZl9wdHIgSW1wbGVtZW50YXRpb25EZWZSZWY7CgogIGNsYXNzIE9wZXJhdGlvbkRl
ZjsKICBjbGFzcyBfb2JqcmVmX09wZXJhdGlvbkRlZjsKCiAgY2xhc3MgU2VydmVyUmVxdWVzdDsK
ICB0eXBlZGVmIFNlcnZlclJlcXVlc3QqIFNlcnZlclJlcXVlc3RfcHRyOwogIHR5cGVkZWYgU2Vy
dmVyUmVxdWVzdF9wdHIgU2VydmVyUmVxdWVzdFJlZjsKCiAgY2xhc3MgUmVxdWVzdDsKICB0eXBl
ZGVmIFJlcXVlc3QqIFJlcXVlc3RfcHRyOwogIHR5cGVkZWYgUmVxdWVzdF9wdHIgUmVxdWVzdFJl
ZjsKICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPFJlcXVlc3Q+IFJlcXVlc3RfdmFyOwog
IHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9PdXQ8UmVxdWVzdCxSZXF1ZXN0X3Zhcj4gUmVxdWVz
dF9vdXQ7CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX01lbWJlcjxSZXF1ZXN0LFJlcXVlc3Rf
dmFyPiBSZXF1ZXN0X21lbWJlcjsKCgoKCgogIGNsYXNzIE9iamVjdF9IZWxwZXIgewogIHB1Ymxp
YzoKICAgIHR5cGVkZWYgT2JqZWN0X3B0ciBfcHRyX3R5cGU7CgogICAgc3RhdGljIF9wdHJfdHlw
ZSBfbmlsKCk7CiAgICBzdGF0aWMgX0NPUkJBX0Jvb2xlYW4gaXNfbmlsKF9wdHJfdHlwZSk7CiAg
ICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgICBzdGF0aWMgdm9pZCBkdXBsaWNh
dGUoX3B0cl90eXBlKTsKICAgIHN0YXRpYyBzaXplX3QgTlBfYWxpZ25lZFNpemUoX3B0cl90eXBl
LCBzaXplX3QpOwogICAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1
ZmZlcmVkU3RyZWFtJik7CiAgICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihOZXRC
dWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUs
IE1lbUJ1ZmZlcmVkU3RyZWFtJik7CiAgICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJl
ZihNZW1CdWZmZXJlZFN0cmVhbSYpOwogIH07CgogIGNsYXNzIE9iamVjdCB7CiAgcHVibGljOgog
ICAgdHlwZWRlZiBPYmplY3RfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgT2JqZWN0X3ZhciBf
dmFyX3R5cGU7CgogICAgdmlydHVhbCB+T2JqZWN0KCk7CgogICAgU3RhdHVzIF9jcmVhdGVfcmVx
dWVzdChDb250ZXh0X3B0ciBjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTlZMaXN0X3B0ciBhcmdf
bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZWRWYWx1ZV9wdHIgcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0X291dCByZXF1ZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBGbGFncyByZXFfZmxhZ3MpOwoKICAgIFN0YXR1cyBfY3JlYXRlX3Jl
cXVlc3QoQ29udGV4dF9wdHIgY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5WTGlzdF9wdHIgYXJn
X2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVkVmFsdWVfcHRyIHJlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uTGlzdF9wdHIgZXhjZXB0aW9ucywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dExpc3RfcHRyIGN0eGxpc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3Rfb3V0IHJlcXVlc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZsYWdzIHJlcV9mbGFncyk7CgogICAgUmVxdWVzdF9wdHIgX3JlcXVlc3Qo
Y29uc3QgY2hhciogb3BlcmF0aW9uKTsKCiAgICBJbXBsZW1lbnRhdGlvbkRlZl9wdHIgX2dldF9p
bXBsZW1lbnRhdGlvbigpOwogICAgX29ianJlZl9JbnRlcmZhY2VEZWYqIF9nZXRfaW50ZXJmYWNl
KCk7CgoKICAgIEJvb2xlYW4gX2lzX2EoY29uc3QgY2hhciogcmVwb0lkKTsKICAgIHZpcnR1YWwg
Qm9vbGVhbiBfbm9uX2V4aXN0ZW50KCk7CiAgICBCb29sZWFuIF9pc19lcXVpdmFsZW50KF9wdHJf
dHlwZSBvdGhlcl9vYmplY3QpOwogICAgVUxvbmcgX2hhc2goVUxvbmcgbWF4aW11bSk7CgogICAg
c3RhdGljIF9wdHJfdHlwZSBfZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgICBzdGF0aWMgaW5saW5l
IF9wdHJfdHlwZSBfbmFycm93KE9iamVjdF9wdHIgbykgeyByZXR1cm4gX2R1cGxpY2F0ZShvKTsg
fQogICAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CgoKCgoKICAgIGlubGluZSBPYmplY3QoKSA6
IHBkX29iaigwKSwgcGRfbWFnaWMoX1BSX21hZ2ljKSB7fQoKICAgIGlubGluZSBCb29sZWFuIF9O
UF9pc19uaWwoKSBjb25zdCB7IHJldHVybiBwZF9vYmogPT0gMDsgfQogICAgaW5saW5lIEJvb2xl
YW4gX05QX2lzX3BzZXVkbygpIGNvbnN0IHsgcmV0dXJuIHBkX29iaiA9PSAob21uaU9ialJlZiop
IDE7IH0KICAgIGlubGluZSBvbW5pT2JqUmVmKiBfUFJfZ2V0b2JqKCkgeyByZXR1cm4gcGRfb2Jq
OyB9CiAgICBpbmxpbmUgdm9pZCBfUFJfc2V0b2JqKG9tbmlPYmpSZWYqIG8pIHsgcGRfb2JqID0g
bzsgfQogICAgc3RhdGljIGlubGluZSBfQ09SQkFfQm9vbGVhbiBfUFJfaXNfdmFsaWQoT2JqZWN0
X3B0ciBwKSB7CiAgICAgIHJldHVybiBwID8gKHAtPnBkX21hZ2ljID09IF9QUl9tYWdpYykgOiAx
OwogICAgfQoKICAgIHZpcnR1YWwgdm9pZCBfTlBfaW5jclJlZkNvdW50KCk7CiAgICB2aXJ0dWFs
IHZvaWQgX05QX2RlY3JSZWZDb3VudCgpOwogICAgdmlydHVhbCB2b2lkKiBfcHRyVG9PYmpSZWYo
Y29uc3QgY2hhciogcmVwb0lkKTsKCiAgICBzdGF0aWMgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShP
YmplY3RfcHRyLCBzaXplX3QpOwogICAgc3RhdGljIHZvaWQgX21hcnNoYWxPYmpSZWYoT2JqZWN0
X3B0ciwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICAgIHN0YXRpYyBPYmplY3RfcHRyIF91bm1hcnNo
YWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICAgIHN0YXRpYyB2b2lkIF9tYXJzaGFsT2Jq
UmVmKE9iamVjdF9wdHIsIE1lbUJ1ZmZlcmVkU3RyZWFtJik7CiAgICBzdGF0aWMgT2JqZWN0X3B0
ciBfdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7CgogICAgc3RhdGljIGNvbnN0
IGNoYXIqIF9QRF9yZXBvSWQ7CiAgICBzdGF0aWMgY29uc3QgVUxvbmcgX1BSX21hZ2ljOwoKICBw
cml2YXRlOgogICAgb21uaU9ialJlZiogcGRfb2JqOwoKCiAgICBVTG9uZyBwZF9tYWdpYzsKICB9
OwoKCgoKCgoKICBzdHJ1Y3QgUFJfc3RydWN0TWVtYmVyIHsKICAgIGNvbnN0IGNoYXIqIG5hbWU7
CiAgICBUeXBlQ29kZV9wdHIgdHlwZTsKICB9OwoKICB0eXBlZGVmIFVMb25nIFBSX3VuaW9uRGlz
Y3JpbWluYXRvcjsKCiAgc3RydWN0IFBSX3VuaW9uTWVtYmVyIHsKICAgIGNvbnN0IGNoYXIqIG5h
bWU7CiAgICBUeXBlQ29kZV9wdHIgdHlwZTsKICAgIFBSX3VuaW9uRGlzY3JpbWluYXRvciBsYWJl
bDsKICB9OwoKICBlbnVtIFRDS2luZCB7CiAgICB0a19udWxsID0gMCwKICAgIHRrX3ZvaWQgPSAx
LAogICAgdGtfc2hvcnQgPSAyLAogICAgdGtfbG9uZyA9IDMsCiAgICB0a191c2hvcnQgPSA0LAog
ICAgdGtfdWxvbmcgPSA1LAogICAgdGtfZmxvYXQgPSA2LAogICAgdGtfZG91YmxlID0gNywKICAg
IHRrX2Jvb2xlYW4gPSA4LAogICAgdGtfY2hhciA9IDksCiAgICB0a19vY3RldCA9IDEwLAogICAg
dGtfYW55ID0gMTEsCiAgICB0a19UeXBlQ29kZSA9IDEyLAogICAgdGtfUHJpbmNpcGFsPSAxMywK
ICAgIHRrX29ianJlZiA9IDE0LAogICAgdGtfc3RydWN0ID0gMTUsCiAgICB0a191bmlvbiA9IDE2
LAogICAgdGtfZW51bSA9IDE3LAogICAgdGtfc3RyaW5nID0gMTgsCiAgICB0a19zZXF1ZW5jZSA9
IDE5LAogICAgdGtfYXJyYXkgPSAyMCwKICAgIHRrX2FsaWFzID0gMjEsCiAgICB0a19leGNlcHQg
PSAyMiwKICAgIHRrX2xvbmdsb25nID0gMjMsCiAgICB0a191bG9uZ2xvbmcgPSAyNCwKICAgIHRr
X2xvbmdkb3VibGUgPSAyNQogIH07CgoKICBjbGFzcyBUeXBlQ29kZSB7CiAgcHVibGljOgogICAg
dmlydHVhbCB+VHlwZUNvZGUoKTsKCiAgICBUQ0tpbmQga2luZCgpIGNvbnN0OwoKICAgIEJvb2xl
YW4gZXF1YWwoVHlwZUNvZGVfcHRyIFRDcCkgY29uc3Q7CgogICAgQm9vbGVhbiBlcXVpdmFsZW50
KFR5cGVDb2RlX3B0ciBUQ3ApIGNvbnN0OwoKCiAgICBUeXBlQ29kZV9wdHIgZ2V0X2NvbXBhY3Rf
dHlwZWNvZGUoKSBjb25zdDsKCgogICAgY29uc3QgY2hhciogaWQoKSBjb25zdDsKICAgIGNvbnN0
IGNoYXIqIG5hbWUoKSBjb25zdDsKCiAgICBVTG9uZyBtZW1iZXJfY291bnQoKSBjb25zdDsKICAg
IGNvbnN0IGNoYXIqIG1lbWJlcl9uYW1lKFVMb25nIGluZGV4KSBjb25zdDsKCiAgICBUeXBlQ29k
ZV9wdHIgbWVtYmVyX3R5cGUoVUxvbmcgaSkgY29uc3Q7CgogICAgQW55KiBtZW1iZXJfbGFiZWwo
VUxvbmcgaSkgY29uc3Q7CiAgICBUeXBlQ29kZV9wdHIgZGlzY3JpbWluYXRvcl90eXBlKCkgY29u
c3Q7CiAgICBMb25nIGRlZmF1bHRfaW5kZXgoKSBjb25zdDsKCiAgICBVTG9uZyBsZW5ndGgoKSBj
b25zdDsKCiAgICBUeXBlQ29kZV9wdHIgY29udGVudF90eXBlKCkgY29uc3Q7CgogICAgTG9uZyBw
YXJhbV9jb3VudCgpIGNvbnN0OwogICAgQW55KiBwYXJhbWV0ZXIoTG9uZyBpbmRleCkgY29uc3Q7
CiMgMTYyNSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL0NPUkJBLmgiIDMKICAgIHN0YXRp
YyBUeXBlQ29kZV9wdHIgX2R1cGxpY2F0ZShUeXBlQ29kZV9wdHIgdCk7CiAgICBzdGF0aWMgVHlw
ZUNvZGVfcHRyIF9uaWwoKTsKCgoKICAgIGNsYXNzIEJvdW5kcyA6IHB1YmxpYyBVc2VyRXhjZXB0
aW9uIHsgcHVibGljOiBpbmxpbmUgQm91bmRzKCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0
VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5l
IEJvdW5kcyhjb25zdCBCb3VuZHMmIF9leCkgOiBVc2VyRXhjZXB0aW9uKF9leCkge30gaW5saW5l
IEJvdW5kcyYgb3BlcmF0b3I9KGNvbnN0IEJvdW5kcyYgX2V4KSB7ICogKFVzZXJFeGNlcHRpb24q
KSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+Qm91bmRzKCk7IHZpcnR1YWwg
dm9pZCBfcmFpc2UoKTsgc3RhdGljIEJvdW5kcyogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0
aWMgY29uc3QgQm91bmRzKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxp
bmUgQm91bmRzKiBfbmFycm93KEV4Y2VwdGlvbiogX2V4KSB7IHJldHVybiBfZG93bmNhc3QoX2V4
KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3Qgb3MpIGNvbnN0IHsgcmV0
dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29u
c3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7
fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0cmVhbSYpIHt9IGlubGluZSB2
b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikge30gc3RhdGljIGluc2VydEV4Y2Vw
dGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBp
bnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTog
dmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBj
aGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChp
bnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJl
YW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikg
Y29uc3Q7IH07CiAgICBjbGFzcyBCYWRLaW5kIDogcHVibGljIFVzZXJFeGNlcHRpb24geyBwdWJs
aWM6IGlubGluZSBCYWRLaW5kKCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsg
cGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIEJhZEtpbmQo
Y29uc3QgQmFkS2luZCYgX2V4KSA6IFVzZXJFeGNlcHRpb24oX2V4KSB7fSBpbmxpbmUgQmFkS2lu
ZCYgb3BlcmF0b3I9KGNvbnN0IEJhZEtpbmQmIF9leCkgeyAqIChVc2VyRXhjZXB0aW9uKikgdGhp
cyA9IF9leDsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfkJhZEtpbmQoKTsgdmlydHVhbCB2b2lk
IF9yYWlzZSgpOyBzdGF0aWMgQmFkS2luZCogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMg
Y29uc3QgQmFkS2luZCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5l
IEJhZEtpbmQqIF9uYXJyb3coRXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3duY2FzdChfZXgp
OyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykgY29uc3QgeyByZXR1
cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25z
dCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9
IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30gaW5saW5lIHZv
aWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5zZXJ0RXhjZXB0
aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIGlu
c2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2YXRlOiB2
aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNo
YXIqIF9OUF90eXBlSWQoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGlu
dCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0cmVh
bSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBj
b25zdDsgfTsKCiAgICBzdGF0aWMgdm9pZCBtYXJzaGFsVHlwZUNvZGUoVHlwZUNvZGVfcHRyIG9i
aixOZXRCdWZmZXJlZFN0cmVhbSYgcyk7CiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIHVubWFyc2hh
bFR5cGVDb2RlKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKTsKCgogICAgc3RhdGljIHZvaWQgbWFyc2hh
bFR5cGVDb2RlKFR5cGVDb2RlX3B0ciBvYmosTWVtQnVmZmVyZWRTdHJlYW0mIHMpOwogICAgc3Rh
dGljIFR5cGVDb2RlX3B0ciB1bm1hcnNoYWxUeXBlQ29kZShNZW1CdWZmZXJlZFN0cmVhbSYgcyk7
CiMgMTY1NCAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL0NPUkJBLmgiIDMKICAgIHN0YXRp
YyBUeXBlQ29kZV9wdHIgTlBfdW5pb25fdGMoY29uc3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVDb2RlX3B0ciBkaXNj
cmltaW5hdG9yX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVuaW9uTWVtYmVyU2VxJiBtZW1iZXJzKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgTlBfZW51
bV90Yyhjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBFbnVtTWVtYmVyU2VxJiBtZW1iZXJzKTsKICAgIHN0YXRp
YyBUeXBlQ29kZV9wdHIgTlBfYWxpYXNfdGMoY29uc3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVDb2RlX3B0ciBvcmln
aW5hbF90eXBlKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgTlBfaW50ZXJmYWNlX3RjKGNvbnN0
IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgTlBf
c3RyaW5nX3RjKFVMb25nIGJvdW5kKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgTlBfc2VxdWVu
Y2VfdGMoVUxvbmcgYm91bmQsIFR5cGVDb2RlX3B0ciBlbGVtZW50X3R5cGUpOwogICAgc3RhdGlj
IFR5cGVDb2RlX3B0ciBOUF9hcnJheV90YyhVTG9uZyBsZW5ndGgsIFR5cGVDb2RlX3B0ciBlbGVt
ZW50X3R5cGUpOwogICAgc3RhdGljIFR5cGVDb2RlX3B0ciBOUF9yZWN1cnNpdmVfc2VxdWVuY2Vf
dGMoVUxvbmcgYm91bmQsIFVMb25nIG9mZnNldCk7CgoKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIg
UFJfc3RydWN0X3RjKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJfc3RydWN0TWVtYmVyKiBtZW1iZXJz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxvbmcgbWVtYmVyQ291bnQp
OwoKCiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBSX3VuaW9uX3RjKGNvbnN0IGNoYXIqIGlkLCBj
b25zdCBjaGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBl
Q29kZV9wdHIgZGlzY3JpbWluYXRvcl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQUl91bmlvbk1lbWJlciogbWVtYmVycywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVUxvbmcgbWVtYmVyQ291bnQsIExvbmcgZGVmbHQgPSAtMSk7CiAg
ICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBSX2VudW1fdGMoY29uc3QgY2hhciogaWQsIGNvbnN0IGNo
YXIqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioq
IG1lbWJlcnMsIFVMb25nIG1lbWJlckNvdW50KTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJf
YWxpYXNfdGMoY29uc3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFR5cGVDb2RlX3B0ciBvcmlnaW5hbF90eXBlKTsKICAgIHN0
YXRpYyBUeXBlQ29kZV9wdHIgUFJfZXhjZXB0aW9uX3RjKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBj
aGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UFJfc3RydWN0TWVtYmVyKiBtZW1iZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVUxvbmcgbWVtYmVyQ291bnQpOwoKCiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBS
X2ludGVyZmFjZV90Yyhjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSk7CiAgICBzdGF0
aWMgVHlwZUNvZGVfcHRyIFBSX3N0cmluZ190YyhVTG9uZyBib3VuZCk7CiAgICBzdGF0aWMgVHlw
ZUNvZGVfcHRyIFBSX3NlcXVlbmNlX3RjKFVMb25nIGJvdW5kLCBUeXBlQ29kZV9wdHIgZWxlbWVu
dF90eXBlKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfYXJyYXlfdGMoVUxvbmcgbGVuZ3Ro
LCBUeXBlQ29kZV9wdHIgZWxlbWVudF90eXBlKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJf
cmVjdXJzaXZlX3NlcXVlbmNlX3RjKFVMb25nIGJvdW5kLCBVTG9uZyBvZmZzZXQpOwogICAgc3Rh
dGljIFR5cGVDb2RlX3B0ciBQUl9udWxsX3RjKCk7CiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBS
X3ZvaWRfdGMoKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfc2hvcnRfdGMoKTsKICAgIHN0
YXRpYyBUeXBlQ29kZV9wdHIgUFJfbG9uZ190YygpOwogICAgc3RhdGljIFR5cGVDb2RlX3B0ciBQ
Ul91c2hvcnRfdGMoKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfdWxvbmdfdGMoKTsKICAg
IHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfZmxvYXRfdGMoKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9w
dHIgUFJfZG91YmxlX3RjKCk7CiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBSX2Jvb2xlYW5fdGMo
KTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfY2hhcl90YygpOwogICAgc3RhdGljIFR5cGVD
b2RlX3B0ciBQUl9vY3RldF90YygpOwogICAgc3RhdGljIFR5cGVDb2RlX3B0ciBQUl9hbnlfdGMo
KTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfVHlwZUNvZGVfdGMoKTsKICAgIHN0YXRpYyBU
eXBlQ29kZV9wdHIgUFJfUHJpbmNpcGFsX3RjKCk7CiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBS
X09iamVjdF90YygpOwogICAgc3RhdGljIFR5cGVDb2RlX3B0ciBQUl9zdHJpbmdfdGMoKTsKCgog
ICAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CiAg
ICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIE5QX2lzX25pbCgpIGNvbnN0OwoKICAgIHN0YXRpYyBp
bmxpbmUgX0NPUkJBX0Jvb2xlYW4gUFJfaXNfdmFsaWQoVHlwZUNvZGVfcHRyIHAgKSB7CiAgICAg
IHJldHVybiAoKHApID8gKHAtPnBkX21hZ2ljID09IFBSX21hZ2ljKSA6IDEpOwogICAgfQogICAg
c3RhdGljIGNvbnN0IENPUkJBOjpVTG9uZyBQUl9tYWdpYzsKCiAgcHJvdGVjdGVkOgoKICAgIFR5
cGVDb2RlKGNvbnN0IFR5cGVDb2RlJiB0Yyk7CiAgICBUeXBlQ29kZSYgb3BlcmF0b3I9KGNvbnN0
IFR5cGVDb2RlJiB0Yyk7CiAgICBUeXBlQ29kZSgpIHsgcGRfbWFnaWMgPSBQUl9tYWdpYzsgfTsK
CiAgICBfQ09SQkFfVUxvbmcgcGRfbWFnaWM7CiAgfTsKCgoKCgoKICBleHRlcm4gVHlwZUNvZGVf
cHRyIF90Y19udWxsOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3ZvaWQ7CiAgZXh0ZXJuIFR5
cGVDb2RlX3B0ciBfdGNfc2hvcnQ7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfbG9uZzsKICBl
eHRlcm4gVHlwZUNvZGVfcHRyIF90Y191c2hvcnQ7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNf
dWxvbmc7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfZmxvYXQ7CiAgZXh0ZXJuIFR5cGVDb2Rl
X3B0ciBfdGNfZG91YmxlOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX2Jvb2xlYW47CiAgZXh0
ZXJuIFR5cGVDb2RlX3B0ciBfdGNfY2hhcjsKICBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19vY3Rl
dDsKICBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19hbnk7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBf
dGNfVHlwZUNvZGU7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfUHJpbmNpcGFsOwogIGV4dGVy
biBUeXBlQ29kZV9wdHIgX3RjX09iamVjdDsKICBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19zdHJp
bmc7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfTmFtZWRWYWx1ZTsKCgoKCgoKICBjbGFzcyBE
eW5Bbnk7CiAgdHlwZWRlZiBEeW5BbnkqIER5bkFueV9wdHI7CiAgdHlwZWRlZiBEeW5BbnlfcHRy
IER5bkFueVJlZjsKCiAgY2xhc3MgRHluRW51bTsKICB0eXBlZGVmIER5bkVudW0qIER5bkVudW1f
cHRyOwogIHR5cGVkZWYgRHluRW51bV9wdHIgRHluRW51bVJlZjsKCiAgY2xhc3MgRHluU3RydWN0
OwogIHR5cGVkZWYgRHluU3RydWN0KiBEeW5TdHJ1Y3RfcHRyOwogIHR5cGVkZWYgRHluU3RydWN0
X3B0ciBEeW5TdHJ1Y3RSZWY7CgogIGNsYXNzIER5blVuaW9uOwogIHR5cGVkZWYgRHluVW5pb24q
IER5blVuaW9uX3B0cjsKICB0eXBlZGVmIER5blVuaW9uX3B0ciBEeW5VbmlvblJlZjsKCiAgY2xh
c3MgRHluU2VxdWVuY2U7CiAgdHlwZWRlZiBEeW5TZXF1ZW5jZSogRHluU2VxdWVuY2VfcHRyOwog
IHR5cGVkZWYgRHluU2VxdWVuY2VfcHRyIER5blNlcXVlbmNlUmVmOwoKICBjbGFzcyBEeW5BcnJh
eTsKICB0eXBlZGVmIER5bkFycmF5KiBEeW5BcnJheV9wdHI7CiAgdHlwZWRlZiBEeW5BcnJheV9w
dHIgRHluQXJyYXlSZWY7CgoKCgoKCiAgY2xhc3MgRHluQW55IHsKICBwdWJsaWM6CgogICAgY2xh
c3MgSW52YWxpZCA6IHB1YmxpYyBVc2VyRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgSW52YWxp
ZCgpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5O
Q1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBJbnZhbGlkKGNvbnN0IEludmFsaWQmIF9l
eCkgOiBVc2VyRXhjZXB0aW9uKF9leCkge30gaW5saW5lIEludmFsaWQmIG9wZXJhdG9yPShjb25z
dCBJbnZhbGlkJiBfZXgpIHsgKiAoVXNlckV4Y2VwdGlvbiopIHRoaXMgPSBfZXg7IHJldHVybiAq
dGhpczsgfSB2aXJ0dWFsIH5JbnZhbGlkKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGlj
IEludmFsaWQqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEludmFsaWQqIF9k
b3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBJbnZhbGlkKiBfbmFycm93
KEV4Y2VwdGlvbiogX2V4KSB7IHJldHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90
IF9OUF9hbGlnbmVkU2l6ZShzaXplX3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2
b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQg
b3BlcmF0b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVy
YXRvcjw8PShOZXRCdWZmZXJlZFN0cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1l
bUJ1ZmZlcmVkU3RyZWFtJikge30gc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRv
QW55Rm47IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBz
dGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24q
IF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkg
Y29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2
aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVh
bCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CiAgICBjbGFz
cyBJbnZhbGlkVmFsdWUgOiBwdWJsaWMgVXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIElu
dmFsaWRWYWx1ZSgpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2Vy
dFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBJbnZhbGlkVmFsdWUoY29u
c3QgSW52YWxpZFZhbHVlJiBfZXgpIDogVXNlckV4Y2VwdGlvbihfZXgpIHt9IGlubGluZSBJbnZh
bGlkVmFsdWUmIG9wZXJhdG9yPShjb25zdCBJbnZhbGlkVmFsdWUmIF9leCkgeyAqIChVc2VyRXhj
ZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfkludmFsaWRWYWx1
ZSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBJbnZhbGlkVmFsdWUqIF9kb3duY2Fz
dChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEludmFsaWRWYWx1ZSogX2Rvd25jYXN0KGNvbnN0
IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIEludmFsaWRWYWx1ZSogX25hcnJvdyhFeGNlcHRp
b24qIF9leCkgeyByZXR1cm4gX2Rvd25jYXN0KF9leCk7IH0gaW5saW5lIHNpemVfdCBfTlBfYWxp
Z25lZFNpemUoc2l6ZV90IG9zKSBjb25zdCB7IHJldHVybiBvczsgfSBpbmxpbmUgdm9pZCBvcGVy
YXRvcj4+PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9y
Pj49KE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0o
TmV0QnVmZmVyZWRTdHJlYW0mKSB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJl
ZFN0cmVhbSYpIHt9IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBz
dGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgc3RhdGljIGNv
bnN0IGNoYXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVw
bGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2
b2lkIF9OUF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBf
TlBfbWFyc2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwogICAgY2xhc3MgVHlwZU1p
c21hdGNoIDogcHVibGljIFVzZXJFeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBUeXBlTWlzbWF0
Y2goKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZu
TkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgVHlwZU1pc21hdGNoKGNvbnN0IFR5cGVN
aXNtYXRjaCYgX2V4KSA6IFVzZXJFeGNlcHRpb24oX2V4KSB7fSBpbmxpbmUgVHlwZU1pc21hdGNo
JiBvcGVyYXRvcj0oY29uc3QgVHlwZU1pc21hdGNoJiBfZXgpIHsgKiAoVXNlckV4Y2VwdGlvbiop
IHRoaXMgPSBfZXg7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5UeXBlTWlzbWF0Y2goKTsgdmly
dHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgVHlwZU1pc21hdGNoKiBfZG93bmNhc3QoRXhjZXB0
aW9uKik7IHN0YXRpYyBjb25zdCBUeXBlTWlzbWF0Y2gqIF9kb3duY2FzdChjb25zdCBFeGNlcHRp
b24qKTsgc3RhdGljIGlubGluZSBUeXBlTWlzbWF0Y2gqIF9uYXJyb3coRXhjZXB0aW9uKiBfZXgp
IHsgcmV0dXJuIF9kb3duY2FzdChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXpl
KHNpemVfdCBvcykgY29uc3QgeyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0o
TmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1C
dWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZl
cmVkU3RyZWFtJikge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0m
KSB7fSBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGlu
c2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFy
KiBfUERfcmVwb0lkOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgp
IGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgdmlydHVhbCBj
b25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBf
bWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNo
YWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgfTsKICAgIGNsYXNzIEludmFsaWRTZXEgOiBw
dWJsaWMgVXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIEludmFsaWRTZXEoKSB7IHBkX2lu
c2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0
VG9BbnlGbk5DUDsgfSBpbmxpbmUgSW52YWxpZFNlcShjb25zdCBJbnZhbGlkU2VxJiBfZXgpIDog
VXNlckV4Y2VwdGlvbihfZXgpIHt9IGlubGluZSBJbnZhbGlkU2VxJiBvcGVyYXRvcj0oY29uc3Qg
SW52YWxpZFNlcSYgX2V4KSB7ICogKFVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4g
KnRoaXM7IH0gdmlydHVhbCB+SW52YWxpZFNlcSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0
YXRpYyBJbnZhbGlkU2VxKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBJbnZh
bGlkU2VxKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgSW52YWxp
ZFNlcSogX25hcnJvdyhFeGNlcHRpb24qIF9leCkgeyByZXR1cm4gX2Rvd25jYXN0KF9leCk7IH0g
aW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IG9zKSBjb25zdCB7IHJldHVybiBv
czsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9
IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5s
aW5lIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVmZmVyZWRTdHJlYW0mKSB7fSBpbmxpbmUgdm9pZCBv
cGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0cmVhbSYpIHt9IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25U
b0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0
VG9BbnlGbk5DUDsgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6IHZpcnR1
YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciog
X05QX3R5cGVJZCgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBz
aXplKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikg
Y29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0
OyB9OwoKICAgIHR5cGVkZWYgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQgT2N0ZXRT
ZXE7CgogICAgdmlydHVhbCB+RHluQW55KCk7CgogICAgdmlydHVhbCBUeXBlQ29kZV9wdHIgdHlw
ZSgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBhc3NpZ24oRHluQW55X3B0ciBkeW5fYW55
KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZnJvbV9hbnkoY29uc3QgQW55JiB2YWx1ZSkgPSAwOwog
ICAgdmlydHVhbCBBbnkqIHRvX2FueSgpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkg
PSAwOwogICAgdmlydHVhbCBEeW5BbnlfcHRyIGNvcHkoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0X2Jvb2xlYW4oQm9vbGVhbiB2YWx1ZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGluc2Vy
dF9vY3RldChPY3RldCB2YWx1ZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGluc2VydF9jaGFyKENo
YXIgdmFsdWUpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRfc2hvcnQoU2hvcnQgdmFsdWUp
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRfdXNob3J0KFVTaG9ydCB2YWx1ZSkgPSAwOwog
ICAgdmlydHVhbCB2b2lkIGluc2VydF9sb25nKExvbmcgdmFsdWUpID0gMDsKICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRfdWxvbmcoVUxvbmcgdmFsdWUpID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0X2Zsb2F0KEZsb2F0IHZhbHVlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0X2RvdWJs
ZShEb3VibGUgdmFsdWUpID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0X3N0cmluZyhjb25z
dCBjaGFyKiB2YWx1ZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGluc2VydF9yZWZlcmVuY2UoT2Jq
ZWN0X3B0ciB2YWx1ZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGluc2VydF90eXBlY29kZShUeXBl
Q29kZV9wdHIgdmFsdWUpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRfYW55KGNvbnN0IEFu
eSYgdmFsdWUpID0gMDsKICAgIHZpcnR1YWwgQm9vbGVhbiBnZXRfYm9vbGVhbigpID0gMDsKICAg
IHZpcnR1YWwgT2N0ZXQgZ2V0X29jdGV0KCkgPSAwOwogICAgdmlydHVhbCBDaGFyIGdldF9jaGFy
KCkgPSAwOwogICAgdmlydHVhbCBTaG9ydCBnZXRfc2hvcnQoKSA9IDA7CiAgICB2aXJ0dWFsIFVT
aG9ydCBnZXRfdXNob3J0KCkgPSAwOwogICAgdmlydHVhbCBMb25nIGdldF9sb25nKCkgPSAwOwog
ICAgdmlydHVhbCBVTG9uZyBnZXRfdWxvbmcoKSA9IDA7CgogICAgdmlydHVhbCBGbG9hdCBnZXRf
ZmxvYXQoKSA9IDA7CiAgICB2aXJ0dWFsIERvdWJsZSBnZXRfZG91YmxlKCkgPSAwOwoKICAgIHZp
cnR1YWwgY2hhciogZ2V0X3N0cmluZygpID0gMDsKICAgIHZpcnR1YWwgT2JqZWN0X3B0ciBnZXRf
cmVmZXJlbmNlKCkgPSAwOwogICAgdmlydHVhbCBUeXBlQ29kZV9wdHIgZ2V0X3R5cGVjb2RlKCkg
PSAwOwogICAgdmlydHVhbCBBbnkqIGdldF9hbnkoKSA9IDA7CiAgICB2aXJ0dWFsIER5bkFueV9w
dHIgY3VycmVudF9jb21wb25lbnQoKSA9IDA7CiAgICB2aXJ0dWFsIEJvb2xlYW4gbmV4dCgpID0g
MDsKICAgIHZpcnR1YWwgQm9vbGVhbiBzZWVrKExvbmcgaW5kZXgpID0gMDsKICAgIHZpcnR1YWwg
dm9pZCByZXdpbmQoKSA9IDA7CgogICAgc3RhdGljIER5bkFueV9wdHIgX2R1cGxpY2F0ZShEeW5B
bnlfcHRyKTsKICAgIHN0YXRpYyBEeW5BbnlfcHRyIF9uYXJyb3coRHluQW55X3B0cik7CiAgICBz
dGF0aWMgRHluQW55X3B0ciBfbmlsKCk7CgogICAgdmlydHVhbCBCb29sZWFuIE5QX2lzX25pbCgp
IGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgaW50IE5QX25vZGV0eXBlKCkgY29uc3QgPSAwOwogICAg
dmlydHVhbCB2b2lkKiBOUF9uYXJyb3coKSA9IDA7CgogICAgc3RhdGljIGlubGluZSBfQ09SQkFf
Qm9vbGVhbiBQUl9pc192YWxpZChEeW5BbnlfcHRyIHAgKSB7CiAgICAgIHJldHVybiAoKHApID8g
KHAtPnBkX21hZ2ljID09IFBSX21hZ2ljKSA6IDEpOwogICAgfQoKICAgIHN0YXRpYyBjb25zdCBf
Q09SQkFfVUxvbmcgUFJfbWFnaWM7CiAgcHJvdGVjdGVkOgogICAgRHluQW55KCk7CgogIHByaXZh
dGU6CiAgICBfQ09SQkFfVUxvbmcgcGRfbWFnaWM7CgogICAgRHluQW55KGNvbnN0IER5bkFueSYp
OwogICAgRHluQW55JiBvcGVyYXRvcj0oY29uc3QgRHluQW55Jik7CiAgfTsKIyAxODg2ICIvdXNy
L2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIgMwogIGNsYXNzIER5bkVudW0gOiBwdWJs
aWMgdmlydHVhbCBEeW5BbnkgewogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGNoYXIqIHZhbHVlX2Fz
X3N0cmluZygpID0gMDsKICAgIHZpcnR1YWwgdm9pZCB2YWx1ZV9hc19zdHJpbmcoY29uc3QgY2hh
ciogdmFsdWUpID0gMDsKICAgIHZpcnR1YWwgVUxvbmcgdmFsdWVfYXNfdWxvbmcoKSA9IDA7CiAg
ICB2aXJ0dWFsIHZvaWQgdmFsdWVfYXNfdWxvbmcoVUxvbmcgdmFsdWUpID0gMDsKCiAgICBzdGF0
aWMgRHluRW51bV9wdHIgX2R1cGxpY2F0ZShEeW5FbnVtX3B0cik7CiAgICBzdGF0aWMgRHluRW51
bV9wdHIgX25hcnJvdyhEeW5BbnlfcHRyKTsKICAgIHN0YXRpYyBEeW5FbnVtX3B0ciBfbmlsKCk7
CgogICAgdmlydHVhbCB+RHluRW51bSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBEeW5FbnVtKCkge30K
CiAgcHJpdmF0ZToKICAgIER5bkVudW0oY29uc3QgRHluRW51bSYpOwogICAgRHluRW51bSYgb3Bl
cmF0b3I9KGNvbnN0IER5bkVudW0mKTsKICB9OwoKCgoKCiAgdHlwZWRlZiBjaGFyKiBGaWVsZE5h
bWU7CiAgdHlwZWRlZiBTdHJpbmdfdmFyIEZpZWxkTmFtZV92YXI7CgogIHN0cnVjdCBOYW1lVmFs
dWVQYWlyIHsKICAgIFN0cmluZ19tZW1iZXIgaWQ7CiAgICBBbnkgdmFsdWU7CiAgfTsKCiAgdHlw
ZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJsZV9WYXI8TmFtZVZhbHVlUGFpcj4gTmFtZVZh
bHVlUGFpcl92YXI7CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvVmFsdWVfU2VxdWVuY2U8TmFtZVZh
bHVlUGFpcj4gTmFtZVZhbHVlUGFpclNlcTsKCiAgY2xhc3MgRHluU3RydWN0IDogcHVibGljIHZp
cnR1YWwgRHluQW55IHsKICBwdWJsaWM6CgogICAgdmlydHVhbCBjaGFyKiBjdXJyZW50X21lbWJl
cl9uYW1lKCkgPSAwOwogICAgdmlydHVhbCBUQ0tpbmQgY3VycmVudF9tZW1iZXJfa2luZCgpID0g
MDsKICAgIHZpcnR1YWwgTmFtZVZhbHVlUGFpclNlcSogZ2V0X21lbWJlcnMoKSA9IDA7CiAgICB2
aXJ0dWFsIHZvaWQgc2V0X21lbWJlcnMoY29uc3QgTmFtZVZhbHVlUGFpclNlcSYgTlZTZXFWYWwp
ID0gMDsKCiAgICBzdGF0aWMgRHluU3RydWN0X3B0ciBfZHVwbGljYXRlKER5blN0cnVjdF9wdHIp
OwogICAgc3RhdGljIER5blN0cnVjdF9wdHIgX25hcnJvdyhEeW5BbnlfcHRyKTsKICAgIHN0YXRp
YyBEeW5TdHJ1Y3RfcHRyIF9uaWwoKTsKCiAgICB2aXJ0dWFsIH5EeW5TdHJ1Y3QoKTsKCiAgcHJv
dGVjdGVkOgogICAgRHluU3RydWN0KCkge30KCiAgcHJpdmF0ZToKICAgIER5blN0cnVjdChjb25z
dCBEeW5TdHJ1Y3QmKTsKICAgIER5blN0cnVjdCYgb3BlcmF0b3I9KGNvbnN0IER5blN0cnVjdCYp
OwogIH07CgoKCgoKICBjbGFzcyBEeW5VbmlvbiA6IHB1YmxpYyB2aXJ0dWFsIER5bkFueSB7CiAg
cHVibGljOgogICAgdmlydHVhbCBCb29sZWFuIHNldF9hc19kZWZhdWx0KCkgPSAwOwogICAgdmly
dHVhbCB2b2lkIHNldF9hc19kZWZhdWx0KEJvb2xlYW4gdmFsdWUpID0gMDsKICAgIHZpcnR1YWwg
RHluQW55X3B0ciBkaXNjcmltaW5hdG9yKCkgPSAwOwogICAgdmlydHVhbCBUQ0tpbmQgZGlzY3Jp
bWluYXRvcl9raW5kKCkgPSAwOwogICAgdmlydHVhbCBEeW5BbnlfcHRyIG1lbWJlcigpID0gMDsK
ICAgIHZpcnR1YWwgY2hhciogbWVtYmVyX25hbWUoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgbWVt
YmVyX25hbWUoY29uc3QgY2hhciogdmFsdWUpID0gMDsKICAgIHZpcnR1YWwgVENLaW5kIG1lbWJl
cl9raW5kKCkgPSAwOwoKICAgIHN0YXRpYyBEeW5Vbmlvbl9wdHIgX2R1cGxpY2F0ZShEeW5Vbmlv
bl9wdHIpOwogICAgc3RhdGljIER5blVuaW9uX3B0ciBfbmFycm93KER5bkFueV9wdHIpOwogICAg
c3RhdGljIER5blVuaW9uX3B0ciBfbmlsKCk7CgogICAgdmlydHVhbCB+RHluVW5pb24oKTsKCiAg
cHJvdGVjdGVkOgogICAgRHluVW5pb24oKSB7fQoKICBwcml2YXRlOgogICAgRHluVW5pb24oY29u
c3QgRHluVW5pb24mKTsKICAgIER5blVuaW9uJiBvcGVyYXRvcj0oY29uc3QgRHluVW5pb24mKTsK
ICB9OwoKCgoKCiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvVmFsdWVfU2VxdWVuY2U8QW55PiBBbnlT
ZXE7CgogIGNsYXNzIER5blNlcXVlbmNlIDogcHVibGljIHZpcnR1YWwgRHluQW55IHsKICBwdWJs
aWM6CgogICAgdmlydHVhbCBVTG9uZyBsZW5ndGgoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgbGVu
Z3RoIChVTG9uZyB2YWx1ZSkgPSAwOwogICAgdmlydHVhbCBBbnlTZXEqIGdldF9lbGVtZW50cygp
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzZXRfZWxlbWVudHMoY29uc3QgQW55U2VxJiB2YWx1ZSkg
PSAwOwoKICAgIHN0YXRpYyBEeW5TZXF1ZW5jZV9wdHIgX2R1cGxpY2F0ZShEeW5TZXF1ZW5jZV9w
dHIpOwogICAgc3RhdGljIER5blNlcXVlbmNlX3B0ciBfbmFycm93KER5bkFueV9wdHIpOwogICAg
c3RhdGljIER5blNlcXVlbmNlX3B0ciBfbmlsKCk7CgogICAgdmlydHVhbCB+RHluU2VxdWVuY2Uo
KTsKCiAgcHJvdGVjdGVkOgogICAgRHluU2VxdWVuY2UoKSB7fQoKICBwcml2YXRlOgogICAgRHlu
U2VxdWVuY2UoY29uc3QgRHluU2VxdWVuY2UmKTsKICAgIER5blNlcXVlbmNlJiBvcGVyYXRvcj0o
Y29uc3QgRHluU2VxdWVuY2UmKTsKICB9OwoKCgoKCiAgY2xhc3MgRHluQXJyYXkgOiBwdWJsaWMg
dmlydHVhbCBEeW5BbnkgewogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIEFueVNlcSogZ2V0X2VsZW1l
bnRzKCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldF9lbGVtZW50cyhjb25zdCBBbnlTZXEmIHZh
bHVlKSA9IDA7CgogICAgc3RhdGljIER5bkFycmF5X3B0ciBfZHVwbGljYXRlKER5bkFycmF5X3B0
cik7CiAgICBzdGF0aWMgRHluQXJyYXlfcHRyIF9uYXJyb3coRHluQW55X3B0cik7CiAgICBzdGF0
aWMgRHluQXJyYXlfcHRyIF9uaWwoKTsKCiAgICB2aXJ0dWFsIH5EeW5BcnJheSgpOwoKICBwcm90
ZWN0ZWQ6CiAgICBEeW5BcnJheSgpIHt9CgogIHByaXZhdGU6CiAgICBEeW5BcnJheShjb25zdCBE
eW5BcnJheSYpOwogICAgRHluQXJyYXkmIG9wZXJhdG9yPShjb25zdCBEeW5BcnJheSYpOwogIH07
CgoKCgoKCiAgY2xhc3MgUmVxdWVzdCB7CiAgcHVibGljOgogICAgdmlydHVhbCB+UmVxdWVzdCgp
OwoKICAgIHZpcnR1YWwgT2JqZWN0X3B0ciB0YXJnZXQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIG9wZXJhdGlvbigpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgTlZMaXN0X3B0
ciBhcmd1bWVudHMoKSA9IDA7CiAgICB2aXJ0dWFsIE5hbWVkVmFsdWVfcHRyIHJlc3VsdCgpID0g
MDsKICAgIHZpcnR1YWwgRW52aXJvbm1lbnRfcHRyIGVudigpID0gMDsKICAgIHZpcnR1YWwgRXhj
ZXB0aW9uTGlzdF9wdHIgZXhjZXB0aW9ucygpID0gMDsKICAgIHZpcnR1YWwgQ29udGV4dExpc3Rf
cHRyIGNvbnRleHRzKCkgPSAwOwogICAgdmlydHVhbCBDb250ZXh0X3B0ciBjdHgoKSBjb25zdCA9
IDA7CiAgICB2aXJ0dWFsIHZvaWQgY3R4KENvbnRleHRfcHRyKSA9IDA7CgogICAgdmlydHVhbCBB
bnkmIGFkZF9pbl9hcmcoKSA9IDA7CiAgICB2aXJ0dWFsIEFueSYgYWRkX2luX2FyZyhjb25zdCBj
aGFyKiBuYW1lKSA9IDA7CiAgICB2aXJ0dWFsIEFueSYgYWRkX2lub3V0X2FyZygpID0gMDsKICAg
IHZpcnR1YWwgQW55JiBhZGRfaW5vdXRfYXJnKGNvbnN0IGNoYXIqIG5hbWUpID0gMDsKICAgIHZp
cnR1YWwgQW55JiBhZGRfb3V0X2FyZygpID0gMDsKICAgIHZpcnR1YWwgQW55JiBhZGRfb3V0X2Fy
Zyhjb25zdCBjaGFyKiBuYW1lKSA9IDA7CgogICAgdmlydHVhbCB2b2lkIHNldF9yZXR1cm5fdHlw
ZShUeXBlQ29kZV9wdHIgdGMpID0gMDsKICAgIHZpcnR1YWwgQW55JiByZXR1cm5fdmFsdWUoKSA9
IDA7CgogICAgdmlydHVhbCBTdGF0dXMgaW52b2tlKCkgPSAwOwogICAgdmlydHVhbCBTdGF0dXMg
c2VuZF9vbmV3YXkoKSA9IDA7CiAgICB2aXJ0dWFsIFN0YXR1cyBzZW5kX2RlZmVycmVkKCkgPSAw
OwogICAgdmlydHVhbCBTdGF0dXMgZ2V0X3Jlc3BvbnNlKCkgPSAwOwogICAgdmlydHVhbCBCb29s
ZWFuIHBvbGxfcmVzcG9uc2UoKSA9IDA7CgogICAgdmlydHVhbCBCb29sZWFuIE5QX2lzX25pbCgp
IGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgUmVxdWVzdF9wdHIgTlBfZHVwbGljYXRlKCkgPSAwOwoK
ICAgIHN0YXRpYyBSZXF1ZXN0X3B0ciBfZHVwbGljYXRlKFJlcXVlc3RfcHRyKTsKICAgIHN0YXRp
YyBSZXF1ZXN0X3B0ciBfbmlsKCk7CgogICAgc3RhdGljIGlubGluZSBfQ09SQkFfQm9vbGVhbiBQ
Ul9pc192YWxpZChSZXF1ZXN0X3B0ciBwICkgewogICAgICByZXR1cm4gKChwKSA/IChwLT5wZF9t
YWdpYyA9PSBQUl9tYWdpYykgOiAxKTsKICAgIH0KCiAgICBzdGF0aWMgY29uc3QgX0NPUkJBX1VM
b25nIFBSX21hZ2ljOwoKICBwcm90ZWN0ZWQ6CiAgICBSZXF1ZXN0KCkgeyBwZF9tYWdpYyA9IFBS
X21hZ2ljOyB9CgogIHByaXZhdGU6CiAgICBfQ09SQkFfVUxvbmcgcGRfbWFnaWM7CgogICAgUmVx
dWVzdChjb25zdCBSZXF1ZXN0Jik7CiAgICBSZXF1ZXN0JiBvcGVyYXRvcj0oY29uc3QgUmVxdWVz
dCYpOwogIH07CgoKCgoKCiAgY2xhc3MgU2VydmVyUmVxdWVzdCB7CiAgcHVibGljOgogICAgdmly
dHVhbCBjb25zdCBjaGFyKiBvcGVyYXRpb24oKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgYXJndW1l
bnRzKE5WTGlzdF9wdHImIHBhcmFtZXRlcnMpID0gMDsKICAgIHZpcnR1YWwgQ29udGV4dF9wdHIg
Y3R4KCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldF9yZXN1bHQoY29uc3QgQW55JiB2YWx1ZSkg
PSAwOwogICAgdmlydHVhbCB2b2lkIHNldF9leGNlcHRpb24oY29uc3QgQW55JiB2YWx1ZSkgPSAw
OwoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgU2VydmVyUmVxdWVzdCgpIHt9CiAgICB2aXJ0dWFs
IH5TZXJ2ZXJSZXF1ZXN0KCk7CgogIHByaXZhdGU6CiAgICBTZXJ2ZXJSZXF1ZXN0KGNvbnN0IFNl
cnZlclJlcXVlc3QmKTsKICAgIFNlcnZlclJlcXVlc3QmIG9wZXJhdG9yPShjb25zdCBTZXJ2ZXJS
ZXF1ZXN0Jik7CiAgfTsKCgoKCgoKICB0eXBlZGVmIFVMb25nIFBvbGljeVR5cGU7CgogIGNsYXNz
IFBvbGljeTsKICB0eXBlZGVmIFBvbGljeSogUG9saWN5X3B0cjsKICB0eXBlZGVmIFBvbGljeV9w
dHIgUG9saWN5UmVmOwoKICBjbGFzcyBQb2xpY3kgOiBwdWJsaWMgdmlydHVhbCBPYmplY3Qgewog
IHB1YmxpYzoKICAgIHZpcnR1YWwgflBvbGljeSgpOwoKICAgIHZpcnR1YWwgUG9saWN5VHlwZSBw
b2xpY3lfdHlwZSgpOwogICAgdmlydHVhbCBQb2xpY3lfcHRyIGNvcHkoKTsKCiAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveSgpOwoKCiAgICBzdGF0aWMgUG9saWN5X3B0ciBfZHVwbGljYXRlKFBvbGlj
eV9wdHIpOwogICAgc3RhdGljIFBvbGljeV9wdHIgX25hcnJvdyhPYmplY3RfcHRyKTsKICAgIHN0
YXRpYyBQb2xpY3lfcHRyIF9uaWwoKTsKCgoKICAgIFBvbGljeShQb2xpY3lUeXBlIHR5cGUpOwog
ICAgUG9saWN5KCk7CgogICAgdmlydHVhbCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciog
cmVwb0lkKTsKICAgIHZpcnR1YWwgdm9pZCBfTlBfaW5jclJlZkNvdW50KCk7CiAgICB2aXJ0dWFs
IHZvaWQgX05QX2RlY3JSZWZDb3VudCgpOwoKCiAgICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3Jl
cG9JZDsKCiAgcHJpdmF0ZToKICAgIFBvbGljeShjb25zdCBQb2xpY3kmKTsKICAgIFBvbGljeSYg
b3BlcmF0b3IgPSAoY29uc3QgUG9saWN5Jik7CgogICAgaW50IHBkX3JlZkNvdW50OwogICAgUG9s
aWN5VHlwZSBwZF90eXBlOwogIH07CgogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8UG9s
aWN5PiBQb2xpY3lfdmFyOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9NZW1iZXI8UG9saWN5
LCBQb2xpY3lfdmFyPiBQb2xpY3lfbWVtYmVyOwoKICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9fVW5i
b3VuZGVkX1NlcXVlbmNlPFBvbGljeSwgUG9saWN5X21lbWJlcj4gUG9saWN5TGlzdDsKICB0eXBl
ZGVmIFBvbGljeUxpc3QqIFBvbGljeUxpc3RfdmFyOwoKCgoKCgogIGNsYXNzIERvbWFpbk1hbmFn
ZXI7CiAgdHlwZWRlZiBjbGFzcyBEb21haW5NYW5hZ2VyKiBEb21haW5NYW5hZ2VyX3B0cjsKICB0
eXBlZGVmIERvbWFpbk1hbmFnZXJfcHRyIERvbWFpbk1hbmFnZXJSZWY7CgogIGNsYXNzIERvbWFp
bk1hbmFnZXIgewogIHB1YmxpYzoKICAgIFBvbGljeV9wdHIgZ2V0X2RvbWFpbl9wb2xpY3koUG9s
aWN5VHlwZSBwb2xpY3lfdHlwZSk7CgogICAgc3RhdGljIERvbWFpbk1hbmFnZXJfcHRyIF9kdXBs
aWNhdGUoRG9tYWluTWFuYWdlcl9wdHIgcCk7CiAgICBzdGF0aWMgRG9tYWluTWFuYWdlcl9wdHIg
X25pbCgpOwoKICBwcml2YXRlOgogICAgRG9tYWluTWFuYWdlcigpOwogIH07CgogICAgICAgICAg
ICAgICAgICAgQm9vbGVhbiBpc19uaWwoRG9tYWluTWFuYWdlcl9wdHIgcCk7CiAgICAgICAgICAg
ICAgICAgICB2b2lkIHJlbGVhc2UoRG9tYWluTWFuYWdlcl9wdHIpOwoKICB0eXBlZGVmIF9DT1JC
QV9Qc2V1ZG9PYmpfVmFyPERvbWFpbk1hbmFnZXI+IERvbWFpbk1hbmFnZXJfdmFyOwogIHR5cGVk
ZWYgX0NPUkJBX1BzZXVkb09ial9NZW1iZXI8RG9tYWluTWFuYWdlcixEb21haW5NYW5hZ2VyX3Zh
cj4KICAgIERvbWFpbk1hbmFnZXJfbWVtYmVyOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb19VbmJv
dW5kZWRfU2VxdWVuY2U8RG9tYWluTWFuYWdlcixEb21haW5NYW5hZ2VyX21lbWJlcj4KICAgIERv
bWFpbk1hbmFnZXJMaXN0OwoKCgoKCgogIGNsYXNzIEJPQTsKICBjbGFzcyBCT0FfdmFyOwogIHR5
cGVkZWYgQk9BKiBCT0FfcHRyOwogIHR5cGVkZWYgQk9BX3B0ciBCT0FSZWY7CgoKICBjbGFzcyBS
ZWZlcmVuY2VEYXRhIDogcHVibGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0IHsK
ICBwdWJsaWM6CiAgICBpbmxpbmUgUmVmZXJlbmNlRGF0YSgpIHt9CiAgICBpbmxpbmUgUmVmZXJl
bmNlRGF0YShjb25zdCBSZWZlcmVuY2VEYXRhJiBzZXEpCiAgICAgIDogX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZV9fT2N0ZXQoc2VxKSB7fQogICAgaW5saW5lIFJlZmVyZW5jZURhdGEoQ09SQkE6
OlVMb25nIG1heCkKICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldChtYXgp
IHt9CiAgICBpbmxpbmUgUmVmZXJlbmNlRGF0YShDT1JCQTo6VUxvbmcgbWF4LCBDT1JCQTo6VUxv
bmcgbGVuLCBDT1JCQTo6T2N0ZXQqIHZhbCwgQ09SQkE6OkJvb2xlYW4gcmVsPTApCiAgICAgIDog
X0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQobWF4LCBsZW4sIHZhbCwgcmVsKSB7fQog
ICAgaW5saW5lIFJlZmVyZW5jZURhdGEmIG9wZXJhdG9yID0gKGNvbnN0IFJlZmVyZW5jZURhdGEm
IHNlcSkgewogICAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldDo6b3BlcmF0b3I9
KHNlcSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH07CiAgfTsKCgogIGNsYXNzIEJPQSA6IHB1
YmxpYyBPYmplY3QgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBpbXBsX2lzX3JlYWR5KElt
cGxlbWVudGF0aW9uRGVmX3B0ciBwPTAsIEJvb2xlYW4gTm9CbGs9MCkgPSAwOwogICAgdmlydHVh
bCB2b2lkIGltcGxfc2h1dGRvd24oKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpID0g
MDsKCiAgICB2aXJ0dWFsIHZvaWQgb2JqX2lzX3JlYWR5KG9tbmlPcmJCb2FTZXJ2YW50KiwgSW1w
bGVtZW50YXRpb25EZWZfcHRyIHA9MCk9MDsKICAgIHZpcnR1YWwgdm9pZCBvYmpfaXNfcmVhZHko
T2JqZWN0X3B0ciwgSW1wbGVtZW50YXRpb25EZWZfcHRyIHA9MCk9MDsKICAgIHZpcnR1YWwgdm9p
ZCBkaXNwb3NlKE9iamVjdF9wdHIpID0gMDsKCiAgICB2aXJ0dWFsIE9iamVjdF9wdHIgY3JlYXRl
KGNvbnN0IFJlZmVyZW5jZURhdGEmLCBfb2JqcmVmX0ludGVyZmFjZURlZiosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEltcGxlbWVudGF0aW9uRGVmX3B0cikgPSAwOwogICAgdmlydHVh
bCBSZWZlcmVuY2VEYXRhKiBnZXRfaWQoT2JqZWN0X3B0cikgPSAwOwogICAgdmlydHVhbCB2b2lk
IGNoYW5nZV9pbXBsZW1lbnRhdGlvbihPYmplY3RfcHRyLEltcGxlbWVudGF0aW9uRGVmX3B0cikg
PSAwOwogICAgdmlydHVhbCBQcmluY2lwYWxfcHRyIGdldF9wcmluY2lwYWwoT2JqZWN0X3B0ciwg
RW52aXJvbm1lbnRfcHRyKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZGVhY3RpdmF0ZV9pbXBsKElt
cGxlbWVudGF0aW9uRGVmX3B0cikgPSAwOwogICAgdmlydHVhbCB2b2lkIGRlYWN0aXZhdGVfb2Jq
KE9iamVjdF9wdHIpID0gMDsKCiAgICBzdGF0aWMgQk9BX3B0ciBfZHVwbGljYXRlKEJPQV9wdHIp
OwogICAgc3RhdGljIEJPQV9wdHIgX25hcnJvdyhPYmplY3RfcHRyKTsKICAgIHN0YXRpYyBCT0Ff
cHRyIF9uaWwoKTsKICAgIHN0YXRpYyBCT0FfcHRyIGdldEJPQSgpOwoKICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBfUERfcmVwb0lkOwoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgQk9BKGludCBuaWwp
IHsgX1BSX3NldG9iaigob21uaU9ialJlZiopIChuaWwgPyAwOjEpKTsgfQogICAgdmlydHVhbCB+
Qk9BKCk7CgogIHByaXZhdGU6CiAgICBCT0EoY29uc3QgQk9BJik7CiAgICBCT0EmIG9wZXJhdG9y
PShjb25zdCBCT0EmKTsKICB9OwoKCgoKCiAgY2xhc3MgT1JCOwogIGNsYXNzIE9SQl92YXI7CiAg
dHlwZWRlZiBPUkIqIE9SQl9wdHI7CiAgdHlwZWRlZiBPUkJfcHRyIE9SQlJlZjsKCiAgY2xhc3Mg
T1JCIDogcHVibGljIE9iamVjdCB7CiAgcHVibGljOgogICAgdHlwZWRlZiBPUkJfcHRyIF9wdHJf
dHlwZTsKICAgIHR5cGVkZWYgT1JCX3ZhciBfdmFyX3R5cGU7CgogICAgdHlwZWRlZiBjaGFyKiBP
QWlkOwoKICAgIHR5cGVkZWYgY2hhciogT2JqZWN0SWQ7CiAgICB0eXBlZGVmIFN0cmluZ192YXIg
T2JqZWN0SWRfdmFyOwoKICAgIHR5cGVkZWYgX0NPUkJBX1BzZXVkb19VbmJvdW5kZWRfU2VxdWVu
Y2U8UmVxdWVzdCxSZXF1ZXN0X21lbWJlcj4KICAgICAgUmVxdWVzdFNlcTsKCiAgICBjbGFzcyBJ
bnZhbGlkTmFtZSA6IHB1YmxpYyBVc2VyRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgSW52YWxp
ZE5hbWUoKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0Fu
eUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgSW52YWxpZE5hbWUoY29uc3QgSW52
YWxpZE5hbWUmIF9leCkgOiBVc2VyRXhjZXB0aW9uKF9leCkge30gaW5saW5lIEludmFsaWROYW1l
JiBvcGVyYXRvcj0oY29uc3QgSW52YWxpZE5hbWUmIF9leCkgeyAqIChVc2VyRXhjZXB0aW9uKikg
dGhpcyA9IF9leDsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfkludmFsaWROYW1lKCk7IHZpcnR1
YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIEludmFsaWROYW1lKiBfZG93bmNhc3QoRXhjZXB0aW9u
Kik7IHN0YXRpYyBjb25zdCBJbnZhbGlkTmFtZSogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiop
OyBzdGF0aWMgaW5saW5lIEludmFsaWROYW1lKiBfbmFycm93KEV4Y2VwdGlvbiogX2V4KSB7IHJl
dHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXpl
X3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1
ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVy
ZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0
cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikge30g
c3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBpbnNlcnRF
eGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3QgY2hhciogX1BE
X3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25z
dDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1YWwgY29uc3Qg
Y2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNo
YWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1l
bUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CiAgICBjbGFzcyBJbmNvbnNpc3RlbnRUeXBlQ29k
ZSA6IHB1YmxpYyBVc2VyRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgSW5jb25zaXN0ZW50VHlw
ZUNvZGUoKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0Fu
eUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgSW5jb25zaXN0ZW50VHlwZUNvZGUo
Y29uc3QgSW5jb25zaXN0ZW50VHlwZUNvZGUmIF9leCkgOiBVc2VyRXhjZXB0aW9uKF9leCkge30g
aW5saW5lIEluY29uc2lzdGVudFR5cGVDb2RlJiBvcGVyYXRvcj0oY29uc3QgSW5jb25zaXN0ZW50
VHlwZUNvZGUmIF9leCkgeyAqIChVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0dXJuICp0
aGlzOyB9IHZpcnR1YWwgfkluY29uc2lzdGVudFR5cGVDb2RlKCk7IHZpcnR1YWwgdm9pZCBfcmFp
c2UoKTsgc3RhdGljIEluY29uc2lzdGVudFR5cGVDb2RlKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7
IHN0YXRpYyBjb25zdCBJbmNvbnNpc3RlbnRUeXBlQ29kZSogX2Rvd25jYXN0KGNvbnN0IEV4Y2Vw
dGlvbiopOyBzdGF0aWMgaW5saW5lIEluY29uc2lzdGVudFR5cGVDb2RlKiBfbmFycm93KEV4Y2Vw
dGlvbiogX2V4KSB7IHJldHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9h
bGlnbmVkU2l6ZShzaXplX3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9w
ZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0
b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8
PShOZXRCdWZmZXJlZFN0cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZl
cmVkU3RyZWFtJikge30gc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47
IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMg
Y29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9k
dXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7
IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFs
IHZvaWQgX05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lk
IF9OUF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CgoKCgoKICAgIGNsYXNz
IE9iamVjdElkTGlzdF92YXI7CgogICAgY2xhc3MgT2JqZWN0SWRMaXN0IDogcHVibGljIF9DT1JC
QV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZyB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg
T2JqZWN0SWRMaXN0X3ZhciBfdmFyX3R5cGU7CiAgICAgIGlubGluZSBPYmplY3RJZExpc3QoKSB7
fQogICAgICBpbmxpbmUgT2JqZWN0SWRMaXN0KGNvbnN0IE9iamVjdElkTGlzdCYgc2VxKQogICAg
ICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5nKHNlcSkge30KICAgICAgaW5s
aW5lIE9iamVjdElkTGlzdChVTG9uZyBtYXgpCiAgICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlX19TdHJpbmcobWF4KSB7fQogICAgICBpbmxpbmUgT2JqZWN0SWRMaXN0KFVMb25nIG1h
eCwgVUxvbmcgbGVuLCBjaGFyKiogdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2xl
YW4gcmVsPTApCiAgICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19TdHJpbmcobWF4
LCBsZW4sIHZhbCwgcmVsKSB7fQogICAgICBpbmxpbmUgT2JqZWN0SWRMaXN0JiBvcGVyYXRvciA9
IChjb25zdCBPYmplY3RJZExpc3QmIHNlcSkgewogICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2VfX1N0cmluZzo6b3BlcmF0b3I9KHNlcSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICB9CiAgICB9OwoKICAgIGNsYXNzIE9iamVjdElkTGlzdF9vdXQ7CgogICAgY2xhc3MgT2JqZWN0
SWRMaXN0X3ZhciB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgT2JqZWN0SWRMaXN0IFQ7CiAg
ICAgIHR5cGVkZWYgT2JqZWN0SWRMaXN0X3ZhciBUX3ZhcjsKCiAgICAgIGlubGluZSBPYmplY3RJ
ZExpc3RfdmFyKCkgOiBwZF9zZXEoMCkge30KICAgICAgaW5saW5lIE9iamVjdElkTGlzdF92YXIo
VCogcykgOiBwZF9zZXEocykge30KICAgICAgaW5saW5lIE9iamVjdElkTGlzdF92YXIoY29uc3Qg
VF92YXImIHN2KSB7CiAgICAgICAgaWYoIHN2LnBkX3NlcSApIHsKICAgICAgICAgIHBkX3NlcSA9
IG5ldyBUOwogICAgICAgICAgKnBkX3NlcSA9ICpzdi5wZF9zZXE7CiAgICAgICAgfSBlbHNlCiAg
ICAgICAgICBwZF9zZXEgPSAwOwogICAgICB9CiAgICAgIGlubGluZSB+T2JqZWN0SWRMaXN0X3Zh
cigpIHsgaWYoIHBkX3NlcSApIGRlbGV0ZSBwZF9zZXE7IH0KCiAgICAgIGlubGluZSBUX3ZhciYg
b3BlcmF0b3IgPSAoVCogcykgewogICAgICAgIGlmKCBwZF9zZXEgKSBkZWxldGUgcGRfc2VxOwog
ICAgICAgIHBkX3NlcSA9IHM7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CiAgICAgIGlu
bGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoY29uc3QgVF92YXImIHN2KSB7CiAgICAgICAgaWYoIHN2
LnBkX3NlcSApIHsKICAgICAgICAgIGlmKCAhcGRfc2VxICkgcGRfc2VxID0gbmV3IFQ7CiAgICAg
ICAgICAqcGRfc2VxID0gKnN2LnBkX3NlcTsKICAgICAgICB9IGVsc2UgaWYoIHBkX3NlcSApIHsK
ICAgICAgICAgIGRlbGV0ZSBwZF9zZXE7CiAgICAgICAgICBwZF9zZXEgPSAwOwogICAgICAgIH0K
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGlubGluZSBfQ09SQkFfU3RyaW5n
X2VsZW1lbnQgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBpKSB7IHJldHVybiAoKnBkX3NlcSlb
aV07IH0KICAgICAgaW5saW5lIFQqIG9wZXJhdG9yIC0+ICgpIHsgcmV0dXJuIHBkX3NlcTsgfQoK
CgogICAgICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgVCYgKCkgY29uc3QgeyByZXR1cm4gKnBkX3Nl
cTsgfQogICAgICBpbmxpbmUgb3BlcmF0b3IgVCYgKCkgeyByZXR1cm4gKnBkX3NlcTsgfQoKCiAg
ICAgIGlubGluZSBjb25zdCBUJiBpbigpIGNvbnN0IHsgcmV0dXJuICpwZF9zZXE7IH0KICAgICAg
aW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4gKnBkX3NlcTsgfQogICAgICBpbmxpbmUgVComIG91
dCgpIHsgaWYgKHBkX3NlcSkgeyBkZWxldGUgcGRfc2VxOyBwZF9zZXEgPSAwOyB9IHJldHVybiBw
ZF9zZXE7IH0KICAgICAgaW5saW5lIFQqIF9yZXRuKCkgeyBUKiB0bXAgPSBwZF9zZXE7IHBkX3Nl
cSA9IDA7IHJldHVybiB0bXA7IH0KCiAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RJZExpc3Rfb3V0
OwoKICAgIHByaXZhdGU6CiAgICAgIFQqIHBkX3NlcTsKICAgIH07CgogICAgY2xhc3MgT2JqZWN0
SWRMaXN0X291dCB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgT2JqZWN0SWRMaXN0IFQ7CiAg
ICAgIHR5cGVkZWYgT2JqZWN0SWRMaXN0X3ZhciBUX3ZhcjsKCiAgICAgIGlubGluZSBPYmplY3RJ
ZExpc3Rfb3V0KFQqJiBzKSA6IF9kYXRhKHMpIHsgX2RhdGEgPSAwOyB9CiAgICAgIGlubGluZSBP
YmplY3RJZExpc3Rfb3V0KFRfdmFyJiBzdikKICAgICAgICA6IF9kYXRhKHN2LnBkX3NlcSkgeyBz
diA9IChUKikgMDsgfQogICAgICBpbmxpbmUgT2JqZWN0SWRMaXN0X291dChjb25zdCBPYmplY3RJ
ZExpc3Rfb3V0JiBzKSA6IF9kYXRhKHMuX2RhdGEpIHt9CiAgICAgIGlubGluZSBPYmplY3RJZExp
c3Rfb3V0JiBvcGVyYXRvcj0oY29uc3QgT2JqZWN0SWRMaXN0X291dCYgcykgewogICAgICAgIF9k
YXRhID0gcy5fZGF0YTsgcmV0dXJuICp0aGlzOwogICAgICB9CiAgICAgIGlubGluZSBPYmplY3RJ
ZExpc3Rfb3V0JiBvcGVyYXRvcj0oVCogcykgeyBfZGF0YSA9IHM7IHJldHVybiAqdGhpczsgfQog
ICAgICBpbmxpbmUgb3BlcmF0b3IgVComKCkgeyByZXR1cm4gX2RhdGE7IH0KICAgICAgaW5saW5l
IFQqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQogICAgICBpbmxpbmUgVCogb3BlcmF0b3ItPigp
IHsgcmV0dXJuIF9kYXRhOyB9CiAgICAgIGlubGluZSBfQ09SQkFfU3RyaW5nX2VsZW1lbnQgb3Bl
cmF0b3IgW10gKF9DT1JCQV9VTG9uZyBpKSB7CiAgICAgICAgcmV0dXJuICgqX2RhdGEpW2ldOwog
ICAgICB9CiAgICAgIFQqJiBfZGF0YTsKCiAgICBwcml2YXRlOgogICAgICBPYmplY3RJZExpc3Rf
b3V0KCk7CiAgICAgIE9iamVjdElkTGlzdF9vdXQgb3BlcmF0b3I9KGNvbnN0IFRfdmFyJik7CiAg
ICB9OwoKCgoKCiAgICBzdGF0aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICAg
IHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhPYmplY3RfcHRyKTsKICAgIHN0YXRpYyBfcHRyX3R5
cGUgX25pbCgpOwoKICAgIHZpcnR1YWwgY2hhciogb2JqZWN0X3RvX3N0cmluZyhPYmplY3RfcHRy
KSA9IDA7CiAgICB2aXJ0dWFsIE9iamVjdF9wdHIgc3RyaW5nX3RvX29iamVjdChjb25zdCBjaGFy
KikgPSAwOwoKICAgIHZpcnR1YWwgT2JqZWN0SWRMaXN0KiBsaXN0X2luaXRpYWxfc2VydmljZXMo
KSA9IDA7CiAgICB2aXJ0dWFsIE9iamVjdF9wdHIgcmVzb2x2ZV9pbml0aWFsX3JlZmVyZW5jZXMo
Y29uc3QgY2hhciogaWRlbnRpZmllcikgPSAwOwoKICAgIHZpcnR1YWwgQm9vbGVhbiB3b3JrX3Bl
bmRpbmcoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybV93b3JrKCkgPSAwOwogICAgdmly
dHVhbCB2b2lkIHJ1bigpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzaHV0ZG93bihCb29sZWFuIHdh
aXRfZm9yX2NvbXBsZXRpb24pID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgPSAwOwoK
ICAgIGlubGluZSB2b2lkIE5QX2Rlc3Ryb3koKSB7IGRlc3Ryb3koKTsgfQoKCiAgICBCT0FfcHRy
IEJPQV9pbml0KGludCYgYXJnYywgY2hhcioqIGFyZ3YsIGNvbnN0IGNoYXIqIGJvYV9pZGVudGlm
aWVyPTApOwoKICAgIFN0YXR1cyBjcmVhdGVfbGlzdChMb25nLCBOVkxpc3Rfb3V0KTsKICAgIFN0
YXR1cyBjcmVhdGVfb3BlcmF0aW9uX2xpc3QoX29ianJlZl9PcGVyYXRpb25EZWYqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOVkxpc3Rfb3V0KTsKICAgIFN0YXR1cyBjcmVhdGVf
bmFtZWRfdmFsdWUoTmFtZWRWYWx1ZV9vdXQpOwogICAgU3RhdHVzIGNyZWF0ZV9leGNlcHRpb25f
bGlzdChFeGNlcHRpb25MaXN0X291dCk7CiAgICBTdGF0dXMgY3JlYXRlX2NvbnRleHRfbGlzdChD
b250ZXh0TGlzdF9vdXQpOwoKICAgIFN0YXR1cyBnZXRfZGVmYXVsdF9jb250ZXh0KENvbnRleHRf
b3V0IGNvbnRleHRfb3V0KTsKCgoKICAgIFN0YXR1cyBjcmVhdGVfZW52aXJvbm1lbnQoRW52aXJv
bm1lbnRfb3V0KTsKCiAgICBTdGF0dXMgc2VuZF9tdWx0aXBsZV9yZXF1ZXN0c19vbmV3YXkoY29u
c3QgUmVxdWVzdFNlcSYpOwogICAgU3RhdHVzIHNlbmRfbXVsdGlwbGVfcmVxdWVzdHNfZGVmZXJy
ZWQoY29uc3QgUmVxdWVzdFNlcSYpOwogICAgQm9vbGVhbiBwb2xsX25leHRfcmVzcG9uc2UoKTsK
ICAgIFN0YXR1cyBnZXRfbmV4dF9yZXNwb25zZShSZXF1ZXN0X291dCk7CgogICAgVHlwZUNvZGVf
cHRyIGNyZWF0ZV9zdHJ1Y3RfdGMoY29uc3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJ1Y3RNZW1iZXJTZXEmIG1l
bWJlcnMpOwogICAgVHlwZUNvZGVfcHRyIGNyZWF0ZV91bmlvbl90Yyhjb25zdCBjaGFyKiBpZCwg
Y29uc3QgY2hhciogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUNv
ZGVfcHRyIGRpc2NyaW1pbmF0b3JfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVW5pb25NZW1iZXJTZXEmIG1lbWJlcnMpOwogICAgVHlwZUNvZGVfcHRyIGNyZWF0
ZV9lbnVtX3RjKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEVudW1NZW1iZXJTZXEmIG1lbWJlcnMpOwogICAgVHlw
ZUNvZGVfcHRyIGNyZWF0ZV9hbGlhc190Yyhjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUNvZGVfcHRyIG9yaWdpbmFs
X3R5cGUpOwogICAgVHlwZUNvZGVfcHRyIGNyZWF0ZV9leGNlcHRpb25fdGMoY29uc3QgY2hhciog
aWQsIGNvbnN0IGNoYXIqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJ1Y3RNZW1iZXJTZXEmIG1lbWJlcnMpOwogICAgVHlwZUNvZGVfcHRyIGNyZWF0
ZV9pbnRlcmZhY2VfdGMoY29uc3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5hbWUpOwogICAgVHlw
ZUNvZGVfcHRyIGNyZWF0ZV9zdHJpbmdfdGMoVUxvbmcgYm91bmQpOwogICAgVHlwZUNvZGVfcHRy
IGNyZWF0ZV9zZXF1ZW5jZV90YyhVTG9uZyBib3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHlwZUNvZGVfcHRyIGVsZW1lbnRfdHlwZSk7CiAgICBUeXBlQ29kZV9wdHIg
Y3JlYXRlX2FycmF5X3RjKFVMb25nIGxlbmd0aCwgVHlwZUNvZGVfcHRyIGV0eXBlKTsKICAgIFR5
cGVDb2RlX3B0ciBjcmVhdGVfcmVjdXJzaXZlX3NlcXVlbmNlX3RjKFVMb25nIGJvdW5kLCBVTG9u
ZyBvZmZzZXQpOwoKCgoKCiAgICBEeW5BbnlfcHRyIGNyZWF0ZV9keW5fYW55KGNvbnN0IEFueSYg
dmFsdWUpOwogICAgRHluQW55X3B0ciBjcmVhdGVfYmFzaWNfZHluX2FueShUeXBlQ29kZV9wdHIg
dGMpOwogICAgRHluU3RydWN0X3B0ciBjcmVhdGVfZHluX3N0cnVjdChUeXBlQ29kZV9wdHIgdGMp
OwogICAgRHluU2VxdWVuY2VfcHRyIGNyZWF0ZV9keW5fc2VxdWVuY2UoVHlwZUNvZGVfcHRyIHRj
KTsKICAgIER5bkFycmF5X3B0ciBjcmVhdGVfZHluX2FycmF5KFR5cGVDb2RlX3B0ciB0Yyk7CiAg
ICBEeW5Vbmlvbl9wdHIgY3JlYXRlX2R5bl91bmlvbihUeXBlQ29kZV9wdHIgdGMpOwogICAgRHlu
RW51bV9wdHIgY3JlYXRlX2R5bl9lbnVtKFR5cGVDb2RlX3B0ciB0Yyk7CgoKCgoKICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwogICAgdmlydHVhbCB+T1JCKCk7CgogIHByb3RlY3Rl
ZDoKICAgIGlubGluZSBPUkIoaW50IG5pbCkgeyBfUFJfc2V0b2JqKChvbW5pT2JqUmVmKikgKG5p
bCA/IDA6MSkpOyB9CgogIHByaXZhdGU6CiAgICBPUkIoY29uc3QgT1JCJik7CiAgICBPUkImIG9w
ZXJhdG9yID0gKGNvbnN0IE9SQiYpOwogIH07CgogIHR5cGVkZWYgY2hhciogT1JCaWQ7CiAgdHlw
ZWRlZiBTdHJpbmdfdmFyIE9SQmlkX3ZhcjsKCiAgICAgICAgICAgICAgICAgICBPUkJfcHRyIE9S
Ql9pbml0KGludCYgYXJnYywgY2hhcioqIGFyZ3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG9yYl9pZGVudGlmaWVyPSIiKTsKCgoKCgoKICAgICAgICAg
ICAgICAgICAgIGlubGluZSBCb29sZWFuIGlzX25pbChFbnZpcm9ubWVudF9wdHIgcCkgewogICAg
aWYgKCFFbnZpcm9ubWVudDo6UFJfaXNfdmFsaWQocCkpCiAgICAgIHJldHVybiAwOwogICAgZWxz
ZQogICAgICByZXR1cm4gKHAgPyBwLT5OUF9pc19uaWwoKSA6CiAgICAgICAgICAgICAgX0NPUkJB
X3VzZV9uaWxfcHRyX2FzX25pbF9wc2V1ZG9fb2JqcmVmKCJFbnZpcm9ubWVudCIpKTsKICB9CiAg
ICAgICAgICAgICAgICAgICBpbmxpbmUgQm9vbGVhbiBpc19uaWwoQ29udGV4dF9wdHIgcCkgewog
ICAgaWYgKCFDb250ZXh0OjpQUl9pc192YWxpZChwKSkKICAgICAgcmV0dXJuIDA7CiAgICBlbHNl
CiAgICAgIHJldHVybiAocCA/IHAtPk5QX2lzX25pbCgpIDoKICAgICAgICAgICAgICBfQ09SQkFf
dXNlX25pbF9wdHJfYXNfbmlsX3BzZXVkb19vYmpyZWYoIkNvbnRleHQiKSk7CiAgfQogICAgICAg
ICAgICAgICAgICAgQm9vbGVhbiBpc19uaWwoUHJpbmNpcGFsX3B0cik7CiAgICAgICAgICAgICAg
ICAgICBpbmxpbmUgQm9vbGVhbiBpc19uaWwoT2JqZWN0X3B0ciBvKSB7CiAgICBpZiggIU9iamVj
dDo6X1BSX2lzX3ZhbGlkKG8pICkgcmV0dXJuIDA7CiAgICBpZiggbyApIHJldHVybiBvLT5fTlBf
aXNfbmlsKCk7CiAgICBlbHNlIHsKCgoKCgoKICAgICAgcmV0dXJuIF9DT1JCQV91c2VfbmlsX3B0
cl9hc19uaWxfb2JqcmVmKCk7CiAgICB9CiAgfQogICAgICAgICAgICAgICAgICAgaW5saW5lIEJv
b2xlYW4gaXNfbmlsKE5hbWVkVmFsdWVfcHRyIHApIHsKICAgIGlmICghTmFtZWRWYWx1ZTo6UFJf
aXNfdmFsaWQocCkpCiAgICAgIHJldHVybiAwOwogICAgZWxzZQogICAgICByZXR1cm4gKHAgPyBw
LT5OUF9pc19uaWwoKSA6CiAgICAgICAgICAgICAgX0NPUkJBX3VzZV9uaWxfcHRyX2FzX25pbF9w
c2V1ZG9fb2JqcmVmKCJOYW1lZFZhbHVlIikpOwogIH0KICAgICAgICAgICAgICAgICAgIGlubGlu
ZSBCb29sZWFuIGlzX25pbChOVkxpc3RfcHRyIHApIHsKICAgIGlmICghTlZMaXN0OjpQUl9pc192
YWxpZChwKSkKICAgICAgcmV0dXJuIDA7CiAgICBlbHNlCiAgICAgIHJldHVybiAocCA/IHAtPk5Q
X2lzX25pbCgpIDoKICAgICAgICAgICAgICBfQ09SQkFfdXNlX25pbF9wdHJfYXNfbmlsX3BzZXVk
b19vYmpyZWYoIk5WTGlzdCIpKTsKICB9CiAgICAgICAgICAgICAgICAgICBpbmxpbmUgQm9vbGVh
biBpc19uaWwoUmVxdWVzdF9wdHIgcCkgewogICAgaWYgKCFSZXF1ZXN0OjpQUl9pc192YWxpZChw
KSkKICAgICAgcmV0dXJuIDA7CiAgICBlbHNlCiAgICAgIHJldHVybiAocCA/IHAtPk5QX2lzX25p
bCgpIDoKICAgICAgICAgICAgICBfQ09SQkFfdXNlX25pbF9wdHJfYXNfbmlsX3BzZXVkb19vYmpy
ZWYoIlJlcXVlc3QiKSk7CiAgfQogICAgICAgICAgICAgICAgICAgaW5saW5lIEJvb2xlYW4gaXNf
bmlsKEV4Y2VwdGlvbkxpc3RfcHRyIHApIHsKICAgIGlmICghRXhjZXB0aW9uTGlzdDo6UFJfaXNf
dmFsaWQocCkpCiAgICAgIHJldHVybiAwOwogICAgZWxzZQogICAgICByZXR1cm4gKHAgPyBwLT5O
UF9pc19uaWwoKSA6CiAgICAgICAgICAgICAgX0NPUkJBX3VzZV9uaWxfcHRyX2FzX25pbF9wc2V1
ZG9fb2JqcmVmKCJFeGNlcHRpb25MaXN0IikpOwogIH0KICAgICAgICAgICAgICAgICAgIGlubGlu
ZSBCb29sZWFuIGlzX25pbChDb250ZXh0TGlzdF9wdHIgcCkgewogICAgaWYgKCFDb250ZXh0TGlz
dDo6UFJfaXNfdmFsaWQocCkpCiAgICAgIHJldHVybiAwOwogICAgZWxzZQogICAgICByZXR1cm4g
KHAgPyBwLT5OUF9pc19uaWwoKSA6CiAgICAgICAgICAgICAgX0NPUkJBX3VzZV9uaWxfcHRyX2Fz
X25pbF9wc2V1ZG9fb2JqcmVmKCJDb250ZXh0TGlzdCIpKTsKICB9CiAgICAgICAgICAgICAgICAg
ICBpbmxpbmUgQm9vbGVhbiBpc19uaWwoVHlwZUNvZGVfcHRyIHApIHsKICAgIGlmICghVHlwZUNv
ZGU6OlBSX2lzX3ZhbGlkKHApKQogICAgICByZXR1cm4gMDsKICAgIGVsc2UKICAgICAgcmV0dXJu
IChwID8gcC0+TlBfaXNfbmlsKCkgOgogICAgICAgICAgICAgIF9DT1JCQV91c2VfbmlsX3B0cl9h
c19uaWxfcHNldWRvX29ianJlZigiVHlwZUNvZGUiKSk7CiAgfQogICAgICAgICAgICAgICAgICAg
aW5saW5lIEJvb2xlYW4gaXNfbmlsKER5bkFueV9wdHIgcCkgewogICAgaWYgKCFEeW5Bbnk6OlBS
X2lzX3ZhbGlkKHApKQogICAgICByZXR1cm4gMDsKICAgIGVsc2UKICAgICAgcmV0dXJuIChwID8g
cC0+TlBfaXNfbmlsKCkgOgogICAgICAgICAgICAgIF9DT1JCQV91c2VfbmlsX3B0cl9hc19uaWxf
cHNldWRvX29ianJlZigiRHluQW55IikpOwogIH0KCgoKCgoKICAgICAgICAgICAgICAgICAgIGlu
bGluZSB2b2lkIHJlbGVhc2UoT2JqZWN0X3B0ciBvKSB7CiAgICBpZiggbyAmJiAhby0+X05QX2lz
X25pbCgpICkgewogICAgICBpZiggby0+X05QX2lzX3BzZXVkbygpICkgby0+X05QX2RlY3JSZWZD
b3VudCgpOwogICAgICBlbHNlIG9tbmk6OnJlbGVhc2VPYmpSZWYoby0+X1BSX2dldG9iaigpKTsK
ICAgIH0KICB9CiAgICAgICAgICAgICAgICAgICB2b2lkIHJlbGVhc2UoRW52aXJvbm1lbnRfcHRy
IHApOwogICAgICAgICAgICAgICAgICAgdm9pZCByZWxlYXNlKENvbnRleHRfcHRyIHApOwogICAg
ICAgICAgICAgICAgICAgdm9pZCByZWxlYXNlKFByaW5jaXBhbF9wdHIpOwogICAgICAgICAgICAg
ICAgICAgdm9pZCByZWxlYXNlKE5hbWVkVmFsdWVfcHRyIHApOwogICAgICAgICAgICAgICAgICAg
dm9pZCByZWxlYXNlKE5WTGlzdF9wdHIgcCk7CiAgICAgICAgICAgICAgICAgICB2b2lkIHJlbGVh
c2UoUmVxdWVzdF9wdHIgcCk7CiAgICAgICAgICAgICAgICAgICB2b2lkIHJlbGVhc2UoRXhjZXB0
aW9uTGlzdF9wdHIgcCk7CiAgICAgICAgICAgICAgICAgICB2b2lkIHJlbGVhc2UoQ29udGV4dExp
c3RfcHRyIHApOwogICAgICAgICAgICAgICAgICAgdm9pZCByZWxlYXNlKFR5cGVDb2RlX3B0ciBv
KTsKICAgICAgICAgICAgICAgICAgIHZvaWQgcmVsZWFzZShEeW5BbnlfcHRyIGQpOwoKCgoKICAg
ICAgICAgICAgICAgICAgIE9iamVjdF9wdHIgVW5NYXJzaGFsT2JqUmVmKGNvbnN0IGNoYXIqIHJl
cG9JZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldEJ1
ZmZlcmVkU3RyZWFtJiBzKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgTWFyc2hhbE9ialJlZihP
YmplY3RfcHRyIG9iaiwgY29uc3QgY2hhciAqcmVwb0lkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCByZXBvSWRTaXplLCBOZXRCdWZmZXJlZFN0cmVhbSYgcyk7
CiAgICAgICAgICAgICAgICAgICBzaXplX3QgQWxpZ25lZE9ialJlZihPYmplY3RfcHRyIG9iaiwg
Y29uc3QgY2hhciAqcmVwb0lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IHJlcG9JZFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgaW5pdGlhbG9mZnNldCk7CiAgICAgICAgICAgICAgICAgICBPYmplY3RfcHRy
IFVuTWFyc2hhbE9ialJlZihjb25zdCBjaGFyICpyZXBvSWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1CdWZmZXJlZFN0cmVhbSYgcyk7CiAgICAgICAg
ICAgICAgICAgICB2b2lkIE1hcnNoYWxPYmpSZWYoT2JqZWN0X3B0ciBvYmosIGNvbnN0IGNoYXIq
IHJlcG9JZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVw
b0lkU2l6ZSwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpOwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L29tbmlPUkIzL0NPUkJBX3ZhcnR5cGVzLmgiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUv
b21uaU9SQjMvQ09SQkFfdmFydHlwZXMuaCIgMwpjbGFzcyBPYmplY3RfTWVtYmVyOwpjbGFzcyBP
YmplY3RfRWxlbWVudDsKY2xhc3MgT2JqZWN0X0lOT1VUX2FyZzsKY2xhc3MgT2JqZWN0X09VVF9h
cmc7CmNsYXNzIE9iamVjdF90Y0Rlc2NfYXJnOwoKY2xhc3MgT2JqZWN0X3ZhciB7CnB1YmxpYzoK
ICB0eXBlZGVmIE9iamVjdCBUOwogIHR5cGVkZWYgT2JqZWN0X3B0ciBUX3B0cjsKICB0eXBlZGVm
IE9iamVjdF92YXIgVF92YXI7CiAgdHlwZWRlZiBPYmplY3RfTWVtYmVyIFRfbWVtYmVyOwogIHR5
cGVkZWYgT2JqZWN0X0VsZW1lbnQgVF9lbGVtZW50OwoKICBpbmxpbmUgT2JqZWN0X3ZhcigpIDog
cGRfcmVmKFQ6Ol9uaWwoKSkge30KICBpbmxpbmUgT2JqZWN0X3ZhcihUX3B0ciBwKSB7IHBkX3Jl
ZiA9IHA7IH0KICBpbmxpbmUgT2JqZWN0X3Zhcihjb25zdCBUX3ZhciYgcCkgOiBwZF9yZWYoVDo6
X2R1cGxpY2F0ZShwLnBkX3JlZikpIHt9CiAgaW5saW5lIE9iamVjdF92YXIoY29uc3QgVF9tZW1i
ZXImIHApOwogIGlubGluZSBPYmplY3RfdmFyKGNvbnN0IFRfZWxlbWVudCYgcCk7CiAgaW5saW5l
IH5PYmplY3RfdmFyKCkgeyByZWxlYXNlKHBkX3JlZik7IH0KCiAgaW5saW5lIFRfdmFyJiBvcGVy
YXRvcj0gKFRfcHRyIHApIHsKICAgIHJlbGVhc2UocGRfcmVmKTsKICAgIHBkX3JlZiA9IHA7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIGlubGluZSBUX3ZhciYgb3BlcmF0b3I9IChjb25zdCBUX3Zh
ciYgcCkgewogICAgaWYoIHBkX3JlZiAhPSBwLnBkX3JlZiApIHsKICAgICAgcmVsZWFzZShwZF9y
ZWYpOwogICAgICBwZF9yZWYgPSBUOjpfZHVwbGljYXRlKHAucGRfcmVmKTsKICAgIH0KICAgIHJl
dHVybiAqdGhpczsKICB9CiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvcj0gKGNvbnN0IFRfbWVtYmVy
JiBwKTsKCiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvcj0gKGNvbnN0IFRfZWxlbWVudCYgcCk7Cgog
IGlubGluZSBUX3B0ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gcGRfcmVmOyB9CiAgaW5s
aW5lIG9wZXJhdG9yIFRfcHRyKCkgY29uc3QgeyByZXR1cm4gcGRfcmVmOyB9CgogIGlubGluZSBU
X3B0ciBpbigpIGNvbnN0IHsgcmV0dXJuIHBkX3JlZjsgfQogIGlubGluZSBUX3B0ciYgaW5vdXQo
KSB7IHJldHVybiBwZF9yZWY7IH0KICBpbmxpbmUgVF9wdHImIG91dCgpIHsKICAgIGlmKCAhaXNf
bmlsKHBkX3JlZikgKSB7CiAgICAgIHJlbGVhc2UocGRfcmVmKTsKICAgICAgcGRfcmVmID0gVDo6
X25pbCgpOwogICAgfQogICAgcmV0dXJuIHBkX3JlZjsKICB9CiAgaW5saW5lIFRfcHRyIF9yZXRu
KCkgewogICAgVF9wdHIgdG1wID0gcGRfcmVmOwogICAgcGRfcmVmID0gVDo6X25pbCgpOwogICAg
cmV0dXJuIHRtcDsKICB9CgogIGZyaWVuZCBjbGFzcyBPYmplY3RfTWVtYmVyOwogIGZyaWVuZCBj
bGFzcyBPYmplY3RfSU5PVVRfYXJnOwogIGZyaWVuZCBjbGFzcyBPYmplY3RfT1VUX2FyZzsKICBm
cmllbmQgY2xhc3MgT2JqZWN0X3RjRGVzY19hcmc7Cgpwcml2YXRlOgogIFRfcHRyIHBkX3JlZjsK
fTsKCgoKCgpjbGFzcyBPYmplY3RfTWVtYmVyIHsKcHVibGljOgogIHR5cGVkZWYgT2JqZWN0IFQ7
CiAgdHlwZWRlZiBPYmplY3RfcHRyIFRfcHRyOwogIHR5cGVkZWYgT2JqZWN0X3ZhciBUX3ZhcjsK
ICB0eXBlZGVmIE9iamVjdF9NZW1iZXIgVF9tZW1iZXI7CiAgdHlwZWRlZiBPYmplY3RfRWxlbWVu
dCBUX2VsZW1lbnQ7CgogIGlubGluZSBPYmplY3RfTWVtYmVyKCkgOiBfcHRyKFQ6Ol9uaWwoKSkg
e30KICBpbmxpbmUgT2JqZWN0X01lbWJlcihjb25zdCBUX21lbWJlciYgcCkgewogICAgX3B0ciA9
IFQ6Ol9kdXBsaWNhdGUocC5fcHRyKTsKICB9CiAgaW5saW5lIH5PYmplY3RfTWVtYmVyKCkgewog
ICAgQ09SQkE6OnJlbGVhc2UoX3B0cik7CiAgfQoKICBpbmxpbmUgVF9tZW1iZXImIG9wZXJhdG9y
PSAoVF9wdHIgcCkgewogICAgQ09SQkE6OnJlbGVhc2UoX3B0cik7CiAgICBfcHRyID0gcDsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIFRfbWVtYmVyJiBvcGVyYXRvcj0gKGNvbnN0IFRf
bWVtYmVyJiBwKSB7CiAgICBpZiggJnAgIT0gdGhpcyApIHsKICAgICAgQ09SQkE6OnJlbGVhc2Uo
X3B0cik7CiAgICAgIF9wdHIgPSBUOjpfZHVwbGljYXRlKHAuX3B0cik7CiAgICB9CiAgICByZXR1
cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF9tZW1iZXImIG9wZXJhdG9yPSAoY29uc3QgVF92YXIm
IHApIHsKICAgIENPUkJBOjpyZWxlYXNlKF9wdHIpOwogICAgX3B0ciA9IFQ6Ol9kdXBsaWNhdGUo
cCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF9tZW1iZXImIG9wZXJhdG9yPSAo
Y29uc3QgVF9lbGVtZW50JiBwKTsKCiAgaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6
ZV90IGluaXRpYWxvZmZzZXQpIGNvbnN0IHsKICAgIHJldHVybiBDT1JCQTo6T2JqZWN0OjpfTlBf
YWxpZ25lZFNpemUoX3B0cixpbml0aWFsb2Zmc2V0KTsKICB9CiAgaW5saW5lIHZvaWQgb3BlcmF0
b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdCB7CiAgICBDT1JCQTo6T2JqZWN0Ojpf
bWFyc2hhbE9ialJlZihfcHRyLHMpOwogIH0KICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoTmV0
QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIE9iamVjdF9wdHIgX3Jlc3VsdCA9IENPUkJBOjpPYmpl
Y3Q6Ol91bm1hcnNoYWxPYmpSZWYocyk7CiAgICBDT1JCQTo6cmVsZWFzZShfcHRyKTsKICAgIF9w
dHIgPSBfcmVzdWx0OwogIH0KICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRT
dHJlYW0mIHMpIGNvbnN0IHsKICAgIENPUkJBOjpPYmplY3Q6Ol9tYXJzaGFsT2JqUmVmKF9wdHIs
cyk7CiAgfQogIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSYgcykg
ewogICAgT2JqZWN0X3B0ciBfcmVzdWx0ID0gQ09SQkE6Ok9iamVjdDo6X3VubWFyc2hhbE9ialJl
ZihzKTsKICAgIENPUkJBOjpyZWxlYXNlKF9wdHIpOwogICAgX3B0ciA9IF9yZXN1bHQ7CiAgfQoK
ICBpbmxpbmUgT2JqZWN0X3B0ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX3B0cjsgfQog
IGlubGluZSBvcGVyYXRvciBPYmplY3RfcHRyICgpIGNvbnN0IHsgcmV0dXJuIF9wdHI7IH0KCiAg
aW5saW5lIE9iamVjdF9wdHIgaW4oKSBjb25zdCB7IHJldHVybiBfcHRyOyB9CiAgaW5saW5lIE9i
amVjdF9wdHImIGlub3V0KCkgeyByZXR1cm4gX3B0cjsgfQogIGlubGluZSBPYmplY3RfcHRyJiBv
dXQoKSB7CiAgICBDT1JCQTo6cmVsZWFzZShfcHRyKTsKICAgIF9wdHIgPSBDT1JCQTo6T2JqZWN0
OjpfbmlsKCk7CiAgICByZXR1cm4gX3B0cjsKICB9CiAgaW5saW5lIE9iamVjdF9wdHIgX3JldG4o
KSB7CiAgICBPYmplY3RfcHRyIHRtcDsKICAgIHRtcCA9IF9wdHI7CiAgICBfcHRyID0gQ09SQkE6
Ok9iamVjdDo6X25pbCgpOwogICAgcmV0dXJuIHRtcDsKICB9CgogIE9iamVjdF9wdHIgX3B0cjsK
fTsKCgoKCgpjbGFzcyBPYmplY3RfRWxlbWVudCB7CnB1YmxpYzoKICB0eXBlZGVmIE9iamVjdCBU
OwogIHR5cGVkZWYgT2JqZWN0X3B0ciBUX3B0cjsKICB0eXBlZGVmIE9iamVjdF92YXIgVF92YXI7
CiAgdHlwZWRlZiBPYmplY3RfTWVtYmVyIFRfbWVtYmVyOwogIHR5cGVkZWYgT2JqZWN0X0VsZW1l
bnQgVF9lbGVtZW50OwoKICBpbmxpbmUgT2JqZWN0X0VsZW1lbnQoVF9wdHImIHAsIF9DT1JCQV9C
b29sZWFuIHJlbCkKICAgIDogcGRfcmVsKHJlbCksIHBkX2RhdGEocCkge30KCiAgaW5saW5lIE9i
amVjdF9FbGVtZW50KGNvbnN0IFRfZWxlbWVudCYgcCkKICAgIDogcGRfcmVsKHAucGRfcmVsKSwg
cGRfZGF0YShwLnBkX2RhdGEpIHt9CgogIGlubGluZSB+T2JqZWN0X0VsZW1lbnQoKSB7CgogIH0K
CiAgaW5saW5lIFRfZWxlbWVudCYgb3BlcmF0b3I9IChUX3B0ciBwKSB7CiAgICBpZiggcGRfcmVs
ICkgQ09SQkE6OnJlbGVhc2UocGRfZGF0YSk7CiAgICBwZF9kYXRhID0gcDsKICAgIHJldHVybiAq
dGhpczsKICB9CgogIGlubGluZSBUX2VsZW1lbnQmIG9wZXJhdG9yPSAoY29uc3QgVF9lbGVtZW50
JiBwKSB7CiAgICBpZiggcGRfcmVsICkgewogICAgICBDT1JCQTo6cmVsZWFzZShwZF9kYXRhKTsK
ICAgICAgVDo6X2R1cGxpY2F0ZShwLnBkX2RhdGEpOwogICAgICBwZF9kYXRhID0gcC5wZF9kYXRh
OwogICAgfQogICAgZWxzZQogICAgICBwZF9kYXRhID0gcC5wZF9kYXRhOwogICAgcmV0dXJuICp0
aGlzOwogIH0KCiAgaW5saW5lIFRfZWxlbWVudCYgb3BlcmF0b3I9IChjb25zdCBUX21lbWJlciYg
cCkgewogICAgaWYoIHBkX3JlbCApIHsKICAgICAgQ09SQkE6OnJlbGVhc2UocGRfZGF0YSk7CiAg
ICAgIFQ6Ol9kdXBsaWNhdGUocCk7CiAgICB9CiAgICBwZF9kYXRhID0gKFRfcHRyKSBwOwogICAg
cmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfZWxlbWVudCYgb3BlcmF0b3I9IChjb25zdCBU
X3ZhciYgcCkgewogICAgaWYoIHBkX3JlbCApIHsKICAgICAgQ09SQkE6OnJlbGVhc2UocGRfZGF0
YSk7CiAgICAgIFQ6Ol9kdXBsaWNhdGUocCk7CiAgICB9CiAgICBwZF9kYXRhID0gKFRfcHRyKXA7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF9wdHIgb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIHBkX2RhdGE7IH0KICBpbmxpbmUgb3BlcmF0b3IgVF9wdHIgKCkgY29uc3QgeyBy
ZXR1cm4gcGRfZGF0YTsgfQoKICBpbmxpbmUgVF9wdHIgaW4oKSBjb25zdCB7IHJldHVybiBwZF9k
YXRhOyB9CiAgaW5saW5lIFRfcHRyJiBpbm91dCgpIHsgcmV0dXJuIHBkX2RhdGE7IH0KICBpbmxp
bmUgVF9wdHImIG91dCgpIHsKICAgIGlmIChwZF9yZWwpIHsKICAgICAgQ09SQkE6OnJlbGVhc2Uo
cGRfZGF0YSk7CiAgICB9CiAgICBwZF9kYXRhID0gVDo6X25pbCgpOwogICAgcmV0dXJuIHBkX2Rh
dGE7CiAgfQoKICBpbmxpbmUgVF9wdHIgX3JldG4oKSB7CiAgICBUX3B0ciB0bXAgPSBwZF9kYXRh
OwogICAgaWYgKCFwZF9yZWwpIHsgVDo6X2R1cGxpY2F0ZShwZF9kYXRhKTsgfQogICAgcGRfZGF0
YSA9IFQ6Ol9uaWwoKTsKICAgIHJldHVybiB0bXA7CiAgfQoKICBpbmxpbmUgVF9wdHImIF9OUF9y
ZWYoKSBjb25zdCB7cmV0dXJuIHBkX2RhdGE7fQogIGlubGluZSBfQ09SQkFfQm9vbGVhbiBfTlBf
cmVsZWFzZSgpIGNvbnN0IHtyZXR1cm4gcGRfcmVsO30KCiAgX0NPUkJBX0Jvb2xlYW4gcGRfcmVs
OwogIFRfcHRyJiBwZF9kYXRhOwp9OwoKCgoKCmNsYXNzIE9iamVjdF9JTk9VVF9hcmcgewpwdWJs
aWM6CiAgaW5saW5lIE9iamVjdF9JTk9VVF9hcmcoT2JqZWN0X3B0ciYgcCkgOiBfZGF0YShwKSB7
fQogIGlubGluZSBPYmplY3RfSU5PVVRfYXJnKE9iamVjdF92YXImIHApIDogX2RhdGEocC5wZF9y
ZWYpIHt9CiAgaW5saW5lIE9iamVjdF9JTk9VVF9hcmcoT2JqZWN0X01lbWJlciYgcCkgOiBfZGF0
YShwLl9wdHIpIHt9CiAgaW5saW5lIE9iamVjdF9JTk9VVF9hcmcoT2JqZWN0X0VsZW1lbnQmIHAp
IDogX2RhdGEocC5fTlBfcmVmKCkpIHsKCgoKCgoKICAgIGlmKCAhcC5fTlBfcmVsZWFzZSgpICkK
ICAgICAgT2JqZWN0OjpfZHVwbGljYXRlKHAuX05QX3JlZigpKTsKICB9CiAgaW5saW5lIH5PYmpl
Y3RfSU5PVVRfYXJnKCkge30KCiAgaW5saW5lIG9wZXJhdG9yIE9iamVjdF9wdHImKCkgeyByZXR1
cm4gX2RhdGE7IH0KCiAgT2JqZWN0X3B0ciYgX2RhdGE7Cgpwcml2YXRlOgogIE9iamVjdF9JTk9V
VF9hcmcoKTsKfTsKCgoKCgpjbGFzcyBPYmplY3RfT1VUX2FyZyB7CnB1YmxpYzoKICB0eXBlZGVm
IE9iamVjdCBUOwogIHR5cGVkZWYgT2JqZWN0X3B0ciBUX3B0cjsKICB0eXBlZGVmIE9iamVjdF92
YXIgVF92YXI7CiAgdHlwZWRlZiBPYmplY3RfTWVtYmVyIFRfbWVtYmVyOwogIHR5cGVkZWYgT2Jq
ZWN0X0VsZW1lbnQgVF9lbGVtZW50OwogIHR5cGVkZWYgT2JqZWN0X09VVF9hcmcgVF9vdXQ7Cgog
IGlubGluZSBPYmplY3RfT1VUX2FyZyhUX3B0ciYgcCkgOiBfZGF0YShwKSB7IF9kYXRhID0gVDo6
X25pbCgpOyB9CiAgaW5saW5lIE9iamVjdF9PVVRfYXJnKFRfdmFyJiBwKSA6IF9kYXRhKHAucGRf
cmVmKSB7CiAgICBwID0gVDo6X25pbCgpOwogIH0KICBpbmxpbmUgT2JqZWN0X09VVF9hcmcoVF9t
ZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSB7CiAgICBwID0gVDo6X25pbCgpOwogIH0KICBpbmxp
bmUgT2JqZWN0X09VVF9hcmcoVF9lbGVtZW50JiBwKSA6IF9kYXRhKHAuX05QX3JlZigpKSB7CiAg
ICBwID0gVDo6X25pbCgpOwogIH0KICBpbmxpbmUgT2JqZWN0X09VVF9hcmcoY29uc3QgVF9vdXQm
IHApIDogX2RhdGEocC5fZGF0YSkge30KICBpbmxpbmUgfk9iamVjdF9PVVRfYXJnKCkge30KCiAg
aW5saW5lIE9iamVjdF9PVVRfYXJnJiBvcGVyYXRvcj0oY29uc3QgVF9vdXQmIHApIHsKICAgIF9k
YXRhID0gcC5fZGF0YTsgcmV0dXJuICp0aGlzOyB9CiAgaW5saW5lIE9iamVjdF9PVVRfYXJnJiBv
cGVyYXRvcj0oVF9wdHIgcCkgeyBfZGF0YSA9IHA7IHJldHVybiAqdGhpczsgfQoKICBpbmxpbmUg
b3BlcmF0b3IgVF9wdHImKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVF9wdHImIHB0cigp
IHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFRfcHRyIG9wZXJhdG9yLT4oKSB7IHJldHVybiBf
ZGF0YTsgfQoKICBUX3B0ciYgX2RhdGE7Cgpwcml2YXRlOgogIE9iamVjdF9PVVRfYXJnKCk7CiAg
VF9vdXQmIG9wZXJhdG9yPShjb25zdCBUX21lbWJlciYgcCk7CiAgVF9vdXQmIG9wZXJhdG9yPShj
b25zdCBUX2VsZW1lbnQmIHApOwogIFRfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF92YXImIHApOwoK
fTsKCgp0eXBlZGVmIE9iamVjdF9PVVRfYXJnIE9iamVjdF9vdXQ7CgoKCgoKY2xhc3MgT2JqZWN0
X3RjRGVzY19hcmcgewpwdWJsaWM6CgoKCgoKCiAgdHlwZWRlZiBPYmplY3RfTWVtYmVyIFRfbWVt
YmVyOwogIHR5cGVkZWYgT2JqZWN0X0VsZW1lbnQgVF9lbGVtZW50OwogIHR5cGVkZWYgT2JqZWN0
X3ZhciBUX3ZhcjsKICBpbmxpbmUgT2JqZWN0X3RjRGVzY19hcmcoVF92YXImIHApIDogX2RhdGEo
cC5wZF9yZWYpLCBfcmVsKDEpIHt9CiAgaW5saW5lIE9iamVjdF90Y0Rlc2NfYXJnKFRfbWVtYmVy
JiBwKSA6IF9kYXRhKHAuX3B0ciksIF9yZWwoMSkge30KICBpbmxpbmUgT2JqZWN0X3RjRGVzY19h
cmcoVF9lbGVtZW50IHApCiAgICA6IF9kYXRhKHAuX05QX3JlZigpKSwgX3JlbChwLl9OUF9yZWxl
YXNlKCkpIHt9CiAgaW5saW5lIH5PYmplY3RfdGNEZXNjX2FyZygpIHt9CgogIE9iamVjdF9wdHIm
IF9kYXRhOwogIF9DT1JCQV9Cb29sZWFuIF9yZWw7Cgpwcml2YXRlOgogIE9iamVjdF90Y0Rlc2Nf
YXJnKCk7Cn07CgoKCgoKY2xhc3MgVHlwZUNvZGVfSU5PVVRfYXJnOwpjbGFzcyBUeXBlQ29kZV9P
VVRfYXJnOwoKY2xhc3MgVHlwZUNvZGVfdmFyIHsKcHVibGljOgogIHR5cGVkZWYgVHlwZUNvZGVf
cHRyIFRfcHRyOwogIHR5cGVkZWYgVHlwZUNvZGVfdmFyIFRfdmFyOwogIHR5cGVkZWYgVHlwZUNv
ZGVfbWVtYmVyIFRfbWVtYmVyOwoKICBpbmxpbmUgVHlwZUNvZGVfdmFyKCkgOiBwZF9yZWYoVHlw
ZUNvZGU6Ol9uaWwoKSkge30KICBpbmxpbmUgVHlwZUNvZGVfdmFyKFRfcHRyIHApIDogcGRfcmVm
KHApIHt9CiAgaW5saW5lIFR5cGVDb2RlX3Zhcihjb25zdCBUX3ZhciYgcCkgewogICAgcGRfcmVm
ID0gVHlwZUNvZGU6Ol9kdXBsaWNhdGUocC5wZF9yZWYpOwogIH0KICBUeXBlQ29kZV92YXIoY29u
c3QgVHlwZUNvZGVfbWVtYmVyJiBwKSB7CiAgICBwZF9yZWYgPSBUeXBlQ29kZTo6X2R1cGxpY2F0
ZShwLl9wdHIpOwogIH0KICB+VHlwZUNvZGVfdmFyKCkgeyByZWxlYXNlKHBkX3JlZik7IH0KCiAg
aW5saW5lIFRfdmFyJiBvcGVyYXRvcj0gKFRfcHRyIHApIHsKICAgIHJlbGVhc2UocGRfcmVmKTsK
ICAgIHBkX3JlZiA9IHA7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF92YXImIG9w
ZXJhdG9yPSAoY29uc3QgVF92YXImIHApIHsKICAgIGlmKCBwZF9yZWYgIT0gcC5wZF9yZWYgKSB7
CiAgICAgIHJlbGVhc2UocGRfcmVmKTsKICAgICAgcGRfcmVmID0gVHlwZUNvZGU6Ol9kdXBsaWNh
dGUocC5wZF9yZWYpOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfdmFy
JiBvcGVyYXRvcj0oY29uc3QgVHlwZUNvZGVfbWVtYmVyJiBwKSB7CiAgICByZWxlYXNlKHBkX3Jl
Zik7CiAgICBwZF9yZWYgPSBUeXBlQ29kZTo6X2R1cGxpY2F0ZShwLl9wdHIpOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KCiAgVF9wdHIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHBkX3JlZjsg
fQogIG9wZXJhdG9yIFRfcHRyICgpIGNvbnN0IHsgcmV0dXJuIHBkX3JlZjsgfQoKICBUX3B0ciBp
bigpIGNvbnN0IHsgcmV0dXJuIHBkX3JlZjsgfQogIFRfcHRyJiBpbm91dCgpIHsgcmV0dXJuIHBk
X3JlZjsgfQogIFRfcHRyJiBvdXQoKSB7CiAgICByZWxlYXNlKHBkX3JlZik7CiAgICBwZF9yZWYg
PSBUeXBlQ29kZTo6X25pbCgpOwogICAgcmV0dXJuIHBkX3JlZjsKICB9CiAgVF9wdHIgX3JldG4o
KSB7CiAgICBUX3B0ciB0bXAgPSBwZF9yZWY7CiAgICBwZF9yZWYgPSBUeXBlQ29kZTo6X25pbCgp
OwogICAgcmV0dXJuIHRtcDsKICB9CgogIGZyaWVuZCBjbGFzcyBUeXBlQ29kZV9tZW1iZXI7CiAg
ZnJpZW5kIGNsYXNzIFR5cGVDb2RlX0lOT1VUX2FyZzsKICBmcmllbmQgY2xhc3MgVHlwZUNvZGVf
T1VUX2FyZzsKCnByaXZhdGU6CiAgVF9wdHIgcGRfcmVmOwp9OwoKCgoKCmNsYXNzIFR5cGVDb2Rl
X0lOT1VUX2FyZyB7CnB1YmxpYzoKICBpbmxpbmUgVHlwZUNvZGVfSU5PVVRfYXJnKFR5cGVDb2Rl
X3B0ciYgcCkgOiBfZGF0YShwKSB7IH0KICBpbmxpbmUgVHlwZUNvZGVfSU5PVVRfYXJnKFR5cGVD
b2RlX3ZhciYgcCkgOiBfZGF0YShwLnBkX3JlZikgeyB9CiAgaW5saW5lIFR5cGVDb2RlX0lOT1VU
X2FyZyhUeXBlQ29kZV9tZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSB7IH0KICBpbmxpbmUgflR5
cGVDb2RlX0lOT1VUX2FyZygpIHt9CgogIGlubGluZSBvcGVyYXRvciBUeXBlQ29kZV9wdHImKCkg
eyByZXR1cm4gX2RhdGE7IH0KCiAgVHlwZUNvZGVfcHRyJiBfZGF0YTsKCnByaXZhdGU6CiAgVHlw
ZUNvZGVfSU5PVVRfYXJnKCk7Cn07CgoKCgoKY2xhc3MgVHlwZUNvZGVfT1VUX2FyZyB7CnB1Ymxp
YzoKICB0eXBlZGVmIFR5cGVDb2RlIFQ7CiAgdHlwZWRlZiBUeXBlQ29kZV9wdHIgVF9wdHI7CiAg
dHlwZWRlZiBUeXBlQ29kZV92YXIgVF92YXI7CiAgdHlwZWRlZiBUeXBlQ29kZV9tZW1iZXIgVF9t
ZW1iZXI7CgogIFR5cGVDb2RlX09VVF9hcmcoVF9wdHImIHApIDogX2RhdGEocCkgeyBfZGF0YSA9
IFQ6Ol9uaWwoKTsgfQogIFR5cGVDb2RlX09VVF9hcmcoVF92YXImIHApIDogX2RhdGEocC5wZF9y
ZWYpIHsKICAgIHAgPSBUOjpfbmlsKCk7CiAgfQogIGlubGluZSBUeXBlQ29kZV9PVVRfYXJnKFRf
bWVtYmVyJiBwKSA6IF9kYXRhKHAuX3B0cikgewogICAgcCA9IFQ6Ol9uaWwoKTsKICB9CiAgaW5s
aW5lIH5UeXBlQ29kZV9PVVRfYXJnKCkge30KCiAgaW5saW5lIFR5cGVDb2RlX09VVF9hcmcmIG9w
ZXJhdG9yPShUX3B0ciBwKSB7IF9kYXRhID0gcDsgcmV0dXJuICp0aGlzOyB9CiAgaW5saW5lIFR5
cGVDb2RlX09VVF9hcmcmIG9wZXJhdG9yPShjb25zdCBUX21lbWJlciYgcCkgewogICAgX2RhdGEg
PSBUOjpfZHVwbGljYXRlKHApOyByZXR1cm4gKnRoaXM7CiAgfQogIGlubGluZSBvcGVyYXRvciBU
X3B0ciYoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBUX3B0ciYgcHRyKCkgeyByZXR1cm4g
X2RhdGE7IH0KICBpbmxpbmUgVF9wdHIgb3BlcmF0b3ItPigpIHsgcmV0dXJuIF9kYXRhOyB9Cgog
IFRfcHRyJiBfZGF0YTsKCnByaXZhdGU6CiAgVHlwZUNvZGVfT1VUX2FyZygpOwp9OwoKCnR5cGVk
ZWYgVHlwZUNvZGVfT1VUX2FyZyBUeXBlQ29kZV9vdXQ7CgoKCgoKY2xhc3MgT1JCX3ZhciB7CnB1
YmxpYzoKICB0eXBlZGVmIE9SQiBUOwogIHR5cGVkZWYgT1JCX3B0ciBUX3B0cjsKICB0eXBlZGVm
IE9SQl92YXIgVF92YXI7CgogIGlubGluZSBPUkJfdmFyKCkgOiBwZF9yZWYoVDo6X25pbCgpKSB7
fQogIGlubGluZSBPUkJfdmFyKFRfcHRyIHApIDogcGRfcmVmKHApIHt9CiAgaW5saW5lIE9SQl92
YXIoY29uc3QgVF92YXImIHApIDogcGRfcmVmKFQ6Ol9kdXBsaWNhdGUocC5wZF9yZWYpKSB7fQog
IGlubGluZSB+T1JCX3ZhcigpIHsgcmVsZWFzZShwZF9yZWYpOyB9CgogIGlubGluZSBUX3ZhciYg
b3BlcmF0b3I9IChUX3B0ciBwKSB7CiAgICByZWxlYXNlKHBkX3JlZik7CiAgICBwZF9yZWYgPSBw
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJhdG9yPSAoY29uc3Qg
VF92YXImIHApIHsKICAgIGlmKCBwZF9yZWYgIT0gcC5wZF9yZWYgKSB7CiAgICAgIHJlbGVhc2Uo
cGRfcmVmKTsKICAgICAgcGRfcmVmID0gVDo6X2R1cGxpY2F0ZShwLnBkX3JlZik7CiAgICB9CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF9wdHIgb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIHBkX3JlZjsgfQogIGlubGluZSBvcGVyYXRvciBUX3B0cigpIGNvbnN0IHsgcmV0dXJu
IHBkX3JlZjsgfQoKICBpbmxpbmUgVF9wdHIgaW4oKSBjb25zdCB7IHJldHVybiBwZF9yZWY7IH0K
ICBpbmxpbmUgVF9wdHImIGlub3V0KCkgeyByZXR1cm4gcGRfcmVmOyB9CiAgaW5saW5lIFRfcHRy
JiBvdXQoKSB7CiAgICBpZiggIWlzX25pbChwZF9yZWYpICkgewogICAgICByZWxlYXNlKHBkX3Jl
Zik7CiAgICAgIHBkX3JlZiA9IFQ6Ol9uaWwoKTsKICAgIH0KICAgIHJldHVybiBwZF9yZWY7CiAg
fQogIGlubGluZSBUX3B0ciBfcmV0bigpIHsKICAgIFRfcHRyIHRtcCA9IHBkX3JlZjsKICAgIHBk
X3JlZiA9IFQ6Ol9uaWwoKTsKICAgIHJldHVybiB0bXA7CiAgfQoKcHJpdmF0ZToKICBUX3B0ciBw
ZF9yZWY7Cn07CgoKCgoKY2xhc3MgQk9BX3ZhciB7CnB1YmxpYzoKICB0eXBlZGVmIEJPQSBUOwog
IHR5cGVkZWYgQk9BX3B0ciBUX3B0cjsKICB0eXBlZGVmIEJPQV92YXIgVF92YXI7CgogIGlubGlu
ZSBCT0FfdmFyKCkgOiBwZF9yZWYoVDo6X25pbCgpKSB7fQogIGlubGluZSBCT0FfdmFyKFRfcHRy
IHApIDogcGRfcmVmKHApIHt9CiAgaW5saW5lIEJPQV92YXIoY29uc3QgVF92YXImIHApIDogcGRf
cmVmKFQ6Ol9kdXBsaWNhdGUocC5wZF9yZWYpKSB7fQogIGlubGluZSB+Qk9BX3ZhcigpIHsgcmVs
ZWFzZShwZF9yZWYpOyB9CgogIGlubGluZSBUX3ZhciYgb3BlcmF0b3I9IChUX3B0ciBwKSB7CiAg
ICByZWxlYXNlKHBkX3JlZik7CiAgICBwZF9yZWYgPSBwOwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBpbmxpbmUgVF92YXImIG9wZXJhdG9yPSAoY29uc3QgVF92YXImIHApIHsKICAgIGlmKCBwZF9y
ZWYgIT0gcC5wZF9yZWYgKSB7CiAgICAgIHJlbGVhc2UocGRfcmVmKTsKICAgICAgcGRfcmVmID0g
VDo6X2R1cGxpY2F0ZShwLnBkX3JlZik7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBp
bmxpbmUgVF9wdHIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHBkX3JlZjsgfQogIGlubGlu
ZSBvcGVyYXRvciBUX3B0cigpIGNvbnN0IHsgcmV0dXJuIHBkX3JlZjsgfQoKICBpbmxpbmUgVF9w
dHIgaW4oKSBjb25zdCB7IHJldHVybiBwZF9yZWY7IH0KICBpbmxpbmUgVF9wdHImIGlub3V0KCkg
eyByZXR1cm4gcGRfcmVmOyB9CiAgaW5saW5lIFRfcHRyJiBvdXQoKSB7CiAgICBpZiggIWlzX25p
bChwZF9yZWYpICkgewogICAgICByZWxlYXNlKHBkX3JlZik7CiAgICAgIHBkX3JlZiA9IFQ6Ol9u
aWwoKTsKICAgIH0KICAgIHJldHVybiBwZF9yZWY7CiAgfQogIGlubGluZSBUX3B0ciBfcmV0bigp
IHsKICAgIFRfcHRyIHRtcCA9IHBkX3JlZjsKICAgIHBkX3JlZiA9IFQ6Ol9uaWwoKTsKICAgIHJl
dHVybiB0bXA7CiAgfQoKcHJpdmF0ZToKICBUX3B0ciBwZF9yZWY7Cn07CgoKCgoKCnR5cGVkZWYg
X0NPUkJBX1BzZXVkb09ial9WYXI8RHluQW55PiBEeW5BbnlfdmFyOwp0eXBlZGVmIF9DT1JCQV9Q
c2V1ZG9PYmpfVmFyPER5bkVudW0+IER5bkVudW1fdmFyOwp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9P
YmpfVmFyPER5blN0cnVjdD4gRHluU3RydWN0X3ZhcjsKdHlwZWRlZiBfQ09SQkFfUHNldWRvT2Jq
X1ZhcjxEeW5Vbmlvbj4gRHluVW5pb25fdmFyOwp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFy
PER5blNlcXVlbmNlPiBEeW5TZXF1ZW5jZV92YXI7CnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9W
YXI8RHluQXJyYXk+IER5bkFycmF5X3ZhcjsKCgp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfTWVt
YmVyPER5bkFueSxEeW5BbnlfdmFyPiBEeW5BbnlfbWVtYmVyOwp0eXBlZGVmIF9DT1JCQV9Qc2V1
ZG9PYmpfTWVtYmVyPER5bkVudW0sRHluRW51bV92YXI+IER5bkVudW1fbWVtYmVyOwp0eXBlZGVm
IF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPER5blN0cnVjdCxEeW5TdHJ1Y3RfdmFyPiBEeW5TdHJ1
Y3RfbWVtYmVyOwp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPER5blVuaW9uLER5blVu
aW9uX3Zhcj4gRHluVW5pb25fbWVtYmVyOwp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVy
PER5blNlcXVlbmNlLER5blNlcXVlbmNlX3Zhcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHluU2VxdWVuY2VfbWVtYmVyOwp0eXBlZGVm
IF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPER5bkFycmF5LER5bkFycmF5X3Zhcj4gRHluQXJyYXlf
bWVtYmVyOwoKCnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9PdXQ8RHluQW55LER5bkFueV92YXI+
IER5bkFueV9vdXQ7CnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9PdXQ8RHluRW51bSxEeW5FbnVt
X3Zhcj4gRHluRW51bV9vdXQ7CnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9PdXQ8RHluU3RydWN0
LER5blN0cnVjdF92YXI+IER5blN0cnVjdF9vdXQ7CnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9P
dXQ8RHluVW5pb24sRHluVW5pb25fdmFyPiBEeW5Vbmlvbl9vdXQ7CnR5cGVkZWYgX0NPUkJBX1Bz
ZXVkb09ial9PdXQ8RHluU2VxdWVuY2UsRHluU2VxdWVuY2VfdmFyPiBEeW5TZXF1ZW5jZV9vdXQ7
CnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9PdXQ8RHluQXJyYXksRHluQXJyYXlfdmFyPiBEeW5B
cnJheV9vdXQ7CiMgMjU5MCAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL0NPUkJBLmgiIDIg
MwoKCn0KCm5hbWVzcGFjZSBDT1JCQQp7CiMgMjYxNiAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlP
UkIzL0NPUkJBLmgiIDMKfQoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlP
UkIuaCIgMSAzCiMgMTI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIiAz
CnN0cnVjdCBvbW5pT3JiQm9hS2V5IHsKICBfQ09SQkFfVUxvbmcgaGk7CiAgX0NPUkJBX1VMb25n
IG1lZDsKICBfQ09SQkFfVUxvbmcgbG87Cn07CgoKbmFtZXNwYWNlIG9tbmlPUkIKCnsKIyAxNDgg
Ii91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiIDMKICBleHRlcm4gY2hhciog
c2VydmVyTmFtZTsKIyAxNjEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgi
IDMKICBleHRlcm4gaW50IHRyYWNlTGV2ZWw7CgoKCgoKICBleHRlcm4gaW50IHRyYWNlSW52b2Nh
dGlvbnM7CiMgMTk3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIiAzCiAg
ZXh0ZXJuIENPUkJBOjpCb29sZWFuIHN0cmljdElJT1A7CiMgMjIzICIvdXNyL2xvY2FsL2luY2x1
ZGUvb21uaU9SQjMvb21uaU9SQi5oIiAzCiAgZXh0ZXJuIENPUkJBOjpCb29sZWFuIHRjQWxpYXNF
eHBhbmQ7CiMgMjM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIiAzCiAg
dHlwZWRlZiBvbW5pT3JiQm9hS2V5IG9iamVjdEtleTsKCgoKCgoKICAgICAgICAgICAgICAgICAg
IHZvaWQgZ2VuZXJhdGVOZXdLZXkob2JqZWN0S2V5ICZrKTsKCgogICAgICAgICAgICAgICAgICAg
b2JqZWN0S2V5IG51bGxrZXkoKTsKCgogICAgICAgICAgICAgICAgICAgaW50IG9wZXJhdG9yPT0o
Y29uc3Qgb2JqZWN0S2V5ICZrMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBvYmplY3RLZXkgJmsyKTsKCgogICAgICAgICAgICAgICAgICAgaW50IG9wZXJhdG9y
IT0oY29uc3Qgb2JqZWN0S2V5ICZrMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBvYmplY3RLZXkgJmsyKTsKCgogIHR5cGVkZWYgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9PY3RldCBzZXFPY3RldHM7CgogICAgICAgICAgICAgICAgICAgc2VxT2N0ZXRzKiBr
ZXlUb09jdGV0U2VxdWVuY2UoY29uc3Qgb2JqZWN0S2V5ICZrMSk7CgoKCgogICAgICAgICAgICAg
ICAgICAgb2JqZWN0S2V5IG9jdGV0U2VxdWVuY2VUb0tleShjb25zdCBzZXFPY3RldHMmIHNlcSk7
CiMgMjc0ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIiAzCiAgICAgICAg
ICAgICAgICAgICBzaXplX3QgTWF4TWVzc2FnZVNpemUoKTsKIyAyODMgIi91c3IvbG9jYWwvaW5j
bHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiIDMKICAgICAgICAgICAgICAgICAgIHZvaWQgTWF4TWVz
c2FnZVNpemUoc2l6ZV90IG5ld3ZhbHVlKTsKCgoKICBlbnVtIGlkbGVDb25uVHlwZSB7IGlkbGVJ
bmNvbWluZywgaWRsZU91dGdvaW5nIH07CiMgMjk2ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9S
QjMvb21uaU9SQi5oIiAzCiAgICAgICAgICAgICAgICAgICB2b2lkIGlkbGVDb25uZWN0aW9uU2Nh
blBlcmlvZChpZGxlQ29ublR5cGUgZGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgc2VjKTsKCgoKCgogICAgICAgICAgICAgICAgICAg
Q09SQkE6OlVMb25nIGlkbGVDb25uZWN0aW9uU2NhblBlcmlvZCgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZGxlQ29ublR5cGUgZGlyZWN0aW9uKTsKCgoKICBlbnVt
IGNhbGxUaW1lT3V0VHlwZSB7IGNsaWVudFNpZGUsIHNlcnZlclNpZGUgfTsKIyAzMTggIi91c3Iv
bG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiIDMKICAgICAgICAgICAgICAgICAgIHZv
aWQgY2FsbFRpbWVPdXRQZXJpb2QoY2FsbFRpbWVPdXRUeXBlIGRpcmVjdGlvbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIHNlYyk7CgoKCgoK
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBjYWxsVGltZU91dFBlcmlvZCgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFRpbWVPdXRUeXBlIGRp
cmVjdGlvbik7CiMgMzQwICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIiAz
CiAgICAgICAgICAgICAgICAgICB2b2lkIHNjYW5HcmFudWxhcml0eShDT1JCQTo6VUxvbmcgc2Vj
KTsKCgoKCgogICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIHNjYW5HcmFudWxhcml0eSgp
OwojIDM4MiAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlPUkIuaCIgMwogIHR5cGVk
ZWYgQ09SQkE6OkJvb2xlYW4gKCp0cmFuc2llbnRFeGNlcHRpb25IYW5kbGVyX3QpKHZvaWQqIGNv
b2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9u
ZyBuX3JldHJpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDT1JCQTo6VFJBTlNJRU5UJiBleCk7CgogICAgICAgICAgICAgICAgICAgdm9pZCBpbnN0YWxs
VHJhbnNpZW50RXhjZXB0aW9uSGFuZGxlcih2b2lkKiBjb29raWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyYW5zaWVudEV4Y2VwdGlvbkhhbmRsZXJfdCBmbik7CgogICAgICAg
ICAgICAgICAgICAgdm9pZCBpbnN0YWxsVHJhbnNpZW50RXhjZXB0aW9uSGFuZGxlcigKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb29raWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyYW5zaWVudEV4Y2VwdGlvbkhhbmRsZXJfdCBmbik7CgogIGV4dGVy
biBDT1JCQTo6VUxvbmcgZGVmYXVsdFRyYW5zaWVudFJldHJ5RGVsYXlJbmNyZW1lbnQ7CiAgZXh0
ZXJuIENPUkJBOjpVTG9uZyBkZWZhdWx0VHJhbnNpZW50UmV0cnlEZWxheU1heGltdW07CiMgNDEz
ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIiAzCiAgdHlwZWRlZiBDT1JC
QTo6Qm9vbGVhbiAoKmNvbW1GYWlsdXJlRXhjZXB0aW9uSGFuZGxlcl90KSh2b2lkKiBjb29raWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbl9y
ZXRyaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09S
QkE6OkNPTU1fRkFJTFVSRSYgZXgpOwoKICAgICAgICAgICAgICAgICAgIHZvaWQgaW5zdGFsbENv
bW1GYWlsdXJlRXhjZXB0aW9uSGFuZGxlcih2b2lkKiBjb29raWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbW1GYWlsdXJlRXhjZXB0aW9uSGFuZGxlcl90IGZuKTsKCiAgICAg
ICAgICAgICAgICAgICB2b2lkIGluc3RhbGxDb21tRmFpbHVyZUV4Y2VwdGlvbkhhbmRsZXIoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvb2tpZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tRmFpbHVyZUV4Y2VwdGlvbkhhbmRsZXJfdCBm
bik7CiMgNDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIiAzCiAgdHlw
ZWRlZiBDT1JCQTo6Qm9vbGVhbiAoKnN5c3RlbUV4Y2VwdGlvbkhhbmRsZXJfdCkodm9pZCogY29v
a2llLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBuX3Jl
dHJpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OlN5
c3RlbUV4Y2VwdGlvbiYgZXgpOwoKICAgICAgICAgICAgICAgICAgIHZvaWQgaW5zdGFsbFN5c3Rl
bUV4Y2VwdGlvbkhhbmRsZXIodm9pZCogY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzeXN0ZW1FeGNlcHRpb25IYW5kbGVyX3QgZm4pOwoKICAgICAgICAgICAgICAg
ICAgIHZvaWQgaW5zdGFsbFN5c3RlbUV4Y2VwdGlvbkhhbmRsZXIoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29va2llLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzeXN0ZW1FeGNlcHRpb25IYW5kbGVyX3QgZm4pOwojIDQ4OCAiL3Vzci9s
b2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlPUkIuaCIgMwogIGNsYXNzIGxvYWRlciB7CiAgcHVi
bGljOgogICAgdHlwZWRlZiBDT1JCQTo6T2JqZWN0X3B0ciAoKm1hcEtleVRvT2JqZWN0X3QpICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0S2V5JiBr
ZXkpOwoKICAgIHN0YXRpYyB2b2lkIHNldChtYXBLZXlUb09iamVjdF90IE5ld0tleVRvT2JqZWN0
KTsKICB9OwojIDUzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlPUkIuaCIgMwog
IGNsYXNzIGdpb3BTZXJ2ZXJUaHJlYWRXcmFwcGVyIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIHZv
aWQgcnVuKHZvaWQgKCpmbikodm9pZCopLCB2b2lkKiBhcmcpIHsgZm4oYXJnKTsgfQogICAgdmly
dHVhbCB+Z2lvcFNlcnZlclRocmVhZFdyYXBwZXIoKSB7fQoKCgoKCgogICAgc3RhdGljIHZvaWQg
c2V0R2lvcFNlcnZlclRocmVhZFdyYXBwZXIoZ2lvcFNlcnZlclRocmVhZFdyYXBwZXIqIHApOwog
ICAgc3RhdGljIGdpb3BTZXJ2ZXJUaHJlYWRXcmFwcGVyKiBnZXRHaW9wU2VydmVyVGhyZWFkV3Jh
cHBlcigpOwogIH07CiMgNTYxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5o
IiAzCiAgY2xhc3MgZmF0YWxFeGNlcHRpb24gewogIHB1YmxpYzoKICAgIGZhdGFsRXhjZXB0aW9u
KGNvbnN0IGNoYXIgKmZpbGUsaW50IGxpbmUsY29uc3QgY2hhciAqZXJybXNnKTsKICAgIGlubGlu
ZSB+ZmF0YWxFeGNlcHRpb24oKSB7fQogICAgaW5saW5lIGNvbnN0IGNoYXIgKmZpbGUoKSBjb25z
dCB7IHJldHVybiBwZF9maWxlOyB9CiAgICBpbmxpbmUgaW50IGxpbmUoKSBjb25zdCB7IHJldHVy
biBwZF9saW5lOyB9CiAgICBpbmxpbmUgY29uc3QgY2hhciAqZXJybXNnKCkgY29uc3QgeyByZXR1
cm4gcGRfZXJybXNnOyB9CiAgcHJpdmF0ZToKICAgIGNvbnN0IGNoYXIgKnBkX2ZpbGU7CiAgICBp
bnQgcGRfbGluZTsKICAgIGNvbnN0IGNoYXIgKnBkX2Vycm1zZzsKCiAgICBmYXRhbEV4Y2VwdGlv
bigpOwogIH07CiMgNTg3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIiAz
CiAgZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhUY3BDb25uZWN0aW9uUGVyU2VydmVyOwojIDYwMCAi
L3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlPUkIuaCIgMwogIGV4dGVybiBDT1JCQTo6
Qm9vbGVhbiBkaWlUaHJvd3NTeXNFeGNlcHRpb25zOwojIDYxNyAiL3Vzci9sb2NhbC9pbmNsdWRl
L29tbmlPUkIzL29tbmlPUkIuaCIgMwogIGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBhYm9ydE9uSW50
ZXJuYWxFcnJvcjsKIyA2MjcgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgi
IDMKICBleHRlcm4gX0NPUkJBX1VMb25nIG9iamVjdFRhYmxlU2l6ZTsKIyA2NDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiIDMKICAgICAgICAgICAgICAgICAgIHZvaWQg
ZW5hYmxlTGNkTW9kZSgpOwojIDY1OSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL29tbmlP
UkIuaCIgMwogIGV4dGVybgogICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb21u
aU9SQl8yN19Db21wYXRpYmxlQW55RXh0cmFjdGlvbjsKIyA2NzEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9vbW5pT1JCMy9vbW5pT1JCLmgiIDMKICBleHRlcm4gQ09SQkE6OkJvb2xlYW4gdmVyaWZ5T2Jq
ZWN0RXhpc3RzQW5kVHlwZTsKIyA2ODYgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5p
T1JCLmgiIDMKICBleHRlcm4gaW50IHBvYUhvbGRSZXF1ZXN0VGltZW91dDsKIyA2OTkgIi91c3Iv
bG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiIDMKICBjbGFzcyBMT0NBVElPTl9GT1JX
QVJEIHsKICBwdWJsaWM6CiAgICBpbmxpbmUgTE9DQVRJT05fRk9SV0FSRChDT1JCQTo6T2JqZWN0
X3B0ciBvYmpyZWYpCiAgICAgIDogcGRfb2JqcmVmKG9ianJlZikge30KCiAgICBpbmxpbmUgQ09S
QkE6Ok9iamVjdF9wdHIgZ2V0X29iaigpIGNvbnN0IHsgcmV0dXJuIHBkX29ianJlZjsgfQoKICBw
cml2YXRlOgogICAgQ09SQkE6Ok9iamVjdF9wdHIgcGRfb2JqcmVmOwogIH07CgoKCgoKICBleHRl
cm4gQ09SQkE6OkJvb2xlYW4gdXNlVHlwZUNvZGVJbmRpcmVjdGlvbnM7CgoKICBleHRlcm4gQ09S
QkE6OkJvb2xlYW4gYWNjZXB0TWlzYWxpZ25lZFRjSW5kaXJlY3Rpb25zOwoKCgogIGNsYXNzIGxv
Z1N0cmVhbSB7CiAgcHVibGljOgogICAgbG9nU3RyZWFtKCk7CiAgICB+bG9nU3RyZWFtKCk7CiAg
ICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwoY2hhciBjKTsKICAgIGxvZ1N0cmVhbSYgb3BlcmF0b3I8
PCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgbG9n
U3RyZWFtJiBvcGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNo
YXIpYzsgfQogICAgbG9nU3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMpOwogICAgbG9n
U3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpIHsKICAgICAgcmV0dXJu
ICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7CiAgICB9CiAgICBsb2dTdHJlYW0mIG9wZXJhdG9y
PDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpIHsKICAgICAgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0
IGNoYXIqKXM7CiAgICB9CiAgICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7
CiAgICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAgbG9nU3RyZWFtJiBvcGVyYXRv
cjw8KHVuc2lnbmVkIGludCBuKTsKICAgIGxvZ1N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwog
ICAgbG9nU3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7CiAgICBsb2dTdHJlYW0m
IG9wZXJhdG9yPDwoc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgbG9n
U3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgo
dW5zaWduZWQgaW50KW4pO30KCiAgICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4p
OwogICAgbG9nU3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCgogICAg
bG9nU3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIp
OyB9CgoKICAgIGxvZ1N0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUgbik7CiAgICBsb2dTdHJlYW0m
IG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91YmxlKW4pOyB9CgoK
CgogICAgbG9nU3RyZWFtJiBmbHVzaCgpOwogIHByaXZhdGU6CiAgICB2b2lkKiBwZF9zdGF0ZTsK
ICB9OwoKICBleHRlcm4gbG9nU3RyZWFtJiBsb2c7CgoKCgoKICBzdGF0aWMgaW5saW5lIGludCB0
cmFjZShpbnQgdGwpIHsgcmV0dXJuIHRyYWNlTGV2ZWwgPj0gdGw7IH0KCgogIGNsYXNzIGxvZ2dl
ciB7CiAgcHVibGljOgogICAgbG9nZ2VyKGNvbnN0IGNoYXIqIHByZWZpeCA9IDApOwogICAgfmxv
Z2dlcigpOwoKCiAgICBsb2dnZXImIG9wZXJhdG9yPDwoY2hhciBjKTsKICAgIGxvZ2dlciYgb3Bl
cmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQog
ICAgbG9nZ2VyJiBvcGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwg
KGNoYXIpYzsgfQogICAgbG9nZ2VyJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMpOwogICAgbG9n
Z2VyJiBvcGVyYXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpIHsKICAgICAgcmV0dXJuICgq
dGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7CiAgICB9CiAgICBsb2dnZXImIG9wZXJhdG9yPDwoY29u
c3Qgc2lnbmVkIGNoYXIgKnMpIHsKICAgICAgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIq
KXM7CiAgICB9CiAgICBsb2dnZXImIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7CiAgICBsb2dn
ZXImIG9wZXJhdG9yPDwoaW50IG4pOwogICAgbG9nZ2VyJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGlu
dCBuKTsKICAgIGxvZ2dlciYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgbG9nZ2VyJiBvcGVyYXRv
cjw8KHVuc2lnbmVkIGxvbmcgbik7CiAgICBsb2dnZXImIG9wZXJhdG9yPDwoc2hvcnQgbikge3Jl
dHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgbG9nZ2VyJiBvcGVyYXRvcjw8KHVuc2lnbmVk
IHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBsb2dn
ZXImIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgbG9nZ2VyJiBvcGVyYXRvcjw8KHVuc2ln
bmVkIGxvbmcgbG9uZyBuKTsKCgogICAgbG9nZ2VyJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1
cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgoKICAgIGxvZ2dlciYgb3BlcmF0b3I8PChkb3VibGUg
bik7CiAgICBsb2dnZXImIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgo
ZG91YmxlKW4pOyB9CgoKCgogICAgbG9nZ2VyJiBvcGVyYXRvcjw8KG9tbmlMb2NhbElkZW50aXR5
Kik7CiAgICBsb2dnZXImIG9wZXJhdG9yPDwob21uaUlkZW50aXR5Kik7CiAgICBsb2dnZXImIG9w
ZXJhdG9yPDwob21uaU9iaktleSYpOwoKICAgIHZvaWQgZmx1c2goKTsKCgoKICBwcml2YXRlOgog
ICAgbG9nZ2VyKGNvbnN0IGxvZ2dlciYpOwogICAgbG9nZ2VyJiBvcGVyYXRvcj0oY29uc3QgbG9n
Z2VyJik7CgogICAgaW5saW5lIHZvaWQgcmVzZXJ2ZShpbnQgbikgeyBpZiggcGRfZW5kIC0gcGRf
cCAtIDEgPCBuICkgbW9yZShuKTsgfQogICAgdm9pZCBtb3JlKGludCBuKTsKCiAgICBjb25zdCBj
aGFyKiBwZF9wcmVmaXg7CiAgICBjaGFyKiBwZF9idWY7CiAgICBjaGFyKiBwZF9wOwogICAgY2hh
ciogcGRfZW5kOwogIH07CgoKICAgICAgICAgICAgICAgICAgIHZvaWQgbG9nZihjb25zdCBjaGFy
KiBmbXQgLi4uKTsKCgogICAgICAgICAgICAgICAgICAgdm9pZCBkb19sb2dzKGNvbnN0IGNoYXIq
IG1zZyk7CgoKICAgICAgICAgICAgICAgICAgIGlubGluZSB2b2lkIGxvZ3MoaW50IHRsLCBjb25z
dCBjaGFyKiBtc2cpIHsKICAgIGlmKCB0cmFjZUxldmVsID49IHRsICkgZG9fbG9ncyhtc2cpOwog
IH0KIyA4NDYgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiIDMKICBleHRl
cm4gb2JqZWN0S2V5IHNlZWQ7CiMgODc3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvb21u
aU9SQi5oIiAzCn0KIyAyNjIwICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3Byb3h5RmFjdG9yeS5oIiAxIDMK
IyAyNjIxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3RlbXBsYXRlZGVmbnMuaCIgMSAzCiMgNDggIi91c3Iv
bG9jYWwvaW5jbHVkZS9vbW5pT1JCMy90ZW1wbGF0ZWRlZm5zLmgiIDMKdGVtcGxhdGUgPGNsYXNz
IFQ+CmlubGluZQpfQ09SQkFfUHNldWRvT2JqX1ZhcjxUPjo6X0NPUkJBX1BzZXVkb09ial9WYXIo
KQogIDogcGRfZGF0YShUOjpfbmlsKCkpIHt9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpf
Q09SQkFfUHNldWRvT2JqX1ZhcjxUPjo6X0NPUkJBX1BzZXVkb09ial9WYXIoY29uc3QgX0NPUkJB
X1BzZXVkb09ial9WYXI8VD4mIHYpCnsKICBwZF9kYXRhID0gVDo6X2R1cGxpY2F0ZSh2LnBkX2Rh
dGEpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpfQ09SQkFfUHNldWRvT2JqX1ZhcjxU
Pjo6X0NPUkJBX1BzZXVkb09ial9WYXIoY29uc3QgX0NPUkJBX1BzZXVkb09ial9NZW1iZXI8VCwg
X0NPUkJBX1BzZXVkb09ial9WYXI8VD4gPiYgcCkKewogIHBkX2RhdGEgPSBUOjpfZHVwbGljYXRl
KHAuX3B0cik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCl9DT1JCQV9Qc2V1ZG9PYmpf
VmFyPFQ+Ojp+X0NPUkJBX1BzZXVkb09ial9WYXIoKQp7CiAgQ09SQkE6OnJlbGVhc2UocGRfZGF0
YSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPFQ+
JgpfQ09SQkFfUHNldWRvT2JqX1ZhcjxUPjo6b3BlcmF0b3I9KFQqIHApCnsKICBDT1JCQTo6cmVs
ZWFzZShwZF9kYXRhKTsKICBwZF9kYXRhID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4KaW5saW5lIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPFQ+JgpfQ09SQkFfUHNldWRv
T2JqX1ZhcjxUPjo6b3BlcmF0b3I9KGNvbnN0IF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPFQ+JiB2KQp7
CiAgaWYoIHBkX2RhdGEgIT0gdi5wZF9kYXRhICkgewogICAgQ09SQkE6OnJlbGVhc2UocGRfZGF0
YSk7CiAgICBpZiggdi5wZF9kYXRhICkgcGRfZGF0YSA9IFQ6Ol9kdXBsaWNhdGUodi5wZF9kYXRh
KTsKICAgIGVsc2UgcGRfZGF0YSA9IFQ6Ol9uaWwoKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBfQ09SQkFfUHNldWRvT2JqX1ZhcjxUPiYKX0NPUkJB
X1BzZXVkb09ial9WYXI8VD46Om9wZXJhdG9yPShjb25zdCBfQ09SQkFfUHNldWRvT2JqX01lbWJl
cjxULCBfQ09SQkFfUHNldWRvT2JqX1ZhcjxUPiA+JiBtKQp7CiAgQ09SQkE6OnJlbGVhc2UocGRf
ZGF0YSk7CiAgcGRfZGF0YSA9IFQ6Ol9kdXBsaWNhdGUobS5fcHRyKTsKICByZXR1cm4gKnRoaXM7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIFQqJgpfQ09SQkFfUHNldWRvT2JqX1ZhcjxU
Pjo6b3V0KCkKewogIENPUkJBOjpyZWxlYXNlKHBkX2RhdGEpOwogIHBkX2RhdGEgPSBUOjpfbmls
KCk7CiAgcmV0dXJuIHBkX2RhdGE7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIFQqCl9D
T1JCQV9Qc2V1ZG9PYmpfVmFyPFQ+OjpfcmV0bigpCnsKICBUX3B0ciB0bXAgPSBwZF9kYXRhOwog
IHBkX2RhdGEgPSBUOjpfbmlsKCk7CiAgcmV0dXJuIHRtcDsKfQoKCgoKCnRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBUX3Zhcj4KaW5saW5lCl9DT1JCQV9Qc2V1ZG9PYmpfT3V0PFQsVF92YXI+Ojpf
Q09SQkFfUHNldWRvT2JqX091dChUX3ZhciYgdikKICA6IF9kYXRhKHYucGRfZGF0YSkKewoKICB2
ID0gVDo6X25pbCgpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPgppbmxp
bmUKX0NPUkJBX1BzZXVkb09ial9NZW1iZXI8VCxUX3Zhcj46Ol9DT1JCQV9Qc2V1ZG9PYmpfTWVt
YmVyKCkKICA6IF9wdHIoVDo6X25pbCgpKSB7fQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBU
X3Zhcj4KaW5saW5lCl9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPFQsVF92YXI+OjpfQ09SQkFfUHNl
dWRvT2JqX01lbWJlcihjb25zdCBfQ09SQkFfUHNldWRvT2JqX01lbWJlcjxULFRfdmFyPiYgbSkK
ewogIGlmKCBtLl9wdHIgKSBfcHRyID0gVDo6X2R1cGxpY2F0ZShtLl9wdHIpOwogIGVsc2UgX3B0
ciA9IFQ6Ol9uaWwoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KaW5saW5l
Cl9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPFQsVF92YXI+Ojp+X0NPUkJBX1BzZXVkb09ial9NZW1i
ZXIoKQp7CiAgQ09SQkE6OnJlbGVhc2UoX3B0cik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgVF92YXI+CmlubGluZSBfQ09SQkFfUHNldWRvT2JqX01lbWJlcjxULFRfdmFyPiYKX0NPUkJB
X1BzZXVkb09ial9NZW1iZXI8VCxUX3Zhcj46Om9wZXJhdG9yPShUKiBwKQp7CiAgQ09SQkE6OnJl
bGVhc2UoX3B0cik7CiAgX3B0ciA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIFQsIGNsYXNzIFRfdmFyPgppbmxpbmUgX0NPUkJBX1BzZXVkb09ial9NZW1iZXI8VCxUX3Zh
cj4mCl9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPFQsVF92YXI+OjpvcGVyYXRvcj0oY29uc3QgX0NP
UkJBX1BzZXVkb09ial9NZW1iZXI8VCxUX3Zhcj4mIG0pCnsKICBpZiggX3B0ciAhPSBtLl9wdHIg
KSB7CiAgICBDT1JCQTo6cmVsZWFzZShfcHRyKTsKICAgIF9wdHIgPSBUOjpfZHVwbGljYXRlKG0u
X3B0cik7CiAgfQogIHJldHVybiAqdGhpczsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBU
X3Zhcj4KaW5saW5lIF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPFQsVF92YXI+JgpfQ09SQkFfUHNl
dWRvT2JqX01lbWJlcjxULFRfdmFyPjo6b3BlcmF0b3I9KGNvbnN0IFRfdmFyJiB2KQp7CiAgQ09S
QkE6OnJlbGVhc2UoX3B0cik7CiAgX3B0ciA9IFQ6Ol9kdXBsaWNhdGUodi5wZF9kYXRhKTsKICBy
ZXR1cm4gKnRoaXM7Cn0KIyAyMDggIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy90ZW1wbGF0
ZWRlZm5zLmgiIDMKaW5saW5lCkNPUkJBOjpPYmplY3RfdmFyOjpPYmplY3RfdmFyKGNvbnN0IENP
UkJBOjpPYmplY3RfTWVtYmVyJiBwKQogIDogcGRfcmVmKFQ6Ol9kdXBsaWNhdGUocCkpCnsKfQoK
aW5saW5lCkNPUkJBOjpPYmplY3RfdmFyOjpPYmplY3RfdmFyKGNvbnN0IENPUkJBOjpPYmplY3Rf
RWxlbWVudCYgcCkKICA6IHBkX3JlZihUOjpfZHVwbGljYXRlKHApKQp7Cn0KCgppbmxpbmUgQ09S
QkE6Ok9iamVjdF92YXImCkNPUkJBOjpPYmplY3RfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IENPUkJB
OjpPYmplY3RfTWVtYmVyJiBwKQp7CiAgcmVsZWFzZShwZF9yZWYpOwogIHBkX3JlZiA9IFQ6Ol9k
dXBsaWNhdGUocCk7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdF92YXIm
CkNPUkJBOjpPYmplY3RfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBOjpPYmplY3RfRWxlbWVu
dCYgcCkKewogIHJlbGVhc2UocGRfcmVmKTsKICBwZF9yZWYgPSBUOjpfZHVwbGljYXRlKHApOwog
IHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBOjpPYmplY3RfTWVtYmVyJgpDT1JCQTo6T2Jq
ZWN0X01lbWJlcjo6b3BlcmF0b3I9KGNvbnN0IENPUkJBOjpPYmplY3RfRWxlbWVudCYgcCkKewog
IHJlbGVhc2UoX3B0cik7CiAgX3B0ciA9IFQ6Ol9kdXBsaWNhdGUocCk7CiAgcmV0dXJuICp0aGlz
Owp9CiMgMjYyMiAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL0NPUkJBLmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9jb3JiYV9vcGVyYXRvcnMuaCIgMSAzCiMgMzIg
Ii91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9jb3JiYV9vcGVyYXRvcnMuaCIgMwpleHRlcm4g
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkV4Y2VwdGlvbiYpOwpl
eHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkV4Y2VwdGlv
biopOwoKCgoKCgoKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENP
UkJBOjpVTktOT1dOJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25z
dCBDT1JCQTo6VU5LTk9XTiopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29u
c3QgQ09SQkE6OkFueSYsIENPUkJBOjpVTktOT1dOKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8
PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkJBRF9QQVJBTSYpOyBleHRlcm4gdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkJBRF9QQVJBTSopOyBleHRlcm4gQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpCQURfUEFS
QU0qJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6
Tk9fTUVNT1JZJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBD
T1JCQTo6Tk9fTUVNT1JZKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25z
dCBDT1JCQTo6QW55JiwgQ09SQkE6Ok5PX01FTU9SWSomKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTVBfTElNSVQmKTsgZXh0ZXJuIHZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTVBfTElNSVQqKTsgZXh0ZXJuIENP
UkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6SU1QX0xJ
TUlUKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6
OkNPTU1fRkFJTFVSRSYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29u
c3QgQ09SQkE6OkNPTU1fRkFJTFVSRSopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpDT01NX0ZBSUxVUkUqJik7CmV4dGVybiB2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6SU5WX09CSlJFRiYpOyBleHRl
cm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOVl9PQkpSRUYq
KTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBD
T1JCQTo6SU5WX09CSlJFRiomKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYs
IGNvbnN0IENPUkJBOjpPQkpFQ1RfTk9UX0VYSVNUJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9
KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6T0JKRUNUX05PVF9FWElTVCopOyBleHRlcm4gQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpPQkpFQ1Rf
Tk9UX0VYSVNUKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3Qg
Q09SQkE6Ok5PX1BFUk1JU1NJT04mKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFu
eSYsIGNvbnN0IENPUkJBOjpOT19QRVJNSVNTSU9OKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok5PX1BFUk1JU1NJT04qJik7CmV4
dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6SU5URVJOQUwm
KTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTlRF
Uk5BTCopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFu
eSYsIENPUkJBOjpJTlRFUk5BTComKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFu
eSYsIGNvbnN0IENPUkJBOjpNQVJTSEFMJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJB
OjpBbnkmLCBjb25zdCBDT1JCQTo6TUFSU0hBTCopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpNQVJTSEFMKiYpOwpleHRlcm4gdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOSVRJQUxJWkUmKTsgZXh0
ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTklUSUFMSVpF
Kik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55Jiwg
Q09SQkE6OklOSVRJQUxJWkUqJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkm
LCBjb25zdCBDT1JCQTo6Tk9fSU1QTEVNRU5UJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6Tk9fSU1QTEVNRU5UKik7IGV4dGVybiBDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok5PX0lNUExFTUVOVCom
KTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpCQURf
VFlQRUNPREUmKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENP
UkJBOjpCQURfVFlQRUNPREUqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNv
bnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6QkFEX1RZUEVDT0RFKiYpOwpleHRlcm4gdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkJBRF9PUEVSQVRJT04mKTsgZXh0ZXJu
IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpCQURfT1BFUkFUSU9O
Kik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55Jiwg
Q09SQkE6OkJBRF9PUEVSQVRJT04qJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnkmLCBjb25zdCBDT1JCQTo6Tk9fUkVTT1VSQ0VTJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9
KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6Tk9fUkVTT1VSQ0VTKik7IGV4dGVybiBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok5PX1JFU09VUkNF
UyomKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpO
T19SRVNQT05TRSYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3Qg
Q09SQkE6Ok5PX1JFU1BPTlNFKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShj
b25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok5PX1JFU1BPTlNFKiYpOwpleHRlcm4gdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlBFUlNJU1RfU1RPUkUmKTsgZXh0ZXJu
IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpQRVJTSVNUX1NUT1JF
Kik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55Jiwg
Q09SQkE6OlBFUlNJU1RfU1RPUkUqJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnkmLCBjb25zdCBDT1JCQTo6QkFEX0lOVl9PUkRFUiYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8
PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkJBRF9JTlZfT1JERVIqKTsgZXh0ZXJuIENPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6QkFEX0lOVl9P
UkRFUiomKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJB
OjpUUkFOU0lFTlQmKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpUUkFOU0lFTlQqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNv
bnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6VFJBTlNJRU5UKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkZSRUVfTUVNJik7IGV4dGVybiB2b2lkIG9w
ZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6RlJFRV9NRU0qKTsgZXh0ZXJuIENP
UkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6RlJFRV9N
RU0qJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6
SU5WX0lERU5UJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBD
T1JCQTo6SU5WX0lERU5UKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25z
dCBDT1JCQTo6QW55JiwgQ09SQkE6OklOVl9JREVOVComKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTlZfRkxBRyYpOyBleHRlcm4gdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOVl9GTEFHKik7IGV4dGVybiBDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6OklOVl9GTEFH
KiYpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklO
VEZfUkVQT1MmKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENP
UkJBOjpJTlRGX1JFUE9TKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25z
dCBDT1JCQTo6QW55JiwgQ09SQkE6OklOVEZfUkVQT1MqJik7CmV4dGVybiB2b2lkIG9wZXJhdG9y
PDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6QkFEX0NPTlRFWFQmKTsgZXh0ZXJuIHZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpCQURfQ09OVEVYVCopOyBleHRl
cm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpC
QURfQ09OVEVYVComKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpPQkpfQURBUFRFUiYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55
JiwgY29uc3QgQ09SQkE6Ok9CSl9BREFQVEVSKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok9CSl9BREFQVEVSKiYpOwpleHRlcm4g
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkRBVEFfQ09OVkVSU0lP
TiYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkRB
VEFfQ09OVkVSU0lPTiopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3Qg
Q09SQkE6OkFueSYsIENPUkJBOjpEQVRBX0NPTlZFUlNJT04qJik7CmV4dGVybiB2b2lkIG9wZXJh
dG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VFJBTlNBQ1RJT05fUkVRVUlSRUQmKTsg
ZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpUUkFOU0FD
VElPTl9SRVFVSVJFRCopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3Qg
Q09SQkE6OkFueSYsIENPUkJBOjpUUkFOU0FDVElPTl9SRVFVSVJFRComKTsKZXh0ZXJuIHZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpUUkFOU0FDVElPTl9ST0xMRURC
QUNLJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6
VFJBTlNBQ1RJT05fUk9MTEVEQkFDSyopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpUUkFOU0FDVElPTl9ST0xMRURCQUNLKiYpOwpl
eHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOVkFMSURf
VFJBTlNBQ1RJT04mKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpJTlZBTElEX1RSQU5TQUNUSU9OKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6OklOVkFMSURfVFJBTlNBQ1RJT04qJik7
CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6V1JPTkdf
VFJBTlNBQ1RJT04mKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpXUk9OR19UUkFOU0FDVElPTiopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpXUk9OR19UUkFOU0FDVElPTiomKTsKZXh0
ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpVbmtub3duVXNl
ckV4Y2VwdGlvbiYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3Qg
Q09SQkE6OlVua25vd25Vc2VyRXhjZXB0aW9uKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6OlVua25vd25Vc2VyRXhjZXB0aW9uKiYp
OwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6Oldyb25n
VHJhbnNhY3Rpb24mKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpXcm9uZ1RyYW5zYWN0aW9uKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv
cj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Oldyb25nVHJhbnNhY3Rpb24qJik7CmV4dGVy
biB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6Q29udGV4dExpc3Q6
OkJvdW5kcyYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09S
QkE6OkNvbnRleHRMaXN0OjpCb3VuZHMqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6Q29udGV4dExpc3Q6OkJvdW5kcyomKTsKZXh0
ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpFeGNlcHRpb25M
aXN0OjpCb3VuZHMmKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpFeGNlcHRpb25MaXN0OjpCb3VuZHMqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6RXhjZXB0aW9uTGlzdDo6Qm91bmRz
KiYpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6Ok5W
TGlzdDo6Qm91bmRzJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25z
dCBDT1JCQTo6TlZMaXN0OjpCb3VuZHMqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6TlZMaXN0OjpCb3VuZHMqJik7CmV4dGVybiB2
b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VHlwZUNvZGU6OkJvdW5k
cyYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlR5
cGVDb2RlOjpCb3VuZHMqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0
IENPUkJBOjpBbnkmLCBDT1JCQTo6VHlwZUNvZGU6OkJvdW5kcyomKTsKZXh0ZXJuIHZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpUeXBlQ29kZTo6QmFkS2luZCYpOyBl
eHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlR5cGVDb2Rl
OjpCYWRLaW5kKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JC
QTo6QW55JiwgQ09SQkE6OlR5cGVDb2RlOjpCYWRLaW5kKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkR5bkFueTo6SW52YWxpZCYpOyBleHRlcm4g
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkR5bkFueTo6SW52YWxp
ZCopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYs
IENPUkJBOjpEeW5Bbnk6OkludmFsaWQqJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJB
OjpBbnkmLCBjb25zdCBDT1JCQTo6RHluQW55OjpJbnZhbGlkVmFsdWUmKTsgZXh0ZXJuIHZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpEeW5Bbnk6OkludmFsaWRWYWx1
ZSopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYs
IENPUkJBOjpEeW5Bbnk6OkludmFsaWRWYWx1ZSomKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0o
Q09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpEeW5Bbnk6OlR5cGVNaXNtYXRjaCYpOyBleHRlcm4g
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkR5bkFueTo6VHlwZU1p
c21hdGNoKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6
QW55JiwgQ09SQkE6OkR5bkFueTo6VHlwZU1pc21hdGNoKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkR5bkFueTo6SW52YWxpZFNlcSYpOyBleHRl
cm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkR5bkFueTo6SW52
YWxpZFNlcSopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6
OkFueSYsIENPUkJBOjpEeW5Bbnk6OkludmFsaWRTZXEqJik7CmV4dGVybiB2b2lkIG9wZXJhdG9y
PDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6T1JCOjpJbmNvbnNpc3RlbnRUeXBlQ29kZSYp
OyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6Ok9SQjo6
SW5jb25zaXN0ZW50VHlwZUNvZGUqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49
KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6T1JCOjpJbmNvbnNpc3RlbnRUeXBlQ29kZSomKTsK
ZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpPUkI6Oklu
dmFsaWROYW1lJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBD
T1JCQTo6T1JCOjpJbnZhbGlkTmFtZSopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpPUkI6OkludmFsaWROYW1lKiYpOwojIDI2MjMg
Ii91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9DT1JCQS5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvb21uaU9SQjMvcG9hLmgiIDEgMwojIDcwICIvdXNyL2xvY2FsL2luY2x1ZGUvb21u
aU9SQjMvcG9hLmgiIDMKY2xhc3MgR0lPUF9TOwpjbGFzcyBvbW5pT3JiUE9BOwoKCm5hbWVzcGFj
ZSBQb3J0YWJsZVNlcnZlcgp7CgoKCgoKICBjbGFzcyBQT0E7CiAgdHlwZWRlZiBQT0EqIFBPQV9w
dHI7CiAgdHlwZWRlZiBQT0FfcHRyIFBPQVJlZjsKCiAgY2xhc3MgUE9BX0hlbHBlciB7CiAgcHVi
bGljOgogICAgdHlwZWRlZiBQT0FfcHRyIF9wdHJfdHlwZTsKCiAgICBzdGF0aWMgX3B0cl90eXBl
IF9uaWwoKTsKICAgIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICAg
IHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICAgIHN0YXRpYyB2b2lkIGR1cGxpY2F0
ZShfcHRyX3R5cGUpOwogICAgc3RhdGljIGlubGluZSBzaXplX3QgTlBfYWxpZ25lZFNpemUoX3B0
cl90eXBlLCBzaXplX3QpIHsgcmV0dXJuIDA7IH0KICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJz
aGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKSB7fQogICAgc3RhdGljIGlu
bGluZSBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJikgeyByZXR1
cm4gMDsgfQogICAgc3RhdGljIGlubGluZSB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBN
ZW1CdWZmZXJlZFN0cmVhbSYpIHt9CiAgICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSB1bm1hcnNo
YWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mKSB7IHJldHVybiAwOyB9CiAgfTsKCiAgY2xhc3Mg
U2VydmFudEJhc2U7CiAgdHlwZWRlZiBTZXJ2YW50QmFzZSogU2VydmFudDsKCgoKCgoKICBjbGFz
cyBQT0FMaXN0X3ZhcjsKCiAgY2xhc3MgUE9BTGlzdCA6IHB1YmxpYyBfQ09SQkFfVW5ib3VuZGVk
X1NlcXVlbmNlX09ialJlZjxQT0EsIF9DT1JCQV9PYmpSZWZfRWxlbWVudDxQT0EsIFBPQV9IZWxw
ZXI+LCBQT0FfSGVscGVyPiB7CiAgcHVibGljOgogICAgdHlwZWRlZiBQT0FMaXN0X3ZhciBfdmFy
X3R5cGU7CiAgICBpbmxpbmUgUE9BTGlzdCgpIHt9CiAgICBpbmxpbmUgUE9BTGlzdChjb25zdCBQ
T0FMaXN0JiBzKQogICAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVmPFBPQSwg
X0NPUkJBX09ialJlZl9FbGVtZW50PFBPQSwgUE9BX0hlbHBlcj4sIFBPQV9IZWxwZXI+KHMpIHt9
CiAgICBpbmxpbmUgUE9BTGlzdChfQ09SQkFfVUxvbmcgX21heCkKICAgICAgOiBfQ09SQkFfVW5i
b3VuZGVkX1NlcXVlbmNlX09ialJlZjxQT0EsIF9DT1JCQV9PYmpSZWZfRWxlbWVudDxQT0EsIFBP
QV9IZWxwZXI+LCBQT0FfSGVscGVyPihfbWF4KSB7fQogICAgaW5saW5lIFBPQUxpc3QoX0NPUkJB
X1VMb25nIF9tYXgsIF9DT1JCQV9VTG9uZyBfbGVuLCBQT0FfcHRyKiBfdmFsLCBfQ09SQkFfQm9v
bGVhbiBfcmVsPTApCiAgICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9PYmpSZWY8UE9B
LCBfQ09SQkFfT2JqUmVmX0VsZW1lbnQ8UE9BLCBQT0FfSGVscGVyPiwgUE9BX0hlbHBlcj4oX21h
eCwgX2xlbiwgX3ZhbCwgX3JlbCkge30KICAgIGlubGluZSBQT0FMaXN0JiBvcGVyYXRvciA9IChj
b25zdCBQT0FMaXN0JiBzKSB7CiAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVm
PFBPQSwgX0NPUkJBX09ialJlZl9FbGVtZW50PFBPQSwgUE9BX0hlbHBlcj4sIFBPQV9IZWxwZXI+
OjpvcGVyYXRvcj0ocyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICB9OwoKCiAgY2xhc3Mg
UE9BTGlzdF92YXIgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgUE9BTGlzdCBUOwogICAgdHlwZWRl
ZiBQT0FMaXN0X3ZhciBUX3ZhcjsKCiAgICBpbmxpbmUgUE9BTGlzdF92YXIoKSA6IHBkX3NlcSgw
KSB7fQogICAgaW5saW5lIFBPQUxpc3RfdmFyKFQqIHMpIDogcGRfc2VxKHMpIHt9CiAgICBpbmxp
bmUgUE9BTGlzdF92YXIoY29uc3QgVF92YXImIHMpIHsKICAgICAgaWYoIHMucGRfc2VxICkgcGRf
c2VxID0gbmV3IFQoKnMucGRfc2VxKTsKICAgICAgZWxzZSBwZF9zZXEgPSAwOwogICAgfQogICAg
aW5saW5lIH5QT0FMaXN0X3ZhcigpIHsgaWYoIHBkX3NlcSApIGRlbGV0ZSBwZF9zZXE7IH0KCiAg
ICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKFQqIHMpIHsKICAgICAgaWYoIHBkX3NlcSApIGRl
bGV0ZSBwZF9zZXE7CiAgICAgIHBkX3NlcSA9IHM7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
ICAgIGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoY29uc3QgVF92YXImIHMpIHsKICAgICAgaWYo
IHMucGRfc2VxICkgewogICAgICAgIGlmKCAhcGRfc2VxICkgcGRfc2VxID0gbmV3IFQ7CiAgICAg
ICAgKnBkX3NlcSA9ICpzLnBkX3NlcTsKICAgICAgfSBlbHNlIGlmKCBwZF9zZXEgKSB7CiAgICAg
ICAgZGVsZXRlIHBkX3NlcTsKICAgICAgICBwZF9zZXEgPSAwOwogICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgICBpbmxpbmUgX0NPUkJBX09ialJlZl9FbGVtZW50PFBPQSwgUE9B
X0hlbHBlcj4gb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBzKSB7CiAgICAgIHJldHVybiAoKnBk
X3NlcSlbc107CiAgICB9CiAgICBpbmxpbmUgVCogb3BlcmF0b3IgLT4gKCkgeyByZXR1cm4gcGRf
c2VxOyB9CgoKCiAgICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgVCYgKCkgY29uc3QgeyByZXR1cm4g
KnBkX3NlcTsgfQogICAgaW5saW5lIG9wZXJhdG9yIFQmICgpIHsgcmV0dXJuICpwZF9zZXE7IH0K
CgogICAgaW5saW5lIGNvbnN0IFQmIGluKCkgY29uc3QgeyByZXR1cm4gKnBkX3NlcTsgfQogICAg
aW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4gKnBkX3NlcTsgfQogICAgaW5saW5lIFQqJiBvdXQo
KSB7CiAgICAgIGlmKCBwZF9zZXEgKSB7IGRlbGV0ZSBwZF9zZXE7IHBkX3NlcSA9IDA7IH0KICAg
ICAgcmV0dXJuIHBkX3NlcTsKICAgIH0KICAgIGlubGluZSBUKiBfcmV0bigpIHsgVCogdG1wID0g
cGRfc2VxOyBwZF9zZXEgPSAwOyByZXR1cm4gdG1wOyB9CgogIHByaXZhdGU6CiAgICBUKiBwZF9z
ZXE7CiAgfTsKCgoKCgogIGNsYXNzIE9iamVjdElkX3ZhcjsKCiAgY2xhc3MgT2JqZWN0SWQgOiBw
dWJsaWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQgewogIHB1YmxpYzoKICAgIHR5
cGVkZWYgT2JqZWN0SWRfdmFyIF92YXJfdHlwZTsKICAgIGlubGluZSBPYmplY3RJZCgpIHt9CiAg
ICBpbmxpbmUgT2JqZWN0SWQoY29uc3QgT2JqZWN0SWQmIHNlcSkKICAgICAgOiBfQ09SQkFfVW5i
b3VuZGVkX1NlcXVlbmNlX19PY3RldChzZXEpIHt9CiAgICBpbmxpbmUgT2JqZWN0SWQoQ09SQkE6
OlVMb25nIG1heCkKICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldChtYXgp
IHt9CiAgICBpbmxpbmUgT2JqZWN0SWQoQ09SQkE6OlVMb25nIG1heCwgQ09SQkE6OlVMb25nIGxl
biwgQ09SQkE6Ok9jdGV0KiB2YWwsIENPUkJBOjpCb29sZWFuIHJlbD0wKQogICAgICA6IF9DT1JC
QV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0KG1heCwgbGVuLCB2YWwsIHJlbCkge30KICAgIGlu
bGluZSBPYmplY3RJZCYgb3BlcmF0b3IgPSAoY29uc3QgT2JqZWN0SWQmIHNlcSkgewogICAgICBf
Q09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldDo6b3BlcmF0b3I9KHNlcSk7CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KICB9OwoKICBjbGFzcyBPYmplY3RJZF9vdXQ7CgogIGNsYXNzIE9i
amVjdElkX3ZhciB7CiAgcHVibGljOgogICAgdHlwZWRlZiBPYmplY3RJZCBUOwogICAgdHlwZWRl
ZiBPYmplY3RJZF92YXIgVF92YXI7CgogICAgaW5saW5lIE9iamVjdElkX3ZhcigpIDogcGRfc2Vx
KDApIHt9CiAgICBpbmxpbmUgT2JqZWN0SWRfdmFyKFQqIHMpIDogcGRfc2VxKHMpIHt9CiAgICBp
bmxpbmUgT2JqZWN0SWRfdmFyKGNvbnN0IFRfdmFyJiBzdikgewogICAgICBpZiggc3YucGRfc2Vx
ICkgewogICAgICAgIHBkX3NlcSA9IG5ldyBUOwogICAgICAgICpwZF9zZXEgPSAqc3YucGRfc2Vx
OwogICAgICB9IGVsc2UKICAgICAgICBwZF9zZXEgPSAwOwogICAgfQogICAgaW5saW5lIH5PYmpl
Y3RJZF92YXIoKSB7IGlmKCBwZF9zZXEgKSBkZWxldGUgcGRfc2VxOyB9CgogICAgaW5saW5lIFRf
dmFyJiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICAgIGlmKCBwZF9zZXEgKSBkZWxldGUgcGRfc2Vx
OwogICAgICBwZF9zZXEgPSBzOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBpbmxpbmUg
VF92YXImIG9wZXJhdG9yID0gKGNvbnN0IFRfdmFyJiBzdikgewogICAgICBpZiggc3YucGRfc2Vx
ICkgewogICAgICAgIGlmKCAhcGRfc2VxICkgcGRfc2VxID0gbmV3IFQ7CiAgICAgICAgKnBkX3Nl
cSA9ICpzdi5wZF9zZXE7CiAgICAgIH0gZWxzZSBpZiggcGRfc2VxICkgewogICAgICAgIGRlbGV0
ZSBwZF9zZXE7CiAgICAgICAgcGRfc2VxID0gMDsKICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogICAgaW5saW5lIENPUkJBOjpPY3RldCYgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9u
ZyBpKSB7IHJldHVybiAoKnBkX3NlcSlbaV07IH0KICAgIGlubGluZSBUKiBvcGVyYXRvciAtPiAo
KSB7IHJldHVybiBwZF9zZXE7IH0KCgoKICAgIGlubGluZSBvcGVyYXRvciBjb25zdCBUJiAoKSBj
b25zdCB7IHJldHVybiAqcGRfc2VxOyB9CiAgICBpbmxpbmUgb3BlcmF0b3IgVCYgKCkgeyByZXR1
cm4gKnBkX3NlcTsgfQoKCiAgICBpbmxpbmUgY29uc3QgVCYgaW4oKSBjb25zdCB7IHJldHVybiAq
cGRfc2VxOyB9CiAgICBpbmxpbmUgVCYgaW5vdXQoKSB7IHJldHVybiAqcGRfc2VxOyB9CiAgICBp
bmxpbmUgVComIG91dCgpIHsgaWYgKHBkX3NlcSkgeyBkZWxldGUgcGRfc2VxOyBwZF9zZXEgPSAw
OyB9IHJldHVybiBwZF9zZXE7IH0KICAgIGlubGluZSBUKiBfcmV0bigpIHsgVCogdG1wID0gcGRf
c2VxOyBwZF9zZXEgPSAwOyByZXR1cm4gdG1wOyB9CgogICAgZnJpZW5kIGNsYXNzIE9iamVjdElk
X291dDsKCiAgcHJpdmF0ZToKICAgIFQqIHBkX3NlcTsKICB9OwoKICBjbGFzcyBPYmplY3RJZF9v
dXQgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgT2JqZWN0SWQgVDsKICAgIHR5cGVkZWYgT2JqZWN0
SWRfdmFyIFRfdmFyOwoKICAgIGlubGluZSBPYmplY3RJZF9vdXQoVComIHMpIDogX2RhdGEocykg
eyBfZGF0YSA9IDA7IH0KICAgIGlubGluZSBPYmplY3RJZF9vdXQoVF92YXImIHN2KQogICAgICA6
IF9kYXRhKHN2LnBkX3NlcSkgeyBzdiA9IChUKikgMDsgfQogICAgaW5saW5lIE9iamVjdElkX291
dChjb25zdCBPYmplY3RJZF9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkgeyB9CiAgICBpbmxpbmUg
T2JqZWN0SWRfb3V0JiBvcGVyYXRvcj0oY29uc3QgT2JqZWN0SWRfb3V0JiBzKSB7IF9kYXRhID0g
cy5fZGF0YTsgcmV0dXJuICp0aGlzOyB9CiAgICBpbmxpbmUgT2JqZWN0SWRfb3V0JiBvcGVyYXRv
cj0oVCogcykgeyBfZGF0YSA9IHM7IHJldHVybiAqdGhpczsgfQogICAgaW5saW5lIG9wZXJhdG9y
IFQqJigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9k
YXRhOyB9CiAgICBpbmxpbmUgVCogb3BlcmF0b3ItPigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgICBp
bmxpbmUgQ09SQkE6Ok9jdGV0JiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIGkpIHsgcmV0dXJu
ICgqX2RhdGEpW2ldOyB9CiAgICBUKiYgX2RhdGE7CgogIHByaXZhdGU6CiAgICBPYmplY3RJZF9v
dXQoKTsKICAgIE9iamVjdElkX291dCBvcGVyYXRvcj0oIGNvbnN0IFRfdmFyJik7CiAgfTsKCgoK
CgogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENPUkJBOjpVTG9uZwogICAgVEhSRUFEX1BP
TElDWV9JRCA9IDE2OwoKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDT1JCQTo6VUxvbmcK
ICAgIExJRkVTUEFOX1BPTElDWV9JRCA9IDE3OwoKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDT1JCQTo6VUxvbmcKICAgIElEX1VOSVFVRU5FU1NfUE9MSUNZX0lEID0gMTg7CgogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IENPUkJBOjpVTG9uZwogICAgSURfQVNTSUdOTUVOVF9QT0xJ
Q1lfSUQgPSAxOTsKCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OlVMb25nCiAg
ICBJTVBMSUNJVF9BQ1RJVkFUSU9OX1BPTElDWV9JRCA9IDIwOwoKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDT1JCQTo6VUxvbmcKICAgIFNFUlZBTlRfUkVURU5USU9OX1BPTElDWV9JRCA9
IDIxOwoKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDT1JCQTo6VUxvbmcKICAgIFJFUVVF
U1RfUFJPQ0VTU0lOR19QT0xJQ1lfSUQgPSAyMjsKCgogIGVudW0gVGhyZWFkUG9saWN5VmFsdWUg
ewogICAgT1JCX0NUUkxfTU9ERUwsCiAgICBTSU5HTEVfVEhSRUFEX01PREVMCiAgfTsKCiAgZW51
bSBMaWZlc3BhblBvbGljeVZhbHVlIHsKICAgIFRSQU5TSUVOVCwKICAgIFBFUlNJU1RFTlQKICB9
OwoKICBlbnVtIElkVW5pcXVlbmVzc1BvbGljeVZhbHVlIHsKICAgIFVOSVFVRV9JRCwKICAgIE1V
TFRJUExFX0lECiAgfTsKCiAgZW51bSBJZEFzc2lnbm1lbnRQb2xpY3lWYWx1ZSB7CiAgICBVU0VS
X0lELAogICAgU1lTVEVNX0lECiAgfTsKCiAgZW51bSBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lW
YWx1ZSB7CiAgICBJTVBMSUNJVF9BQ1RJVkFUSU9OLAogICAgTk9fSU1QTElDSVRfQUNUSVZBVElP
TgogIH07CgogIGVudW0gU2VydmFudFJldGVudGlvblBvbGljeVZhbHVlIHsKICAgIFJFVEFJTiwK
ICAgIE5PTl9SRVRBSU4KICB9OwoKICBlbnVtIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5VmFsdWUg
ewogICAgVVNFX0FDVElWRV9PQkpFQ1RfTUFQX09OTFksCiAgICBVU0VfREVGQVVMVF9TRVJWQU5U
LAogICAgVVNFX1NFUlZBTlRfTUFOQUdFUgogIH07CiMgMzcxICIvdXNyL2xvY2FsL2luY2x1ZGUv
b21uaU9SQjMvcG9hLmgiIDMKICBjbGFzcyBUaHJlYWRQb2xpY3k7IHR5cGVkZWYgVGhyZWFkUG9s
aWN5KiBUaHJlYWRQb2xpY3lfcHRyOyB0eXBlZGVmIFRocmVhZFBvbGljeV9wdHIgVGhyZWFkUG9s
aWN5UmVmOyBjbGFzcyBUaHJlYWRQb2xpY3kgOiBwdWJsaWMgQ09SQkE6OlBvbGljeSB7IHB1Ymxp
YzogaW5saW5lIFRocmVhZFBvbGljeShUaHJlYWRQb2xpY3lWYWx1ZSB2YWx1ZSkgOiBDT1JCQTo6
UG9saWN5KFRIUkVBRF9QT0xJQ1lfSUQpLCBwZF92YWx1ZSh2YWx1ZSkge30gaW5saW5lIFRocmVh
ZFBvbGljeSgpIHt9IHZpcnR1YWwgflRocmVhZFBvbGljeSgpOyB2aXJ0dWFsIENPUkJBOjpQb2xp
Y3lfcHRyIGNvcHkoKTsgdmlydHVhbCBUaHJlYWRQb2xpY3lWYWx1ZSB2YWx1ZSgpIHsgcmV0dXJu
IHBkX3ZhbHVlOyB9IHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqIHJlcG9J
ZCk7IHN0YXRpYyBUaHJlYWRQb2xpY3lfcHRyIF9kdXBsaWNhdGUoVGhyZWFkUG9saWN5X3B0ciBw
KTsgc3RhdGljIFRocmVhZFBvbGljeV9wdHIgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0ciBwKTsg
c3RhdGljIFRocmVhZFBvbGljeV9wdHIgX25pbCgpOyBzdGF0aWMgY29uc3QgY2hhciogX1BEX3Jl
cG9JZDsgcHJpdmF0ZTogVGhyZWFkUG9saWN5VmFsdWUgcGRfdmFsdWU7IH07IHR5cGVkZWYgX0NP
UkJBX1BzZXVkb09ial9WYXI8VGhyZWFkUG9saWN5PiBUaHJlYWRQb2xpY3lfdmFyOwogIGNsYXNz
IExpZmVzcGFuUG9saWN5OyB0eXBlZGVmIExpZmVzcGFuUG9saWN5KiBMaWZlc3BhblBvbGljeV9w
dHI7IHR5cGVkZWYgTGlmZXNwYW5Qb2xpY3lfcHRyIExpZmVzcGFuUG9saWN5UmVmOyBjbGFzcyBM
aWZlc3BhblBvbGljeSA6IHB1YmxpYyBDT1JCQTo6UG9saWN5IHsgcHVibGljOiBpbmxpbmUgTGlm
ZXNwYW5Qb2xpY3koTGlmZXNwYW5Qb2xpY3lWYWx1ZSB2YWx1ZSkgOiBDT1JCQTo6UG9saWN5KExJ
RkVTUEFOX1BPTElDWV9JRCksIHBkX3ZhbHVlKHZhbHVlKSB7fSBpbmxpbmUgTGlmZXNwYW5Qb2xp
Y3koKSB7fSB2aXJ0dWFsIH5MaWZlc3BhblBvbGljeSgpOyB2aXJ0dWFsIENPUkJBOjpQb2xpY3lf
cHRyIGNvcHkoKTsgdmlydHVhbCBMaWZlc3BhblBvbGljeVZhbHVlIHZhbHVlKCkgeyByZXR1cm4g
cGRfdmFsdWU7IH0gdmlydHVhbCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciogcmVwb0lk
KTsgc3RhdGljIExpZmVzcGFuUG9saWN5X3B0ciBfZHVwbGljYXRlKExpZmVzcGFuUG9saWN5X3B0
ciBwKTsgc3RhdGljIExpZmVzcGFuUG9saWN5X3B0ciBfbmFycm93KENPUkJBOjpPYmplY3RfcHRy
IHApOyBzdGF0aWMgTGlmZXNwYW5Qb2xpY3lfcHRyIF9uaWwoKTsgc3RhdGljIGNvbnN0IGNoYXIq
IF9QRF9yZXBvSWQ7IHByaXZhdGU6IExpZmVzcGFuUG9saWN5VmFsdWUgcGRfdmFsdWU7IH07IHR5
cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8TGlmZXNwYW5Qb2xpY3k+IExpZmVzcGFuUG9saWN5
X3ZhcjsKICBjbGFzcyBJZFVuaXF1ZW5lc3NQb2xpY3k7IHR5cGVkZWYgSWRVbmlxdWVuZXNzUG9s
aWN5KiBJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyOyB0eXBlZGVmIElkVW5pcXVlbmVzc1BvbGljeV9w
dHIgSWRVbmlxdWVuZXNzUG9saWN5UmVmOyBjbGFzcyBJZFVuaXF1ZW5lc3NQb2xpY3kgOiBwdWJs
aWMgQ09SQkE6OlBvbGljeSB7IHB1YmxpYzogaW5saW5lIElkVW5pcXVlbmVzc1BvbGljeShJZFVu
aXF1ZW5lc3NQb2xpY3lWYWx1ZSB2YWx1ZSkgOiBDT1JCQTo6UG9saWN5KElEX1VOSVFVRU5FU1Nf
UE9MSUNZX0lEKSwgcGRfdmFsdWUodmFsdWUpIHt9IGlubGluZSBJZFVuaXF1ZW5lc3NQb2xpY3ko
KSB7fSB2aXJ0dWFsIH5JZFVuaXF1ZW5lc3NQb2xpY3koKTsgdmlydHVhbCBDT1JCQTo6UG9saWN5
X3B0ciBjb3B5KCk7IHZpcnR1YWwgSWRVbmlxdWVuZXNzUG9saWN5VmFsdWUgdmFsdWUoKSB7IHJl
dHVybiBwZF92YWx1ZTsgfSB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKiBy
ZXBvSWQpOyBzdGF0aWMgSWRVbmlxdWVuZXNzUG9saWN5X3B0ciBfZHVwbGljYXRlKElkVW5pcXVl
bmVzc1BvbGljeV9wdHIgcCk7IHN0YXRpYyBJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIF9uYXJyb3co
Q09SQkE6Ok9iamVjdF9wdHIgcCk7IHN0YXRpYyBJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIF9uaWwo
KTsgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6IElkVW5pcXVlbmVzc1Bv
bGljeVZhbHVlIHBkX3ZhbHVlOyB9OyB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPElkVW5p
cXVlbmVzc1BvbGljeT4gSWRVbmlxdWVuZXNzUG9saWN5X3ZhcjsKICBjbGFzcyBJZEFzc2lnbm1l
bnRQb2xpY3k7IHR5cGVkZWYgSWRBc3NpZ25tZW50UG9saWN5KiBJZEFzc2lnbm1lbnRQb2xpY3lf
cHRyOyB0eXBlZGVmIElkQXNzaWdubWVudFBvbGljeV9wdHIgSWRBc3NpZ25tZW50UG9saWN5UmVm
OyBjbGFzcyBJZEFzc2lnbm1lbnRQb2xpY3kgOiBwdWJsaWMgQ09SQkE6OlBvbGljeSB7IHB1Ymxp
YzogaW5saW5lIElkQXNzaWdubWVudFBvbGljeShJZEFzc2lnbm1lbnRQb2xpY3lWYWx1ZSB2YWx1
ZSkgOiBDT1JCQTo6UG9saWN5KElEX0FTU0lHTk1FTlRfUE9MSUNZX0lEKSwgcGRfdmFsdWUodmFs
dWUpIHt9IGlubGluZSBJZEFzc2lnbm1lbnRQb2xpY3koKSB7fSB2aXJ0dWFsIH5JZEFzc2lnbm1l
bnRQb2xpY3koKTsgdmlydHVhbCBDT1JCQTo6UG9saWN5X3B0ciBjb3B5KCk7IHZpcnR1YWwgSWRB
c3NpZ25tZW50UG9saWN5VmFsdWUgdmFsdWUoKSB7IHJldHVybiBwZF92YWx1ZTsgfSB2aXJ0dWFs
IHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKiByZXBvSWQpOyBzdGF0aWMgSWRBc3NpZ25t
ZW50UG9saWN5X3B0ciBfZHVwbGljYXRlKElkQXNzaWdubWVudFBvbGljeV9wdHIgcCk7IHN0YXRp
YyBJZEFzc2lnbm1lbnRQb2xpY3lfcHRyIF9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIgcCk7IHN0
YXRpYyBJZEFzc2lnbm1lbnRQb2xpY3lfcHRyIF9uaWwoKTsgc3RhdGljIGNvbnN0IGNoYXIqIF9Q
RF9yZXBvSWQ7IHByaXZhdGU6IElkQXNzaWdubWVudFBvbGljeVZhbHVlIHBkX3ZhbHVlOyB9OyB0
eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPElkQXNzaWdubWVudFBvbGljeT4gSWRBc3NpZ25t
ZW50UG9saWN5X3ZhcjsKICBjbGFzcyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3k7IHR5cGVkZWYg
SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5KiBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyOyB0
eXBlZGVmIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgSW1wbGljaXRBY3RpdmF0aW9uUG9s
aWN5UmVmOyBjbGFzcyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3kgOiBwdWJsaWMgQ09SQkE6OlBv
bGljeSB7IHB1YmxpYzogaW5saW5lIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeShJbXBsaWNpdEFj
dGl2YXRpb25Qb2xpY3lWYWx1ZSB2YWx1ZSkgOiBDT1JCQTo6UG9saWN5KElNUExJQ0lUX0FDVElW
QVRJT05fUE9MSUNZX0lEKSwgcGRfdmFsdWUodmFsdWUpIHt9IGlubGluZSBJbXBsaWNpdEFjdGl2
YXRpb25Qb2xpY3koKSB7fSB2aXJ0dWFsIH5JbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3koKTsgdmly
dHVhbCBDT1JCQTo6UG9saWN5X3B0ciBjb3B5KCk7IHZpcnR1YWwgSW1wbGljaXRBY3RpdmF0aW9u
UG9saWN5VmFsdWUgdmFsdWUoKSB7IHJldHVybiBwZF92YWx1ZTsgfSB2aXJ0dWFsIHZvaWQqIF9w
dHJUb09ialJlZihjb25zdCBjaGFyKiByZXBvSWQpOyBzdGF0aWMgSW1wbGljaXRBY3RpdmF0aW9u
UG9saWN5X3B0ciBfZHVwbGljYXRlKEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgcCk7IHN0
YXRpYyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIF9uYXJyb3coQ09SQkE6Ok9iamVjdF9w
dHIgcCk7IHN0YXRpYyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIF9uaWwoKTsgc3RhdGlj
IGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6IEltcGxpY2l0QWN0aXZhdGlvblBvbGlj
eVZhbHVlIHBkX3ZhbHVlOyB9OyB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPEltcGxpY2l0
QWN0aXZhdGlvblBvbGljeT4gSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhcjsKCiAgY2xhc3Mg
U2VydmFudFJldGVudGlvblBvbGljeTsgdHlwZWRlZiBTZXJ2YW50UmV0ZW50aW9uUG9saWN5KiBT
ZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cjsgdHlwZWRlZiBTZXJ2YW50UmV0ZW50aW9uUG9saWN5
X3B0ciBTZXJ2YW50UmV0ZW50aW9uUG9saWN5UmVmOyBjbGFzcyBTZXJ2YW50UmV0ZW50aW9uUG9s
aWN5IDogcHVibGljIENPUkJBOjpQb2xpY3kgeyBwdWJsaWM6IGlubGluZSBTZXJ2YW50UmV0ZW50
aW9uUG9saWN5KFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lWYWx1ZSB2YWx1ZSkgOiBDT1JCQTo6UG9s
aWN5KFNFUlZBTlRfUkVURU5USU9OX1BPTElDWV9JRCksIHBkX3ZhbHVlKHZhbHVlKSB7fSBpbmxp
bmUgU2VydmFudFJldGVudGlvblBvbGljeSgpIHt9IHZpcnR1YWwgflNlcnZhbnRSZXRlbnRpb25Q
b2xpY3koKTsgdmlydHVhbCBDT1JCQTo6UG9saWN5X3B0ciBjb3B5KCk7IHZpcnR1YWwgU2VydmFu
dFJldGVudGlvblBvbGljeVZhbHVlIHZhbHVlKCkgeyByZXR1cm4gcGRfdmFsdWU7IH0gdmlydHVh
bCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciogcmVwb0lkKTsgc3RhdGljIFNlcnZhbnRS
ZXRlbnRpb25Qb2xpY3lfcHRyIF9kdXBsaWNhdGUoU2VydmFudFJldGVudGlvblBvbGljeV9wdHIg
cCk7IHN0YXRpYyBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciBfbmFycm93KENPUkJBOjpPYmpl
Y3RfcHRyIHApOyBzdGF0aWMgU2VydmFudFJldGVudGlvblBvbGljeV9wdHIgX25pbCgpOyBzdGF0
aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogU2VydmFudFJldGVudGlvblBvbGlj
eVZhbHVlIHBkX3ZhbHVlOyB9OyB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPFNlcnZhbnRS
ZXRlbnRpb25Qb2xpY3k+IFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfdmFyOwoKICBjbGFzcyBSZXF1
ZXN0UHJvY2Vzc2luZ1BvbGljeTsgdHlwZWRlZiBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSogUmVx
dWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyOyB0eXBlZGVmIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5
X3B0ciBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeVJlZjsgY2xhc3MgUmVxdWVzdFByb2Nlc3NpbmdQ
b2xpY3kgOiBwdWJsaWMgQ09SQkE6OlBvbGljeSB7IHB1YmxpYzogaW5saW5lIFJlcXVlc3RQcm9j
ZXNzaW5nUG9saWN5KFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5VmFsdWUgdmFsdWUpIDogQ09SQkE6
OlBvbGljeShSRVFVRVNUX1BST0NFU1NJTkdfUE9MSUNZX0lEKSwgcGRfdmFsdWUodmFsdWUpIHt9
IGlubGluZSBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSgpIHt9IHZpcnR1YWwgflJlcXVlc3RQcm9j
ZXNzaW5nUG9saWN5KCk7IHZpcnR1YWwgQ09SQkE6OlBvbGljeV9wdHIgY29weSgpOyB2aXJ0dWFs
IFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5VmFsdWUgdmFsdWUoKSB7IHJldHVybiBwZF92YWx1ZTsg
fSB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKiByZXBvSWQpOyBzdGF0aWMg
UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyIF9kdXBsaWNhdGUoUmVxdWVzdFByb2Nlc3NpbmdQ
b2xpY3lfcHRyIHApOyBzdGF0aWMgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyIF9uYXJyb3co
Q09SQkE6Ok9iamVjdF9wdHIgcCk7IHN0YXRpYyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIg
X25pbCgpOyBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogUmVxdWVzdFBy
b2Nlc3NpbmdQb2xpY3lWYWx1ZSBwZF92YWx1ZTsgfTsgdHlwZWRlZiBfQ09SQkFfUHNldWRvT2Jq
X1ZhcjxSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeT4gUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfdmFy
OwojIDM4OCAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3BvYS5oIiAzCiAgY2xhc3MgUE9B
TWFuYWdlcjsKICB0eXBlZGVmIFBPQU1hbmFnZXIqIFBPQU1hbmFnZXJfcHRyOwogIHR5cGVkZWYg
UE9BTWFuYWdlcl9wdHIgUE9BTWFuYWdlclJlZjsKCiAgY2xhc3MgUE9BTWFuYWdlciA6IHB1Ymxp
YyBDT1JCQTo6T2JqZWN0IHsKICBwdWJsaWM6CiAgICBjbGFzcyBBZGFwdGVySW5hY3RpdmUgOiBw
dWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBBZGFwdGVySW5hY3Rp
dmUoKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZu
TkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgQWRhcHRlckluYWN0aXZlKGNvbnN0IEFk
YXB0ZXJJbmFjdGl2ZSYgX2V4KSA6IFVzZXJFeGNlcHRpb24oX2V4KSB7fSBpbmxpbmUgQWRhcHRl
ckluYWN0aXZlJiBvcGVyYXRvcj0oY29uc3QgQWRhcHRlckluYWN0aXZlJiBfZXgpIHsgKiAoQ09S
QkE6OlVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+
QWRhcHRlckluYWN0aXZlKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIEFkYXB0ZXJJ
bmFjdGl2ZSogX2Rvd25jYXN0KENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEFkYXB0
ZXJJbmFjdGl2ZSogX2Rvd25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGlu
bGluZSBBZGFwdGVySW5hY3RpdmUqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlvbiogX2V4KSB7IHJl
dHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXpl
X3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1
ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVy
ZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0
cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikge30g
c3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBpbnNlcnRF
eGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3QgY2hhciogX1BE
X3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRl
KCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2aXJ0dWFs
IGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2b2lkIF9O
UF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFy
c2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwoKICAgIHZpcnR1YWwgdm9pZCBhY3Rp
dmF0ZSgpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBob2xkX3JlcXVlc3RzKENPUkJBOjpCb29sZWFu
IHdhaXRfZm9yX2NvbXBsZXRpb24pID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkaXNjYXJkX3JlcXVl
c3RzKENPUkJBOjpCb29sZWFuIHdhaXRfZm9yX2NvbXBsZXRpb24pID0gMDsKICAgIHZpcnR1YWwg
dm9pZCBkZWFjdGl2YXRlKENPUkJBOjpCb29sZWFuIGV0aGVyZWFsaXplX29iamVjdHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiB3YWl0X2Zvcl9jb21wbGV0aW9u
KSA9IDA7CgogICAgZW51bSBTdGF0ZSB7IEhPTERJTkcsIEFDVElWRSwgRElTQ0FSRElORywgSU5B
Q1RJVkUgfTsKCiAgICB2aXJ0dWFsIFN0YXRlIGdldF9zdGF0ZSgpID0gMDsKCgoKICAgIHN0YXRp
YyBQT0FNYW5hZ2VyX3B0ciBfZHVwbGljYXRlKFBPQU1hbmFnZXJfcHRyKTsKICAgIHN0YXRpYyBQ
T0FNYW5hZ2VyX3B0ciBfbmFycm93KENPUkJBOjpPYmplY3RfcHRyKTsKICAgIHN0YXRpYyBQT0FN
YW5hZ2VyX3B0ciBfbmlsKCk7CgoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoK
ICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgUE9BTWFuYWdlcihpbnQgaXNfbmlsID0gMCkgewogICAg
ICBfUFJfc2V0b2JqKChvbW5pT2JqUmVmKikgKGlzX25pbCA/IDA6MSkpOwogICAgfQogICAgdmly
dHVhbCB+UE9BTWFuYWdlcigpOwoKICBwcml2YXRlOgogICAgUE9BTWFuYWdlcihjb25zdCBQT0FN
YW5hZ2VyJik7CiAgICBQT0FNYW5hZ2VyJiBvcGVyYXRvcj0oY29uc3QgUE9BTWFuYWdlciYpOwog
IH07CgogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8UE9BTWFuYWdlcj4gUE9BTWFuYWdl
cl92YXI7CgoKCgoKICBjbGFzcyBfb2JqcmVmX0FkYXB0ZXJBY3RpdmF0b3I7CiAgY2xhc3MgX29i
anJlZl9TZXJ2YW50TWFuYWdlcjsKCgogIGNsYXNzIFBPQSA6IHB1YmxpYyBDT1JCQTo6T2JqZWN0
IHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBQT0EqIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgX0NP
UkJBX1BzZXVkb09ial9WYXI8UE9BPiBfdmFyX3R5cGU7CgoKCiAgICBjbGFzcyBBZGFwdGVyQWxy
ZWFkeUV4aXN0cyA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5l
IEFkYXB0ZXJBbHJlYWR5RXhpc3RzKCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlG
bjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIEFkYXB0
ZXJBbHJlYWR5RXhpc3RzKGNvbnN0IEFkYXB0ZXJBbHJlYWR5RXhpc3RzJiBfZXgpIDogVXNlckV4
Y2VwdGlvbihfZXgpIHt9IGlubGluZSBBZGFwdGVyQWxyZWFkeUV4aXN0cyYgb3BlcmF0b3I9KGNv
bnN0IEFkYXB0ZXJBbHJlYWR5RXhpc3RzJiBfZXgpIHsgKiAoQ09SQkE6OlVzZXJFeGNlcHRpb24q
KSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+QWRhcHRlckFscmVhZHlFeGlz
dHMoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgQWRhcHRlckFscmVhZHlFeGlzdHMq
IF9kb3duY2FzdChDT1JCQTo6RXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBBZGFwdGVyQWxyZWFk
eUV4aXN0cyogX2Rvd25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGlubGlu
ZSBBZGFwdGVyQWxyZWFkeUV4aXN0cyogX25hcnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBfZXgpIHsg
cmV0dXJuIF9kb3duY2FzdChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNp
emVfdCBvcykgY29uc3QgeyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0
QnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZm
ZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVk
U3RyZWFtJikge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7
fSBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2Vy
dEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBf
UERfcmVwb0lkOyBwcml2YXRlOiB2aXJ0dWFsIENPUkJBOjpFeGNlcHRpb24qIF9OUF9kdXBsaWNh
dGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1
YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQg
X05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9t
YXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CiAgICBjbGFzcyBBZGFwdGVySW5h
Y3RpdmUgOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBBZGFw
dGVySW5hY3RpdmUoKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNl
cnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgQWRhcHRlckluYWN0aXZl
KGNvbnN0IEFkYXB0ZXJJbmFjdGl2ZSYgX2V4KSA6IFVzZXJFeGNlcHRpb24oX2V4KSB7fSBpbmxp
bmUgQWRhcHRlckluYWN0aXZlJiBvcGVyYXRvcj0oY29uc3QgQWRhcHRlckluYWN0aXZlJiBfZXgp
IHsgKiAoQ09SQkE6OlVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7IH0g
dmlydHVhbCB+QWRhcHRlckluYWN0aXZlKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGlj
IEFkYXB0ZXJJbmFjdGl2ZSogX2Rvd25jYXN0KENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGNv
bnN0IEFkYXB0ZXJJbmFjdGl2ZSogX2Rvd25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsg
c3RhdGljIGlubGluZSBBZGFwdGVySW5hY3RpdmUqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlvbiog
X2V4KSB7IHJldHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVk
U2l6ZShzaXplX3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9y
Pj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0o
TWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRC
dWZmZXJlZFN0cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3Ry
ZWFtJikge30gc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRp
YyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3Qg
Y2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBf
ZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0
OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVh
bCB2b2lkIF9OUF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9p
ZCBfTlBfbWFyc2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwogICAgY2xhc3MgQWRh
cHRlck5vbkV4aXN0ZW50IDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uIHsgcHVibGljOiBp
bmxpbmUgQWRhcHRlck5vbkV4aXN0ZW50KCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9B
bnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIEFk
YXB0ZXJOb25FeGlzdGVudChjb25zdCBBZGFwdGVyTm9uRXhpc3RlbnQmIF9leCkgOiBVc2VyRXhj
ZXB0aW9uKF9leCkge30gaW5saW5lIEFkYXB0ZXJOb25FeGlzdGVudCYgb3BlcmF0b3I9KGNvbnN0
IEFkYXB0ZXJOb25FeGlzdGVudCYgX2V4KSB7ICogKENPUkJBOjpVc2VyRXhjZXB0aW9uKikgdGhp
cyA9IF9leDsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfkFkYXB0ZXJOb25FeGlzdGVudCgpOyB2
aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBBZGFwdGVyTm9uRXhpc3RlbnQqIF9kb3duY2Fz
dChDT1JCQTo6RXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBBZGFwdGVyTm9uRXhpc3RlbnQqIF9k
b3duY2FzdChjb25zdCBDT1JCQTo6RXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgQWRhcHRlck5v
bkV4aXN0ZW50KiBfbmFycm93KENPUkJBOjpFeGNlcHRpb24qIF9leCkgeyByZXR1cm4gX2Rvd25j
YXN0KF9leCk7IH0gaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IG9zKSBjb25z
dCB7IHJldHVybiBvczsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShOZXRCdWZmZXJlZFN0cmVh
bSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE1lbUJ1ZmZlcmVkU3RyZWFtJikg
Y29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVmZmVyZWRTdHJlYW0mKSB7fSBp
bmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0cmVhbSYpIHt9IHN0YXRpYyBpbnNl
cnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9B
bnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7IHBy
aXZhdGU6IHZpcnR1YWwgQ09SQkE6OkV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFy
KiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChO
ZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTWVtQnVm
ZmVyZWRTdHJlYW0mKSBjb25zdDsgfTsKICAgIGNsYXNzIE5vU2VydmFudCA6IHB1YmxpYyBDT1JC
QTo6VXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIE5vU2VydmFudCgpIHsgcGRfaW5zZXJ0
VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0Fu
eUZuTkNQOyB9IGlubGluZSBOb1NlcnZhbnQoY29uc3QgTm9TZXJ2YW50JiBfZXgpIDogVXNlckV4
Y2VwdGlvbihfZXgpIHt9IGlubGluZSBOb1NlcnZhbnQmIG9wZXJhdG9yPShjb25zdCBOb1NlcnZh
bnQmIF9leCkgeyAqIChDT1JCQTo6VXNlckV4Y2VwdGlvbiopIHRoaXMgPSBfZXg7IHJldHVybiAq
dGhpczsgfSB2aXJ0dWFsIH5Ob1NlcnZhbnQoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0
aWMgTm9TZXJ2YW50KiBfZG93bmNhc3QoQ09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3Qg
Tm9TZXJ2YW50KiBfZG93bmNhc3QoY29uc3QgQ09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgaW5s
aW5lIE5vU2VydmFudCogX25hcnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9k
b3duY2FzdChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykg
Y29uc3QgeyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRT
dHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVh
bSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikg
e30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMg
aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlv
blRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lk
OyBwcml2YXRlOiB2aXJ0dWFsIENPUkJBOjpFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25z
dDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1YWwgY29uc3Qg
Y2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNo
YWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1l
bUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CiAgICBjbGFzcyBPYmplY3RBbHJlYWR5QWN0aXZl
IDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgT2JqZWN0QWxy
ZWFkeUFjdGl2ZSgpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2Vy
dFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBPYmplY3RBbHJlYWR5QWN0
aXZlKGNvbnN0IE9iamVjdEFscmVhZHlBY3RpdmUmIF9leCkgOiBVc2VyRXhjZXB0aW9uKF9leCkg
e30gaW5saW5lIE9iamVjdEFscmVhZHlBY3RpdmUmIG9wZXJhdG9yPShjb25zdCBPYmplY3RBbHJl
YWR5QWN0aXZlJiBfZXgpIHsgKiAoQ09SQkE6OlVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyBy
ZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+T2JqZWN0QWxyZWFkeUFjdGl2ZSgpOyB2aXJ0dWFsIHZv
aWQgX3JhaXNlKCk7IHN0YXRpYyBPYmplY3RBbHJlYWR5QWN0aXZlKiBfZG93bmNhc3QoQ09SQkE6
OkV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgT2JqZWN0QWxyZWFkeUFjdGl2ZSogX2Rvd25jYXN0
KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBPYmplY3RBbHJlYWR5QWN0
aXZlKiBfbmFycm93KENPUkJBOjpFeGNlcHRpb24qIF9leCkgeyByZXR1cm4gX2Rvd25jYXN0KF9l
eCk7IH0gaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IG9zKSBjb25zdCB7IHJl
dHVybiBvczsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNv
bnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qg
e30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVmZmVyZWRTdHJlYW0mKSB7fSBpbmxpbmUg
dm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0cmVhbSYpIHt9IHN0YXRpYyBpbnNlcnRFeGNl
cHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1Ag
aW5zZXJ0VG9BbnlGbk5DUDsgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6
IHZpcnR1YWwgQ09SQkE6OkV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFs
IGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBf
cmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChOZXRCdWZm
ZXJlZFN0cmVhbSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTWVtQnVmZmVyZWRT
dHJlYW0mKSBjb25zdDsgfTsKICAgIGNsYXNzIE9iamVjdE5vdEFjdGl2ZSA6IHB1YmxpYyBDT1JC
QTo6VXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIE9iamVjdE5vdEFjdGl2ZSgpIHsgcGRf
aW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNl
cnRUb0FueUZuTkNQOyB9IGlubGluZSBPYmplY3ROb3RBY3RpdmUoY29uc3QgT2JqZWN0Tm90QWN0
aXZlJiBfZXgpIDogVXNlckV4Y2VwdGlvbihfZXgpIHt9IGlubGluZSBPYmplY3ROb3RBY3RpdmUm
IG9wZXJhdG9yPShjb25zdCBPYmplY3ROb3RBY3RpdmUmIF9leCkgeyAqIChDT1JCQTo6VXNlckV4
Y2VwdGlvbiopIHRoaXMgPSBfZXg7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5PYmplY3ROb3RB
Y3RpdmUoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgT2JqZWN0Tm90QWN0aXZlKiBf
ZG93bmNhc3QoQ09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgT2JqZWN0Tm90QWN0aXZl
KiBfZG93bmNhc3QoY29uc3QgQ09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIE9iamVj
dE5vdEFjdGl2ZSogX25hcnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3du
Y2FzdChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykgY29u
c3QgeyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJl
YW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYp
IGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30g
aW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5z
ZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlvblRv
QW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBw
cml2YXRlOiB2aXJ0dWFsIENPUkJBOjpFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsg
dmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hh
ciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwo
TmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1
ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CiAgICBjbGFzcyBTZXJ2YW50QWxyZWFkeUFjdGl2ZSA6
IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIFNlcnZhbnRBbHJl
YWR5QWN0aXZlKCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0
VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIFNlcnZhbnRBbHJlYWR5QWN0
aXZlKGNvbnN0IFNlcnZhbnRBbHJlYWR5QWN0aXZlJiBfZXgpIDogVXNlckV4Y2VwdGlvbihfZXgp
IHt9IGlubGluZSBTZXJ2YW50QWxyZWFkeUFjdGl2ZSYgb3BlcmF0b3I9KGNvbnN0IFNlcnZhbnRB
bHJlYWR5QWN0aXZlJiBfZXgpIHsgKiAoQ09SQkE6OlVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4
OyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+U2VydmFudEFscmVhZHlBY3RpdmUoKTsgdmlydHVh
bCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgU2VydmFudEFscmVhZHlBY3RpdmUqIF9kb3duY2FzdChD
T1JCQTo6RXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBTZXJ2YW50QWxyZWFkeUFjdGl2ZSogX2Rv
d25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBTZXJ2YW50QWxy
ZWFkeUFjdGl2ZSogX25hcnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3du
Y2FzdChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykgY29u
c3QgeyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJl
YW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYp
IGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30g
aW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5z
ZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlvblRv
QW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBw
cml2YXRlOiB2aXJ0dWFsIENPUkJBOjpFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsg
dmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hh
ciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwo
TmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1
ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CiAgICBjbGFzcyBTZXJ2YW50Tm90QWN0aXZlIDogcHVi
bGljIENPUkJBOjpVc2VyRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgU2VydmFudE5vdEFjdGl2
ZSgpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5O
Q1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBTZXJ2YW50Tm90QWN0aXZlKGNvbnN0IFNl
cnZhbnROb3RBY3RpdmUmIF9leCkgOiBVc2VyRXhjZXB0aW9uKF9leCkge30gaW5saW5lIFNlcnZh
bnROb3RBY3RpdmUmIG9wZXJhdG9yPShjb25zdCBTZXJ2YW50Tm90QWN0aXZlJiBfZXgpIHsgKiAo
Q09SQkE6OlVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7IH0gdmlydHVh
bCB+U2VydmFudE5vdEFjdGl2ZSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBTZXJ2
YW50Tm90QWN0aXZlKiBfZG93bmNhc3QoQ09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3Qg
U2VydmFudE5vdEFjdGl2ZSogX2Rvd25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsgc3Rh
dGljIGlubGluZSBTZXJ2YW50Tm90QWN0aXZlKiBfbmFycm93KENPUkJBOjpFeGNlcHRpb24qIF9l
eCkgeyByZXR1cm4gX2Rvd25jYXN0KF9leCk7IH0gaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNp
emUoc2l6ZV90IG9zKSBjb25zdCB7IHJldHVybiBvczsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+
PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE1l
bUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVm
ZmVyZWRTdHJlYW0mKSB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0cmVh
bSYpIHt9IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMg
aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgc3RhdGljIGNvbnN0IGNo
YXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6IHZpcnR1YWwgQ09SQkE6OkV4Y2VwdGlvbiogX05QX2R1
cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsg
dmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwg
dm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQg
X05QX21hcnNoYWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgfTsKICAgIGNsYXNzIFdyb25n
QWRhcHRlciA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIFdy
b25nQWRhcHRlcigpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2Vy
dFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBXcm9uZ0FkYXB0ZXIoY29u
c3QgV3JvbmdBZGFwdGVyJiBfZXgpIDogVXNlckV4Y2VwdGlvbihfZXgpIHt9IGlubGluZSBXcm9u
Z0FkYXB0ZXImIG9wZXJhdG9yPShjb25zdCBXcm9uZ0FkYXB0ZXImIF9leCkgeyAqIChDT1JCQTo6
VXNlckV4Y2VwdGlvbiopIHRoaXMgPSBfZXg7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5Xcm9u
Z0FkYXB0ZXIoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgV3JvbmdBZGFwdGVyKiBf
ZG93bmNhc3QoQ09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgV3JvbmdBZGFwdGVyKiBf
ZG93bmNhc3QoY29uc3QgQ09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIFdyb25nQWRh
cHRlciogX25hcnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3duY2FzdChf
ZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykgY29uc3QgeyBy
ZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJlYW0mKSBj
b25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0
IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30gaW5saW5l
IHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5zZXJ0RXhj
ZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55TkNQ
IGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2YXRl
OiB2aXJ0dWFsIENPUkJBOjpFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVh
bCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05Q
X3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTmV0QnVm
ZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1ZmZlcmVk
U3RyZWFtJikgY29uc3Q7IH07CiAgICBjbGFzcyBXcm9uZ1BvbGljeSA6IHB1YmxpYyBDT1JCQTo6
VXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIFdyb25nUG9saWN5KCkgeyBwZF9pbnNlcnRU
b0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55
Rm5OQ1A7IH0gaW5saW5lIFdyb25nUG9saWN5KGNvbnN0IFdyb25nUG9saWN5JiBfZXgpIDogVXNl
ckV4Y2VwdGlvbihfZXgpIHt9IGlubGluZSBXcm9uZ1BvbGljeSYgb3BlcmF0b3I9KGNvbnN0IFdy
b25nUG9saWN5JiBfZXgpIHsgKiAoQ09SQkE6OlVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyBy
ZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+V3JvbmdQb2xpY3koKTsgdmlydHVhbCB2b2lkIF9yYWlz
ZSgpOyBzdGF0aWMgV3JvbmdQb2xpY3kqIF9kb3duY2FzdChDT1JCQTo6RXhjZXB0aW9uKik7IHN0
YXRpYyBjb25zdCBXcm9uZ1BvbGljeSogX2Rvd25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24q
KTsgc3RhdGljIGlubGluZSBXcm9uZ1BvbGljeSogX25hcnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBf
ZXgpIHsgcmV0dXJuIF9kb3duY2FzdChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRT
aXplKHNpemVfdCBvcykgY29uc3QgeyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+
Pj0oTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShN
ZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1
ZmZlcmVkU3RyZWFtJikge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJl
YW0mKSB7fSBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGlj
IGluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBj
aGFyKiBfUERfcmVwb0lkOyBwcml2YXRlOiB2aXJ0dWFsIENPUkJBOjpFeGNlcHRpb24qIF9OUF9k
dXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7
IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFs
IHZvaWQgX05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lk
IF9OUF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CgogICAgY2xhc3MgSW52
YWxpZFBvbGljeSA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbiB7CiAgICBwdWJsaWM6CiAg
ICAgIENPUkJBOjpVU2hvcnQgaW5kZXg7CgogICAgICBpbmxpbmUgSW52YWxpZFBvbGljeSgpIHsK
ICAgICAgICBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsKICAgICAgICBwZF9pbnNl
cnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsKICAgICAgfQogICAgICBJbnZhbGlkUG9s
aWN5KGNvbnN0IEludmFsaWRQb2xpY3kmKTsKICAgICAgSW52YWxpZFBvbGljeShDT1JCQTo6VVNo
b3J0IGlfaW5kZXgpOwogICAgICBJbnZhbGlkUG9saWN5JiBvcGVyYXRvcj0oY29uc3QgSW52YWxp
ZFBvbGljeSYpOwogICAgICB2aXJ0dWFsIH5JbnZhbGlkUG9saWN5KCk7CiAgICAgIHZpcnR1YWwg
dm9pZCBfcmFpc2UoKTsKICAgICAgc3RhdGljIEludmFsaWRQb2xpY3kqIF9kb3duY2FzdChDT1JC
QTo6RXhjZXB0aW9uKik7CiAgICAgIHN0YXRpYyBjb25zdCBJbnZhbGlkUG9saWN5KiBfZG93bmNh
c3QoY29uc3QgQ09SQkE6OkV4Y2VwdGlvbiopOwogICAgICBzdGF0aWMgaW5saW5lIEludmFsaWRQ
b2xpY3kqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlvbiogZSkgewogICAgICAgIHJldHVybiBfZG93
bmNhc3QoZSk7CiAgICAgIH0KCiAgICAgIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90KSBj
b25zdDsKICAgICAgdm9pZCBvcGVyYXRvcj4+PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0Owog
ICAgICB2b2lkIG9wZXJhdG9yPj49KE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7CiAgICAgIHZv
aWQgb3BlcmF0b3I8PD0oTmV0QnVmZmVyZWRTdHJlYW0mKTsKICAgICAgdm9pZCBvcGVyYXRvcjw8
PShNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICAgICAgc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55
IGluc2VydFRvQW55Rm47CiAgICAgIHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNl
cnRUb0FueUZuTkNQOwoKICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7CgogICAg
cHJpdmF0ZToKICAgICAgdmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkg
Y29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OwogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KikgY29uc3Q7CiAgICAgIHZpcnR1
YWwgdm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OwogICAgICB2aXJ0
dWFsIHZvaWQgX05QX21hcnNoYWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsKICAgIH07CgoK
CiAgICB2aXJ0dWFsIFBPQV9wdHIgY3JlYXRlX1BPQShjb25zdCBjaGFyKiBhZGFwdGVyX25hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT0FNYW5hZ2VyX3B0ciBhX1BPQU1hbmFn
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDT1JCQTo6UG9saWN5TGlz
dCYgcG9saWNpZXMpID0gMDsKCiAgICB2aXJ0dWFsIFBPQV9wdHIgZmluZF9QT0EoY29uc3QgY2hh
ciogYWRhcHRlcl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29s
ZWFuIGFjdGl2YXRlX2l0KSA9IDA7CgogICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koQ09SQkE6OkJv
b2xlYW4gZXRoZXJlYWxpemVfb2JqZWN0cywKICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
OjpCb29sZWFuIHdhaXRfZm9yX2NvbXBsZXRpb24pID0gMDsKCgoKICAgIHZpcnR1YWwgVGhyZWFk
UG9saWN5X3B0cgogICAgICBjcmVhdGVfdGhyZWFkX3BvbGljeShUaHJlYWRQb2xpY3lWYWx1ZSB2
KTsKICAgIHZpcnR1YWwgTGlmZXNwYW5Qb2xpY3lfcHRyCiAgICAgIGNyZWF0ZV9saWZlc3Bhbl9w
b2xpY3koTGlmZXNwYW5Qb2xpY3lWYWx1ZSB2KTsKICAgIHZpcnR1YWwgSWRVbmlxdWVuZXNzUG9s
aWN5X3B0cgogICAgICBjcmVhdGVfaWRfdW5pcXVlbmVzc19wb2xpY3koSWRVbmlxdWVuZXNzUG9s
aWN5VmFsdWUgdik7CiAgICB2aXJ0dWFsIElkQXNzaWdubWVudFBvbGljeV9wdHIKICAgICAgY3Jl
YXRlX2lkX2Fzc2lnbm1lbnRfcG9saWN5KElkQXNzaWdubWVudFBvbGljeVZhbHVlIHYpOwogICAg
dmlydHVhbCBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyCiAgICAgIGNyZWF0ZV9pbXBsaWNp
dF9hY3RpdmF0aW9uX3BvbGljeShJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lWYWx1ZSB2KTsKICAg
IHZpcnR1YWwgU2VydmFudFJldGVudGlvblBvbGljeV9wdHIKICAgICAgY3JlYXRlX3NlcnZhbnRf
cmV0ZW50aW9uX3BvbGljeShTZXJ2YW50UmV0ZW50aW9uUG9saWN5VmFsdWUgdik7CiAgICB2aXJ0
dWFsIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0cgogICAgICBjcmVhdGVfcmVxdWVzdF9wcm9j
ZXNzaW5nX3BvbGljeShSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeVZhbHVlIHYpOwoKCgogICAgdmly
dHVhbCBjaGFyKiB0aGVfbmFtZSgpID0gMDsKICAgIHZpcnR1YWwgUE9BX3B0ciB0aGVfcGFyZW50
KCkgPSAwOwogICAgdmlydHVhbCBQT0FMaXN0KiB0aGVfY2hpbGRyZW4oKSA9IDA7CiAgICB2aXJ0
dWFsIFBPQU1hbmFnZXJfcHRyIHRoZV9QT0FNYW5hZ2VyKCkgPSAwOwogICAgdmlydHVhbCBfb2Jq
cmVmX0FkYXB0ZXJBY3RpdmF0b3IqIHRoZV9hY3RpdmF0b3IoKSA9IDA7CiAgICB2aXJ0dWFsIHZv
aWQgdGhlX2FjdGl2YXRvcihfb2JqcmVmX0FkYXB0ZXJBY3RpdmF0b3IqIGFhKSA9IDA7CgoKCiAg
ICB2aXJ0dWFsIF9vYmpyZWZfU2VydmFudE1hbmFnZXIqIGdldF9zZXJ2YW50X21hbmFnZXIoKSA9
IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0X3NlcnZhbnRfbWFuYWdlcihfb2JqcmVmX1NlcnZhbnRN
YW5hZ2VyKiBpbWdyKSA9IDA7CgoKCiAgICB2aXJ0dWFsIFNlcnZhbnQgZ2V0X3NlcnZhbnQoKSA9
IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0X3NlcnZhbnQoU2VydmFudCBwX3NlcnZhbnQpID0gMDsK
CgoKICAgIHZpcnR1YWwgT2JqZWN0SWQqIGFjdGl2YXRlX29iamVjdChTZXJ2YW50IHBfc2VydmFu
dCkgPSAwOwogICAgdmlydHVhbCB2b2lkIGFjdGl2YXRlX29iamVjdF93aXRoX2lkKGNvbnN0IE9i
amVjdElkJiBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2
YW50IHBfc2VydmFudCkgPSAwOwogICAgdmlydHVhbCB2b2lkIGRlYWN0aXZhdGVfb2JqZWN0KGNv
bnN0IE9iamVjdElkJiBvaWQpID0gMDsKCgoKICAgIHZpcnR1YWwgQ09SQkE6Ok9iamVjdF9wdHIg
Y3JlYXRlX3JlZmVyZW5jZShjb25zdCBjaGFyKiBpbnRmKSA9IDA7CiAgICB2aXJ0dWFsIENPUkJB
OjpPYmplY3RfcHRyIGNyZWF0ZV9yZWZlcmVuY2Vfd2l0aF9pZChjb25zdCBPYmplY3RJZCYgb2lk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGludGYpID0gMDsKCgoKICAgIHZpcnR1YWwgT2JqZWN0SWQqIHNlcnZhbnRfdG9faWQoU2Vy
dmFudCBwX3NlcnZhbnQpID0gMDsKICAgIHZpcnR1YWwgQ09SQkE6Ok9iamVjdF9wdHIgc2VydmFu
dF90b19yZWZlcmVuY2UoU2VydmFudCBwX3NlcnZhbnQpID0gMDsKICAgIHZpcnR1YWwgU2VydmFu
dCByZWZlcmVuY2VfdG9fc2VydmFudChDT1JCQTo6T2JqZWN0X3B0ciByZWZlcmVuY2UpID0gMDsK
ICAgIHZpcnR1YWwgT2JqZWN0SWQqIHJlZmVyZW5jZV90b19pZChDT1JCQTo6T2JqZWN0X3B0ciBy
ZWZlcmVuY2UpID0gMDsKICAgIHZpcnR1YWwgU2VydmFudCBpZF90b19zZXJ2YW50KGNvbnN0IE9i
amVjdElkJiBvaWQpID0gMDsKICAgIHZpcnR1YWwgQ09SQkE6Ok9iamVjdF9wdHIgaWRfdG9fcmVm
ZXJlbmNlKGNvbnN0IE9iamVjdElkJiBvaWQpID0gMDsKCgoKCgogICAgc3RhdGljIFBPQV9wdHIg
X2R1cGxpY2F0ZShQT0FfcHRyKTsKICAgIHN0YXRpYyBQT0FfcHRyIF9uYXJyb3coQ09SQkE6Ok9i
amVjdF9wdHIpOwogICAgc3RhdGljIFBPQV9wdHIgX25pbCgpOwoKCiAgICBzdGF0aWMgY29uc3Qg
Y2hhciogX1BEX3JlcG9JZDsKICAgIHN0YXRpYyBQT0FfcHRyIF90aGVfcm9vdF9wb2EoKTsKCiAg
cHJvdGVjdGVkOgogICAgaW5saW5lIFBPQShpbnQgbmlsKSB7IF9QUl9zZXRvYmooKG9tbmlPYmpS
ZWYqKSAobmlsID8gMDoxKSk7IH0KICAgIHZpcnR1YWwgflBPQSgpOwoKICBwcml2YXRlOgogICAg
UE9BKGNvbnN0IFBPQSYpOwogICAgUE9BJiBvcGVyYXRvcj0oY29uc3QgUE9BJik7CiAgfTsKCiAg
dHlwZWRlZiBQT0E6Ol92YXJfdHlwZSBQT0FfdmFyOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09i
al9NZW1iZXI8UE9BLCBQT0FfdmFyPiBQT0FfbWVtYmVyOwojIDYxOSAiL3Vzci9sb2NhbC9pbmNs
dWRlL29tbmlPUkIzL3BvYS5oIiAzCiAgY2xhc3MgU2VydmFudEJhc2UgOiBwdWJsaWMgdmlydHVh
bCBvbW5pU2VydmFudCB7CiAgcHVibGljOgogICAgdmlydHVhbCB+U2VydmFudEJhc2UoKTsKCiAg
ICB2aXJ0dWFsIFBPQV9wdHIgX2RlZmF1bHRfUE9BKCk7CgoKCgogICAgdmlydHVhbCBDT1JCQTo6
X29ianJlZl9JbnRlcmZhY2VEZWYqIF9nZXRfaW50ZXJmYWNlKCk7CiMgNjQxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvb21uaU9SQjMvcG9hLmgiIDMKICAgIHZpcnR1YWwgdm9pZCBfYWRkX3JlZigpOwog
ICAgdmlydHVhbCB2b2lkIF9yZW1vdmVfcmVmKCk7CgogIHByb3RlY3RlZDoKICAgIGlubGluZSBT
ZXJ2YW50QmFzZSgpIHt9CiAgICBpbmxpbmUgU2VydmFudEJhc2UoY29uc3QgU2VydmFudEJhc2Um
KSB7fQogICAgaW5saW5lIFNlcnZhbnRCYXNlJiBvcGVyYXRvciA9IChjb25zdCBTZXJ2YW50QmFz
ZSYpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgdm9pZCogX2RvX3RoaXMoY29uc3QgY2hhciogcmVw
b0lkKTsKCiAgcHJpdmF0ZToKICAgIHZpcnR1YWwgb21uaU9ialJlZiogX2RvX2dldF9pbnRlcmZh
Y2UoKTsKICAgIHZpcnR1YWwgdm9pZCogX2Rvd25jYXN0KCk7CgogIH07CgoKCgoKICBjbGFzcyBS
ZWZDb3VudFNlcnZhbnRCYXNlIDogcHVibGljIHZpcnR1YWwgU2VydmFudEJhc2UgewogIHB1Ymxp
YzoKICAgIHZpcnR1YWwgflJlZkNvdW50U2VydmFudEJhc2UoKTsKCiAgICB2aXJ0dWFsIHZvaWQg
X2FkZF9yZWYoKTsKICAgIHZpcnR1YWwgdm9pZCBfcmVtb3ZlX3JlZigpOwoKICBwcm90ZWN0ZWQ6
CiAgICBpbmxpbmUgUmVmQ291bnRTZXJ2YW50QmFzZSgpIDogcGRfcmVmQ291bnQoMSkge30KICAg
IGlubGluZSBSZWZDb3VudFNlcnZhbnRCYXNlKGNvbnN0IFJlZkNvdW50U2VydmFudEJhc2UmKSA6
IHBkX3JlZkNvdW50KDEpIHt9CiAgICBpbmxpbmUgUmVmQ291bnRTZXJ2YW50QmFzZSYgb3BlcmF0
b3IgPSAoY29uc3QgUmVmQ291bnRTZXJ2YW50QmFzZSYpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9
CgogIHByaXZhdGU6CiAgICBpbnQgcGRfcmVmQ291bnQ7CiAgfTsKCgoKCgogIGNsYXNzIFNlcnZh
bnRCYXNlX3ZhciB7CiAgcHVibGljOgogICAgdHlwZWRlZiBTZXJ2YW50QmFzZSogVF9wdHI7CiAg
ICB0eXBlZGVmIFNlcnZhbnRCYXNlX3ZhciBUX3ZhcjsKCiAgICBpbmxpbmUgU2VydmFudEJhc2Vf
dmFyKCkgOiBwZF9kYXRhKDApIHt9CiAgICBpbmxpbmUgU2VydmFudEJhc2VfdmFyKFRfcHRyIHAp
IDogcGRfZGF0YShwKSB7fQogICAgaW5saW5lIFNlcnZhbnRCYXNlX3Zhcihjb25zdCBUX3ZhciYg
dikgOiBwZF9kYXRhKHYucGRfZGF0YSkKICAgICAgeyBpZiggcGRfZGF0YSApIHBkX2RhdGEtPl9h
ZGRfcmVmKCk7IH0KCiAgICBpbmxpbmUgflNlcnZhbnRCYXNlX3ZhcigpIHsgaWYoIHBkX2RhdGEg
KSBwZF9kYXRhLT5fcmVtb3ZlX3JlZigpOyB9CgogICAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9
IChUX3B0ciBwKSB7CiAgICAgIGlmKCBwZF9kYXRhICkgcGRfZGF0YS0+X3JlbW92ZV9yZWYoKTsK
ICAgICAgcGRfZGF0YSA9IHA7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIGlubGluZSBU
X3ZhciYgb3BlcmF0b3IgPSAoVF92YXIgdikgewogICAgICBpZiggcGRfZGF0YSApIHBkX2RhdGEt
Pl9yZW1vdmVfcmVmKCk7CiAgICAgIGlmKCAocGRfZGF0YSA9IHYucGRfZGF0YSkgKSBwZF9kYXRh
LT5fYWRkX3JlZigpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgaW5saW5lIG9wZXJh
dG9yIFRfcHRyICgpIGNvbnN0IHsgcmV0dXJuIHBkX2RhdGE7IH0KICAgIGlubGluZSBUX3B0ciBv
cGVyYXRvciAtPiAoKSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CgogICAgaW5saW5lIFRfcHRy
IGluKCkgY29uc3QgeyByZXR1cm4gcGRfZGF0YTsgfQogICAgaW5saW5lIFRfcHRyJiBpbm91dCgp
IHsgcmV0dXJuIHBkX2RhdGE7IH0KICAgIGlubGluZSBUX3B0ciYgb3V0KCkgewogICAgICBpZigg
cGRfZGF0YSApIHsgcGRfZGF0YS0+X3JlbW92ZV9yZWYoKTsgcGRfZGF0YSA9IDA7IH0KICAgICAg
cmV0dXJuIHBkX2RhdGE7CiAgICB9CiAgICBpbmxpbmUgVF9wdHIgX3JldG4oKSB7IFRfcHRyIHRt
cCA9IHBkX2RhdGE7IHBkX2RhdGEgPSAwOyByZXR1cm4gdG1wOyB9CgogIHByaXZhdGU6CiAgICBU
X3B0ciBwZF9kYXRhOwogIH07CgoKCgoKICBjbGFzcyBEeW5hbWljSW1wbGVtZW50YXRpb24gOiBw
dWJsaWMgdmlydHVhbCBTZXJ2YW50QmFzZSB7CiAgcHVibGljOgogICAgdmlydHVhbCB+RHluYW1p
Y0ltcGxlbWVudGF0aW9uKCk7CgogICAgQ09SQkE6Ok9iamVjdF9wdHIgX3RoaXMoKTsKCiAgICB2
aXJ0dWFsIHZvaWQgaW52b2tlKENPUkJBOjpTZXJ2ZXJSZXF1ZXN0X3B0ciByZXF1ZXN0KSA9IDA7
CiAgICB2aXJ0dWFsIGNoYXIqIF9wcmltYXJ5X2ludGVyZmFjZShjb25zdCBPYmplY3RJZCYgb2lk
LCBQT0FfcHRyIHBvYSkgPSAwOwoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hKGNv
bnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9pZCk7CgoKCgogICAgdmlydHVhbCBfQ09SQkFfQm9vbGVh
biBfZGlzcGF0Y2goR0lPUF9TJik7CgoKCiAgcHJpdmF0ZToKICAgIHZpcnR1YWwgb21uaU9ialJl
ZiogX2RvX2dldF9pbnRlcmZhY2UoKTsKICB9OwoKCgoKCiAgICAgICAgICAgICAgICAgICBjaGFy
KiBPYmplY3RJZF90b19zdHJpbmcoY29uc3QgT2JqZWN0SWQmIGlkKTsKICAgICAgICAgICAgICAg
ICAgIE9iamVjdElkKiBzdHJpbmdfdG9fT2JqZWN0SWQoY29uc3QgY2hhciogcyk7CgoKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcG9hX2RlZnMuaCIgMSAzCiMgNjIgIi91c3IvbG9j
YWwvaW5jbHVkZS9vbW5pT1JCMy9wb2FfZGVmcy5oIiAzCmNsYXNzIEZvcndhcmRSZXF1ZXN0IDog
cHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uIHsKcHVibGljOgogIENPUkJBOjpPYmplY3RfTWVt
YmVyIGZvcndhcmRfcmVmZXJlbmNlOwoKICBpbmxpbmUgRm9yd2FyZFJlcXVlc3QoKSB7CiAgICBw
ZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsKICAgIHBkX2luc2VydFRvQW55Rm5OQ1Ag
PSBpbnNlcnRUb0FueUZuTkNQOwogIH0KICBGb3J3YXJkUmVxdWVzdChjb25zdCBGb3J3YXJkUmVx
dWVzdCYpOwogIEZvcndhcmRSZXF1ZXN0KENPUkJBOjpPYmplY3RfcHRyIGlfZm9yd2FyZF9yZWZl
cmVuY2UpOwogIEZvcndhcmRSZXF1ZXN0JiBvcGVyYXRvcj0oY29uc3QgRm9yd2FyZFJlcXVlc3Qm
KTsKICB2aXJ0dWFsIH5Gb3J3YXJkUmVxdWVzdCgpOwogIHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsK
ICBzdGF0aWMgRm9yd2FyZFJlcXVlc3QqIF9kb3duY2FzdChDT1JCQTo6RXhjZXB0aW9uKik7CiAg
c3RhdGljIGNvbnN0IEZvcndhcmRSZXF1ZXN0KiBfZG93bmNhc3QoY29uc3QgQ09SQkE6OkV4Y2Vw
dGlvbiopOwogIHN0YXRpYyBpbmxpbmUgRm9yd2FyZFJlcXVlc3QqIF9uYXJyb3coQ09SQkE6OkV4
Y2VwdGlvbiogZSkgewogICAgcmV0dXJuIF9kb3duY2FzdChlKTsKICB9CgogIHNpemVfdCBfTlBf
YWxpZ25lZFNpemUoc2l6ZV90KSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVk
U3RyZWFtJikgY29uc3Q7CiAgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNv
bnN0OwogIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVmZmVyZWRTdHJlYW0mKTsKICB2b2lkIG9wZXJh
dG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJik7CgogIHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0Fu
eSBpbnNlcnRUb0FueUZuOwogIHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRU
b0FueUZuTkNQOwoKICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCnByaXZhdGU6CiAg
dmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7CiAgdmlydHVh
bCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBf
TlBfcmVwb0lkKGludCopIGNvbnN0OwogIHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChOZXRCdWZm
ZXJlZFN0cmVhbSYpIGNvbnN0OwogIHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChNZW1CdWZmZXJl
ZFN0cmVhbSYpIGNvbnN0Owp9OwoKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90
Y19Gb3J3YXJkUmVxdWVzdDsKIyAxMTAgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9wb2Ff
ZGVmcy5oIiAzCmNsYXNzIF9vYmpyZWZfQWRhcHRlckFjdGl2YXRvcjsKdHlwZWRlZiBfb2JqcmVm
X0FkYXB0ZXJBY3RpdmF0b3IqIEFkYXB0ZXJBY3RpdmF0b3JfcHRyOwp0eXBlZGVmIEFkYXB0ZXJB
Y3RpdmF0b3JfcHRyIEFkYXB0ZXJBY3RpdmF0b3JSZWY7CgpjbGFzcyBBZGFwdGVyQWN0aXZhdG9y
X0hlbHBlciB7CnB1YmxpYzoKICB0eXBlZGVmIEFkYXB0ZXJBY3RpdmF0b3JfcHRyIF9wdHJfdHlw
ZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlz
X25pbChfcHRyX3R5cGUpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICBzdGF0
aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRT
aXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9i
alJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0
cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFs
T2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFy
PF9vYmpyZWZfQWRhcHRlckFjdGl2YXRvciwgQWRhcHRlckFjdGl2YXRvcl9IZWxwZXI+IEFkYXB0
ZXJBY3RpdmF0b3JfdmFyOwp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX0Fk
YXB0ZXJBY3RpdmF0b3IsQWRhcHRlckFjdGl2YXRvcl9IZWxwZXIgPiBBZGFwdGVyQWN0aXZhdG9y
X291dDsKCgoKCmNsYXNzIEFkYXB0ZXJBY3RpdmF0b3IgewpwdWJsaWM6CgogIHR5cGVkZWYgQWRh
cHRlckFjdGl2YXRvcl9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgQWRhcHRlckFjdGl2YXRvcl92
YXIgX3Zhcl90eXBlOwoKICBzdGF0aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsK
ICBzdGF0aWMgX3B0cl90eXBlIF9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBf
cHRyX3R5cGUgX25pbCgpOwoKICBzdGF0aWMgaW5saW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0
cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRy
X3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFs
T2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgc3RhdGljIGlubGluZSBf
cHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09S
QkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBz
KTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFz
ZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBl
IF91bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmpl
Y3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBf
cHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsK
ICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsK
CgoKfTsKCgpjbGFzcyBfb2JqcmVmX0FkYXB0ZXJBY3RpdmF0b3IgOgogIHB1YmxpYyB2aXJ0dWFs
IENPUkJBOjpPYmplY3QsIHB1YmxpYyB2aXJ0dWFsIG9tbmlPYmpSZWYKewpwdWJsaWM6CiAgQ09S
QkE6OkJvb2xlYW4gdW5rbm93bl9hZGFwdGVyKFBPQV9wdHIgcGFyZW50LCBjb25zdCBjaGFyKiBu
YW1lKTsKCiAgaW5saW5lIF9vYmpyZWZfQWRhcHRlckFjdGl2YXRvcigpIHsgX1BSX3NldG9iaigw
KTsgfQogIF9vYmpyZWZfQWRhcHRlckFjdGl2YXRvcihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQ
cm9maWxlTGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7Cgpwcm90ZWN0
ZWQ6CiAgdmlydHVhbCB+X29ianJlZl9BZGFwdGVyQWN0aXZhdG9yKCk7Cgpwcml2YXRlOgogIHZp
cnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqKTsKCiAgX29ianJlZl9BZGFwdGVy
QWN0aXZhdG9yKGNvbnN0IF9vYmpyZWZfQWRhcHRlckFjdGl2YXRvciYpOwogIF9vYmpyZWZfQWRh
cHRlckFjdGl2YXRvciYgb3BlcmF0b3IgPSAoY29uc3QgX29ianJlZl9BZGFwdGVyQWN0aXZhdG9y
Jik7Cgp9OwoKCmNsYXNzIF9wb2ZfQWRhcHRlckFjdGl2YXRvciA6IHB1YmxpYyBwcm94eU9iamVj
dEZhY3RvcnkgewpwdWJsaWM6CiAgaW5saW5lIF9wb2ZfQWRhcHRlckFjdGl2YXRvcigpIDogcHJv
eHlPYmplY3RGYWN0b3J5KEFkYXB0ZXJBY3RpdmF0b3I6Ol9QRF9yZXBvSWQpIHt9CiAgdmlydHVh
bCB+X3BvZl9BZGFwdGVyQWN0aXZhdG9yKCk7CgogIHZpcnR1YWwgb21uaU9ialJlZiogbmV3T2Jq
UmVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwogIHZp
cnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFyKikgY29uc3Q7Cn07CgoKY2xhc3Mg
X2ltcGxfQWRhcHRlckFjdGl2YXRvciA6CiAgcHVibGljIHZpcnR1YWwgb21uaVNlcnZhbnQKewpw
dWJsaWM6CiAgdmlydHVhbCB+X2ltcGxfQWRhcHRlckFjdGl2YXRvcigpOwoKICB2aXJ0dWFsIENP
UkJBOjpCb29sZWFuIHVua25vd25fYWRhcHRlcihQT0FfcHRyIHBhcmVudCwgY29uc3QgY2hhciog
bmFtZSkgPSAwOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNo
KEdJT1BfUyYpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb0ludGVyZmFjZShjb25z
dCBjaGFyKik7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsKfTsK
CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQWRhcHRlckFjdGl2YXRvcjsK
IyAyMjggIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9wb2FfZGVmcy5oIiAzCmNsYXNzIF9v
YmpyZWZfU2VydmFudE1hbmFnZXI7CnR5cGVkZWYgX29ianJlZl9TZXJ2YW50TWFuYWdlciogU2Vy
dmFudE1hbmFnZXJfcHRyOwp0eXBlZGVmIFNlcnZhbnRNYW5hZ2VyX3B0ciBTZXJ2YW50TWFuYWdl
clJlZjsKCmNsYXNzIFNlcnZhbnRNYW5hZ2VyX0hlbHBlciB7CnB1YmxpYzoKICB0eXBlZGVmIFNl
cnZhbnRNYW5hZ2VyX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwog
IHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCBy
ZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAg
c3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGlj
IHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3Rh
dGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0
aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBz
dGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoK
dHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX1NlcnZhbnRNYW5hZ2VyLCBTZXJ2YW50
TWFuYWdlcl9IZWxwZXI+IFNlcnZhbnRNYW5hZ2VyX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVm
X09VVF9hcmc8X29ianJlZl9TZXJ2YW50TWFuYWdlcixTZXJ2YW50TWFuYWdlcl9IZWxwZXIgPiBT
ZXJ2YW50TWFuYWdlcl9vdXQ7CgoKCgpjbGFzcyBTZXJ2YW50TWFuYWdlciB7CnB1YmxpYzoKCiAg
dHlwZWRlZiBTZXJ2YW50TWFuYWdlcl9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgU2VydmFudE1h
bmFnZXJfdmFyIF92YXJfdHlwZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfZHVwbGljYXRlKF9wdHJf
dHlwZSk7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93KENPUkJBOjpPYmplY3RfcHRyKTsKICBz
dGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKCiAgc3RhdGljIGlubGluZSBzaXplX3QgX2FsaWduZWRT
aXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpS
ZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBf
bWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFtJik7CgogIHN0YXRpYyBp
bmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsK
ICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3Jl
cG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6
OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgaW5saW5lIF9w
dHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JC
QTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMp
OwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNl
KG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9y
ZXBvSWQ7CgoKCn07CgoKY2xhc3MgX29ianJlZl9TZXJ2YW50TWFuYWdlciA6CiAgcHVibGljIHZp
cnR1YWwgQ09SQkE6Ok9iamVjdCwgcHVibGljIHZpcnR1YWwgb21uaU9ialJlZgp7CnB1YmxpYzoK
CiAgaW5saW5lIF9vYmpyZWZfU2VydmFudE1hbmFnZXIoKSB7IF9QUl9zZXRvYmooMCk7IH0KICBf
b2JqcmVmX1NlcnZhbnRNYW5hZ2VyKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0
Kiwgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0
dWFsIH5fb2JqcmVmX1NlcnZhbnRNYW5hZ2VyKCk7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCog
X3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqKTsKCiAgX29ianJlZl9TZXJ2YW50TWFuYWdlcihjb25z
dCBfb2JqcmVmX1NlcnZhbnRNYW5hZ2VyJik7CiAgX29ianJlZl9TZXJ2YW50TWFuYWdlciYgb3Bl
cmF0b3IgPSAoY29uc3QgX29ianJlZl9TZXJ2YW50TWFuYWdlciYpOwoKfTsKCgpjbGFzcyBfcG9m
X1NlcnZhbnRNYW5hZ2VyIDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CnB1YmxpYzoKICBp
bmxpbmUgX3BvZl9TZXJ2YW50TWFuYWdlcigpIDogcHJveHlPYmplY3RGYWN0b3J5KFNlcnZhbnRN
YW5hZ2VyOjpfUERfcmVwb0lkKSB7fQogIHZpcnR1YWwgfl9wb2ZfU2VydmFudE1hbmFnZXIoKTsK
CiAgdmlydHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2Vk
UHJvZmlsZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJZGVudGl0
eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19hKGNv
bnN0IGNoYXIqKSBjb25zdDsKfTsKCgpjbGFzcyBfaW1wbF9TZXJ2YW50TWFuYWdlciA6CiAgcHVi
bGljIHZpcnR1YWwgb21uaVNlcnZhbnQKewpwdWJsaWM6CiAgdmlydHVhbCB+X2ltcGxfU2VydmFu
dE1hbmFnZXIoKTsKCgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0
Y2goR0lPUF9TJik7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvSW50ZXJmYWNlKGNv
bnN0IGNoYXIqKTsKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZlZFJlcG9JZCgpOwp9
OwoKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TZXJ2YW50TWFuYWdlcjsK
IyAzNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9wb2FfZGVmcy5oIiAzCmNsYXNzIF9v
YmpyZWZfU2VydmFudEFjdGl2YXRvcjsKdHlwZWRlZiBfb2JqcmVmX1NlcnZhbnRBY3RpdmF0b3Iq
IFNlcnZhbnRBY3RpdmF0b3JfcHRyOwp0eXBlZGVmIFNlcnZhbnRBY3RpdmF0b3JfcHRyIFNlcnZh
bnRBY3RpdmF0b3JSZWY7CgpjbGFzcyBTZXJ2YW50QWN0aXZhdG9yX0hlbHBlciB7CnB1YmxpYzoK
ICB0eXBlZGVmIFNlcnZhbnRBY3RpdmF0b3JfcHRyIF9wdHJfdHlwZTsKCiAgc3RhdGljIF9wdHJf
dHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwog
IHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUo
X3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6
ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRT
dHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0
cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJl
ZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVk
U3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpyZWZfU2VydmFudEFj
dGl2YXRvciwgU2VydmFudEFjdGl2YXRvcl9IZWxwZXI+IFNlcnZhbnRBY3RpdmF0b3JfdmFyOwp0
eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX1NlcnZhbnRBY3RpdmF0b3IsU2Vy
dmFudEFjdGl2YXRvcl9IZWxwZXIgPiBTZXJ2YW50QWN0aXZhdG9yX291dDsKCgoKCmNsYXNzIFNl
cnZhbnRBY3RpdmF0b3IgewpwdWJsaWM6CgogIHR5cGVkZWYgU2VydmFudEFjdGl2YXRvcl9wdHIg
X3B0cl90eXBlOwogIHR5cGVkZWYgU2VydmFudEFjdGl2YXRvcl92YXIgX3Zhcl90eXBlOwoKICBz
dGF0aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgX3B0cl90eXBl
IF9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoK
ICBzdGF0aWMgaW5saW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwog
IHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVk
U3RyZWFtJik7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwg
TWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hh
bE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2Jq
ID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSBy
ZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJu
IHJlc3VsdDsKICB9CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYo
TWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJB
OjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0g
X25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7
CiAgfQoKICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCgoKfTsKCgpjbGFzcyBfb2Jq
cmVmX1NlcnZhbnRBY3RpdmF0b3IgOgogIHB1YmxpYyB2aXJ0dWFsIF9vYmpyZWZfU2VydmFudE1h
bmFnZXIKewpwdWJsaWM6CiAgU2VydmFudCBpbmNhcm5hdGUoY29uc3QgT2JqZWN0SWQmIG9pZCwg
UE9BX3B0ciBhZGFwdGVyKTsKICB2b2lkIGV0aGVyZWFsaXplKGNvbnN0IE9iamVjdElkJiBvaWQs
IFBPQV9wdHIgYWRhcHRlciwgU2VydmFudCBzZXJ2LCBDT1JCQTo6Qm9vbGVhbiBjbGVhbnVwX2lu
X3Byb2dyZXNzLCBDT1JCQTo6Qm9vbGVhbiByZW1haW5pbmdfYWN0aXZhdGlvbnMpOwoKICBpbmxp
bmUgX29ianJlZl9TZXJ2YW50QWN0aXZhdG9yKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJl
Zl9TZXJ2YW50QWN0aXZhdG9yKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwg
b21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFs
IH5fb2JqcmVmX1NlcnZhbnRBY3RpdmF0b3IoKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBf
cHRyVG9PYmpSZWYoY29uc3QgY2hhciopOwoKICBfb2JqcmVmX1NlcnZhbnRBY3RpdmF0b3IoY29u
c3QgX29ianJlZl9TZXJ2YW50QWN0aXZhdG9yJik7CiAgX29ianJlZl9TZXJ2YW50QWN0aXZhdG9y
JiBvcGVyYXRvciA9IChjb25zdCBfb2JqcmVmX1NlcnZhbnRBY3RpdmF0b3ImKTsKCn07CgoKY2xh
c3MgX3BvZl9TZXJ2YW50QWN0aXZhdG9yIDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CnB1
YmxpYzoKICBpbmxpbmUgX3BvZl9TZXJ2YW50QWN0aXZhdG9yKCkgOiBwcm94eU9iamVjdEZhY3Rv
cnkoU2VydmFudEFjdGl2YXRvcjo6X1BEX3JlcG9JZCkge30KICB2aXJ0dWFsIH5fcG9mX1NlcnZh
bnRBY3RpdmF0b3IoKTsKCiAgdmlydHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hh
ciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFf
Qm9vbGVhbiBpc19hKGNvbnN0IGNoYXIqKSBjb25zdDsKfTsKCgpjbGFzcyBfaW1wbF9TZXJ2YW50
QWN0aXZhdG9yIDoKICBwdWJsaWMgdmlydHVhbCBfaW1wbF9TZXJ2YW50TWFuYWdlcgp7CnB1Ymxp
YzoKICB2aXJ0dWFsIH5faW1wbF9TZXJ2YW50QWN0aXZhdG9yKCk7CgogIHZpcnR1YWwgU2VydmFu
dCBpbmNhcm5hdGUoY29uc3QgT2JqZWN0SWQmIG9pZCwgUE9BX3B0ciBhZGFwdGVyKSA9IDA7CiAg
dmlydHVhbCB2b2lkIGV0aGVyZWFsaXplKGNvbnN0IE9iamVjdElkJiBvaWQsIFBPQV9wdHIgYWRh
cHRlciwgU2VydmFudCBzZXJ2LCBDT1JCQTo6Qm9vbGVhbiBjbGVhbnVwX2luX3Byb2dyZXNzLCBD
T1JCQTo6Qm9vbGVhbiByZW1haW5pbmdfYWN0aXZhdGlvbnMpID0gMDsKCnByb3RlY3RlZDoKICB2
aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKCnByaXZhdGU6CiAgdmly
dHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hhciopOwogIHZpcnR1YWwgY29uc3Qg
Y2hhciogX21vc3REZXJpdmVkUmVwb0lkKCk7Cn07CgoKZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBl
Q29kZV9wdHIgX3RjX1NlcnZhbnRBY3RpdmF0b3I7CiMgNDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUv
b21uaU9SQjMvcG9hX2RlZnMuaCIgMwpjbGFzcyBfb2JqcmVmX1NlcnZhbnRMb2NhdG9yOwp0eXBl
ZGVmIF9vYmpyZWZfU2VydmFudExvY2F0b3IqIFNlcnZhbnRMb2NhdG9yX3B0cjsKdHlwZWRlZiBT
ZXJ2YW50TG9jYXRvcl9wdHIgU2VydmFudExvY2F0b3JSZWY7CgpjbGFzcyBTZXJ2YW50TG9jYXRv
cl9IZWxwZXIgewpwdWJsaWM6CiAgdHlwZWRlZiBTZXJ2YW50TG9jYXRvcl9wdHIgX3B0cl90eXBl
OwoKICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKICBzdGF0aWMgX0NPUkJBX0Jvb2xlYW4gaXNf
bmlsKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgcmVsZWFzZShfcHRyX3R5cGUpOwogIHN0YXRp
YyB2b2lkIGR1cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRpYyBzaXplX3QgTlBfYWxpZ25lZFNp
emUoX3B0cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90
eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2Jq
UmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRy
X3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxP
YmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mKTsKfTsKCnR5cGVkZWYgX0NPUkJBX09ialJlZl9WYXI8
X29ianJlZl9TZXJ2YW50TG9jYXRvciwgU2VydmFudExvY2F0b3JfSGVscGVyPiBTZXJ2YW50TG9j
YXRvcl92YXI7CnR5cGVkZWYgX0NPUkJBX09ialJlZl9PVVRfYXJnPF9vYmpyZWZfU2VydmFudExv
Y2F0b3IsU2VydmFudExvY2F0b3JfSGVscGVyID4gU2VydmFudExvY2F0b3Jfb3V0OwoKCgoKY2xh
c3MgU2VydmFudExvY2F0b3IgewpwdWJsaWM6CgogIHR5cGVkZWYgU2VydmFudExvY2F0b3JfcHRy
IF9wdHJfdHlwZTsKICB0eXBlZGVmIFNlcnZhbnRMb2NhdG9yX3ZhciBfdmFyX3R5cGU7CgogIHN0
YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRpYyBfcHRyX3R5cGUg
X25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7Cgog
IHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAg
c3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRT
dHJlYW0mKTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBN
ZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFs
T2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmog
PSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJl
c3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4g
cmVzdWx0OwogIH0KCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihN
ZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6
OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBf
bmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsK
ICB9CgogIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCgogIHN0YXRpYyBjb25zdCBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Db29raWU7CiAgdHlwZWRlZiB2b2lkKiBDb29raWU7Cn07
CgoKY2xhc3MgX29ianJlZl9TZXJ2YW50TG9jYXRvciA6CiAgcHVibGljIHZpcnR1YWwgX29ianJl
Zl9TZXJ2YW50TWFuYWdlcgp7CnB1YmxpYzoKICBTZXJ2YW50IHByZWludm9rZShjb25zdCBPYmpl
Y3RJZCYgb2lkLCBQT0FfcHRyIGFkYXB0ZXIsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbiwgU2VydmFu
dExvY2F0b3I6OkNvb2tpZSYgdGhlX2Nvb2tpZSk7CiAgdm9pZCBwb3N0aW52b2tlKGNvbnN0IE9i
amVjdElkJiBvaWQsIFBPQV9wdHIgYWRhcHRlciwgY29uc3QgY2hhciogb3BlcmF0aW9uLCBTZXJ2
YW50TG9jYXRvcjo6Q29va2llIHRoZV9jb29raWUsIFNlcnZhbnQgdGhlX3NlcnZhbnQpOwoKICBp
bmxpbmUgX29ianJlZl9TZXJ2YW50TG9jYXRvcigpIHsgX1BSX3NldG9iaigwKTsgfQogIF9vYmpy
ZWZfU2VydmFudExvY2F0b3IoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLCBv
bW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwg
fl9vYmpyZWZfU2VydmFudExvY2F0b3IoKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRy
VG9PYmpSZWYoY29uc3QgY2hhciopOwoKICBfb2JqcmVmX1NlcnZhbnRMb2NhdG9yKGNvbnN0IF9v
YmpyZWZfU2VydmFudExvY2F0b3ImKTsKICBfb2JqcmVmX1NlcnZhbnRMb2NhdG9yJiBvcGVyYXRv
ciA9IChjb25zdCBfb2JqcmVmX1NlcnZhbnRMb2NhdG9yJik7Cgp9OwoKCmNsYXNzIF9wb2ZfU2Vy
dmFudExvY2F0b3IgOiBwdWJsaWMgcHJveHlPYmplY3RGYWN0b3J5IHsKcHVibGljOgogIGlubGlu
ZSBfcG9mX1NlcnZhbnRMb2NhdG9yKCkgOiBwcm94eU9iamVjdEZhY3RvcnkoU2VydmFudExvY2F0
b3I6Ol9QRF9yZXBvSWQpIHt9CiAgdmlydHVhbCB+X3BvZl9TZXJ2YW50TG9jYXRvcigpOwoKICB2
aXJ0dWFsIG9tbmlPYmpSZWYqIG5ld09ialJlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9m
aWxlTGlzdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwg
b21uaUxvY2FsSWRlbnRpdHkqKTsKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3Qg
Y2hhciopIGNvbnN0Owp9OwoKCmNsYXNzIF9pbXBsX1NlcnZhbnRMb2NhdG9yIDoKICBwdWJsaWMg
dmlydHVhbCBfaW1wbF9TZXJ2YW50TWFuYWdlcgp7CnB1YmxpYzoKICB2aXJ0dWFsIH5faW1wbF9T
ZXJ2YW50TG9jYXRvcigpOwoKICB2aXJ0dWFsIFNlcnZhbnQgcHJlaW52b2tlKGNvbnN0IE9iamVj
dElkJiBvaWQsIFBPQV9wdHIgYWRhcHRlciwgY29uc3QgY2hhciogb3BlcmF0aW9uLCBTZXJ2YW50
TG9jYXRvcjo6Q29va2llJiB0aGVfY29va2llKSA9IDA7CiAgdmlydHVhbCB2b2lkIHBvc3RpbnZv
a2UoY29uc3QgT2JqZWN0SWQmIG9pZCwgUE9BX3B0ciBhZGFwdGVyLCBjb25zdCBjaGFyKiBvcGVy
YXRpb24sIFNlcnZhbnRMb2NhdG9yOjpDb29raWUgdGhlX2Nvb2tpZSwgU2VydmFudCB0aGVfc2Vy
dmFudCkgPSAwOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNo
KEdJT1BfUyYpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb0ludGVyZmFjZShjb25z
dCBjaGFyKik7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsKfTsK
CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2VydmFudExvY2F0b3I7CiMg
NzU2ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcG9hLmgiIDIgMwoKCgoKCgoKfQoKCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3BvYV9vcGVyYXRvcnMuaCIgMSAzCiMgNDQg
Ii91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9wb2Ffb3BlcmF0b3JzLmgiIDMKaW5saW5lIHNp
emVfdApQb3J0YWJsZVNlcnZlcjo6QWRhcHRlckFjdGl2YXRvcjo6X2FsaWduZWRTaXplKFBvcnRh
YmxlU2VydmVyOjpBZGFwdGVyQWN0aXZhdG9yX3B0ciBvYmosIHNpemVfdCBvZmZzZXQpIHsKICBy
ZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0OCwgb2Zmc2V0KTsK
fQoKaW5saW5lIHZvaWQKUG9ydGFibGVTZXJ2ZXI6OkFkYXB0ZXJBY3RpdmF0b3I6Ol9tYXJzaGFs
T2JqUmVmKFBvcnRhYmxlU2VydmVyOjpBZGFwdGVyQWN0aXZhdG9yX3B0ciBvYmosIE5ldEJ1ZmZl
cmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0
OCwgcyk7Cn0KCmlubGluZSB2b2lkClBvcnRhYmxlU2VydmVyOjpBZGFwdGVyQWN0aXZhdG9yOjpf
bWFyc2hhbE9ialJlZihQb3J0YWJsZVNlcnZlcjo6QWRhcHRlckFjdGl2YXRvcl9wdHIgb2JqLCBN
ZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3Jl
cG9JZCwgNDgsIHMpOwp9CgoKaW5saW5lIHNpemVfdApQb3J0YWJsZVNlcnZlcjo6U2VydmFudE1h
bmFnZXI6Ol9hbGlnbmVkU2l6ZShQb3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXJfcHRyIG9i
aiwgc2l6ZV90IG9mZnNldCkgewogIHJldHVybiBDT1JCQTo6QWxpZ25lZE9ialJlZihvYmosIF9Q
RF9yZXBvSWQsIDQ2LCBvZmZzZXQpOwp9CgppbmxpbmUgdm9pZApQb3J0YWJsZVNlcnZlcjo6U2Vy
dmFudE1hbmFnZXI6Ol9tYXJzaGFsT2JqUmVmKFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdl
cl9wdHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVm
KG9iaiwgX1BEX3JlcG9JZCwgNDYsIHMpOwp9CgppbmxpbmUgdm9pZApQb3J0YWJsZVNlcnZlcjo6
U2VydmFudE1hbmFnZXI6Ol9tYXJzaGFsT2JqUmVmKFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFu
YWdlcl9wdHIgb2JqLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2Jq
UmVmKG9iaiwgX1BEX3JlcG9JZCwgNDYsIHMpOwp9CgoKaW5saW5lIHNpemVfdApQb3J0YWJsZVNl
cnZlcjo6U2VydmFudEFjdGl2YXRvcjo6X2FsaWduZWRTaXplKFBvcnRhYmxlU2VydmVyOjpTZXJ2
YW50QWN0aXZhdG9yX3B0ciBvYmosIHNpemVfdCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFs
aWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0OCwgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQK
UG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3I6Ol9tYXJzaGFsT2JqUmVmKFBvcnRhYmxl
U2VydmVyOjpTZXJ2YW50QWN0aXZhdG9yX3B0ciBvYmosIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7
CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0OCwgcyk7Cn0KCmlubGlu
ZSB2b2lkClBvcnRhYmxlU2VydmVyOjpTZXJ2YW50QWN0aXZhdG9yOjpfbWFyc2hhbE9ialJlZihQ
b3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcl9wdHIgb2JqLCBNZW1CdWZmZXJlZFN0cmVh
bSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgNDgsIHMpOwp9
CgoKaW5saW5lIHNpemVfdApQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3I6Ol9hbGlnbmVk
U2l6ZShQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3JfcHRyIG9iaiwgc2l6ZV90IG9mZnNl
dCkgewogIHJldHVybiBDT1JCQTo6QWxpZ25lZE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDQ2LCBv
ZmZzZXQpOwp9CgppbmxpbmUgdm9pZApQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3I6Ol9t
YXJzaGFsT2JqUmVmKFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TG9jYXRvcl9wdHIgb2JqLCBOZXRC
dWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9J
ZCwgNDYsIHMpOwp9CgppbmxpbmUgdm9pZApQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3I6
Ol9tYXJzaGFsT2JqUmVmKFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TG9jYXRvcl9wdHIgb2JqLCBN
ZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3Jl
cG9JZCwgNDYsIHMpOwp9CiMgNzY3ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcG9hLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9vbW5pT1JCMy9wb2FfcG9hLmgiIDEgMwojIDQ0
ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvcG9hX3BvYS5oIiAzCm5hbWVzcGFjZSBQT0Ff
UG9ydGFibGVTZXJ2ZXIKewoKCmNsYXNzIEFkYXB0ZXJBY3RpdmF0b3IgOgogICAgcHVibGljIHZp
cnR1YWwgUG9ydGFibGVTZXJ2ZXI6Ol9pbXBsX0FkYXB0ZXJBY3RpdmF0b3IsCiAgICBwdWJsaWMg
dmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEJhc2UKewpwdWJsaWM6CiAgdmlydHVhbCB+
QWRhcHRlckFjdGl2YXRvcigpOwoKICBpbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OkFkYXB0ZXJBY3Rp
dmF0b3JfcHRyIF90aGlzKCkgewogICAgcmV0dXJuIChQb3J0YWJsZVNlcnZlcjo6QWRhcHRlckFj
dGl2YXRvcl9wdHIpIF9kb190aGlzKFBvcnRhYmxlU2VydmVyOjpBZGFwdGVyQWN0aXZhdG9yOjpf
UERfcmVwb0lkKTsKICB9Cn07CgoKY2xhc3MgU2VydmFudE1hbmFnZXIgOgogICAgcHVibGljIHZp
cnR1YWwgUG9ydGFibGVTZXJ2ZXI6Ol9pbXBsX1NlcnZhbnRNYW5hZ2VyLAogICAgcHVibGljIHZp
cnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRCYXNlCnsKcHVibGljOgogIHZpcnR1YWwgflNl
cnZhbnRNYW5hZ2VyKCk7CgogIGlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXJf
cHRyIF90aGlzKCkgewogICAgcmV0dXJuIChQb3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXJf
cHRyKSBfZG9fdGhpcyhQb3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXI6Ol9QRF9yZXBvSWQp
OwogIH0KfTsKCgpjbGFzcyBTZXJ2YW50QWN0aXZhdG9yIDoKICAgIHB1YmxpYyB2aXJ0dWFsIFBv
cnRhYmxlU2VydmVyOjpfaW1wbF9TZXJ2YW50QWN0aXZhdG9yLAogICAgcHVibGljIHZpcnR1YWwg
UG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRCYXNlCnsKcHVibGljOgogIHZpcnR1YWwgflNlcnZhbnRB
Y3RpdmF0b3IoKTsKCiAgaW5saW5lIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50QWN0aXZhdG9yX3B0
ciBfdGhpcygpIHsKICAgIHJldHVybiAoUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3Jf
cHRyKSBfZG9fdGhpcyhQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcjo6X1BEX3JlcG9J
ZCk7CiAgfQp9OwoKCmNsYXNzIFNlcnZhbnRMb2NhdG9yIDoKICAgIHB1YmxpYyB2aXJ0dWFsIFBv
cnRhYmxlU2VydmVyOjpfaW1wbF9TZXJ2YW50TG9jYXRvciwKICAgIHB1YmxpYyB2aXJ0dWFsIFBv
cnRhYmxlU2VydmVyOjpTZXJ2YW50QmFzZQp7CnB1YmxpYzoKICB2aXJ0dWFsIH5TZXJ2YW50TG9j
YXRvcigpOwoKICBpbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2NhdG9yX3B0ciBfdGhp
cygpIHsKICAgIHJldHVybiAoUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2NhdG9yX3B0cikgX2Rv
X3RoaXMoUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2NhdG9yOjpfUERfcmVwb0lkKTsKICB9Cn07
CgoKfQojIDc2OCAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL3BvYS5oIiAyIDMKIyAyNjI0
ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIgMiAzCgoKCmV4dGVybiBDT1JC
QTo6Qm9vbGVhbgpfb21uaV9jYWxsVHJhbnNpZW50RXhjZXB0aW9uSGFuZGxlcihvbW5pT2JqUmVm
KiBvYmosIENPUkJBOjpVTG9uZyByZXRyaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBDT1JCQTo6VFJBTlNJRU5UJiBleCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVh
bgpfb21uaV9jYWxsQ29tbUZhaWx1cmVFeGNlcHRpb25IYW5kbGVyKG9tbmlPYmpSZWYqIG9iaiwg
Q09SQkE6OlVMb25nIHJldHJpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQ09SQkE6OkNPTU1fRkFJTFVSRSYgZXgpOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4K
X29tbmlfY2FsbFN5c3RlbUV4Y2VwdGlvbkhhbmRsZXIob21uaU9ialJlZiogb2JqLCBDT1JCQTo6
VUxvbmcgcmV0cmllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09S
QkE6OlN5c3RlbUV4Y2VwdGlvbiYgZXgpOwoKCmV4dGVybiB2b2lkIF9vbW5pX3NldF9OYW1lU2Vy
dmljZShDT1JCQTo6T2JqZWN0X3B0cik7CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9S
QjMvY29yYmFpZGxfb3BlcmF0b3JzLmhoIiAxIDMKCgoKCmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9
KENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6U3RydWN0TWVtYmVyJiBfcyk7CmV4dGVybiB2
b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6U3RydWN0TWVtYmVyKiBfc3Ap
OwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2Es
IENPUkJBOjpTdHJ1Y3RNZW1iZXIqJiBfc3ApOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpTdHJ1Y3RNZW1iZXIqJiBf
c3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09S
QkE6OlN0cnVjdE1lbWJlclNlcSYgX3MpOwppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKENPUkJB
OjpBbnkmIF9hLCBDT1JCQTo6U3RydWN0TWVtYmVyU2VxKiBfc3ApIHsKICBfYSA8PD0gKl9zcDsK
ICBkZWxldGUgX3NwOwp9CmV4dGVybiBfQ09SQkFfQm9vbGVhbiBvcGVyYXRvciA+Pj0gKGNvbnN0
IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6U3RydWN0TWVtYmVyU2VxKiYgX3NwKTsKZXh0ZXJuIF9D
T1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENP
UkJBOjpTdHJ1Y3RNZW1iZXJTZXEqJiBfc3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09S
QkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpVbmlvbk1lbWJlciYgX3MpOwpleHRlcm4gdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlVuaW9uTWVtYmVyKiBfc3ApOwpleHRl
cm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJB
OjpVbmlvbk1lbWJlciomIF9zcCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShj
b25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OlVuaW9uTWVtYmVyKiYgX3NwKTsKCmV4
dGVybiB2b2lkIG9wZXJhdG9yIDw8PSAoQ09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpVbmlv
bk1lbWJlclNlcSYgX3MpOwppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9h
LCBDT1JCQTo6VW5pb25NZW1iZXJTZXEqIF9zcCkgewogIF9hIDw8PSAqX3NwOwogIGRlbGV0ZSBf
c3A7Cn0KZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFu
eSYgX2EsIENPUkJBOjpVbmlvbk1lbWJlclNlcSomIF9zcCk7CmV4dGVybiBfQ09SQkFfQm9vbGVh
biBvcGVyYXRvciA+Pj0gKGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6VW5pb25N
ZW1iZXJTZXEqJiBfc3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBf
YSwgY29uc3QgQ09SQkE6OkVudW1NZW1iZXJTZXEmIF9zKTsKaW5saW5lIHZvaWQgb3BlcmF0b3Ig
PDw9IChDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkVudW1NZW1iZXJTZXEqIF9zcCkgewogIF9hIDw8
PSAqX3NwOwogIGRlbGV0ZSBfc3A7Cn0KZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+
PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpFbnVtTWVtYmVyU2VxKiYgX3NwKTsKZXh0
ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIGNv
bnN0IENPUkJBOjpFbnVtTWVtYmVyU2VxKiYgX3NwKTsKIyAyNjQyICIvdXNyL2xvY2FsL2luY2x1
ZGUvb21uaU9SQjMvQ09SQkEuaCIgMiAzCgoKCgoKCm5hbWVzcGFjZSBQT0FfQ09SQkEKewoKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvY29yYmFpZGxfcG9hLmhoIiAxIDMKIyAyNjUy
ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIgMiAzCgoKCgp9CgoKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvYm9hLmgiIDEgMwojIDUyICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvb21uaU9SQjMvYm9hLmgiIDMKY2xhc3Mgb21uaU9yYkJvYVNlcnZhbnQgOiBwdWJsaWMg
dmlydHVhbCBvbW5pU2VydmFudCB7CnB1YmxpYzoKICB2aXJ0dWFsIH5vbW5pT3JiQm9hU2VydmFu
dCgpOwoKICBvbW5pT3JiQm9hU2VydmFudCgpOwogIGlubGluZSBvbW5pT3JiQm9hU2VydmFudChj
b25zdCBvbW5pT3JiQm9hS2V5JiBrKQogICAgOiBwZF9rZXkoaykge30KCiAgdm9pZCBfZGlzcG9z
ZSgpOwoKCgoKCgogIHZvaWQgX29ial9pc19yZWFkeSgpOwoKCiAgdm9pZCogX3RoaXMoY29uc3Qg
Y2hhciogcmVwb0lkKTsKCgoKICBpbmxpbmUgY29uc3Qgb21uaU9yYkJvYUtleSYgX2tleSgpIGNv
bnN0IHsgcmV0dXJuIHBkX2tleTsgfQogIGlubGluZSB2b2lkIF9vYmpfaXNfcmVhZHkoQ09SQkE6
OkJPQV9wdHIpIHsgX29ial9pc19yZWFkeSgpOyB9CiAgaW5saW5lIENPUkJBOjpCT0FfcHRyIF9i
b2EoKSB7IHJldHVybiBDT1JCQTo6Qk9BOjpnZXRCT0EoKTsgfQoKcHJpdmF0ZToKICB2aXJ0dWFs
IG9tbmlPYmpSZWYqIF9kb19nZXRfaW50ZXJmYWNlKCk7CgoKcHJvdGVjdGVkOgogIG9tbmlPcmJC
b2FLZXkgcGRfa2V5OwoKCgoKfTsKIyAyNjYwICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMv
Q09SQkEuaCIgMiAzCiMgMjY3NSAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL0NPUkJBLmgi
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvTmFtaW5nLmhoIiAxIDMKIyA0OSAi
L3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL05hbWluZy5oaCIgMwpuYW1lc3BhY2UgQ29zTmFt
aW5nCgp7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Jc3RyaW5nOwoK
ICB0eXBlZGVmIGNoYXIqIElzdHJpbmc7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX3ZhciBJc3Ry
aW5nX3ZhcjsKCiAgc3RydWN0IE5hbWVDb21wb25lbnQgewogICAgdHlwZWRlZiBfQ09SQkFfQ29u
c3RyVHlwZV9WYXJpYWJsZV9WYXI8TmFtZUNvbXBvbmVudD4gX3Zhcl90eXBlOwoKICAgIENPUkJB
OjpTdHJpbmdfbWVtYmVyIGlkOwoKICAgIENPUkJBOjpTdHJpbmdfbWVtYmVyIGtpbmQ7CgogICAg
c2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CiAgICB2
b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICAgIHZvaWQgb3Bl
cmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpOwogICAgdm9pZCBvcGVyYXRvcj4+PSAoTWVt
QnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJl
ZFN0cmVhbSAmKTsKICB9OwoKICB0eXBlZGVmIE5hbWVDb21wb25lbnQ6Ol92YXJfdHlwZSBOYW1l
Q29tcG9uZW50X3ZhcjsKCiAgdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJsZV9PVVRf
YXJnPCBOYW1lQ29tcG9uZW50LE5hbWVDb21wb25lbnRfdmFyID4gTmFtZUNvbXBvbmVudF9vdXQ7
CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19OYW1lQ29tcG9uZW50OwoK
ICBleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfTmFtZTsKCiAgY2xhc3MgTmFt
ZV92YXI7CgogIGNsYXNzIE5hbWUgOiBwdWJsaWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwg
TmFtZUNvbXBvbmVudD4gewogIHB1YmxpYzoKICAgIHR5cGVkZWYgTmFtZV92YXIgX3Zhcl90eXBl
OwogICAgaW5saW5lIE5hbWUoKSB7fQogICAgaW5saW5lIE5hbWUoY29uc3QgTmFtZSYgcykKICAg
ICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBOYW1lQ29tcG9uZW50PiAocykge30KCiAg
ICBpbmxpbmUgTmFtZShfQ09SQkFfVUxvbmcgX21heCkKICAgICAgOiBfQ09SQkFfVW5ib3VuZGVk
X1NlcXVlbmNlPCBOYW1lQ29tcG9uZW50PiAoX21heCkge30KICAgIGlubGluZSBOYW1lKF9DT1JC
QV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgTmFtZUNvbXBvbmVudCogX3ZhbCwgX0NP
UkJBX0Jvb2xlYW4gX3JlbD0wKQogICAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IE5h
bWVDb21wb25lbnQ+IChfbWF4LCBfbGVuLCBfdmFsLCBfcmVsKSB7fQoKICAgIGlubGluZSBOYW1l
JiBvcGVyYXRvciA9IChjb25zdCBOYW1lJiBzKSB7CiAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2U8IE5hbWVDb21wb25lbnQ+IDo6b3BlcmF0b3I9KHMpOwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CiAgfTsKCiAgY2xhc3MgTmFtZV9vdXQ7CgogIGNsYXNzIE5hbWVfdmFyIHsKICBwdWJs
aWM6CiAgICB0eXBlZGVmIE5hbWUgVDsKICAgIHR5cGVkZWYgTmFtZV92YXIgVF92YXI7CgogICAg
aW5saW5lIE5hbWVfdmFyKCkgOiBfcGRfc2VxKDApIHt9CiAgICBpbmxpbmUgTmFtZV92YXIoVCog
cykgOiBfcGRfc2VxKHMpIHt9CiAgICBpbmxpbmUgTmFtZV92YXIoY29uc3QgVF92YXImIHMpIHsK
ICAgICAgaWYoIHMuX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVCgqcy5fcGRfc2VxKTsKICAgICAg
ZWxzZSBfcGRfc2VxID0gMDsKICAgIH0KICAgIGlubGluZSB+TmFtZV92YXIoKSB7IGlmKCBfcGRf
c2VxICkgZGVsZXRlIF9wZF9zZXE7IH0KCiAgICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKFQq
IHMpIHsKICAgICAgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsKICAgICAgX3BkX3NlcSA9
IHM7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIGlubGluZSBUX3ZhciYgb3BlcmF0b3Ig
PSAoY29uc3QgVF92YXImIHMpIHsKICAgICAgaWYoIHMuX3BkX3NlcSApIHsKICAgICAgICBpZigg
IV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQ7CiAgICAgICAgKl9wZF9zZXEgPSAqcy5fcGRfc2Vx
OwogICAgICB9IGVsc2UgaWYoIF9wZF9zZXEgKSB7CiAgICAgICAgZGVsZXRlIF9wZF9zZXE7CiAg
ICAgICAgX3BkX3NlcSA9IDA7CiAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAg
IGlubGluZSBOYW1lQ29tcG9uZW50JiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIHMpIHsKICAg
ICAgcmV0dXJuICgqX3BkX3NlcSlbc107CiAgICB9CgogICAgaW5saW5lIFQqIG9wZXJhdG9yIC0+
ICgpIHsgcmV0dXJuIF9wZF9zZXE7IH0KCgoKICAgIGlubGluZSBvcGVyYXRvciBjb25zdCBUJiAo
KSBjb25zdCB7IHJldHVybiAqX3BkX3NlcTsgfQogICAgaW5saW5lIG9wZXJhdG9yIFQmICgpIHsg
cmV0dXJuICpfcGRfc2VxOyB9CgoKICAgIGlubGluZSBjb25zdCBUJiBpbigpIGNvbnN0IHsgcmV0
dXJuICpfcGRfc2VxOyB9CiAgICBpbmxpbmUgVCYgaW5vdXQoKSB7IHJldHVybiAqX3BkX3NlcTsg
fQogICAgaW5saW5lIFQqJiBvdXQoKSB7CiAgICAgIGlmKCBfcGRfc2VxICkgeyBkZWxldGUgX3Bk
X3NlcTsgX3BkX3NlcSA9IDA7IH0KICAgICAgcmV0dXJuIF9wZF9zZXE7CiAgICB9CiAgICBpbmxp
bmUgVCogX3JldG4oKSB7IFQqIHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEgPSAwOyByZXR1cm4gdG1w
OyB9CgogICAgZnJpZW5kIGNsYXNzIE5hbWVfb3V0OwoKICBwcml2YXRlOgogICAgVCogX3BkX3Nl
cTsKICB9OwoKICBjbGFzcyBOYW1lX291dCB7CiAgcHVibGljOgogICAgdHlwZWRlZiBOYW1lIFQ7
CiAgICB0eXBlZGVmIE5hbWVfdmFyIFRfdmFyOwoKICAgIGlubGluZSBOYW1lX291dChUKiYgcykg
OiBfZGF0YShzKSB7IF9kYXRhID0gMDsgfQogICAgaW5saW5lIE5hbWVfb3V0KFRfdmFyJiBzKQog
ICAgICA6IF9kYXRhKHMuX3BkX3NlcSkgeyBzID0gKFQqKSAwOyB9CiAgICBpbmxpbmUgTmFtZV9v
dXQoY29uc3QgTmFtZV9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkge30KICAgIGlubGluZSBOYW1l
X291dCYgb3BlcmF0b3IgPSAoY29uc3QgTmFtZV9vdXQmIHMpIHsKICAgICAgX2RhdGEgPSBzLl9k
YXRhOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9IGlubGluZSBOYW1lX291dCYgb3BlcmF0b3Ig
PSAoVCogcykgewogICAgICBfZGF0YSA9IHM7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAg
IGlubGluZSBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBfZGF0YTsgfQogICAgaW5saW5lIFQqJiBw
dHIoKSB7IHJldHVybiBfZGF0YTsgfQogICAgaW5saW5lIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVy
biBfZGF0YTsgfQoKICAgIGlubGluZSBOYW1lQ29tcG9uZW50JiBvcGVyYXRvciBbXSAoX0NPUkJB
X1VMb25nIGkpIHsKICAgICAgcmV0dXJuICgqX2RhdGEpW2ldOwogICAgfQoKICAgIFQqJiBfZGF0
YTsKCiAgcHJpdmF0ZToKICAgIE5hbWVfb3V0KCk7CiAgICBOYW1lX291dCYgb3BlcmF0b3I9KGNv
bnN0IFRfdmFyJik7CiAgfTsKCiAgZW51bSBCaW5kaW5nVHlwZSB7IG5vYmplY3QsIG5jb250ZXh0
IH07CiAgdHlwZWRlZiBCaW5kaW5nVHlwZSYgQmluZGluZ1R5cGVfb3V0OwoKICBleHRlcm4gY29u
c3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQmluZGluZ1R5cGU7CgogIHN0cnVjdCBCaW5kaW5n
IHsKICAgIHR5cGVkZWYgX0NPUkJBX0NvbnN0clR5cGVfVmFyaWFibGVfVmFyPEJpbmRpbmc+IF92
YXJfdHlwZTsKCiAgICBOYW1lIGJpbmRpbmdfbmFtZTsKCiAgICBCaW5kaW5nVHlwZSBiaW5kaW5n
X3R5cGU7CgogICAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkg
Y29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsK
ICAgIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpOwogICAgdm9pZCBvcGVy
YXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPDw9
IChNZW1CdWZmZXJlZFN0cmVhbSAmKTsKICB9OwoKICB0eXBlZGVmIEJpbmRpbmc6Ol92YXJfdHlw
ZSBCaW5kaW5nX3ZhcjsKCiAgdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJsZV9PVVRf
YXJnPCBCaW5kaW5nLEJpbmRpbmdfdmFyID4gQmluZGluZ19vdXQ7CgogIGV4dGVybiBjb25zdCBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19CaW5kaW5nOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlR5
cGVDb2RlX3B0ciBfdGNfQmluZGluZ0xpc3Q7CgogIGNsYXNzIEJpbmRpbmdMaXN0X3ZhcjsKCiAg
Y2xhc3MgQmluZGluZ0xpc3QgOiBwdWJsaWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgQmlu
ZGluZz4gewogIHB1YmxpYzoKICAgIHR5cGVkZWYgQmluZGluZ0xpc3RfdmFyIF92YXJfdHlwZTsK
ICAgIGlubGluZSBCaW5kaW5nTGlzdCgpIHt9CiAgICBpbmxpbmUgQmluZGluZ0xpc3QoY29uc3Qg
QmluZGluZ0xpc3QmIHMpCiAgICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgQmluZGlu
Zz4gKHMpIHt9CgogICAgaW5saW5lIEJpbmRpbmdMaXN0KF9DT1JCQV9VTG9uZyBfbWF4KQogICAg
ICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IEJpbmRpbmc+IChfbWF4KSB7fQogICAgaW5s
aW5lIEJpbmRpbmdMaXN0KF9DT1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgQmlu
ZGluZyogX3ZhbCwgX0NPUkJBX0Jvb2xlYW4gX3JlbD0wKQogICAgICA6IF9DT1JCQV9VbmJvdW5k
ZWRfU2VxdWVuY2U8IEJpbmRpbmc+IChfbWF4LCBfbGVuLCBfdmFsLCBfcmVsKSB7fQoKICAgIGlu
bGluZSBCaW5kaW5nTGlzdCYgb3BlcmF0b3IgPSAoY29uc3QgQmluZGluZ0xpc3QmIHMpIHsKICAg
ICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgQmluZGluZz4gOjpvcGVyYXRvcj0ocyk7CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KICB9OwoKICBjbGFzcyBCaW5kaW5nTGlzdF9vdXQ7Cgog
IGNsYXNzIEJpbmRpbmdMaXN0X3ZhciB7CiAgcHVibGljOgogICAgdHlwZWRlZiBCaW5kaW5nTGlz
dCBUOwogICAgdHlwZWRlZiBCaW5kaW5nTGlzdF92YXIgVF92YXI7CgogICAgaW5saW5lIEJpbmRp
bmdMaXN0X3ZhcigpIDogX3BkX3NlcSgwKSB7fQogICAgaW5saW5lIEJpbmRpbmdMaXN0X3ZhcihU
KiBzKSA6IF9wZF9zZXEocykge30KICAgIGlubGluZSBCaW5kaW5nTGlzdF92YXIoY29uc3QgVF92
YXImIHMpIHsKICAgICAgaWYoIHMuX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVCgqcy5fcGRfc2Vx
KTsKICAgICAgZWxzZSBfcGRfc2VxID0gMDsKICAgIH0KICAgIGlubGluZSB+QmluZGluZ0xpc3Rf
dmFyKCkgeyBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRfc2VxOyB9CgogICAgaW5saW5lIFRfdmFy
JiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICAgIGlmKCBfcGRfc2VxICkgZGVsZXRlIF9wZF9zZXE7
CiAgICAgIF9wZF9zZXEgPSBzOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBpbmxpbmUg
VF92YXImIG9wZXJhdG9yID0gKGNvbnN0IFRfdmFyJiBzKSB7CiAgICAgIGlmKCBzLl9wZF9zZXEg
KSB7CiAgICAgICAgaWYoICFfcGRfc2VxICkgX3BkX3NlcSA9IG5ldyBUOwogICAgICAgICpfcGRf
c2VxID0gKnMuX3BkX3NlcTsKICAgICAgfSBlbHNlIGlmKCBfcGRfc2VxICkgewogICAgICAgIGRl
bGV0ZSBfcGRfc2VxOwogICAgICAgIF9wZF9zZXEgPSAwOwogICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgICBpbmxpbmUgQmluZGluZyYgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9u
ZyBzKSB7CiAgICAgIHJldHVybiAoKl9wZF9zZXEpW3NdOwogICAgfQoKICAgIGlubGluZSBUKiBv
cGVyYXRvciAtPiAoKSB7IHJldHVybiBfcGRfc2VxOyB9CgoKCiAgICBpbmxpbmUgb3BlcmF0b3Ig
Y29uc3QgVCYgKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICAgIGlubGluZSBvcGVyYXRv
ciBUJiAoKSB7IHJldHVybiAqX3BkX3NlcTsgfQoKCiAgICBpbmxpbmUgY29uc3QgVCYgaW4oKSBj
b25zdCB7IHJldHVybiAqX3BkX3NlcTsgfQogICAgaW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4g
Kl9wZF9zZXE7IH0KICAgIGlubGluZSBUKiYgb3V0KCkgewogICAgICBpZiggX3BkX3NlcSApIHsg
ZGVsZXRlIF9wZF9zZXE7IF9wZF9zZXEgPSAwOyB9CiAgICAgIHJldHVybiBfcGRfc2VxOwogICAg
fQogICAgaW5saW5lIFQqIF9yZXRuKCkgeyBUKiB0bXAgPSBfcGRfc2VxOyBfcGRfc2VxID0gMDsg
cmV0dXJuIHRtcDsgfQoKICAgIGZyaWVuZCBjbGFzcyBCaW5kaW5nTGlzdF9vdXQ7CgogIHByaXZh
dGU6CiAgICBUKiBfcGRfc2VxOwogIH07CgogIGNsYXNzIEJpbmRpbmdMaXN0X291dCB7CiAgcHVi
bGljOgogICAgdHlwZWRlZiBCaW5kaW5nTGlzdCBUOwogICAgdHlwZWRlZiBCaW5kaW5nTGlzdF92
YXIgVF92YXI7CgogICAgaW5saW5lIEJpbmRpbmdMaXN0X291dChUKiYgcykgOiBfZGF0YShzKSB7
IF9kYXRhID0gMDsgfQogICAgaW5saW5lIEJpbmRpbmdMaXN0X291dChUX3ZhciYgcykKICAgICAg
OiBfZGF0YShzLl9wZF9zZXEpIHsgcyA9IChUKikgMDsgfQogICAgaW5saW5lIEJpbmRpbmdMaXN0
X291dChjb25zdCBCaW5kaW5nTGlzdF9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkge30KICAgIGlu
bGluZSBCaW5kaW5nTGlzdF9vdXQmIG9wZXJhdG9yID0gKGNvbnN0IEJpbmRpbmdMaXN0X291dCYg
cykgewogICAgICBfZGF0YSA9IHMuX2RhdGE7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0gaW5s
aW5lIEJpbmRpbmdMaXN0X291dCYgb3BlcmF0b3IgPSAoVCogcykgewogICAgICBfZGF0YSA9IHM7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIGlubGluZSBvcGVyYXRvciBUKiYoKSB7IHJl
dHVybiBfZGF0YTsgfQogICAgaW5saW5lIFQqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQogICAg
aW5saW5lIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBfZGF0YTsgfQoKICAgIGlubGluZSBCaW5k
aW5nJiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIGkpIHsKICAgICAgcmV0dXJuICgqX2RhdGEp
W2ldOwogICAgfQoKICAgIFQqJiBfZGF0YTsKCiAgcHJpdmF0ZToKICAgIEJpbmRpbmdMaXN0X291
dCgpOwogICAgQmluZGluZ0xpc3Rfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF92YXImKTsKICB9OwoK
CgoKICBjbGFzcyBCaW5kaW5nSXRlcmF0b3I7CiAgY2xhc3MgX29ianJlZl9CaW5kaW5nSXRlcmF0
b3I7CiAgY2xhc3MgX2ltcGxfQmluZGluZ0l0ZXJhdG9yOwoKICB0eXBlZGVmIF9vYmpyZWZfQmlu
ZGluZ0l0ZXJhdG9yKiBCaW5kaW5nSXRlcmF0b3JfcHRyOwogIHR5cGVkZWYgQmluZGluZ0l0ZXJh
dG9yX3B0ciBCaW5kaW5nSXRlcmF0b3JSZWY7CgogIGNsYXNzIEJpbmRpbmdJdGVyYXRvcl9IZWxw
ZXIgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgQmluZGluZ0l0ZXJhdG9yX3B0ciBfcHRyX3R5cGU7
CgogICAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CiAgICBzdGF0aWMgX0NPUkJBX0Jvb2xlYW4g
aXNfbmlsKF9wdHJfdHlwZSk7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAg
ICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBlKTsKICAgIHN0YXRpYyBzaXplX3QgTlBf
YWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwogICAgc3RhdGljIHZvaWQgbWFyc2hhbE9i
alJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgICBzdGF0aWMgX3B0cl90eXBl
IHVubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIHZvaWQgbWFy
c2hhbE9ialJlZihfcHRyX3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFtJik7CiAgICBzdGF0aWMgX3B0
cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwogIH07CgogIHR5cGVk
ZWYgX0NPUkJBX09ialJlZl9WYXI8X29ianJlZl9CaW5kaW5nSXRlcmF0b3IsIEJpbmRpbmdJdGVy
YXRvcl9IZWxwZXI+IEJpbmRpbmdJdGVyYXRvcl92YXI7CiAgdHlwZWRlZiBfQ09SQkFfT2JqUmVm
X09VVF9hcmc8X29ianJlZl9CaW5kaW5nSXRlcmF0b3IsQmluZGluZ0l0ZXJhdG9yX0hlbHBlciA+
IEJpbmRpbmdJdGVyYXRvcl9vdXQ7CgoKCgoKCiAgY2xhc3MgTmFtaW5nQ29udGV4dDsKICBjbGFz
cyBfb2JqcmVmX05hbWluZ0NvbnRleHQ7CiAgY2xhc3MgX2ltcGxfTmFtaW5nQ29udGV4dDsKCiAg
dHlwZWRlZiBfb2JqcmVmX05hbWluZ0NvbnRleHQqIE5hbWluZ0NvbnRleHRfcHRyOwogIHR5cGVk
ZWYgTmFtaW5nQ29udGV4dF9wdHIgTmFtaW5nQ29udGV4dFJlZjsKCiAgY2xhc3MgTmFtaW5nQ29u
dGV4dF9IZWxwZXIgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgTmFtaW5nQ29udGV4dF9wdHIgX3B0
cl90eXBlOwoKICAgIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogICAgc3RhdGljIF9DT1JCQV9C
b29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZShfcHRyX3R5
cGUpOwogICAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgICBzdGF0aWMgc2l6
ZV90IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICAgIHN0YXRpYyB2b2lkIG1h
cnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIF9w
dHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICAgIHN0YXRpYyB2
b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogICAgc3Rh
dGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mKTsKICB9OwoK
ICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpyZWZfTmFtaW5nQ29udGV4dCwgTmFtaW5n
Q29udGV4dF9IZWxwZXI+IE5hbWluZ0NvbnRleHRfdmFyOwogIHR5cGVkZWYgX0NPUkJBX09ialJl
Zl9PVVRfYXJnPF9vYmpyZWZfTmFtaW5nQ29udGV4dCxOYW1pbmdDb250ZXh0X0hlbHBlciA+IE5h
bWluZ0NvbnRleHRfb3V0OwoKCgogIGNsYXNzIE5hbWluZ0NvbnRleHQgewogIHB1YmxpYzoKCiAg
ICB0eXBlZGVmIE5hbWluZ0NvbnRleHRfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgTmFtaW5n
Q29udGV4dF92YXIgX3Zhcl90eXBlOwoKICAgIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShf
cHRyX3R5cGUpOwogICAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93KENPUkJBOjpPYmplY3RfcHRy
KTsKICAgIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoKICAgIHN0YXRpYyBpbmxpbmUgc2l6ZV90
IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgICBzdGF0aWMgaW5saW5lIHZvaWQg
X21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGlj
IGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0m
KTsKCiAgICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZl
cmVkU3RyZWFtJiBzKSB7CiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1h
cnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFy
cm93KG9iaik7CiAgICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICAgIHJldHVybiByZXN1bHQ7
CiAgICB9CgogICAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1C
dWZmZXJlZFN0cmVhbSYgcykgewogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6
VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgICBfcHRyX3R5cGUgcmVzdWx0ID0g
X25hcnJvdyhvYmopOwogICAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgICByZXR1cm4gcmVz
dWx0OwogICAgfQoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCiAgICBlbnVt
IE5vdEZvdW5kUmVhc29uIHsgbWlzc2luZ19ub2RlLCBub3RfY29udGV4dCwgbm90X29iamVjdCB9
OwogICAgdHlwZWRlZiBOb3RGb3VuZFJlYXNvbiYgTm90Rm91bmRSZWFzb25fb3V0OwoKICAgIHN0
YXRpYyBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Ob3RGb3VuZFJlYXNvbjsKCiAgICBj
bGFzcyBOb3RGb3VuZCA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbiB7CiAgICBwdWJsaWM6
CgogICAgICBOb3RGb3VuZFJlYXNvbiB3aHk7CgogICAgICBOYW1lIHJlc3Rfb2ZfbmFtZTsKCiAg
ICAgIGlubGluZSBOb3RGb3VuZCgpIHsKICAgICAgICBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0
VG9BbnlGbjsKICAgICAgICBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsK
ICAgICAgfQogICAgICBOb3RGb3VuZChjb25zdCBOb3RGb3VuZCYpOwogICAgICBOb3RGb3VuZChO
b3RGb3VuZFJlYXNvbiBpX3doeSwgY29uc3QgTmFtZSBpX3Jlc3Rfb2ZfbmFtZSk7CiAgICAgIE5v
dEZvdW5kJiBvcGVyYXRvcj0oY29uc3QgTm90Rm91bmQmKTsKICAgICAgdmlydHVhbCB+Tm90Rm91
bmQoKTsKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSgpOwogICAgICBzdGF0aWMgTm90Rm91bmQq
IF9kb3duY2FzdChDT1JCQTo6RXhjZXB0aW9uKik7CiAgICAgIHN0YXRpYyBjb25zdCBOb3RGb3Vu
ZCogX2Rvd25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsKICAgICAgc3RhdGljIGlubGlu
ZSBOb3RGb3VuZCogX25hcnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBfZSkgewogICAgICAgIHJldHVy
biBfZG93bmNhc3QoX2UpOwogICAgICB9CgogICAgICBzaXplX3QgX05QX2FsaWduZWRTaXplKHNp
emVfdCkgY29uc3Q7CgogICAgICB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikg
Y29uc3QgOwogICAgICB2b2lkIG9wZXJhdG9yPj49KE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qg
OwogICAgICB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikgOwogICAgICB2b2lk
IG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikgOwoKICAgICAgc3RhdGljIGluc2VydEV4
Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47CiAgICAgIHN0YXRpYyBpbnNlcnRFeGNlcHRpb25U
b0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOwoKICAgICAgdmlydHVhbCBDT1JCQTo6RXhjZXB0aW9u
KiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7CgogICAgICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3Jl
cG9JZDsKCiAgICBwcml2YXRlOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQo
KSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCopIGNvbnN0
OwogICAgICB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25z
dDsKICAgICAgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29u
c3Q7CiAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Ob3RG
b3VuZDsKCiAgICBjbGFzcyBDYW5ub3RQcm9jZWVkIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0
aW9uIHsKICAgIHB1YmxpYzoKCiAgICAgIF9DT1JCQV9PYmpSZWZfTWVtYmVyPCBfb2JqcmVmX05h
bWluZ0NvbnRleHQsIE5hbWluZ0NvbnRleHRfSGVscGVyPiBjeHQ7CgogICAgICBOYW1lIHJlc3Rf
b2ZfbmFtZTsKCiAgICAgIGlubGluZSBDYW5ub3RQcm9jZWVkKCkgewogICAgICAgIHBkX2luc2Vy
dFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOwogICAgICAgIHBkX2luc2VydFRvQW55Rm5OQ1AgPSBp
bnNlcnRUb0FueUZuTkNQOwogICAgICB9CiAgICAgIENhbm5vdFByb2NlZWQoY29uc3QgQ2Fubm90
UHJvY2VlZCYpOwogICAgICBDYW5ub3RQcm9jZWVkKE5hbWluZ0NvbnRleHRfcHRyIGlfY3h0LCBj
b25zdCBOYW1lIGlfcmVzdF9vZl9uYW1lKTsKICAgICAgQ2Fubm90UHJvY2VlZCYgb3BlcmF0b3I9
KGNvbnN0IENhbm5vdFByb2NlZWQmKTsKICAgICAgdmlydHVhbCB+Q2Fubm90UHJvY2VlZCgpOwog
ICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7CiAgICAgIHN0YXRpYyBDYW5ub3RQcm9jZWVkKiBf
ZG93bmNhc3QoQ09SQkE6OkV4Y2VwdGlvbiopOwogICAgICBzdGF0aWMgY29uc3QgQ2Fubm90UHJv
Y2VlZCogX2Rvd25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsKICAgICAgc3RhdGljIGlu
bGluZSBDYW5ub3RQcm9jZWVkKiBfbmFycm93KENPUkJBOjpFeGNlcHRpb24qIF9lKSB7CiAgICAg
ICAgcmV0dXJuIF9kb3duY2FzdChfZSk7CiAgICAgIH0KCiAgICAgIHNpemVfdCBfTlBfYWxpZ25l
ZFNpemUoc2l6ZV90KSBjb25zdDsKCiAgICAgIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRT
dHJlYW0mKSBjb25zdCA7CiAgICAgIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0m
KSBjb25zdCA7CiAgICAgIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVmZmVyZWRTdHJlYW0mKSA7CiAg
ICAgIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSA7CgogICAgICBzdGF0aWMg
aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsKICAgICAgc3RhdGljIGluc2VydEV4
Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7CgogICAgICB2aXJ0dWFsIENPUkJBOjpF
eGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBfUERfcmVwb0lkOwoKICAgIHByaXZhdGU6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogX05Q
X3R5cGVJZCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50
KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0cmVh
bSYpIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTWVtQnVmZmVyZWRTdHJl
YW0mKSBjb25zdDsKICAgIH07CgogICAgc3RhdGljIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIg
X3RjX0Nhbm5vdFByb2NlZWQ7CgogICAgY2xhc3MgSW52YWxpZE5hbWUgOiBwdWJsaWMgQ09SQkE6
OlVzZXJFeGNlcHRpb24gewogICAgcHVibGljOgoKICAgICAgaW5saW5lIEludmFsaWROYW1lKCkg
ewogICAgICAgIHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOwogICAgICAgIHBkX2lu
c2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOwogICAgICB9CiAgICAgIEludmFsaWRO
YW1lKGNvbnN0IEludmFsaWROYW1lJik7CgogICAgICBJbnZhbGlkTmFtZSYgb3BlcmF0b3I9KGNv
bnN0IEludmFsaWROYW1lJik7CiAgICAgIHZpcnR1YWwgfkludmFsaWROYW1lKCk7CiAgICAgIHZp
cnR1YWwgdm9pZCBfcmFpc2UoKTsKICAgICAgc3RhdGljIEludmFsaWROYW1lKiBfZG93bmNhc3Qo
Q09SQkE6OkV4Y2VwdGlvbiopOwogICAgICBzdGF0aWMgY29uc3QgSW52YWxpZE5hbWUqIF9kb3du
Y2FzdChjb25zdCBDT1JCQTo6RXhjZXB0aW9uKik7CiAgICAgIHN0YXRpYyBpbmxpbmUgSW52YWxp
ZE5hbWUqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlvbiogX2UpIHsKICAgICAgICByZXR1cm4gX2Rv
d25jYXN0KF9lKTsKICAgICAgfQoKICAgICAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVm
ZmVyZWRTdHJlYW0mKSBjb25zdCB7IH0KICAgICAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVt
QnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7IH0KICAgICAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0o
TmV0QnVmZmVyZWRTdHJlYW0mKSB7IH0KICAgICAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVt
QnVmZmVyZWRTdHJlYW0mKSB7IH0KCiAgICAgIHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBp
bnNlcnRUb0FueUZuOwogICAgICBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0
VG9BbnlGbk5DUDsKCiAgICAgIHZpcnR1YWwgQ09SQkE6OkV4Y2VwdGlvbiogX05QX2R1cGxpY2F0
ZSgpIGNvbnN0OwoKICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7CgogICAgcHJp
dmF0ZToKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7CiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqKSBjb25zdDsKICAgICAgdmlydHVh
bCB2b2lkIF9OUF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7CiAgICAgIHZpcnR1
YWwgdm9pZCBfTlBfbWFyc2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OwogICAgfTsKCiAg
ICBzdGF0aWMgY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfSW52YWxpZE5hbWU7CgogICAg
Y2xhc3MgQWxyZWFkeUJvdW5kIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uIHsKICAgIHB1
YmxpYzoKCiAgICAgIGlubGluZSBBbHJlYWR5Qm91bmQoKSB7CiAgICAgICAgcGRfaW5zZXJ0VG9B
bnlGbiA9IGluc2VydFRvQW55Rm47CiAgICAgICAgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2Vy
dFRvQW55Rm5OQ1A7CiAgICAgIH0KICAgICAgQWxyZWFkeUJvdW5kKGNvbnN0IEFscmVhZHlCb3Vu
ZCYpOwoKICAgICAgQWxyZWFkeUJvdW5kJiBvcGVyYXRvcj0oY29uc3QgQWxyZWFkeUJvdW5kJik7
CiAgICAgIHZpcnR1YWwgfkFscmVhZHlCb3VuZCgpOwogICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNl
KCk7CiAgICAgIHN0YXRpYyBBbHJlYWR5Qm91bmQqIF9kb3duY2FzdChDT1JCQTo6RXhjZXB0aW9u
Kik7CiAgICAgIHN0YXRpYyBjb25zdCBBbHJlYWR5Qm91bmQqIF9kb3duY2FzdChjb25zdCBDT1JC
QTo6RXhjZXB0aW9uKik7CiAgICAgIHN0YXRpYyBpbmxpbmUgQWxyZWFkeUJvdW5kKiBfbmFycm93
KENPUkJBOjpFeGNlcHRpb24qIF9lKSB7CiAgICAgICAgcmV0dXJuIF9kb3duY2FzdChfZSk7CiAg
ICAgIH0KCiAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikg
Y29uc3QgeyB9CiAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE1lbUJ1ZmZlcmVkU3RyZWFt
JikgY29uc3QgeyB9CiAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3Ry
ZWFtJikgeyB9CiAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFt
JikgeyB9CgogICAgICBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsK
ICAgICAgc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7Cgog
ICAgICB2aXJ0dWFsIENPUkJBOjpFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsKCiAg
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKICAgIHByaXZhdGU6CiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9OUF9yZXBvSWQoaW50KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBfTlBfbWFy
c2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgX05QX21h
cnNoYWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsKICAgIH07CgogICAgc3RhdGljIGNvbnN0
IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0FscmVhZHlCb3VuZDsKCiAgICBjbGFzcyBOb3RFbXB0
eSA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbiB7CiAgICBwdWJsaWM6CgogICAgICBpbmxp
bmUgTm90RW1wdHkoKSB7CiAgICAgICAgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47
CiAgICAgICAgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7CiAgICAgIH0K
ICAgICAgTm90RW1wdHkoY29uc3QgTm90RW1wdHkmKTsKCiAgICAgIE5vdEVtcHR5JiBvcGVyYXRv
cj0oY29uc3QgTm90RW1wdHkmKTsKICAgICAgdmlydHVhbCB+Tm90RW1wdHkoKTsKICAgICAgdmly
dHVhbCB2b2lkIF9yYWlzZSgpOwogICAgICBzdGF0aWMgTm90RW1wdHkqIF9kb3duY2FzdChDT1JC
QTo6RXhjZXB0aW9uKik7CiAgICAgIHN0YXRpYyBjb25zdCBOb3RFbXB0eSogX2Rvd25jYXN0KGNv
bnN0IENPUkJBOjpFeGNlcHRpb24qKTsKICAgICAgc3RhdGljIGlubGluZSBOb3RFbXB0eSogX25h
cnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBfZSkgewogICAgICAgIHJldHVybiBfZG93bmNhc3QoX2Up
OwogICAgICB9CgogICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShOZXRCdWZmZXJlZFN0cmVh
bSYpIGNvbnN0IHsgfQogICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0
cmVhbSYpIGNvbnN0IHsgfQogICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJl
ZFN0cmVhbSYpIHsgfQogICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0
cmVhbSYpIHsgfQoKICAgICAgc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55
Rm47CiAgICAgIHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQ
OwoKICAgICAgdmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7
CgogICAgICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCiAgICBwcml2YXRlOgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsKICAgICAgdmlydHVhbCBj
b25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCopIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgX05Q
X21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsKICAgICAgdmlydHVhbCB2b2lkIF9O
UF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7CiAgICB9OwoKICAgIHN0YXRpYyBj
b25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Ob3RFbXB0eTsKCiAgfTsKCiAgY2xhc3MgX29i
anJlZl9OYW1pbmdDb250ZXh0IDoKICAgIHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpPYmplY3QsIHB1
YmxpYyB2aXJ0dWFsIG9tbmlPYmpSZWYKICB7CiAgcHVibGljOgogICAgdm9pZCBiaW5kKGNvbnN0
IE5hbWUmIG4sIENPUkJBOjpPYmplY3RfcHRyIG9iaik7CiAgICB2b2lkIHJlYmluZChjb25zdCBO
YW1lJiBuLCBDT1JCQTo6T2JqZWN0X3B0ciBvYmopOwogICAgdm9pZCBiaW5kX2NvbnRleHQoY29u
c3QgTmFtZSYgbiwgTmFtaW5nQ29udGV4dF9wdHIgbmMpOwogICAgdm9pZCByZWJpbmRfY29udGV4
dChjb25zdCBOYW1lJiBuLCBOYW1pbmdDb250ZXh0X3B0ciBuYyk7CiAgICBDT1JCQTo6T2JqZWN0
X3B0ciByZXNvbHZlKGNvbnN0IE5hbWUmIG4pOwogICAgdm9pZCB1bmJpbmQoY29uc3QgTmFtZSYg
bik7CiAgICBOYW1pbmdDb250ZXh0X3B0ciBuZXdfY29udGV4dCgpOwogICAgTmFtaW5nQ29udGV4
dF9wdHIgYmluZF9uZXdfY29udGV4dChjb25zdCBOYW1lJiBuKTsKICAgIHZvaWQgZGVzdHJveSgp
OwogICAgdm9pZCBsaXN0KENPUkJBOjpVTG9uZyBob3dfbWFueSwgQmluZGluZ0xpc3Rfb3V0IGJs
LCBfQ09SQkFfT2JqUmVmX09VVF9hcmc8IENvc05hbWluZzo6X29ianJlZl9CaW5kaW5nSXRlcmF0
b3IsIEJpbmRpbmdJdGVyYXRvcl9IZWxwZXIgPiBiaSk7CgogICAgaW5saW5lIF9vYmpyZWZfTmFt
aW5nQ29udGV4dCgpIHsgX1BSX3NldG9iaigwKTsgfQogICAgX29ianJlZl9OYW1pbmdDb250ZXh0
KGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50aXR5Kiwgb21u
aUxvY2FsSWRlbnRpdHkqKTsKCiAgcHJvdGVjdGVkOgogICAgdmlydHVhbCB+X29ianJlZl9OYW1p
bmdDb250ZXh0KCk7CgogIHByaXZhdGU6CiAgICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihj
b25zdCBjaGFyKik7CgogICAgX29ianJlZl9OYW1pbmdDb250ZXh0KGNvbnN0IF9vYmpyZWZfTmFt
aW5nQ29udGV4dCYpOwogICAgX29ianJlZl9OYW1pbmdDb250ZXh0JiBvcGVyYXRvciA9IChjb25z
dCBfb2JqcmVmX05hbWluZ0NvbnRleHQmKTsKCiAgfTsKCiAgY2xhc3MgX3BvZl9OYW1pbmdDb250
ZXh0IDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CiAgcHVibGljOgogICAgaW5saW5lIF9w
b2ZfTmFtaW5nQ29udGV4dCgpIDogcHJveHlPYmplY3RGYWN0b3J5KE5hbWluZ0NvbnRleHQ6Ol9Q
RF9yZXBvSWQpIHt9CiAgICB2aXJ0dWFsIH5fcG9mX05hbWluZ0NvbnRleHQoKTsKCiAgICB2aXJ0
dWFsIG9tbmlPYmpSZWYqIG5ld09ialJlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxl
TGlzdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBv
bW5pTG9jYWxJZGVudGl0eSopOwogICAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19hKGNvbnN0
IGNoYXIqKSBjb25zdDsKICB9OwoKICBjbGFzcyBfaW1wbF9OYW1pbmdDb250ZXh0IDoKICAgIHB1
YmxpYyB2aXJ0dWFsIG9tbmlTZXJ2YW50CiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9pbXBs
X05hbWluZ0NvbnRleHQoKTsKCiAgICB2aXJ0dWFsIHZvaWQgYmluZChjb25zdCBOYW1lJiBuLCBD
T1JCQTo6T2JqZWN0X3B0ciBvYmopID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWJpbmQoY29uc3Qg
TmFtZSYgbiwgQ09SQkE6Ok9iamVjdF9wdHIgb2JqKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgYmlu
ZF9jb250ZXh0KGNvbnN0IE5hbWUmIG4sIE5hbWluZ0NvbnRleHRfcHRyIG5jKSA9IDA7CiAgICB2
aXJ0dWFsIHZvaWQgcmViaW5kX2NvbnRleHQoY29uc3QgTmFtZSYgbiwgTmFtaW5nQ29udGV4dF9w
dHIgbmMpID0gMDsKICAgIHZpcnR1YWwgQ09SQkE6Ok9iamVjdF9wdHIgcmVzb2x2ZShjb25zdCBO
YW1lJiBuKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgdW5iaW5kKGNvbnN0IE5hbWUmIG4pID0gMDsK
ICAgIHZpcnR1YWwgTmFtaW5nQ29udGV4dF9wdHIgbmV3X2NvbnRleHQoKSA9IDA7CiAgICB2aXJ0
dWFsIE5hbWluZ0NvbnRleHRfcHRyIGJpbmRfbmV3X2NvbnRleHQoY29uc3QgTmFtZSYgbikgPSAw
OwogICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgbGlzdChD
T1JCQTo6VUxvbmcgaG93X21hbnksIEJpbmRpbmdMaXN0X291dCBibCwgX0NPUkJBX09ialJlZl9P
VVRfYXJnPCBDb3NOYW1pbmc6Ol9vYmpyZWZfQmluZGluZ0l0ZXJhdG9yLCBCaW5kaW5nSXRlcmF0
b3JfSGVscGVyID4gYmkpID0gMDsKCiAgcHVibGljOgogICAgdmlydHVhbCBfQ09SQkFfQm9vbGVh
biBfZGlzcGF0Y2goR0lPUF9TJik7CgogIHByaXZhdGU6CiAgICB2aXJ0dWFsIHZvaWQqIF9wdHJU
b0ludGVyZmFjZShjb25zdCBjaGFyKik7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVy
aXZlZFJlcG9JZCgpOwogIH07CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90
Y19OYW1pbmdDb250ZXh0OwojIDcyNCAiL3Vzci9sb2NhbC9pbmNsdWRlL29tbmlPUkIzL05hbWlu
Zy5oaCIgMwogIGNsYXNzIEJpbmRpbmdJdGVyYXRvciB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYg
QmluZGluZ0l0ZXJhdG9yX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIEJpbmRpbmdJdGVyYXRv
cl92YXIgX3Zhcl90eXBlOwoKICAgIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5
cGUpOwogICAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93KENPUkJBOjpPYmplY3RfcHRyKTsKICAg
IHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoKICAgIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGln
bmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNo
YWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIGlubGlu
ZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAg
ICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3Ry
ZWFtJiBzKSB7CiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxP
YmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9i
aik7CiAgICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9
CgogICAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJl
ZFN0cmVhbSYgcykgewogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJz
aGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJv
dyhvYmopOwogICAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgICByZXR1cm4gcmVzdWx0Owog
ICAgfQoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCgogIH07CgogIGNsYXNz
IF9vYmpyZWZfQmluZGluZ0l0ZXJhdG9yIDoKICAgIHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpPYmpl
Y3QsIHB1YmxpYyB2aXJ0dWFsIG9tbmlPYmpSZWYKICB7CiAgcHVibGljOgogICAgQ09SQkE6OkJv
b2xlYW4gbmV4dF9vbmUoQmluZGluZ19vdXQgYik7CiAgICBDT1JCQTo6Qm9vbGVhbiBuZXh0X24o
Q09SQkE6OlVMb25nIGhvd19tYW55LCBCaW5kaW5nTGlzdF9vdXQgYmwpOwogICAgdm9pZCBkZXN0
cm95KCk7CgogICAgaW5saW5lIF9vYmpyZWZfQmluZGluZ0l0ZXJhdG9yKCkgeyBfUFJfc2V0b2Jq
KDApOyB9CiAgICBfb2JqcmVmX0JpbmRpbmdJdGVyYXRvcihjb25zdCBjaGFyKiwgSU9QOjpUYWdn
ZWRQcm9maWxlTGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CgogIHBy
b3RlY3RlZDoKICAgIHZpcnR1YWwgfl9vYmpyZWZfQmluZGluZ0l0ZXJhdG9yKCk7CgogIHByaXZh
dGU6CiAgICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKik7CgogICAgX29i
anJlZl9CaW5kaW5nSXRlcmF0b3IoY29uc3QgX29ianJlZl9CaW5kaW5nSXRlcmF0b3ImKTsKICAg
IF9vYmpyZWZfQmluZGluZ0l0ZXJhdG9yJiBvcGVyYXRvciA9IChjb25zdCBfb2JqcmVmX0JpbmRp
bmdJdGVyYXRvciYpOwoKICB9OwoKICBjbGFzcyBfcG9mX0JpbmRpbmdJdGVyYXRvciA6IHB1Ymxp
YyBwcm94eU9iamVjdEZhY3RvcnkgewogIHB1YmxpYzoKICAgIGlubGluZSBfcG9mX0JpbmRpbmdJ
dGVyYXRvcigpIDogcHJveHlPYmplY3RGYWN0b3J5KEJpbmRpbmdJdGVyYXRvcjo6X1BEX3JlcG9J
ZCkge30KICAgIHZpcnR1YWwgfl9wb2ZfQmluZGluZ0l0ZXJhdG9yKCk7CgogICAgdmlydHVhbCBv
bW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3Qq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxv
Y2FsSWRlbnRpdHkqKTsKICAgIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFy
KikgY29uc3Q7CiAgfTsKCiAgY2xhc3MgX2ltcGxfQmluZGluZ0l0ZXJhdG9yIDoKICAgIHB1Ymxp
YyB2aXJ0dWFsIG9tbmlTZXJ2YW50CiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9pbXBsX0Jp
bmRpbmdJdGVyYXRvcigpOwoKICAgIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gbmV4dF9vbmUoQmlu
ZGluZ19vdXQgYikgPSAwOwogICAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBuZXh0X24oQ09SQkE6
OlVMb25nIGhvd19tYW55LCBCaW5kaW5nTGlzdF9vdXQgYmwpID0gMDsKICAgIHZpcnR1YWwgdm9p
ZCBkZXN0cm95KCkgPSAwOwoKICBwdWJsaWM6CiAgICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9k
aXNwYXRjaChHSU9QX1MmKTsKCiAgcHJpdmF0ZToKICAgIHZpcnR1YWwgdm9pZCogX3B0clRvSW50
ZXJmYWNlKGNvbnN0IGNoYXIqKTsKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVk
UmVwb0lkKCk7CiAgfTsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0Jp
bmRpbmdJdGVyYXRvcjsKCgoKCiAgY2xhc3MgTmFtaW5nQ29udGV4dEV4dDsKICBjbGFzcyBfb2Jq
cmVmX05hbWluZ0NvbnRleHRFeHQ7CiAgY2xhc3MgX2ltcGxfTmFtaW5nQ29udGV4dEV4dDsKCiAg
dHlwZWRlZiBfb2JqcmVmX05hbWluZ0NvbnRleHRFeHQqIE5hbWluZ0NvbnRleHRFeHRfcHRyOwog
IHR5cGVkZWYgTmFtaW5nQ29udGV4dEV4dF9wdHIgTmFtaW5nQ29udGV4dEV4dFJlZjsKCiAgY2xh
c3MgTmFtaW5nQ29udGV4dEV4dF9IZWxwZXIgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgTmFtaW5n
Q29udGV4dEV4dF9wdHIgX3B0cl90eXBlOwoKICAgIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwog
ICAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwogICAgc3RhdGljIHZv
aWQgcmVsZWFzZShfcHRyX3R5cGUpOwogICAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlw
ZSk7CiAgICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsK
ICAgIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVh
bSYpOwogICAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJl
YW0mKTsKICAgIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJl
ZFN0cmVhbSYpOwogICAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVy
ZWRTdHJlYW0mKTsKICB9OwoKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpyZWZfTmFt
aW5nQ29udGV4dEV4dCwgTmFtaW5nQ29udGV4dEV4dF9IZWxwZXI+IE5hbWluZ0NvbnRleHRFeHRf
dmFyOwogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9PVVRfYXJnPF9vYmpyZWZfTmFtaW5nQ29udGV4
dEV4dCxOYW1pbmdDb250ZXh0RXh0X0hlbHBlciA+IE5hbWluZ0NvbnRleHRFeHRfb3V0OwoKCgog
IGNsYXNzIE5hbWluZ0NvbnRleHRFeHQgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIE5hbWluZ0Nv
bnRleHRFeHRfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgTmFtaW5nQ29udGV4dEV4dF92YXIg
X3Zhcl90eXBlOwoKICAgIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwog
ICAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93KENPUkJBOjpPYmplY3RfcHRyKTsKICAgIHN0YXRp
YyBfcHRyX3R5cGUgX25pbCgpOwoKICAgIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6
ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpS
ZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIGlubGluZSB2b2lk
IF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgICBzdGF0
aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBz
KSB7CiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYo
X1BEX3JlcG9JZCwgcyk7CiAgICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAg
ICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAg
c3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVh
bSYgcykgewogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2Jq
UmVmKF9QRF9yZXBvSWQsIHMpOwogICAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmop
OwogICAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoK
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCiAgICBzdGF0aWMgY29uc3QgQ09S
QkE6OlR5cGVDb2RlX3B0ciBfdGNfU3RyaW5nTmFtZTsKCiAgICB0eXBlZGVmIGNoYXIqIFN0cmlu
Z05hbWU7CiAgICB0eXBlZGVmIENPUkJBOjpTdHJpbmdfdmFyIFN0cmluZ05hbWVfdmFyOwoKICAg
IHN0YXRpYyBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19BZGRyZXNzOwoKICAgIHR5cGVk
ZWYgY2hhciogQWRkcmVzczsKICAgIHR5cGVkZWYgQ09SQkE6OlN0cmluZ192YXIgQWRkcmVzc192
YXI7CgogICAgc3RhdGljIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1VSTFN0cmluZzsK
CiAgICB0eXBlZGVmIGNoYXIqIFVSTFN0cmluZzsKICAgIHR5cGVkZWYgQ09SQkE6OlN0cmluZ192
YXIgVVJMU3RyaW5nX3ZhcjsKCiAgICBjbGFzcyBJbnZhbGlkQWRkcmVzcyA6IHB1YmxpYyBDT1JC
QTo6VXNlckV4Y2VwdGlvbiB7CiAgICBwdWJsaWM6CgogICAgICBpbmxpbmUgSW52YWxpZEFkZHJl
c3MoKSB7CiAgICAgICAgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47CiAgICAgICAg
cGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7CiAgICAgIH0KICAgICAgSW52
YWxpZEFkZHJlc3MoY29uc3QgSW52YWxpZEFkZHJlc3MmKTsKCiAgICAgIEludmFsaWRBZGRyZXNz
JiBvcGVyYXRvcj0oY29uc3QgSW52YWxpZEFkZHJlc3MmKTsKICAgICAgdmlydHVhbCB+SW52YWxp
ZEFkZHJlc3MoKTsKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSgpOwogICAgICBzdGF0aWMgSW52
YWxpZEFkZHJlc3MqIF9kb3duY2FzdChDT1JCQTo6RXhjZXB0aW9uKik7CiAgICAgIHN0YXRpYyBj
b25zdCBJbnZhbGlkQWRkcmVzcyogX2Rvd25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsK
ICAgICAgc3RhdGljIGlubGluZSBJbnZhbGlkQWRkcmVzcyogX25hcnJvdyhDT1JCQTo6RXhjZXB0
aW9uKiBfZSkgewogICAgICAgIHJldHVybiBfZG93bmNhc3QoX2UpOwogICAgICB9CgogICAgICBp
bmxpbmUgdm9pZCBvcGVyYXRvcj4+PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHsgfQogICAg
ICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHsgfQog
ICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0cmVhbSYpIHsgfQogICAg
ICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0cmVhbSYpIHsgfQoKICAgICAg
c3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47CiAgICAgIHN0YXRpYyBp
bnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOwoKICAgICAgdmlydHVhbCBD
T1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7CgogICAgICBzdGF0aWMgY29u
c3QgY2hhciogX1BEX3JlcG9JZDsKCiAgICBwcml2YXRlOgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIF9OUF90eXBlSWQoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVw
b0lkKGludCopIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTmV0QnVmZmVy
ZWRTdHJlYW0mKSBjb25zdDsKICAgICAgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1ZmZl
cmVkU3RyZWFtJikgY29uc3Q7CiAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBDT1JCQTo6VHlwZUNv
ZGVfcHRyIF90Y19JbnZhbGlkQWRkcmVzczsKCiAgfTsKCiAgY2xhc3MgX29ianJlZl9OYW1pbmdD
b250ZXh0RXh0IDoKICAgIHB1YmxpYyB2aXJ0dWFsIF9vYmpyZWZfTmFtaW5nQ29udGV4dAogIHsK
ICBwdWJsaWM6CiAgICBjaGFyKiB0b19zdHJpbmcoY29uc3QgTmFtZSYgbik7CiAgICBOYW1lKiB0
b19uYW1lKGNvbnN0IGNoYXIqIHNuKTsKICAgIGNoYXIqIHRvX3VybChjb25zdCBjaGFyKiBhZGRy
LCBjb25zdCBjaGFyKiBzbik7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciByZXNvbHZlX3N0cihjb25z
dCBjaGFyKiBuKTsKCiAgICBpbmxpbmUgX29ianJlZl9OYW1pbmdDb250ZXh0RXh0KCkgeyBfUFJf
c2V0b2JqKDApOyB9CiAgICBfb2JqcmVmX05hbWluZ0NvbnRleHRFeHQoY29uc3QgY2hhciosIElP
UDo6VGFnZ2VkUHJvZmlsZUxpc3QqLCBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSop
OwoKICBwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIH5fb2JqcmVmX05hbWluZ0NvbnRleHRFeHQoKTsK
CiAgcHJpdmF0ZToKICAgIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqKTsK
CiAgICBfb2JqcmVmX05hbWluZ0NvbnRleHRFeHQoY29uc3QgX29ianJlZl9OYW1pbmdDb250ZXh0
RXh0Jik7CiAgICBfb2JqcmVmX05hbWluZ0NvbnRleHRFeHQmIG9wZXJhdG9yID0gKGNvbnN0IF9v
YmpyZWZfTmFtaW5nQ29udGV4dEV4dCYpOwoKICB9OwoKICBjbGFzcyBfcG9mX05hbWluZ0NvbnRl
eHRFeHQgOiBwdWJsaWMgcHJveHlPYmplY3RGYWN0b3J5IHsKICBwdWJsaWM6CiAgICBpbmxpbmUg
X3BvZl9OYW1pbmdDb250ZXh0RXh0KCkgOiBwcm94eU9iamVjdEZhY3RvcnkoTmFtaW5nQ29udGV4
dEV4dDo6X1BEX3JlcG9JZCkge30KICAgIHZpcnR1YWwgfl9wb2ZfTmFtaW5nQ29udGV4dEV4dCgp
OwoKICAgIHZpcnR1YWwgb21uaU9ialJlZiogbmV3T2JqUmVmKGNvbnN0IGNoYXIqLCBJT1A6OlRh
Z2dlZFByb2ZpbGVMaXN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJ
ZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFu
IGlzX2EoY29uc3QgY2hhciopIGNvbnN0OwogIH07CgogIGNsYXNzIF9pbXBsX05hbWluZ0NvbnRl
eHRFeHQgOgogICAgcHVibGljIHZpcnR1YWwgX2ltcGxfTmFtaW5nQ29udGV4dAogIHsKICBwdWJs
aWM6CiAgICB2aXJ0dWFsIH5faW1wbF9OYW1pbmdDb250ZXh0RXh0KCk7CgogICAgdmlydHVhbCBj
aGFyKiB0b19zdHJpbmcoY29uc3QgTmFtZSYgbikgPSAwOwogICAgdmlydHVhbCBOYW1lKiB0b19u
YW1lKGNvbnN0IGNoYXIqIHNuKSA9IDA7CiAgICB2aXJ0dWFsIGNoYXIqIHRvX3VybChjb25zdCBj
aGFyKiBhZGRyLCBjb25zdCBjaGFyKiBzbikgPSAwOwogICAgdmlydHVhbCBDT1JCQTo6T2JqZWN0
X3B0ciByZXNvbHZlX3N0cihjb25zdCBjaGFyKiBuKSA9IDA7CgogIHB1YmxpYzoKICAgIHZpcnR1
YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNoKEdJT1BfUyYpOwoKICBwcml2YXRlOgogICAgdmly
dHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hhciopOwogICAgdmlydHVhbCBjb25z
dCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsKICB9OwoKICBleHRlcm4gY29uc3QgQ09SQkE6
OlR5cGVDb2RlX3B0ciBfdGNfTmFtaW5nQ29udGV4dEV4dDsKCn0KCm5hbWVzcGFjZSBQT0FfQ29z
TmFtaW5nCnsKCiAgY2xhc3MgTmFtaW5nQ29udGV4dCA6CiAgICBwdWJsaWMgdmlydHVhbCBDb3NO
YW1pbmc6Ol9pbXBsX05hbWluZ0NvbnRleHQsCiAgICBwdWJsaWMgdmlydHVhbCBQb3J0YWJsZVNl
cnZlcjo6U2VydmFudEJhc2UKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB+TmFtaW5nQ29udGV4
dCgpOwoKICAgIGlubGluZSBDb3NOYW1pbmc6Ok5hbWluZ0NvbnRleHRfcHRyIF90aGlzKCkgewog
ICAgICByZXR1cm4gKENvc05hbWluZzo6TmFtaW5nQ29udGV4dF9wdHIpIF9kb190aGlzKENvc05h
bWluZzo6TmFtaW5nQ29udGV4dDo6X1BEX3JlcG9JZCk7CiAgICB9CiAgfTsKCiAgY2xhc3MgQmlu
ZGluZ0l0ZXJhdG9yIDoKICAgIHB1YmxpYyB2aXJ0dWFsIENvc05hbWluZzo6X2ltcGxfQmluZGlu
Z0l0ZXJhdG9yLAogICAgcHVibGljIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRCYXNl
CiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfkJpbmRpbmdJdGVyYXRvcigpOwoKICAgIGlubGlu
ZSBDb3NOYW1pbmc6OkJpbmRpbmdJdGVyYXRvcl9wdHIgX3RoaXMoKSB7CiAgICAgIHJldHVybiAo
Q29zTmFtaW5nOjpCaW5kaW5nSXRlcmF0b3JfcHRyKSBfZG9fdGhpcyhDb3NOYW1pbmc6OkJpbmRp
bmdJdGVyYXRvcjo6X1BEX3JlcG9JZCk7CiAgICB9CiAgfTsKCiAgY2xhc3MgTmFtaW5nQ29udGV4
dEV4dCA6CiAgICBwdWJsaWMgdmlydHVhbCBDb3NOYW1pbmc6Ol9pbXBsX05hbWluZ0NvbnRleHRF
eHQsCiAgICBwdWJsaWMgdmlydHVhbCBOYW1pbmdDb250ZXh0CiAgewogIHB1YmxpYzoKICAgIHZp
cnR1YWwgfk5hbWluZ0NvbnRleHRFeHQoKTsKCiAgICBpbmxpbmUgQ29zTmFtaW5nOjpOYW1pbmdD
b250ZXh0RXh0X3B0ciBfdGhpcygpIHsKICAgICAgcmV0dXJuIChDb3NOYW1pbmc6Ok5hbWluZ0Nv
bnRleHRFeHRfcHRyKSBfZG9fdGhpcyhDb3NOYW1pbmc6Ok5hbWluZ0NvbnRleHRFeHQ6Ol9QRF9y
ZXBvSWQpOwogICAgfQogIH07Cgp9CgoKCgpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6
QW55JiBfYSwgY29uc3QgQ29zTmFtaW5nOjpOYW1lQ29tcG9uZW50JiBfcyk7CmV4dGVybiB2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDb3NOYW1pbmc6Ok5hbWVDb21wb25lbnQqIF9z
cCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBf
YSwgQ29zTmFtaW5nOjpOYW1lQ29tcG9uZW50KiYgX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBDb3NOYW1pbmc6Ok5hbWVD
b21wb25lbnQqJiBfc3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBf
YSwgY29uc3QgQ29zTmFtaW5nOjpOYW1lJiBfcyk7CmlubGluZSB2b2lkIG9wZXJhdG9yIDw8PSAo
Q09SQkE6OkFueSYgX2EsIENvc05hbWluZzo6TmFtZSogX3NwKSB7CiAgX2EgPDw9ICpfc3A7CiAg
ZGVsZXRlIF9zcDsKfQpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBD
T1JCQTo6QW55JiBfYSwgQ29zTmFtaW5nOjpOYW1lKiYgX3NwKTsKZXh0ZXJuIF9DT1JCQV9Cb29s
ZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENvc05hbWluZzo6
TmFtZSomIF9zcCk7CgppbmxpbmUgdm9pZCBvcGVyYXRvciA+Pj0oQ29zTmFtaW5nOjpCaW5kaW5n
VHlwZSBfZSwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICA6Om9wZXJhdG9yPj49KChDT1JCQTo6
VUxvbmcpX2UsIHMpOwp9CgppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKENvc05hbWluZzo6Qmlu
ZGluZ1R5cGUmIF9lLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpVTG9uZyBfMFJM
X2U7CiAgOjpvcGVyYXRvcjw8PShfMFJMX2Uscyk7CiAgc3dpdGNoIChfMFJMX2UpIHsKICAgIGNh
c2UgQ29zTmFtaW5nOjpub2JqZWN0OgoKICAgIGNhc2UgQ29zTmFtaW5nOjpuY29udGV4dDoKCiAg
ICBfZSA9IChDb3NOYW1pbmc6OkJpbmRpbmdUeXBlKSBfMFJMX2U7CiAgICBicmVhazsKICBkZWZh
dWx0OgogICAgX0NPUkJBX21hcnNoYWxfZXJyb3IoKTsKICB9Cn0KCmlubGluZSB2b2lkIG9wZXJh
dG9yID4+PShDb3NOYW1pbmc6OkJpbmRpbmdUeXBlIF9lLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykg
ewogIDo6b3BlcmF0b3I+Pj0oKENPUkJBOjpVTG9uZylfZSwgcyk7Cn0KCmlubGluZSB2b2lkIG9w
ZXJhdG9yIDw8PSAoQ29zTmFtaW5nOjpCaW5kaW5nVHlwZSYgX2UsIE1lbUJ1ZmZlcmVkU3RyZWFt
JiBzKSB7CiAgQ09SQkE6OlVMb25nIF8wUkxfZTsKICA6Om9wZXJhdG9yPDw9KF8wUkxfZSxzKTsK
ICBzd2l0Y2ggKF8wUkxfZSkgewogICAgY2FzZSBDb3NOYW1pbmc6Om5vYmplY3Q6CgogICAgY2Fz
ZSBDb3NOYW1pbmc6Om5jb250ZXh0OgoKICAgIF9lID0gKENvc05hbWluZzo6QmluZGluZ1R5cGUp
IF8wUkxfZTsKICAgIGJyZWFrOwogIGRlZmF1bHQ6CiAgICBfQ09SQkFfbWFyc2hhbF9lcnJvcigp
OwogIH0KfQoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ29zTmFtaW5nOjpCaW5k
aW5nVHlwZSBfcyk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkm
IF9hLCBDb3NOYW1pbmc6OkJpbmRpbmdUeXBlJiBfcyk7CgpleHRlcm4gdm9pZCBvcGVyYXRvcjw8
PShDT1JCQTo6QW55JiBfYSwgY29uc3QgQ29zTmFtaW5nOjpCaW5kaW5nJiBfcyk7CmV4dGVybiB2
b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDb3NOYW1pbmc6OkJpbmRpbmcqIF9zcCk7
CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwg
Q29zTmFtaW5nOjpCaW5kaW5nKiYgX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBDb3NOYW1pbmc6OkJpbmRpbmcqJiBfc3Ap
OwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgY29uc3QgQ29zTmFt
aW5nOjpCaW5kaW5nTGlzdCYgX3MpOwppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpB
bnkmIF9hLCBDb3NOYW1pbmc6OkJpbmRpbmdMaXN0KiBfc3ApIHsKICBfYSA8PD0gKl9zcDsKICBk
ZWxldGUgX3NwOwp9CmV4dGVybiBfQ09SQkFfQm9vbGVhbiBvcGVyYXRvciA+Pj0gKGNvbnN0IENP
UkJBOjpBbnkmIF9hLCBDb3NOYW1pbmc6OkJpbmRpbmdMaXN0KiYgX3NwKTsKZXh0ZXJuIF9DT1JC
QV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENvc05h
bWluZzo6QmluZGluZ0xpc3QqJiBfc3ApOwoKaW5saW5lIHZvaWQgb3BlcmF0b3IgPj49KENvc05h
bWluZzo6TmFtaW5nQ29udGV4dDo6Tm90Rm91bmRSZWFzb24gX2UsIE5ldEJ1ZmZlcmVkU3RyZWFt
JiBzKSB7CiAgOjpvcGVyYXRvcj4+PSgoQ09SQkE6OlVMb25nKV9lLCBzKTsKfQoKaW5saW5lIHZv
aWQgb3BlcmF0b3IgPDw9IChDb3NOYW1pbmc6Ok5hbWluZ0NvbnRleHQ6Ok5vdEZvdW5kUmVhc29u
JiBfZSwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6VUxvbmcgXzBSTF9lOwogIDo6
b3BlcmF0b3I8PD0oXzBSTF9lLHMpOwogIHN3aXRjaCAoXzBSTF9lKSB7CiAgICBjYXNlIENvc05h
bWluZzo6TmFtaW5nQ29udGV4dDo6bWlzc2luZ19ub2RlOgoKICAgIGNhc2UgQ29zTmFtaW5nOjpO
YW1pbmdDb250ZXh0Ojpub3RfY29udGV4dDoKCiAgICBjYXNlIENvc05hbWluZzo6TmFtaW5nQ29u
dGV4dDo6bm90X29iamVjdDoKCiAgICBfZSA9IChDb3NOYW1pbmc6Ok5hbWluZ0NvbnRleHQ6Ok5v
dEZvdW5kUmVhc29uKSBfMFJMX2U7CiAgICBicmVhazsKICBkZWZhdWx0OgogICAgX0NPUkJBX21h
cnNoYWxfZXJyb3IoKTsKICB9Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yID4+PShDb3NOYW1pbmc6
Ok5hbWluZ0NvbnRleHQ6Ok5vdEZvdW5kUmVhc29uIF9lLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykg
ewogIDo6b3BlcmF0b3I+Pj0oKENPUkJBOjpVTG9uZylfZSwgcyk7Cn0KCmlubGluZSB2b2lkIG9w
ZXJhdG9yIDw8PSAoQ29zTmFtaW5nOjpOYW1pbmdDb250ZXh0OjpOb3RGb3VuZFJlYXNvbiYgX2Us
IE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6OlVMb25nIF8wUkxfZTsKICA6Om9wZXJh
dG9yPDw9KF8wUkxfZSxzKTsKICBzd2l0Y2ggKF8wUkxfZSkgewogICAgY2FzZSBDb3NOYW1pbmc6
Ok5hbWluZ0NvbnRleHQ6Om1pc3Npbmdfbm9kZToKCiAgICBjYXNlIENvc05hbWluZzo6TmFtaW5n
Q29udGV4dDo6bm90X2NvbnRleHQ6CgogICAgY2FzZSBDb3NOYW1pbmc6Ok5hbWluZ0NvbnRleHQ6
Om5vdF9vYmplY3Q6CgogICAgX2UgPSAoQ29zTmFtaW5nOjpOYW1pbmdDb250ZXh0OjpOb3RGb3Vu
ZFJlYXNvbikgXzBSTF9lOwogICAgYnJlYWs7CiAgZGVmYXVsdDoKICAgIF9DT1JCQV9tYXJzaGFs
X2Vycm9yKCk7CiAgfQp9Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDb3NOYW1p
bmc6Ok5hbWluZ0NvbnRleHQ6Ok5vdEZvdW5kUmVhc29uIF9zKTsKQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIENvc05hbWluZzo6TmFtaW5nQ29udGV4dDo6
Tm90Rm91bmRSZWFzb24mIF9zKTsKCnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIGNv
bnN0IENvc05hbWluZzo6TmFtaW5nQ29udGV4dDo6Tm90Rm91bmQmIF9zKTsKdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiBfYSwgY29uc3QgQ29zTmFtaW5nOjpOYW1pbmdDb250ZXh0OjpOb3RG
b3VuZCogX3NwKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYg
X2EsIGNvbnN0IENvc05hbWluZzo6TmFtaW5nQ29udGV4dDo6Tm90Rm91bmQqJiBfc3ApOwoKdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgY29uc3QgQ29zTmFtaW5nOjpOYW1pbmdDb250
ZXh0OjpDYW5ub3RQcm9jZWVkJiBfcyk7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2Es
IGNvbnN0IENvc05hbWluZzo6TmFtaW5nQ29udGV4dDo6Q2Fubm90UHJvY2VlZCogX3NwKTsKQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENvc05h
bWluZzo6TmFtaW5nQ29udGV4dDo6Q2Fubm90UHJvY2VlZComIF9zcCk7Cgp2b2lkIG9wZXJhdG9y
PDw9KENPUkJBOjpBbnkmIF9hLCBjb25zdCBDb3NOYW1pbmc6Ok5hbWluZ0NvbnRleHQ6OkludmFs
aWROYW1lJiBfcyk7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIGNvbnN0IENvc05h
bWluZzo6TmFtaW5nQ29udGV4dDo6SW52YWxpZE5hbWUqIF9zcCk7CkNPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBDb3NOYW1pbmc6Ok5hbWluZ0Nv
bnRleHQ6OkludmFsaWROYW1lKiYgX3NwKTsKCnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYg
X2EsIGNvbnN0IENvc05hbWluZzo6TmFtaW5nQ29udGV4dDo6QWxyZWFkeUJvdW5kJiBfcyk7CnZv
aWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIGNvbnN0IENvc05hbWluZzo6TmFtaW5nQ29u
dGV4dDo6QWxyZWFkeUJvdW5kKiBfc3ApOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25z
dCBDT1JCQTo6QW55JiBfYSwgY29uc3QgQ29zTmFtaW5nOjpOYW1pbmdDb250ZXh0OjpBbHJlYWR5
Qm91bmQqJiBfc3ApOwoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgY29uc3QgQ29z
TmFtaW5nOjpOYW1pbmdDb250ZXh0OjpOb3RFbXB0eSYgX3MpOwp2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnkmIF9hLCBjb25zdCBDb3NOYW1pbmc6Ok5hbWluZ0NvbnRleHQ6Ok5vdEVtcHR5KiBf
c3ApOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgY29u
c3QgQ29zTmFtaW5nOjpOYW1pbmdDb250ZXh0OjpOb3RFbXB0eSomIF9zcCk7Cgp2b2lkIG9wZXJh
dG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDb3NOYW1pbmc6Ok5hbWluZ0NvbnRleHRfcHRyIF9zKTsK
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ29zTmFtaW5nOjpOYW1pbmdDb250ZXh0
X3B0ciogX3MpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBf
YSwgQ29zTmFtaW5nOjpOYW1pbmdDb250ZXh0X3B0ciYgX3MpOwoKdm9pZCBvcGVyYXRvcjw8PShD
T1JCQTo6QW55JiBfYSwgQ29zTmFtaW5nOjpCaW5kaW5nSXRlcmF0b3JfcHRyIF9zKTsKdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ29zTmFtaW5nOjpCaW5kaW5nSXRlcmF0b3JfcHRy
KiBfcyk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBD
b3NOYW1pbmc6OkJpbmRpbmdJdGVyYXRvcl9wdHImIF9zKTsKCnZvaWQgb3BlcmF0b3I8PD0oQ09S
QkE6OkFueSYgX2EsIGNvbnN0IENvc05hbWluZzo6TmFtaW5nQ29udGV4dEV4dDo6SW52YWxpZEFk
ZHJlc3MmIF9zKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgY29uc3QgQ29zTmFt
aW5nOjpOYW1pbmdDb250ZXh0RXh0OjpJbnZhbGlkQWRkcmVzcyogX3NwKTsKQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENvc05hbWluZzo6TmFt
aW5nQ29udGV4dEV4dDo6SW52YWxpZEFkZHJlc3MqJiBfc3ApOwoKdm9pZCBvcGVyYXRvcjw8PShD
T1JCQTo6QW55JiBfYSwgQ29zTmFtaW5nOjpOYW1pbmdDb250ZXh0RXh0X3B0ciBfcyk7CnZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENvc05hbWluZzo6TmFtaW5nQ29udGV4dEV4dF9w
dHIqIF9zKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2Es
IENvc05hbWluZzo6TmFtaW5nQ29udGV4dEV4dF9wdHImIF9zKTsKCmlubGluZSBzaXplX3QKQ29z
TmFtaW5nOjpOYW1pbmdDb250ZXh0OjpfYWxpZ25lZFNpemUoQ29zTmFtaW5nOjpOYW1pbmdDb250
ZXh0X3B0ciBvYmosIHNpemVfdCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpS
ZWYob2JqLCBfUERfcmVwb0lkLCA0MCwgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQKQ29zTmFtaW5n
OjpOYW1pbmdDb250ZXh0OjpfbWFyc2hhbE9ialJlZihDb3NOYW1pbmc6Ok5hbWluZ0NvbnRleHRf
cHRyIG9iaiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihv
YmosIF9QRF9yZXBvSWQsIDQwLCBzKTsKfQoKaW5saW5lIHZvaWQKQ29zTmFtaW5nOjpOYW1pbmdD
b250ZXh0OjpfbWFyc2hhbE9ialJlZihDb3NOYW1pbmc6Ok5hbWluZ0NvbnRleHRfcHRyIG9iaiwg
TWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9y
ZXBvSWQsIDQwLCBzKTsKfQoKaW5saW5lIHNpemVfdApDb3NOYW1pbmc6OkJpbmRpbmdJdGVyYXRv
cjo6X2FsaWduZWRTaXplKENvc05hbWluZzo6QmluZGluZ0l0ZXJhdG9yX3B0ciBvYmosIHNpemVf
dCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lk
LCA0Miwgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQKQ29zTmFtaW5nOjpCaW5kaW5nSXRlcmF0b3I6
Ol9tYXJzaGFsT2JqUmVmKENvc05hbWluZzo6QmluZGluZ0l0ZXJhdG9yX3B0ciBvYmosIE5ldEJ1
ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lk
LCA0Miwgcyk7Cn0KCmlubGluZSB2b2lkCkNvc05hbWluZzo6QmluZGluZ0l0ZXJhdG9yOjpfbWFy
c2hhbE9ialJlZihDb3NOYW1pbmc6OkJpbmRpbmdJdGVyYXRvcl9wdHIgb2JqLCBNZW1CdWZmZXJl
ZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgNDIs
IHMpOwp9CgppbmxpbmUgc2l6ZV90CkNvc05hbWluZzo6TmFtaW5nQ29udGV4dEV4dDo6X2FsaWdu
ZWRTaXplKENvc05hbWluZzo6TmFtaW5nQ29udGV4dEV4dF9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0
KSB7CiAgcmV0dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgNDMsIG9m
ZnNldCk7Cn0KCmlubGluZSB2b2lkCkNvc05hbWluZzo6TmFtaW5nQ29udGV4dEV4dDo6X21hcnNo
YWxPYmpSZWYoQ29zTmFtaW5nOjpOYW1pbmdDb250ZXh0RXh0X3B0ciBvYmosIE5ldEJ1ZmZlcmVk
U3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0Mywg
cyk7Cn0KCmlubGluZSB2b2lkCkNvc05hbWluZzo6TmFtaW5nQ29udGV4dEV4dDo6X21hcnNoYWxP
YmpSZWYoQ29zTmFtaW5nOjpOYW1pbmdDb250ZXh0RXh0X3B0ciBvYmosIE1lbUJ1ZmZlcmVkU3Ry
ZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0Mywgcyk7
Cn0KIyAyNjc2ICIvdXNyL2xvY2FsL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIgMiAzCiMgMTEg
Ii4uLy4uL2luY2x1ZGUvV2Fyc2F3L1RlbGx0YWxlLmhoIiAyCiMgMjIgIi4uLy4uL2luY2x1ZGUv
V2Fyc2F3L1RlbGx0YWxlLmhoIgojIDEgIi4uLy4uL2luY2x1ZGUvV2Fyc2F3L1R5cGVzLmhoIiAx
CiMgNDkgIi4uLy4uL2luY2x1ZGUvV2Fyc2F3L1R5cGVzLmhoIgpuYW1lc3BhY2UgV2Fyc2F3Cgp7
CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19UYWc7CgogIHR5cGVkZWYg
Q09SQkE6OlVMb25nIFRhZzsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3Rj
X0Nvb3JkOwoKICB0eXBlZGVmIENPUkJBOjpEb3VibGUgQ29vcmQ7CgogIGV4dGVybiBjb25zdCBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19QaXhlbENvb3JkOwoKICB0eXBlZGVmIENPUkJBOjpMb25n
IFBpeGVsQ29vcmQ7CgogIGVudW0gQXhpcyB7IHhheGlzLCB5YXhpcywgemF4aXMgfTsKICB0eXBl
ZGVmIEF4aXMmIEF4aXNfb3V0OwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBf
dGNfQXhpczsKCiAgc3RydWN0IFZlcnRleCB7CiAgICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBl
X0ZpeF9WYXI8VmVydGV4PiBfdmFyX3R5cGU7CgogICAgQ29vcmQgeDsKCiAgICBDb29yZCB5OwoK
ICAgIENvb3JkIHo7CgogICAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9m
ZnNldCkgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmKSBj
b25zdDsKICAgIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpOwogICAgdm9p
ZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgICB2b2lkIG9wZXJh
dG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmKTsKICB9OwoKICB0eXBlZGVmIFZlcnRleDo6X3Zh
cl90eXBlIFZlcnRleF92YXI7CgogIHR5cGVkZWYgX0NPUkJBX0NvbnN0clR5cGVfRml4X09VVF9h
cmc8IFZlcnRleCxWZXJ0ZXhfdmFyID4gVmVydGV4X291dDsKCiAgZXh0ZXJuIGNvbnN0IENPUkJB
OjpUeXBlQ29kZV9wdHIgX3RjX1ZlcnRleDsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29k
ZV9wdHIgX3RjX1ZlcnRpY2VzOwoKICBjbGFzcyBWZXJ0aWNlc192YXI7CgogIGNsYXNzIFZlcnRp
Y2VzIDogcHVibGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IFZlcnRleD4gewogIHB1Ymxp
YzoKICAgIHR5cGVkZWYgVmVydGljZXNfdmFyIF92YXJfdHlwZTsKICAgIGlubGluZSBWZXJ0aWNl
cygpIHt9CiAgICBpbmxpbmUgVmVydGljZXMoY29uc3QgVmVydGljZXMmIHMpCiAgICAgIDogX0NP
UkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgVmVydGV4PiAocykge30KCiAgICBpbmxpbmUgVmVydGlj
ZXMoX0NPUkJBX1VMb25nIF9tYXgpCiAgICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwg
VmVydGV4PiAoX21heCkge30KICAgIGlubGluZSBWZXJ0aWNlcyhfQ09SQkFfVUxvbmcgX21heCwg
X0NPUkJBX1VMb25nIF9sZW4sIFZlcnRleCogX3ZhbCwgX0NPUkJBX0Jvb2xlYW4gX3JlbD0wKQog
ICAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IFZlcnRleD4gKF9tYXgsIF9sZW4sIF92
YWwsIF9yZWwpIHt9CgogICAgaW5saW5lIFZlcnRpY2VzJiBvcGVyYXRvciA9IChjb25zdCBWZXJ0
aWNlcyYgcykgewogICAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBWZXJ0ZXg+IDo6b3Bl
cmF0b3I9KHMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgfTsKCiAgY2xhc3MgVmVydGlj
ZXNfb3V0OwoKICBjbGFzcyBWZXJ0aWNlc192YXIgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgVmVy
dGljZXMgVDsKICAgIHR5cGVkZWYgVmVydGljZXNfdmFyIFRfdmFyOwoKICAgIGlubGluZSBWZXJ0
aWNlc192YXIoKSA6IF9wZF9zZXEoMCkge30KICAgIGlubGluZSBWZXJ0aWNlc192YXIoVCogcykg
OiBfcGRfc2VxKHMpIHt9CiAgICBpbmxpbmUgVmVydGljZXNfdmFyKGNvbnN0IFRfdmFyJiBzKSB7
CiAgICAgIGlmKCBzLl9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQoKnMuX3BkX3NlcSk7CiAgICAg
IGVsc2UgX3BkX3NlcSA9IDA7CiAgICB9CiAgICBpbmxpbmUgflZlcnRpY2VzX3ZhcigpIHsgaWYo
IF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsgfQoKICAgIGlubGluZSBUX3ZhciYgb3BlcmF0b3Ig
PSAoVCogcykgewogICAgICBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRfc2VxOwogICAgICBfcGRf
c2VxID0gczsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgaW5saW5lIFRfdmFyJiBvcGVy
YXRvciA9IChjb25zdCBUX3ZhciYgcykgewogICAgICBpZiggcy5fcGRfc2VxICkgewogICAgICAg
IGlmKCAhX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVDsKICAgICAgICAqX3BkX3NlcSA9ICpzLl9w
ZF9zZXE7CiAgICAgIH0gZWxzZSBpZiggX3BkX3NlcSApIHsKICAgICAgICBkZWxldGUgX3BkX3Nl
cTsKICAgICAgICBfcGRfc2VxID0gMDsKICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogICAgaW5saW5lIFZlcnRleCYgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBzKSB7CiAgICAg
IHJldHVybiAoKl9wZF9zZXEpW3NdOwogICAgfQoKICAgIGlubGluZSBUKiBvcGVyYXRvciAtPiAo
KSB7IHJldHVybiBfcGRfc2VxOyB9CgoKCiAgICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgVCYgKCkg
Y29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICAgIGlubGluZSBvcGVyYXRvciBUJiAoKSB7IHJl
dHVybiAqX3BkX3NlcTsgfQoKCiAgICBpbmxpbmUgY29uc3QgVCYgaW4oKSBjb25zdCB7IHJldHVy
biAqX3BkX3NlcTsgfQogICAgaW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4gKl9wZF9zZXE7IH0K
ICAgIGlubGluZSBUKiYgb3V0KCkgewogICAgICBpZiggX3BkX3NlcSApIHsgZGVsZXRlIF9wZF9z
ZXE7IF9wZF9zZXEgPSAwOyB9CiAgICAgIHJldHVybiBfcGRfc2VxOwogICAgfQogICAgaW5saW5l
IFQqIF9yZXRuKCkgeyBUKiB0bXAgPSBfcGRfc2VxOyBfcGRfc2VxID0gMDsgcmV0dXJuIHRtcDsg
fQoKICAgIGZyaWVuZCBjbGFzcyBWZXJ0aWNlc19vdXQ7CgogIHByaXZhdGU6CiAgICBUKiBfcGRf
c2VxOwogIH07CgogIGNsYXNzIFZlcnRpY2VzX291dCB7CiAgcHVibGljOgogICAgdHlwZWRlZiBW
ZXJ0aWNlcyBUOwogICAgdHlwZWRlZiBWZXJ0aWNlc192YXIgVF92YXI7CgogICAgaW5saW5lIFZl
cnRpY2VzX291dChUKiYgcykgOiBfZGF0YShzKSB7IF9kYXRhID0gMDsgfQogICAgaW5saW5lIFZl
cnRpY2VzX291dChUX3ZhciYgcykKICAgICAgOiBfZGF0YShzLl9wZF9zZXEpIHsgcyA9IChUKikg
MDsgfQogICAgaW5saW5lIFZlcnRpY2VzX291dChjb25zdCBWZXJ0aWNlc19vdXQmIHMpIDogX2Rh
dGEocy5fZGF0YSkge30KICAgIGlubGluZSBWZXJ0aWNlc19vdXQmIG9wZXJhdG9yID0gKGNvbnN0
IFZlcnRpY2VzX291dCYgcykgewogICAgICBfZGF0YSA9IHMuX2RhdGE7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0gaW5saW5lIFZlcnRpY2VzX291dCYgb3BlcmF0b3IgPSAoVCogcykgewogICAg
ICBfZGF0YSA9IHM7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIGlubGluZSBvcGVyYXRv
ciBUKiYoKSB7IHJldHVybiBfZGF0YTsgfQogICAgaW5saW5lIFQqJiBwdHIoKSB7IHJldHVybiBf
ZGF0YTsgfQogICAgaW5saW5lIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBfZGF0YTsgfQoKICAg
IGlubGluZSBWZXJ0ZXgmIG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgaSkgewogICAgICByZXR1
cm4gKCpfZGF0YSlbaV07CiAgICB9CgogICAgVComIF9kYXRhOwoKICBwcml2YXRlOgogICAgVmVy
dGljZXNfb3V0KCk7CiAgICBWZXJ0aWNlc19vdXQmIG9wZXJhdG9yPShjb25zdCBUX3ZhciYpOwog
IH07CgogIHN0cnVjdCBUZXhDb29yZCB7CiAgICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX0Zp
eF9WYXI8VGV4Q29vcmQ+IF92YXJfdHlwZTsKCiAgICBDb29yZCB1OwoKICAgIENvb3JkIHY7Cgog
ICAgQ29vcmQgdzsKCiAgICBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zm
c2V0KSBjb25zdDsKICAgIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpIGNv
bnN0OwogICAgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJik7CiAgICB2b2lk
IG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICAgIHZvaWQgb3BlcmF0
b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYpOwogIH07CgogIHR5cGVkZWYgVGV4Q29vcmQ6Ol92
YXJfdHlwZSBUZXhDb29yZF92YXI7CgogIHR5cGVkZWYgX0NPUkJBX0NvbnN0clR5cGVfRml4X09V
VF9hcmc8IFRleENvb3JkLFRleENvb3JkX3ZhciA+IFRleENvb3JkX291dDsKCiAgZXh0ZXJuIGNv
bnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1RleENvb3JkOwoKICBleHRlcm4gY29uc3QgQ09S
QkE6OlR5cGVDb2RlX3B0ciBfdGNfVGV4Q29vcmRzOwoKICBjbGFzcyBUZXhDb29yZHNfdmFyOwoK
ICBjbGFzcyBUZXhDb29yZHMgOiBwdWJsaWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgVGV4
Q29vcmQ+IHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIFRleENvb3Jkc192YXIgX3Zhcl90eXBlOwog
ICAgaW5saW5lIFRleENvb3JkcygpIHt9CiAgICBpbmxpbmUgVGV4Q29vcmRzKGNvbnN0IFRleENv
b3JkcyYgcykKICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBUZXhDb29yZD4gKHMp
IHt9CgogICAgaW5saW5lIFRleENvb3JkcyhfQ09SQkFfVUxvbmcgX21heCkKICAgICAgOiBfQ09S
QkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBUZXhDb29yZD4gKF9tYXgpIHt9CiAgICBpbmxpbmUgVGV4
Q29vcmRzKF9DT1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgVGV4Q29vcmQqIF92
YWwsIF9DT1JCQV9Cb29sZWFuIF9yZWw9MCkKICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVl
bmNlPCBUZXhDb29yZD4gKF9tYXgsIF9sZW4sIF92YWwsIF9yZWwpIHt9CgogICAgaW5saW5lIFRl
eENvb3JkcyYgb3BlcmF0b3IgPSAoY29uc3QgVGV4Q29vcmRzJiBzKSB7CiAgICAgIF9DT1JCQV9V
bmJvdW5kZWRfU2VxdWVuY2U8IFRleENvb3JkPiA6Om9wZXJhdG9yPShzKTsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQogIH07CgogIGNsYXNzIFRleENvb3Jkc19vdXQ7CgogIGNsYXNzIFRleENv
b3Jkc192YXIgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgVGV4Q29vcmRzIFQ7CiAgICB0eXBlZGVm
IFRleENvb3Jkc192YXIgVF92YXI7CgogICAgaW5saW5lIFRleENvb3Jkc192YXIoKSA6IF9wZF9z
ZXEoMCkge30KICAgIGlubGluZSBUZXhDb29yZHNfdmFyKFQqIHMpIDogX3BkX3NlcShzKSB7fQog
ICAgaW5saW5lIFRleENvb3Jkc192YXIoY29uc3QgVF92YXImIHMpIHsKICAgICAgaWYoIHMuX3Bk
X3NlcSApIF9wZF9zZXEgPSBuZXcgVCgqcy5fcGRfc2VxKTsKICAgICAgZWxzZSBfcGRfc2VxID0g
MDsKICAgIH0KICAgIGlubGluZSB+VGV4Q29vcmRzX3ZhcigpIHsgaWYoIF9wZF9zZXEgKSBkZWxl
dGUgX3BkX3NlcTsgfQoKICAgIGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoVCogcykgewogICAg
ICBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRfc2VxOwogICAgICBfcGRfc2VxID0gczsKICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQogICAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChjb25zdCBU
X3ZhciYgcykgewogICAgICBpZiggcy5fcGRfc2VxICkgewogICAgICAgIGlmKCAhX3BkX3NlcSAp
IF9wZF9zZXEgPSBuZXcgVDsKICAgICAgICAqX3BkX3NlcSA9ICpzLl9wZF9zZXE7CiAgICAgIH0g
ZWxzZSBpZiggX3BkX3NlcSApIHsKICAgICAgICBkZWxldGUgX3BkX3NlcTsKICAgICAgICBfcGRf
c2VxID0gMDsKICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgaW5saW5lIFRl
eENvb3JkJiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIHMpIHsKICAgICAgcmV0dXJuICgqX3Bk
X3NlcSlbc107CiAgICB9CgogICAgaW5saW5lIFQqIG9wZXJhdG9yIC0+ICgpIHsgcmV0dXJuIF9w
ZF9zZXE7IH0KCgoKICAgIGlubGluZSBvcGVyYXRvciBjb25zdCBUJiAoKSBjb25zdCB7IHJldHVy
biAqX3BkX3NlcTsgfQogICAgaW5saW5lIG9wZXJhdG9yIFQmICgpIHsgcmV0dXJuICpfcGRfc2Vx
OyB9CgoKICAgIGlubGluZSBjb25zdCBUJiBpbigpIGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9
CiAgICBpbmxpbmUgVCYgaW5vdXQoKSB7IHJldHVybiAqX3BkX3NlcTsgfQogICAgaW5saW5lIFQq
JiBvdXQoKSB7CiAgICAgIGlmKCBfcGRfc2VxICkgeyBkZWxldGUgX3BkX3NlcTsgX3BkX3NlcSA9
IDA7IH0KICAgICAgcmV0dXJuIF9wZF9zZXE7CiAgICB9CiAgICBpbmxpbmUgVCogX3JldG4oKSB7
IFQqIHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEgPSAwOyByZXR1cm4gdG1wOyB9CgogICAgZnJpZW5k
IGNsYXNzIFRleENvb3Jkc19vdXQ7CgogIHByaXZhdGU6CiAgICBUKiBfcGRfc2VxOwogIH07Cgog
IGNsYXNzIFRleENvb3Jkc19vdXQgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgVGV4Q29vcmRzIFQ7
CiAgICB0eXBlZGVmIFRleENvb3Jkc192YXIgVF92YXI7CgogICAgaW5saW5lIFRleENvb3Jkc19v
dXQoVComIHMpIDogX2RhdGEocykgeyBfZGF0YSA9IDA7IH0KICAgIGlubGluZSBUZXhDb29yZHNf
b3V0KFRfdmFyJiBzKQogICAgICA6IF9kYXRhKHMuX3BkX3NlcSkgeyBzID0gKFQqKSAwOyB9CiAg
ICBpbmxpbmUgVGV4Q29vcmRzX291dChjb25zdCBUZXhDb29yZHNfb3V0JiBzKSA6IF9kYXRhKHMu
X2RhdGEpIHt9CiAgICBpbmxpbmUgVGV4Q29vcmRzX291dCYgb3BlcmF0b3IgPSAoY29uc3QgVGV4
Q29vcmRzX291dCYgcykgewogICAgICBfZGF0YSA9IHMuX2RhdGE7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0gaW5saW5lIFRleENvb3Jkc19vdXQmIG9wZXJhdG9yID0gKFQqIHMpIHsKICAgICAg
X2RhdGEgPSBzOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBpbmxpbmUgb3BlcmF0b3Ig
VComKCkgeyByZXR1cm4gX2RhdGE7IH0KICAgIGlubGluZSBUKiYgcHRyKCkgeyByZXR1cm4gX2Rh
dGE7IH0KICAgIGlubGluZSBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gX2RhdGE7IH0KCiAgICBp
bmxpbmUgVGV4Q29vcmQmIG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgaSkgewogICAgICByZXR1
cm4gKCpfZGF0YSlbaV07CiAgICB9CgogICAgVComIF9kYXRhOwoKICBwcml2YXRlOgogICAgVGV4
Q29vcmRzX291dCgpOwogICAgVGV4Q29vcmRzX291dCYgb3BlcmF0b3I9KGNvbnN0IFRfdmFyJik7
CiAgfTsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0FsaWdubWVudDsK
CiAgdHlwZWRlZiBDT1JCQTo6RG91YmxlIEFsaWdubWVudDsKCiAgc3RydWN0IENvbG9yIHsKICAg
IHR5cGVkZWYgX0NPUkJBX0NvbnN0clR5cGVfRml4X1ZhcjxDb2xvcj4gX3Zhcl90eXBlOwoKICAg
IENPUkJBOjpEb3VibGUgcmVkOwoKICAgIENPUkJBOjpEb3VibGUgZ3JlZW47CgogICAgQ09SQkE6
OkRvdWJsZSBibHVlOwoKICAgIENPUkJBOjpEb3VibGUgYWxwaGE7CgogICAgc2l6ZV90IF9OUF9h
bGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9y
Pj49IChOZXRCdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICAgIHZvaWQgb3BlcmF0b3I8PD0gKE5l
dEJ1ZmZlcmVkU3RyZWFtICYpOwogICAgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJl
YW0gJikgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmKTsK
ICB9OwoKICB0eXBlZGVmIENvbG9yOjpfdmFyX3R5cGUgQ29sb3JfdmFyOwoKICB0eXBlZGVmIF9D
T1JCQV9Db25zdHJUeXBlX0ZpeF9PVVRfYXJnPCBDb2xvcixDb2xvcl92YXIgPiBDb2xvcl9vdXQ7
CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Db2xvcjsKCiAgZXh0ZXJu
IGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1BhdGg7CgogIHR5cGVkZWYgVmVydGljZXMg
UGF0aDsKICB0eXBlZGVmIFZlcnRpY2VzX3ZhciBQYXRoX3ZhcjsKICB0eXBlZGVmIFZlcnRpY2Vz
X291dCBQYXRoX291dDsKCiAgc3RydWN0IFRyaWFuZ2xlIHsKICAgIHR5cGVkZWYgX0NPUkJBX0Nv
bnN0clR5cGVfRml4X1ZhcjxUcmlhbmdsZT4gX3Zhcl90eXBlOwoKICAgIENPUkJBOjpMb25nIGE7
CgogICAgQ09SQkE6OkxvbmcgYjsKCiAgICBDT1JCQTo6TG9uZyBjOwoKICAgIHNpemVfdCBfTlBf
YWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZzZXQpIGNvbnN0OwogICAgdm9pZCBvcGVyYXRv
cj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPDw9IChO
ZXRCdWZmZXJlZFN0cmVhbSAmKTsKICAgIHZvaWQgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3Ry
ZWFtICYpIGNvbnN0OwogICAgdm9pZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0gJik7
CiAgfTsKCiAgdHlwZWRlZiBUcmlhbmdsZTo6X3Zhcl90eXBlIFRyaWFuZ2xlX3ZhcjsKCiAgdHlw
ZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9GaXhfT1VUX2FyZzwgVHJpYW5nbGUsVHJpYW5nbGVfdmFy
ID4gVHJpYW5nbGVfb3V0OwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf
VHJpYW5nbGU7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Ucmlhbmds
ZVNlcTsKCiAgY2xhc3MgVHJpYW5nbGVTZXFfdmFyOwoKICBjbGFzcyBUcmlhbmdsZVNlcSA6IHB1
YmxpYyBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBUcmlhbmdsZT4gewogIHB1YmxpYzoKICAg
IHR5cGVkZWYgVHJpYW5nbGVTZXFfdmFyIF92YXJfdHlwZTsKICAgIGlubGluZSBUcmlhbmdsZVNl
cSgpIHt9CiAgICBpbmxpbmUgVHJpYW5nbGVTZXEoY29uc3QgVHJpYW5nbGVTZXEmIHMpCiAgICAg
IDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgVHJpYW5nbGU+IChzKSB7fQoKICAgIGlubGlu
ZSBUcmlhbmdsZVNlcShfQ09SQkFfVUxvbmcgX21heCkKICAgICAgOiBfQ09SQkFfVW5ib3VuZGVk
X1NlcXVlbmNlPCBUcmlhbmdsZT4gKF9tYXgpIHt9CiAgICBpbmxpbmUgVHJpYW5nbGVTZXEoX0NP
UkJBX1VMb25nIF9tYXgsIF9DT1JCQV9VTG9uZyBfbGVuLCBUcmlhbmdsZSogX3ZhbCwgX0NPUkJB
X0Jvb2xlYW4gX3JlbD0wKQogICAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IFRyaWFu
Z2xlPiAoX21heCwgX2xlbiwgX3ZhbCwgX3JlbCkge30KCiAgICBpbmxpbmUgVHJpYW5nbGVTZXEm
IG9wZXJhdG9yID0gKGNvbnN0IFRyaWFuZ2xlU2VxJiBzKSB7CiAgICAgIF9DT1JCQV9VbmJvdW5k
ZWRfU2VxdWVuY2U8IFRyaWFuZ2xlPiA6Om9wZXJhdG9yPShzKTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQogIH07CgogIGNsYXNzIFRyaWFuZ2xlU2VxX291dDsKCiAgY2xhc3MgVHJpYW5nbGVT
ZXFfdmFyIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIFRyaWFuZ2xlU2VxIFQ7CiAgICB0eXBlZGVm
IFRyaWFuZ2xlU2VxX3ZhciBUX3ZhcjsKCiAgICBpbmxpbmUgVHJpYW5nbGVTZXFfdmFyKCkgOiBf
cGRfc2VxKDApIHt9CiAgICBpbmxpbmUgVHJpYW5nbGVTZXFfdmFyKFQqIHMpIDogX3BkX3NlcShz
KSB7fQogICAgaW5saW5lIFRyaWFuZ2xlU2VxX3Zhcihjb25zdCBUX3ZhciYgcykgewogICAgICBp
Ziggcy5fcGRfc2VxICkgX3BkX3NlcSA9IG5ldyBUKCpzLl9wZF9zZXEpOwogICAgICBlbHNlIF9w
ZF9zZXEgPSAwOwogICAgfQogICAgaW5saW5lIH5UcmlhbmdsZVNlcV92YXIoKSB7IGlmKCBfcGRf
c2VxICkgZGVsZXRlIF9wZF9zZXE7IH0KCiAgICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKFQq
IHMpIHsKICAgICAgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsKICAgICAgX3BkX3NlcSA9
IHM7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIGlubGluZSBUX3ZhciYgb3BlcmF0b3Ig
PSAoY29uc3QgVF92YXImIHMpIHsKICAgICAgaWYoIHMuX3BkX3NlcSApIHsKICAgICAgICBpZigg
IV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQ7CiAgICAgICAgKl9wZF9zZXEgPSAqcy5fcGRfc2Vx
OwogICAgICB9IGVsc2UgaWYoIF9wZF9zZXEgKSB7CiAgICAgICAgZGVsZXRlIF9wZF9zZXE7CiAg
ICAgICAgX3BkX3NlcSA9IDA7CiAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAg
IGlubGluZSBUcmlhbmdsZSYgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBzKSB7CiAgICAgIHJl
dHVybiAoKl9wZF9zZXEpW3NdOwogICAgfQoKICAgIGlubGluZSBUKiBvcGVyYXRvciAtPiAoKSB7
IHJldHVybiBfcGRfc2VxOyB9CgoKCiAgICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgVCYgKCkgY29u
c3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICAgIGlubGluZSBvcGVyYXRvciBUJiAoKSB7IHJldHVy
biAqX3BkX3NlcTsgfQoKCiAgICBpbmxpbmUgY29uc3QgVCYgaW4oKSBjb25zdCB7IHJldHVybiAq
X3BkX3NlcTsgfQogICAgaW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KICAg
IGlubGluZSBUKiYgb3V0KCkgewogICAgICBpZiggX3BkX3NlcSApIHsgZGVsZXRlIF9wZF9zZXE7
IF9wZF9zZXEgPSAwOyB9CiAgICAgIHJldHVybiBfcGRfc2VxOwogICAgfQogICAgaW5saW5lIFQq
IF9yZXRuKCkgeyBUKiB0bXAgPSBfcGRfc2VxOyBfcGRfc2VxID0gMDsgcmV0dXJuIHRtcDsgfQoK
ICAgIGZyaWVuZCBjbGFzcyBUcmlhbmdsZVNlcV9vdXQ7CgogIHByaXZhdGU6CiAgICBUKiBfcGRf
c2VxOwogIH07CgogIGNsYXNzIFRyaWFuZ2xlU2VxX291dCB7CiAgcHVibGljOgogICAgdHlwZWRl
ZiBUcmlhbmdsZVNlcSBUOwogICAgdHlwZWRlZiBUcmlhbmdsZVNlcV92YXIgVF92YXI7CgogICAg
aW5saW5lIFRyaWFuZ2xlU2VxX291dChUKiYgcykgOiBfZGF0YShzKSB7IF9kYXRhID0gMDsgfQog
ICAgaW5saW5lIFRyaWFuZ2xlU2VxX291dChUX3ZhciYgcykKICAgICAgOiBfZGF0YShzLl9wZF9z
ZXEpIHsgcyA9IChUKikgMDsgfQogICAgaW5saW5lIFRyaWFuZ2xlU2VxX291dChjb25zdCBUcmlh
bmdsZVNlcV9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkge30KICAgIGlubGluZSBUcmlhbmdsZVNl
cV9vdXQmIG9wZXJhdG9yID0gKGNvbnN0IFRyaWFuZ2xlU2VxX291dCYgcykgewogICAgICBfZGF0
YSA9IHMuX2RhdGE7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0gaW5saW5lIFRyaWFuZ2xlU2Vx
X291dCYgb3BlcmF0b3IgPSAoVCogcykgewogICAgICBfZGF0YSA9IHM7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KICAgIGlubGluZSBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBfZGF0YTsgfQog
ICAgaW5saW5lIFQqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQogICAgaW5saW5lIFQqIG9wZXJh
dG9yLT4oKSB7IHJldHVybiBfZGF0YTsgfQoKICAgIGlubGluZSBUcmlhbmdsZSYgb3BlcmF0b3Ig
W10gKF9DT1JCQV9VTG9uZyBpKSB7CiAgICAgIHJldHVybiAoKl9kYXRhKVtpXTsKICAgIH0KCiAg
ICBUKiYgX2RhdGE7CgogIHByaXZhdGU6CiAgICBUcmlhbmdsZVNlcV9vdXQoKTsKICAgIFRyaWFu
Z2xlU2VxX291dCYgb3BlcmF0b3I9KGNvbnN0IFRfdmFyJik7CiAgfTsKCiAgc3RydWN0IE1lc2gg
ewogICAgdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJsZV9WYXI8TWVzaD4gX3Zhcl90
eXBlOwoKICAgIFZlcnRpY2VzIG5vZGVzOwoKICAgIFRyaWFuZ2xlU2VxIHRyaWFuZ2xlczsKCiAg
ICBWZXJ0aWNlcyBub3JtYWxzOwoKICAgIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGlu
aXRpYWxvZmZzZXQpIGNvbnN0OwogICAgdm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJl
YW0gJikgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSAmKTsK
ICAgIHZvaWQgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYpIGNvbnN0OwogICAgdm9p
ZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0gJik7CiAgfTsKCiAgdHlwZWRlZiBNZXNo
OjpfdmFyX3R5cGUgTWVzaF92YXI7CgogIHR5cGVkZWYgX0NPUkJBX0NvbnN0clR5cGVfVmFyaWFi
bGVfT1VUX2FyZzwgTWVzaCxNZXNoX3ZhciA+IE1lc2hfb3V0OwoKICBleHRlcm4gY29uc3QgQ09S
QkE6OlR5cGVDb2RlX3B0ciBfdGNfTWVzaDsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29k
ZV9wdHIgX3RjX1VuaWNoYXI7CgogIHR5cGVkZWYgQ09SQkE6OlVTaG9ydCBVbmljaGFyOwoKICBl
eHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVW5pc3RyaW5nOwoKICBjbGFzcyBV
bmlzdHJpbmdfdmFyOwoKICBjbGFzcyBVbmlzdHJpbmcgOiBwdWJsaWMgX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PCBVbmljaGFyLCAyLCAyPiB7CiAgcHVibGljOgog
ICAgdHlwZWRlZiBVbmlzdHJpbmdfdmFyIF92YXJfdHlwZTsKICAgIGlubGluZSBVbmlzdHJpbmco
KSB7fQogICAgaW5saW5lIFVuaXN0cmluZyhjb25zdCBVbmlzdHJpbmcmIHMpCiAgICAgIDogX0NP
UkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PCBVbmljaGFyLCAyLCAyPiAo
cykge30KCiAgICBpbmxpbmUgVW5pc3RyaW5nKF9DT1JCQV9VTG9uZyBfbWF4KQogICAgICA6IF9D
T1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDwgVW5pY2hhciwgMiwgMj4g
KF9tYXgpIHt9CiAgICBpbmxpbmUgVW5pc3RyaW5nKF9DT1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFf
VUxvbmcgX2xlbiwgVW5pY2hhciogX3ZhbCwgX0NPUkJBX0Jvb2xlYW4gX3JlbD0wKQogICAgICA6
IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDwgVW5pY2hhciwgMiwg
Mj4gKF9tYXgsIF9sZW4sIF92YWwsIF9yZWwpIHt9CgogICAgaW5saW5lIFVuaXN0cmluZyYgb3Bl
cmF0b3IgPSAoY29uc3QgVW5pc3RyaW5nJiBzKSB7CiAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2Vfd19GaXhTaXplRWxlbWVudDwgVW5pY2hhciwgMiwgMj4gOjpvcGVyYXRvcj0ocyk7CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KICB9OwoKICBjbGFzcyBVbmlzdHJpbmdfb3V0OwoKICBj
bGFzcyBVbmlzdHJpbmdfdmFyIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIFVuaXN0cmluZyBUOwog
ICAgdHlwZWRlZiBVbmlzdHJpbmdfdmFyIFRfdmFyOwoKICAgIGlubGluZSBVbmlzdHJpbmdfdmFy
KCkgOiBfcGRfc2VxKDApIHt9CiAgICBpbmxpbmUgVW5pc3RyaW5nX3ZhcihUKiBzKSA6IF9wZF9z
ZXEocykge30KICAgIGlubGluZSBVbmlzdHJpbmdfdmFyKGNvbnN0IFRfdmFyJiBzKSB7CiAgICAg
IGlmKCBzLl9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQoKnMuX3BkX3NlcSk7CiAgICAgIGVsc2Ug
X3BkX3NlcSA9IDA7CiAgICB9CiAgICBpbmxpbmUgflVuaXN0cmluZ192YXIoKSB7IGlmKCBfcGRf
c2VxICkgZGVsZXRlIF9wZF9zZXE7IH0KCiAgICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKFQq
IHMpIHsKICAgICAgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsKICAgICAgX3BkX3NlcSA9
IHM7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIGlubGluZSBUX3ZhciYgb3BlcmF0b3Ig
PSAoY29uc3QgVF92YXImIHMpIHsKICAgICAgaWYoIHMuX3BkX3NlcSApIHsKICAgICAgICBpZigg
IV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQ7CiAgICAgICAgKl9wZF9zZXEgPSAqcy5fcGRfc2Vx
OwogICAgICB9IGVsc2UgaWYoIF9wZF9zZXEgKSB7CiAgICAgICAgZGVsZXRlIF9wZF9zZXE7CiAg
ICAgICAgX3BkX3NlcSA9IDA7CiAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAg
IGlubGluZSBVbmljaGFyJiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIHMpIHsKICAgICAgcmV0
dXJuICgqX3BkX3NlcSlbc107CiAgICB9CgogICAgaW5saW5lIFQqIG9wZXJhdG9yIC0+ICgpIHsg
cmV0dXJuIF9wZF9zZXE7IH0KCgoKICAgIGlubGluZSBvcGVyYXRvciBjb25zdCBUJiAoKSBjb25z
dCB7IHJldHVybiAqX3BkX3NlcTsgfQogICAgaW5saW5lIG9wZXJhdG9yIFQmICgpIHsgcmV0dXJu
ICpfcGRfc2VxOyB9CgoKICAgIGlubGluZSBjb25zdCBUJiBpbigpIGNvbnN0IHsgcmV0dXJuICpf
cGRfc2VxOyB9CiAgICBpbmxpbmUgVCYgaW5vdXQoKSB7IHJldHVybiAqX3BkX3NlcTsgfQogICAg
aW5saW5lIFQqJiBvdXQoKSB7CiAgICAgIGlmKCBfcGRfc2VxICkgeyBkZWxldGUgX3BkX3NlcTsg
X3BkX3NlcSA9IDA7IH0KICAgICAgcmV0dXJuIF9wZF9zZXE7CiAgICB9CiAgICBpbmxpbmUgVCog
X3JldG4oKSB7IFQqIHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEgPSAwOyByZXR1cm4gdG1wOyB9Cgog
ICAgZnJpZW5kIGNsYXNzIFVuaXN0cmluZ19vdXQ7CgogIHByaXZhdGU6CiAgICBUKiBfcGRfc2Vx
OwogIH07CgogIGNsYXNzIFVuaXN0cmluZ19vdXQgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgVW5p
c3RyaW5nIFQ7CiAgICB0eXBlZGVmIFVuaXN0cmluZ192YXIgVF92YXI7CgogICAgaW5saW5lIFVu
aXN0cmluZ19vdXQoVComIHMpIDogX2RhdGEocykgeyBfZGF0YSA9IDA7IH0KICAgIGlubGluZSBV
bmlzdHJpbmdfb3V0KFRfdmFyJiBzKQogICAgICA6IF9kYXRhKHMuX3BkX3NlcSkgeyBzID0gKFQq
KSAwOyB9CiAgICBpbmxpbmUgVW5pc3RyaW5nX291dChjb25zdCBVbmlzdHJpbmdfb3V0JiBzKSA6
IF9kYXRhKHMuX2RhdGEpIHt9CiAgICBpbmxpbmUgVW5pc3RyaW5nX291dCYgb3BlcmF0b3IgPSAo
Y29uc3QgVW5pc3RyaW5nX291dCYgcykgewogICAgICBfZGF0YSA9IHMuX2RhdGE7CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0gaW5saW5lIFVuaXN0cmluZ19vdXQmIG9wZXJhdG9yID0gKFQqIHMp
IHsKICAgICAgX2RhdGEgPSBzOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBpbmxpbmUg
b3BlcmF0b3IgVComKCkgeyByZXR1cm4gX2RhdGE7IH0KICAgIGlubGluZSBUKiYgcHRyKCkgeyBy
ZXR1cm4gX2RhdGE7IH0KICAgIGlubGluZSBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gX2RhdGE7
IH0KCiAgICBpbmxpbmUgVW5pY2hhciYgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBpKSB7CiAg
ICAgIHJldHVybiAoKl9kYXRhKVtpXTsKICAgIH0KCiAgICBUKiYgX2RhdGE7CgogIHByaXZhdGU6
CiAgICBVbmlzdHJpbmdfb3V0KCk7CiAgICBVbmlzdHJpbmdfb3V0JiBvcGVyYXRvcj0oY29uc3Qg
VF92YXImKTsKICB9OwoKICBzdHJ1Y3QgTlZQYWlyIHsKICAgIHR5cGVkZWYgX0NPUkJBX0NvbnN0
clR5cGVfVmFyaWFibGVfVmFyPE5WUGFpcj4gX3Zhcl90eXBlOwoKICAgIFVuaXN0cmluZyBuYW1l
OwoKICAgIENPUkJBOjpBbnkgdmFsOwoKICAgIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90
IGluaXRpYWxvZmZzZXQpIGNvbnN0OwogICAgdm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRT
dHJlYW0gJikgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSAm
KTsKICAgIHZvaWQgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYpIGNvbnN0OwogICAg
dm9pZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0gJik7CiAgfTsKCiAgdHlwZWRlZiBO
VlBhaXI6Ol92YXJfdHlwZSBOVlBhaXJfdmFyOwoKICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBl
X1ZhcmlhYmxlX09VVF9hcmc8IE5WUGFpcixOVlBhaXJfdmFyID4gTlZQYWlyX291dDsKCiAgZXh0
ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX05WUGFpcjsKCn0KCm5hbWVzcGFjZSBQ
T0FfV2Fyc2F3CnsKCn0KCgoKCmlubGluZSB2b2lkIG9wZXJhdG9yID4+PShXYXJzYXc6OkF4aXMg
X2UsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgOjpvcGVyYXRvcj4+PSgoQ09SQkE6OlVMb25n
KV9lLCBzKTsKfQoKaW5saW5lIHZvaWQgb3BlcmF0b3IgPDw9IChXYXJzYXc6OkF4aXMmIF9lLCBO
ZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpVTG9uZyBfMFJMX2U7CiAgOjpvcGVyYXRv
cjw8PShfMFJMX2Uscyk7CiAgc3dpdGNoIChfMFJMX2UpIHsKICAgIGNhc2UgV2Fyc2F3Ojp4YXhp
czoKCiAgICBjYXNlIFdhcnNhdzo6eWF4aXM6CgogICAgY2FzZSBXYXJzYXc6OnpheGlzOgoKICAg
IF9lID0gKFdhcnNhdzo6QXhpcykgXzBSTF9lOwogICAgYnJlYWs7CiAgZGVmYXVsdDoKICAgIF9D
T1JCQV9tYXJzaGFsX2Vycm9yKCk7CiAgfQp9CgppbmxpbmUgdm9pZCBvcGVyYXRvciA+Pj0oV2Fy
c2F3OjpBeGlzIF9lLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIDo6b3BlcmF0b3I+Pj0oKENP
UkJBOjpVTG9uZylfZSwgcyk7Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yIDw8PSAoV2Fyc2F3OjpB
eGlzJiBfZSwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6VUxvbmcgXzBSTF9lOwog
IDo6b3BlcmF0b3I8PD0oXzBSTF9lLHMpOwogIHN3aXRjaCAoXzBSTF9lKSB7CiAgICBjYXNlIFdh
cnNhdzo6eGF4aXM6CgogICAgY2FzZSBXYXJzYXc6OnlheGlzOgoKICAgIGNhc2UgV2Fyc2F3Ojp6
YXhpczoKCiAgICBfZSA9IChXYXJzYXc6OkF4aXMpIF8wUkxfZTsKICAgIGJyZWFrOwogIGRlZmF1
bHQ6CiAgICBfQ09SQkFfbWFyc2hhbF9lcnJvcigpOwogIH0KfQoKdm9pZCBvcGVyYXRvcjw8PShD
T1JCQTo6QW55JiBfYSwgV2Fyc2F3OjpBeGlzIF9zKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIFdhcnNhdzo6QXhpcyYgX3MpOwoKZXh0ZXJuIHZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIGNvbnN0IFdhcnNhdzo6VmVydGV4JiBfcyk7CmV4
dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBXYXJzYXc6OlZlcnRleCogX3Nw
KTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9h
LCBXYXJzYXc6OlZlcnRleComIF9zcCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
PShjb25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3QgV2Fyc2F3OjpWZXJ0ZXgqJiBfc3ApOwoKZXh0
ZXJuIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgY29uc3QgV2Fyc2F3OjpWZXJ0
aWNlcyYgX3MpOwppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9hLCBXYXJz
YXc6OlZlcnRpY2VzKiBfc3ApIHsKICBfYSA8PD0gKl9zcDsKICBkZWxldGUgX3NwOwp9CmV4dGVy
biBfQ09SQkFfQm9vbGVhbiBvcGVyYXRvciA+Pj0gKGNvbnN0IENPUkJBOjpBbnkmIF9hLCBXYXJz
YXc6OlZlcnRpY2VzKiYgX3NwKTsKZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAo
Y29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IFdhcnNhdzo6VmVydGljZXMqJiBfc3ApOwoKZXh0
ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIGNvbnN0IFdhcnNhdzo6VGV4Q29v
cmQmIF9zKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIFdhcnNhdzo6
VGV4Q29vcmQqIF9zcCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBD
T1JCQTo6QW55JiBfYSwgV2Fyc2F3OjpUZXhDb29yZComIF9zcCk7CmV4dGVybiBDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3QgV2Fyc2F3OjpUZXhD
b29yZComIF9zcCk7CgpleHRlcm4gdm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9hLCBj
b25zdCBXYXJzYXc6OlRleENvb3JkcyYgX3MpOwppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKENP
UkJBOjpBbnkmIF9hLCBXYXJzYXc6OlRleENvb3JkcyogX3NwKSB7CiAgX2EgPDw9ICpfc3A7CiAg
ZGVsZXRlIF9zcDsKfQpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBD
T1JCQTo6QW55JiBfYSwgV2Fyc2F3OjpUZXhDb29yZHMqJiBfc3ApOwpleHRlcm4gX0NPUkJBX0Jv
b2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3QgV2Fyc2F3OjpU
ZXhDb29yZHMqJiBfc3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2Es
IGNvbnN0IFdhcnNhdzo6Q29sb3ImIF9zKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6
OkFueSYgX2EsIFdhcnNhdzo6Q29sb3IqIF9zcCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgV2Fyc2F3OjpDb2xvciomIF9zcCk7CmV4dGVy
biBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3Qg
V2Fyc2F3OjpDb2xvciomIF9zcCk7CgpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55
JiBfYSwgY29uc3QgV2Fyc2F3OjpUcmlhbmdsZSYgX3MpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8
PShDT1JCQTo6QW55JiBfYSwgV2Fyc2F3OjpUcmlhbmdsZSogX3NwKTsKZXh0ZXJuIENPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBXYXJzYXc6OlRyaWFuZ2xl
KiYgX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpB
bnkmIF9hLCBjb25zdCBXYXJzYXc6OlRyaWFuZ2xlKiYgX3NwKTsKCmV4dGVybiB2b2lkIG9wZXJh
dG9yIDw8PSAoQ09SQkE6OkFueSYgX2EsIGNvbnN0IFdhcnNhdzo6VHJpYW5nbGVTZXEmIF9zKTsK
aW5saW5lIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgV2Fyc2F3OjpUcmlhbmds
ZVNlcSogX3NwKSB7CiAgX2EgPDw9ICpfc3A7CiAgZGVsZXRlIF9zcDsKfQpleHRlcm4gX0NPUkJB
X0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBDT1JCQTo6QW55JiBfYSwgV2Fyc2F3OjpUcmlh
bmdsZVNlcSomIF9zcCk7CmV4dGVybiBfQ09SQkFfQm9vbGVhbiBvcGVyYXRvciA+Pj0gKGNvbnN0
IENPUkJBOjpBbnkmIF9hLCBjb25zdCBXYXJzYXc6OlRyaWFuZ2xlU2VxKiYgX3NwKTsKCmV4dGVy
biB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBjb25zdCBXYXJzYXc6Ok1lc2gmIF9z
KTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIFdhcnNhdzo6TWVzaCog
X3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkm
IF9hLCBXYXJzYXc6Ok1lc2gqJiBfc3ApOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IFdhcnNhdzo6TWVzaComIF9zcCk7CgpleHRl
cm4gdm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9hLCBjb25zdCBXYXJzYXc6OlVuaXN0
cmluZyYgX3MpOwppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9hLCBXYXJz
YXc6OlVuaXN0cmluZyogX3NwKSB7CiAgX2EgPDw9ICpfc3A7CiAgZGVsZXRlIF9zcDsKfQpleHRl
cm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBDT1JCQTo6QW55JiBfYSwgV2Fy
c2F3OjpVbmlzdHJpbmcqJiBfc3ApOwpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49
IChjb25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3QgV2Fyc2F3OjpVbmlzdHJpbmcqJiBfc3ApOwoK
ZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIGNvbnN0IFdhcnNhdzo6TlZQ
YWlyJiBfcyk7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBXYXJzYXc6
Ok5WUGFpciogX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENP
UkJBOjpBbnkmIF9hLCBXYXJzYXc6Ok5WUGFpciomIF9zcCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVh
biBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3QgV2Fyc2F3OjpOVlBhaXIq
JiBfc3ApOwojIDIzICIuLi8uLi9pbmNsdWRlL1dhcnNhdy9UZWxsdGFsZS5oaCIgMgoKCgojIDEg
Ii4uLy4uL2luY2x1ZGUvV2Fyc2F3L1JlZkNvdW50QmFzZS5oaCIgMQojIDQ5ICIuLi8uLi9pbmNs
dWRlL1dhcnNhdy9SZWZDb3VudEJhc2UuaGgiCm5hbWVzcGFjZSBXYXJzYXcKCnsKCgoKCiAgY2xh
c3MgUmVmQ291bnRCYXNlOwogIGNsYXNzIF9vYmpyZWZfUmVmQ291bnRCYXNlOwogIGNsYXNzIF9p
bXBsX1JlZkNvdW50QmFzZTsKCiAgdHlwZWRlZiBfb2JqcmVmX1JlZkNvdW50QmFzZSogUmVmQ291
bnRCYXNlX3B0cjsKICB0eXBlZGVmIFJlZkNvdW50QmFzZV9wdHIgUmVmQ291bnRCYXNlUmVmOwoK
ICBjbGFzcyBSZWZDb3VudEJhc2VfSGVscGVyIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIFJlZkNv
dW50QmFzZV9wdHIgX3B0cl90eXBlOwoKICAgIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogICAg
c3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwogICAgc3RhdGljIHZvaWQg
cmVsZWFzZShfcHRyX3R5cGUpOwogICAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7
CiAgICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICAg
IHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYp
OwogICAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0m
KTsKICAgIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0
cmVhbSYpOwogICAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRT
dHJlYW0mKTsKICB9OwoKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpyZWZfUmVmQ291
bnRCYXNlLCBSZWZDb3VudEJhc2VfSGVscGVyPiBSZWZDb3VudEJhc2VfdmFyOwogIHR5cGVkZWYg
X0NPUkJBX09ialJlZl9PVVRfYXJnPF9vYmpyZWZfUmVmQ291bnRCYXNlLFJlZkNvdW50QmFzZV9I
ZWxwZXIgPiBSZWZDb3VudEJhc2Vfb3V0OwoKCgogIGNsYXNzIFJlZkNvdW50QmFzZSB7CiAgcHVi
bGljOgoKICAgIHR5cGVkZWYgUmVmQ291bnRCYXNlX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVm
IFJlZkNvdW50QmFzZV92YXIgX3Zhcl90eXBlOwoKICAgIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxp
Y2F0ZShfcHRyX3R5cGUpOwogICAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93KENPUkJBOjpPYmpl
Y3RfcHRyKTsKICAgIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoKICAgIHN0YXRpYyBpbmxpbmUg
c2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgICBzdGF0aWMgaW5saW5l
IHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogICAg
c3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRT
dHJlYW0mKTsKCiAgICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5l
dEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJB
OjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICAgIF9wdHJfdHlwZSByZXN1bHQg
PSBfbmFycm93KG9iaik7CiAgICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICB9CgogICAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJl
ZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBD
T1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgICBfcHRyX3R5cGUgcmVz
dWx0ID0gX25hcnJvdyhvYmopOwogICAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgICByZXR1
cm4gcmVzdWx0OwogICAgfQoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCgog
IH07CgogIGNsYXNzIF9vYmpyZWZfUmVmQ291bnRCYXNlIDoKICAgIHB1YmxpYyB2aXJ0dWFsIENP
UkJBOjpPYmplY3QsIHB1YmxpYyB2aXJ0dWFsIG9tbmlPYmpSZWYKICB7CiAgcHVibGljOgogICAg
dm9pZCBpbmNyZW1lbnQoKTsKICAgIHZvaWQgZGVjcmVtZW50KCk7CgogICAgaW5saW5lIF9vYmpy
ZWZfUmVmQ291bnRCYXNlKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgICBfb2JqcmVmX1JlZkNvdW50
QmFzZShjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosIG9tbmlJZGVudGl0eSos
IG9tbmlMb2NhbElkZW50aXR5Kik7CgogIHByb3RlY3RlZDoKICAgIHZpcnR1YWwgfl9vYmpyZWZf
UmVmQ291bnRCYXNlKCk7CgogIHByaXZhdGU6CiAgICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJl
Zihjb25zdCBjaGFyKik7CgogICAgX29ianJlZl9SZWZDb3VudEJhc2UoY29uc3QgX29ianJlZl9S
ZWZDb3VudEJhc2UmKTsKICAgIF9vYmpyZWZfUmVmQ291bnRCYXNlJiBvcGVyYXRvciA9IChjb25z
dCBfb2JqcmVmX1JlZkNvdW50QmFzZSYpOwoKICB9OwoKICBjbGFzcyBfcG9mX1JlZkNvdW50QmFz
ZSA6IHB1YmxpYyBwcm94eU9iamVjdEZhY3RvcnkgewogIHB1YmxpYzoKICAgIGlubGluZSBfcG9m
X1JlZkNvdW50QmFzZSgpIDogcHJveHlPYmplY3RGYWN0b3J5KFJlZkNvdW50QmFzZTo6X1BEX3Jl
cG9JZCkge30KICAgIHZpcnR1YWwgfl9wb2ZfUmVmQ291bnRCYXNlKCk7CgogICAgdmlydHVhbCBv
bW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3Qq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxv
Y2FsSWRlbnRpdHkqKTsKICAgIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFy
KikgY29uc3Q7CiAgfTsKCiAgY2xhc3MgX2ltcGxfUmVmQ291bnRCYXNlIDoKICAgIHB1YmxpYyB2
aXJ0dWFsIG9tbmlTZXJ2YW50CiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9pbXBsX1JlZkNv
dW50QmFzZSgpOwoKICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnQoKSA9IDA7CiAgICB2aXJ0dWFs
IHZvaWQgZGVjcmVtZW50KCkgPSAwOwoKICBwdWJsaWM6CiAgICB2aXJ0dWFsIF9DT1JCQV9Cb29s
ZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKCiAgcHJpdmF0ZToKICAgIHZpcnR1YWwgdm9pZCogX3B0
clRvSW50ZXJmYWNlKGNvbnN0IGNoYXIqKTsKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3RE
ZXJpdmVkUmVwb0lkKCk7CiAgfTsKCn0KCm5hbWVzcGFjZSBQT0FfV2Fyc2F3CnsKCiAgY2xhc3Mg
UmVmQ291bnRCYXNlIDoKICAgIHB1YmxpYyB2aXJ0dWFsIFdhcnNhdzo6X2ltcGxfUmVmQ291bnRC
YXNlLAogICAgcHVibGljIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRCYXNlCiAgewog
IHB1YmxpYzoKICAgIHZpcnR1YWwgflJlZkNvdW50QmFzZSgpOwoKICAgIGlubGluZSBXYXJzYXc6
OlJlZkNvdW50QmFzZV9wdHIgX3RoaXMoKSB7CiAgICAgIHJldHVybiAoV2Fyc2F3OjpSZWZDb3Vu
dEJhc2VfcHRyKSBfZG9fdGhpcyhXYXJzYXc6OlJlZkNvdW50QmFzZTo6X1BEX3JlcG9JZCk7CiAg
ICB9CiAgfTsKCn0KCgoKCmlubGluZSBzaXplX3QKV2Fyc2F3OjpSZWZDb3VudEJhc2U6Ol9hbGln
bmVkU2l6ZShXYXJzYXc6OlJlZkNvdW50QmFzZV9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAg
cmV0dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMjgsIG9mZnNldCk7
Cn0KCmlubGluZSB2b2lkCldhcnNhdzo6UmVmQ291bnRCYXNlOjpfbWFyc2hhbE9ialJlZihXYXJz
YXc6OlJlZkNvdW50QmFzZV9wdHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJB
OjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMjgsIHMpOwp9CgppbmxpbmUgdm9pZApX
YXJzYXc6OlJlZkNvdW50QmFzZTo6X21hcnNoYWxPYmpSZWYoV2Fyc2F3OjpSZWZDb3VudEJhc2Vf
cHRyIG9iaiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihv
YmosIF9QRF9yZXBvSWQsIDI4LCBzKTsKfQojIDI3ICIuLi8uLi9pbmNsdWRlL1dhcnNhdy9UZWxs
dGFsZS5oaCIgMgoKCgojIDEgIi4uLy4uL2luY2x1ZGUvV2Fyc2F3L0lkZW50aWZpYWJsZS5oaCIg
MQojIDQ5ICIuLi8uLi9pbmNsdWRlL1dhcnNhdy9JZGVudGlmaWFibGUuaGgiCm5hbWVzcGFjZSBX
YXJzYXcKCnsKCgoKCiAgY2xhc3MgSWRlbnRpZmlhYmxlOwogIGNsYXNzIF9vYmpyZWZfSWRlbnRp
ZmlhYmxlOwogIGNsYXNzIF9pbXBsX0lkZW50aWZpYWJsZTsKCiAgdHlwZWRlZiBfb2JqcmVmX0lk
ZW50aWZpYWJsZSogSWRlbnRpZmlhYmxlX3B0cjsKICB0eXBlZGVmIElkZW50aWZpYWJsZV9wdHIg
SWRlbnRpZmlhYmxlUmVmOwoKICBjbGFzcyBJZGVudGlmaWFibGVfSGVscGVyIHsKICBwdWJsaWM6
CiAgICB0eXBlZGVmIElkZW50aWZpYWJsZV9wdHIgX3B0cl90eXBlOwoKICAgIHN0YXRpYyBfcHRy
X3R5cGUgX25pbCgpOwogICAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUp
OwogICAgc3RhdGljIHZvaWQgcmVsZWFzZShfcHRyX3R5cGUpOwogICAgc3RhdGljIHZvaWQgZHVw
bGljYXRlKF9wdHJfdHlwZSk7CiAgICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9wdHJf
dHlwZSwgc2l6ZV90KTsKICAgIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBO
ZXRCdWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYo
TmV0QnVmZmVyZWRTdHJlYW0mKTsKICAgIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90
eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxP
YmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mKTsKICB9OwoKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZf
VmFyPF9vYmpyZWZfSWRlbnRpZmlhYmxlLCBJZGVudGlmaWFibGVfSGVscGVyPiBJZGVudGlmaWFi
bGVfdmFyOwogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9PVVRfYXJnPF9vYmpyZWZfSWRlbnRpZmlh
YmxlLElkZW50aWZpYWJsZV9IZWxwZXIgPiBJZGVudGlmaWFibGVfb3V0OwoKCgogIGNsYXNzIElk
ZW50aWZpYWJsZSB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgSWRlbnRpZmlhYmxlX3B0ciBfcHRy
X3R5cGU7CiAgICB0eXBlZGVmIElkZW50aWZpYWJsZV92YXIgX3Zhcl90eXBlOwoKICAgIHN0YXRp
YyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwogICAgc3RhdGljIF9wdHJfdHlwZSBf
bmFycm93KENPUkJBOjpPYmplY3RfcHRyKTsKICAgIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoK
ICAgIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7
CiAgICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZm
ZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBf
dW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICAgIENPUkJBOjpPYmpl
Y3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICAg
IF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICAgIENPUkJBOjpyZWxlYXNlKG9i
aik7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgc3RhdGljIGlubGluZSBfcHRyX3R5
cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgICBDT1JCQTo6
T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwog
ICAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgICBDT1JCQTo6cmVsZWFz
ZShvYmopOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBfUERfcmVwb0lkOwoKCgogIH07CgogIGNsYXNzIF9vYmpyZWZfSWRlbnRpZmlhYmxlIDoKICAg
IHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpPYmplY3QsIHB1YmxpYyB2aXJ0dWFsIG9tbmlPYmpSZWYK
ICB7CiAgcHVibGljOgogICAgQ09SQkE6OkJvb2xlYW4gaXNfaWRlbnRpY2FsKElkZW50aWZpYWJs
ZV9wdHIgaSk7CgogICAgaW5saW5lIF9vYmpyZWZfSWRlbnRpZmlhYmxlKCkgeyBfUFJfc2V0b2Jq
KDApOyB9CiAgICBfb2JqcmVmX0lkZW50aWZpYWJsZShjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQ
cm9maWxlTGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CgogIHByb3Rl
Y3RlZDoKICAgIHZpcnR1YWwgfl9vYmpyZWZfSWRlbnRpZmlhYmxlKCk7CgogIHByaXZhdGU6CiAg
ICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKik7CgogICAgX29ianJlZl9J
ZGVudGlmaWFibGUoY29uc3QgX29ianJlZl9JZGVudGlmaWFibGUmKTsKICAgIF9vYmpyZWZfSWRl
bnRpZmlhYmxlJiBvcGVyYXRvciA9IChjb25zdCBfb2JqcmVmX0lkZW50aWZpYWJsZSYpOwoKICB9
OwoKICBjbGFzcyBfcG9mX0lkZW50aWZpYWJsZSA6IHB1YmxpYyBwcm94eU9iamVjdEZhY3Rvcnkg
ewogIHB1YmxpYzoKICAgIGlubGluZSBfcG9mX0lkZW50aWZpYWJsZSgpIDogcHJveHlPYmplY3RG
YWN0b3J5KElkZW50aWZpYWJsZTo6X1BEX3JlcG9JZCkge30KICAgIHZpcnR1YWwgfl9wb2ZfSWRl
bnRpZmlhYmxlKCk7CgogICAgdmlydHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hh
ciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKICAgIHZpcnR1YWwgX0NP
UkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFyKikgY29uc3Q7CiAgfTsKCiAgY2xhc3MgX2ltcGxf
SWRlbnRpZmlhYmxlIDoKICAgIHB1YmxpYyB2aXJ0dWFsIG9tbmlTZXJ2YW50CiAgewogIHB1Ymxp
YzoKICAgIHZpcnR1YWwgfl9pbXBsX0lkZW50aWZpYWJsZSgpOwoKICAgIHZpcnR1YWwgQ09SQkE6
OkJvb2xlYW4gaXNfaWRlbnRpY2FsKElkZW50aWZpYWJsZV9wdHIgaSkgPSAwOwoKICBwdWJsaWM6
CiAgICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKCiAgcHJpdmF0
ZToKICAgIHZpcnR1YWwgdm9pZCogX3B0clRvSW50ZXJmYWNlKGNvbnN0IGNoYXIqKTsKICAgIHZp
cnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVkUmVwb0lkKCk7CiAgfTsKCn0KCm5hbWVzcGFj
ZSBQT0FfV2Fyc2F3CnsKCiAgY2xhc3MgSWRlbnRpZmlhYmxlIDoKICAgIHB1YmxpYyB2aXJ0dWFs
IFdhcnNhdzo6X2ltcGxfSWRlbnRpZmlhYmxlLAogICAgcHVibGljIHZpcnR1YWwgUG9ydGFibGVT
ZXJ2ZXI6OlNlcnZhbnRCYXNlCiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfklkZW50aWZpYWJs
ZSgpOwoKICAgIGlubGluZSBXYXJzYXc6OklkZW50aWZpYWJsZV9wdHIgX3RoaXMoKSB7CiAgICAg
IHJldHVybiAoV2Fyc2F3OjpJZGVudGlmaWFibGVfcHRyKSBfZG9fdGhpcyhXYXJzYXc6OklkZW50
aWZpYWJsZTo6X1BEX3JlcG9JZCk7CiAgICB9CiAgfTsKCn0KCgoKCmlubGluZSBzaXplX3QKV2Fy
c2F3OjpJZGVudGlmaWFibGU6Ol9hbGlnbmVkU2l6ZShXYXJzYXc6OklkZW50aWZpYWJsZV9wdHIg
b2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwg
X1BEX3JlcG9JZCwgMjgsIG9mZnNldCk7Cn0KCmlubGluZSB2b2lkCldhcnNhdzo6SWRlbnRpZmlh
YmxlOjpfbWFyc2hhbE9ialJlZihXYXJzYXc6OklkZW50aWZpYWJsZV9wdHIgb2JqLCBOZXRCdWZm
ZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwg
MjgsIHMpOwp9CgppbmxpbmUgdm9pZApXYXJzYXc6OklkZW50aWZpYWJsZTo6X21hcnNoYWxPYmpS
ZWYoV2Fyc2F3OjpJZGVudGlmaWFibGVfcHRyIG9iaiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsK
ICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDI4LCBzKTsKfQojIDMxICIu
Li8uLi9pbmNsdWRlL1dhcnNhdy9UZWxsdGFsZS5oaCIgMgoKCgojIDEgIi4uLy4uL2luY2x1ZGUv
V2Fyc2F3L1N1YmplY3QuaGgiIDEKIyA2MiAiLi4vLi4vaW5jbHVkZS9XYXJzYXcvU3ViamVjdC5o
aCIKbmFtZXNwYWNlIFdhcnNhdwoKewoKCgoKICBjbGFzcyBPYnNlcnZlcjsKICBjbGFzcyBfb2Jq
cmVmX09ic2VydmVyOwogIGNsYXNzIF9pbXBsX09ic2VydmVyOwoKICB0eXBlZGVmIF9vYmpyZWZf
T2JzZXJ2ZXIqIE9ic2VydmVyX3B0cjsKICB0eXBlZGVmIE9ic2VydmVyX3B0ciBPYnNlcnZlclJl
ZjsKCiAgY2xhc3MgT2JzZXJ2ZXJfSGVscGVyIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIE9ic2Vy
dmVyX3B0ciBfcHRyX3R5cGU7CgogICAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CiAgICBzdGF0
aWMgX0NPUkJBX0Jvb2xlYW4gaXNfbmlsKF9wdHJfdHlwZSk7CiAgICBzdGF0aWMgdm9pZCByZWxl
YXNlKF9wdHJfdHlwZSk7CiAgICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBlKTsKICAg
IHN0YXRpYyBzaXplX3QgTlBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwogICAgc3Rh
dGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAg
ICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwog
ICAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFt
Jik7CiAgICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVh
bSYpOwogIH07CgogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9WYXI8X29ianJlZl9PYnNlcnZlciwg
T2JzZXJ2ZXJfSGVscGVyPiBPYnNlcnZlcl92YXI7CiAgdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09V
VF9hcmc8X29ianJlZl9PYnNlcnZlcixPYnNlcnZlcl9IZWxwZXIgPiBPYnNlcnZlcl9vdXQ7CgoK
CgoKCiAgY2xhc3MgU3ViamVjdDsKICBjbGFzcyBfb2JqcmVmX1N1YmplY3Q7CiAgY2xhc3MgX2lt
cGxfU3ViamVjdDsKCiAgdHlwZWRlZiBfb2JqcmVmX1N1YmplY3QqIFN1YmplY3RfcHRyOwogIHR5
cGVkZWYgU3ViamVjdF9wdHIgU3ViamVjdFJlZjsKCiAgY2xhc3MgU3ViamVjdF9IZWxwZXIgewog
IHB1YmxpYzoKICAgIHR5cGVkZWYgU3ViamVjdF9wdHIgX3B0cl90eXBlOwoKICAgIHN0YXRpYyBf
cHRyX3R5cGUgX25pbCgpOwogICAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5
cGUpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZShfcHRyX3R5cGUpOwogICAgc3RhdGljIHZvaWQg
ZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9w
dHJfdHlwZSwgc2l6ZV90KTsKICAgIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBl
LCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpS
ZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICAgIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0
cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNo
YWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mKTsKICB9OwoKICB0eXBlZGVmIF9DT1JCQV9PYmpS
ZWZfVmFyPF9vYmpyZWZfU3ViamVjdCwgU3ViamVjdF9IZWxwZXI+IFN1YmplY3RfdmFyOwogIHR5
cGVkZWYgX0NPUkJBX09ialJlZl9PVVRfYXJnPF9vYmpyZWZfU3ViamVjdCxTdWJqZWN0X0hlbHBl
ciA+IFN1YmplY3Rfb3V0OwoKCgogIGNsYXNzIFN1YmplY3QgewogIHB1YmxpYzoKCiAgICB0eXBl
ZGVmIFN1YmplY3RfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgU3ViamVjdF92YXIgX3Zhcl90
eXBlOwoKICAgIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwogICAgc3Rh
dGljIF9wdHJfdHlwZSBfbmFycm93KENPUkJBOjpPYmplY3RfcHRyKTsKICAgIHN0YXRpYyBfcHRy
X3R5cGUgX25pbCgpOwoKICAgIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRy
X3R5cGUsIHNpemVfdCk7CiAgICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0
cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogICAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJz
aGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgICBzdGF0aWMgaW5s
aW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAg
ICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3Jl
cG9JZCwgcyk7CiAgICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICAgIENP
UkJBOjpyZWxlYXNlKG9iaik7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgc3RhdGlj
IGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykg
ewogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9Q
RF9yZXBvSWQsIHMpOwogICAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAg
ICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCgogIH07CgogIGNsYXNzIF9vYmpyZWZfU3Vi
amVjdCA6CiAgICBwdWJsaWMgdmlydHVhbCBfb2JqcmVmX1JlZkNvdW50QmFzZSwKICAgIHB1Ymxp
YyB2aXJ0dWFsIF9vYmpyZWZfSWRlbnRpZmlhYmxlCiAgewogIHB1YmxpYzoKICAgIHZvaWQgYXR0
YWNoKE9ic2VydmVyX3B0ciBvKTsKICAgIHZvaWQgZGV0YWNoKE9ic2VydmVyX3B0ciBvKTsKICAg
IHZvaWQgbm90aWZ5KGNvbnN0IENPUkJBOjpBbnkmIGEpOwogICAgdm9pZCBibG9jayhDT1JCQTo6
Qm9vbGVhbiBiKTsKCiAgICBpbmxpbmUgX29ianJlZl9TdWJqZWN0KCkgeyBfUFJfc2V0b2JqKDAp
OyB9CiAgICBfb2JqcmVmX1N1YmplY3QoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxp
c3QqLCBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwoKICBwcm90ZWN0ZWQ6CiAg
ICB2aXJ0dWFsIH5fb2JqcmVmX1N1YmplY3QoKTsKCiAgcHJpdmF0ZToKICAgIHZpcnR1YWwgdm9p
ZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqKTsKCiAgICBfb2JqcmVmX1N1YmplY3QoY29uc3Qg
X29ianJlZl9TdWJqZWN0Jik7CiAgICBfb2JqcmVmX1N1YmplY3QmIG9wZXJhdG9yID0gKGNvbnN0
IF9vYmpyZWZfU3ViamVjdCYpOwoKICB9OwoKICBjbGFzcyBfcG9mX1N1YmplY3QgOiBwdWJsaWMg
cHJveHlPYmplY3RGYWN0b3J5IHsKICBwdWJsaWM6CiAgICBpbmxpbmUgX3BvZl9TdWJqZWN0KCkg
OiBwcm94eU9iamVjdEZhY3RvcnkoU3ViamVjdDo6X1BEX3JlcG9JZCkge30KICAgIHZpcnR1YWwg
fl9wb2ZfU3ViamVjdCgpOwoKICAgIHZpcnR1YWwgb21uaU9ialJlZiogbmV3T2JqUmVmKGNvbnN0
IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgICB2aXJ0dWFs
IF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3QgY2hhciopIGNvbnN0OwogIH07CgogIGNsYXNzIF9p
bXBsX1N1YmplY3QgOgogICAgcHVibGljIHZpcnR1YWwgX2ltcGxfUmVmQ291bnRCYXNlLAogICAg
cHVibGljIHZpcnR1YWwgX2ltcGxfSWRlbnRpZmlhYmxlCiAgewogIHB1YmxpYzoKICAgIHZpcnR1
YWwgfl9pbXBsX1N1YmplY3QoKTsKCiAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKE9ic2VydmVyX3B0
ciBvKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKE9ic2VydmVyX3B0ciBvKSA9IDA7CiAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5KGNvbnN0IENPUkJBOjpBbnkmIGEpID0gMDsKICAgIHZpcnR1
YWwgdm9pZCBibG9jayhDT1JCQTo6Qm9vbGVhbiBiKSA9IDA7CgogIHB1YmxpYzoKICAgIHZpcnR1
YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNoKEdJT1BfUyYpOwoKICBwcml2YXRlOgogICAgdmly
dHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hhciopOwogICAgdmlydHVhbCBjb25z
dCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsKICB9OwoKfQoKbmFtZXNwYWNlIFBPQV9XYXJz
YXcKewoKICBjbGFzcyBTdWJqZWN0IDoKICAgIHB1YmxpYyB2aXJ0dWFsIFdhcnNhdzo6X2ltcGxf
U3ViamVjdCwKICAgIHB1YmxpYyB2aXJ0dWFsIFJlZkNvdW50QmFzZSwKICAgICAgcHVibGljIHZp
cnR1YWwgSWRlbnRpZmlhYmxlCiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgflN1YmplY3QoKTsK
CiAgICBpbmxpbmUgV2Fyc2F3OjpTdWJqZWN0X3B0ciBfdGhpcygpIHsKICAgICAgcmV0dXJuIChX
YXJzYXc6OlN1YmplY3RfcHRyKSBfZG9fdGhpcyhXYXJzYXc6OlN1YmplY3Q6Ol9QRF9yZXBvSWQp
OwogICAgfQogIH07Cgp9CgoKCgppbmxpbmUgc2l6ZV90CldhcnNhdzo6U3ViamVjdDo6X2FsaWdu
ZWRTaXplKFdhcnNhdzo6U3ViamVjdF9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJu
IENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMjMsIG9mZnNldCk7Cn0KCmlu
bGluZSB2b2lkCldhcnNhdzo6U3ViamVjdDo6X21hcnNoYWxPYmpSZWYoV2Fyc2F3OjpTdWJqZWN0
X3B0ciBvYmosIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYo
b2JqLCBfUERfcmVwb0lkLCAyMywgcyk7Cn0KCmlubGluZSB2b2lkCldhcnNhdzo6U3ViamVjdDo6
X21hcnNoYWxPYmpSZWYoV2Fyc2F3OjpTdWJqZWN0X3B0ciBvYmosIE1lbUJ1ZmZlcmVkU3RyZWFt
JiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAyMywgcyk7Cn0K
IyAzNSAiLi4vLi4vaW5jbHVkZS9XYXJzYXcvVGVsbHRhbGUuaGgiIDIKIyA2NiAiLi4vLi4vaW5j
bHVkZS9XYXJzYXcvVGVsbHRhbGUuaGgiCm5hbWVzcGFjZSBXYXJzYXcKCnsKCgoKCiAgY2xhc3Mg
VGVsbHRhbGVDb25zdHJhaW50OwogIGNsYXNzIF9vYmpyZWZfVGVsbHRhbGVDb25zdHJhaW50Owog
IGNsYXNzIF9pbXBsX1RlbGx0YWxlQ29uc3RyYWludDsKCiAgdHlwZWRlZiBfb2JqcmVmX1RlbGx0
YWxlQ29uc3RyYWludCogVGVsbHRhbGVDb25zdHJhaW50X3B0cjsKICB0eXBlZGVmIFRlbGx0YWxl
Q29uc3RyYWludF9wdHIgVGVsbHRhbGVDb25zdHJhaW50UmVmOwoKICBjbGFzcyBUZWxsdGFsZUNv
bnN0cmFpbnRfSGVscGVyIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIFRlbGx0YWxlQ29uc3RyYWlu
dF9wdHIgX3B0cl90eXBlOwoKICAgIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogICAgc3RhdGlj
IF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwogICAgc3RhdGljIHZvaWQgcmVsZWFz
ZShfcHRyX3R5cGUpOwogICAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgICBz
dGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICAgIHN0YXRp
YyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogICAg
c3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICAg
IHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYp
OwogICAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0m
KTsKICB9OwoKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpyZWZfVGVsbHRhbGVDb25z
dHJhaW50LCBUZWxsdGFsZUNvbnN0cmFpbnRfSGVscGVyPiBUZWxsdGFsZUNvbnN0cmFpbnRfdmFy
OwogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9PVVRfYXJnPF9vYmpyZWZfVGVsbHRhbGVDb25zdHJh
aW50LFRlbGx0YWxlQ29uc3RyYWludF9IZWxwZXIgPiBUZWxsdGFsZUNvbnN0cmFpbnRfb3V0OwoK
CgoKCgogIGNsYXNzIFRlbGx0YWxlOwogIGNsYXNzIF9vYmpyZWZfVGVsbHRhbGU7CiAgY2xhc3Mg
X2ltcGxfVGVsbHRhbGU7CgogIHR5cGVkZWYgX29ianJlZl9UZWxsdGFsZSogVGVsbHRhbGVfcHRy
OwogIHR5cGVkZWYgVGVsbHRhbGVfcHRyIFRlbGx0YWxlUmVmOwoKICBjbGFzcyBUZWxsdGFsZV9I
ZWxwZXIgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgVGVsbHRhbGVfcHRyIF9wdHJfdHlwZTsKCiAg
ICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKICAgIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19u
aWwoX3B0cl90eXBlKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICAgIHN0
YXRpYyB2b2lkIGR1cGxpY2F0ZShfcHRyX3R5cGUpOwogICAgc3RhdGljIHNpemVfdCBOUF9hbGln
bmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVm
KF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICAgIHN0YXRpYyBfcHRyX3R5cGUgdW5t
YXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgICBzdGF0aWMgdm9pZCBtYXJzaGFs
T2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICAgIHN0YXRpYyBfcHRyX3R5
cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7CiAgfTsKCiAgdHlwZWRlZiBf
Q09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX1RlbGx0YWxlLCBUZWxsdGFsZV9IZWxwZXI+IFRlbGx0
YWxlX3ZhcjsKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX1RlbGx0YWxl
LFRlbGx0YWxlX0hlbHBlciA+IFRlbGx0YWxlX291dDsKCgoKICBjbGFzcyBUZWxsdGFsZSB7CiAg
cHVibGljOgoKICAgIHR5cGVkZWYgVGVsbHRhbGVfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYg
VGVsbHRhbGVfdmFyIF92YXJfdHlwZTsKCiAgICBzdGF0aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUo
X3B0cl90eXBlKTsKICAgIHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0
cik7CiAgICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKCiAgICBzdGF0aWMgaW5saW5lIHNpemVf
dCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwogICAgc3RhdGljIGlubGluZSB2b2lk
IF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFt
Jik7CgogICAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihOZXRCdWZm
ZXJlZFN0cmVhbSYgcykgewogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5N
YXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25h
cnJvdyhvYmopOwogICAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgICByZXR1cm4gcmVzdWx0
OwogICAgfQoKICAgIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYoTWVt
QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6
OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgICAgX3B0cl90eXBlIHJlc3VsdCA9
IF9uYXJyb3cob2JqKTsKICAgICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgIH0KCiAgICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCgogICAgdHlw
ZWRlZiBDT1JCQTo6VUxvbmcgTWFzazsKCiAgfTsKCiAgY2xhc3MgX29ianJlZl9UZWxsdGFsZSA6
CiAgICBwdWJsaWMgdmlydHVhbCBfb2JqcmVmX1N1YmplY3QKICB7CiAgcHVibGljOgogICAgdm9p
ZCBzZXQoVGVsbHRhbGU6Ok1hc2sgbSk7CiAgICB2b2lkIGNsZWFyKFRlbGx0YWxlOjpNYXNrIG0p
OwogICAgQ09SQkE6OkJvb2xlYW4gdGVzdChUZWxsdGFsZTo6TWFzayBtKTsKICAgIHZvaWQgbW9k
aWZ5KFRlbGx0YWxlOjpNYXNrIG0sIENPUkJBOjpCb29sZWFuIGIpOwoKICAgIFRlbGx0YWxlQ29u
c3RyYWludF9wdHIgY29uc3RyYWludCgpOwogICAgdm9pZCBjb25zdHJhaW50KFRlbGx0YWxlQ29u
c3RyYWludF9wdHIpOwoKICAgIGlubGluZSBfb2JqcmVmX1RlbGx0YWxlKCkgeyBfUFJfc2V0b2Jq
KDApOyB9CiAgICBfb2JqcmVmX1RlbGx0YWxlKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2Zp
bGVMaXN0Kiwgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCiAgcHJvdGVjdGVk
OgogICAgdmlydHVhbCB+X29ianJlZl9UZWxsdGFsZSgpOwoKICBwcml2YXRlOgogICAgdmlydHVh
bCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciopOwoKICAgIF9vYmpyZWZfVGVsbHRhbGUo
Y29uc3QgX29ianJlZl9UZWxsdGFsZSYpOwogICAgX29ianJlZl9UZWxsdGFsZSYgb3BlcmF0b3Ig
PSAoY29uc3QgX29ianJlZl9UZWxsdGFsZSYpOwoKICB9OwoKICBjbGFzcyBfcG9mX1RlbGx0YWxl
IDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CiAgcHVibGljOgogICAgaW5saW5lIF9wb2Zf
VGVsbHRhbGUoKSA6IHByb3h5T2JqZWN0RmFjdG9yeShUZWxsdGFsZTo6X1BEX3JlcG9JZCkge30K
ICAgIHZpcnR1YWwgfl9wb2ZfVGVsbHRhbGUoKTsKCiAgICB2aXJ0dWFsIG9tbmlPYmpSZWYqIG5l
d09ialJlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSop
OwogICAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19hKGNvbnN0IGNoYXIqKSBjb25zdDsKICB9
OwoKICBjbGFzcyBfaW1wbF9UZWxsdGFsZSA6CiAgICBwdWJsaWMgdmlydHVhbCBfaW1wbF9TdWJq
ZWN0CiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9pbXBsX1RlbGx0YWxlKCk7CgogICAgdmly
dHVhbCB2b2lkIHNldChUZWxsdGFsZTo6TWFzayBtKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2xl
YXIoVGVsbHRhbGU6Ok1hc2sgbSkgPSAwOwogICAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiB0ZXN0
KFRlbGx0YWxlOjpNYXNrIG0pID0gMDsKICAgIHZpcnR1YWwgdm9pZCBtb2RpZnkoVGVsbHRhbGU6
Ok1hc2sgbSwgQ09SQkE6OkJvb2xlYW4gYikgPSAwOwoKICAgIHZpcnR1YWwgVGVsbHRhbGVDb25z
dHJhaW50X3B0ciBjb25zdHJhaW50KCkgPSAwOwogICAgdmlydHVhbCB2b2lkIGNvbnN0cmFpbnQo
VGVsbHRhbGVDb25zdHJhaW50X3B0cikgPSAwOwoKICBwdWJsaWM6CiAgICB2aXJ0dWFsIF9DT1JC
QV9Cb29sZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKCiAgcHJpdmF0ZToKICAgIHZpcnR1YWwgdm9p
ZCogX3B0clRvSW50ZXJmYWNlKGNvbnN0IGNoYXIqKTsKICAgIHZpcnR1YWwgY29uc3QgY2hhciog
X21vc3REZXJpdmVkUmVwb0lkKCk7CiAgfTsKIyAyNTMgIi4uLy4uL2luY2x1ZGUvV2Fyc2F3L1Rl
bGx0YWxlLmhoIgogIGNsYXNzIFRlbGx0YWxlQ29uc3RyYWludCB7CiAgcHVibGljOgoKICAgIHR5
cGVkZWYgVGVsbHRhbGVDb25zdHJhaW50X3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFRlbGx0
YWxlQ29uc3RyYWludF92YXIgX3Zhcl90eXBlOwoKICAgIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxp
Y2F0ZShfcHRyX3R5cGUpOwogICAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93KENPUkJBOjpPYmpl
Y3RfcHRyKTsKICAgIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoKICAgIHN0YXRpYyBpbmxpbmUg
c2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgICBzdGF0aWMgaW5saW5l
IHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogICAg
c3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRT
dHJlYW0mKTsKCiAgICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5l
dEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJB
OjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICAgIF9wdHJfdHlwZSByZXN1bHQg
PSBfbmFycm93KG9iaik7CiAgICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICB9CgogICAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJl
ZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBD
T1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgICBfcHRyX3R5cGUgcmVz
dWx0ID0gX25hcnJvdyhvYmopOwogICAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgICByZXR1
cm4gcmVzdWx0OwogICAgfQoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCgog
IH07CgogIGNsYXNzIF9vYmpyZWZfVGVsbHRhbGVDb25zdHJhaW50IDoKICAgIHB1YmxpYyB2aXJ0
dWFsIF9vYmpyZWZfUmVmQ291bnRCYXNlCiAgewogIHB1YmxpYzoKICAgIHZvaWQgYWRkKFRlbGx0
YWxlX3B0ciB0KTsKICAgIHZvaWQgcmVtb3ZlKFRlbGx0YWxlX3B0ciB0KTsKICAgIHZvaWQgdHJ5
bW9kaWZ5KFRlbGx0YWxlX3B0ciB0LCBUZWxsdGFsZTo6TWFzayBtLCBDT1JCQTo6Qm9vbGVhbiBi
KTsKCiAgICBpbmxpbmUgX29ianJlZl9UZWxsdGFsZUNvbnN0cmFpbnQoKSB7IF9QUl9zZXRvYmoo
MCk7IH0KICAgIF9vYmpyZWZfVGVsbHRhbGVDb25zdHJhaW50KGNvbnN0IGNoYXIqLCBJT1A6OlRh
Z2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCiAg
cHJvdGVjdGVkOgogICAgdmlydHVhbCB+X29ianJlZl9UZWxsdGFsZUNvbnN0cmFpbnQoKTsKCiAg
cHJpdmF0ZToKICAgIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqKTsKCiAg
ICBfb2JqcmVmX1RlbGx0YWxlQ29uc3RyYWludChjb25zdCBfb2JqcmVmX1RlbGx0YWxlQ29uc3Ry
YWludCYpOwogICAgX29ianJlZl9UZWxsdGFsZUNvbnN0cmFpbnQmIG9wZXJhdG9yID0gKGNvbnN0
IF9vYmpyZWZfVGVsbHRhbGVDb25zdHJhaW50Jik7CgogIH07CgogIGNsYXNzIF9wb2ZfVGVsbHRh
bGVDb25zdHJhaW50IDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CiAgcHVibGljOgogICAg
aW5saW5lIF9wb2ZfVGVsbHRhbGVDb25zdHJhaW50KCkgOiBwcm94eU9iamVjdEZhY3RvcnkoVGVs
bHRhbGVDb25zdHJhaW50OjpfUERfcmVwb0lkKSB7fQogICAgdmlydHVhbCB+X3BvZl9UZWxsdGFs
ZUNvbnN0cmFpbnQoKTsKCiAgICB2aXJ0dWFsIG9tbmlPYmpSZWYqIG5ld09ialJlZihjb25zdCBj
aGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwogICAgdmlydHVhbCBf
Q09SQkFfQm9vbGVhbiBpc19hKGNvbnN0IGNoYXIqKSBjb25zdDsKICB9OwoKICBjbGFzcyBfaW1w
bF9UZWxsdGFsZUNvbnN0cmFpbnQgOgogICAgcHVibGljIHZpcnR1YWwgX2ltcGxfUmVmQ291bnRC
YXNlCiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9pbXBsX1RlbGx0YWxlQ29uc3RyYWludCgp
OwoKICAgIHZpcnR1YWwgdm9pZCBhZGQoVGVsbHRhbGVfcHRyIHQpID0gMDsKICAgIHZpcnR1YWwg
dm9pZCByZW1vdmUoVGVsbHRhbGVfcHRyIHQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCB0cnltb2Rp
ZnkoVGVsbHRhbGVfcHRyIHQsIFRlbGx0YWxlOjpNYXNrIG0sIENPUkJBOjpCb29sZWFuIGIpID0g
MDsKCiAgcHVibGljOgogICAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0Y2goR0lPUF9T
Jik7CgogIHByaXZhdGU6CiAgICB2aXJ0dWFsIHZvaWQqIF9wdHJUb0ludGVyZmFjZShjb25zdCBj
aGFyKik7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZlZFJlcG9JZCgpOwogIH07
Cgp9CgpuYW1lc3BhY2UgUE9BX1dhcnNhdwp7CgogIGNsYXNzIFRlbGx0YWxlIDoKICAgIHB1Ymxp
YyB2aXJ0dWFsIFdhcnNhdzo6X2ltcGxfVGVsbHRhbGUsCiAgICBwdWJsaWMgdmlydHVhbCBTdWJq
ZWN0CiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgflRlbGx0YWxlKCk7CgogICAgaW5saW5lIFdh
cnNhdzo6VGVsbHRhbGVfcHRyIF90aGlzKCkgewogICAgICByZXR1cm4gKFdhcnNhdzo6VGVsbHRh
bGVfcHRyKSBfZG9fdGhpcyhXYXJzYXc6OlRlbGx0YWxlOjpfUERfcmVwb0lkKTsKICAgIH0KICB9
OwoKICBjbGFzcyBUZWxsdGFsZUNvbnN0cmFpbnQgOgogICAgcHVibGljIHZpcnR1YWwgV2Fyc2F3
OjpfaW1wbF9UZWxsdGFsZUNvbnN0cmFpbnQsCiAgICBwdWJsaWMgdmlydHVhbCBSZWZDb3VudEJh
c2UKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB+VGVsbHRhbGVDb25zdHJhaW50KCk7CgogICAg
aW5saW5lIFdhcnNhdzo6VGVsbHRhbGVDb25zdHJhaW50X3B0ciBfdGhpcygpIHsKICAgICAgcmV0
dXJuIChXYXJzYXc6OlRlbGx0YWxlQ29uc3RyYWludF9wdHIpIF9kb190aGlzKFdhcnNhdzo6VGVs
bHRhbGVDb25zdHJhaW50OjpfUERfcmVwb0lkKTsKICAgIH0KICB9OwoKfQoKCgoKaW5saW5lIHNp
emVfdApXYXJzYXc6OlRlbGx0YWxlOjpfYWxpZ25lZFNpemUoV2Fyc2F3OjpUZWxsdGFsZV9wdHIg
b2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwg
X1BEX3JlcG9JZCwgMjQsIG9mZnNldCk7Cn0KCmlubGluZSB2b2lkCldhcnNhdzo6VGVsbHRhbGU6
Ol9tYXJzaGFsT2JqUmVmKFdhcnNhdzo6VGVsbHRhbGVfcHRyIG9iaiwgTmV0QnVmZmVyZWRTdHJl
YW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDI0LCBzKTsK
fQoKaW5saW5lIHZvaWQKV2Fyc2F3OjpUZWxsdGFsZTo6X21hcnNoYWxPYmpSZWYoV2Fyc2F3OjpU
ZWxsdGFsZV9wdHIgb2JqLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFs
T2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMjQsIHMpOwp9CgppbmxpbmUgc2l6ZV90CldhcnNhdzo6
VGVsbHRhbGVDb25zdHJhaW50OjpfYWxpZ25lZFNpemUoV2Fyc2F3OjpUZWxsdGFsZUNvbnN0cmFp
bnRfcHRyIG9iaiwgc2l6ZV90IG9mZnNldCkgewogIHJldHVybiBDT1JCQTo6QWxpZ25lZE9ialJl
ZihvYmosIF9QRF9yZXBvSWQsIDM0LCBvZmZzZXQpOwp9CgppbmxpbmUgdm9pZApXYXJzYXc6OlRl
bGx0YWxlQ29uc3RyYWludDo6X21hcnNoYWxPYmpSZWYoV2Fyc2F3OjpUZWxsdGFsZUNvbnN0cmFp
bnRfcHRyIG9iaiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJl
ZihvYmosIF9QRF9yZXBvSWQsIDM0LCBzKTsKfQoKaW5saW5lIHZvaWQKV2Fyc2F3OjpUZWxsdGFs
ZUNvbnN0cmFpbnQ6Ol9tYXJzaGFsT2JqUmVmKFdhcnNhdzo6VGVsbHRhbGVDb25zdHJhaW50X3B0
ciBvYmosIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2Jq
LCBfUERfcmVwb0lkLCAzNCwgcyk7Cn0KIyAyOCAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4v
aW5jbHVkZS9Db21tYW5kL1RlbGx0YWxlSW1wbC5oaCIgMgojIDEgIi9ob21lL3N0ZWZhbi9CZXJs
aW4vQmVybGluL2luY2x1ZGUvQmVybGluL1N1YmplY3RJbXBsLmhoIiAxCiMgMjUgIi9ob21lL3N0
ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvQmVybGluL1N1YmplY3RJbXBsLmhoIgojIDEgIi4u
Ly4uL2luY2x1ZGUvV2Fyc2F3L2NvbmZpZy5oaCIgMQojIDI2ICIvaG9tZS9zdGVmYW4vQmVybGlu
L0Jlcmxpbi9pbmNsdWRlL0Jlcmxpbi9TdWJqZWN0SW1wbC5oaCIgMgojIDEgIi4uLy4uL2luY2x1
ZGUvV2Fyc2F3L1N1YmplY3QuaGgiIDEKIyAyNyAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4v
aW5jbHVkZS9CZXJsaW4vU3ViamVjdEltcGwuaGgiIDIKIyAxICIuLi8uLi9pbmNsdWRlL1dhcnNh
dy9PYnNlcnZlci5oaCIgMQojIDU0ICIuLi8uLi9pbmNsdWRlL1dhcnNhdy9PYnNlcnZlci5oaCIK
bmFtZXNwYWNlIFdhcnNhdwoKewojIDg4ICIuLi8uLi9pbmNsdWRlL1dhcnNhdy9PYnNlcnZlci5o
aCIKICBjbGFzcyBPYnNlcnZlciB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgT2JzZXJ2ZXJfcHRy
IF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgT2JzZXJ2ZXJfdmFyIF92YXJfdHlwZTsKCiAgICBzdGF0
aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICAgIHN0YXRpYyBfcHRyX3R5cGUg
X25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsK
CiAgICBzdGF0aWMgaW5saW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3Qp
OwogICAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVm
ZmVyZWRTdHJlYW0mKTsKICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRy
X3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFtJik7CgogICAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUg
X3VubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgICBDT1JCQTo6T2Jq
ZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAg
ICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgICBDT1JCQTo6cmVsZWFzZShv
YmopOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIHN0YXRpYyBpbmxpbmUgX3B0cl90
eXBlIF91bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgICAgQ09SQkE6
Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsK
ICAgICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgICAgQ09SQkE6OnJlbGVh
c2Uob2JqKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBzdGF0aWMgY29uc3QgY2hh
ciogX1BEX3JlcG9JZDsKCgoKICB9OwoKICBjbGFzcyBfb2JqcmVmX09ic2VydmVyIDoKICAgIHB1
YmxpYyB2aXJ0dWFsIF9vYmpyZWZfSWRlbnRpZmlhYmxlCiAgewogIHB1YmxpYzoKICAgIHZvaWQg
dXBkYXRlKGNvbnN0IENPUkJBOjpBbnkmIGEpOwogICAgdm9pZCBkZXN0cm95KCk7CgogICAgaW5s
aW5lIF9vYmpyZWZfT2JzZXJ2ZXIoKSB7IF9QUl9zZXRvYmooMCk7IH0KICAgIF9vYmpyZWZfT2Jz
ZXJ2ZXIoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLCBvbW5pSWRlbnRpdHkq
LCBvbW5pTG9jYWxJZGVudGl0eSopOwoKICBwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIH5fb2JqcmVm
X09ic2VydmVyKCk7CgogIHByaXZhdGU6CiAgICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihj
b25zdCBjaGFyKik7CgogICAgX29ianJlZl9PYnNlcnZlcihjb25zdCBfb2JqcmVmX09ic2VydmVy
Jik7CiAgICBfb2JqcmVmX09ic2VydmVyJiBvcGVyYXRvciA9IChjb25zdCBfb2JqcmVmX09ic2Vy
dmVyJik7CgogIH07CgogIGNsYXNzIF9wb2ZfT2JzZXJ2ZXIgOiBwdWJsaWMgcHJveHlPYmplY3RG
YWN0b3J5IHsKICBwdWJsaWM6CiAgICBpbmxpbmUgX3BvZl9PYnNlcnZlcigpIDogcHJveHlPYmpl
Y3RGYWN0b3J5KE9ic2VydmVyOjpfUERfcmVwb0lkKSB7fQogICAgdmlydHVhbCB+X3BvZl9PYnNl
cnZlcigpOwoKICAgIHZpcnR1YWwgb21uaU9ialJlZiogbmV3T2JqUmVmKGNvbnN0IGNoYXIqLCBJ
T1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgICB2aXJ0dWFsIF9DT1JCQV9C
b29sZWFuIGlzX2EoY29uc3QgY2hhciopIGNvbnN0OwogIH07CgogIGNsYXNzIF9pbXBsX09ic2Vy
dmVyIDoKICAgIHB1YmxpYyB2aXJ0dWFsIF9pbXBsX0lkZW50aWZpYWJsZQogIHsKICBwdWJsaWM6
CiAgICB2aXJ0dWFsIH5faW1wbF9PYnNlcnZlcigpOwoKICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUo
Y29uc3QgQ09SQkE6OkFueSYgYSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSA9IDA7
CgogIHB1YmxpYzoKICAgIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNoKEdJT1BfUyYp
OwoKICBwcml2YXRlOgogICAgdmlydHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hh
ciopOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsKICB9OwoK
fQoKbmFtZXNwYWNlIFBPQV9XYXJzYXcKewoKICBjbGFzcyBPYnNlcnZlciA6CiAgICBwdWJsaWMg
dmlydHVhbCBXYXJzYXc6Ol9pbXBsX09ic2VydmVyLAogICAgcHVibGljIHZpcnR1YWwgSWRlbnRp
ZmlhYmxlCiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfk9ic2VydmVyKCk7CgogICAgaW5saW5l
IFdhcnNhdzo6T2JzZXJ2ZXJfcHRyIF90aGlzKCkgewogICAgICByZXR1cm4gKFdhcnNhdzo6T2Jz
ZXJ2ZXJfcHRyKSBfZG9fdGhpcyhXYXJzYXc6Ok9ic2VydmVyOjpfUERfcmVwb0lkKTsKICAgIH0K
ICB9OwoKfQoKCgoKaW5saW5lIHNpemVfdApXYXJzYXc6Ok9ic2VydmVyOjpfYWxpZ25lZFNpemUo
V2Fyc2F3OjpPYnNlcnZlcl9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJuIENPUkJB
OjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMjQsIG9mZnNldCk7Cn0KCmlubGluZSB2
b2lkCldhcnNhdzo6T2JzZXJ2ZXI6Ol9tYXJzaGFsT2JqUmVmKFdhcnNhdzo6T2JzZXJ2ZXJfcHRy
IG9iaiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmos
IF9QRF9yZXBvSWQsIDI0LCBzKTsKfQoKaW5saW5lIHZvaWQKV2Fyc2F3OjpPYnNlcnZlcjo6X21h
cnNoYWxPYmpSZWYoV2Fyc2F3OjpPYnNlcnZlcl9wdHIgb2JqLCBNZW1CdWZmZXJlZFN0cmVhbSYg
cykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMjQsIHMpOwp9CiMg
MjggIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvQmVybGluL1N1YmplY3RJbXBs
LmhoIiAyCiMgMSAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9QcmFndWUvU3lz
L1RocmVhZC5oaCIgMQojIDI2ICIvaG9tZS9zdGVmYW4vQmVybGluL0Jlcmxpbi9pbmNsdWRlL1By
YWd1ZS9TeXMvVGhyZWFkLmhoIgojIDEgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1
ZGUvUHJhZ3VlL1N5cy9UaW1lLmhoIiAxCiMgMjUgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGlu
L2luY2x1ZGUvUHJhZ3VlL1N5cy9UaW1lLmhoIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5o
IiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKCiMgMSAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRl
L3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNiAi
L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90
eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDM1ICIv
dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgpleHRlcm4gIkMiIHsK
CgoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKdHlwZWRl
ZiBfX2ZkX3NldCBmZF9zZXQ7CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0
ZXJuIGludCBfX3NlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9z
ZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9f
dGltZW91dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIF9fZmRf
c2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRm
ZHMsIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpIHRocm93ICgpOwojIDg3ICIvdXNyL2luY2x1
ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgX19mZF9z
ZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZk
cywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0IF9fc2lnc2V0X3QgKl9f
c2lnbWFzaykgdGhyb3cgKCk7CgoKCgoKfQojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg
MiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1
ZGUvYml0cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1
MCAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAyIDMKCgoKc3RydWN0IHRpbWV2YWwKICB7CiAg
ICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3RpbWVfdCB0dl91c2VjOwogIH07CiMgMjkgIi91c3Iv
aW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0NiAiL3Vzci9pbmNsdWRl
L3N5cy90aW1lLmgiIDMKc3RydWN0IHRpbWV6b25lCiAgewogICAgaW50IHR6X21pbnV0ZXN3ZXN0
OwogICAgaW50IHR6X2RzdHRpbWU7CiAgfTsKCgoKCgoKZXh0ZXJuIGludCBnZXR0aW1lb2ZkYXkg
KHN0cnVjdCB0aW1ldmFsICpfX3R2LCBzdHJ1Y3QgdGltZXpvbmUgKl9fdHopIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBzZXR0aW1lb2ZkYXkgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fdHYs
IF9fY29uc3Qgc3RydWN0IHRpbWV6b25lICpfX3R6KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCBhZGp0aW1lIChfX2NvbnN0IHN0cnVjdCB0aW1ldmFsICpfX2RlbHRhLCBzdHJ1Y3QgdGltZXZh
bCAqX19vbGRkZWx0YSkgdGhyb3cgKCk7CgoKCgplbnVtIF9faXRpbWVyX3doaWNoCiAgewoKICAg
IElUSU1FUl9SRUFMID0gMCwKCgogICAgSVRJTUVSX1ZJUlRVQUwgPSAxLAoKCgogICAgSVRJTUVS
X1BST0YgPSAyCgogIH07CgoKCnN0cnVjdCBpdGltZXJ2YWwKICB7CgogICAgc3RydWN0IHRpbWV2
YWwgaXRfaW50ZXJ2YWw7CgogICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7CiAgfTsKCgoKZXh0
ZXJuIGludCBnZXRpdGltZXIgKGVudW0gX19pdGltZXJfd2hpY2ggX193aGljaCwgc3RydWN0IGl0
aW1lcnZhbCAqX192YWx1ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRpdGltZXIgKGVu
dW0gX19pdGltZXJfd2hpY2ggX193aGljaCwgX19jb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpfX25l
dywgc3RydWN0IGl0aW1lcnZhbCAqX19vbGQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgdXRp
bWVzIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgc3RydWN0IHRpbWV2YWwgX190dnBbMl0pIHRocm93
ICgpOwojIDE0MyAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKfQojIDI2ICIvaG9tZS9zdGVm
YW4vQmVybGluL0Jlcmxpbi9pbmNsdWRlL1ByYWd1ZS9TeXMvVGltZS5oaCIgMgojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9jdGltZSIgMSAzCiMgMzEgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9jdGltZSIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDMKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOCAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RkZGVmLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZm
X3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDIgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDEgMwojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3Rp
bWUuaCIgMiAzCiMgNTMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jdGltZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6
OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRp
bWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsK
ICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwog
IHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyAzMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2N0aW1lIiAyIDMKIyAyNyAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9Q
cmFndWUvU3lzL1RpbWUuaGgiIDIKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvaW9zdHJlYW0iIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
aW9zdHJlYW0iIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zdHJlYW0uaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr
Y29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMu
MC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMiAz
CiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAzCgojIDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMgMzggIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMwoKIyAxICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDM4
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDMK
CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEg
MwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdmd2Qu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1
Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4gY2xhc3MgY2hhcl90cmFpdHM8Y2hhcj47CgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAg
ICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmlu
ZzsKCgoKfQojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
aW9zZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L2Zwb3MuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEgMwojIDMxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvY3N0ZGlvIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCiMgMSAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln
LmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGlvLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgpleHRlcm4gIkMiIHsK
CgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAz
CgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVm
IF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDExMCAiL3Vzci9sb2NhbC9nY2Mt
My4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAz
CnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAzOSAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA0MSAiL3Vzci9p
bmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsK
IyA1NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg
MSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAy
IDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMTIgIi91c3IvbG9jYWwvZ2NjLTMuMC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBl
ZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg
MiAzCiMgMzUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwp0eXBlZGVmIGludCBfR19pbnQx
Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19p
bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX1NJX18pKSk7CiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA0OCAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMiAzCiMgMTU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lP
X2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE2NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
dHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVj
dCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBf
cG9zOwojIDE4NyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCnN0cnVjdCBfSU9fRklMRSB7
CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFk
X2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNo
YXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVm
X2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hh
ciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19t
YXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxl
bm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQg
c2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBf
c2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMjMzICIvdXNyL2luY2x1ZGUv
bGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKICBpbnQgX3VudXNlZDJbMTZdOwoKfTsK
CgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9J
T18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRf
OwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDI2MiAiL3Vz
ci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lk
ICogX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwojIDI3MSAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAq
IF9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLCBzaXplX3QgX19uKTsKIyAyODAgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqIF9fY29v
a2llLCBfX29mZl90IF9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2Zu
ICh2b2lkICogX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRf
ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90
Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9f
aW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewog
IF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtf
Zm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv
bnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlv
bnNfdDsKCgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEUgX19maWxl
OwogIGNvbnN0IHZvaWQgKl9fdnRhYmxlOwogIHZvaWQgKl9fY29va2llOwogIF9JT19jb29raWVf
aW9fZnVuY3Rpb25zX3QgX19pb19mdW5jdGlvbnM7Cn07CgoKCgpleHRlcm4gIkMiIHsKCgpleHRl
cm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3Vm
bG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklM
RSAqLCBpbnQpIHRocm93ICgpOwojIDMzNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJu
IGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19w
dXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zl
b2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9f
RklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19G
SUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9f
RklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKIyAzNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2Nh
bmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fZ251
Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fdmZw
cmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfX2du
dWNfdmFfbGlzdCkgdGhyb3cgKCk7CgpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklM
RSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChf
SU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9J
T19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRo
cm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRo
cm93ICgpOwoKCn0KIyA1OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgp0eXBlZGVmIF9f
b2ZmX3QgZnBvc190OwoKCgoKdHlwZWRlZiBfX29mZjY0X3QgZnBvczY0X3Q7CiMgMTEwICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAx
IDMKIyAxMTEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGlu
OwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgoKZXh0ZXJu
IGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhy
b3cgKCk7CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTQwICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJv
dyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE2MCAiL3Vzci9pbmNs
dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIs
IF9fY29uc3QgY2hhciAqX19wZngpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFt
ZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBG
SUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo
cm93ICgpOwojIDIwMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVu
NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdp
Y19jb29raWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBfSU9fY29va2llX2lv
X2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqb3Bl
bl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLCBzaXplX3QgKl9fcmVzdHJp
Y3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jl
c3RyaWN0IF9fYnVmLCBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jl
c3RyaWN0IF9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2V0
bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRm
IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAo
Y2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBf
X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19h
cmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkKCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IF9f
dnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAo
KQoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7
CmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4
bGVuLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9f
YXJnKSB0aHJvdyAoKQoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDMsIDApKSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0
IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLCBfX2dudWNfdmFfbGlzdCBfX2Fy
ZykgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18s
IDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIs
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBh
c3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo
X19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cg
KCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7
CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2ZtdCwgLi4uKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3By
aW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkK
CgogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoK
ZXh0ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0
X18gKF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt
YXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu
dCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0
Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9j
a2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQg
X19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywg
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykg
dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBf
X2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2Vk
IChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGlu
dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNo
YXIgKl9fcykgdGhyb3cgKCk7CiMgNDEzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g
X19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90
ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0
cmljdCBfX2xpbmVwdHIsIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwg
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19zc2l6ZV90
IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0
IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp
bnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6
ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90
IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6
ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3Ry
aWN0IF9fcHRyLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0s
IGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50
IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA0NzcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCnR5
cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoK
CgoKCgpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGlu
dCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
ZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7
CiMgNTI3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxF
ICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpleHRl
cm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVz
dHJpY3QgX19wb3MpIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3Ry
ZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNs
ZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5
c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIg
Kl9fY29uc3QgX3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFy
ICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rl
cm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hh
ciAqX19zKSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFj
a19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBvYnN0
YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93
ICgpOwojIDYxNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgZmxvY2tmaWxl
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2MzggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCn0KIyA0
MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAy
IDMKIyA4NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRp
by5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsK
CiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAg
dXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2lu
ZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6
ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVh
ZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsK
ICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1
c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6
OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRj
aGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsK
ICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVz
aW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNp
bmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5n
IDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAx
NDIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIg
MwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6dmZz
Y2FuZjsKICB1c2luZyA6OnZzY2FuZjsKICB1c2luZyA6OnZzbnByaW50ZjsKICB1c2luZyA6OnZz
c2NhbmY7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAg
dXNpbmcgX19nbnVfY3h4Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVz
aW5nIF9fZ251X2N4eDo6dnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQoj
IDMyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvY3N0ZGlvIiAyIDMKIyAzNiAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv
YysraW8uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2NzdGRk
ZWYiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDk4ICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgi
IDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKCnR5
cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNl
X3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgX19ndGhyZWFkX211
dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UKI3ByYWdtYSB3ZWFrIHB0aHJl
YWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRlCiNwcmFnbWEgd2Vh
ayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX3NldHNwZWNpZmljCiNw
cmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9j
awojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF90cnlsb2NrCiNwcmFnbWEgd2VhayBwdGhyZWFk
X211dGV4X3VubG9jawojIDc4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgdm9pZCAqX19ndGhy
ZWFkX2FjdGl2ZV9wdHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7CgpzdGF0aWMgaW5saW5l
IGludApfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCnsKICByZXR1cm4gX19ndGhyZWFkX2FjdGl2
ZV9wdHIgIT0gMDsKfQojIDQyNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2
ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQK
X19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9p
ZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25j
ZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGlu
dApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9y
KSAodm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0K
CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtl
eSwgdm9pZCAqcHRyKQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZp
YyAoa2V5LCAwKTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19n
dGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVh
ZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0
c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVj
aWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChf
X2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9z
ZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0
ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3Rp
dmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAg
ICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sg
KF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkp
CiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0
dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3Ro
cmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICBy
ZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsK
fQojIDk5ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9ndGhyLmgiIDIgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoK
ICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7
CgoKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJlYWRf
bXV0ZXhfdCBfX2NfbG9jazsKCgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGVfdHlwZTsKCgogIHN0
cnVjdCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBz
dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMg
Y29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hl
eCA9IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgw
MDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3No
b3diYXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50
ID0gMHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgw
MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4
MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAg
fCAweDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19h
dGUgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190
cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9mcG9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jd2NoYXIuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5o
IiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3
Y2hhci5oIiAyIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2N3Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDI3ICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy
OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5o
IiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgoKCgojIDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA1MyAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBjb3VudDsKICB3aW50X3QgdmFs
dWU7Cn0gbWJzdGF0ZV90OwojIDc3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpzdHJ1Y3QgdG07
CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7
CgoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LCBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJf
dCAqd2NzbmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2Nz
Y21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3
Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgd2NzY2Fz
ZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j
b25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMTEzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgpl
eHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qg
d2NoYXJfdCAqX19zMiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBf
X3djc25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf
X3MyLCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHdjc2NvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKIyAxMzYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiBpbnQgX193Y3Njb2xs
X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBfX2xvY2Fs
ZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFy
X3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBf
X2xvYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAgKF9fY29uc3Qgd2NoYXJf
dCAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hh
cl90ICpfX3djcywgd2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3Ny
Y2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpl
eHRlcm4gc2l6ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2No
YXJfdCAqX19yZWplY3QpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3NwbiAoX19jb25z
dCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkgdGhyb3cgKCk7Cgpl
eHRlcm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3
Y2hhcl90ICpfX2FjY2VwdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAoX19j
b25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKSB0aHJv
dyAoKTsKIyAxNzQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3N0
b2sgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19kZWxpbSwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19wdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHNpemVfdCBfX3djc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpOwpleHRlcm4g
c2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4g
c2l6ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19z
LCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3bWVtY21w
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21l
bWNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbW1v
dmUgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3Qg
X19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBf
X2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCk7
CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpfX3ApIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywg
d2NoYXJfdCBfX3djLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4
dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVf
dCBfX24sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCmV4dGVybiBzaXpl
X3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLCBtYnN0
YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rz
dCwgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRl
X3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NydG9t
YnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19zcmMsIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgp
OwoKCgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
ZHN0LCBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsIHNpemVf
dCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBzaXplX3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sIG1ic3Rh
dGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAzCmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3Rv
bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgaW50IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
YmFzZSkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxv
bmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDM1NSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMK
IyAzNTYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fd2Nz
dG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
YmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2Fs
ZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90
IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIF9fd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoK
CgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3Jv
dXApIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2lu
dGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9u
ZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91
cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRl
cm5hbCAoX19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKiogX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoK
CgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwg
KF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgpfX2V4
dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJu
YWwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqIF9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA0ODIg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3Qg
Kl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hh
cl90ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNp
emVfdCBfX24pIHRocm93ICgpOwojIDUwMiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDQz
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIg
MwojIDU3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFy
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyA0MSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAyIDMKCm5hbWVzcGFjZSBz
dGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoKICAgIHBy
aXZhdGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdDsK
CiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0KSB7
IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSksIF9N
X3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0
YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX29mZihfX29mZiksIF9N
X3N0KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4g
X01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikg
eyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAgb3Bl
cmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4gKnRoaXM7
IH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewog
ICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19vZmY7CiAgICAgICAgcmV0
dXJuIF9fdDsKICAgICAgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvci0oc3RyZWFtb2ZmIF9f
b2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAtPSBfX29m
ZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9y
PT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9PSBfX3Bv
cy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9zJiBfX3Bv
cykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoKICAgICAg
c3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9Cgog
ICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBf
X29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCgoK
fQojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndk
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0
ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz
L2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lk
CiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Fs
bG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBf
X3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBj
aGFyKiBfX3MpOwp9CiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9pb3Nmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz
IGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi
YXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+
CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5h
bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0
cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh
cl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAg
ICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh
c2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAg
dHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNo
YXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3Ry
ZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmlu
Z2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNp
Y19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBp
ZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwojIDEyOSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCn0KIyA0MCAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNw
YWNlIHN0ZAp7CiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigp
IHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgdmlydHVh
bCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKICBjbGFzcyBiYWRfZXhj
ZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9u
KCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07
CgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKICB0eXBlZGVmIHZvaWQg
KCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWlu
YXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQgdGVybWluYXRlKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhw
ZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQgdW5leHBlY3RlZCgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24o
KSB0aHJvdygpOwp9Cgp9CiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz
L2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKIyAxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOCAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMg
NDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyA2NiAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJj
cHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNh
dDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7
CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47
CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAg
dXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7Cgog
IGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAg
eyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsg
fQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEs
IGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNo
YXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgog
IHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0
aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNp
bmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBf
X24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4o
X19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0
cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJz
dHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA0MCAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyA0MSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3Qg
Y2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAg
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBw
b3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg
bWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hh
cl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7
IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29u
c3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAg
IHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90
eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGlu
dAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf
X3MyLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19p
IDwgX19uOyArK19faSkKICAgICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBfX3MyW19faV0pKQog
ICAgICAgICAgICByZXR1cm4gbHQoX19zMVtfX2ldLCBfX3MyW19faV0pID8gLTEgOiAxOwogICAg
ICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChj
b25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgewogICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19w
ID0gX19zOwogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsKICAgICAgICByZXR1cm4gKF9fcCAt
IF9fcyk7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQo
Y29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQog
ICAgICB7CiAgICAgICAgZm9yIChjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsgc2l6ZV90KF9f
cCAtIF9fcykgPCBfX247ICsrX19wKQogICAgICAgICAgaWYgKCpfX3AgPT0gX19hKSByZXR1cm4g
X19wOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgog
ICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3Qg
X19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZShfX3MxLCBfX3MyLCBfX24g
KiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNv
cHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg
ICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwgX19zMiwgX19uICogc2l6ZW9m
KGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hh
cl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsKICAgICAgICBm
b3IgKGNoYXJfdHlwZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBfX247ICsrX19wKQogICAgICAg
ICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0dXJuIF9fczsKICAgICAgfQoKICAgICAg
c3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykK
ICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQog
ICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUo
X19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5
cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9f
YzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2Vv
Zihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVv
ZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0
cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9z
X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1i
c3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJf
dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9
CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0
IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBz
dGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlw
ZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQK
ICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z
Miwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0K
CiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQog
ICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hh
cl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJfdHlwZSo+
KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAg
IG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19zMSwgX19z
MiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBl
KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAg
ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3Qg
X19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUq
PihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAg
IHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRv
X2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0KCiAgICAgIHN0
YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBp
bnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0
aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgt
MSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlw
ZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7IH0KICB9Owoj
IDI2NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0
cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAgX0NoYXJUIF9NX2M7CiAgICAgIF9D
aGFyX3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9CgogICAg
ICBib29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJuIF9UcmFp
dHM6OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KIyA0MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyAzOCAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDMKCiMgMSAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr
Y29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz
L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2ICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUu
aCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0eXBlZGVmIGludCogX19jX2xvY2FsZTsKfQojIDQxICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIg
MSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGlt
aXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL2djYy0zLjAv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAx
ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMw
ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDI2ICIv
dXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz
CiMgMjcgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0u
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAyNyAiL3Vzci9p
bmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRz
LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIv
dXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvbGlt
aXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMg
MzUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
eG9wZW5fbGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRl
L2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDM5ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoj
IDEzMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIv
dXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvbGltaXRzLmgiIDIgMwojIDM5ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY2xpbWl0cy5oIiAyIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMu
MC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIg
MSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJp
bmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Ry
aW5nZndkLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDMKIyAxICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m
aWcuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5o
IiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgpzdHJ1Y3QgaW5wdXRfaXRl
cmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndh
cmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9
OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0
YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
X0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBl
ZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3RydWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRl
ZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2
YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lk
IHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVkZWYg
Zm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsK
ICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFu
Y2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1Rw
JiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NhdGVnb3J5LCBjbGFzcyBfVHAsIGNs
YXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0gX1Rw
KiwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCY+CnN0cnVjdCBpdGVyYXRvciB7CiAgdHlwZWRlZiBf
Q2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfUG9pbnRlciBwb2lu
dGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9J
dGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg
X0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRl
cjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9U
cCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwp9OwojIDE0MCAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw
ZXMuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0
IF9JdGVyJikKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRl
cmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6
ZGlmZmVyZW5jZV90eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJu
IHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29uc3QgX0l0ZXIm
KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46
OnZhbHVlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRlcmF0b3JfY2F0
ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kp
OyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJiBf
X2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgp2
YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlwZShfX2kpOyB9
Cgp9CiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVy
YXRvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMg
MzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2su
aCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMiAzCiMgNDEgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0
YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmly
c3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KQp7CgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0
ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICBpZiAoX19uID4gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUg
KF9fbisrKSAtLV9faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX2kgKz0g
X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQp7
CgogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0KIyAz
NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVy
YXRvci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRh
aW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5l
ciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBl
OwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0
IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkg
e30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3Qg
dHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVy
LT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRo
aXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5l
IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5l
ciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0
b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRl
ZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVm
IHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYg
dm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFp
bmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90
eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3Bl
cmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRh
aW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4gZnJv
bnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Q29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5l
ciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1Ymxp
YzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7
CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm
IF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQogICAgOiBjb250YWluZXIo
Jl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVy
YXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewog
ICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgKytpdGVyOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJh
dG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lCmluc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0g
X1RwJiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4KY2xhc3MgcmV2ZXJz
ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBfVHAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiBfU2VsZjsKcHJv
dGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVk
ZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl
ZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAg
cmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2Jp
ZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1
cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0
dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwog
IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsg
fQogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsK
ICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0o
KSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9y
LS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0
dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNs
YXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNv
bnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9E
aXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxf
QmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgp
ID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNs
YXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKICAgIGNv
bnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9E
aXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxf
QmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBf
X3kpOwp9CiMgMTkzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
aXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyByZXZlcnNlX2l0
ZXJhdG9yCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkK
ICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
CiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAgICAgICAgIHJl
ZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICByZXZlcnNlX2l0ZXJh
dG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6
IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDog
Y3VycmVudChfX3guY3VycmVudCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAgcmV2ZXJz
ZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgOiBjdXJy
ZW50KF9feC5iYXNlKCkpIHt9CgogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0ZXJhdG9y
IF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CiAgcG9pbnRlciBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJh
dG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9w
ZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50Owog
ICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVu
dDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9T
ZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQoK
ICBfU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJu
IF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNl
X3R5cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
X1NlbGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBf
U2VsZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90
eXBlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJl
ZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICoo
KnRoaXMgKyBfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195
KSB7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShf
X3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICBy
ZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195
KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
dGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7
CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXJhdG9yPgppbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+Cm9wZXJhdG9yKyh0eXBl
bmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgewogIHJldHVy
biByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NoYXJUID0gY2hhciwgY2xhc3MgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICBjbGFzcyBfRGlzdCA9IHB0cmRp
ZmZfdD4KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBpbnB1dF9p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIF9EaXN0IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogcG9p
bnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0ZXJhdG9y
KCkgOiBfTV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQogIGlzdHJlYW1faXRlcmF0b3IoaXN0
cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9CgogIHJlZmVy
ZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQogIHBvaW50ZXIgb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIGlzdHJlYW1faXRl
cmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIGlzdHJlYW1faXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGlzdHJlYW1faXRlcmF0
b3IgX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9Cgog
IGJvb2wgX01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX194KSBjb25zdAogICAgeyBy
ZXR1cm4gKF9NX29rID09IF9feC5fTV9vaykgJiYgKCFfTV9vayB8fCBfTV9zdHJlYW0gPT0gX194
Ll9NX3N0cmVhbSk7IH0KCnByaXZhdGU6CiAgaXN0cmVhbV90eXBlKiBfTV9zdHJlYW07CiAgX1Rw
IF9NX3ZhbHVlOwogIGJvb2wgX01fb2s7CgogIHZvaWQgX01fcmVhZCgpIHsKICAgIF9NX29rID0g
KF9NX3N0cmVhbSAmJiAqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9vaykg
ewogICAgICAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgICBfTV9vayA9ICpfTV9zdHJlYW0g
PyB0cnVlIDogZmFsc2U7CiAgICB9CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4KaW5saW5lIGJvb2wKb3BlcmF0b3I9
PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9f
eCwKICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRz
LCBfRGlzdD4mIF9feSkgewogIHJldHVybiBfX3guX01fZXF1YWwoX195KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4KaW5s
aW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBf
VHJhaXRzLCBfRGlzdD4mIF9feCwKICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9U
cCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feSkgewogIHJldHVybiAhX194Ll9NX2VxdWFs
KF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NoYXJUID0g
Y2hhciwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgpjbGFzcyBvc3RyZWFt
X2l0ZXJhdG9yIHsKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICB0eXBlZGVm
IF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4gb3N0cmVhbV90eXBlOwoKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0
b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVm
ZXJlbmNlOwoKICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVh
bSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUm
IF9fcywgY29uc3QgX0NoYXJUKiBfX2MpCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5n
KF9fYykge30KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShjb25zdCBfVHAmIF9f
dmFsdWUpIHsKICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsKICAgIGlmIChfTV9zdHJpbmcpICpf
TV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBvc3RyZWFtX2l0
ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVy
YXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFtX2l0ZXJh
dG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQpwcml2YXRlOgogIG9z
dHJlYW1fdHlwZSogX01fc3RyZWFtOwogIGNvbnN0IF9DaGFyVCogX01fc3RyaW5nOwp9OwojIDQx
NyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgi
IDMKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgpjbGFz
cyBfX25vcm1hbF9pdGVyYXRvcgogIDogcHVibGljIGl0ZXJhdG9yPGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAgICAg
ICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAg
ICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CnsKCnByb3RlY3RlZDoK
ICBfSXRlcmF0b3IgX01fY3VycmVudDsKCnB1YmxpYzoKICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gbm9ybWFsX2l0ZXJhdG9yX3R5cGU7CiAgdHlwZWRl
ZiBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPiBfX3RyYWl0c190eXBlOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX190cmFpdHNfdHlwZTo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6cG9pbnRlciBwb2lu
dGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5j
ZTsKCiAgX19ub3JtYWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQoK
ICBleHBsaWNpdCBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfSXRlcmF0b3ImIF9faSkgOiBfTV9j
dXJyZW50KF9faSkgeyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICBpbmxpbmUgX19u
b3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+
JiBfX2kpCiAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CgoKICByZWZlcmVuY2UKICBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VycmVudDsgfQoKICBwb2ludGVyCiAgb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAgbm9ybWFsX2l0ZXJhdG9y
X3R5cGUmCiAgb3BlcmF0b3IrKygpIHsgKytfTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAg
bm9ybWFsX2l0ZXJhdG9yX3R5cGUKICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gX19ub3JtYWxf
aXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQoKCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmCiAgb3Bl
cmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgbm9ybWFsX2l0ZXJh
dG9yX3R5cGUKICBvcGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01f
Y3VycmVudC0tKTsgfQoKCiAgcmVmZXJlbmNlCiAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNl
X3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0KCiAgbm9ybWFs
X2l0ZXJhdG9yX3R5cGUmCiAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikK
ICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgbm9ybWFsX2l0ZXJhdG9y
X3R5cGUKICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgeyBy
ZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCArIF9fbik7IH0KCiAgbm9ybWFsX2l0
ZXJhdG9yX3R5cGUmCiAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICB7
IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgbm9ybWFsX2l0ZXJhdG9yX3R5
cGUKICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgeyByZXR1
cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0KCiAgZGlmZmVyZW5jZV90
eXBlCiAgb3BlcmF0b3ItKGNvbnN0IG5vcm1hbF9pdGVyYXRvcl90eXBlJiBfX2kpIGNvbnN0CiAg
eyByZXR1cm4gX01fY3VycmVudCAtIF9faS5fTV9jdXJyZW50OyB9CgogIGNvbnN0IF9JdGVyYXRv
ciYKICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQp9OwoKCgp0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fbGhzLmJhc2Uo
KSA9PSBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu
YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9y
IT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhz
LAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu
ZXI+JiBfX3JocykKeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KCgoKdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gX19saHMuYmFzZSgpIDwg
X19yaHMuYmFzZSgpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBf
SXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAg
ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9f
cmhzKQp7IHJldHVybiBfX3JocyA8IF9fbGhzOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9v
bApvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWlu
ZXI+JiBfX2xocywKICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS
LCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuICEoX19yaHMgPCBfX2xocyk7IH0KCnRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D
b250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX2xo
cyA8IF9fcmhzKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPgppbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPgpv
cGVyYXRvcisoX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVy
ZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4mIF9faSkKeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
LCBfQ29udGFpbmVyPihfX2kuYmFzZSgpICsgX19uKTsgfQoKfQojIDM3ICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgNDMgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAxIDMK
IyAxOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5o
IiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIgMSAzCiMgMzQg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWly
IHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoK
ICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgp
IHt9CgoKCiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19h
KSwgc2Vjb25kKF9fYikge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBh
aXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQo
X19wLnNlY29uZCkge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9U
MSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNl
Y29uZCA9PSBfX3kuc2Vjb25kOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu
bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWly
PF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAg
ICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25k
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kp
IHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29u
c3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWly
PF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEo
X195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBf
VDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBf
VDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDM4
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MiAzCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3Ry
YWl0cy5oIiAxIDMKIyAxOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
dHlwZV90cmFpdHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMjEgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDIgMwojIDU3ICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBs
YXRlIDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Owp0eXBlZGVmIF9Cb29sPHRydWU+IF9f
dHJ1ZV90eXBlOwp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2ZhbHNlX3R5cGU7Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
dGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyA4MSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25l
ZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5
cGVfdHJhaXRzPGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxs
b25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBk
b3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7
CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
SXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190
cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5z
aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln
bmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
SXNfaW50ZWdlcjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUg
X05vcm1hbDsKfTsKCgpuYW1lc3BhY2Ugc3RkIHsKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsKfTsKCnRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9J
c19ub3JtYWxfaXRlcmF0b3I8IHN0ZDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDQxICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoj
IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgi
IDEgMwojIDQzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NsaW1pdHMuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAx
IDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRs
aWIuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NzdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAx
IDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgoKIyAxICIv
dXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJu
ICJDIiB7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07
CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAg
bG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1
Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9
IGxsZGl2X3Q7CiMgODAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9f
Y3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0
b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgYXRvaSAoX19j
b25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29u
c3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBs
b25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKCgpleHRlcm4g
ZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsK
CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpIHRocm93ICgpOwoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDEzMiAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9s
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKIyAx
NTcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgi
IDEgMwojIDE1OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50
IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0
aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBf
X3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJv
dyAoKTsKCgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwojIDE5NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBk
b3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICogX19y
ZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
aW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIs
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy
b3cgKCk7CgoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9s
bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50
ZXJuYWwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqIF9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyAzMzMgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93
ICgpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNs
dWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDIgMwoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0
Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVm
IF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9f
ZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lu
b190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBf
X2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21v
ZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBf
X3VpZF90IHVpZF90OwojIDk2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBf
X3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKdHlwZWRlZiBfX3NzaXpl
X3Qgc3NpemVfdDsKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRk
cl90IGNhZGRyX3Q7CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKCgoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAxIDMKIyAxMjMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDEyNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy
IDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE2OSAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9p
bnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5
cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
RElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX3dvcmRfXykpKTsKIyAxOTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2VuZGlh
bi5oIiAyIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvZW5kaWFuLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDE5
MiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMv
c2VsZWN0LmgiIDEgMwojIDE5NSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDE5OCAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CnR5cGVkZWYg
X19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7
CgoKCgoKCgp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtj
bnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7
CgoKfQojIDM0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGludDMy
X3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25l
ZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqIGluaXRzdGF0ZSAodW5z
aWduZWQgaW50IF9fc2VlZCwgdm9pZCAqIF9fc3RhdGVidWYsIHNpemVfdCBfX3N0YXRlbGVuKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICogc2V0c3RhdGUgKHZvaWQgKiBfX3N0YXRlYnVmKSB0
aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7
CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBl
OwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0
cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3Ry
aWN0IF9fYnVmLCBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRh
ICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQg
X19zZWVkLCB2b2lkICogX19yZXN0cmljdCBfX3N0YXRlYnVmLCBzaXplX3QgX19zdGF0ZWxlbiwg
c3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgc2V0c3RhdGVfciAodm9pZCAqIF9fcmVzdHJpY3QgX19zdGF0ZWJ1Ziwgc3RydWN0IHJh
bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBy
YW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19z
ZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVk
KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7
CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJu
IGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAo
KTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25n
IGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJu
IHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2
WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f
cGFyYW1bN10pIHRocm93ICgpOwoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25l
ZCBzaG9ydCBpbnQgeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwogICAgdW5zaWdu
ZWQgc2hvcnQgaW50IGM7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hbM107CiAgICBpbnQg
aW5pdDsKICB9OwoKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19yZXN0cmljdCBfX2J1ZmZlciwgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgZG91YmxlICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBf
X3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQg
aW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIs
IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
bXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25n
IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGpyYW5kNDhf
ciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
cmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVu
c2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVm
ZmVyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50
IF9fcGFyYW1bN10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA0
NzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqIG1hbGxvYyAoc2l6ZV90
IF9fc2l6ZSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCAqIGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICogcmVhbGxvYyAodm9p
ZCAqIF9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZv
aWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICogX19wdHIp
IHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi91c3Iv
aW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy
MyAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4g
dm9pZCAqIGFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDQ5MyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICogdmFsbG9jIChzaXplX3Qg
X19zaXplKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lk
ICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX29uX2V4aXQgKHZv
aWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiBfX2FyZyksIHZvaWQgKiBfX2FyZykg
dGhyb3cgKCk7CgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0
dXMsIHZvaWQgKiBfX2FyZyksIHZvaWQgKiBfX2FyZykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2
b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19j
b25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0
ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRl
bnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19j
b25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkg
dGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDU2
NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9f
dGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVt
cGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19j
b21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25h
bWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA1OTUgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25hbWUsIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCgp0
eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lk
ICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJu
IHZvaWQgKiBic2VhcmNoIChfX2NvbnN0IHZvaWQgKiBfX2tleSwgX19jb25zdCB2b2lkICogX19i
YXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBh
cik7CgoKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKiBfX2Jhc2UsIHNpemVfdCBfX25tZW1i
LCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKCmV4dGVybiBpbnQg
YWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVy
biBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxv
bmcgbG9uZyBpbnQgX194KSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9u
ZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChs
b25nIGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkgdGhyb3cgKCkKCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDY1MSAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp
bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu
dCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hh
ciAqX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0
cmljdCBfX3NpZ24pIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs
IHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIg
Kl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBx
ZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwojIDY5NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVy
biBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90
IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fcHdjcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgNzE4ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRo
cm93ICgpOwojIDcyOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0c3Vi
b3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsIF9fY29uc3QgY2hhciAqX19jb25zdCAq
X19yZXN0cmljdCBfX3Rva2VucywgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgp
OwojIDczOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkIHNldGtleSAoX19j
b25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGlu
dCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVm
bGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgp9
CiMgNDIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGli
LmgiIDIgMwojIDczICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGxpYi5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjps
ZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7
CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcg
Ojpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhp
dDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVz
aW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6
bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJh
bmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7
CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwog
IHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJz
KGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihs
b25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9Cn0KIyAxMjUgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKbmFt
ZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpsbGRpdl90OwogIHVzaW5nIDo6X0V4aXQ7Cgog
IGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAg
PyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25nIGxvbmcKICBsbGFicyhsb25nIGxvbmcgX194
KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBk
aXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVv
dCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxp
bmUgbGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRp
dl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVy
biBfX3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1c2luZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0
cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFj
ZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXZfdDsKICB1c2luZyBfX2dudV9jeHg6Ol9F
eGl0OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6bGxhYnM7CiAg
dXNpbmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdjsKICB1c2luZyBf
X2dudV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9mOwogIHVzaW5nIF9fZ251
X2N4eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251
X2N4eDo6c3RydG9sZDsKfQojIDQ1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNDYgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvbmV3IiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL25ldyIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9jc3RkZGVmIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL25l
dyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIg
MSAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9uZXciIDIgMwoKZXh0
ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBl
eGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KICAgIHZp
cnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07
CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19o
YW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7Cn0K
Cgp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7
CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp
Owp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs
ZXRlW10odm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNv
bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpz
aXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlW10odm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5l
IHZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyBy
ZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2
b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9CiMgNDcgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA0
OSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVy
YXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNTEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3Iu
aCIgMSAzCiMgNTIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDUzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4K
aW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIg
X19iLCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0g
X190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0
ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRl
cjIgX19iKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKF9fYSkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAm
IF9fYikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1w
Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29u
c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkg
cmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNv
bnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBf
X2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2Is
IF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJl
dHVybiBfX2I7IHJldHVybiBfX2E7Cn0KIyAxMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIg
X19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRl
cgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJz
dDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2Zp
cnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3VsdCwg
X19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jl
c3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgcmV0dXJuIF9f
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp
cnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4K
aW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAog
ICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KaW5saW5lIF9UcCogX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFz
dCwgX1RwKiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsK
ICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19m
aXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9P
dXRwdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
X3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAg
ICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LCBfVHJpdmlhbCgpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gX091dHB1dEl0
ZXIoX19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpKTsKfQoKdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0
cHV0SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2Zh
bHNlX3R5cGUpCnsKICByZXR1cm4gX19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9uaTEoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKewogIHR5cGVkZWYg
dHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3Jt
YWw7CiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9f
cmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsK
ICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxp
bmUgX091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRl
cj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0
aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9E
aXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19jb3B5X2JhY2t3YXJkKF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlKikKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICotLV9fcmVzdWx0ID0g
Ki0tX19sYXN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5s
aW5lIF9CaWRpcmVjdGlvbmFsSXRlciBfX2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlz
dGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAqLS1fX3Jl
c3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAg
ICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsK
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6
aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIF9DYXQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46OmRpZmZlcmVuY2VfdHlwZQogICAgICAg
ICAgX0Rpc3RhbmNlOwoKICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMiBjb3B5KF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNr
d2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsK
ICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3Bh
dGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBf
VHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25z
dCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0
IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3Vs
dCAtIF9OdW07CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNr
d2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBf
VHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jl
c3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBf
X3RydWVfdHlwZT4KICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlf
YmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpIHsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlf
YmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgOjpj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJ
MSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3Jt
YWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5
cGUpIHsKICByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQuYmFzZSgpKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBf
QkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihf
QkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpewogIHJldHVy
biBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1w
bGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2Jh
Y2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19y
ZXN1bHQsIF9fdHJ1ZV90eXBlKSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh
dG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0
cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9y
bWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5l
IF9CSTIgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3Qs
IF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19j
b3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19O
b3JtYWwoKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxp
bmUgX0JJMiBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19y
ZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBf
X2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19O
b3JtYWwoKSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwg
Y2xhc3MgX091dHB1dEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+IF9fY29weV9u
KF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGZvciAoIDsgX19j
b3VudCA+IDA7IC0tX19jb3VudCkgewogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19f
Zmlyc3Q7CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfT3V0
cHV0SXRlcj4oX19maXJzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JBSXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfUkFJdGVyLCBfT3V0
cHV0SXRlcj4KX19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcpIHsKICBfUkFJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWly
PF9SQUl0ZXIsIF9PdXRwdXRJdGVyPihfX2xhc3QsIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KX19jb3B5
X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCkgewogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBw
YWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpjb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJl
dHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCk7Cn0KCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgZmlsbChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICAqX19maXJzdCA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgZmlsbF9uKF9PdXRwdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFs
dWU7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCgoKaW5saW5lIHZvaWQgZmlsbCh1bnNpZ25lZCBjaGFy
KiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciYgX19jKQp7CiAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICBtZW1z
ZXQoX19maXJzdCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgdm9pZCBmaWxs
KHNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAg
ICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBzaWduZWQgY2hhciBfX3RtcCA9IF9fYzsK
ICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xh
c3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBf
X2xhc3QsIGNvbnN0IGNoYXImIF9fYykKewogIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9f
Zmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJz
dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIHVuc2lnbmVkIGNoYXIqIGZpbGxf
bih1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2Zp
cnN0ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1NpemU+CmlubGluZSBzaWduZWQgY2hhciogZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXpl
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykK
ewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCAr
IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgY2hhciogZmlsbF9uKGNoYXIq
IF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9CgoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KcGFpcjxfSW5wdXRJdGVy
MSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3QxOwogICAgKytf
X2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2Zp
cnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5w
dXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5
X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICsrX19maXJz
dDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0
SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3Qx
ICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoISgqX19maXJzdDEg
PT0gKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5
UHJlZGljYXRlPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9C
aW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBm
b3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBp
ZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFs
c2U7CiAgcmV0dXJuIHRydWU7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyPgpib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgewog
ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAo
Kl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBf
X2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPgpib29s
IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwg
KytfX2ZpcnN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAg
IHJldHVybiB0cnVlOwogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAg
IHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MjsKfQoKaW5saW5lIGJvb2wKbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29u
c3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBf
X2ZpcnN0MTsKICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNv
bnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEs
IF9fbGVuMikpOwogIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4x
IDwgX19sZW4yOwp9CgppbmxpbmUgYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBj
aGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIp
CnsKCiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciop
IF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVk
IGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qg
c2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBfX2xleGljb2dyYXBoaWNhbF9jb21w
YXJlXzN3YXkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1
dEl0ZXIyIF9fbGFzdDIpCnsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1
cm4gLTE7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4gMTsKICAg
ICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICBpZiAoX19maXJzdDIgPT0gX19sYXN0
MikgewogICAgcmV0dXJuICEoX19maXJzdDEgPT0gX19sYXN0MSk7CiAgfQogIGVsc2UgewogICAg
cmV0dXJuIC0xOwogIH0KfQoKaW5saW5lIGludApfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3
YXkoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3Qg
cHRyZGlmZl90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBjb25zdCBwdHJkaWZmX3Qg
X19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNt
cChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogIHJldHVybiBfX3Jl
c3VsdCAhPSAwID8gX19yZXN1bHQKICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0g
X19sZW4yID8gMCA6IChfX2xlbjEgPCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludApf
X2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0
IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gX19sZXhpY29ncmFw
aGljYWxfY29tcGFyZV8zd2F5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBsZXhpY29ncmFw
aGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19sYXN0
MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9Cgp9CiMgMjEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDI4ICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEg
MwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2Vw
dC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9u
KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9f
dGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7
CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19s
ZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2
b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMjkgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMK
IyAzMCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk
bGliLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9h
c3NlcnQuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAyIDMKIyA1
OCAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9f
YXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19m
aWxlLCB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHRocm93
ICgpCgoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lk
IF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxl
LCB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHRocm93ICgp
CgoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKfQojIDM4ICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAyIDMKIyAzMyAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoK
CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh
ZHMuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF90aHJlYWRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAyIDMKIyA1MSAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3Rk
CnsKIyA2NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh
ZHMuaCIgMwpzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UKewoKCgoKICB0eXBlZGVmIHNpemVfdCBfUkNf
dDsKCgoKICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCgoKICBfX2d0aHJlYWRfbXV0
ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01f
cmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAs
IDAsIDAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCwgezAsIDB9fTsKICAgICAgX01fcmVmX2NvdW50
X2xvY2sgPSBfX3RtcDsKCgoKCgogICAgfQojIDExMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsKICAgIF9f
Z3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICArK19NX3JlZl9jb3Vu
dDsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICB9CiAg
X1JDX3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRf
bG9jayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgX19n
dGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgcmV0dXJuIF9fdG1w
OwogIH0KIyAxNjMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90
aHJlYWRzLmgiIDMKfTsKIyAyODQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF90aHJlYWRzLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CnN0cnVjdCBfU1RMX211
dGV4X3NwaW4gewogIGVudW0geyBfX2xvd19tYXggPSAzMCwgX19oaWdoX21heCA9IDEwMDAgfTsK
CgogIHN0YXRpYyB1bnNpZ25lZCBfX21heDsKICBzdGF0aWMgdW5zaWduZWQgX19sYXN0Owp9OwoK
dGVtcGxhdGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+Ojpf
X21heCA9IF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX2xvd19tYXg7Cgp0ZW1wbGF0ZSA8aW50
IF9faW5zdD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbGFzdCA9IDA7CiMg
MzExICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o
IiAzCnN0cnVjdCBfU1RMX211dGV4X2xvY2sKewoKCgoKCgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBf
TV9sb2NrOwogIHZvaWQgX01faW5pdGlhbGl6ZSgpIHsKIyAzNDIgIi91c3IvbG9jYWwvZ2NjLTMu
MC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB9CiAgdm9pZCBfTV9hY3F1
aXJlX2xvY2soKSB7CgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgfQog
IHZvaWQgX01fcmVsZWFzZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygm
X01fbG9jayk7CiAgfQojIDQ1MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3RocmVhZHMuaCIgMwp9OwojIDQ5MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sKewogIF9T
VExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRleF9sb2Nr
JiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2Nr
KCk7IH0KICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0K
CnByaXZhdGU6CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICBfU1RM
X2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwp9OwoKfQojIDM5ICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgNjggIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCm5hbWVzcGFj
ZSBzdGQKewoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsK
ICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgc3RhdGljIHZv
aWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgpwdWJsaWM6CgogIHN0YXRpYyB2
b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9j
KF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9f
bik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv
aWQqIF9fcCwgc2l6ZV90ICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQoKICBzdGF0aWMgdm9pZCog
cmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2
b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jl
c3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVy
biBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZv
aWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9j
X29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICBy
ZXR1cm4oX19vbGQpOwogIH0KCn07CgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkICgqIF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy
KSgpID0gMDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19t
eV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsK
ICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7
CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhyb3dfYmFk
X2FsbG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19y
ZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3Vs
dCk7CiAgICB9Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24pCnsK
ICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoK
ICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxs
b2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBz
dGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIp
KCk7CiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBpZiAoX19y
ZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CmNsYXNzIHNpbXBsZV9hbGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0
ZShzaXplX3QgX19uKQogICAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9j
OjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0
ZSh2b2lkKQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9U
cCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQog
ICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9m
IChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAgeyBf
QWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgoKCgoKCnRlbXBsYXRl
IDxjbGFzcyBfQWxsb2M+CmNsYXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0ge19T
X2V4dHJhID0gOH07CgoKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBf
X24pCiAgewogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24g
KyAoaW50KSBfU19leHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICByZXR1
cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIq
KV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgKCh2b2lkKSAoKCooc2l6ZV90KilfX3JlYWxfcCA9
PSBfX24pID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiIs
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIsIDE5
MCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19y
ZWFsX3AsIF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9j
YXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgewogICAg
Y2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAoKHZvaWQp
ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo
Iiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIsIDE5NywgX19QUkVUVFlfRlVOQ1RJT05fXyks
IDApKSk7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9j
YXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQpIF9TX2V4dHJhLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgKihzaXpl
X3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19l
eHRyYTsKICB9Cgp9OwojIDI0MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNz
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7Cgpwcml2YXRlOgoKCiAgZW51bSB7X0FMSUdOID0g
OH07CiAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgZW51bSB7X05GUkVFTElTVFMgPSAxNn07
CiAgc3RhdGljIHNpemVfdAogIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgeyByZXR1
cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXplX3QpIF9BTElHTiAt
IDEpKTsgfQoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3Rf
bGluazsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogIH07CgogIHN0YXRpYyBfT2Jq
KiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbXTsKCiAgc3RhdGljIHNpemVfdCBfU19mcmVlbGlzdF9p
bmRleChzaXplX3QgX19ieXRlcykgewogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIChzaXpl
X3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7CiAgfQoKCiAgc3RhdGljIHZvaWQqIF9T
X3JlZmlsbChzaXplX3QgX19uKTsKCgogIHN0YXRpYyBjaGFyKiBfU19jaHVua19hbGxvYyhzaXpl
X3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKCiAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7
CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXpl
OwoKCiAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgoK
CgoKICAgIGNsYXNzIF9Mb2NrOwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwogICAgY2xhc3MgX0xv
Y2sgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgX0xvY2soKSB7IHsgaWYgKHRocmVhZHMp
IF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH07IH0KICAgICAgICAg
ICAgfl9Mb2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3Jl
bGVhc2VfbG9jaygpOyB9OyB9CiAgICB9OwoKcHVibGljOgoKCiAgc3RhdGljIHZvaWQqIGFsbG9j
YXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXQgPSAwOwoKICAgIGlmIChfX24gPiAo
c2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgIF9fcmV0ID0gbWFsbG9jX2FsbG9jOjphbGxvY2F0
ZShfX24pOwogICAgfQogICAgZWxzZSB7CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVf
bGlzdAogICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoK
CgoKCiAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICAgIF9PYmoqIF9fcmVzdWx0ID0g
Kl9fbXlfZnJlZV9saXN0OwogICAgICBpZiAoX19yZXN1bHQgPT0gMCkKICAgICAgICBfX3JldCA9
IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAgZWxzZSB7CiAgICAgICAgKl9fbXlf
ZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgX19yZXQg
PSBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBfX3JldDsKICB9OwoKCiAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgaWYgKF9f
biA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAgIG1hbGxvY19hbGxvYzo6ZGVhbGxvY2F0ZShf
X3AsIF9fbik7CiAgICBlbHNlIHsKICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0
CiAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg
IF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCgogICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7
CgogICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAg
ICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKCiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxv
Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKCn0gOwoK
dHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gYWxsb2M7CnR5cGVkZWYg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwoK
dGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewog
IHJldHVybiBmYWxzZTsKfQoKCgoKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19p
bnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+Ojpf
U19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCnsKICAgIGNoYXIq
IF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwog
ICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAg
ICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAgICAgICBfX3Jlc3VsdCA9
IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwog
ICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBf
X3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAg
ICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgX19yZXN1bHQg
PSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsK
ICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsKICAgICAgICBzaXplX3QgX19i
eXRlc190b19nZXQgPQogICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChf
U19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAg
ICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAgICAg
ICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7Cgog
ICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0g
Kl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nf
c3RhcnRfZnJlZTsKICAgICAgICB9CiAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxs
b2MoX19ieXRlc190b19nZXQpOwogICAgICAgIGlmICgwID09IF9TX3N0YXJ0X2ZyZWUpIHsKICAg
ICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJl
ZV9saXN0OwogICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgIGZvciAoX19pID0g
X19zaXplOwogICAgICAgICAgICAgICAgIF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOwogICAg
ICAgICAgICAgICAgIF9faSArPSAoc2l6ZV90KSBfQUxJR04pIHsKICAgICAgICAgICAgICAgIF9f
bXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAg
ICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAgIGlmICgw
ICE9IF9fcCkgewogICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBf
TV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNo
YXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUg
KyBfX2k7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwg
X19ub2JqcykpOwoKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
X1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxv
Y19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCgogICAgICAgIH0KICAgICAgICBf
U19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19z
dGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9j
KF9fc2l6ZSwgX19ub2JqcykpOwogICAgfQp9CgoKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogICAgaW50IF9fbm9ianMgPSAyMDsKICAg
IGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgX09iaiog
dm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgX09iaiogX19yZXN1bHQ7CiAgICBfT2JqKiBf
X2N1cnJlbnRfb2JqOwogICAgX09iaiogX19uZXh0X29iajsKICAgIGludCBfX2k7CgogICAgaWYg
KDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgX19teV9mcmVlX2xpc3QgPSBfU19m
cmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9P
YmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiop
KF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBf
X2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgo
Y2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkg
ewogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX19jdXJyZW50X29i
aiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAg
ICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4K
dm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRl
KHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikKewogICAgdm9pZCogX19yZXN1bHQ7
CiAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhf
QllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJu
KHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xk
X3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQg
PSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6
PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9z
eik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsK
fQoKCiAgICB0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBfU1RMX211
dGV4X2xvY2sKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46
Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAgICAgICA9IHsgezAsIDAsIDAsIFBUSFJFQURfTVVU
RVhfRkFTVF9OUCwgezAsIDB9fSB9OwoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBf
X2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46
Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0
PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19l
bmRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnNpemVf
dCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3Np
emUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgp0eXBlbmFtZSBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xhdGls
ZQpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9s
aXN0WwogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X05G
UkVFTElTVFMKXSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCB9OwojIDUyNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0eXBl
ZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVy
ZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg
IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93
KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7
fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2Ug
X194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0
X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRl
KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8g
c3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAg
ICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9f
cCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6
ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsg
cmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2lu
dGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9p
ZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNs
YXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9p
bnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lk
IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg
IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxf
VDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxv
Y2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQoj
IDYwMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3Ig
ewogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw
ZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBv
aW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAm
IHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5k
IHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBf
X2FsbG9jYXRvcigpIHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYg
X19hKSB0aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2Fs
bG9jKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxs
b2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxs
b2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9
CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9
CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0
dXJuICZfX3g7IH0KCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCog
PSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9f
dW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAw
OwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAg
IHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7
IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gc2l6
ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBj
b25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3ko
cG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+
CmNsYXNzIF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNpemVf
dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lk
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVm
IHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQg
ewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2Ex
Ll9fdW5kZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3Vu
ZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgoKCgp0ZW1wbGF0
ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2Fs
bG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8aW50IF9f
aW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJl
dHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIGZhbHNlOwp9CiMgNzMyICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0cwp7CiAg
c3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2NhdG9yX3R5
cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25zdCBib29s
IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFs
bG9jYXRvcjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190eXBlOwogIHR5
cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl
c3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBf
X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVk
ZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg
X19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U
cCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAg
ICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0
aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2Fs
bG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19h
bGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0Fs
bG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBf
U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv
Y2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5
cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50
IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAg
X19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBi
b29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2Nf
dHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0
czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0
aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2Fs
bG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19h
bGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07Cgp9
CiMgMjIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnku
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Nv
bnN0cnVjdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2NvbnN0cnVjdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL25ldyIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9jb25zdHJ1Y3QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA0NyAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChfVDEqIF9fcCwgY29u
c3QgX1QyJiBfX3ZhbHVlKSB7Cm5ldyAoKHZvaWQqKSBfX3ApIF9UMShfX3ZhbHVlKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChfVDEqIF9fcCkgewogIG5l
dyAoKHZvaWQqKSBfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9p
ZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9fcG9pbnRlci0+fl9UcCgpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkK
ewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGRlc3Ryb3koJipf
X2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lk
IF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVl
X3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpp
bmxpbmUgdm9pZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf
VHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlhbF9kZXN0cnVjdG9y
OwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgX0Rlc3Ry
b3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewog
IF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCmlu
bGluZSB2b2lkIF9EZXN0cm95KGNoYXIqLCBjaGFyKikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3ko
aW50KiwgaW50Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kobG9uZyosIGxvbmcqKSB7fQppbmxp
bmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3ko
ZG91YmxlKiwgZG91YmxlKikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kod2NoYXJfdCosIHdjaGFy
X3QqKSB7fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBj
b25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgewogIF9Db25zdHJ1Y3QoX19w
LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgY29uc3RydWN0
KF9UMSogX19wKSB7CiAgX0NvbnN0cnVjdChfX3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp
bmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX0Rlc3Ryb3koX19wb2ludGVy
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIGRlc3Ry
b3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewog
IF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCn0KIyAyMyAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMK
IyAyNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVt
cGJ1Zi5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3RlbXBidWYuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnBh
aXI8X1RwKiwgcHRyZGlmZl90PgpfX2dldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xl
biwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9U
cCkpKQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogIHdoaWxlIChfX2xl
biA+IDApIHsKICAgIF9UcCogX190bXAgPSAoX1RwKikgbWFsbG9jKChzaXplX3QpX19sZW4gKiBz
aXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAgcmV0dXJuIHBhaXI8X1RwKiwg
cHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0gMjsKICB9CgogIHJldHVybiBw
YWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlm
Zl90IF9fbGVuKSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAq
KSAwKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgcGFpcjxfVHAqLCBwdHJk
aWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikgewogIHJl
dHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnZvaWQgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApIHsKICBm
cmVlKF9fcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+
CmNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyIHsKcHJpdmF0ZToKICBwdHJkaWZmX3QgX01fb3JpZ2lu
YWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7CgogIHZvaWQgX01f
YWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAgX01f
YnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAvIHNp
emVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICAg
IHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2MoX01f
bGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX01fYnVmZmVyKQogICAgICAgIGJyZWFrOwog
ICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIo
Y29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9CiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihj
b25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBlKSB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihf
TV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9CgpwdWJsaWM6CiAgcHRyZGlmZl90IHNpemUoKSBj
b25zdCB7IHJldHVybiBfTV9sZW47IH0KICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25z
dCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KICBfVHAqIGJlZ2luKCkgeyByZXR1cm4gX01f
YnVmZmVyOyB9CiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAg
X1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCkgewoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojpo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAg
IHRyeSB7CiAgICAgIF9NX2xlbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X01fbGVuKTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAw
KQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAg
IH0KICAgIGNhdGNoKC4uLikgeyBmcmVlKF9NX2J1ZmZlcik7IF9NX2J1ZmZlciA9IDA7IF9NX2xl
biA9IDA7IHRocm93OyB9OwogIH0KCiAgfl9UZW1wb3JhcnlfYnVmZmVyKCkgewogICAgZGVzdHJv
eShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAg
fQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXIm
KSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCgoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsCiAgICAgICAgICBjbGFzcyBfVHAKICAg
ICAgICAgICAgICAgICAgICA9IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJh
dG9yPjo6dmFsdWVfdHlwZQogICAgICAgICA+CnN0cnVjdCB0ZW1wb3JhcnlfYnVmZmVyIDogcHVi
bGljIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4KewogIHRlbXBvcmFy
eV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz
dCkKICAgIDogX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPihfX2ZpcnN0
LCBfX2xhc3QpIHt9CiAgfnRlbXBvcmFyeV9idWZmZXIoKSB7fQp9OwoKfQojIDI1ICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgi
IDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5p
bml0aWFsaXplZC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9G
b3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJu
IGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRf
Y29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0Owog
IHRyeSB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIp
CiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwog
IH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0K
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9U
cD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAg
dW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBf
X3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNo
YXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQpIHsK
ICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4g
X19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRp
YWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0
LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVz
dWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJl
dHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJ
dGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBf
Rm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgewogICAgZm9yICggOyBfX2NvdW50
ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYq
X19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRl
cj4oX19maXJzdCwgX19jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQs
IF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vz
c0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2Nv
dW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAogICAg
ICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmluaXRpYWxpemVkX2NvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRl
ciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJz
dCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz
dWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6
ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0
ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3Vu
dCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJu
IF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9p
ZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190
cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1
eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0
ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsg
KytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KICBjYXRjaCguLi4p
IHsgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5p
dGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNf
UE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lz
X1BPRCgpKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5s
aW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVkX2Zp
bGwoX19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5l
IF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
eCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0Zv
cndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf
X2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAg
ICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19j
dXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShf
X2ZpcnN0LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVy
Cl9fdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwg
Y29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRz
PF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmls
bF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRl
cgp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBfVHAmIF9feCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3Qs
IF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CiMgMjMxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRl
cj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJkSXRlciBf
X21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwog
IHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBf
X21pZCk7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOyB0aHJv
dzsgfTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfSW5wdXRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX2Nv
cHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKewogIHVuaW5pdGlhbGl6ZWRf
ZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAgdHJ5IHsKICAgIHJldHVybiB1bmluaXRpYWxp
emVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVz
dHJveShfX3Jlc3VsdCwgX19taWQpOyB0aHJvdzsgfTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3Vu
aW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9G
b3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X194KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0
MSwgX19sYXN0MSwgX19maXJzdDIpOwogIHRyeSB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19t
aWQyLCBfX2xhc3QyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdDIs
IF9fbWlkMik7IHRocm93OyB9Owp9Cgp9CiMgMjYgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAzCiMgMzQgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgi
IDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xh
c3MgX1RwPgpjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9NX2l0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2
b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZv
aWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0
ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KICByYXdfc3RvcmFnZV9pdGVyYXRvciYgb3Bl
cmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICByYXdfc3RvcmFnZV9pdGVyYXRvciYgb3BlcmF0
b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KSB7CiAgICBjb25zdHJ1Y3QoJipfTV9pdGVyLCBfX2Vs
ZW1lbnQpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9y
d2FyZEl0ZXJhdG9yLCBfVHA+JiBvcGVyYXRvcisrKCkgewogICAgKytfTV9pdGVyOwogICAgcmV0
dXJuICp0aGlzOwogIH0KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBf
VHA+IG9wZXJhdG9yKysoaW50KSB7CiAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0
ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CiAgICArK19NX2l0ZXI7CiAgICByZXR1cm4gX190
bXA7CiAgfQp9OwoKCn0KIyAyNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX21lbW9yeS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKIHRlbXBsYXRlPGNsYXNzIF9U
cDE+IHN0cnVjdCBhdXRvX3B0cl9yZWYgewogICBfVHAxKiBfTV9wdHI7CiAgIGF1dG9fcHRyX3Jl
ZihfVHAxKiBfX3ApIDogX01fcHRyKF9fcCkge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IGNs
YXNzIGF1dG9fcHRyIHsKcHJpdmF0ZToKICBfVHAqIF9NX3B0cjsKCnB1YmxpYzoKICB0eXBlZGVm
IF9UcCBlbGVtZW50X3R5cGU7CgogIGV4cGxpY2l0IGF1dG9fcHRyKF9UcCogX19wID0gMCkgdGhy
b3coKSA6IF9NX3B0cihfX3ApIHt9CiAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6
IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYXV0b19w
dHIoYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgOiBfTV9wdHIoX19hLnJlbGVhc2Uo
KSkge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpIHsKICAg
IHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9UcDE+CiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0
aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0K
CgoKCgogIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQoKICBfVHAmIG9wZXJhdG9yKigp
IGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuICpfTV9wdHI7CiAgfQogIF9UcCogb3BlcmF0b3It
PigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuIF9NX3B0cjsKICB9CiAgX1RwKiBnZXQoKSBj
b25zdCB0aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9UcCogcmVsZWFzZSgpIHRo
cm93KCkgewogICAgX1RwKiBfX3RtcCA9IF9NX3B0cjsKICAgIF9NX3B0ciA9IDA7CiAgICByZXR1
cm4gX190bXA7CiAgfQogIHZvaWQgcmVzZXQoX1RwKiBfX3AgPSAwKSB0aHJvdygpIHsKICAgIGlm
IChfX3AgIT0gX01fcHRyKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9f
cDsKICAgIH0KICB9CgoKCgoKcHVibGljOgogIGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxfVHA+IF9f
cmVmKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIpIHt9CgogIGF1dG9fcHRyJiBv
cGVyYXRvcj0oYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkgewogICAgaWYgKF9fcmVm
Ll9NX3B0ciAhPSB0aGlzLT5nZXQoKSkgewogICAgICBkZWxldGUgX01fcHRyOwogICAgICBfTV9w
dHIgPSBfX3JlZi5fTV9wdHI7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQogICAg
eyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcD4odGhpcy0+cmVsZWFzZSgpKTsgfQogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93KCkKICAgIHsgcmV0
dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KfTsKCn0KIyA0NCAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAxIDMK
IyA0NSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9z
ZndkLmgiIDEgMwojIDQ2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL2Jhc2ljX3N0cmluZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDEgMwojIDMz
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9hdG9taWNpdHkuaCIgMwp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5saW5l
IF9BdG9taWNfd29yZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2VfYW5k
X2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0
ZXIgX0F0b21pY193b3JkIF9fcmVzdWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsg
eGFkZGwgJTAsJTIiCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoX19yZXN1bHQpCiAg
ICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQogICAgICAg
ICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRp
YyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAo
dm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3Zv
bGF0aWxlX18gKCJsb2NrOyBhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6IDog
ImlyIiAoX192YWwpLCAibSIgKCpfX21lbSkgOiAibWVtb3J5Iik7Cn0KCnN0YXRpYyBpbmxpbmUg
Y2hhcgpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fY29tcGFyZV9hbmRfc3dhcCAodm9s
YXRpbGUgbG9uZyogX19wLCBsb25nIF9fb2xkdmFsLCBsb25nIF9fbmV3dmFsKQp7CiAgY2hhciBf
X3JldDsKICBsb25nIF9fcmVhZHZhbDsKCiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBj
bXB4Y2hnbCAlMywgJTE7IHNldGUgJTAiCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1xIiAo
X19yZXQpLCAiPW0iICgqX19wKSwgIj1hIiAoX19yZWFkdmFsKQogICAgICAgICAgICAgICAgICAg
ICAgICA6ICJyIiAoX19uZXd2YWwpLCAibSIgKCpfX3ApLCAiYSIgKF9fb2xkdmFsKSk7CiAgcmV0
dXJuIF9fcmV0Owp9CiMgNDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L2Jhc2ljX3N0cmluZy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDgzICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xh
c3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMg
dHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlIHZh
bHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRl
ZiBfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAg
ICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4g
Y29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy
YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh
dG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiMgMTE4ICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAg
ICBzdHJ1Y3QgX1JlcAogICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpy
ZWJpbmQ8Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTM2ICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRp
YyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFy
VCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXpl
X3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7Cgog
ICAgICAgIGJvb2wKICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJu
IF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQo
KSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZv
aWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsg
fQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3Jl
ZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4gKHRoaXMgKyAx
KTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFy
VCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYg
X19hbGxvYzIpCiAgICAgICAgeyByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9
PSBfX2FsbG9jMikgPwogICAgICAgICAgICBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9j
MSk7IH0KCgogICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNv
bnN0IF9BbGxvYyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxs
b2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9y
ZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAg
IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3co
KTsKCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAg
ewogICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJl
dHVybiBfTV9yZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01f
Y2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiMgMjA4ICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAg
IGlubGluZSBzdGF0aWMgYm9vbAogICAgICAgIF9TX2V4Y2Vzc19zbG9wKHNpemVfdCwgc2l6ZV90
KTsKCiAgICAgIH07CgoKICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7
CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQog
ICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3AoX19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9N
X3A7CiAgICAgIH07CgogICAgcHVibGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBl
IG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAg
bXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5
cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsg
c2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQq
CiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9
CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJu
IChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEo
KSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0K
CiAgICAgIHZvaWQKICAgICAgX01fbGVhaygpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgp
LT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAgIF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAg
ICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsK
ICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9v
Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVn
aW4oKSArIF9fcG9zOwogICAgICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wg
X190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5
cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwog
ICAgICAgIHJldHVybiAoX01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoK
CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAg
ICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9y
IF9fazIpCiAgICAgICAgewogICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCAr
K19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAg
ICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwg
aXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwg
X19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1Nf
Y29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0
b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFz
ZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9f
cCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHko
X19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2Nv
cHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBf
X2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9
CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQo
KTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAg
IHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFz
aWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmco
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6
ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0Fs
bG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9f
cywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXpl
X3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAg
ICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhf
SW5wdXRJdGVyYXRvciBfX2JlZ2luLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3Ry
aW5nKCkKICAgICAgeyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkp
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+
YXNzaWduKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFy
VCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IK
ICAgICAgYmVnaW4oKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBp
dGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBi
ZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0K
CiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwog
ICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAg
fQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4g
Y29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJz
ZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9y
KHRoaXMtPmVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVn
aW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVu
ZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1
cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlw
ZQogICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9s
ZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IF9SZXA6Ol9TX21heF9zaXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUg
X19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24p
IHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
Y2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAg
IHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lk
CiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAg
Ym9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoK
ICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3Bvcykg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNl
CiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVh
aygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25z
dF9yZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAg
IGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
ImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAg
IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAg
ICAgaWYgKF9fbiA+PSBzaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFz
aWNfc3RyaW5nOjphdCIpOwogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0
YSgpW19fbl07CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0o
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19z
KSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUo
MSksIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCog
X19zKQogICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01f
aWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAg
cHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9N
X2llbmQoKSwgMSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29u
c3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2ln
bihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24pCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyLl9NX2NoZWNrKF9f
cG9zKSwgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAg
ICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCBfX3MgKyBfX24pOyB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhp
cy0+YXNzaWduKF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAg
ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9f
Yyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCks
IF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQo
aXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJl
cGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRv
ciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9f
cCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2Vy
dChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7CiAg
ICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hlY2soX19wb3MxKTsKICAgICAgICB0aGlzLT5yZXBs
YWNlKF9fcCwgX19wLCBfX3N0ci5fTV9pYmVnaW4oKSwgX19zdHIuX01faWVuZCgpKTsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0
KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAg
ICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaXRlcmF0
b3IgX19wID0gX01fY2hlY2soX19wb3MxKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcCwgX19w
LCBfX3N0ci5fTV9jaGVjayhfX3BvczIpLAogICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01f
Zm9sZChfX3BvczIsIF9fbikpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2No
ZWNrKF9fcG9zKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3MsIF9fcyArIF9f
bik7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJl
dHVybiB0aGlzLT5pbnNlcnQoX19wb3MsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2No
ZWNrKF9fcG9zKSwgX19uLCBfX2MpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAg
ICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0NoYXJUIF9fYyA9IF9DaGFy
VCgpKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7
CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEpLCBfX2Mp
OwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIHRoaXMt
Pl9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
ZXJhc2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCiAgICAgIHsK
ICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19w
b3MsIF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZGF0YSgpLCBfTV9kYXRh
KCkpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0
aW9uKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fcG9zaXRpb24gLSBfTV9pYmVn
aW4oKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyAxLCBf
TV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsK
ICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9y
CiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewog
ICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX2ZpcnN0IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhp
cy0+cmVwbGFjZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAg
ICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsg
X19pOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7
CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9f
cG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5iZWdpbigpLCBf
X3N0ci5lbmQoKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShz
aXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAg
ICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2Zv
bGQoX19wb3MsIF9fbjEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsg
X19uMik7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgewogICAg
ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3Bvcywg
X19uMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyB0cmFpdHNfdHlw
ZTo6bGVuZ3RoKF9fcykpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxh
Y2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFy
VCBfX2MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3Bv
cyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOwogICAgICB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29u
c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kx
LCBfX2kyLCBfX3N0ci5iZWdpbigpLCBfX3N0ci5lbmQoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAg
eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MsIF9fcyArIF9fbik7IH0KCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBf
X2kyLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kx
LCBfX2kyLCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zICsgdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0
ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAg
eyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdv
cnkoKSk7IH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kx
LCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRl
PGNsYXNzIF9Gd2RJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVw
bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRndkSXRlcmF0b3IgX19rMSwKICAg
ICAgICAgICAgICAgICAgIF9Gd2RJdGVyYXRvciBfX2syLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7
CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoK
ICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNv
bnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQog
ICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0
ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVj
dChfX2JlZywgX19lbmQsIF9fYSwgX1RhZygpKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxj
bGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0
X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHJl
dHVybiBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KF9fZW5kKSwgX19h
KTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRp
YyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19l
bmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX2ludGVnZXI8X0luSXRlcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgICBy
ZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOwog
ICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBf
Q2hhclQqCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5k
LCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZyk7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVyPgogICAgICAgIHN0YXRpYyBf
Q2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJdGVyIF9fZW5kLCBfRndkSXRlciBfX2Jl
ZywgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0
b3JfdGFnKTsKCiAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5
cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICBwdWJsaWM6Cgog
ICAgICBzaXplX3R5cGUKICAgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6
ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIHN3YXAoYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zKTsKCgogICAgICBjb25zdCBfQ2hhclQq
CiAgICAgIGNfc3RyKCkgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3R5cGUgX19uID0gdGhp
cy0+c2l6ZSgpOwogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9S
ZXA6Ol9TX3Rlcm1pbmFsKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpOwogICAgICB9CgogICAg
ICBjb25zdCBfQ2hhclQqCiAgICAgIGRhdGEoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhKCk7IH0K
CiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBfTV9kYXRhcGx1czsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19w
b3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRhdGEoKSwgX19w
b3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5maW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNp
emVfdHlwZQogICAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0
OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5k
KF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQog
ICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZp
bmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0
OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZmluZF9maXJzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBm
aW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fcywgX19wb3MsIHRyYWl0c190
eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29m
KF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rf
b2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3Ms
IF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7Cgog
ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rf
b2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfbGFzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9z
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf
Zmlyc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6
ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25z
dDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu
ZF9maXJzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVf
dHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9u
b3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3N0ci5kYXRhKCks
IF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0
X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwogICAgICBzaXplX3R5cGUKICAgICAgZmlu
ZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3MsIF9fcG9zLCB0
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9s
YXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAg
ICAgIGJhc2ljX3N0cmluZwogICAgICBzdWJzdHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90
eXBlIF9fbiA9IG5wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5z
aXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpzdWJz
dHIiKTsKICAgICAgICByZXR1cm4gYmFzaWNfc3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsKICAg
ICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg
Y29uc3QKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6ZSk7CgogICAgICAgIGludCBfX3IgPSB0cmFpdHNf
dHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICAgIGlm
ICghX19yKQogICAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsKICAgICAgICByZXR1cm4g
X19yOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0OwoKICAgICAgaW50
CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90
eXBlIF9fbjIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf
X3MpIGNvbnN0OwoKCgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgogICAgICBpbnQKICAgICAg
Y29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9f
cywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogIH07CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2lj
X3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKSwg
X0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMp
OwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAg
ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jo
cyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9w
ZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf
QWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMp
CiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIo
X19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3Ry
aW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSks
IF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9
PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJU
KiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAw
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0
IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJu
IF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9f
cmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo
cywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz
LmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg
IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jocykg
PiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhz
LAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPCAwOyB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz
LmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNv
bXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8
PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJldHVybiBfX3Jocy5jb21wYXJl
KF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2
b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz
LAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK
ICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAogICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRs
aW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGlt
KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBn
ZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwp9CiMgNDcgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCgoK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGht
LmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
YWxnb3JpdGhtLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIg
MSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdv
cml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3RlbXBidWYuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBj
bGFzcyBfVHA+CnZvaWQKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgs
IF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkg
LyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19w
YXJlbnQpIDwgX192YWx1ZSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2Zp
cnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50
ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg
PSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz
cyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19wdXNoX2hlYXBfYXV4KF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNlKiwgX1RwKikKewogIF9fcHVzaF9oZWFwKF9fZmlyc3Qs
IF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlKDApLAogICAgICAg
ICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fcHVzaF9oZWFwX2F1eChfX2Zp
cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwg
X192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZT4Kdm9pZApfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rp
c3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1Rw
IF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hv
bGVJbmRleCAtIDEpIC8gMjsKICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9f
Y29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAqKF9fZmlyc3QgKyBf
X2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICBfX2hvbGVJbmRleCA9IF9f
cGFyZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgfQogICooX19m
aXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9UcCopCnsK
ICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSks
IF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJl
PgppbmxpbmUgdm9pZApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3B1c2hfaGVhcF9hdXgoX19m
aXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZvaWQKX19hZGp1
c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu
ZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCnsKICBfRGlz
dGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxk
ID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7
CiAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNv
bmRDaGlsZCAtIDEpKSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0ICsgX19o
b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJbmRleCA9
IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsg
MSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmlyc3QgKyBf
X2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgIF9faG9s
ZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9f
aG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lk
Cl9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0
LCBfVHAgX192YWx1ZSwgX0Rpc3RhbmNlKikKewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIF9f
YWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19m
aXJzdCksIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcG9wX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICBfVHAqKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLAog
ICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZCBw
b3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9f
bGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZT4Kdm9pZApfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu
LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgg
PSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRl
eCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgaWYgKF9fY29tcCgq
KF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAx
KSkpKQogICAgICBfX3NlY29uZENoaWxkLS07CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg
PSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRD
aGlsZDsKICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICB9CiAg
aWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4
KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgX19ob2xlSW5kZXggPSBf
X3NlY29uZENoaWxkIC0gMTsKICB9CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgs
IF9fdG9wSW5kZXgsIF9fdmFsdWUsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkCl9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wLAog
ICAgICAgICAgIF9EaXN0YW5jZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBfX2FkanVz
dF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3Qp
LAogICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZv
aWQKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29t
cCkKewogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1RwKCoo
X19sYXN0IC0gMSkpLCBfX2NvbXAsCiAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29t
cGFyZT4KaW5saW5lIHZvaWQKcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fcG9wX2hlYXBfYXV4KF9f
Zmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
ZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewog
IGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAg
d2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVu
LCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0
dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcmF0b3I+CmlubGluZSB2b2lkCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9f
bGFzdCwKICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlw
ZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs
YXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQK
X19tYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX1RwKiwgX0Rpc3Rh
bmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9EaXN0YW5jZSBf
X2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVuIC0g
MikvMjsKCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJl
bnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwKICAgICAgICAgICAgICAgICAg
X19jb21wKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICBfX3BhcmVudC0tOwog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBh
cmU+CmlubGluZSB2b2lkCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwK
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fbWFrZV9oZWFwKF9fZmly
c3QsIF9fbGFzdCwgX19jb21wLAogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwg
X19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyYXRvcj4Kdm9pZCBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEp
CiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgp2b2lkCnNvcnRfaGVhcChfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3Qs
IF9fbGFzdC0tLCBfX2NvbXApOwp9Cgp9CiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgX19tZWRpYW4oY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgaWYgKF9fYSA8IF9f
YikKICAgIGlmIChfX2IgPCBfX2MpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2Eg
PCBfX2MpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVybiBfX2E7CiAgZWxz
ZSBpZiAoX19hIDwgX19jKQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2IgPCBfX2MpCiAg
ICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJgpfX21lZGlhbihjb25zdCBfVHAm
IF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgaWYgKF9fY29tcChfX2EsIF9fYikpCiAgICBpZiAo
X19jb21wKF9fYiwgX19jKSkKICAgICAgcmV0dXJuIF9fYjsKICAgIGVsc2UgaWYgKF9fY29tcChf
X2EsIF9fYykpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVybiBfX2E7CiAg
ZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19j
b21wKF9fYiwgX19jKSkKICAgIHJldHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJuIF9fYjsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+Cl9GdW5jdGlvbiBm
b3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24g
X19mKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkK
ICAgIF9fZigqX19maXJzdCk7CiAgcmV0dXJuIF9fZjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiAgICArK19f
Zmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRp
Y2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
KQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAg
KytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9fbGFzdCAtIF9f
Zmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50
KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2Zp
cnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19f
Zmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsr
X19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg
KytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBjYXNlIDM6CiAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog
IGNhc2UgMjoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19m
aXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVybiBfX2xh
c3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9QcmVk
aWNhdGU+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0IC0gX19maXJz
dCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsK
ICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK
CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7
CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0
OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJz
dDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgogICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMjoK
ICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK
ICBjYXNlIDE6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIg
ZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJl
dHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m
aXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4K
aW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBf
X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19m
aXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA9PSAq
X19uZXh0KQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQog
IHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9C
aW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3YXJkSXRlciBf
X25leHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKF9f
YmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICByZXR1cm4gX19maXJzdDsKICAg
IF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCgoKCgoKCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lkIGNvdW50KF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSwK
ICAgICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVl
KQogICAgICArK19fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVk
aWNhdGUsIGNsYXNzIF9TaXplPgp2b2lkIGNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgIF9TaXplJiBf
X24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICArK19fbjsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9f
biA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpf
X2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgp0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudF9pZihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBp
ZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsKfQoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJk
SXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJ
dGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAg
aWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVy
biBfX2ZpcnN0MTsKCgogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7
CiAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0
MSwgKl9fZmlyc3QyKTsKCgoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9f
Zmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7Cgog
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJz
dDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg
ICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmly
c3QxOwogICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3Qx
OwoKICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsKICAgICAgaWYgKCsrX19wID09IF9f
bGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0g
X19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwog
IH0KICByZXR1cm4gX19maXJzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj
bGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyMSBzZWFy
Y2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgaWYgKF9fZmlyc3QxID09IF9fbGFz
dDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2ZpcnN0MTsKCgogIF9Gb3J3
YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAgaWYgKF9fdG1wID09IF9fbGFz
dDIpIHsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19m
aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICByZXR1cm4gX19maXJzdDE7
CiAgfQoKCgogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICBfX3AxID0gX19maXJzdDI7ICsr
X19wMTsKCiAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgd2hpbGUgKF9f
Zmlyc3QxICE9IF9fbGFzdDEpIHsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAg
ICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgYnJlYWs7
CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwog
ICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgIF9f
cCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlmICgrK19fY3VycmVudCA9
PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3Vy
cmVudCwgKl9fcCkpIHsKICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJu
IF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1
cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIsIGNsYXNz
IF9UcD4KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29u
c3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAoX19jb3Vu
dCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0ID0gZmluZChf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog
ICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9
IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24g
IT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAg
ICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBl
bHNlCiAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgIH0KICAg
IHJldHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfSW50ZWdlciwgY2xhc3MgX1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyIHNl
YXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAg
ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBl
bHNlIHsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBpZiAoX19iaW5hcnlf
cHJlZCgqX19maXJzdCwgX192YWwpKQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3Q7CiAg
ICB9CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19uID0g
X19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19f
aTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJl
ZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICArK19faTsKICAgICAgICAtLV9fbjsKICAgICAgfQog
ICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2Ugewog
ICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJl
ZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2k7CiAgICAg
ICAgfQogICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfX2xh
c3Q7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXIyPgpfRm9yd2FyZEl0ZXIyIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIyIF9fZmlyc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr
X19maXJzdDEsICsrX19maXJzdDIpCiAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsK
ICByZXR1cm4gX19maXJzdDI7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9PdXRwdXRJdGVyLCBjbGFzcyBfVW5hcnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9y
bShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCgoKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg
KytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3QpOwogIHJldHVy
biBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5T3BlcmF0aW9u
PgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9u
IF9fYmluYXJ5X29wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgZm9yICggOyBfX2Zp
cnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAg
Kl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwogIHJldHVybiBf
X3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZv
aWQgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVl
KQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFjZV9pZihfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1
ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
cyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25z
dCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVy
biBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29w
eV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsr
X19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUg
OiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4Kdm9pZCBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpf
X2ZpcnN0ID0gX19nZW4oKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
U2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4KX091dHB1dEl0ZXIgZ2VuZXJhdGVfbihfT3V0cHV0SXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCnsKCgoKCgoKICBmb3IgKCA7
IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7CiAgcmV0
dXJuIF9fZmlyc3Q7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoISgqX19m
aXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytf
X3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX091dHB1dEl0ZXIg
cmVtb3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9QcmVkaWNhdGUg
X19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyIHJl
bW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKCiAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVl
KTsKICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJzdCA9PSBfX2xh
c3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytf
X2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciByZW1vdmVfaWYoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
X1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fZmly
c3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICBfRm9yd2FyZEl0ZXIgX19p
ID0gX19maXJzdDsKICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFzdCwgX19maXJz
dCwgX19wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1
dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CgogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9f
cmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICgh
KF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAg
KisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0
SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQp7Cgog
IHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fdmFsdWVf
dHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9y
d2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKCiAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoISgqX19yZXN1bHQgPT0g
Kl9fZmlyc3QpKQogICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiArK19fcmVz
dWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cmlu
bGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh
c3MgX0JpbmFyeVByZWRpY2F0ZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191
bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwgX1RwKikKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsKICAqX19yZXN1
bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCFfX2Jp
bmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7
CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4gKytfX3Jlc3VsdDsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
QmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQp7CgogIHJldHVybiBfX3VuaXF1ZV9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0Zv
cndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQog
ICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9
ICpfX2ZpcnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBf
T3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5
X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBf
X3Jlc3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LCBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdv
cnkoX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJ
dGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19m
aXJzdCwgX19sYXN0KTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2Zp
cnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5
X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2ZpcnN0ID0gYWRqYWNl
bnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogIHJldHVybiB1bmlxdWVf
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CnZvaWQgX19yZXZlcnNlKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKQogICAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgIHJldHVybjsKICAg
IGVsc2UKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAgICBpdGVy
X3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXI+CmlubGluZSB2b2lkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m
aXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfT3V0
cHV0SXRlcj4KX091dHB1dEl0ZXIgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KSB7CiAgICAtLV9fbGFzdDsKICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICArK19fcmVzdWx0
OwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9FdWNsaWRlYW5S
aW5nRWxlbWVudD4KX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxl
bWVudCBfX20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRXVjbGlkZWFuUmluZ0VsZW1l
bnQgX19uKQp7CiAgd2hpbGUgKF9fbiAhPSAwKSB7CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQg
X190ID0gX19tICUgX19uOwogICAgX19tID0gX19uOwogICAgX19uID0gX190OwogIH0KICByZXR1
cm4gX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+
Cl9Gb3J3YXJkSXRlciBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLAogICAg
ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdCA9
PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCA9PSBfX21pZGRsZSkK
ICAgIHJldHVybiBfX2ZpcnN0OwoKICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsK
ICBkbyB7CiAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0
ID09IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogIH0gd2hpbGUgKF9fZmly
c3QyICE9IF9fbGFzdCk7CgogIF9Gb3J3YXJkSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0OwoK
ICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAg
ICBzd2FwICgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21p
ZGRsZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgIGVsc2UgaWYgKF9fZmlyc3QyID09
IF9fbGFzdCkKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKICB9CgogIHJldHVybiBfX25ld19t
aWRkbGU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlz
dGFuY2U+Cl9CaWRpcmVjdGlvbmFsSXRlciBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgIHJldHVy
biBfX2xhc3Q7CiAgaWYgKF9fbGFzdCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoK
ICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
KCkpOwogIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZygpKTsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19s
YXN0KQogICAgc3dhcCAoKl9fZmlyc3QrKywgKi0tX19sYXN0KTsKCiAgaWYgKF9fZmlyc3QgPT0g
X19taWRkbGUpIHsKICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBfX2xhc3Q7CiAgfQogIGVsc2UgewogICAgX19y
ZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsK
ICAgIHJldHVybiBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19yb3Rh
dGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlICosIF9UcCAqKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFu
Y2UgX19uID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBf
X2ZpcnN0OwogIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19yZXN1bHQgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fbWlkZGxlKTsKCiAgaWYgKF9fayA9PSAw
KQogICAgcmV0dXJuIF9fbGFzdDsKCiAgZWxzZSBpZiAoX19rID09IF9fbCkgewogICAgc3dhcF9y
YW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKICAgIHJldHVybiBfX3Jlc3VsdDsK
ICB9CgogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogIGZvciAoX0Rpc3RhbmNl
IF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0Owog
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICBpZiAoX19rIDwgX19sKSB7
CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9faisrKSB7CiAg
ICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICpfX3AgPSAqKF9fcCAt
IF9fbCk7CiAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgIH0KCiAgICAgICAgKl9fcCA9ICoo
X19wICsgX19rKTsKICAgICAgICBfX3AgKz0gX19rOwogICAgICB9CiAgICB9CgogICAgZWxzZSB7
CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKysp
IHsKICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAqX19wID0gKihf
X3AgKyBfX2spOwogICAgICAgICAgX19wICs9IF9fazsKICAgICAgICB9CgogICAgICAgICpfX3Ag
PSAqIChfX3AgLSBfX2wpOwogICAgICAgIF9fcCAtPSBfX2w7CiAgICAgIH0KICAgIH0KCiAgICAq
X19wID0gX190bXA7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIgcm90YXRlKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogIHJldHVybiBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwg
X19sYXN0LCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Rpc3RhbmNlPgppbmxp
bmUgX0Rpc3RhbmNlIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKSB7CgogIHJldHVybiBs
cmFuZDQ4KCkgJSBfX247CgoKCn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
PgppbmxpbmUgdm9pZCByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf
X2xhc3Q7ICsrX19pKQogICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251bWJl
cigoX19pIC0gX19maXJzdCkgKyAxKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4Kdm9pZCByYW5kb21fc2h1ZmZsZShf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK
ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0
OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmly
c3QpICsgMSkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwg
X19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFuZG9tX251bWJl
cihfX3JlbWFpbmluZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsr
X19vdXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAgICArK19fZmly
c3Q7CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9SYW5k
b21OdW1iZXJHZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0YW5jZShfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19y
ZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFuZChfX3JlbWFpbmlu
ZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19vdXQ7CiAgICAg
IC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7CiAgfQogIHJl
dHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3Nh
bXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNl
IF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19m
aXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0
YW5jZSBfX00gPSBfX3JhbmRvbV9udW1iZXIoX190KTsKICAgIGlmIChfX00gPCBfX24pCiAgICAg
IF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX291
dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvciwgY2xhc3MgX0Rp
c3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fbSA9IDA7
CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9f
bSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19maXJzdDsKCiAg
d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0YW5jZSBfX00g
PSBfX3JhbmQoX190KTsKICAgIGlmIChfX00gPCBfX24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19m
aXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1Jh
bmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2ZpcnN0LCBfX291dF9sYXN0IC0gX19vdXRf
Zmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KaW5saW5lIF9S
YW5kb21BY2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVy
R2VuZXJhdG9yJiBfX3JhbmQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fcmFuZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9fcGFydGl0aW9uKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAg
IGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgX0ZvcndhcmRJdGVy
IF9fbmV4dCA9IF9fZmlyc3Q7CgogIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICBpZiAo
X19wcmVkKCpfX25leHQpKSB7CiAgICAgIHN3YXAoKl9fZmlyc3QsICpfX25leHQpOwogICAgICAr
K19fZmlyc3Q7CiAgICB9CgogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0ZXIgX19w
YXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewogIHdoaWxlICh0cnVlKSB7CiAgICB3
aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBf
X2ZpcnN0OwogICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICsrX19maXJz
dDsKICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAodHJ1
ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgIC0tX19sYXN0OwogICAgICBl
bHNlCiAgICAgICAgYnJlYWs7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsr
X19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVk
aWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIgcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwg
X19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9EaXN0YW5jZT4KX0Zvcndh
cmRJdGVyIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkLCBfRGlzdGFuY2UgX19sZW4pCnsKICBpZiAoX19sZW4gPT0gMSkKICAgIHJldHVybiBfX3By
ZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUg
PSBfX2ZpcnN0OwogIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgcmV0dXJuIHJvdGF0
ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKSwKICAg
ICAgICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9w
YXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9QcmVkaWNhdGUsCiAgICAg
ICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3N0YWJsZV9wYXJ0aXRpb25fYWRh
cHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZl
cl9zaXplKQp7CiAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7
CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAgICBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkgewogICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICAr
K19fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICAqX19yZXN1bHQyID0gKl9f
Zmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDI7CiAgICAgIH0KICAgIGNvcHkoX19idWZmZXIsIF9f
cmVzdWx0MiwgX19yZXN1bHQxKTsKICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgfQogIGVsc2Ugewog
ICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUs
IF9fbGVuIC8gMik7CiAgICByZXR1cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3Np
emUpLAogICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9f
c3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX21p
ZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBf
X2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
IF9QcmVkaWNhdGUgX19wcmVkLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZm
ZXI8X0ZvcndhcmRJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVm
LnNpemUoKSA+IDApCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmly
c3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgZWxzZQog
ICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19w
cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2J1
Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIgc3RhYmxlX3BhcnRpdGlvbihfRm9y
d2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZQogICAgcmV0dXJuIF9f
c3RhYmxlX3BhcnRpdGlvbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0
ZXIgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCkK
ewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQogICAgICAr
K19fZmlyc3Q7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKICAg
ICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKHRydWUp
IHsKICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3QsIF9fcGl2b3QpKQogICAgICArK19fZmlyc3Q7
CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpCiAgICAg
IC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9
Cgpjb25zdCBpbnQgX19zdGxfdGhyZXNob2xkID0gMTY7CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpCnsKICBfUmFuZG9tQWNjZXNzSXRl
ciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkg
ewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAtLV9fbmV4
dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfbGluZWFy
X2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbmV4dCA9IF9fbGFzdDsKICAtLV9fbmV4dDsKICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19u
ZXh0KSkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAt
LV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBfVHAgX192YWwgPSAqX19sYXN0OwogIGlmIChf
X3ZhbCA8ICpfX2ZpcnN0KSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19s
YXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3VuZ3VhcmRl
ZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fbGlu
ZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXAp
CnsKICBfVHAgX192YWwgPSAqX19sYXN0OwogIGlmIChfX2NvbXAoX192YWwsICpfX2ZpcnN0KSkg
ewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9f
Zmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChf
X2xhc3QsIF9fdmFsLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXI+CnZvaWQgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK
ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0
OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZShf
X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Nv
bXBhcmU+CnZvaWQgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBf
X2NvbXApCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21B
Y2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9f
bGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21w
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQg
X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX1RwKikKewogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19p
ICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1Rw
KCpfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9p
ZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkg
ewogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29y
dF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBmb3IgKF9SYW5kb21B
Y2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191bmd1
YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSwgX19jb21wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX191
bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CnsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Zh
bHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2ZpbmFsX2lu
c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19sYXN0IC0gX19m
aXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkKTsKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xhc3QgLSBf
X2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fY29tcCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNl
cnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAg
fQogIGVsc2UKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSBfU2l6ZSBfX2xnKF9TaXplIF9fbikKewog
IF9TaXplIF9fazsKICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOwog
IHJldHVybiBfX2s7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
IF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQp7CiAgd2hp
bGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2RlcHRo
X2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0
KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh
c3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fbGFzdCAtIDEpKSkpOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCAo
X1RwKikgMCwgX19kZXB0aF9saW1pdCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZSwgY2xh
c3MgX0NvbXBhcmU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAq
LAogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19j
b21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAg
IGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9f
bGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhf
bGltaXQ7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh
cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo
X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgX19j
b21wKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVw
dGhfbGltaXQsIF9fY29tcCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBf
X2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX192
YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICBfX2xnKF9fbGFzdCAtIF9f
Zmlyc3QpICogMik7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7
CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJl
PgppbmxpbmUgdm9pZCBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ICE9IF9f
bGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgX19s
ZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
ICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICB9Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5wbGFjZV9zdGFi
bGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8
IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICByZXR1cm47
CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBf
X2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsK
ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgX19tZXJnZV93aXRo
b3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0
IC0gX19taWRkbGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9Db21wYXJlPgp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAg
IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgcmV0dXJuOwog
IH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19m
aXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19j
b21wKTsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsK
ICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRf
bG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQp7CiAgX0Rpc3RhbmNl
IF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0
ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCAr
IF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUs
IF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAg
ICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgfQoKICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFu
Y2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICBtZXJnZShfX2ZpcnN0LCBfX2Zp
cnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAg
IF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMSwgY2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29t
cGFyZT4Kdm9pZCBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9f
c3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9E
aXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0g
X19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9f
Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3Rl
cF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0
ZXA7CiAgfQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwg
X19zdGVwX3NpemUpOwoKICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAg
ICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQsCiAg
ICAgICAgX19jb21wKTsKfQoKY29uc3QgaW50IF9fc3RsX2NodW5rX3NpemUgPSA3OwoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19jaHVu
a19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfRGlzdGFuY2UgX19jaHVu
a19zaXplKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAg
ICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAg
X19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlz
dGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf
X2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0
ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0
ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAg
fQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFu
Y2U+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0
YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9Qb2ludGVy
IF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFuY2UgX19zdGVwX3Np
emUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0LCBfX3N0ZXBfc2l6ZSk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAg
ICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6
ZSk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIs
IF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9
IDI7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2lu
dGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21l
cmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBf
X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX0NvbXBh
cmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9p
bnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3Rl
cF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8
IF9fbGVuKSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVy
LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdl
X3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUs
IF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9f
c3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6
ZSkKewogIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xlbiA+
IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19t
aWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp
dmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogIH0KICBlbHNl
IHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm
ZXIsIChfRGlzdGFuY2UqKTApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxl
LCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICB9CiAgX19tZXJnZV9hZGFwdGl2
ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0
KSwKICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX0NvbXBh
cmU+CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf
UG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf
X2J1ZmZlcl9zaXplLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19sZW4gPSAoX19s
YXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9f
Zmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX3N0YWJs
ZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fc3RhYmxlX3NvcnRf
YWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX19tZXJnZV9z
b3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5jZSop
MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX21lcmdlX3Nv
cnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBfX21lcmdlX2Fk
YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9f
Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwg
X19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNz
SXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkK
ICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIGVsc2UKICAgIF9f
c3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSwgY2xh
c3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0
ZXIsIF9UcD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAg
ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogIGVsc2UK
ICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3N0YWJsZV9zb3J0
X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9f
Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGlu
ZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX3N0YWJsZV9z
b3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBl
KF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwK
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIG1ha2VfaGVhcChfX2ZpcnN0
LCBfX21pZGRsZSk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19p
IDwgX19sYXN0OyArK19faSkKICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgIF9fcG9wX2hl
YXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kpLAogICAgICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBwYXJ0aWFs
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9f
dmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29t
cCkKewogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBmb3IgKF9SYW5k
b21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYg
KF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRk
bGUsIF9faSwgX1RwKCpfX2kpLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
eXBlKF9fZmlyc3QpKTsKICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGlu
ZSB2b2lkIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19wYXJ0aWFsX3Nv
cnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Nv
bXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0
ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlz
dGFuY2UqLCBfVHAqKQp7CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJl
dHVybiBfX3Jlc3VsdF9sYXN0OwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFz
dCA9IF9fcmVzdWx0X2ZpcnN0OwogIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0
X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0g
Kl9fZmlyc3Q7CiAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICsrX19maXJzdDsKICB9CiAg
bWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogIHdoaWxlIChf
X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQog
ICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksCiAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0
KSwKICAgICAgICAgICAgICAgICAgICBfVHAoKl9fZmlyc3QpKTsKICAgICsrX19maXJzdDsKICB9
CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogIHJldHVy
biBfX3Jlc3VsdF9yZWFsX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBhcnRpYWxfc29y
dF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZSwKICAg
ICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3Bh
cnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKiwgX1RwKikKewogIGlmIChfX3Jlc3VsdF9maXJz
dCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNz
SXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShfX2ZpcnN0
ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAg
Kl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7
CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRf
cmVhbF9sYXN0LCBfX2NvbXApOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaWYg
KF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgX19hZGp1c3RfaGVhcChf
X3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAg
ICAgX1RwKCpfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgKytfX2Zp
cnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwg
X19jb21wKTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxp
bmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVz
dWx0X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fcGFydGlhbF9z
b3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICB3aGlsZSAoX19sYXN0
IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191
bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgIGlm
IChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZQogICAgICBf
X2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIG50aF9lbGVt
ZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAog
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19udGhfZWxlbWVudChfX2Zp
cnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQg
X19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw
KiwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihf
X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4o
Kl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2Zp
cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp
OwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICBlbHNl
CiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX250aF9lbGVtZW50KF9fZmlyc3QsIF9f
bnRoLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3
YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlz
dGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsK
CiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoKl9f
bWlkZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmly
c3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZQogICAg
ICBfX2xlbiA9IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciBsb3dlcl9ib3Vu
ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWws
CiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xh
c3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3Rh
bmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlz
dGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4g
MCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAg
IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192
YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBf
X2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBf
X2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIGxvd2Vy
X2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29t
cCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19s
b3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3Vw
cGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKQp7CiAg
X0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsK
ICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9f
bGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJz
dDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX192YWwgPCAqX19taWRk
bGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsK
ICAgIH0KICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAg
ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNl
PgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsK
ICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwog
IF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxm
ID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRk
bGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICBfX2xl
biA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsr
X19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQogIHJl
dHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX191cHBlcl9ib3VuZChfX2Zp
cnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0
YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+
Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
IGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5j
ZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3Rh
bmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAg
d2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxl
ID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoKl9fbWlk
ZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7
CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZSBpZiAoX192
YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9f
bGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgIGFkdmFu
Y2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRs
ZSwgX19maXJzdCwgX192YWwpOwogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3
YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0Zvcndh
cmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv
cndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICByZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAg
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5j
ZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVhbF9yYW5nZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19s
ZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBf
X2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogIHdoaWxl
IChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9f
Zmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcCgqX19t
aWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJz
dDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlIGlmIChf
X2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7
CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19j
b21wKTsKICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmlnaHQgPSB1cHBl
cl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJu
IHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICB9
CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBf
X2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZT4KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CmVxdWFs
X3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsLAogICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwg
X19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2Vf
dHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9U
cD4KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJz
dCwgX19sYXN0LCBfX3ZhbCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpf
X2kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBf
X2xhc3QsIF9fdmFsLCBfX2NvbXApOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICFfX2NvbXAo
X192YWwsICpfX2kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lu
cHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBtZXJnZShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7
CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0K
ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1
dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21w
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKF9fY29tcCgq
X19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAg
ICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBj
b3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5j
ZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBf
X2xlbjIpCnsKICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAg
aWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoKl9fbWlkZGxlIDwgKl9fZmlyc3Qp
CiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAgfQogIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICBf
RGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgX19sZW4x
MSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIF9f
c2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7
CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9CiAgZWxz
ZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBf
X2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs
ICpfX3NlY29uZF9jdXQpOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVu
MTEpOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAgICA9IHJvdGF0ZShf
X2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJnZV93aXRob3V0X2J1
ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25l
d19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQg
X19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fbGVu
MSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xlbjIg
PT0gMikgewogICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAgICAgaXRlcl9z
d2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsKICB9CiAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRf
Y3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0YW5jZSBfX2xl
bjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICBfX2xlbjExID0gX19sZW4xIC8g
MjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgX19zZWNvbmRfY3V0ID0g
bG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAg
ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQogIGVsc2Ugewog
ICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4y
Mik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19z
ZWNvbmRfY3V0LCBfX2NvbXApOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9f
bGVuMTEpOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAgICA9IHJvdGF0
ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJnZV93aXRob3V0
X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLCBfX2xl
bjIyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICBfX21lcmdlX3dpdGhvdXRf
YnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVu
MTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2NvbXApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug
X19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICBpZiAoX19sZW4xID4gX19sZW4yICYmIF9fbGVuMiA8
PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xh
c3QsIF9fYnVmZmVyKTsKICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCk7CiAgICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsKICB9
CiAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9
IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIGNvcHkoX19taWRkbGUsIF9f
bGFzdCwgX19maXJzdCk7CiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZm
ZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICByZXR1cm4gcm90YXRlKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwg
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcjM+Cl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpCnsK
ICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly
c3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICBy
ZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIC0tX19s
YXN0MTsKICAtLV9fbGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmICgqX19sYXN0MiA8ICpf
X2xhc3QxKSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgIGlmIChfX2ZpcnN0
MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19f
bGFzdDIsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgfQogICAgZWxzZSB7CiAgICAg
ICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQog
ICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0
KTsKICAgICAgLS1fX2xhc3QyOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIzLCBjbGFzcyBfQ29tcGFyZT4KX0JpZGlyZWN0aW9uYWxJdGVyMyBf
X21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
Zmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAg
cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICBpZiAo
X19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3aGlsZSAodHJ1
ZSkgewogICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAgICotLV9fcmVz
dWx0ID0gKl9fbGFzdDE7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJl
dHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAg
LS1fX2xhc3QxOwogICAgfQogICAgZWxzZSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7
CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QyOwogICAg
fQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3Rh
bmNlLCBjbGFzcyBfUG9pbnRlcj4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIs
CiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVm
ZmVyX3NpemUpCnsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJf
c2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUs
IF9fbGFzdCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXpl
KSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9f
YnVmZmVyKTsKICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVy
LCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u
ZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5j
ZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9
IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBf
X3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQp
OwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIH0K
ICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgYWR2YW5jZShfX3Nl
Y29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmly
c3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19m
aXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21p
ZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19z
ZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICBfX2xl
bjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmly
c3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRp
dmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwK
ICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3Mg
X0Rpc3RhbmNlLCBjbGFzcyBfUG9pbnRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lk
IF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Q
b2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVu
MSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJf
ZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogIH0KICBlbHNlIGlmIChf
X2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29w
eShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQg
PSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5jZSBfX2xl
bjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9IF9fbGVu
MSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBfX3NlY29u
ZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29t
cCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAg
fQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBhZHZhbmNlKF9f
c2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m
aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNlKF9f
Zmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19t
aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFw
dGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAg
ICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsK
ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwg
X19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwg
X19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv
aWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwg
X1RwKiwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3Rh
bmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRp
cmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5i
ZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAg
ICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9E
aXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9faW5wbGFjZV9tZXJnZV9hdXgo
X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNl
IF9fbGVuMSA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rp
c3RhbmNlIF9fbGVuMiA9IDA7CiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsK
CiAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmly
c3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91
dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9fY29t
cCk7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0
LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rp
c3RhbmNlKF9fYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIGlucGxhY2VfbWVy
Z2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBf
X2xhc3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBf
X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgaW5wbGFjZV9tZXJnZShfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlk
ZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19m
aXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgIF9f
Y29tcCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMj4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QyIDwg
Kl9fZmlyc3QxKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8ICpf
X2ZpcnN0MikKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MSwgKytf
X2ZpcnN0MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPgpib29sIGlu
Y2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBfQ29tcGFy
ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9f
Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlIGlmKF9f
Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAg
ICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
cyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgewog
ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19m
aXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwog
ICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2Zp
cnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVy
biBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj
bGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBz
ZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBf
X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoX19j
b21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7
CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq
X19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr
X19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICBy
ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
MiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQog
ICAgICArK19fZmlyc3QxOwogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAg
ICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0K
ICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+
Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy
KSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp
cnN0MSkpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVz
dWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNl
dF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3Qx
IDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2Zp
cnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpf
X2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwog
ICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBf
X3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRl
cjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJ
dGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAg
ICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICArK19f
Zmlyc3QyOwogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAg
ICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0
ZXI+Cl9PdXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAg
IGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNl
IHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29w
eShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3Mg
X091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIKc2V0X3N5
bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1
dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9f
Zmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7
CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq
X19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0
MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwog
ICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBj
b3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9
IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoKl9fcmVzdWx0
IDwgKl9fZmlyc3QpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpfRm9yd2Fy
ZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBf
Rm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19s
YXN0KQogICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQgPSBfX2Zp
cnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4K
X0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdo
aWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQog
ICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1pbl9lbGVt
ZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgog
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICBy
ZXR1cm4gX19yZXN1bHQ7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+
CmJvb2wgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkK
ICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7Oykgewog
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19p
IDwgKl9faWkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAg
d2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwg
X19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAg
IH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFz
dCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIG5leHRfcGVybXV0YXRpb24oX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZh
bHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChf
X2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsK
CiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19p
OwogICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAg
ICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFz
dCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAg
ICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBwcmV2X3Blcm11
dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19s
YXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kg
PSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNl
OwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKCpfX2lpIDwgKl9faSkgewogICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoISgqLS1fX2og
PCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZl
cnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9
PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJu
IGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwg
Y2xhc3MgX0NvbXBhcmU+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAg
ICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoX19jb21w
KCpfX2lpLCAqX19pKSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0Owog
ICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQogICAgICAgIHt9CiAgICAgIGl0ZXJf
c3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJu
IHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2Zp
cnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9JbnB1dEl0ZXIgZmluZF9m
aXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xh
c3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsgX19maXJzdDEg
IT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9f
Zmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmICgqX19maXJzdDEg
PT0gKl9faXRlcikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9C
aW5hcnlQcmVkaWNhdGU+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmly
c3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkK
ICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0
MjsgKytfX2l0ZXIpCiAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVyKSkKICAgICAg
ICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0KIyAzMzkwICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIF9fZmlu
ZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVy
MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcs
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICBy
ZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xh
c3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAg
ICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAg
ICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2Zp
cnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwK
ICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlcjEgX19maW5kX2Vu
ZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9y
d2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGlj
YXRlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFz
dDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdo
aWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFy
Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICBp
ZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
ICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2ZpcnN0
MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9CiAgfQp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjI+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBf
UmV2SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+
IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2SXRlcjIg
X19ybGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0
ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
ZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3Qx
KQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
cmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5j
ZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIs
CiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxCl9f
ZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVy
MT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0
ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0
ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9S
ZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVybiBf
X2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJl
c3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9f
bGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZp
bmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAg
ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19maW5kX2VuZChf
X2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
MSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+
CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9G
b3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv
cndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQo
X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0K
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4K
Ym9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikK
ewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7
IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fZmlyc3RbX19wYXJlbnRdIDwg
X19maXJzdFtfX2NoaWxkXSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKChfX2NoaWxkICYg
MSkgPT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0
V2Vha09yZGVyaW5nPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
U3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCwKICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikK
ewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7
IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFy
ZW50XSwgX19maXJzdFtfX2NoaWxkXSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19j
aGlsZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBib29sIGlzX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0
LCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KaW5saW5lIGJvb2wgaXNfaGVhcChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0LCBfX2NvbXAsIF9f
bGFzdCAtIF9fZmlyc3QpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KYm9v
bCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4g
dHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsg
X19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmICgq
X19uZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVy
aW5nPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7
CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4
dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAoX19jb21w
KCpfX25leHQsICpfX2ZpcnN0KSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0dXJuIHRy
dWU7Cn0KCn0KIyAzNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2FsZ29yaXRobS5oIiAyIDMKIyA1MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNv
bnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf
dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVw
OjpfU19tYXhfc2l6ZSA9ICgoKG5wb3MgLSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQpKSAt
IDEpIC8gNDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46Om5wb3M7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVw
KSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90
eXBlKV07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9D
aGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAg
IF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm
IF9fYSwKICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAg
ICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1
cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKICAgICAgICBfQ2hhclQgX19idWZbMTAw
XTsKICAgICAgICBzaXplX3R5cGUgX19pID0gMDsKICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19l
bmQgJiYgX19pIDwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgewog
ICAgICAgICAgICBfX2J1ZltfX2krK10gPSAqX19iZWc7CiAgICAgICAgICAgICsrX19iZWc7CiAg
ICAgICAgICB9CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19hKTsK
ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7
CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2k7CiAgICAgICAgdHJ5CiAgICAgICAgICB7CgoK
CiAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0No
YXJUKiBfX3AgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fbGVuZ3RoOwogICAgICAgICAg
ICAgICAgX0NoYXJUKiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNp
dHk7CiAgICAgICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVm
ZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFzdCkK
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9
ICpfX2JlZzsKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5fTV9yZWZkYXRh
KCk7CiAgICAgICAgICAgICAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19s
ZW4gKyAxLCBfX2EpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVy
LT5fTV9yZWZkYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9N
X3JlZmRhdGEoKSwgX19sZW4pOwogICAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7
CiAgICAgICAgICAgICAgICBfX3IgPSBfX2Fub3RoZXI7CiAgICAgICAgICAgICAgICBfX3ItPl9N
X2xlbmd0aCA9IF9fbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBjYXRj
aCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0
ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19k
bmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCiAg
ICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJl
dHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgICBfUmVwKiBfX3IgPSBf
UmVwOjpfU19jcmVhdGUoX19kbmV3LCBfX2EpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfU19j
b3B5X2NoYXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAgICAgY2F0
Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2Ru
ZXc7CgogICAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5h
bDsKICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBf
Q2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1Nf
Y29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQog
ICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgIHJldHVy
biBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1JlcCogX19yID0gX1JlcDo6
X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgaWYgKF9f
bikKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwgX19u
LCBfX2MpOwogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9f
ci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICBfX3It
Pl9NX2xlbmd0aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9T
X3Rlcm1pbmFsOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp
bmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBsdXMoX19zdHIuX01f
cmVwKCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3IoKSksCiAgICAgICAg
ICAgICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3Qg
X0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwg
X0NoYXJUKCksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIDogX01fZGF0YXBs
dXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9j
KCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5
cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBf
X2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3Bvcyks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24p
LCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVj
dChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0No
YXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1
Y3QoX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fYSksIF9fYSkKICAgIHsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
YmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19h
KQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAg
IHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJ
dGVyIF9fYmVnLCBfSW5wdXRJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01f
ZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyKQogICAgewogICAgICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAg
ICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0
b3IoKTsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihf
X2EsIF9fc3RyLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9z
ZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0
aHJvdyAoKQogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9N
X2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhf
X2EpLmRlYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6X01fbGVha19oYXJkKCkKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFy
ZWQoKSkKICAgICAgICBfTV9tdXRhdGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRf
bGVha2VkKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRf
c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBf
X29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0g
X01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19t
dWNoID0gX19vbGRfc2l6ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5f
TV9pc19zaGFyZWQoKSB8fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAg
ICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX1Jl
cCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX3BvcykKICAgICAgICAgICAgICAgIHRy
YWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAg
ICAgICAgICAgICBpZiAoX19ob3dfbXVjaCkKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpj
b3B5KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9z
ZShnZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3It
Pl9NX3JlZmRhdGEoKSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xl
bjEgIT0gX19sZW4yKQogICAgICAgIHsKCiAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9k
YXRhKCkgKyBfX3BvcyArIF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgIH0KICAg
ICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9yZXAoKS0+X01fbGVuZ3Ro
ID0gX19uZXdfc2l6ZTsKICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVy
bWluYWw7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQogICAgewogICAgICBpZiAo
X19yZXMgPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAg
ICAgICB7CiAgICAgICAgICBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAg
ICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNlcnZlIik7CiAgICAgICAg
ICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQq
IF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkpOwog
ICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190
bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlm
IChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFy
YWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBf
X3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2FsbG9j
YXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJU
KiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7CiAg
ICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwg
X19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5f
TV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAgICAg
ICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KIyAzNTYgIi91c3IvbG9jYWwvZ2NjLTMu
MC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3QgX19j
YXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAgICBp
ZiAoX19jYXBhY2l0eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAgc2l6ZV90IF9fc2l6ZSA9
IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKCgogICAg
ICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3Np
emUpOwogICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01f
Y2FwYWNpdHkgPSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAg
ICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
X0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6
CiAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAg
IHsKICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9NX2xlbmd0aCArIF9fcmVzLCBf
X2FsbG9jKTsKICAgICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0
YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3Ro
OwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZSBi
b29sCgoKCgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6
CiAgICBfU19leGNlc3Nfc2xvcChzaXplX3QgX19zLCBzaXplX3QgX19yKQoKICAgIHsKICAgICAg
cmV0dXJuIDIgKiAoX19zIDw9IDE2ID8gMTYgOiBfX3MpIDwgX19yOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShz
aXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUo
KSkKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsK
ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8
IF9fbikKICAgICAgICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNl
IGlmIChfX24gPCBfX3NpemUpCiAgICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p
MiwgX0lucHV0SXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5w
dXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBf
X2syKTsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MuX01faWJl
Z2luKCksIF9fcy5fTV9pZW5kKCkpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAg
X01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIgX19r
MSwKICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMiwgZm9yd2FyZF9pdGVyYXRvcl90
YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAgICAg
ICAgc2l6ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7CiAgICAgICAgc2l6ZV90eXBl
IF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19rMSwgX19rMikpOwoK
ICAgICAgICBpZiAoX19kbWF4IDw9IF9fZG5ldykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2UiKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYg
PSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9f
ZG5ldyk7CgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9NX2Rh
dGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXplX3R5
cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAg
ICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAgIHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zMSksIF9NX2ZvbGQoX19wb3MxLCBfX24x
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fY2hlY2soX19wb3MyKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvczIsIF9fbjIpKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIu
c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShf
X2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf
X3N0ci5fTV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVu
ZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
PiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
CiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3Bv
cywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHko
KSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxh
Y2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX24pCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMt
PnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlz
LT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBf
TV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf
QWxsb2M+OjoKICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgewogICAg
ICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+
IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgICBy
ZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVy
YXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAg
X19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmlu
Z190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsK
ICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBw
ZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19z
aXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9f
bGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAg
IF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQo
X19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBz
aXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBf
X2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsK
ICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAg
ICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAg
IF9NX211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAg
IHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlw
ZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAg
ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlm
IChfX24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkg
LSBfX3BvczsKCiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3Ms
IF9fbik7CgogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29u
c3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24g
PD0gX19zaXplOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19k
YXRhICsgX194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAg
ICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QK
ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90
eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6ZV90
eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0
cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAgaWYg
KF9fcCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX3Bv
cyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiAsX19wb3MpOwogICAgICAgICAgY29uc3QgX0NoYXJU
KiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikg
PT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAgICAgfQogICAgICAg
ICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf
dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmlu
ZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAg
ICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAgICBpZiAoX194cG9zID4g
X19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAgICAgIGZvciAoKytfX3hw
b3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9NX2Rh
dGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgICAg
fQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19u
ICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNv
bnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtf
X3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAg
ICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5
cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAg
ICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0g
X19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0
c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAg
ICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0g
IT0gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX19uICYmIF9feHBv
cyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6Zmlu
ZChfX3MsIF9fbiwgX01fZGF0YSgpW19feHBvc10pKQogICAgICAgICAgcmV0dXJuIF9feHBvczsK
ICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw
ZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBm
b3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0
c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX3hw
b3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQogICAg
ICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUg
PSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRy
YWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAg
ICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXpl
LS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJU
IF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlm
ICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAg
IGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9k
YXRhKClbX19zaXplXSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1
cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIu
c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2Zf
cmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9
IG1pbihfX3NpemUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9f
cnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01f
ZGF0YSgpICsgX19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAg
ICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9f
bjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4g
X19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
ImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4o
X19zaXplIC0gX19wb3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9f
b3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6
ZSwgX19yb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0
YSgpICsgX19wb3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIu
ZGF0YSgpICsgX19wb3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9f
cnNpemUgLSBfX3Jvc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUo
Y29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRh
KCksIF9fcywgX19zaXplKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0g
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBj
b21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z
KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlw
ZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9f
cG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUp
OwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3Ms
IF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19v
c2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0
cmluZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICBzaXplX3R5
cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo
KTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gbWlu
KHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX3JzaXpl
ID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWlu
KF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUo
X01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBf
X3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdm9pZAog
ICAgX1Nfc3RyaW5nX2NvcHkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19zdHIsCiAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVmLCB0eXBlbmFtZSBf
QWxsb2M6OnNpemVfdHlwZSBfX2J1ZnNpeikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHNpemVfdHlwZSBfX3N0cnNpemUgPSBf
X3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19i
dWZzaXogLSAxKTsKICAgICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19zdHIuZGF0YSgpLCBfX2J5
dGVzKTsKICAgICAgX19idWZbX19ieXRlc10gPSBfQ2hhclQoKTsKICAgIH0KfQojIDUxICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDQz
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5o
IiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nj
dHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEg
MwojIDI4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgpleHRlcm4gIkMiIHsKIyA0MCAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDQx
ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgoKCgoKCmVudW0KewogIF9JU3VwcGVyID0gKCgw
KSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dl
ciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAg
X0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4g
OCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgoMSA8PCAo
MykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8IDgpIDog
KCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwgKDUpKSA8
PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8gKCgxIDw8
ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcpIDwgOCA/
ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5rID0gKCg4
KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBfSVNjbnRy
bCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4KSksCiAg
X0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwgKDEwKSkg
Pj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgpIDogKCgx
IDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4g
X19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29uc3QgX19p
bnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlw
ZV90b3VwcGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IGlzYWxu
dW0gKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYSAoaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBpc2NudHJsIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZGlnaXQgKGludCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp
c2dyYXBoIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHJpbnQgKGludCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3NwYWNlIChp
bnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgaXN4ZGlnaXQgKGludCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc2JsYW5rIChpbnQpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzYXNj
aWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRvYXNjaWkgKGludCBfX2MpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4g
aW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDIxMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyMTQgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAyIDMKIyAyMjkgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19p
c2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2FscGhh
X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2NudHJsX2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19s
b2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVf
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX19pc3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX19pc3NwYWNlX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X19pc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3hk
aWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2lzYmxhbmtf
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAo
aW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVy
X2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzUgIi91c3IvaW5jbHVk
ZS9jdHlwZS5oIiAzCn0KIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NjdHlwZS5oIiAyIDMKIyA1NSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6aXNhbG51
bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2NudHJsOwogIHVzaW5nIDo6aXNkaWdp
dDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xvd2VyOwogIHVzaW5nIDo6aXNwcmlu
dDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3NwYWNlOwogIHVzaW5nIDo6aXN1cHBl
cjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9sb3dlcjsKICB1c2luZyA6OnRvdXBw
ZXI7Cn0KIyA0NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl
ZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2
b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQK
ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZs
b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z
dCBjaGFyKiBfX3MpOwp9CiMgNDUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDU2ICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgdmVjdG9yOwogIGNsYXNzIGxvY2Fs
ZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3Nw
YWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFy
VCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3Qg
bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3B1bmN0
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbG51bShfQ2hhclQs
IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNncmFwaChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCwgY29uc3Qg
bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQK
ICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCgoKICBjbGFzcyBjdHlwZV9iYXNl
OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlOwogIHRlbXBsYXRl
PD4gY2xhc3MgY3R5cGU8Y2hhcj47CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
Y2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlOwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAg
IGNsYXNzIGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1i
c3RhdGVfdD47CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl
cm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAg
IGNsYXNzIG51bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5j
dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1l
X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+
CiAgICBjbGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVf
cHV0X2J5bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAg
IGNsYXNzIG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1
dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNs
YXNzIG1vbmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0g
ZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jh
c2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xh
c3MgbG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29y
eTsKCgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAg
IGZyaWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9m
YWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAg
IGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgog
ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVn
b3J5IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0g
MUwgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAg
IHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBj
YXRlZ29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVz
c2FnZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xsYXRl
IHwgY3R5cGUgfCBtb25ldGFyeSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudW1lcmljIHwgdGltZSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3co
KTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxp
Y2l0CiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zdGRfbmFtZSk7CgogICAgbG9jYWxlKGNvbnN0
IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFyKiBfX3MsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICBs
b2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5
IF9fY2F0KTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZShjb25z
dCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKTsKCiAgICB+bG9jYWxlKCkgdGhyb3coKTsK
CiAgICBjb25zdCBsb2NhbGUmCiAgICBvcGVyYXRvcj0oY29uc3QgbG9jYWxlJiBfX290aGVyKSB0
aHJvdygpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlCiAgICAg
IGNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKTsKCgogICAgc3RyaW5nCiAgICBuYW1lKCkg
Y29uc3Q7CgogICAgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNv
bnN0IHRocm93ICgpOwoKICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxvY2Fs
ZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCkKICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9
PShfX290aGVyKSk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAogICAgICAgICAgICAg
ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29u
c3Q7CgoKICAgIHN0YXRpYyBsb2NhbGUKICAgIGdsb2JhbChjb25zdCBsb2NhbGUmKTsKCiAgICBz
dGF0aWMgY29uc3QgbG9jYWxlJgogICAgY2xhc3NpYygpOwoKICBwcml2YXRlOgoKICAgIF9JbXBs
KiBfTV9pbXBsOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2NsYXNzaWM7CgoKICAgIHN0YXRpYyBf
SW1wbCogX1NfZ2xvYmFsOwoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfbnVtX2NhdGVnb3Jp
ZXMgPSA2OwogICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fZmFjZXRzID0gMTM7CgogICAg
ZXhwbGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3RhdGljIGlubGluZSB2
b2lkCiAgICBfU19pbml0aWFsaXplKCkKICAgIHsgaWYgKCFfU19jbGFzc2ljKSBjbGFzc2ljKCk7
IH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkKICAgIF9TX25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29y
eSk7CgogICAgdm9pZAogICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0
IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6
X0ltcGwKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdmVjdG9yPGZhY2V0KiwgYWxsb2NhdG9y
PGZhY2V0Kj4gPiBfX3ZlY19mYWNldDsKCgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZy
aWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K
ICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYp
OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAg
aGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgc2l6ZV90
IF9NX3JlZmVyZW5jZXM7CiAgICBfX3ZlY19mYWNldCogX01fZmFjZXRzOwogICAgc3RyaW5nIF9N
X25hbWVzW19TX251bV9jYXRlZ29yaWVzXTsKICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGU7CiAg
ICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY3R5cGVbXTsKICAgIHN0YXRp
YyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9udW1lcmljW107CiAgICBzdGF0aWMgY29u
c3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY29sbGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IGxv
Y2FsZTo6aWQqIGNvbnN0IF9TX2lkX3RpbWVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6Omlk
KiBjb25zdCBfU19pZF9tb25ldGFyeVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNv
bnN0IF9TX2lkX21lc3NhZ2VzW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3Qq
IGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3JpZXNbXTsKCiAgICBpbmxpbmUgdm9pZAogICAgX01fYWRk
X3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsgKytfTV9yZWZlcmVuY2VzOyB9CgogICAgaW5saW5l
IHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChf
TV9yZWZlcmVuY2VzLS0gPT0gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
eyBkZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7IH0KICAg
ICAgICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXplX3QpOwogICAgX0ltcGwo
c3RyaW5nIF9fbmFtZSwgc2l6ZV90KTsKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBib29sCiAg
ICBfTV9jaGVja19zYW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0gdHJ1ZTsKICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkKICAg
ICAgICBfX3JldCAmPSBfTV9uYW1lc1tpXSA9PSBfTV9uYW1lc1tpICsgMV07CiAgICAgIHJldHVy
biBfX3JldDsKICAgIH0KICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhjb25zdCBf
SW1wbCosIGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0
IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsKCiAgICB2b2lkCiAgICBfTV9yZXBs
YWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOwoKICAgIHZvaWQKICAg
IF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGZhY2V0Kik7CgogICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBpbmxpbmUgdm9pZAogICAgICBfTV9pbml0X2ZhY2V0
KF9GYWNldCogX19mYWNldCkKICAgICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBf
X2ZhY2V0KTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZTo6
bG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCiAgICB7CiAgICAgIF9N
X2ltcGwgPSBuZXcgX0ltcGwoKl9fb3RoZXIuX01faW1wbCwgMSk7CiAgICAgIF9NX2ltcGwtPl9N
X2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9
IDA7IF9faSA8IF9TX251bV9jYXRlZ29yaWVzOyArK19faSkKICAgICAgICBfTV9pbXBsLT5fTV9u
YW1lc1tfX2ldID0gIioiOwogICAgfQoKCiAgY2xhc3MgbG9jYWxlOjpmYWNldAogIHsKICAgIGZy
aWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgcHJv
dGVjdGVkOgogICAgZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygp
OwoKICAgIHZpcnR1YWwKICAgIH5mYWNldCgpIHsgfTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1Nf
Y3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zKTsKCiAg
ICBzdGF0aWMgdm9pZAogICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2Mp
OwoKICBwcml2YXRlOgogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7CgogICAgdm9pZAogICAgX01f
YWRkX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5j
ZSgpIHRocm93KCk7CgogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVy
YXRvcj0oY29uc3QgZmFjZXQmKTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgcHJp
dmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpf
SW1wbDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9G
YWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxl
JikgdGhyb3cgKCk7CgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRp
YyBzaXplX3QgX1NfaGlnaHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBpZCYp
OwoKICAgIGlkKGNvbnN0IGlkJik7CgogIHB1YmxpYzoKCgoKICAgIGlkKCkgeyB9CiAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0
KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBi
b29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsKfQojIDQ0ICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEgMwoj
IDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2ZtdGZs
YWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3Im
KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0Zt
dGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0K
CiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBfX2EsIF9J
b3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50
PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFn
cwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyBy
ZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxp
bnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShfSW9zX0Zt
dGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9f
YjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYg
X19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAg
aW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lv
c19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBf
SW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0dXJuIF9J
b3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19PcGVu
bW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19P
cGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2Ip
CiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf
Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8KF9J
b3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5t
b2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAg
aW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3Nf
T3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50Pihf
X2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQog
IG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJl
dHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRv
ciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19h
ID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JePShfSW9z
X09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBe
IF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09wZW5tb2Rl
IF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9
CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2IH07
CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lv
c19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50Pihf
X2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAg
b3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4g
X0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19i
KSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19h
LCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxp
bnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3Rh
dGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsg
cmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0
b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2Eg
PSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19J
b3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19i
OyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkK
ICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51
bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAgY2xh
c3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4
Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUo
Y29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmZhaWx1
cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkgY29u
c3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgogICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1NiB9
OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRlZiBf
SW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxw
aGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBjb25z
dCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0YXRp
YyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T
X2hleCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfaW50ZXJuYWwpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1NfbGVmdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
b2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfcmlnaHQpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2Np
ZW50aWZpYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dw
b2ludCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9pbnQpOwogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIHNob3dwb3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX3NraXB3cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdz
KF9faW9zX2ZsYWdzOjpfU191bml0YnVmKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBl
cmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1
c3RmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3Mo
X19pb3NfZmxhZ3M6Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxv
YXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAgdHlw
ZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJp
dCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9z
dGF0ZSBlb2ZiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3RhdGlj
IGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxiaXQp
OwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAgIHR5
cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9kZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBh
cHAgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBvcGVu
bW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBjb25z
dCBvcGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAgIHN0
YXRpYyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7CiAg
ICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX291
dCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFn
czo6X1NfdHJ1bmMpOwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAgc3Rh
dGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBzZWVr
ZGlyIGN1ciA9IHNlZWtkaXIoMSk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVr
ZGlyKDIpOwojIDIxNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9z
X2Jhc2UuaCIgMwogICAgZW51bSBldmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwKICAgICAg
aW1idWVfZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lk
ICgqZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAg
IHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAg
cHJvdGVjdGVkOgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBf
TV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19s
aXN0CiAgICB7CgogICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6
OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIGludCBfTV9y
ZWZjb3VudDsKCiAgICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBf
X2ZuLCBpbnQgX19pbmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9f
Y2IpCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgp
LCBfTV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgp
IHsgKytfTV9yZWZjb3VudDsgfQoKICAgICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZlcmVuY2Uo
KSB7IHJldHVybiBfTV9yZWZjb3VudC0tOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCog
X01fY2FsbGJhY2tzOwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYp
IHRocm93KCk7CgogICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAg
IHN0cnVjdCBfV29yZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01f
aXdvcmQ7CiAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZHMgPSA4Owog
ICAgX1dvcmRzIF9NX3dvcmRfYXJyYXlbX1NfbG9jYWxfd29yZHNdOwogICAgX1dvcmRzIF9NX2R1
bW15OwogICAgX1dvcmRzKiBfTV93b3JkczsKICAgIGludCBfTV93b3JkX2xpbWl0OwoKICAgIF9X
b3JkcyYKICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9z
X2xvY2FsZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xh
c3MgSW5pdAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAg
ICAgIEluaXQoKTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lv
c19jcmVhdGUoYm9vbCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2Rl
c3Ryb3koKTsKCiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7
CiAgICAgIHN0YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAgaW5s
aW5lIGZtdGZsYWdzCiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAg
aW5saW5lIGZtdGZsYWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBm
bXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAg
IHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10Zmxh
Z3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAg
X01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGlu
ZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAg
ICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5f
X21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJu
IF9fb2xkOwogICAgfQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNr
KSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJl
Y2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVh
bXNpemUKICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFt
c2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwog
ICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAg
d2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBf
TV93aWR0aDsKICAgICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAg
IH0KCiAgICBzdGF0aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1
ZSk7CgoKICAgIGxvY2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5s
aW5lIGxvY2FsZQogICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoK
CiAgICBzdGF0aWMgaW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgog
ICAgaXdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBf
TV93b3JkX2xpbWl0KQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDog
X01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0K
CiAgICBpbmxpbmUgdm9pZComCiAgICBwd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRz
JiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfbGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAg
ID8gX01fd29yZHNbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193
b3JkLl9NX3B3b3JkOwogICAgfQoKCiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAg
aW9zX2Jhc2UoKTsKCgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoK
ICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAg
aW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9
CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog
ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7
CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7
CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9f
YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog
ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog
ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9f
YmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRq
dXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg
bGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0
LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9f
YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZp
ZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jh
c2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFz
ZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNl
OjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog
IGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsK
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQojIDQ1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwoKIyAxICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m
aWcuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MyAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5o
IiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0
cmVhbWJ1Zi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZz
KGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfaW9zLAogICAgICAgICAgICAgICAgICAgICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAg
ICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj
X3N0cmVhbWJ1ZgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxj
aGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hh
cl90eXBlLCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFz
cyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBi
YXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mg
YmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNz
IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVu
ZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAg
ICAgZnJpZW5kIHN0cmVhbXNpemUKICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAg
ICBwcm90ZWN0ZWQ6CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIGludF90
eXBlIF9NX2J1Zl9zaXplOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplX29wdDsKCgoKICAg
ICAgYm9vbCBfTV9idWZfdW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7
CiAgICAgIGNoYXJfdHlwZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsK
ICAgICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7
CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUg
X01fbW9kZTsKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9NX2J1
Zl9sb2NhbGVfaW5pdDsKCgoKCgoKICAgICAgaW50X3R5cGUgX01fcGJhY2tfc2l6ZTsKICAgICAg
Y2hhcl90eXBlKiBfTV9wYmFjazsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19jdXJfc2F2ZTsK
ICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsKICAgICAgYm9vbCBfTV9wYmFja19p
bml0OwoKCgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19jcmVhdGUoKQogICAgICB7CiAgICAg
ICAgaWYgKCFfTV9wYmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAgICBpbnRfdHlwZSBf
X2Rpc3QgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICAgIGludF90eXBlIF9fbGVu
ID0gbWluKF9NX3BiYWNrX3NpemUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRyYWl0c190eXBlOjpj
b3B5KF9NX3BiYWNrLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfY3Vy
X3NhdmUgPSBfTV9pbl9jdXI7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5f
ZW5kOwogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFjaywgX01fcGJhY2sg
KyBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwogICAgICAgICAgfQog
ICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKQogICAgICB7CiAg
ICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBpbnRfdHlw
ZSBfX29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKCgogICAgICAgICAgICBpbnRfdHlw
ZSBfX29mZl9lbmQgPSAwOwogICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2lu
X2VuZCAtIF9NX3BiYWNrOwogICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0gX01fcGJh
Y2tfZW5kX3NhdmUgLSBfTV9idWY7CiAgICAgICAgICAgIGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2
ZV9sZW4pCiAgICAgICAgICAgICAgX19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVu
OwoKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZlICsgX19v
ZmZfY3VyLAogICAgICAgICAgICAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZf
ZW5kKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAg
IF9NX3BiYWNrX2VuZF9zYXZlID0gX19udWxsOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0g
ZmFsc2U7CiAgICAgICAgICB9CiAgICAgIH0KCgoKICAgICAgdm9pZAogICAgICBfTV9pbl9jdXJf
bW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX291
dF9jdXI7CiAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX190ZXN0b3V0ICYm
IF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgIH0KIyAx
OTMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYu
aCIgMwogICAgICB2b2lkCiAgICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAg
IHsKICAgICAgICBib29sIF9fdGVzdGluID0gX01faW5fY3VyOwoKICAgICAgICBfTV9vdXRfY3Vy
ICs9IF9fbjsKICAgICAgICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAg
ICBfTV9pbl9jdXIgKz0gX19uOwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkK
ICAgICAgICAgIHsKICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAgICAg
ICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgICAg
ICAgIH0KICAgICAgfQoKCgoKICAgICAgb2ZmX3R5cGUKICAgICAgX01fb3V0X2J1Zl9zaXplKCkK
ICAgICAgewogICAgICAgIG9mZl90eXBlIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX01fb3V0X2N1
cikKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1ZikKICAg
ICAgICAgICAgICBfX3JldCA9IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7
CgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfZW5kIC0gX01f
b3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KIyAyMzYg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIg
MwogICAgICB2b2lkCiAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKHZvaWQpCiAgICAgIHsKICAg
ICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgIHRoaXMtPnNldGcoX01f
YnVmLCBfTV9idWYsIF9NX2J1Zik7CiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0
KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYsIF9NX2J1Zik7CiAgICAgIH0KCiAgICAgIHZv
aWQKICAgICAgX01fc2V0X2RldGVybWluYXRlKG9mZl90eXBlIF9fb2ZmKQogICAgICB7CiAgICAg
ICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgICAgYm9vbCBf
X3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAgICBpZiAoX190ZXN0aW4p
CiAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAg
ICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYg
KyBfX29mZik7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2
b2lkKQogICAgICB7CiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNlOwoKICAgICAgICBpZiAoX01f
YnVmKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikK
ICAgICAgICAgICAgICBfX3JldCA9IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3Vy
ID09IF9NX2luX2VuZDsKICAgICAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQog
ICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2JlZyA9PSBfTV9vdXRfY3VyICYmIF9NX291dF9j
dXIgPT0gX01fb3V0X2VuZDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAg
IH0KCiAgcHVibGljOgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAg
ICB7CiAgICAgICAgX01fYnVmX3VuaWZpZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9
IDA7CiAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jh
c2U6Om9wZW5tb2RlKDApOwogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwogICAg
ICB9CgoKICAgICAgbG9jYWxlCiAgICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAg
ICAgIHsKICAgICAgICBsb2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMt
PmltYnVlKF9fbG9jKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxvY2Fs
ZQogICAgICBnZXRsb2MoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVf
aW5pdCkKICAgICAgICAgIHJldHVybiBfTV9idWZfbG9jYWxlOwogICAgICAgIGVsc2UKICAgICAg
ICAgIHJldHVybiBsb2NhbGUoKTsKICAgICAgfQoKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAg
ICAgIHB1YnNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0
dXJuIHRoaXMtPnNldGJ1ZihfX3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNl
ZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFz
ZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2Rl
KTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAg
ICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBp
b3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7
IH0KCiAgICAgIGludAogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CgoK
CiAgICAgIHN0cmVhbXNpemUKICAgICAgaW5fYXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFt
c2l6ZSBfX3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2Vu
ZCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9z
YXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNr
X2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3Nh
dmVfbGVuIC0gX19wYmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAg
ICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAg
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMo
KQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg
ICAgICAgcmV0dXJuICh0aGlzLT5zYnVtcGMoKSA9PSBfX2VvZiA/IF9fZW9mIDogdGhpcy0+c2dl
dGMoKSk7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAgICAgIHNidW1wYygpOwoKICAgICAgaW50
X3R5cGUKICAgICAgc2dldGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAg
ICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3Jl
dCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVs
c2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9f
cmV0OwogICAgICB9CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19uKTsg
fQoKCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKCiAgICAg
IGludF90eXBlCiAgICAgIHN1bmdldGMoKTsKCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0Yyhj
aGFyX3R5cGUgX19jKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgc3B1dG4oY29uc3QgY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19z
LCBfX24pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1idWYoKQogICAgICA6
IF9NX2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSgwKSwKICAgICAgX01fYnVmX3NpemVfb3B0KHN0
YXRpY19jYXN0PGludF90eXBlPig4MTkyKSksIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwKICAgICAg
X01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwgX01fb3V0X2JlZygwKSwg
X01fb3V0X2N1cigwKSwKICAgICAgX01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6b3Bl
bm1vZGUoMCkpLCBfTV9idWZfbG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xvY2FsZV9p
bml0KGZhbHNlKSwgX01fcGJhY2tfc2l6ZSgxKSwgX01fcGJhY2soX19udWxsKSwKICAgICAgX01f
cGJhY2tfY3VyX3NhdmUoX19udWxsKSwgX01fcGJhY2tfZW5kX3NhdmUoX19udWxsKSwgX01fcGJh
Y2tfaW5pdChmYWxzZSkKICAgICAgeyB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBlYmFjaygp
IGNvbnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBncHRy
KCkgY29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVn
cHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9CgogICAgICB2b2lkCiAgICAgIGdidW1w
KGludCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRnKGNo
YXJfdHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQog
ICAgICB7CiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOwogICAgICAgIF9NX2luX2N1ciA9IF9f
Z25leHQ7CiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOwogICAgICAgIGlmICghKF9NX21vZGUg
JiBpb3NfYmFzZTo6aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkKICAgICAgICAg
IF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAgICAgY2hhcl90
eXBlKgogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KCiAgICAgIGNo
YXJfdHlwZSoKICAgICAgcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0KCiAgICAg
IGNoYXJfdHlwZSoKICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5kOyB9Cgog
ICAgICB2b2lkCiAgICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KCiAg
ICAgIHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQp
CiAgICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAg
ICBfTV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6
b3V0KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBp
b3NfYmFzZTo6b3V0OwogICAgICB9CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShj
b25zdCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0g
dHJ1ZTsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1
Zl9sb2NhbGUgPSBfX2xvYzsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVm
PGNoYXJfdHlwZSxfVHJhaXRzPioKICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUp
CiAgICAgIHsgcmV0dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vl
a29mZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4g
cG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBz
ZWVrcG9zKHBvc190eXBlLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19i
YXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBl
KC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoK
ICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0K
CiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0
cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkK
ICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90
eXBlCiAgICAgIHVmbG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRz
X3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdGhpcy0+dW5kZXJmbG93KCkg
PT0gX19yZXQ7CiAgICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5nID0gX01faW5fY3VyICYmIF9NX2lu
X2N1ciA8IF9NX2luX2VuZDsKICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5n
KQogICAgICAgICAgewogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlw
ZSgqX01faW5fY3VyKTsKICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAgICAgICAgICAgIGlmIChf
TV9idWZfdW5pZmllZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICAr
K19NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoK
ICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNf
dHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKCiAgICAg
IHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0
cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50
X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjpl
b2YoKTsgfQojIDUxNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X3N0cmVhbWJ1Zi5oIiAzCiAgICBwcml2YXRlOgogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3Qg
X19zdHJlYW1idWZfdHlwZSYpOwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0
b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKTsKCiAgICB9OwoKfQoKCgoKIyAxICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzNyAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwpu
YW1lc3BhY2Ugc3RkIHsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAg
ICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9p
bl9lbmQpCiAgICAgICAgewogICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpncHRyKCk7CiAgICAg
ICAgICBfTV9pbl9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRv
X2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlz
LT51ZmxvdygpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0Owog
ICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7
CiAgICAgIGJvb2wgX190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190eXBlOjplcShfX2Ms
IHRoaXMtPmdwdHIoKVstMV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBfX3Rlc3RuZSkKICAg
ICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAg
ICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKICAgICAg
ICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46
OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzdW5n
ZXRjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYg
X01faW5fYmVnIDwgX01faW5fY3VyKQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3Zl
KC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9j
dXIpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWls
KCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBp
ZiAoX01fb3V0X2J1Zl9zaXplKCkpCiAgICAgICAgewogICAgICAgICAgKl9NX291dF9jdXIgPSBf
X2M7CiAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0
c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f
cmV0ID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7
CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAg
ICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1
cjsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90
IF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0
c190eXBlOjpjb3B5KF9fcywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQg
Kz0gX19sZW47CiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX2lu
X2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9f
bikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93
KCk7CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0
cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICArK19fcmV0
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry
ZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRu
KGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFt
c2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAg
ICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlm
IChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19y
ZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1p
bihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w
eShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsK
ICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3Zl
KF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0
c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0cmFp
dHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19y
ZXQ7CiAgICAgICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhi
YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAg
ICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3Ry
ZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5p
bl9hdmFpbCgpOwogICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0
ID0gX19zYm91dC0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIHRyeSB7CiAgICAgICAg
d2hpbGUgKF9fdGVzdHB1dCAmJiBfX2J1ZnNpemUgIT0gLTEpCiAgICAgICAgICB7CiAgICAgICAg
ICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsK
ICAgICAgICAgICAgX19yZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgX19zYmluLT5fTV9pbl9j
dXJfbW92ZShfX3h0cmN0KTsKICAgICAgICAgICAgaWYgKF9feHRyY3QgPT0gX19idWZzaXplKQog
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2Jpbi0+c2dl
dGMoKTsKICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX1RyYWl0czo6ZW9mKCkpCiAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFzZTo6
ZW9mYml0KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQog
ICAgICB9CiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKSB7CiAgICAgICAgaWYgKChfX2lv
cy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgIHRocm93
OwogICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDUzMCAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyA0NiAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMg
MzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAz
CgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5o
IiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9p
dGVyLmgiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGlj
IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0
cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6
CiAgICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19z
KSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3Ni
dWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0
aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAg
ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAg
ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJh
dG9yKysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFt
YnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAq
dGhpczsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf
VHJhaXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0
b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBf
VHJhaXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLF9UcmFpdHM6OmVvZigpKSkK
ICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJl
YW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
IF9DaGFyVCosIF9DaGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgICAg
dHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVm
aXRlcl90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBzdHJlYW1idWZfdHlwZSogX01f
c2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZf
aXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7IH0K
CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkKICAg
ICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFtYnVm
X2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9f
cyksIF9NX2MoLTIpIHsgfQoKCgoKICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNv
bnN0CiAgICAgIHsKCiAgICAgICAgY2hhcl90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9zYnVm
ICYmIF9NX2MgIT0gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0yKSkKICAgICAgICAgIF9fcmV0ID0g
X01fYzsKICAgICAgICBlbHNlIGlmIChfTV9zYnVmKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNf
dHlwZTo6dG9fY2hhcl90eXBlKF9NX3NidWYtPnNnZXRjKCkpOwogICAgICAgIGVsc2UKICAgICAg
ICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPih0cmFpdHNfdHlwZTo6ZW9mKCkpOwog
ICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBl
JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9zYnVmKQogICAgICAg
ICAgX01fc2J1Zi0+c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlCiAgICAgIG9wZXJhdG9y
KysoaW50KQogICAgICB7CiAgICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlIF9fb2xkID0gKnRo
aXM7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICBfX29sZC5fTV9jID0gX01fc2J1Zi0+
c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAg
fQoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9f
YikKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICAgIGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBf
X2VvZjsKICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAgICAg
ICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJuIChf
X3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoK
CgoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9f
YikgY29uc3QKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMo
KSA9PSBfX2VvZjsKICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAg
ICAgICAgICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0
dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAg
ICAgfQoKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVm
X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVhbChf
X2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsg
fQp9CiMgMzYgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv
cy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKCgoKCm5h
bWVzcGFjZSBzdGQKewoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2
ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5oIiAxIDMKIyA1MCAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5o
IiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBjb25zdCBpbnQqIF9fdG9f
dHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWFzazsKICAgIHN0YXRpYyBjb25z
dCBtYXNrIHVwcGVyID0gX0lTdXBwZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9IF9J
U2xvd2VyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNhbHBoYTsKICAgIHN0YXRp
YyBjb25zdCBtYXNrIGRpZ2l0ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGln
aXQgPSBfSVN4ZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IF9JU3NwYWNlOwog
ICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSBfSVNwcmludDsKICAgIHN0YXRpYyBjb25zdCBt
YXNrIGdyYXBoID0gX0lTZ3JhcGg7CiAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IF9JU2Nu
dHJsOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5jdDsKICAgIHN0YXRpYyBj
b25zdCBtYXNrIGFsbnVtID0gX0lTYWxudW07CiAgfTsKIyA1NCAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1YmxpYyBs
b2NhbGU6OmZhY2V0LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBpcyhtYXNrIF9fbSwg
Y2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19tLCBfX2Mp
OyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlwZSAqX19s
bywgY29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX2lzKF9f
bSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9ub3Qo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9faGkpOyB9
CgogICAgICBjaGFyX3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsgfQoKICAg
ICAgY2hhcl90eXBlCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNo
YXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fd2lkZW4oX19jKTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lkZW4oY29uc3QgY2hh
ciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoKICAgICAgY2hhcgog
ICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAgICBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSwKICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1bHQsIF9fdG8p
OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0eXBlX2Fic3RyYWN0
X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAg
ICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1
YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QgPSAwOwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBtYXNrKiBfX3ZlYykg
Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5f
aXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAog
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAg
IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5
cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJf
dHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGks
CiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0
dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Qg
PSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25z
dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAg
ICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0eXBlX2Fi
c3RyYWN0X2Jhc2U8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1hc2s7Cgog
ICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fi
c3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
aWQ7CgogICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCkgeyB9CgogICAg
ICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK
ICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGks
IG1hc2sqIF9fdmVjKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90
eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9f
aGk7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdCht
YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1
YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAg
eyByZXR1cm4gX19jOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
dG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAg
ICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9s
b3dlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiBfX2M7IH0KCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAg
ICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAg
eyByZXR1cm4gY2hhcl90eXBlKCk7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAg
ZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBf
X2Rlc3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY2hhcgog
ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgICB7IHJl
dHVybiBfX2RmYXVsdDsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAg
ICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX19oaTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9j
YWxlOjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBl
PGNoYXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcml2YXRlOgoKICAgICAg
Ym9vbCBfTV9kZWw7CiAgICAgIF9fdG9fdHlwZSBjb25zdCYgX01fdG91cHBlcjsKICAgICAgX190
b190eXBlIGNvbnN0JiBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBjb25zdCYgX01fY3Rh
YmxlOwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRp
YyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAx
ICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGljaXQKICAgICAg
Y3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90
IF9fcmVmcyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXIg
X19jKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBpcyhjb25zdCBjaGFy
KiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICBpbmxp
bmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywg
Y29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAg
c2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNv
bnN0OwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAg
IGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBf
TV90YWJsZTsgfQoKICAgICAgY29uc3QgbWFzayoKICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gX01fY3RhYmxlOyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAg
ZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh
cl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xv
LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8s
CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9f
bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlw
ZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJf
dHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRl
bihjaGFyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4o
Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIg
X19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAg
ICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsK
CiAgdGVtcGxhdGU8PgogICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8
Y2hhcj4gPihjb25zdCBsb2NhbGUmIF9fbG9jKTsKIyAzOTIgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5o
IiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29sCiAgY3R5cGU8Y2hhcj46OgogIGlz
KG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVybiBfTV90YWJsZVtfX2NdICYgX19t
OyB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93
LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChf
X2xvdyA8IF9faGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVsqX19sb3crK107CiAgICBy
ZXR1cm4gX19oaWdoOwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9p
cyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QK
ICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYgIShfTV90YWJsZVsqX19sb3ddICYgX19t
KSkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CgogIGNvbnN0IGNoYXIqCiAg
Y3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29u
c3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAg
ICAgICAgICYmIChfTV90YWJsZVsqX19sb3ddICYgX19tKSAhPSAwKQogICAgICArK19fbG93Owog
ICAgcmV0dXJuIF9fbG93OwogIH0KIyAzOTMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgogICAgewog
ICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBleHBsaWNp
dAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsgfQogICAg
fTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNv
bnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAzCiMgMTczICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMKICBjbGFzcyBjb2RlY3Z0X2Jhc2UKICB7
CiAgcHVibGljOgogICAgZW51bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRpYWws
CiAgICAgIGVycm9yLAogICAgICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAg
IGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNv
ZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5f
dHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBf
U3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBlJiBf
X3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3QgaW50ZXJu
X3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAg
ICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAg
ZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhp
cy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAg
fQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJu
X3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICBleHRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChf
X3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBp
bihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAg
ICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu
ZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAg
ICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21f
bmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4
dCk7CiAgICAgIH0KCiAgICAgIGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAgICBhbHdh
eXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNf
bm9jb252KCk7IH0KCiAgICAgIGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYgX19z
dGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQKICAg
ICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4
X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2NvZGVj
dnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsg
fQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlw
ZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAg
ICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg
ICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1
bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190
bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYg
X190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihz
dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3Rv
X2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAg
ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7Cgog
ICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkg
PSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUm
LCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJu
X3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50
CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3Rh
dGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jh
c2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVy
blQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAg
IHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
OwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAg
OiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCxfRXh0ZXJuVCxfU3RhdGVUPiAoX19y
ZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7
IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJu
VCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJuVCwgX0V4
dGVyblQsIF9TdGF0ZVQ+OjppZDsKIyA1OTQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL2NvZGVjdnQuaCIgMwogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8Y2hh
ciwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8
Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBj
aGFyIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5
cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwg
cmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlw
ZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNv
bnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSog
X190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBf
X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChz
dGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBl
eHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0
IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy
b21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRl
cm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNv
ZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlz
X25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5n
dGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICB9
OwojIDcwMCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBl
bmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxf
SW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxp
Y2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0K
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0K
ICAgIH07CiMgNDE2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19nZXQ7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgY2xhc3MgX0Zvcm1hdF9jYWNoZQogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFy
VD4gdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXpl
X3R5cGU7CgoKICAgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgICAgZnJpZW5kIGNsYXNzIF9OdW1lcmlj
X2dldDsKICAgICAgZnJpZW5kIGNsYXNzIG51bV9nZXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNs
YXNzIG51bV9wdXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0PF9DaGFyVD47
CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9nZXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNz
IHRpbWVfcHV0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9wdXQ8X0NoYXJUPjsK
CgoKCiAgICAgIHN0YXRpYyBpbnQgX1NfcHdvcmRfaXg7CgoKCiAgICAgIGJvb2wgX01fdmFsaWQ7
CgoKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2xpdGVyYWxzW107CgoKCgogICAgICBlbnVt
CiAgICAgIHsKICAgICAgICBfU19taW51cywKICAgICAgICBfU19wbHVzLAogICAgICAgIF9TX3gs
CiAgICAgICAgX1NfWCwKICAgICAgICBfU19kaWdpdHMsCiAgICAgICAgX1NfZGlnaXRzX2VuZCA9
IF9TX2RpZ2l0cyArIDE2LAogICAgICAgIF9TX3VkaWdpdHMgPSBfU19kaWdpdHNfZW5kLAogICAg
ICAgIF9TX3VkaWdpdHNfZW5kID0gX1NfdWRpZ2l0cyArIDE2LAogICAgICAgIF9TX2VlID0gX1Nf
ZGlnaXRzICsgMTQsCiAgICAgICAgX1NfRWUgPSBfU191ZGlnaXRzICsgMTQKICAgICAgfTsKCgoK
CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwoKCgoKCiAgICAgIGNoYXJfdHlwZSBf
TV90aG91c2FuZHNfc2VwOwoKCgogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFtZTsKICAgICAg
c3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKCgogICAgICBib29sIF9NX3VzZV9ncm91cGluZzsK
CgoKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwoKICAgICAgX0Zvcm1hdF9jYWNoZSgpOwoKICAg
ICAgfl9Gb3JtYXRfY2FjaGUoKSB0aHJvdygpIHsgfQoKCgoKICAgICAgc3RhdGljIF9Gb3JtYXRf
Y2FjaGU8X0NoYXJUPioKICAgICAgX1NfZ2V0KGlvc19iYXNlJiBfX2lvcyk7CgogICAgICB2b2lk
CiAgICAgIF9NX3BvcHVsYXRlKGlvc19iYXNlJik7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBf
U19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldmVudCwgaW9zX2Jhc2UmIF9faW9zLCBpbnQg
X19peCkgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
dCBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX3B3b3JkX2l4OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBjb25zdCBjaGFyIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6CiAgICBfU19s
aXRlcmFsc1tdID0gIi0reFgwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OUFCQ0RFRiI7CgogICB0
ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsKCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBfTnVt
ZXJpY19nZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCgogICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyBudW1fZ2V0
OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAg
IGZyaWVuZCBjbGFzcyB0aW1lX2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5
cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0OwogICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFz
cyBudW1fcHV0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRl
clQ+CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX3B1dDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfcHV0OwoK
ICAgIHByaXZhdGU6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9OdW1lcmljX2dldCgpIHsgfQoKICAg
ICAgdmlydHVhbAogICAgICB+X051bWVyaWNfZ2V0KCkgeyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgX01fZ2V0X2RpZ2l0cyhpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kKSBjb25zdDsK
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRl
cl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsK
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX2dl
dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlw
ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0
KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAg
IGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9u
ZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9f
ZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwg
aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9f
Z2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRl
cl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAog
ICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxv
YXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBf
X2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwg
aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2lu
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQo
aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAg
IGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBf
X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs
IF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0KCgoK
CgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3QoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgY2hhciogX194dHJjLAogICAgICAgICAgICAgICAgIGludCYgX19iYXNlLCBib29s
IF9fZnAgPSB0cnVlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl
dChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJv
b2wmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90
eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBzaG9ydCYpIGNv
bnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVy
X3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBpbnQmKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldCAoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv
c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl
dChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
eXBlLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu
c2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUm
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUs
IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg
ICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46
OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtX2dldDxjaGFyLCBpc3RyZWFtYnVm
X2l0ZXJhdG9yPGNoYXI+ID46OgogICAgX01fZXh0cmFjdChpc3RyZWFtYnVmX2l0ZXJhdG9yPGNo
YXI+IF9fYmVnLAogICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBjaGFyKiBfX3h0cmMsCiAgICAgICAgICAgICAgIGludCYgX19iYXNlLCBib29sIF9fZnApIGNv
bnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBjbGFzcyBfTnVtZXJpY19wdXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgIHByb3Rl
Y3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX051bWVyaWNfcHV0KCkgeyB9CgogICAgICB2aXJ0
dWFsCiAgICAgIH5fTnVtZXJpY19wdXQoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxv
Y2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9fcmVmcyA9
IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9f
dikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg
Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChf
X3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNp
Z25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2Zp
bGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp
bGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVy
biBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91
YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f
dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um
IF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBl
IF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g
ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp
cnR1YWwKICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUs
IGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90
eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1
bnNpZ25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w
dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcg
bG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf
dHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg
Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f
ZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBudW1fcHV0PF9DaGFy
VCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3Mg
bnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
clQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0
ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90
aG91c2FuZHNfc2VwOwogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAgICAgIHN0cmluZ190eXBl
IF9NX3RydWVuYW1lOwogICAgICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5hbWU7CgogICAgcHVibGlj
OgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh
bGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7IH0KCiAg
ICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19y
ZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251
bXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3BvaW50KCkg
Y29uc3QKICAgICAgeyByZXR1cm4gZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5
cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3Rob3VzYW5k
c19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJ1ZW5hbWUo
KSBjb25zdAogICAgICB7IHJldHVybiBkb190cnVlbmFtZSgpOyB9CgogICAgICBzdHJpbmdfdHlw
ZQogICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBkb19mYWxzZW5hbWUoKTsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3QoKSB7IH0KCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog
ICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRz
X3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQog
ICAgICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1lOyB9Cgog
ICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6
ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBudW1wdW5jdDxfQ2hhclQ+
OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgKQogICAgewoKICAgIH0KCiAgdGVt
cGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVu
Y3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBjbGFzcyBudW1wdW5jdF9ieW5hbWUgOiBwdWJsaWMgbnVtcHVuY3Q8X0NoYXJUPgogICAg
ewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX251bXB1bmN0OwogICAgcHVibGljOgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdF9ieW5hbWUo
Y29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBudW1wdW5jdDxfQ2hh
clQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2Fs
ZV9udW1wdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9NX2NfbG9j
YWxlX251bXB1bmN0KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+bnVtcHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9j
YWxlX251bXB1bmN0KTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg
ICBleHBsaWNpdAogICAgICBjb2xsYXRlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFj
ZXQoX19yZWZzKSB7IH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19s
bzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xv
MiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY29t
cGFyZShfX2xvMSwgX19oaTEsIF9fbG8yLCBfX2hpMik7IH0KCiAgICAgIHN0cmluZ190eXBlCiAg
ICAgIHRyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJhbnNmb3JtKF9fbG8sIF9faGkpOyB9CgogICAg
ICBsb25nCiAgICAgIGhhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0KCiAgcHJv
dGVjdGVkOgogICAgICB+Y29sbGF0ZSgpIHsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f
Y29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAg
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cmFuc2Zvcm0oY29uc3QgX0No
YXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBsb25n
CiAgICAgIGRvX2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNv
bnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBj
b2xsYXRlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPGNo
YXI+Ojpkb19jb21wYXJlKGNvbnN0IGNoYXIqIF9fbG8xLCBjb25zdCBjaGFyKiBfX2hpMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19sbzIsIGNvbnN0IGNoYXIq
IF9faGkyKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc3RyaW5nCiAgICBjb2xsYXRlPGNoYXI+
Ojpkb190cmFuc2Zvcm0oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7
CgogIHRlbXBsYXRlPD4KICAgIGxvbmcKICAgIGNvbGxhdGU8Y2hhcj46OmRvX2hhc2goY29uc3Qg
Y2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CiMgMTAxNCAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0
ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAg
ICBleHBsaWNpdAogICAgICBjb2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVm
cyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZV9ieW5h
bWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbGxhdGVfYnluYW1lPGNoYXI+Ojpj
b2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CgoKCgoKICBjbGFzcyB0
aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwgZG15
LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwg
cHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGlj
IGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldChzaXplX3QgX19y
ZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpLCBfTV9kYXluYW1lcygwKSwg
X01fbW9udGhuYW1lcygwKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF90aW1lKF9fcywgX19lbmQsIF9fZiwgX19lcnIsIF9f
dCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfZGF0ZShpdGVyX3R5cGUgX19zLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0X2RhdGUoX19z
LCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF93
ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAog
ICAgICB7IHJldHVybiBkb19nZXRfd2Vla2RheShfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF9tb250
aG5hbWUoX19zLF9fZW5kLF9fZixfX2VycixfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg
Z2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAog
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIGRvX2dldF95ZWFyKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQoKICAg
IHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXQoKQogICAgICB7CiAgICAg
ICAgZGVsZXRlIFtdIF9NX21vbnRobmFtZXM7CiAgICAgICAgZGVsZXRlIFtdIF9NX2RheW5hbWVz
OwogICAgICB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29yZGVyKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGltZV9iYXNlOjp5bWQ7IH0KCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19i
YXNlJiwKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkgY29uc3QK
ICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n
ZXRfZGF0ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsCiAgICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9f
czsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90
eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsCiAgICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAgICB7IHJl
dHVybiBfX3M7IH0KCiAgICAgIG11dGFibGUgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9NX2RheW5h
bWVzOwogICAgICBtdXRhYmxlIGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9tb250aG5hbWVzOwog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
bG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXRfYnluYW1l
IDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4KICAgIHsKICAgIHB1YmxpYzoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90
eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBz
aXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVm
cykgeyB9CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0X2J5bmFt
ZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0
aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6
OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVmcyA9IDAp
IDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiAsIGNoYXJfdHlwZSAsCiAgICAgICAgICBjb25zdCB0
bSogLCBjb25zdCBfQ2hhclQqICwKICAgICAgICAgIGNvbnN0IF9DaGFyVCogKSBjb25zdAogICAg
ICB7IHJldHVybiBfX3M7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHRtKiBf
X3RtYiwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZGlmaWVyID0gMCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdG1iLCBfX2Zvcm1hdCwgX19tb2RpZmll
cik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0KCkgeyB9
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiAsCiAgICAgICAgICAgICBjaGFyICwgY2hhciAp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJU
LCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDogcHVibGljIHRpbWVfcHV0PF9DaGFy
VCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAog
ICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAg
ICA6IHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+IChfX3JlZnMpIHsgfQoKICAgIHByb3RlY3Rl
ZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9wdXRfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbW9u
ZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3Rh
dGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9nZXQoc2l6ZV90
IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBl
CiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLAog
ICAgICAgICAgaW9zX2Jhc2UmIF9fZiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRv
dWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9f
aW50bCwgX19mLCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQo
aXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9f
ZiwKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX2Rp
Z2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19m
LCBfX2VyciwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5tb25leV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp
dGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBib29sICwKICAgICAgICAgICAgIGlvc19iYXNlJiAs
IGlvc19iYXNlOjppb3N0YXRlJiAsCiAgICAgICAgICAgICBsb25nIGRvdWJsZSYgKSBjb25zdAog
ICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl
dChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBib29sICwKICAgICAgICAgICAgIGlvc19iYXNl
JiAsIGlvc19iYXNlOjppb3N0YXRlJiAsCiAgICAgICAgICAgICBzdHJpbmdfdHlwZSYgKSBjb25z
dAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1
YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJ
dGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdf
dHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAg
bW9uZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2YsCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3Vu
aXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2ludGwsIF9fZiwgX19maWxs
LCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBi
b29sIF9faW50bCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGNv
bnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9f
cywgX19pbnRsLCBfX2YsIF9fZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
CiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUg
LAogICAgICAgICAgICAgbG9uZyBkb3VibGUgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0K
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29s
LCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUm
ICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9wdXQ8X0No
YXJULCBfT3V0SXRlcj46OmlkOwoKICBzdHJ1Y3QgbW9uZXlfYmFzZQogIHsKICAgIGVudW0gcGFy
dCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CiAgICBzdHJ1Y3QgcGF0dGVy
biB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVs
dF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJu
KGNoYXIgX19wcmVjZWVkcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7CiAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdCA6
IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9
IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBj
aGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19z
ZXA7CiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKICAgICAgc3RyaW5nX3R5cGUgX01fY3Vycl9z
eW1ib2w7CiAgICAgIHN0cmluZ190eXBlIF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIHN0cmluZ190
eXBlIF9NX25lZ2F0aXZlX3NpZ247CiAgICAgIGludCBfTV9mcmFjX2RpZ2l0czsKICAgICAgcGF0
dGVybiBfTV9wb3NfZm9ybWF0OwogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7CgogICAgcHVi
bGljOgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6
IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdCgp
OyB9CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBz
aXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0
aWFsaXplX21vbmV5cHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2lt
YWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7
IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3Jv
dXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAg
ICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHBvc2l0aXZl
X3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2ZV9zaWduKCk7IH0K
CiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAogICAgICBmcmFjX2Rp
Z2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0KCiAg
ICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdfZm9ybWF0KCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCkgeyB9CgogICAgICB2aXJ0dWFsIGNo
YXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
ZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNh
bmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAg
IHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fY3Vycl9z
eW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoKICAgICAgdmly
dHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAg
ICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVfc2ln
bjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAg
IGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0OyB9Cgog
ICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVf
bW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5cHVuY3Q8
X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu
dGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIHZvaWQKICAgIG1vbmV5cHVu
Y3Q8X0NoYXJULCBfSW50bD46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlICkK
ICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhcj46
Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9i
eW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2Nf
bG9jYWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp
bmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9f
cmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihfX3JlZnMpCiAgICAg
IHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19z
KTsKICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlwdW5j
dCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVu
Y3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5
cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+
CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFyVCwgX0ludGw+OjppbnRsOwoK
CiAgc3RydWN0IG1lc3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGlj
IGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg
ZXhwbGljaXQKICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNl
dChfX3JlZnMpIHsgfQoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmlu
ZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJldHVybiBk
b19vcGVuKF9fcywgX19sb2MpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxv
ZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2MsX19zZXQsX19tc2dpZCxfX3MpOyB9CgogICAg
ICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiBkb19j
bG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdl
cygpIHsgfQoKCgogICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNp
Y19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgICB7IHJldHVybiAwOyB9
CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGlu
dCAsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19k
ZmF1bHQ7IH0KCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25z
dCB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQg
bWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBw
dWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3Nh
Z2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3Rl
ZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXNfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0
ZW1wbGF0ZTw+CiAgICBtZXNzYWdlc19ieW5hbWU8Y2hhcj46Om1lc3NhZ2VzX2J5bmFtZShjb25z
dCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CiMgMTUzMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxl
JiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
KGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
ZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFz
ZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg
cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVw
cGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s
IGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2Mp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2Fs
cGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19j
LCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+
KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBs
b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
YykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
dG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBf
Q2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg
cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9
CiMgMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UKICAgIHsK
ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
VHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190
eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5
cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9p
dGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19u
dW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry
YWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9f
aXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwoKCiAgICBwcml2YXRlOgogICAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAgICAgY2hhcl90eXBlIF9NX2Zp
bGw7CiAgICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOwoKICAgIHByb3RlY3RlZDoKICAgICAgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKICAgICAgaW9zdGF0
ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9pb3Nf
ZmN0eXBlOwoKICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01fZm51bXB1dDsKCiAgICAgIGNv
bnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUg
Y29uc3QgX19jdHlwZV90eXBlKgogICAgICBfTV9nZXRfZmN0eXBlX2lvcyh2b2lkKQogICAgICB7
IHJldHVybiBfTV9pb3NfZmN0eXBlOyB9CgogICAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lvcyo+KHRo
aXMpOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5mYWlsKCk7IH0KCiAgICAgIGlubGluZSBpb3N0YXRlCiAgICAgIHJkc3Rh
dGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAgIGlu
bGluZSB2b2lkCiAgICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2RiaXQpCiAgICAgIHsK
ICAgICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9
IF9fc3RhdGU7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19z
dGF0ZSB8IGJhZGJpdDsKICAgICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2Vw
dGlvbnMoKSkpCiAgICAgICAgICBfX3Rocm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFy
KGlvc3RhdGUpIGNhdXNlZCBleGNlcHRpb24iKTsKICAgICAgfQoKICAgICAgaW5saW5lIHZvaWQK
ICAgICAgc2V0c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMt
PnJkc3RhdGUoKSB8IF9fc3RhdGUpOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBnb29kKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGlubGlu
ZSBib29sCiAgICAgIGVvZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkg
JiBlb2ZiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGZhaWwoKSBjb25zdAog
ICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAhPSAw
OyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAo
dGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBpbmxpbmUgaW9zdGF0ZQog
ICAgICBleGNlcHRpb25zKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZXhjZXB0aW9uOyB9Cgog
ICAgICBpbmxpbmUgdm9pZAogICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19leGNlcHQpCiAgICAg
IHsKICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0aGlzLT5jbGVhcihf
TV9zdHJlYW1idWZfc3RhdGUpOwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNf
aW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNlKCkK
ICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19p
b3MoKSB7IH0KCgogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Kgog
ICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGlubGluZSBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZShiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4qIF9fdGllc3RyKQogICAgICB7CiAgICAgICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3RpZTsKICAgICAgICBfTV90aWUgPSBfX3RpZXN0
cjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCiAgICAgIGlubGluZSBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9zdHJlYW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7Cgog
ICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7Cgog
ICAgICBpbmxpbmUgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9maWxsOyB9CgogICAgICBpbmxpbmUgY2hhcl90eXBlCiAgICAgIGZpbGwoY2hhcl90eXBlIF9f
Y2gpCiAgICAgIHsKICAgICAgICBjaGFyX3R5cGUgX19vbGQgPSBfTV9maWxsOwogICAgICAgIF9N
X2ZpbGwgPSBfX2NoOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCiAgICAgIGxvY2Fs
ZQogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAgICAgbmFy
cm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hhcl90eXBl
CiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBiYXNp
Y19pb3MoKSA6IGlvc19iYXNlKCkKICAgICAgeyB9CgogICAgICB2b2lkCiAgICAgIGluaXQoYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAogICAgICBf
TV9jaGVja19mYWNldChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpCiAgICAgIHsKICAgICAgICBi
b29sIF9fcmV0ID0gZmFsc2U7CiAgICAgICAgaWYgKF9fZikKICAgICAgICAgIF9fcmV0ID0gdHJ1
ZTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgICAgcmV0
dXJuIF9fcmV0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhjb25z
dCBsb2NhbGUmIF9fbG9jKTsKICAgIH07Cn0KCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKICAg
ICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVm
OwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVhcigpOwogICAgICBy
ZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoK
CiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX2xpbWl0IDw9IF9TX2xvY2Fs
X3dvcmRzKSA/CiAgICAgICAgX01fd29yZF9hcnJheSA6IG5ldyBfV29yZHNbX19yaHMuX01fd29y
ZF9saW1pdF07CiMgNjMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jh
c2ljX2lvcy50Y2MiIDMKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IgPSBfX3Jocy5fTV9jYWxs
YmFja3M7CiAgICAgIGlmIChfX2NiKQogICAgICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsK
ICAgICAgX01fY2FsbF9jYWxsYmFja3MoZXJhc2VfZXZlbnQpOwogICAgICBpZiAoX01fd29yZHMg
IT0gX01fd29yZF9hcnJheSkKICAgICAgICBkZWxldGUgW10gX01fd29yZHM7CiAgICAgIF9NX2Rp
c3Bvc2VfY2FsbGJhY2tzKCk7CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3Ig
KGludCBfX2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX2xpbWl0OyArK19faSkKICAgICAgICBf
X3dvcmRzW19faV0gPSBfX3Jocy5fTV93b3Jkc1tfX2ldOwogICAgICBpZiAoX01fd29yZHMgIT0g
X01fd29yZF9hcnJheSkKICAgICAgICBkZWxldGUgW10gX01fd29yZHM7CiAgICAgIF9NX3dvcmRz
ID0gX193b3JkczsKICAgICAgX01fd29yZF9saW1pdCA9IF9fcmhzLl9NX3dvcmRfbGltaXQ7Cgog
ICAgICB0aGlzLT5mbGFncyhfX3Jocy5mbGFncygpKTsKICAgICAgdGhpcy0+d2lkdGgoX19yaHMu
d2lkdGgoKSk7CiAgICAgIHRoaXMtPnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CiAgICAg
IHRoaXMtPnRpZShfX3Jocy50aWUoKSk7CiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsK
CiAgICAgIHRoaXMtPmV4Y2VwdGlvbnMoX19yaHMuZXhjZXB0aW9ucygpKTsKCiAgICAgIF9NX2Nh
bGxfY2FsbGJhY2tzKGNvcHlmbXRfZXZlbnQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNoYXIKICAg
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBf
X2RmYXVsdCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGUtPm5hcnJvdyhfX2MsIF9f
ZGZhdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBfQ2hhclQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9f
YykgY29uc3QKICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGUtPndpZGVuKF9fYyk7IH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGxvY2FsZQogICAg
YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg
ICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgIGlvc19iYXNlOjpp
bWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfX2xvYyk7CiAgICAgIGlmICh0aGlz
LT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19sb2MpOwog
ICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpp
bml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewoKICAgICAg
aW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9NX2lvc19sb2NhbGUp
OwogICAgICBfTV90aWUgPSAwOwogICAgICBfTV9maWxsID0gdGhpcy0+d2lkZW4oJyAnKTsKICAg
ICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAg
ICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAg
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxl
JiBfX2xvYykKICAgIHsKICAgICAgaWYgKGhhc19mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKSkK
ICAgICAgICBfTV9pb3NfZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsK
CiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2Zu
dW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKTsKICAgICAgaWYgKGhhc19m
YWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFj
ZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgfQp9CiMgMjE0ICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgNDcgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgNDAgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJU
LCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRl
ZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVm
X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVk
ZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAg
ICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGJhc2ljX29zdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgeyB0aGlzLT5p
bml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19vc3RyZWFtKCkgeyB9CgoK
ICAgICAgY2xhc3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoKCgogICAgICBf
X29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShf
X29zdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpIChpb3NfYmFzZSYpKTsKCgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIF9fbik7CgogICAgICBfX29z
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbik7CgogICAgICBf
X29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChib29sIF9fbik7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChzaG9ydCBfX24pCiAgICAgIHsKICAgICAgICBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVs
ZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6
OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdGhp
cy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgX19uKQogICAgICB7
IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbikp
OyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpbnQgX19uKQogICAg
ICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlv
c19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBf
X2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAg
ICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAg
ICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQg
X19uKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KF9fbikpOyB9CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo
bG9uZyBsb25nIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1
bnNpZ25lZCBsb25nIGxvbmcgX19uKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I8PChkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KGZsb2F0IF9fZikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2Fz
dDxkb3VibGU+KF9fZikpOyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PChsb25nIGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
PDwoY29uc3Qgdm9pZCogX19wKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBwdXQoY2hhcl90eXBlIF9fYyk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgd3JpdGUo
Y29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBmbHVzaCgpOwoKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxwKCk7CgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3AocG9zX3R5cGUpOwoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIHNlZWtwKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7CgogICAgcHJp
dmF0ZToKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fb3N0
cmVhbV90eXBlJik7CgogICAgICBiYXNpY19vc3RyZWFtKGNvbnN0IF9fb3N0cmVhbV90eXBlJik7
CgogICAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoK
ICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9N
X29zOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJl
YW08X0NoYXJULF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAg
ICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4
Y2VwdGlvbigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYg
X01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRv
ciBib29sKCkKICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X291dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7
IHJldHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFz
cyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRl
bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVk
IGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykp
OyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9U
cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291
dCwgdW5zaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8
Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxj
bGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9f
cyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v
dXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19z
KQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9f
cykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mu
d2lkZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9D
aGFyVCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0K
Cn0KCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVh
bS50Y2MiIDEgMwojIDMyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9v
c3RyZWFtLnRjYyIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9sb2NhbGUuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9sb2NhbGUuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0MSAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMSAz
CiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNl
dHMudGNjIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NlcnJuby5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NlcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDI5ICIv
dXNyL2luY2x1ZGUvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK
IyAzMCAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJu
by5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3Iv
aW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgi
IDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNs
dWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJy
bm9fbG9jYXRpb24gKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
IyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8u
aCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2ludm9j
YXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0eXBl
ZGVmIGludCBlcnJvcl90OwojIDM5ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvbG9jYWxlLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIg
MiAzCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi
IDIgMwoKZXh0ZXJuICJDIiB7CiMgNDUgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwpzdHJ1Y3Qg
bGNvbnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoK
CgoKCiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hh
ciAqY3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1v
bl90aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9z
aWduOwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hh
ciBmcmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3Nw
YWNlOwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoK
CiAgY2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwp9OwoKCgpleHRlcm4gY2hh
ciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFyICpfX2xvY2FsZSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAodm9pZCkgdGhyb3cgKCk7
CiMgMTA5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2Fs
ZS5oIiAxIDMKIyAxMTAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgoKCgoKCgpleHRlcm4g
X19sb2NhbGVfdCBfX25ld2xvY2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFzaywgX19jb25zdCBjaGFy
ICpfX2xvY2FsZSwgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCmV4dGVybiBfX2xv
Y2FsZV90IF9fZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4
dGVybiB2b2lkIF9fZnJlZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoK
Cn0KIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nsb2Nh
bGUuaCIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6
OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0KIyAzNyAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDM4
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRj
YyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv
YysrY29uZmlnLmgiIDEgMwojIDQ2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9zdGRfbGltaXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMSAzCiMgMzggIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9mbG9hdC5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NmbG9hdC5oIiAyIDMKIyA0NyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAyIDMKCm5hbWVzcGFjZSBz
dGQgewoKICAgIGVudW0gZmxvYXRfcm91bmRfc3R5bGUgewogICAgICAgIHJvdW5kX2luZGV0ZXJt
aW5hdGUgPSAtMSwKICAgICAgICByb3VuZF90b3dhcmRfemVybyA9IDAsCiAgICAgICAgcm91bmRf
dG9fbmVhcmVzdCA9IDEsCiAgICAgICAgcm91bmRfdG93YXJkX2luZmluaXR5ID0gMiwKICAgICAg
ICByb3VuZF90b3dhcmRfbmVnX2luZmluaXR5ID0gMwogICAgfTsKCiAgICBlbnVtIGZsb2F0X2Rl
bm9ybV9zdHlsZSB7CiAgICAgICAgZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAgICAgICBk
ZW5vcm1fYWJzZW50ID0gMCwKICAgICAgICBkZW5vcm1fcHJlc2VudCA9IDEKICAgIH07CgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgewogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBf
VHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAg
c3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0K
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAwOwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAwOwoKICAgICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0aHJvdygp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBzdGF0aWMgX1RwIHJvdW5k
X2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBf
VHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAg
ICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21p
bigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv
ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl
cm87CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX2luZmlu
aXR5KCk7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19xdWlldF9OYU4o
KTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX3NpZ25hbGluZ19OYU4o
KTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX2Rlbm9ybV9taW4oKTsK
CiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxib29sPiB7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgYm9v
bCBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICBzdGF0aWMg
Ym9vbCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx
MCA9IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gMDsgfQogICAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu
aXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm
YWxzZTsKCiAgICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KICAgICAgICBzdGF0aWMgYm9vbCBxdWlldF9O
YU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KICAg
ICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CiAgICAgICAgc3RhdGljIGJvb2wgZGVub3JtX21pbigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf
emVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Y2hhcj4g
ewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAg
ICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICgtMTI4KTsgfQog
ICAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxMjc7IH0K
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9yKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1
aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
TmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNf
ZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVu
b3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMg
Y2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hh
cj4oMCk7IH0KICAgICAgICBzdGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIGNoYXIg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigw
KTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh
cHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmlj
X2xpbWl0czxzaWduZWQgY2hhcj4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWF4
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQoKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg
ICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
MDsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p
bmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9
IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBz
dGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBz
aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25l
ZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1fbWluKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQoKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv
d2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1
bnNpZ25lZCBjaGFyPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQg
PSB0cnVlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAyNTU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMgPSA4OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0
aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0K
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g
MDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp
bml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm
YWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g
ZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlbm9y
bV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls
ZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1l
cmljX2xpbWl0czxzaG9ydD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp
emVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAoLTMyNzY3LTEpOyB9CiAgICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
cyA9IDE1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRp
YyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBz
dGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg
PSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBz
dGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8c2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMg
c2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxzaG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0KCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
ZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK
ICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hv
cnQ+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7Cgog
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gNjU1MzU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAx
NjsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy
dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVu
c2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0
eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y
bV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs
c2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgICBz
dGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBk
ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5k
X3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0
IG51bWVyaWNfbGltaXRzPGludD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gKC0yMTQ3NDgzNjQ3LTEpOyB9CiAgICAgICAgc3RhdGljIGludCBtYXgoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0NzsgfQoKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Owog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAg
ICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAg
ICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAw
OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg
ICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgaW50
IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PiB7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKDIxNDc0
ODM2NDcgKiAyVSArIDEpOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNl
bnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVub3JtX21pbigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96
ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPiB7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg
ICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3
TC0xKTsgfQogICAgICAgIHN0YXRpYyBsb25nIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50
ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBsb25nIGVw
c2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBsb25n
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGxvbmcg
aW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7
IH0KICAgICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBzaWduYWxpbmdf
TmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAg
ICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRl
PD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3
TCAqIDJVTCArIDEpOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50
ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu
dDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5z
aWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8
bG9uZyBsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0
cnVlOwoKICAgICAgICBzdGF0aWMgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGxv
bmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsg
fQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDYzOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWdu
ZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgbG9uZyBsb25nIGVwc2lsb24oKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91
bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu
b3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgbG9uZyBsb25n
IGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9u
Zz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGlj
IGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBsb25nIGRlbm9ybV9t
aW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsg
fQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91
bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtaW4o
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
b25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0Nzc1
ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2
NDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9
CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW5maW5pdHko
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7
IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsg
fQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv
d2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxm
bG9hdD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK
CiAgICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjE3
NTQ5NDM1ZS0zOEY7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDI0OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAg
c3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4xOTIwOTI5
MGUtMDdGOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIDEuMGY7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQgPSAtMTI1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzc7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu
Z19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh
c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgZmxvYXQgaW5maW5pdHkoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CiAgICAgICAgc3Rh
dGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgc2lnbmFsaW5nX05hTigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0
aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGRvdWJsZSBtaW4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAgICBzdGF0
aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjc5NzY5MzEzNDg2MjMx
NTdlKzMwODsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIg
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBkb3VibGUgZXBz
aWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9
CiAgICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiAxLjA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAy
MTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTMwNzsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFO
ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9CiAgICAgICAgc3RhdGlj
IGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9CiAgICAgICAgc3Rh
dGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGRvdWJsZT4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl
IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4g
c3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPiB7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUg
bWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5
MzJMOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTDsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
PSAxOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQogICAgICAgIHN0YXRpYyBs
b25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjBMOyB9
CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTE2MzgxOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m
aW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBk
ZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9
IGZhbHNlOwoKICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9CiAgICAgICAgc3Rh
dGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2ln
bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRv
dWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93
YXJkX3plcm87CiAgICB9OwoKfQojIDM5ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAxIDMKIyA0MSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi
IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5
cGUuaCIgMSAzCiMgNDIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xv
Y2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvdHlwZWluZm8iIDEgMwojIDMzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
dHlwZWluZm8iIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhjZXB0
aW9uIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZv
IiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAgY2xhc3MgX19j
bGFzc190eXBlX2luZm87Cn0KIyA1MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz
L3R5cGVpbmZvIiAzCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIHR5cGVfaW5mbwogIHsKICBwdWJs
aWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZhdGU6CgogICAgdHlwZV9p
bmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBlX2luZm8oY29uc3QgdHlw
ZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsKCiAgcHJvdGVj
dGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24p
IHsgfQoKICBwdWJsaWM6CgogICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0CiAgICB7IHJldHVy
biBfX25hbWU7IH0KIyA4NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL3R5cGVp
bmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAg
eyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBfX2FyZy5f
X25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29u
c3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoKICAgIHZp
cnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBfX2lz
X2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19jYXRjaChj
b25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAgdmlydHVhbCBi
b29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZvICpfX3Rh
cmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBjb25z
dDsKICB9OwoKICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGlj
OgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2Nhc3QoKSB0aHJv
dygpOwogIH07CgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1
YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF90eXBl
aWQgKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDEgMwojIDMxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDMKCiMgMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMu
aCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0
ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNl
cHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lk
CiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2
b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRf
b2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyAzMyAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92
ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2FsbG9jLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgMzcgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAx
IDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRf
Y2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlk
X2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Ro
cm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyAzNiAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM3ICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CiMgNDggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y
LCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3Jf
dHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j
YXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9WZWN0b3JfYWxs
b2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRv
cihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQog
IHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7CiAgX1Rw
KiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoK
ICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9j
YXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXpl
X3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwg
X19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjbGFz
cyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0
eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y
X3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9WZWN0b3JfYWxs
b2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KDApLCBfTV9maW5p
c2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBfVHAqIF9NX3N0
YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBf
QWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBf
QWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9f
cCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCBfX24pO30K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9WZWN0b3JfYmFz
ZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNl
bGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0
YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxv
Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFzZShzaXplX3QgX19uLCBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewogICAgX01fc3RhcnQgPSBf
TV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7CiAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3JfYmFzZSgpIHsgX01fZGVh
bGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7IH0KfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNz
IHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+CnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCnByaXZhdGU6
CiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwogIHR5cGVkZWYgdmVj
dG9yPF9UcCwgX0FsbG9jPiB2ZWN0b3JfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFs
dWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50
ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNv
bnN0X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHZhbHVl
X3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVy
ZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBh
bGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZl
cnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHVz
aW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZTsKICB1
c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2ZpbmlzaDsKICB1c2luZyBf
QmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7Cgpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9pbnNlcnRfYXV4
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIF9NX2luc2VydF9h
dXgoaXRlcmF0b3IgX19wb3NpdGlvbik7CgpwdWJsaWM6CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dAogICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX3N0YXJ0KTsgfQogIGl0ZXJhdG9yIGVu
ZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5pc2gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KCiAgcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7
IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgp
CiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6
ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAog
ICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9CiAgc2l6ZV90eXBlIGNh
cGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9l
bmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyBy
ZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5
cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29uc3RfcmVmZXJlbmNlIG9w
ZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsg
fQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIGlmIChf
X24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yIik7
CiAgfQoKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgIHsgX01fcmFuZ2VfY2hlY2so
X19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5
cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtf
X25dOyB9CgogIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxs
b2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0b3Ioc2l6ZV90eXBlIF9f
biwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19uLCBfX2EpCiAgICB7IF9NX2Zpbmlz
aCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOyB9CgogIGV4
cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShfX24sIGFsbG9jYXRvcl90
eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBf
X24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQog
ICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBfTV9maW5p
c2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQp
OyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdmVjdG9yKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgY29uc3QgYWxs
b2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKSB7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J
bnRlZ3JhbDsKICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFs
KCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6
ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkgewogICAg
X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9z
dGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0
LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
IHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAg
ICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y
eShfX2ZpcnN0KSk7CiAgfQoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5p
c2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1Rw
LCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICBpZiAo
Y2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNp
emUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwgX01f
c3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAg
ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQp
OwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xk
X3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICB9CiAg
fQoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsg
X01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNpemVf
dHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJh
dG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0
LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4K
ICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBf
X3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBf
X3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9pZCBfTV9hc3NpZ25f
ZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90
eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv
aWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0
dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4g
KmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQog
IGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9Cgog
IHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9N
X2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAg
ICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBf
X3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5k
X29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmlu
aXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpKTsKICB9CiAgdm9p
ZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgc3RkOjpzd2FwKF9NX3N0YXJ0
LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7
CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7
CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBf
X3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChf
TV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewog
ICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0K
ICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194KTsK
ICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3Ig
X19wb3NpdGlvbikgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwog
ICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVu
ZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19NX2ZpbmlzaDsKICAg
IH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSk7CiAg
ICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl
Z2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9k
aXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3Ig
X19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBl
KSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01fcmFuZ2Vf
aW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOwogIH0KCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBj
b25zdCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQoK
ICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29u
c3QgX1RwJiBfX3gpOwoKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7CiAgICBk
ZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRp
b24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgY29weShfX3Bvc2l0
aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95
KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2Uo
aXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX2koY29w
eShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAgICBkZXN0cm95KF9faSwgZW5kKCkpOwogICAg
X01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1Rw
JiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICBlcmFzZShiZWdpbigp
ICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3
X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19z
aXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KICB2b2lkIGNsZWFyKCkgeyBlcmFz
ZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19u
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgewogICAgcG9pbnRl
ciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewogICAgICB1bmluaXRpYWxp
emVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24pOyB0
aHJvdzsgfTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N
X3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAg
ewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICBwdXNoX2Jh
Y2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog
IHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0
ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19w
b3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3Rh
Zyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2Vf
aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxv
Yz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5z
aXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVu
ZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29u
c3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9j
b21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgdmVj
dG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsK
ICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194
LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9y
PD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29uc3QgdmVjdG9yPF9UcCwg
X0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g
IShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZlY3Rv
cjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgY29uc3Qgc2l6
ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkg
ewogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3gu
YmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsK
ICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFy
dCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01f
c3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVuKSB7CiAg
ICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2luKCkpKTsK
ICAgICAgZGVzdHJveShfX2ksIGVuZCgpKTsKICAgIH0KICAgIGVsc2UgewogICAgICBjb3B5KF9f
eC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQpOwogICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwgX01fZmluaXNoKTsK
ICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwogIH0KICByZXR1cm4gKnRo
aXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1Rw
LCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBf
X3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+
IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBfX3RtcC5zd2FwKCp0aGlz
KTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxsKGJlZ2luKCksIGVuZCgp
LCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gs
IF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFzZShmaWxsX24oYmVnaW4o
KSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+
OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
IHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIgPSAqX19m
aXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwog
IGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgp2b2lk
CnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4gPSAwOwogIGRpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwoKICBpZiAoX19sZW4gPiBjYXBhY2l0eSgpKSB7CiAg
ICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBfX2xh
c3QpKTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICBfTV9kZWFsbG9jYXRl
KF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0g
X190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX19s
ZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAgaXRlcmF0b3IgX19uZXdf
ZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCkpOwogICAgZGVzdHJveShfX25l
d19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAg
fQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgIGFkdmFuY2Uo
X19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7CiAgICBf
TV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsK
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1Rw
LCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYg
X194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgY29uc3Ry
dWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIF9U
cCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3Io
X01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwogICAgKl9fcG9zaXRpb24g
PSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9
IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIg
KiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9f
bGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgdHJ5IHsK
ICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0
KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaC5iYXNlKCksIF9feCk7CiAg
ICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2Nv
cHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsg
KGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25ld19z
dGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQo
KSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0
YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgX01fZmluaXNoID0g
X19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQu
YmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0
aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgY29uc3Ry
dWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIGNv
cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksCiAgICAgICAg
ICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0gX1Rw
KCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7
CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRf
c2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwog
ICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgIHRyeSB7CiAgICAgIF9f
bmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCksIF9fcG9z
aXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFy
dCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19fbmV3X2ZpbmlzaDsK
ICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJh
dG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3X3N0YXJ0
LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKTsgdGhyb3c7
IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0
YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdf
c3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFn
ZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0
b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24gIT0gMCkgewogICAgaWYg
KHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAg
IF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIg
PSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5p
c2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6
ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBf
TV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRf
ZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19w
b3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVu
aW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVtc19hZnRlciwgX194X2Nv
cHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVu
aW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAg
ICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9u
LCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5
cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJh
dG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3
X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0g
dW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAg
ICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5pc2gsIF9f
biwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXplZF9j
b3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNo
KC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRl
KF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAgIGRlc3Ryb3koX01f
c3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v
Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2Uo
KTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBf
X3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9p
dGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsK
ICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICArK19fcG9zOwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRl
cmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0g
X19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bv
c2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgaWYg
KF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmlu
aXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9f
bjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwg
X19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7
CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9f
Zmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRlcik7CiAgICAgICAgdW5p
bml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmlu
aXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f
cG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0g
X19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsK
ICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXpl
ID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4
KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRl
KF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAg
IHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9y
KF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19w
b3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX19uZXdfZmlu
aXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihf
TV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikgeyAoZGVz
dHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0
LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zp
bmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0g
X01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01f
ZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf
X25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0KIyAzOCAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAxIDMKIyAz
NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIg
MwpuYW1lc3BhY2Ugc3RkCnsKCnN0YXRpYyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNp
emVvZih1bnNpZ25lZCBpbnQpKTsKCnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CiAgdW5zaWduZWQg
aW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9tYXNrOwogIF9CaXRfcmVmZXJlbmNlKHVuc2ln
bmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX21hc2so
X195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDAp
IHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISgqX01fcCAmIF9NX21hc2sp
KTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYgKF9f
eCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZl
cmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29s
KCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVy
ZW5jZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsK
ICB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBz
d2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3Rt
cCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJh
dG9yX2Jhc2UgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxib29sLCBwdHJkaWZmX3Q+
CnsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAgX0Jp
dF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAg
OiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQgX01fYnVtcF91cCgpIHsKICAg
IGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAw
OwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAgaWYg
KF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAg
ICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZvaWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7CiAg
ICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24g
LyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAw
KSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAg
ICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBf
X247CiAgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kp
IGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9PSBfX2ku
X01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2Um
IF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX2kuX01fcCB8fCAoX01fcCA9PSBfX2ku
X01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01fb2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhp
cyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2Um
IF9faSkgY29uc3QgewogICAgcmV0dXJuIF9faSA8ICp0aGlzOwogIH0KICBib29sIG9wZXJhdG9y
PD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKF9f
aSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFz
ZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9OwoKaW5saW5l
IHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNvbnN0
IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7CiAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX194Ll9N
X3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29mZnNldDsKfQoKCnN0cnVj
dCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBf
Qml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRl
cjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0b3IoKSA6
IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50
KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9f
eSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShf
TV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBf
TV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyso
aW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwogICAg
cmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBf
ZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkg
ewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0
dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19p
KSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yJiBv
cGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19p
KSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9
IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0
IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwog
IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1cm4g
KigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJk
aWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsg
fQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFz
ZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJl
bmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfY29uc3Rf
aXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6IF9CaXRf
aXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IodW5zaWduZWQgaW50
KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9f
eSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKICAg
IDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBjb25z
dF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNl
KF9NX3AsIDFVIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisr
KCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVy
YXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsK
ICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3Im
IG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9f
dG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAg
Y29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01f
aW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0
b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9f
aSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBf
X3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5
cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0
dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVy
ZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGlu
ZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0
X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxs
b2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwg
X0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBh
bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxv
Y2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
KQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwg
X01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB1bnNpZ25lZCBpbnQqIF9NX2Jp
dF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2Nh
dGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxv
Y2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5k
ZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9B
bGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAg
ICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0Jp
dF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFz
ZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190
cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0
b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g
YWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRv
cl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdl
KDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVuc2ln
bmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsK
CiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9B
bGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9
CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9B
bGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICBfQml0
X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVk
IGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFz
cyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46
Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9j
Pjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIHR5
cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0b3Jf
YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2ZWN0
b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCiMgMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzMTgg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9idmVjdG9yLmgiIDIg
MwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+CiAgY2xhc3MgdmVj
dG9yPGJvb2wsIF9BbGxvYz4gOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+CiAgewogIHB1
YmxpYzoKICAgIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6
ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRl
ZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJl
bmNlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29u
c3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0
b3I7CiAgICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAg
dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yOwogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0
ZXJhdG9yOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxv
Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0
b3IoKSBjb25zdCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmdldF9hbGxv
Y2F0b3IoKTsKICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxs
b2M+OjpfTV9iaXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2Rl
YWxsb2NhdGU7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0OwogICAg
dXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2luZyBfQnZlY3Rv
cl9iYXNlPF9BbGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAgICB2b2lk
IF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9
IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24g
KyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihf
X3EsIDApOwogICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24p
OwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wg
X194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewog
ICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9maW5pc2ggKyAx
KTsKICAgICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgPyAyICogc2l6
ZSgpIDogX19XT1JEX0JJVDsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxv
YyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9u
LCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAqX19pKysgPSBfX3g7CiAgICAgICAgX01fZmlu
aXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICBfTV9kZWFsbG9jYXRl
KCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklU
IC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAg
ICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lk
IF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3Rh
ZykgewogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9IGl0ZXJh
dG9yKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgICB9
CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRp
YWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykg
ewogICAgICBzaXplX3R5cGUgX19uID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
LCBfX24pOwogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGNvcHkoX19maXJzdCwgX19s
YXN0LCBfTV9zdGFydCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgICAgX19wb3MgPSBpbnNl
cnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgICArK19fcG9zOwogICAgICB9CiAgICB9CgogICAg
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9yYW5n
ZShpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGlmIChfX2ZpcnN0ICE9IF9f
bGFzdCkgewogICAgICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgICAgIGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX19uKTsKICAgICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24p
IHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCAr
IGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBf
X3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsK
ICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXpl
KCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9i
aXRfYWxsb2MoX19sZW4pOwogICAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBf
X3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAgIF9faSA9IGNvcHkoX19maXJz
dCwgX19sYXN0LCBfX2kpOwogICAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBl
bmQoKSwgX19pKTsKICAgICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICAgIF9NX2VuZF9v
Zl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAg
ICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgfQogICAgICB9CiAg
ICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0K
ICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAg
IGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRvciBy
YmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3RfcmV2
ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVn
aW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5
cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qgewog
ICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAw
KSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2lu
KCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQog
ICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAgIGNv
bnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0
dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01fcmFu
Z2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgICBpZiAoX19uID49IHRoaXMtPnNp
emUoKSkKICAgICAgICBfX3Rocm93X3JhbmdlX2Vycm9yKCJ2ZWN0b3I8Ym9vbD4iKTsKICAgIH0K
CiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgeyBfTV9yYW5nZV9jaGVjayhf
X24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90
eXBlIF9fbikgY29uc3QKICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlz
KVtfX25dOyB9CgogICAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Eg
PSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9
CgogICAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGJvb2wgX192YWx1ZSwKICAgICAgICAgICAgICBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZl
Y3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAgewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAg
ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9fdmFsdWUgPyB+MCA6
IDApOwogICAgfQoKICAgIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgICA6IF9C
dmVjdG9yX2Jhc2U8X0FsbG9jPihhbGxvY2F0b3JfdHlwZSgpKQogICAgewogICAgICBfTV9pbml0
aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us
IDApOwogICAgfQoKICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCkgOiBfQnZlY3Rvcl9iYXNl
PF9BbGxvYz4oX194LmdldF9hbGxvY2F0b3IoKSkgewogICAgICBfTV9pbml0aWFsaXplKF9feC5z
aXplKCkpOwogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsKICAg
IH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlhbGl6
ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsKICAg
ICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9v
Zl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJz
dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxs
b2M+KF9fYSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJ
dGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0
Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgfnZlY3RvcigpIHsg
fQoKICAgIHZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194KSB7CiAgICAgIGlmICgm
X194ID09IHRoaXMpIHJldHVybiAqdGhpczsKICAgICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0
eSgpKSB7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2luaXRpYWxpemUoX194
LnNpemUoKSk7CiAgICAgIH0KICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdp
bigpKTsKICAgICAgX01fZmluaXNoID0gYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6
ZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoKCgogICAgdm9pZCBfTV9maWxsX2Fz
c2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAg
ICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAw
KTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsKICAgICAgfQogICAg
ICBlbHNlIHsKICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAgICAgZmls
bChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgICAg
fQogICAgfQoKICAgIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7IF9NX2ZpbGxf
YXNzaWduKF9fbiwgX194KTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICAgIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y
Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3Qs
IF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdl
cj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192
YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwgKGJv
b2wpIF9fdmFsKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogICAgdm9pZCBf
TV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg
X19mYWxzZV90eXBlKQogICAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0
b3JfdGFnKSB7CiAgICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICAgICAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQog
ICAgICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAg
ICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQo
KSwgX19maXJzdCwgX19sYXN0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgICAgIGRpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogICAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICAg
ICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgICAgIGVs
c2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFk
dmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4o
KSk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgICAgfQogICAgfQoK
ICAgIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlmIChjYXBhY2l0eSgpIDwg
X19uKSB7CiAgICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAg
ICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVuZCgpLCBpdGVyYXRvcihfX3EsIDApKTsK
ICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3Es
IDApOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09SRF9CSVQg
LSAxKS9fX1dPUkRfQklUOwogICAgICB9CiAgICB9CgogICAgcmVmZXJlbmNlIGZyb250KCkgeyBy
ZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0
dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAx
KTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0g
MSk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2gu
X01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAg
ICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogICAgfQogICAgdm9p
ZCBzd2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAgc3RkOjpzd2FwKF9NX3N0
YXJ0LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmlu
aXNoKTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0
b3JhZ2UpOwogICAgfQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJv
b2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9u
IC0gYmVnaW4oKTsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdl
ICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAg
ICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgICByZXR1
cm4gYmVnaW4oKSArIF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4K
ICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24s
IF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7
CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAgICB9CgogICAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRl
cmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBf
X2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRp
b24sCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVy
YXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bv
c2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB2b2lkIF9N
X2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194
KSB7CiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAoY2FwYWNpdHkoKSAtIHNp
emUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBf
TV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9u
LCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgICAgX01fZmlu
aXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAg
IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgdW5z
aWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9f
aSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAg
ZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlv
biwgZW5kKCksIF9faSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICBfTV9kZWFsbG9j
YXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRf
QklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7
CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXpl
X3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBfTV9maWxsX2luc2VydChfX3Bvc2l0aW9uLCBf
X24sIF9feCk7CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICAg
IGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgICAgaWYgKF9fcG9zaXRp
b24gKyAxICE9IGVuZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bv
c2l0aW9uKTsKICAgICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJuIF9fcG9zaXRpb247CiAg
ICB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3Qp
IHsKICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsKICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6
ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAg
ICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwgZW5kKCkp
OwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBf
X3gpOwogICAgfQogICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKHVuc2lnbmVkIGludCogX19w
ID0gX01fc3RhcnQuX01fcDsgX19wICE9IF9NX2VuZF9vZl9zdG9yYWdlOyArK19fcCkKICAgICAg
ICAqX19wID0gfipfX3A7CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwg
ZW5kKCkpOyB9CiAgfTsKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsK
Cn0KIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rv
ci5oIiAyIDMKIyA0NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j
YWxlX2ZhY2V0cy50Y2MiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4KICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19v
dGhlcikKICAgIHsKICAgICAgbG9jYWxlIF9fY29weSgqdGhpcyk7CiAgICAgIF9fY29weS5fTV9p
bXBsLT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9GYWNldDo6aWQpOwogICAg
ICByZXR1cm4gX19jb3B5OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIGxvY2FsZTo6b3BlcmF0
b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fczIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgc3RkOjpjb2xsYXRlPF9D
aGFyVD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlKiBfX2Zjb2xs
ID0gJnVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4gKF9fZmNv
bGwtPmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBfX3MyLmRhdGEoKSArIF9f
czIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
IGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewog
ICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0OwogICAg
ICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pbmRleDsKICAgICAgX192ZWNfZmFjZXQqIF9f
ZmFjZXQgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIGNvbnN0IGxvY2FsZTo6ZmFj
ZXQqIF9fZnAgPSAoKl9fZmFjZXQpW19faV07CiAgICAgIGlmIChfX2ZwID09IDAgfHwgX19pID49
IF9fZmFjZXQtPnNpemUoKSkKICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9j
KSB0aHJvdygpCiAgICB7CiAgICAgIHR5cGVkZWYgbG9jYWxlOjpfSW1wbDo6X192ZWNfZmFjZXQg
X192ZWNfZmFjZXQ7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2luZGV4OwogICAg
ICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAg
cmV0dXJuIChfX2kgPCBfX2ZhY2V0LT5zaXplKCkgJiYgKCpfX2ZhY2V0KVtfX2ldICE9IDApOwog
ICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfQ2hhclQ+
CiAgICBfSW5JdGVyCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIgX19zLCBfSW5JdGVyIF9f
ZW5kLCBpbnQgX19udGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+KiBfX3RhcmdldHMsCiAgICAgICAgICAgICAgICAgICAgIGludCogX19tYXRjaGVz
LCBpbnQmIF9fcmVtYWluLCBib29sJiBfX2VvZikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICBfX2VvZiA9IGZhbHNlOwogICAgICBm
b3IgKGludCBfX3RpID0gMDsgX190aSA8IF9fbnRhcmdzOyArK19fdGkpCiAgICAgICAgX19tYXRj
aGVzW19fdGldID0gX190aTsKICAgICAgX19yZW1haW4gPSBfX250YXJnczsKICAgICAgc2l6ZV90
IF9fcG9zID0gMDsKICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBpbnQgX190aSA9IDA7CiAg
ICAgICAgICB3aGlsZSAoX190aSA8IF9fcmVtYWluICYmIF9fcG9zID09IF9fdGFyZ2V0c1tfX21h
dGNoZXNbX190aV1dLnNpemUoKSkKICAgICAgICAgICAgKytfX3RpOwogICAgICAgICAgaWYgKF9f
dGkgPT0gX19yZW1haW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MgPT0g
MCkgX19yZW1haW4gPSAwOwogICAgICAgICAgICAgIHJldHVybiBfX3M7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGlmIChfX3MgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZW9mID0gdHJ1ZTsKICAg
ICAgICAgIGJvb2wgX19tYXRjaGVkID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGludCBfX3RpMiA9
IDA7IF9fdGkyIDwgX19yZW1haW47ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0
IF9fc3RyaW5nX3R5cGUmIF9fdGFyZ2V0ID0gX190YXJnZXRzW19fbWF0Y2hlc1tfX3RpMl1dOwog
ICAgICAgICAgICAgIGlmIChfX3BvcyA8IF9fdGFyZ2V0LnNpemUoKSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgaWYgKF9fZW9mIHx8IF9fdGFyZ2V0W19fcG9zXSAhPSAqX19z
KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tf
X3RpMl0gPSBfX21hdGNoZXNbLS1fX3JlbWFpbl07CiAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKytfX3RpMjsKICAgICAgICAg
ICAgfQogICAgICAgICAgaWYgKF9fbWF0Y2hlZCkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICsrX19zOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIGZv
ciAoaW50IF9fdGkzID0gMDsgX190aTMgPCBfX3JlbWFpbjspCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBpZiAoX19wb3MgPiBfX3RhcmdldHNbX19tYXRjaGVzW19fdGkzXV0uc2l6ZSgpKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX190aTNdID0gX19t
YXRjaGVzWy0tX19yZW1haW5dOwogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICArK19fdGkzOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICB3aGlsZSAoX19yZW1haW4pOwogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9Gb3JtYXRfY2Fj
aGUoKQogICAgOiBfTV92YWxpZCh0cnVlKSwgX01fdXNlX2dyb3VwaW5nKGZhbHNlKQogICAgeyB9
CgogIHRlbXBsYXRlPD4KICAgIF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsK
CiAgdGVtcGxhdGU8PgogICAgX0Zvcm1hdF9jYWNoZTx3Y2hhcl90Pjo6X0Zvcm1hdF9jYWNoZSgp
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBfRm9ybWF0X2NhY2hl
PF9DaGFyVD46Ol9NX3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQogICAgewogICAgICBsb2NhbGUg
X19sb2MgPSBfX2lvLmdldGxvYyAoKTsKICAgICAgbnVtcHVuY3Q8X0NoYXJUPiBjb25zdCYgX19u
cCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfTV90cnVlbmFt
ZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgX01fZmFsc2VuYW1lID0gX19ucC5mYWxzZW5hbWUo
KTsKICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICAgICBf
TV9kZWNpbWFsX3BvaW50ID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CiAgICAgIF9NX2dyb3VwaW5n
ID0gX19ucC5ncm91cGluZygpOwogICAgICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5z
aXplKCkgIT0gMCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsKICAgICAgX01fdmFsaWQg
PSB0cnVlOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQKICAg
IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6CiAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQg
X19ldiwgaW9zX2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQogICAgewogICAgICB2b2lk
KiYgX19wID0gX19pb3MucHdvcmQoX19peCk7CiAgICAgIHN3aXRjaCAoX19ldikKICAgICAgICB7
CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6ZXJhc2VfZXZlbnQ6CiAgICAgICAgICBkZWxldGUgc3Rh
dGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsKICAgICAgICAgIF9fcCA9IDA7
CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIGlvc19iYXNlOjpjb3B5Zm10X2V2ZW50OgoK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcCA9IG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFy
VD47IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAgICAgICBicmVh
azsKICAgICAgICBjYXNlIGlvc19iYXNlOjppbWJ1ZV9ldmVudDoKICAgICAgICAgIHN0YXRpY19j
YXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+KF9fcCktPl9NX3ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioKICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1Nf
Z2V0KGlvc19iYXNlJiBfX2lvcykKICAgIHsKICAgICAgaWYgKCFfU19wd29yZF9peCkKICAgICAg
ICBfU19wd29yZF9peCA9IGlvc19iYXNlOjp4YWxsb2MoKTsKICAgICAgdm9pZComIF9fcCA9IF9f
aW9zLnB3b3JkKF9TX3B3b3JkX2l4KTsKCgogICAgICBpZiAoX19wID09IDApCiAgICAgICAgewog
ICAgICAgICAgYXV0b19wdHI8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+ID4gX19hcChuZXcgX0Zvcm1h
dF9jYWNoZTxfQ2hhclQ+KTsKICAgICAgICAgIF9faW9zLnJlZ2lzdGVyX2NhbGxiYWNrKCZfRm9y
bWF0X2NhY2hlPF9DaGFyVD46Ol9TX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1NfcHdvcmRfaXgpOwogICAgICAgICAgX19wID0gX19hcC5yZWxlYXNlKCk7CiAg
ICAgICAgfQogICAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fbmNwID0gc3RhdGljX2Nhc3Q8
X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsKICAgICAgaWYgKCFfX25jcC0+X01fdmFsaWQp
CiAgICAgICAgX19uY3AtPl9NX3BvcHVsYXRlKF9faW9zKTsKCiAgICAgIHJldHVybiBfX25jcDsK
ICAgIH0KIyAyNTAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgdm9pZAogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJh
Y3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYgLAogICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgLCBjaGFyKiAsCiAgICAgICAgICAgICAgIGludCYgLCBib29sICkgY29uc3QK
ICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bV9nZXQ8Y2hhciwgaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3QoaXN0cmVhbWJ1Zl9pdGVy
YXRvcjxjaGFyPiBfX2JlZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFy
PiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwKICAgICAgICAgICAgICAgYm9vbCBf
X2ZwKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgIHsKCiAg
ICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQogICAgICAgIHsK
CgoKCgoKICAgICAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsKICAgICAgICAgIGludCBf
X2Jhc2U7CiAgICAgICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
eHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAg
ICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgICAgICBsb25nIF9fbCA9IHN0cnRv
bChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9z
X2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgJiYgX19sIDw9IDEKICAgICAgICAgICAgICAm
JiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xv
Y2F0aW9uICgpKSA9PSAwKQogICAgICAgICAgICBfX3YgPSBfX2w7CiAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBl
bHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBfRm9ybWF0X2NhY2hlPGNoYXJfdHlwZT4g
X19mY2FjaGVfdHlwZTsKICAgICAgICAgIF9fZmNhY2hlX3R5cGUqIF9fZm10ID0gX19mY2FjaGVf
dHlwZTo6X1NfZ2V0KF9faW8pOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWUgPSBf
X2ZtdC0+X01fdHJ1ZW5hbWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19m
YWxzZSA9IF9fZm10LT5fTV9mYWxzZW5hbWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IHNpemVf
dCBfX3RydWVsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX190cnVlKSAtIDE7CiAgICAgICAg
ICBjb25zdCBzaXplX3QgX19mYWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2ZhbHNl
KSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19wb3MgPSAwOyBfX2JlZyAhPSBfX2VuZDsg
KytfX3BvcykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19i
ZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX2MgPT0gX19mYWxzZVtfX3Bvc107
CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1ZVtfX3Bvc107CiAgICAg
ICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVz
dGYgJiYgX19wb3MgPT0gX19mYWxzZWxlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX3BvcyA9PSBfX3RydWVsZW4pCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBpZiAo
X19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAg
ICAgICAgfQoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc2hv
cnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAg
ICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAg
KCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgX19sID0gc3RydG9sKF9feHRy
YywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWls
Yml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAn
ICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAgJiYgX19sID49ICgtMzI3
NjctMSkgJiYgX19sIDw9IDMyNzY3KQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHNob3J0Pihf
X2wpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAg
ICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgaW50JiBfX3YpIGNvbnN0CiAg
ICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsK
ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz
ZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9f
YmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAm
JiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xv
Y2F0aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX2wgPj0gKC0yMTQ3NDgzNjQ3IC0xKSAmJiBf
X2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbCk7CiAg
ICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVy
biBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n
ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAgewoK
CgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAg
X01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFs
c2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7
CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nh
bml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fbDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9
IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNb
MzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBf
X3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgbG9u
ZyBfX2xsID0gc3RydG9sbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEo
X19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRy
YyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAg
ICAgICAgX192ID0gX19sbDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
Z25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsn
XDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5
OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgdW5zaWduZWQgbG9uZyBf
X3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19l
cnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAm
JiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDAKICAgICAg
ICAgICYmIF9fdWwgPD0gNjU1MzUpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQg
aW50JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9Owog
ICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAg
ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWwgPSBz
dHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlv
c19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nh
bml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAgJiYg
X191bCA8PSAoMjE0NzQ4MzY0NyAqIDJVICsgMSkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu
c2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdID0g
eydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwg
X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5p
dHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25n
IF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShf
X2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJj
ICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAg
ICAgICBfX3YgPSBfX3VsOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh
aWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwg
X0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2ln
bmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09
IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2Fu
aXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgdW5zaWduZWQgbG9u
ZyBsb25nIF9fdWxsID0gc3RydG91bGwoX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAg
IGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAh
PSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9
PSAwKQogICAgICAgIF9fdiA9IF9fdWxsOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0
PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydc
MCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsK
ICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CgogICAgICBmbG9hdCBfX2YgPSBzdHJ0
b2YoX194dHJjLCAmX19zYW5pdHkpOwoKCgogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm
YWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAn
XDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX2Y7CiAg
ICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVy
biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl
dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QKICAgIHsK
CgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAg
IF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIHRy
dWUpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gMDsKICAgICAgZG91YmxlIF9fZCA9IHN0cnRvZChfX3h0cmMsICZfX3Nhbml0eSk7CiAgICAg
IGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAh
PSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9
PSAwKQogICAgICAgIF9fdiA9IF9fZDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf
Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09
IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAgICAgY2hhciogX19zYW5p
dHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIGRvdWJsZSBf
X2xkID0gc3RydG9sZChfX3h0cmMsICZfX3Nhbml0eSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9z
X2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2Fu
aXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9
IF9fbGQ7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAg
ICAgIHJldHVybiBfX2JlZzsKICAgIH0KIyA2NzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYg
X192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10Zmxh
Z3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwogICAgICBmbXRmbGFncyBf
X2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNl
OjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAoaW9zX2Jh
c2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKCgoKICAgICAgY2hhciBfX3h0cmNbMzJd
PSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5k
LCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nh
bml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIHZvaWQqIF9fdnAg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jh
c2UpKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYm
IF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9j
YXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX192cDsKICAgICAgZWxzZQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwogICAg
ICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlcj4KICAgIGlubGluZSBfT3V0SXRlcgogICAgX19wYWQoX091dEl0ZXIgX19z
LCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1JhSXRlcj4KICAgIF9SYUl0ZXIKICAgIF9fcGFkKF9SYUl0ZXIgX19z
LCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nLAogICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZpbGxfbihfX3MsIF9fZmlsbCk7CiAgICAgIHJldHVy
biBfX3MgKyBfX3BhZGRpbmc7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9PdXRJdGVyLCB0eXBlbmFtZSBfVGFnPgogICAgX091dEl0ZXIKICAgIF9fcGFkKF9P
dXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywgX1RhZykKICAgIHsKICAg
ICAgd2hpbGUgKC0tX19wYWRkaW5nID49IDApIHsgKl9fcyA9IF9fZmlsbDsgKytfX3M7IH0KICAg
ICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFkKF9PdXRJdGVyIF9fcywg
X0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZykKICAgIHsKICAgICAgcmV0dXJuIF9fcGFkKF9f
cywgX19maWxsLCBfX3BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X091dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKICAgIH0KCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg
X19wYWRfbnVtZXJpYyhfT3V0SXRlciBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyAsCiAgICAgICAg
ICAgICAgICAgIF9DaGFyVCAsIGludCAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCog
LCBfQ2hhclQgY29uc3QqICwKICAgICAgICAgICAgICAgICAgX0NoYXJUIGNvbnN0KiApCiAgewoK
ICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4KICAgIF9fcGFkX251bWVyaWMob3N0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fcywgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MsCiAgICAg
ICAgICAgICAgICAgIF9DaGFyVCBfX2ZpbGwsIGludCBfX3dpZHRoLCBfQ2hhclQgY29uc3QqIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19taWRkbGUsIF9DaGFyVCBj
b25zdCogX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJUPiBfX291dF9pdGVyOwogICAgICBpbnQgX19wYWRkaW5nID0gX193aWR0aCAtIChfX2xhc3Qg
LSBfX2ZpcnN0KTsKICAgICAgaWYgKF9fcGFkZGluZyA8IDApCiAgICAgICAgX19wYWRkaW5nID0g
MDsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19mbGFncyAmIGlvc19iYXNl
OjphZGp1c3RmaWVsZDsKICAgICAgYm9vbCBfX3Rlc3RmaWVsZCA9IF9fcGFkZGluZyA9PSAwIHx8
IF9fYWZsYWdzID09IGlvc19iYXNlOjpsZWZ0CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBf
X2FmbGFncyA9PSBpb3NfYmFzZTo6aW50ZXJuYWw7CgoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19t
aWRkbGUpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3Rlc3RmaWVsZCkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcpOwogICAgICAgICAg
ICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNvcHkoX19maXJzdCwg
X19taWRkbGUsIF9fcyk7CiAgICAgICAgfQogICAgICBfX291dF9pdGVyIF9fczIgPSBfX3M7Cgog
ICAgICBpZiAoX19wYWRkaW5nICYmIF9fYWZsYWdzICE9IGlvc19iYXNlOjpsZWZ0KQogICAgICAg
IHsKICAgICAgICAgIF9fcGFkKF9fczIsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgICAgIF9f
cGFkZGluZyA9IDA7CiAgICAgICAgfQogICAgICBfX291dF9pdGVyIF9fczMgPSBjb3B5KF9fbWlk
ZGxlLCBfX2xhc3QsIF9fczIpOwogICAgICBpZiAoX19wYWRkaW5nKQogICAgICAgIF9fcGFkKF9f
czMsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgcmV0dXJuIF9fczM7CiAgICB9CgogIHRlbXBs
YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAg
IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKICAgIHsKICAg
ICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRfY2FjaGU8X0No
YXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9f
aW8uZmxhZ3MoKTsKCiAgICAgIGlmICgoX19mbGFncyAmIGlvc19iYXNlOjpib29sYWxwaGEpID09
IDApCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192OwogICAgICAg
ICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIGZhbHNlLCBfX3V2
KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fZmlyc3Q7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbGFzdDsKICAgICAgICAg
IGlmIChfX3YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2ZpcnN0ID0gX19mbXQtPl9N
X3RydWVuYW1lLmRhdGEoKTsKICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQt
Pl9NX3RydWVuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9mYWxzZW5hbWUuZGF0YSgp
OwogICAgICAgICAgICAgIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01fZmFsc2VuYW1lLnNp
emUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcyk7
CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fZ3JvdXBfZGlnaXRzKF9DaGFyVCogX19zLCBf
Q2hhclQgX19ncnNlcCwgY2hhciBjb25zdCogX19ncm91cGluZywKICAgICAgICAgICAgICAgICAg
ICBjaGFyIGNvbnN0KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgX0NoYXJUIGNvbnN0KiBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBf
X2ZpcnN0ID4gKl9fZ3JvdXBpbmcpCiAgICAgICAgewogICAgICAgICAgX19zID0gX19ncm91cF9k
aWdpdHMoX19zLCBfX2dyc2VwLAogICAgICAgICAgICAgIChfX2dyb3VwaW5nICsgMSA9PSBfX2dy
ZW5kID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwKICAgICAgICAgICAgICBfX2dyZW5k
LCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19ncm91cGluZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19s
YXN0IC0gKl9fZ3JvdXBpbmc7CiAgICAgICAgICAqX19zKysgPSBfX2dyc2VwOwogICAgICAgIH0K
ICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAqX19zKysgPSAqX19maXJzdCsrOwogICAgICAg
IH0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0dXJuIF9fczsKICAg
IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIsIHR5cGVu
YW1lIF9WYWx1ZVQ+CiAgICBfT3V0SXRlcgogICAgX19vdXRwdXRfaW50ZWdlcihfT3V0SXRlciBf
X3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBib29sIF9fbmVnLAogICAgICAgICAg
ICAgIF9WYWx1ZVQgX192KQogICAgewoKICAgICAgY29uc3QgbG9uZyBfTV9yb29tID0gbnVtZXJp
Y19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICogMiArIDQ7CiAgICAgIF9DaGFyVCBfX2RpZ2l0
c1tfTV9yb29tXTsKICAgICAgX0NoYXJUKiBfX2Zyb250ID0gX19kaWdpdHMgKyBfTV9yb29tOwog
ICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKICAgICAgY29u
c3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6
X1NfZ2V0KF9faW8pOwogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxlID0gX19mbXQtPl9TX2xpdGVy
YWxzICsgX19mbXQtPl9TX2RpZ2l0czsKCiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2Vm
aWVsZCA9IChfX2ZsYWdzICYgX19pby5iYXNlZmllbGQpOwogICAgICBfQ2hhclQqIF9fc2lnbl9l
bmQgPSBfX2Zyb250OwogICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAg
ICAgICB7CiAgICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2UpCiAgICAg
ICAgICAgIF9fdGFibGUgKz0gMTY7CiAgICAgICAgICBkbwogICAgICAgICAgICAqLS1fX2Zyb250
ID0gX190YWJsZVtfX3YgJiAxNV07CiAgICAgICAgICB3aGlsZSAoKF9fdiA+Pj0gNCkgIT0gMCk7
CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICAgIGlmIChfX2ZsYWdzICYg
aW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKi0tX19mcm9u
dCA9IF9fZm10LT5fU19saXRlcmFsc1tfX2ZtdC0+X1NfeCArCiAgICAgICAgICAgICAgICAgICAg
ICAgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAxIDogMCldOwogICAgICAgICAg
ICAgICotLV9fZnJvbnQgPSBfX3RhYmxlWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIHsKICAgICAg
ICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlW19fdiAmIDddOwogICAgICAg
ICAgd2hpbGUgKChfX3YgPj49IDMpICE9IDApOwogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3Nf
YmFzZTo6c2hvd2Jhc2UKICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxjaGFyPigqX19mcm9u
dCkgIT0gX190YWJsZVswXSkKICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbMF07CiAg
ICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg
ICB7CgogICAgICAgICAgZG8KICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbX192ICUg
MTBdOwogICAgICAgICAgd2hpbGUgKChfX3YgLz0gMTApICE9IDApOwogICAgICAgICAgX19zaWdu
X2VuZCA9IF9fZnJvbnQ7CgogICAgICAgICAgaWYgKF9fbmVnIHx8IChfX2ZsYWdzICYgaW9zX2Jh
c2U6OnNob3dwb3MpKQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX19mbXQtPl9TX2xpdGVyYWxz
W19fZm10LT5fU19wbHVzIC0gX19uZWddOwogICAgICAgIH0KCgogICAgICBpZiAoIV9fZm10LT5f
TV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkKICAgICAgICByZXR1cm4gY29weShfX2Zy
b250LCBfX2RpZ2l0cyArIF9NX3Jvb20sIF9fcyk7CgogICAgICBpZiAoIV9fZm10LT5fTV91c2Vf
Z3JvdXBpbmcpCiAgICAgICAgcmV0dXJuIF9fcGFkX251bWVyaWMoX19zLCBfX2ZsYWdzLCBfX2Zp
bGwsIF9faW8ud2lkdGgoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mcm9udCwg
X19zaWduX2VuZCwgX19kaWdpdHMgKyBfTV9yb29tKTsKCiAgICAgIF9DaGFyVCogX19wID0gX19k
aWdpdHM7CiAgICAgIHdoaWxlIChfX2Zyb250IDwgX19zaWduX2VuZCkKICAgICAgICAqX19wKysg
PSAqX19mcm9udCsrOwogICAgICBjb25zdCBjaGFyKiBfX2dyID0gX19mbXQtPl9NX2dyb3VwaW5n
LmRhdGEoKTsKICAgICAgX19mcm9udCA9IF9fZ3JvdXBfZGlnaXRzKF9fcCwgX19mbXQtPl9NX3Ro
b3VzYW5kc19zZXAsIF9fZ3IsCiAgICAgICAgX19nciArIF9fZm10LT5fTV9ncm91cGluZy5zaXpl
KCksIF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CiAgICAgIHJldHVybiBfX3BhZF9u
dW1lcmljKF9fcywgX19mbGFncywgX19maWxsLCBfX2lvLndpZHRoKDApLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2RpZ2l0cywgX19wLCBfX2Zyb250KTsKICAgIH0KCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh
c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgewogICAgICB1
bnNpZ25lZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgIGJvb2wgX19uZWcgPSBmYWxzZTsKICAgICAg
aWYgKF9fdiA8IDApCiAgICAgICAgewogICAgICAgICAgX19uZWcgPSB0cnVlOwogICAgICAgICAg
X191diA9IC1fX3V2OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19z
LCBfX2lvLCBfX2ZpbGwsIF9fbmVnLCBfX3V2KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hh
clQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8s
IGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAg
ICB7IHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxsLCBmYWxzZSwgX192
KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRl
cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9f
dikgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdXYgPSBfX3Y7CiAgICAg
IGJvb2wgX19uZWcgPSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAgICAgICAgewogICAgICAg
ICAgX19uZWcgPSB0cnVlOwogICAgICAgICAgX191diA9IC1fX3V2OwogICAgICAgIH0KICAgICAg
cmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2IsIF9fZmlsbCwgX19uZWcsIF9fdXYpOwog
ICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg
IF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX19vdXRwdXRfaW50ZWdl
cihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsIF9fdik7IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0
ZXIKICAgIF9fb3V0cHV0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFy
VCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3Qg
X19zbGVuKQogICAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJULCBfVHJhaXRzPgogICAgX19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBfQ2hh
clQgX19maWxsLCBjb25zdCBjaGFyKiBfX3NwdHIsIHNpemVfdCBfX3NsZW4pCiAgICB7CiAgICAg
IHNpemVfdCBfX3BhZGRpbmcgPSBfX2lvLndpZHRoKCkgPiBzdHJlYW1zaXplKF9fc2xlbikgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgX19pby53aWR0aCgpIC1fX3NsZW4gOiAwOwogICAgICBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBf
X2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGlvc19iYXNlOjpm
bXRmbGFncyBfX2FkamZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxk
OwogICAgICBjb25zdCBjaGFyKiBjb25zdCBfX2VwdHIgPSBfX3NwdHIgKyBfX3NsZW47CgogICAg
ICBpZiAoX19hZGpmaWVsZCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCiAgICAgICB7CgogICAgICAg
ICBpZiAoX19zcHRyIDwgX19lcHRyICYmICgqX19zcHRyID09ICcrJyB8fCAqX19zcHRyID09ICct
JykpCiAgICAgICAgICAgewogICAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19zcHRyKTsK
ICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgKytfX3NwdHI7CiAgICAgICAgICAgfQog
ICAgICAgICBfX3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgICAgX19w
YWRkaW5nID0gMDsKICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGpmaWVsZCAhPSBpb3NfYmFz
ZTo6bGVmdCkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19w
YWRkaW5nKTsKICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgfQoKICAgICAgY2hhciBf
X2RlY2ltYWxfcG9pbnQgPSAqKGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludCk7CiAgICAgIGNv
bnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hlPF9DaGFyVD46
Ol9TX2dldChfX2lvKTsKICAgICAgZm9yICg7IF9fc3B0ciAhPSBfX2VwdHI7ICsrX19zLCArK19f
c3B0cikKICAgICAgIHsKCiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVjaW1hbF9wb2ludCkK
ICAgICAgICAgICBfX3MgPSBfX2ZtdC0+X01fZGVjaW1hbF9wb2ludDsKCiAgICAgICAgIGVsc2UK
ICAgICAgICAgICBfX3MgPSBfX2N0LndpZGVuKCpfX3NwdHIpOwogICAgICAgfQoKICAgICAgaWYg
KF9fcGFkZGluZykKICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAg
X19pby53aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgYm9vbAogIF9fYnVpbGRf
ZmxvYXRfZm9ybWF0KGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2RpZmll
ciwKICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7CgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51
bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAogICAgewogICAg
ICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0czxkb3VibGU+Ojpk
aWdpdHMxMCArIDM7CiAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5wcmVjaXNpb24oKTsK
CiAgICAgIGlmIChfX3ByZWMgPiBfX21heF9wcmVjKQogICAgICAgIF9fcHJlYyA9IF9fbWF4X3By
ZWM7CgogICAgICBjaGFyIF9fc2J1ZltfX21heF9wcmVjICogMl07CiAgICAgIHNpemVfdCBfX3Ns
ZW47CgogICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgIGlmIChfX2J1aWxkX2Zsb2F0X2Zvcm1h
dChfX2lvLCBfX2ZidWYsIDAsIF9fcHJlYykpCiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3Ni
dWYsIF9fZmJ1ZiwgX19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAgX19zbGVuID0gc3By
aW50ZihfX3NidWYsIF9fZmJ1ZiwgX192KTsKCiAgICAgIHJldHVybiBfX291dHB1dF9mbG9hdChf
X3MsIF9faW8sIF9fZmlsbCwgX19zYnVmLCBfX3NsZW4pOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg
X19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0
CiAgICB7CiAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19tYXhfcHJlYyA9IG51bWVyaWNfbGltaXRz
PGxvbmcgZG91YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9f
aW8ucHJlY2lzaW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhfcHJlYykKICAgICAgICBf
X3ByZWMgPSBfX21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOwog
ICAgICBzaXplX3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZdOwoKICAgICAgaWYgKF9f
YnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBfX3ByZWMpKQogICAgICAgIF9f
c2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQog
ICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7CgogICAgICByZXR1
cm4gX19vdXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1ZiwgX19zbGVuKTsKICAg
IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf
T3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29u
c3Qgdm9pZCogX192KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGlvc19iYXNlOjpmbXRmbGFn
cyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGZt
dGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZp
ZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwg
aW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8
IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CiAgICAgIHRyeSB7CiAgICAg
ICAgX091dEl0ZXIgX19zMiA9IF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIGZh
bHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICBfX2lvLmZsYWdzKF9fZm10KTsKICAgICAgICBy
ZXR1cm4gX19zMjsKICAgICAgfQogICAgICBjYXRjaCAoLi4uKSB7CiAgICAgICAgX19pby5mbGFn
cyhfX2ZtdCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50PgogICAgc3RydWN0IF9XZWVrZGF5
bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVjdCBfV2Vla2RheW5h
bWVzPGNoYXIsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IF9TX25hbWVz
WzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3QgY2hhciogY29u
c3QKICAgIF9XZWVrZGF5bmFtZXM8Y2hhciwgX0R1bW15Pjo6X1NfbmFtZXNbMTRdID0KICAgIHsK
ICAgICAgIlN1biIsICJTdW5kYXkiLAogICAgICAiTW9uIiwgIk1vbmRheSIsICJUdWUiLCAiVHVl
c2RheSIsICJXZWQiLCAiV2VkbmVzZGF5IiwKICAgICAgIlRodSIsICJUaHVyc2RheSIsICJGcmki
LCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSIKICAgIH07CiMgMTEzNSAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9EdW1teSA9IGludD4KICAgIHN0cnVjdCBfTW9u
dGhuYW1lczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgc3RydWN0IF9Nb250aG5h
bWVzPGNoYXIsX0R1bW15PgogICAgeyBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgX1NfbmFtZXNb
MjRdOyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCBjaGFyKiBjb25z
dAogICAgX01vbnRobmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQogICAgewogICAg
ICAiSmFuIiwgIkphbnVhcnkiLCAiRmViIiwgIkZlYnJ1YXJ5IiwgIk1hciIsICJNYXJjaCIsCiAg
ICAgICJBcHIiLCAiQXByaWwiLCAiTWF5IiwgIk1heSIsICJKdW4iLCAiSnVuZSIsCiAgICAgICJK
dWwiLCAiSnVseSIsICJBdWciLCAiQXVndXN0IiwgIlNlcCIsICJTZXB0ZW1iZXIiLAogICAgICAi
T2N0IiwgIk9jdG9iZXIiLCAiTm92IiwgIk5vdmVtYmVyIiwgIkRlYyIsICJEZWNlbWJlciIKICAg
IH07CiMgMTE2OCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl
X2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl
dF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAg
ICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNv
bnN0CiAgICB7CiAgICAgIGlmICghX01fZGF5bmFtZXMpCiAgICAgICAgewogICAgICAgICAgX01f
ZGF5bmFtZXMgPSBuZXcgYmFzaWNfc3RyaW5nPF9DaGFyVD5bMTRdOwogICAgICAgICAgZm9yIChp
bnQgX19pID0gMDsgX19pIDwgMTQ7ICsrX19pKQogICAgICAgICAgICBfTV9kYXluYW1lc1tfX2ld
ID0gX1dlZWtkYXluYW1lczxfQ2hhclQ+OjpfU19uYW1lc1tfX2ldOwogICAgICAgIH0KICAgICAg
Ym9vbCBfX2F0X2VvZiA9IGZhbHNlOwogICAgICBpbnQgX19yZW1haW4gPSAwOwogICAgICBpbnQg
X19tYXRjaGVzWzE0XTsKICAgICAgaXRlcl90eXBlIF9fb3V0ID0gX19tYXRjaF9wYXJhbGxlbChf
X3MsIF9fZW5kLCAxNCwgX01fZGF5bmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOwogICAgICBfX2VyciA9
IGlvc19iYXNlOjppb3N0YXRlKDApOwogICAgICBpZiAoX19hdF9lb2YpIF9fZXJyIHw9IF9faW8u
ZW9mYml0OwogICAgICBpZiAoX19yZW1haW4gPT0gMSB8fAogICAgICAgICAgX19yZW1haW4gPT0g
MiAmJiAoX19tYXRjaGVzWzBdPj4xKSA9PSAoX19tYXRjaGVzWzFdPj4xKSkKICAgICAgICBfX3Qt
PnRtX3dkYXkgPSAoX19tYXRjaGVzWzBdPj4xKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9
IF9faW8uZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxf
Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywgaXRl
cl90eXBlIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgewogICAgICBpZiAoIV9NX21v
bnRobmFtZXMpCiAgICAgICAgewogICAgICAgICAgX01fbW9udGhuYW1lcyA9IG5ldyBiYXNpY19z
dHJpbmc8X0NoYXJUPlsyNF07CiAgICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAyNDsg
KytfX2kpCiAgICAgICAgICAgIF9NX21vbnRobmFtZXNbX19pXSA9IF9Nb250aG5hbWVzPF9DaGFy
VD46Ol9TX25hbWVzW19faV07CiAgICAgICAgfQogICAgICBib29sIF9fYXRfZW9mID0gZmFsc2U7
CiAgICAgIGludCBfX3JlbWFpbiA9IDA7CiAgICAgIGludCBfX21hdGNoZXNbMjRdOwogICAgICBp
dGVyX3R5cGUgX19vdXQgPSBfX21hdGNoX3BhcmFsbGVsKCBfX3MsIF9fZW5kLCAyNCwgX01fbW9u
dGhuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXRj
aGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOwogICAgICBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KDApOwogICAgICBpZiAoX19hdF9lb2YpIF9fZXJyIHw9IF9faW8uZW9mYml0OwogICAgICBpZiAo
X19yZW1haW4gPT0gMSB8fAogICAgICAgICAgX19yZW1haW4gPT0gMiAmJiAoX19tYXRjaGVzWzBd
Pj4xKSA9PSAoX19tYXRjaGVzWzFdPj4xKSkKICAgICAgICBfX3QtPnRtX21vbiA9IChfX21hdGNo
ZXNbMF0+PjEpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gX19pby5mYWlsYml0OwogICAg
ICByZXR1cm4gX19vdXQ7CiAgICB9Cn0KIyA0MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0No
YXJULF9UcmFpdHM+JiBfX29zKQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3Mp
CiAgICB7CgogICAgICBpZiAoX01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgp
LT5mbHVzaCgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpf
X3BmKShfX29zdHJlYW1fdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBf
X3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgq
X19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3Bm
KCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYp
KGlvc19iYXNlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMp
OyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0
KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlz
LT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8
KGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZt
dGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAg
ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBp
ZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fbCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBf
X2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxl
ZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0
aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAg
ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpi
YXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jh
c2U6OmhleCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgX19sOwogICAgICAgICAgICAgICAgICAgICAgX19sID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19iID0g
X01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
IF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsK
ICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKQogICAgewogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0
aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAg
ICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbiku
ZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9f
bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01f
Y2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+
cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w
dXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo
aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9y
PDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzdHJlYW1zaXplIF9feHRy
Y3QgPSAwOwogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX3NiaW4gJiYgX19jZXJiKQog
ICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0
KTsKICAgICAgaWYgKCFfX3NiaW4gfHwgIV9feHRyY3QpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNo
YXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1
dGMoX19jKTsKICAgICAgICAgIGlmIChfX3B1dCAhPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUo
X19jKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBf
X3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0ID0gdGhp
cy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24p
CiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYg
KHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3Nf
dHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAgICB7CiAg
ICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBib29sIF9fdGVzdG9rID0g
dGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAgX19yZXQg
PSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpv
dXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9z
KQogICAgewogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAg
ICBpZiAoX190ZXN0b2spCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRo
aXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAg
ICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAg
IHsKICAgICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYg
KF9fdGVzdG9rKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5y
ZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlm
IChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShmYWlsYml0KTsKICAgICAgICB9CgogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgNDU3
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAg
IF9fcGFkX2NoYXIoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAg
ICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCiAgICAgICAgICAgICAg
IGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4pCiAg
ICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlw
ZSBpbnRfdHlwZTsKCiAgICAgIGludF90eXBlIF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4o
X19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIGNoYXJfdHlwZSogX19wYWRzID0gc3RhdGljX2Nh
c3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoY2hhcl90eXBlKSAqIF9fcGxl
bikpOwogICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBfX2lvcy5maWxs
KCkpOwoKICAgICAgY2hhcl90eXBlKiBfX2JlZzsKICAgICAgY2hhcl90eXBlKiBfX2VuZDsKICAg
ICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFz
ZTo6Zm10ZmxhZ3MgX19mbXQgPSBfX2lvcy5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxk
OwoKICAgICAgaWYgKF9fZm10ID09IGlvc19iYXNlOjpsZWZ0KQogICAgICAgIHsKCiAgICAgICAg
ICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAgICAgIF9fYmVn
bGVuID0gX19vbGRsZW47CiAgICAgICAgICBfX2VuZCA9IF9fcGFkczsKICAgICAgICB9CiAgICAg
IGVsc2UgaWYgKF9fZm10ID09IGlvc19iYXNlOjppbnRlcm5hbCkKICAgICAgICB7CgoKCiAgICAg
ICAgICB0eXBlZGVmIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiBfX2NhY2hlX3R5cGU7CiAgICAgICAg
ICBfX2NhY2hlX3R5cGUgY29uc3QqIF9fZm10ID0gX19jYWNoZV90eXBlOjpfU19nZXQoX19pb3Mp
OwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21pbnVzID0gdHJhaXRzX3R5cGU6OmZpbmQo
X19vbGRzLCBfX29sZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZm10LT5fU19taW51cyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fcGx1cyA9IHRyYWl0c190eXBlOjpmaW5kKF9fb2xkcywgX19vbGRsZW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19w
bHVzKTsKICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9fbWludXMgfHwgX19wbHVzOwogICAg
ICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX29sZHNbMF0gPT0gJzAnCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIChfX29sZHNbMV0gPT0gJ3gnIHx8IF9fb2xkc1sxXSA9PSAnWCcpOwoKICAg
ICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld3Nb
MF0gPSBfX29sZHNbMF07CiAgICAgICAgICAgICAgX19uZXdzWzFdID0gX19vbGRzWzFdOwogICAg
ICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAgICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNo
YXJfdHlwZSo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xk
bGVuIC0gX19tb2Q7CiAgICAgICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNpZ24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX21vZCArPSBfX3BsZW47CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3NpZ24g
PSBfX21pbnVzID8gX19taW51cyArIDE6IF9fcGx1cyArIDE7CiAgICAgICAgICAgICAgX19iZWcg
PSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICAgICAgX19iZWdsZW4g
PSBfX3NpZ24gLSBfX29sZHM7CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJf
dHlwZSo+KF9fc2lnbiArIF9fcGxlbik7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko
X19uZXdzICsgX19iZWdsZW4sIF9fcGFkcywgX19wbGVuKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAg
ICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3Rf
Y2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBl
bHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgX19iZWds
ZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19v
bGRzKTsKICAgICAgICB9CgogICAgICB0cmFpdHNfdHlwZTo6Y29weShfX25ld3MsIF9fYmVnLCBf
X2JlZ2xlbik7CiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2Vu
ZCwgX19uZXdsZW4gLSBfX2JlZ2xlbiAtIF9fbW9kKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
b3V0LCBfQ2hhclQgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6
OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291
dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0No
YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAg
ICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsK
ICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgJl9fYywgX193LCBfX2xlbik7CiAg
ICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRo
KDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0
cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgewogICAgICB0eXBlZGVm
IGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVu
YW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0
cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMg
PSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cgKyAxKSk7CiAgICAgICAg
ICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAx
OwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCAmX19jLCBfX3csIF9fbGVuKTsK
ICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lk
dGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25z
dCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz
ZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQu
d2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFy
VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgICAg
ICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVu
Z3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywg
X19sZW4pOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAg
IF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRl
KF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBl
OwoKCiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX19jdHJhaXRzX3R5cGU7CgogICAg
ICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fY2xlbiA9IF9fY3RyYWl0c190
eXBlOjpsZW5ndGgoX19zKTsKICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9D
aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkpKTsK
ICAgICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8PSBfX2NsZW47ICsrX19pKQogICAg
ICAgICAgICBfX3dzW19faV0gPSBfX291dC53aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hh
clQqIF9fc3RyID0gX193czsKCiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAg
ICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3Bh
ZHMsIF9fd3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsK
ICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0
aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0
cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAg
dHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAg
ICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciog
X19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAg
ICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFp
dHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgX19z
LCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAg
ICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291
dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwK
ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5
IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9
IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9D
aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAg
IHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkp
OwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAg
ICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAg
fQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywg
X19sZW4pOwogICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMgIT0g
X19sZW4pCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg
ICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KfQojIDI3OSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAzCiMgNDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMK
IyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0u
aCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9z
LmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
aXN0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9zdGRfbGltaXRzLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKCm5hbWVzcGFjZSBz
dGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj
bGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1Ry
YWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJh
aXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJU
LCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVt
X2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBl
ZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0
cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJh
c2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMt
PmluaXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoK
ICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0g
c3RyZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNz
IHNlbnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3Ry
ZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShp
b3NfYmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29s
JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9f
bik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9y
dCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19u
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYg
X19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBf
X24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYg
X19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxv
bmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihm
bG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJs
ZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91
YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZCom
IF9fcCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1
Zl90eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9p
ZCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAg
ICBnZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYg
X19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0
cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFt
X3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsg
cmV0dXJuIGdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2Rl
bGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVm
X3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIGdldChfX3NiLCB0aGlzLT53aWRlbignXG4nKSk7
IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVh
bV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAg
ICAgeyByZXR1cm4gZ2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19uID0gMSwgaW50X3R5
cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBpbnRfdHlwZQogICAgICBw
ZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJlYWQoY2hhcl90eXBlKiBf
X3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgcmVhZHNvbWUoY2hh
cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHVu
Z2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7CgogICAgICBwb3NfdHlwZQog
ICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhwb3Nf
dHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cob2ZmX3R5cGUsIGlvc19i
YXNlOjpzZWVrZGlyKTsKCiAgICBwcml2YXRlOgoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcj0oY29uc3QgX19pc3RyZWFtX3R5cGUmKTsKCiAgICAgIGJhc2ljX2lzdHJlYW0o
Y29uc3QgX19pc3RyZWFtX3R5cGUmKTsKCiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OnNlbnRyeQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh
aXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
X19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgX19pc3RyZWFtX3R5cGU6Ol9fY3R5
cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50
X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsKCiAg
ICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiBfTV9vazsgfQoKICAgIHByaXZhdGU6CiAgICAg
IGJvb2wgX01fb2s7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0
b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsK
CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVu
c2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9U
cmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFy
VCogX19zKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hh
cixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBf
X2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJl
dF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo
YXIsX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+
PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0KICAgIDog
cHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiwKICAgICAgcHVibGljIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKICAg
ICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4qIF9fc2IpCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90
eXBlKF9fc2IpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0o
KSB7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOwp9CgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMu
MC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDMKIyAxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDEgMwojIDMzICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9pc3RyZWFtLnRjYyIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMSAz
CiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNj
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoK
ICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19u
b3NraXB3cykKICAgIHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAg
IGlmIChfX2luLnRpZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAg
ICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFp
dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBl
ID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBf
X3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX19jICE9IF9fZW9mICYmIF9fY3R5
cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgX19jID0gX19z
Yi0+c25leHRjKCk7CgoKCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAg
ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICAgICAgICB9CiAg
ICAgICAgfQoKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIF9NX29rID0gdHJ1ZTsKICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX29rID0gZmFsc2U7CiAgICAgICAgICBfX2lu
LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv
cGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpCiAgICB7
CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv
cGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBf
X3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+
Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsK
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihib29sJiBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri
aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg
ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g
aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl
dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVu
c2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3Rh
dGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo
aXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGludCYgX19uKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg
ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg
ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp
b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9N
X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0
KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9u
ZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl
Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp
CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg
IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf
YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0
aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVk
IGxvbmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
Zm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz
LCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAg
ICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh
c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVj
a19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhp
cywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f
ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91
YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jh
c2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0
KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJy
LCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
IF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy
YXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgIHN0cmVhbXNpemUg
X194dHJjdCA9IDA7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVm
KCk7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fc2JvdXQg
JiYgX19jZXJiKQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19z
YmluLCBfX3Nib3V0KTsKICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBl
IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsK
ICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAg
aWYgKF9fYyAhPSBfX2VvZikKICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp
dCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0
KGNoYXJfdHlwZSYgX19jKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g
dHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhp
cy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmIChfX2J1ZnZhbCAhPSBfX2Vv
ZikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAg
ICAgICAgICAgICAgICAgX19jID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMSkK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0
IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwog
ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAg
ICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGJv
b2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rl
c3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBf
X24gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7
CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBf
X3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9m
OwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09
IF9fbiAtIDEpCiAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAg
ICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkK
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5
cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50
X3R5cGUgX19jOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+
cmRidWYoKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3Qg
aW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAg
ICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg
ICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29s
IF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0
ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0cHV0ID0gdHJ1ZTsK
CiAgICAgICAgICAgICAgd2hpbGUgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltCiAgICAgICAg
ICAgICAgICAgICAgJiYgKF9fdGVzdHB1dCA9IF9fc2Iuc3B1dGModHJhaXRzX3R5cGU6OnRvX2No
YXJfdHlwZShfX2MpKQogICAgICAgICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAg
ICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9m
ID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBf
X2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0g
fHwgIV9fdGVzdHB1dCkKICAgICAgICAgICAgICAgIF9fdGhpc19zYi0+c3B1dGJhY2tjKHRyYWl0
c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
ICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90
eXBlKF9fYykpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9NX2djb3VudCkK
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBl
KiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3Ni
LT5zYnVtcGMoKTsKICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICBjb25z
dCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsK
ICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAg
ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICB3aGls
ZSAoX01fZ2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAg
ICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0g
X19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lk
ZWxpbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9nY291bnQ7CiAgICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgLS1fTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fc2ItPnNw
dXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
Kl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAg
ICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAg
IGlmIChfX2NlcmIgJiYgX19uID4gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6
OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9m
ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNi
dW1wYygpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07
CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAg
ICAgIF9fbiA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7CiAg
ICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZiAmJiAh
X190ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2Nv
dW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAg
ICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rk
ZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBp
ZiAoKF9NX2djb3VudCA9PSBfX24gLSAxICYmICFfX3Rlc3Rlb2YpIHx8IF9fdGVzdGRlbGltKQog
ICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAg
aW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0
YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
bikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg
dHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fbiA+IDAp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg
ICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwog
ICAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAg
ICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgICAg
ICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAmJiAhX190ZXN0ZW9mKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19j
aGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAg
ICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgICAg
ICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgKl9f
cysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICAg
ICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf
dHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24g
PiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSB0aGlzLT5yZGJ1ZigpLT5pbl9hdmFp
bCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19udW0gIT0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6
ZT4oX19lb2YpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9f
bnVtID0gbWluKF9fbnVtLCBfX24pOwogICAgICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0g
dGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgICAgICB7CgoKICAgICAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg
ICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHB1dGJhY2soY2hhcl90eXBlIF9f
YykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj
b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBf
X3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAo
IV9fc2IgfHwgX19zYi0+c3B1dGJhY2tjKF9fYykgPT0gX19lb2YpCiAgICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICB1bmdldCh2b2lkKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g
dHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ig
PSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8fCBfX2VvZiA9PSBfX3Ni
LT5zdW5nZXRjKCkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGludAogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIHN5bmModm9pZCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwog
ICAgICAgICAgICAgIGlmICghX19zYiB8fCBfX3JldCA9PSBfX3NiLT5wdWJzeW5jKCkpCiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFt
ZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdGVsbGcodm9pZCkKICAgIHsKICAgICAgcG9zX3R5
cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCkt
PnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19y
ZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIF9N
X2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlv
c19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5
cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwoKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6
OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMt
PnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW4pOwoKCiAgICAg
ICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUg
X19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg
ICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRl
ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1i
dWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlw
ZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9D
aGFyVD4gX19jdHlwZV90eXBlOwogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsKCiAg
ICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoK
ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAgICAgICAg
ICAgIGlmIChfX251bSA9PSAwKQogICAgICAgICAgICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0
czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0
eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgICAgIGludF90eXBlIF9f
YyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g
X1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlz
KGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0g
X19jID09IF9fZW9mOwoKICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAt
IDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0c3ApCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsK
ICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAg
IF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICAgICAgX190ZXN0c3AgPSBf
X2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFj
a2MoX19jKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRl
KGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsK
CiAgICAgICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4u
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBf
X2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9U
cmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f
dHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpjaGFyX3R5cGUgX19jaGFyX3R5cGU7
CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICBjb25z
dCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAg
IGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19pbnRfdHlw
ZSBfX2M7CiAgICAgIGJvb2wgX190ZXN0ZW9mOwogICAgICBib29sIF9fdGVzdHNwOwoKICAgICAg
ZG8KICAgICAgICB7CiAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIF9f
dGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMo
Y3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgfQogICAgICB3aGlsZSAoIV9fdGVzdGVv
ZiAmJiBfX3Rlc3RzcCk7CgogICAgICBpZiAoIV9fdGVzdGVvZiAmJiAhX190ZXN0c3ApCiAgICAg
ICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRl
KGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBl
IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdf
dHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3Rl
ZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2lu
LCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJh
c2UoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0aCgpOwogICAgICAgICAg
X19zaXplX3R5cGUgX19uOwogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9f
c2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX3N0cmVhbWJ1
Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgY29uc3QgX19jdHlwZV90eXBl
KiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgX19pbnRfdHlw
ZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2Yg
PSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhj
dHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09
IF9fZW9mOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbiAmJiAhX190ZXN0ZW9m
ICYmICFfX3Rlc3RzcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFp
dHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAg
ICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgX190ZXN0ZW9mID0g
X19jID09IF9fZW9mOwogICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVf
YmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX190ZXN0ZW9m
KQogICAgICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lk
dGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5z
ZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsK
ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVm
X3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f
dHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19z
aXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7
CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAg
ICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9f
aW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAg
ICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2lu
dF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBf
X2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19p
ZGVsaW07CiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAg
ICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGlt
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90
eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2Mg
PSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7
CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAg
IH0KICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9z
X2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFfX3Rl
c3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg
cmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0
cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+
JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAg
ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikKICAgIHsg
cmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIsIF9faW4ud2lkZW4oJ1xuJykpOyB9Cn0KIyAyOTEg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIg
MwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJl
YW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICBleHRlcm4gaXN0cmVhbSBjaW47CiAgZXh0ZXJu
IG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0cmVhbSBjZXJyOwogIGV4dGVybiBvc3RyZWFtIGNs
b2c7CiMgNTcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0
cmVhbS5oIiAzCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9CiMgMzIgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIgMiAzCiMgMjggIi9ob21lL3N0
ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvUHJhZ3VlL1N5cy9UaW1lLmhoIiAyCgpuYW1lc3Bh
Y2UgUHJhZ3VlCnsKCmNsYXNzIFRpbWUgOiBwdWJsaWMgdGltZXZhbAp7CnB1YmxpYzoKICBzdGF0
aWMgY29uc3QgVGltZSB6ZXJvOwogIFRpbWUoKSB7IHR2X3NlYyA9IHR2X3VzZWMgPSAwO30KICBU
aW1lKGNvbnN0IHRpbWV2YWwgJnQpIDogdGltZXZhbCh0KSB7IG5vcm1hbGl6ZSgpO30KICBUaW1l
KGNvbnN0IHRpbWVzcGVjICZ0KSB7IHR2X3NlYyA9IHQudHZfc2VjLCB0dl91c2VjID0gdC50dl9u
c2VjLzEwMDA7IG5vcm1hbGl6ZSgpO30KICBUaW1lKGxvbmcgbCkgeyB0dl9zZWMgPSBsLzEwMDAs
IHR2X3VzZWMgPSAobCAtIHR2X3NlYyoxMDAwKSoxMDAwO30KICBUaW1lKGludCwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCk7CiAgVGltZShpbnQsIGludCwgaW50LCBpbnQpOwogIH5UaW1l
KCkge30KICBib29sIG9wZXJhdG9yID09IChjb25zdCBUaW1lICZUKSBjb25zdCB7IHJldHVybiB0
dl9zZWMgPT0gVC50dl9zZWMgJiYgdHZfdXNlYyA9PSBULnR2X3VzZWM7fQogIGJvb2wgb3BlcmF0
b3IgIT0gKGNvbnN0IFRpbWUgJlQpIGNvbnN0IHsgcmV0dXJuIHR2X3NlYyAhPSBULnR2X3NlYyB8
fCB0dl91c2VjICE9IFQudHZfdXNlYzt9CiAgYm9vbCBvcGVyYXRvciA+IChjb25zdCBUaW1lICZU
KSBjb25zdCB7IHJldHVybiB0dl9zZWMgPiBULnR2X3NlYyB8fCAodHZfc2VjID09IFQudHZfc2Vj
ICYmIHR2X3VzZWMgPiBULnR2X3VzZWMpO30KICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IFRpbWUg
JlQpIGNvbnN0IHsgcmV0dXJuIHR2X3NlYyA8IFQudHZfc2VjIHx8ICh0dl9zZWMgPT0gVC50dl9z
ZWMgJiYgdHZfdXNlYyA8IFQudHZfdXNlYyk7fQogIGJvb2wgb3BlcmF0b3IgPj0gKGNvbnN0IFRp
bWUgJlQpIGNvbnN0IHsgcmV0dXJuIG9wZXJhdG9yID4gKFQpIHx8IG9wZXJhdG9yID09IChUKTt9
CiAgYm9vbCBvcGVyYXRvciA8PSAoY29uc3QgVGltZSAmVCkgY29uc3QgeyByZXR1cm4gb3BlcmF0
b3IgPCAoVCkgfHwgb3BlcmF0b3IgPT0gKFQpO30KICBUaW1lICZvcGVyYXRvciArPSAoY29uc3Qg
VGltZSAmVCkgeyB0dl9zZWMgKz0gVC50dl9zZWMsIHR2X3VzZWMgKz0gVC50dl91c2VjOyBub3Jt
YWxpemUoKTsgcmV0dXJuICp0aGlzO30KICBUaW1lICZvcGVyYXRvciAtPSAoY29uc3QgVGltZSAm
VCkgeyB0dl9zZWMgLT0gVC50dl9zZWMsIHR2X3VzZWMgLT0gVC50dl91c2VjOyBub3JtYWxpemUo
KTsgcmV0dXJuICp0aGlzO30KICBUaW1lIG9wZXJhdG9yICsgKGNvbnN0IFRpbWUgJlQpIGNvbnN0
IHsgVGltZSB0ID0gKnRoaXM7IHQgKz0gVDsgcmV0dXJuIHQ7fQogIFRpbWUgb3BlcmF0b3IgLSAo
Y29uc3QgVGltZSAmVCkgY29uc3QgeyBUaW1lIHQgPSAqdGhpczsgdCAtPSBUOyByZXR1cm4gdDt9
CiAgb3BlcmF0b3IgYm9vbCAoKSBjb25zdCB7IHJldHVybiB0dl9zZWMgIT0gMCB8fCB0dl91c2Vj
ICE9IDA7fQogIG9wZXJhdG9yIHRpbWVzcGVjICgpIGNvbnN0IHsgdGltZXNwZWMgdDsgdC50dl9z
ZWMgPSB0dl9zZWMsIHQudHZfbnNlYyA9IHR2X3VzZWMgKiAxMDAwOyByZXR1cm4gdDt9CiAgb3Bl
cmF0b3IgZG91YmxlICgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odHZfc2Vj
KSArIHN0YXRpY19jYXN0PGRvdWJsZT4odHZfdXNlYykvMTAwMDAwMC47fQogIG9wZXJhdG9yIGNv
bnN0IGNoYXIgKigpIGNvbnN0IHsgcmV0dXJuIGN0aW1lKCZ0dl9zZWMpO30KICBzdGF0aWMgVGlt
ZSBjdXJyZW50VGltZSgpOwogIGZyaWVuZCBzdGQ6Om9zdHJlYW0gJm9wZXJhdG9yIDw8IChzdGQ6
Om9zdHJlYW0gJm9zLCBjb25zdCBUaW1lICZUKSB7IHJldHVybiBvcyA8PCBULnR2X3NlYyA8PCAi
IHMsICIgPDwgVC50dl91c2VjIDw8ICIgdXMiO30KcHJvdGVjdGVkOgogIGlubGluZSB2b2lkIG5v
cm1hbGl6ZSgpOwpwcml2YXRlOgp9OwoKaW5saW5lIHZvaWQgVGltZTo6bm9ybWFsaXplKCkKewog
IHdoaWxlICh0dl91c2VjID49IDEwMDAwMDApIHR2X3VzZWMgLT0gMTAwMDAwMCwgdHZfc2VjKys7
CiAgd2hpbGUgKHR2X3VzZWMgPCAwKQogICAgewogICAgICBpZiAodHZfc2VjID4gMCkgdHZfdXNl
YyArPSAxMDAwMDAwLCB0dl9zZWMtLTsKICAgICAgZWxzZSB7IHR2X3VzZWMgPSAwOyBicmVhazt9
CiAgICB9Cn0KCn0KIyAyNyAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9QcmFn
dWUvU3lzL1RocmVhZC5oaCIgMgojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDI4
ICIvaG9tZS9zdGVmYW4vQmVybGluL0Jlcmxpbi9pbmNsdWRlL1ByYWd1ZS9TeXMvVGhyZWFkLmho
IiAyCiMgMSAiL3Vzci9pbmNsdWRlL3NlbWFwaG9yZS5oIiAxIDMKIyAxOCAiL3Vzci9pbmNsdWRl
L3NlbWFwaG9yZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDE5ICIv
dXNyL2luY2x1ZGUvc2VtYXBob3JlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMSAzCiMgMjAgIi91c3IvaW5jbHVkZS9zZW1hcGhvcmUuaCIgMiAzCiMgMjggIi91c3IvaW5j
bHVkZS9zZW1hcGhvcmUuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0CiAgewogICAgbG9u
ZyBpbnQgc3RhdHVzOwogICAgaW50IHNwaW5sb2NrOwogIH0gX19zZW1fbG9jazsKICBpbnQgX19z
ZW1fdmFsdWU7CiAgX3B0aHJlYWRfZGVzY3IgX19zZW1fd2FpdGluZzsKfSBzZW1fdDsKIyA0OCAi
L3Vzci9pbmNsdWRlL3NlbWFwaG9yZS5oIiAzCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IHNl
bV9pbml0IChzZW1fdCAqX19zZW0sIGludCBfX3BzaGFyZWQsIHVuc2lnbmVkIGludCBfX3ZhbHVl
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNlbV9kZXN0cm95IChzZW1fdCAqX19zZW0pIHRocm93
ICgpOwoKCmV4dGVybiBzZW1fdCAqc2VtX29wZW4gKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQg
X19vZmxhZywgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNlbV9jbG9zZSAoc2VtX3QgKl9f
c2VtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNlbV91bmxpbmsgKF9fY29uc3QgY2hhciAqX19u
YW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNlbV93YWl0IChzZW1fdCAqX19zZW0pIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgc2VtX3RyeXdhaXQgKHNlbV90ICpfX3NlbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBzZW1fcG9zdCAoc2VtX3QgKl9fc2VtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHNlbV9nZXR2YWx1ZSAoc2VtX3QgKl9fc2VtLCBpbnQgKl9fc3ZhbCkgdGhyb3cgKCk7Cgp9CiMg
MjkgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvUHJhZ3VlL1N5cy9UaHJlYWQu
aGgiIDIKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvY2Vycm5vIiAxIDMK
IyAzMCAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9QcmFndWUvU3lzL1RocmVh
ZC5oaCIgMgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My92ZWN0b3IiIDEg
MwojIDMxICIvaG9tZS9zdGVmYW4vQmVybGluL0Jlcmxpbi9pbmNsdWRlL1ByYWd1ZS9TeXMvVGhy
ZWFkLmhoIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL3N0cmluZyIg
MSAzCiMgMzIgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvUHJhZ3VlL1N5cy9U
aHJlYWQuaGgiIDIKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYmFja3dh
cmQvcGFpci5oIiAxIDMKIyAzMCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jh
Y2t3YXJkL3BhaXIuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
YWNrd2FyZC9iYWNrd2FyZF93YXJuaW5nLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYmFja3dhcmQvcGFpci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAz
CiMgMzIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9wYWlyLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWly
LmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYmFja3dhcmQv
cGFpci5oIiAyIDMKCnVzaW5nIHN0ZDo6cGFpcjsKdXNpbmcgc3RkOjptYWtlX3BhaXI7CiMgMzMg
Ii9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvUHJhZ3VlL1N5cy9UaHJlYWQuaGgi
IDIKCm5hbWVzcGFjZSBQcmFndWUKewoKY2xhc3MgTXV0ZXgKewpwdWJsaWM6CiAgY2xhc3MgQXR0
cmlidXRlCiAgewogIHB1YmxpYzoKICAgIEF0dHJpYnV0ZSgpIHsgcHRocmVhZF9tdXRleGF0dHJf
aW5pdCAoJmltcGwpO30KICAgIH5BdHRyaWJ1dGUoKSB7IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ry
b3koJmltcGwpO30KICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgaW1wbDsKICB9OwoKCiAgTXV0ZXgo
KSB7IHB0aHJlYWRfbXV0ZXhfaW5pdCgmaW1wbCwgMCk7fQoKICB+TXV0ZXgoKSB7IHB0aHJlYWRf
bXV0ZXhfZGVzdHJveSgmaW1wbCk7fQogIHZvaWQgbG9jaygpIHsgcHRocmVhZF9tdXRleF9sb2Nr
KCZpbXBsKTt9CiAgdm9pZCB1bmxvY2soKSB7IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbXBsKTt9
CiAgYm9vbCB0cnlsb2NrKCkgeyByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrKCZpbXBsKTt9
CiAgcHRocmVhZF9tdXRleF90IGltcGw7Cn07CgoKY2xhc3MgU2VtYXBob3JlCnsKcHVibGljOgog
IFNlbWFwaG9yZSh1bnNpZ25lZCBpbnQgdiA9IDApIHsgc2VtX2luaXQoJmltcGwsIDAsIHYpO30K
ICB+U2VtYXBob3JlKCkgeyBzZW1fZGVzdHJveSgmaW1wbCk7fQogIHZvaWQgd2FpdCgpIHsgc2Vt
X3dhaXQoJmltcGwpO30KICBib29sIHRyeXdhaXQoKSB7IHJldHVybiBzZW1fdHJ5d2FpdCgmaW1w
bCk7fQogIHZvaWQgcG9zdCgpIHsgc2VtX3Bvc3QoJmltcGwpO30KICBpbnQgdmFsdWUoKSB7IGlu
dCB2OyBzZW1fZ2V0dmFsdWUoJmltcGwsICZ2KTsgcmV0dXJuIHY7fQogIHNlbV90IGltcGw7CnBy
aXZhdGU6CiAgU2VtYXBob3JlKGNvbnN0IFNlbWFwaG9yZSAmKTsKICBTZW1hcGhvcmUgJm9wZXJh
dG9yID0gKGNvbnN0IFNlbWFwaG9yZSAmKTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIExv
Y2tfVHJhaXQKewpwdWJsaWM6CiAgdm9pZCBsb2NrKFQgJiB0KSB7IHQubG9jaygpO30KICB2b2lk
IHVubG9jayhUICYgdCkgeyB0LnVubG9jaygpO30KfTsKCnRlbXBsYXRlPD4KY2xhc3MgTG9ja19U
cmFpdDxTZW1hcGhvcmU+CnsKcHVibGljOgogIHZvaWQgbG9jayhTZW1hcGhvcmUgJiB0KSB7IHQu
d2FpdCgpO30KICB2b2lkIHVubG9jayhTZW1hcGhvcmUgJiB0KSB7IHQucG9zdCgpO30KfTsKCnRl
bXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFdMb2NrX1RyYWl0CnsKcHVibGljOgogIHZvaWQgbG9jayhU
ICYgdCkgeyB0Lndsb2NrKCk7fQogIHZvaWQgdW5sb2NrKFQgJiB0KSB7IHQudW5sb2NrKCk7fQp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBMX1RSQUlUID0gTG9ja19UcmFpdDxUPiA+CmNs
YXNzIEd1YXJkCnsKcHVibGljOgogIEd1YXJkKFQgJiB0KSA6IHZpcCh0KSwgdHJhaXQoKSB7IHRy
YWl0LmxvY2sodmlwKTt9CiAgfkd1YXJkKCkgeyB0cmFpdC51bmxvY2sodmlwKTt9CnByaXZhdGU6
CiAgR3VhcmQoY29uc3QgR3VhcmQ8VD4gJik7CiAgR3VhcmQgJiBvcGVyYXRvciA9IChjb25zdCBH
dWFyZCAmKTsKICBUICYgdmlwOwogIExfVFJBSVQgdHJhaXQ7Cn07CgoKY2xhc3MgQ29uZGl0aW9u
CnsKcHVibGljOgogIGNsYXNzIEF0dHJpYnV0ZQogIHsKICBwdWJsaWM6CiAgICBBdHRyaWJ1dGUo
KSB7IHB0aHJlYWRfY29uZGF0dHJfaW5pdCgmaW1wbCk7fQogICAgfkF0dHJpYnV0ZSgpIHsgcHRo
cmVhZF9jb25kYXR0cl9kZXN0cm95KCZpbXBsKTt9CiAgICBwdGhyZWFkX2NvbmRhdHRyX3QgaW1w
bDsKICB9OwogIENvbmRpdGlvbihNdXRleCAmbSkgOiBtdXRleChtKSB7IHB0aHJlYWRfY29uZF9p
bml0KCZpbXBsLCAwKTt9CiAgfkNvbmRpdGlvbigpIHsgcHRocmVhZF9jb25kX2Rlc3Ryb3koJmlt
cGwpO30KICB2b2lkIGJyb2FkY2FzdCgpIHsgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmaW1wbCk7
fQogIHZvaWQgc2lnbmFsKCkgeyBwdGhyZWFkX2NvbmRfc2lnbmFsKCZpbXBsKTt9CiAgdm9pZCB3
YWl0KCkgeyBwdGhyZWFkX2NvbmRfd2FpdCgmaW1wbCwgJm11dGV4LmltcGwpO30KICB2b2lkIHdh
aXQoY29uc3QgVGltZSAmdCkgeyB0aW1lc3BlYyB0cyA9IHQ7IHB0aHJlYWRfY29uZF90aW1lZHdh
aXQoJmltcGwsICZtdXRleC5pbXBsLCAmdHMpO30KICBwdGhyZWFkX2NvbmRfdCBpbXBsOwpwcml2
YXRlOgogIE11dGV4ICZtdXRleDsKfTsKIyAxNTggIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGlu
L2luY2x1ZGUvUHJhZ3VlL1N5cy9UaHJlYWQuaGgiCmNsYXNzIFJXTG9jawp7CnB1YmxpYzoKICBS
V0xvY2soKSB7fQogIH5SV0xvY2soKSB7fQogIHZvaWQgcmxvY2soKSB7fQogIHZvaWQgd2xvY2so
KSB7fQogIHZvaWQgdW5sb2NrKCkge30KICBib29sIHRyeXJsb2NrKCkgeyByZXR1cm4gZmFsc2U7
fQogIGJvb2wgdHJ5d2xvY2soKSB7IHJldHVybiBmYWxzZTt9CnByaXZhdGU6CiAgTXV0ZXggbXV0
ZXg7CiAgU2VtYXBob3JlIHJlYWRlcnM7CiAgU2VtYXBob3JlIHdyaXRlcnM7Cn07CgoKCnRlbXBs
YXRlIDw+IGNsYXNzIExvY2tfVHJhaXQ8UldMb2NrPgp7CnB1YmxpYzoKICB2b2lkIGxvY2soUldM
b2NrICYgbCkgeyBsLnJsb2NrKCk7fQogIHZvaWQgdW5sb2NrKFJXTG9jayAmIGwpIHsgbC51bmxv
Y2soKTt9Cn07CgoKY2xhc3MgVGhyZWFkCnsKICBzdHJ1Y3QgR3VhcmQKICB7CiAgICBHdWFyZCgp
OwogICAgfkd1YXJkKCk7CiAgfTsKICBmcmllbmQgc3RydWN0IEd1YXJkOwpwdWJsaWM6CiAgZW51
bSBwcmlvcml0eV90IHtsb3csIG5vcm1hbCwgaGlnaH07CiAgZW51bSBzdGF0ZV90IHtyZWFkeSwg
cnVubmluZywgdGVybWluYXRlZCwgY2FuY2VsZWQsIGpvaW5lZH07CiAgdGVtcGxhdGUgPGNsYXNz
IFQ+IGNsYXNzIERhdGE7CiAgdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFF1ZXVlOwogIHR5cGVk
ZWYgdm9pZCAqKCpwcm9jKSh2b2lkICopOwogIGNsYXNzIEF0dHJpYnV0ZQogIHsKICBwdWJsaWM6
CiAgICBBdHRyaWJ1dGUoKSB7IHB0aHJlYWRfYXR0cl9pbml0KCZpbXBsKTt9CiAgICB+QXR0cmli
dXRlKCkgeyBwdGhyZWFkX2F0dHJfZGVzdHJveSgmaW1wbCk7fQogICAgcHRocmVhZF9hdHRyX3Qg
aW1wbDsKICB9OwogIGNsYXNzIEV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBFeGNlcHRpb24o
Y29uc3Qgc3RkOjpzdHJpbmcgJm0pIDogX21zZyhtKSB7fQogICAgY29uc3Qgc3RkOjpzdHJpbmcg
JndoYXQoKSBjb25zdCB7IHJldHVybiBfbXNnO30KICBwcml2YXRlOgogICAgc3RkOjpzdHJpbmcg
X21zZzsKICB9OwogIFRocmVhZChwcm9jLCB2b2lkICosIHByaW9yaXR5X3QgPSBub3JtYWwpOwog
IH5UaHJlYWQoKTsKCiAgcHJpb3JpdHlfdCBwcmlvcml0eSgpIHsgUHJhZ3VlOjpHdWFyZDxNdXRl
eD4gZyhtdXRleCk7IHJldHVybiBfcHJpb3JpdHk7fQoKICBzdGF0ZV90IHN0YXRlKCkgeyBQcmFn
dWU6Okd1YXJkPE11dGV4PiBnKG11dGV4KTsgcmV0dXJuIF9zdGF0ZTt9CgogIHZvaWQgc3RhcnQo
KSB0aHJvdyAoRXhjZXB0aW9uKTsKCiAgdm9pZCBqb2luKHZvaWQgKiopIHRocm93IChFeGNlcHRp
b24pOwoKICB2b2lkIGNhbmNlbCgpOwoKICB2b2lkIGRldGFjaCgpOwoKICBzdGF0aWMgdm9pZCBl
eGl0KHZvaWQgKnIpOwoKICBzdGF0aWMgYm9vbCBkZWxheShjb25zdCBUaW1lICYpOwoKICBzdGF0
aWMgdm9pZCB0ZXN0Y2FuY2VsKCkgeyBwdGhyZWFkX3Rlc3RjYW5jZWwoKTt9CgogIHN0YXRpYyBU
aHJlYWQgKnNlbGYoKTsKCiAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaWQoKTsKcHJpdmF0ZToKICBU
aHJlYWQocHRocmVhZF90IHB0KSA6IHAoMCksIGFyZygwKSwgdGhyZWFkKHB0KSwgX3ByaW9yaXR5
KG5vcm1hbCksIF9zdGF0ZShydW5uaW5nKSwgZGV0YWNoZWQoZmFsc2UpIHt9CiAgc3RhdGljIHZv
aWQgKnN0YXJ0KHZvaWQgKik7CiAgcHJvYyBwOwogIHZvaWQgKmFyZzsKICBwdGhyZWFkX3QgdGhy
ZWFkOwogIHByaW9yaXR5X3QgX3ByaW9yaXR5OwogIHN0YXRlX3QgX3N0YXRlOwogIGJvb2wgZGV0
YWNoZWQ7CiAgTXV0ZXggbXV0ZXg7CiAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRlcjsKICBz
dGF0aWMgVGhyZWFkICptYWluOwogIHN0YXRpYyBHdWFyZCBndWFyZDsKICBzdGF0aWMgcHRocmVh
ZF9rZXlfdCBzZWxmX2tleTsKICBzdGF0aWMgcHRocmVhZF9rZXlfdCBpZF9rZXk7CiAgc3RhdGlj
IE11dGV4IGlkX211dGV4Owp9OwoKaW5saW5lIFRocmVhZCAqVGhyZWFkOjpzZWxmKCkKewogIHJl
dHVybiByZWludGVycHJldF9jYXN0PFRocmVhZCAqPihwdGhyZWFkX2dldHNwZWNpZmljKHNlbGZf
a2V5KSk7Cn0KCmlubGluZSB1bnNpZ25lZCBsb25nIFRocmVhZDo6aWQoKQp7CiAgdW5zaWduZWQg
bG9uZyAqX2lkID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nICo+KHB0aHJlYWRfZ2V0
c3BlY2lmaWMoaWRfa2V5KSk7CiAgaWYgKCFfaWQpCiAgICB7CiAgICAgIFByYWd1ZTo6R3VhcmQ8
TXV0ZXg+IGd1YXJkKGlkX211dGV4KTsKICAgICAgaWYgKCFfaWQpCiAgICAgICAgewogICAgICAg
ICAgX2lkID0gbmV3IHVuc2lnbmVkIGxvbmcgKGNvdW50ZXIrKyk7CiAgICAgICAgICBwdGhyZWFk
X3NldHNwZWNpZmljKGlkX2tleSwgX2lkKTsKICAgICAgICB9CiAgICB9CiAgcmV0dXJuICpfaWQ7
Cn0KCn0KIyAyOSAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9CZXJsaW4vU3Vi
amVjdEltcGwuaGgiIDIKIyAxICIvaG9tZS9zdGVmYW4vQmVybGluL0Jlcmxpbi9pbmNsdWRlL0Jl
cmxpbi9SZWZDb3VudEJhc2VJbXBsLmhoIiAxCiMgMjUgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVy
bGluL2luY2x1ZGUvQmVybGluL1JlZkNvdW50QmFzZUltcGwuaGgiCiMgMSAiLi4vLi4vaW5jbHVk
ZS9XYXJzYXcvY29uZmlnLmhoIiAxCiMgMjYgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2lu
Y2x1ZGUvQmVybGluL1JlZkNvdW50QmFzZUltcGwuaGgiIDIKIyAxICIuLi8uLi9pbmNsdWRlL1dh
cnNhdy9SZWZDb3VudEJhc2UuaGgiIDEKIyAyNyAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4v
aW5jbHVkZS9CZXJsaW4vUmVmQ291bnRCYXNlSW1wbC5oaCIgMgojIDEgIi9ob21lL3N0ZWZhbi9C
ZXJsaW4vQmVybGluL2luY2x1ZGUvUHJhZ3VlL1N5cy9UcmFjZXIuaGgiIDEKIyAyNSAiL2hvbWUv
c3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9QcmFndWUvU3lzL1RyYWNlci5oaCIKIyAxICIu
Li8uLi9pbmNsdWRlL1ByYWd1ZS9jb25maWcuaGgiIDEKIyAyNiAiL2hvbWUvc3RlZmFuL0Jlcmxp
bi9CZXJsaW4vaW5jbHVkZS9QcmFndWUvU3lzL1RyYWNlci5oaCIgMgojIDEgIi9ob21lL3N0ZWZh
bi9CZXJsaW4vQmVybGluL2luY2x1ZGUvUHJhZ3VlL1N5cy9UaHJlYWQuaGgiIDEKIyAyNyAiL2hv
bWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9QcmFndWUvU3lzL1RyYWNlci5oaCIgMgoj
IDEgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvUHJhZ3VlL1N5cy9UaHJlYWRE
YXRhLmhoIiAxCiMgMjUgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvUHJhZ3Vl
L1N5cy9UaHJlYWREYXRhLmhoIgojIDEgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1
ZGUvUHJhZ3VlL1N5cy9UaHJlYWQuaGgiIDEKIyAyNiAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJs
aW4vaW5jbHVkZS9QcmFndWUvU3lzL1RocmVhZERhdGEuaGgiIDIKCm5hbWVzcGFjZSBQcmFndWUK
ewoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFRocmVhZDo6RGF0YQp7CnB1YmxpYzoKICBjbGFz
cyBUb29NdWNoVFNEcyA6IHB1YmxpYyBFeGNlcHRpb24geyBwdWJsaWM6IFRvb011Y2hUU0RzKCkg
OiBFeGNlcHRpb24oInRvbyBtdWNoIFRTRHMgZGVmaW5lZCIpIHt9fTsKICBjbGFzcyBJbnZhbGlk
S2V5IDogcHVibGljIEV4Y2VwdGlvbiB7IHB1YmxpYzogSW52YWxpZEtleSgpIDogRXhjZXB0aW9u
KCJpbGxlZ2FsIGtleSIpIHt9fTsKCiAgRGF0YShUIHYpIHRocm93IChUb29NdWNoVFNEcywgSW52
YWxpZEtleSkgOiBpbml0aWFsaXplcih2KQogICAgewogICAgICBpZihwdGhyZWFkX2tleV9jcmVh
dGUoJmtleSwgZGVzdHJ1Y3RvcikpIHRocm93IFRvb011Y2hUU0RzKCk7CiAgICAgIGlmKHB0aHJl
YWRfc2V0c3BlY2lmaWMoa2V5LCBuZXcgVChpbml0aWFsaXplcikpKSB0aHJvdyBJbnZhbGlkS2V5
KCk7CiAgICB9CiAgRGF0YSgpIHRocm93IChUb29NdWNoVFNEcywgSW52YWxpZEtleSkKICAgIHsK
ICAgICAgaWYocHRocmVhZF9rZXlfY3JlYXRlKCZrZXksIGRlc3RydWN0b3IpKSB0aHJvdyBUb29N
dWNoVFNEcygpOwogICAgICBpZihwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgbmV3IFQpKSB0aHJv
dyBJbnZhbGlkS2V5KCk7CiAgICB9CiAgfkRhdGEoKQogICAgewogICAgICBkZWxldGUgcmVpbnRl
cnByZXRfY2FzdDxUICo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSk7CiAgICAgIHB0aHJlYWRf
a2V5X2RlbGV0ZShrZXkpOwogICAgfQogIGNvbnN0IFQgJnZhcih2b2lkKSBjb25zdCB0aHJvdyAo
SW52YWxpZEtleSkKICAgIHsKICAgICAgVCAqZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihw
dGhyZWFkX2dldHNwZWNpZmljKGtleSkpOwogICAgICBpZiAoIWRhdGEpCiAgICAgICAgewogICAg
ICAgICAgaWYgKHB0aHJlYWRfc2V0c3BlY2lmaWMoa2V5LCBuZXcgVChpbml0aWFsaXplcikpKSB0
aHJvdyBJbnZhbGlkS2V5KCk7CiAgICAgICAgICBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxUICo+
KHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSk7CiAgICAgICAgfQogICAgICByZXR1cm4gKmRhdGE7
CiAgICB9CiAgVCAmdmFyKHZvaWQpIHRocm93IChJbnZhbGlkS2V5KQogICAgewogICAgICBUICpk
YXRhID0gcmVpbnRlcnByZXRfY2FzdDxUICo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSk7CiAg
ICAgIGlmICghZGF0YSkKICAgICAgICB7CiAgICAgICAgICBpZiAocHRocmVhZF9zZXRzcGVjaWZp
YyhrZXksIG5ldyBUKGluaXRpYWxpemVyKSkpIHRocm93IEludmFsaWRLZXkoKTsKICAgICAgICAg
IGRhdGEgPSByZWludGVycHJldF9jYXN0PFQgKj4ocHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpKTsK
ICAgICAgICB9CiAgICAgIHJldHVybiAqZGF0YTsKICAgIH0KICBEYXRhPFQ+ICZvcGVyYXRvciA9
IChjb25zdCBUICZ0KSB0aHJvdyAoSW52YWxpZEtleSkKICAgIHsKICAgICAgVCAqZGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VCAqPihwdGhyZWFkX2dldHNwZWNpZmljKGtleSkpOwogICAgICBpZiAo
ZGF0YSkgKmRhdGEgPSB0OwogICAgICBlbHNlIGlmIChwdGhyZWFkX3NldHNwZWNpZmljKGtleSwg
bmV3IFQodCkpKSB0aHJvdyBJbnZhbGlkS2V5KCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
ICBEYXRhPFQ+ICZvcGVyYXRvciA9IChjb25zdCBEYXRhPFQ+ICZ0KSB0aHJvdyAoSW52YWxpZEtl
eSkKICAgIHsKICAgICAgVCAqZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihwdGhyZWFkX2dl
dHNwZWNpZmljKGtleSkpOwogICAgICBpZiAoZGF0YSkgKmRhdGEgPSAqdDsKICAgICAgZWxzZSBp
ZiAocHRocmVhZF9zZXRzcGVjaWZpYyhrZXksIG5ldyBUKCp0KSkpIHRocm93IEludmFsaWRLZXko
KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogIGNvbnN0IFQgKm9wZXJhdG9yLT4oKSBjb25z
dCB0aHJvdyAoSW52YWxpZEtleSkKICAgIHsKICAgICAgVCAqZGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VCAqPihwdGhyZWFkX2dldHNwZWNpZmljKGtleSkpOwogICAgICBpZiAoIWRhdGEpCiAgICAg
ICAgewogICAgICAgICAgaWYgKHB0aHJlYWRfc2V0c3BlY2lmaWMoa2V5LCBuZXcgVChpbml0aWFs
aXplcikpKSB0aHJvdyBJbnZhbGlkS2V5KCk7CiAgICAgICAgICBkYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDxUICo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSk7CiAgICAgICAgfQogICAgICByZXR1
cm4gZGF0YTsKICAgIH0KICBUICpvcGVyYXRvci0+KCkgdGhyb3cgKEludmFsaWRLZXkpCiAgICB7
CiAgICAgIFQgKmRhdGEgPSByZWludGVycHJldF9jYXN0PFQgKj4ocHRocmVhZF9nZXRzcGVjaWZp
YyhrZXkpKTsKICAgICAgaWYgKCFkYXRhKQogICAgICAgIHsKICAgICAgICAgIGlmIChwdGhyZWFk
X3NldHNwZWNpZmljKGtleSwgbmV3IFQoaW5pdGlhbGl6ZXIpKSkgdGhyb3cgSW52YWxpZEtleSgp
OwogICAgICAgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihwdGhyZWFkX2dldHNwZWNp
ZmljKGtleSkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CiAgY29uc3QgVCAm
b3BlcmF0b3IgKigpIGNvbnN0IHsgcmV0dXJuIHZhcigpO30KICAgICAgICBUICZvcGVyYXRvciAq
KCkgeyByZXR1cm4gdmFyKCk7fQpwcml2YXRlOgogIHN0YXRpYyB2b2lkIGRlc3RydWN0b3Iodm9p
ZCAqZGF0YSkgeyBkZWxldGUgcmVpbnRlcnByZXRfY2FzdDxUICo+KGRhdGEpO30KICBEYXRhKGNv
bnN0IERhdGE8VD4gJik7CiAgcHRocmVhZF9rZXlfdCBrZXk7CiAgVCBpbml0aWFsaXplcjsKfTsK
Cn07CiMgMjggIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvUHJhZ3VlL1N5cy9U
cmFjZXIuaGgiIDIKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvdmVjdG9y
IiAxIDMKIyAyOSAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9QcmFndWUvU3lz
L1RyYWNlci5oaCIgMgoKbmFtZXNwYWNlIFByYWd1ZQp7CgpjbGFzcyBUcmFjZTsKCgoKCmNsYXNz
IFRyYWNlcgp7CiAgc3RydWN0IEV2ZW50CiAgewogICAgZG91YmxlIHRpbWU7CiAgICB1bnNpZ25l
ZCBsb25nIHRocmVhZDsKICAgIGNvbnN0IGNoYXIgKnR5cGU7CiAgICBjb25zdCBjaGFyICpzcGVj
aWZpY3M7CiAgICBmcmllbmQgc3RkOjpvc3RyZWFtICZvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFt
ICZvcywgY29uc3QgRXZlbnQgJmUpCiAgICB7IHJldHVybiBvcyA8PCBlLnRpbWUgPDwgJzonIDw8
IGUudGhyZWFkIDw8ICdcdCcgPDwgZS50eXBlIDw8ICcgJyA8PCBlLnNwZWNpZmljczt9CiAgfTsK
ICBmcmllbmQgY2xhc3MgVHJhY2U7CnB1YmxpYzoKICBzdGF0aWMgdm9pZCByZXNpemUoc2l6ZV90
IHMpIHsgUHJhZ3VlOjpHdWFyZDxNdXRleD4gZ3VhcmQoX211dGV4KTsgX2V2ZW50cy5yZXNpemUo
cyk7IGlmIChfbmV4dCA+PSBzKSBfbmV4dCA9IDA7fQogIHN0YXRpYyB2b2lkIGxvZ2dpbmcoYm9v
bCBsKSB7IF9sb2cgPSBsO30KICBzdGF0aWMgdm9pZCBhZGQoY29uc3QgY2hhciAqbiwgY29uc3Qg
Y2hhciAqdHkgPSAiIikKICB7CiAgICB7CiAgICAgIFByYWd1ZTo6R3VhcmQ8TXV0ZXg+IGd1YXJk
KF9tdXRleCk7CiAgICAgIGlmIChfbmV4dCA9PSBfZXZlbnRzLnNpemUoKSkgcmV0dXJuOwogICAg
ICBfZXZlbnRzW19uZXh0XS50aW1lID0gVGltZTo6Y3VycmVudFRpbWUoKSAtIF9zdGFydDsKICAg
ICAgX2V2ZW50c1tfbmV4dF0udGhyZWFkID0gVGhyZWFkOjpzZWxmKCktPmlkKCk7CiAgICAgIF9l
dmVudHNbX25leHRdLnR5cGUgPSB0eTsKICAgICAgX2V2ZW50c1tfbmV4dF0uc3BlY2lmaWNzID0g
bjsKICAgICAgaWYgKF9sb2cpCiAgICAgICAgewogICAgICAgICAgZm9yICh1bnNpZ25lZCBzaG9y
dCBpID0gMDsgaSAhPSAqX2luZGVudDsgaSsrKSBzdGQ6OmNlcnIucHV0KCcgJyk7CiAgICAgICAg
ICBzdGQ6OmNlcnIgPDwgX2V2ZW50c1tfbmV4dF0gPDwgc3RkOjplbmRsOwogICAgICAgIH0KICAg
ICAgX25leHQrKzsKICAgICAgaWYgKF9uZXh0ID09IF9ldmVudHMuc2l6ZSgpKQogICAgICAgIHsK
ICAgICAgICAgIF9uZXh0ID0gMDsKICAgICAgICAgIF93cmFwcGVkID0gdHJ1ZTsKICAgICAgICB9
CiAgICB9CiAgfQogIHN0YXRpYyB2b2lkIGNsZWFyKCkgeyBfbmV4dCA9IDA7IF93cmFwcGVkID0g
ZmFsc2U7fQogIHN0YXRpYyB2b2lkIGR1bXAoc3RkOjpvc3RyZWFtICZvcykKICB7CiAgICBzdGQ6
OnZlY3RvcjxFdmVudD46Oml0ZXJhdG9yIGU7CiAgICBvcyA8PCAiKiBUcmFjZXI6OmR1bXAgPVxu
IjsKICAgIGlmIChfd3JhcHBlZCkgZm9yIChlID0gX2V2ZW50cy5iZWdpbigpICsgX25leHQ7IGUg
IT0gX2V2ZW50cy5lbmQoKTsgZSsrKSBvcyA8PCAqZSA8PCAnXG4nOwogICAgZm9yIChlID0gX2V2
ZW50cy5iZWdpbigpOyBlICE9IF9ldmVudHMuYmVnaW4oKSArIF9uZXh0OyBlKyspIG9zIDw8ICpl
IDw8ICdcbic7CiAgICBvcyA8PCAiKiBlbmQgb2YgVHJhY2VyOjpkdW1wIiA8PCBzdGQ6OmVuZGw7
CiAgfQpwcml2YXRlOgogIHN0YXRpYyBzdGQ6OnZlY3RvcjxFdmVudD4gX2V2ZW50czsKICBzdGF0
aWMgVGltZSBfc3RhcnQ7CiAgc3RhdGljIFRocmVhZDo6RGF0YTx1bnNpZ25lZCBzaG9ydD4gX2lu
ZGVudDsKICBzdGF0aWMgTXV0ZXggX211dGV4OwogIHN0YXRpYyB1bnNpZ25lZCBpbnQgX25leHQ7
CiAgc3RhdGljIGJvb2wgX3dyYXBwZWQ7CiAgc3RhdGljIGJvb2wgX2xvZzsKfTsKIyAxMDQgIi9o
b21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvUHJhZ3VlL1N5cy9UcmFjZXIuaGgiCmNs
YXNzIFRyYWNlCnsKcHVibGljOgogIFRyYWNlKGNvbnN0IGNoYXIgKikge30KICB+VHJhY2UoKSB7
fQp9OwoKCn07CiMgMjggIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvQmVybGlu
L1JlZkNvdW50QmFzZUltcGwuaGgiIDIKIyAxICIvaG9tZS9zdGVmYW4vQmVybGluL0Jlcmxpbi9p
bmNsdWRlL0Jlcmxpbi9TZXJ2YW50QmFzZS5oaCIgMQojIDI1ICIvaG9tZS9zdGVmYW4vQmVybGlu
L0Jlcmxpbi9pbmNsdWRlL0Jlcmxpbi9TZXJ2YW50QmFzZS5oaCIKIyAxICIvaG9tZS9zdGVmYW4v
QmVybGluL0Jlcmxpbi9pbmNsdWRlL1ByYWd1ZS9TeXMvVHJhY2VyLmhoIiAxCiMgMjYgIi9ob21l
L3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvQmVybGluL1NlcnZhbnRCYXNlLmhoIiAyCiMg
MSAiLi4vLi4vaW5jbHVkZS9XYXJzYXcvY29uZmlnLmhoIiAxCiMgMjcgIi9ob21lL3N0ZWZhbi9C
ZXJsaW4vQmVybGluL2luY2x1ZGUvQmVybGluL1NlcnZhbnRCYXNlLmhoIiAyCiMgMSAiLi4vLi4v
aW5jbHVkZS9XYXJzYXcvVHlwZXMuaGgiIDEKIyAyOCAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJs
aW4vaW5jbHVkZS9CZXJsaW4vU2VydmFudEJhc2UuaGgiIDIKIyAxICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvY2Fzc2VydCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9jYXNzZXJ0IiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNz
ZXJ0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMgNTgg
Ii91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fz
c2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmls
ZSwgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKSB0aHJvdyAo
KQoKCgogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBf
X2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwg
dW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKSB0aHJvdyAoKQoK
CgogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCn0KIyAzOCAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAzCiMgMzIgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9jYXNzZXJ0IiAyIDMKIyAyOSAiL2hvbWUv
c3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9CZXJsaW4vU2VydmFudEJhc2UuaGgiIDIKCmNs
YXNzIFNlcnZhbnRCYXNlIDogcHVibGljIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlJlZkNvdW50
U2VydmFudEJhc2UKewogIGZyaWVuZCBjbGFzcyBLaXRJbXBsOwogIGZyaWVuZCBjbGFzcyBJZGVu
dGlmaWFibGVJbXBsOwpwdWJsaWM6CiAgU2VydmFudEJhc2UoKSA6IHBvYShQb3J0YWJsZVNlcnZl
cjo6UE9BOjpfbmlsKCkpIHt9CiAgdmlydHVhbCB+U2VydmFudEJhc2UoKSB7fQogIHZpcnR1YWwg
dm9pZCBkZWFjdGl2YXRlKCk7CnByb3RlY3RlZDoKICBzdGF0aWMgdm9pZCBkZWFjdGl2YXRlKFNl
cnZhbnRCYXNlICopOwoKCgogIHZvaWQgYWN0aXZhdGUoU2VydmFudEJhc2UgKik7CgoKICB2aXJ0
dWFsIHZvaWQgYWN0aXZhdGVfY29tcG9zaXRlKCkge30KcHJpdmF0ZToKICBQb3J0YWJsZVNlcnZl
cjo6UE9BX3ZhciBwb2E7Cn07CiMgMjkgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1
ZGUvQmVybGluL1JlZkNvdW50QmFzZUltcGwuaGgiIDIKCgpjbGFzcyBSZWZDb3VudEJhc2VJbXBs
IDogcHVibGljIHZpcnR1YWwgUE9BX1dhcnNhdzo6UmVmQ291bnRCYXNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIHZpcnR1YWwgU2VydmFudEJhc2UKewpwdWJsaWM6CiAgUmVmQ291
bnRCYXNlSW1wbCgpOwogIHZpcnR1YWwgflJlZkNvdW50QmFzZUltcGwoKTsKICB2aXJ0dWFsIHZv
aWQgaW5jcmVtZW50KCk7CiAgdmlydHVhbCB2b2lkIGRlY3JlbWVudCgpOwpwcml2YXRlOgogIGlu
dCByZWZjb3VudDsKfTsKIyAzMCAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVkZS9C
ZXJsaW4vU3ViamVjdEltcGwuaGgiIDIKIyAxICIvaG9tZS9zdGVmYW4vQmVybGluL0Jlcmxpbi9p
bmNsdWRlL0Jlcmxpbi9JZGVudGlmaWFibGVJbXBsLmhoIiAxCiMgMjUgIi9ob21lL3N0ZWZhbi9C
ZXJsaW4vQmVybGluL2luY2x1ZGUvQmVybGluL0lkZW50aWZpYWJsZUltcGwuaGgiCiMgMSAiLi4v
Li4vaW5jbHVkZS9XYXJzYXcvY29uZmlnLmhoIiAxCiMgMjYgIi9ob21lL3N0ZWZhbi9CZXJsaW4v
QmVybGluL2luY2x1ZGUvQmVybGluL0lkZW50aWZpYWJsZUltcGwuaGgiIDIKIyAxICIuLi8uLi9p
bmNsdWRlL1dhcnNhdy9JZGVudGlmaWFibGUuaGgiIDEKIyAyNyAiL2hvbWUvc3RlZmFuL0Jlcmxp
bi9CZXJsaW4vaW5jbHVkZS9CZXJsaW4vSWRlbnRpZmlhYmxlSW1wbC5oaCIgMgojIDEgIi9ob21l
L3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvQmVybGluL1NlcnZhbnRCYXNlLmhoIiAxCiMg
MjggIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvQmVybGluL0lkZW50aWZpYWJs
ZUltcGwuaGgiIDIKCmNsYXNzIElkZW50aWZpYWJsZUltcGwgOiBwdWJsaWMgdmlydHVhbCBQT0Ff
V2Fyc2F3OjpJZGVudGlmaWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdmly
dHVhbCBTZXJ2YW50QmFzZQp7CnB1YmxpYzoKICBDT1JCQTo6Qm9vbGVhbiBpc19pZGVudGljYWwo
V2Fyc2F3OjpJZGVudGlmaWFibGVfcHRyKTsKfTsKIyAzMSAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9C
ZXJsaW4vaW5jbHVkZS9CZXJsaW4vU3ViamVjdEltcGwuaGgiIDIKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvdmVjdG9yIiAxIDMKIyAzMiAiL2hvbWUvc3RlZmFuL0Jlcmxp
bi9CZXJsaW4vaW5jbHVkZS9CZXJsaW4vU3ViamVjdEltcGwuaGgiIDIKCmNsYXNzIFN1YmplY3RJ
bXBsIDogcHVibGljIHZpcnR1YWwgUE9BX1dhcnNhdzo6U3ViamVjdCwKICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgdmlydHVhbCBSZWZDb3VudEJhc2VJbXBsLAogICAgICAgICAgICAgICAgICAg
IHB1YmxpYyB2aXJ0dWFsIElkZW50aWZpYWJsZUltcGwKewogIHR5cGVkZWYgc3RkOjp2ZWN0b3I8
V2Fyc2F3OjpPYnNlcnZlcl92YXI+IG9saXN0X3Q7CnB1YmxpYzoKICBTdWJqZWN0SW1wbCgpOwog
IHZvaWQgYXR0YWNoKFdhcnNhdzo6T2JzZXJ2ZXJfcHRyKTsKICB2b2lkIGRldGFjaChXYXJzYXc6
Ok9ic2VydmVyX3B0cik7CiAgdm9pZCBub3RpZnkoY29uc3QgQ09SQkE6OkFueSAmKTsKICB2aXJ0
dWFsIHZvaWQgbm90aWZ5KCk7CiAgdm9pZCBibG9jayhDT1JCQTo6Qm9vbGVhbik7CnByaXZhdGU6
CiAgb2xpc3RfdCBfb2JzZXJ2ZXJzOwogIENPUkJBOjpCb29sZWFuIF9ibG9ja2VkOwogIFByYWd1
ZTo6TXV0ZXggX211dGV4OwogIFByYWd1ZTo6TXV0ZXggX29ic2VydmVyTXV0ZXg7Cn07CiMgMjkg
Ii9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvQ29tbWFuZC9UZWxsdGFsZUltcGwu
aGgiIDIKIyAxICIvaG9tZS9zdGVmYW4vQmVybGluL0Jlcmxpbi9pbmNsdWRlL1ByYWd1ZS9TeXMv
VGhyZWFkLmhoIiAxCiMgMzAgIi9ob21lL3N0ZWZhbi9CZXJsaW4vQmVybGluL2luY2x1ZGUvQ29t
bWFuZC9UZWxsdGFsZUltcGwuaGgiIDIKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvdmVjdG9yIiAxIDMKIyAzMSAiL2hvbWUvc3RlZmFuL0Jlcmxpbi9CZXJsaW4vaW5jbHVk
ZS9Db21tYW5kL1RlbGx0YWxlSW1wbC5oaCIgMgoKY2xhc3MgVGVsbHRhbGVJbXBsIDogcHVibGlj
IHZpcnR1YWwgUE9BX1dhcnNhdzo6VGVsbHRhbGUsCiAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTdWJqZWN0SW1wbAp7CiBwdWJsaWM6CiAgVGVsbHRhbGVJbXBsKFdhcnNhdzo6VGVsbHRhbGVD
b25zdHJhaW50X3B0ciwgQ09SQkE6OlVMb25nIG0gPSAwKTsKICB2aXJ0dWFsIH5UZWxsdGFsZUlt
cGwoKTsKICB2aXJ0dWFsIHZvaWQgc2V0KFdhcnNhdzo6VGVsbHRhbGU6Ok1hc2spOwogIHZpcnR1
YWwgdm9pZCBjbGVhcihXYXJzYXc6OlRlbGx0YWxlOjpNYXNrKTsKICB2aXJ0dWFsIENPUkJBOjpC
b29sZWFuIHRlc3QoV2Fyc2F3OjpUZWxsdGFsZTo6TWFzayk7CiAgdmlydHVhbCB2b2lkIG1vZGlm
eShXYXJzYXc6OlRlbGx0YWxlOjpNYXNrLCBDT1JCQTo6Qm9vbGVhbik7CiAgQ09SQkE6OlVMb25n
IHN0YXRlKCkgeyByZXR1cm4gX21hc2s7fQoKICB2aXJ0dWFsIHZvaWQgY29uc3RyYWludChXYXJz
YXc6OlRlbGx0YWxlQ29uc3RyYWludF9wdHIpOwogIHZpcnR1YWwgV2Fyc2F3OjpUZWxsdGFsZUNv
bnN0cmFpbnRfcHRyIGNvbnN0cmFpbnQoKTsKCiBwcm90ZWN0ZWQ6CiAgUHJhZ3VlOjpNdXRleCBf
bXV0ZXg7CiAgQ09SQkE6OlVMb25nIF9tYXNrOwogIFdhcnNhdzo6VGVsbHRhbGVDb25zdHJhaW50
X3ZhciBfY29uc3RyYWludDsKfTsKCmNsYXNzIFRlbGx0YWxlQ29uc3RyYWludEltcGwgOiBwdWJs
aWMgdmlydHVhbCBQT0FfV2Fyc2F3OjpUZWxsdGFsZUNvbnN0cmFpbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6UmVmQ291bnRT
ZXJ2YW50QmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2aXJ0dWFs
IFJlZkNvdW50QmFzZUltcGwKewogIHR5cGVkZWYgc3RkOjp2ZWN0b3I8V2Fyc2F3OjpUZWxsdGFs
ZV92YXI+IHRsaXN0X3Q7CiBwdWJsaWM6CiAgVGVsbHRhbGVDb25zdHJhaW50SW1wbCgpIHt9CiAg
dmlydHVhbCB+VGVsbHRhbGVDb25zdHJhaW50SW1wbCgpIHt9CiAgdm9pZCBhZGQoV2Fyc2F3OjpU
ZWxsdGFsZV9wdHIpOwogIHZvaWQgcmVtb3ZlKFdhcnNhdzo6VGVsbHRhbGVfcHRyKTsKICB2aXJ0
dWFsIHZvaWQgdHJ5bW9kaWZ5KFdhcnNhdzo6VGVsbHRhbGVfcHRyLCBXYXJzYXc6OlRlbGx0YWxl
OjpNYXNrLCBDT1JCQTo6Qm9vbGVhbikgPSAwOwogcHJvdGVjdGVkOgogIFByYWd1ZTo6TXV0ZXgg
X211dGV4OwogIHRsaXN0X3QgX3RlbGx0YWxlczsKfTsKCmNsYXNzIEV4Y2x1c2l2ZUNob2ljZSA6
IHB1YmxpYyBUZWxsdGFsZUNvbnN0cmFpbnRJbXBsCnsKcHVibGljOgogIEV4Y2x1c2l2ZUNob2lj
ZShXYXJzYXc6OlRlbGx0YWxlOjpNYXNrKTsKICB2aXJ0dWFsIHZvaWQgdHJ5bW9kaWZ5KFdhcnNh
dzo6VGVsbHRhbGVfcHRyLCBXYXJzYXc6OlRlbGx0YWxlOjpNYXNrLCBDT1JCQTo6Qm9vbGVhbik7
CnByaXZhdGU6CiAgV2Fyc2F3OjpUZWxsdGFsZTo6TWFzayBfbWFzazsKfTsKCmNsYXNzIFNlbGVj
dGlvblJlcXVpcmVkIDogcHVibGljIFRlbGx0YWxlQ29uc3RyYWludEltcGwKewpwdWJsaWM6CiAg
U2VsZWN0aW9uUmVxdWlyZWQoV2Fyc2F3OjpUZWxsdGFsZTo6TWFzayk7CiAgdmlydHVhbCB2b2lk
IHRyeW1vZGlmeShXYXJzYXc6OlRlbGx0YWxlX3B0ciwgV2Fyc2F3OjpUZWxsdGFsZTo6TWFzaywg
Q09SQkE6OkJvb2xlYW4pOwpwcml2YXRlOgogIFdhcnNhdzo6VGVsbHRhbGU6Ok1hc2sgX21hc2s7
Cn07CgpjbGFzcyBFeGNsdXNpdmVSZXF1aXJlZCA6IHB1YmxpYyBUZWxsdGFsZUNvbnN0cmFpbnRJ
bXBsCnsKcHVibGljOgogIEV4Y2x1c2l2ZVJlcXVpcmVkKFdhcnNhdzo6VGVsbHRhbGU6Ok1hc2sp
OwogIHZpcnR1YWwgdm9pZCB0cnltb2RpZnkoV2Fyc2F3OjpUZWxsdGFsZV9wdHIsIFdhcnNhdzo6
VGVsbHRhbGU6Ok1hc2ssIENPUkJBOjpCb29sZWFuKTsKcHJpdmF0ZToKICBXYXJzYXc6OlRlbGx0
YWxlOjpNYXNrIF9tYXNrOwp9OwojIDIzICIvaG9tZS9zdGVmYW4vQmVybGluL0Jlcmxpbi9zcmMv
Q29tbWFuZC9UZWxsdGFsZUltcGwuY2MiIDIKIyAxICIvaG9tZS9zdGVmYW4vQmVybGluL0Jlcmxp
bi9pbmNsdWRlL1ByYWd1ZS9TeXMvVHJhY2VyLmhoIiAxCiMgMjQgIi9ob21lL3N0ZWZhbi9CZXJs
aW4vQmVybGluL3NyYy9Db21tYW5kL1RlbGx0YWxlSW1wbC5jYyIgMgoKdXNpbmcgbmFtZXNwYWNl
IFByYWd1ZTsKdXNpbmcgbmFtZXNwYWNlIFdhcnNhdzsKClRlbGx0YWxlSW1wbDo6VGVsbHRhbGVJ
bXBsKFRlbGx0YWxlQ29uc3RyYWludF9wdHIgYywgdW5zaWduZWQgbG9uZyBtKQogIDogX21hc2so
bSksIF9jb25zdHJhaW50KGMpCnt9CgpUZWxsdGFsZUltcGw6On5UZWxsdGFsZUltcGwoKQp7fQoK
dm9pZCBUZWxsdGFsZUltcGw6OnNldChXYXJzYXc6OlRlbGx0YWxlOjpNYXNrIG0pCnsKICBUcmFj
ZSB0cmFjZSgiVGVsbHRhbGVJbXBsOjpzZXQiKTsKICBpZiAoIUNPUkJBOjppc19uaWwoX2NvbnN0
cmFpbnQpKSBfY29uc3RyYWludC0+dHJ5bW9kaWZ5KFRlbGx0YWxlX3ZhcihfdGhpcygpKSwgbSwg
dHJ1ZSk7CiAgZWxzZSBtb2RpZnkobSwgdHJ1ZSk7Cn0KCnZvaWQgVGVsbHRhbGVJbXBsOjpjbGVh
cihXYXJzYXc6OlRlbGx0YWxlOjpNYXNrIG0pCnsKICBUcmFjZSB0cmFjZSgiVGVsbHRhbGVJbXBs
OjpjbGVhciIpOwogIGlmICghQ09SQkE6OmlzX25pbChfY29uc3RyYWludCkpIF9jb25zdHJhaW50
LT50cnltb2RpZnkoVGVsbHRhbGVfdmFyKF90aGlzKCkpLCBtLCBmYWxzZSk7CiAgZWxzZSBtb2Rp
ZnkobSwgZmFsc2UpOwp9CgpDT1JCQTo6Qm9vbGVhbiBUZWxsdGFsZUltcGw6OnRlc3QoV2Fyc2F3
OjpUZWxsdGFsZTo6TWFzayBtKQp7CiAgUHJhZ3VlOjpHdWFyZDxNdXRleD4gZ3VhcmQoX211dGV4
KTsKICByZXR1cm4gKF9tYXNrICYgbSkgPT0gbTsKfQoKdm9pZCBUZWxsdGFsZUltcGw6Om1vZGlm
eShXYXJzYXc6OlRlbGx0YWxlOjpNYXNrIG0sIENPUkJBOjpCb29sZWFuIG9uKQp7CiAgdW5zaWdu
ZWQgbG9uZyBuZiA9IG9uID8gX21hc2sgfCBtIDogX21hc2sgJiB+bTsKICB7CiAgICBQcmFndWU6
Okd1YXJkPE11dGV4PiBndWFyZChfbXV0ZXgpOwogICAgaWYgKG5mID09IF9tYXNrKSByZXR1cm47
CiAgICBlbHNlIF9tYXNrID0gbmY7CiAgfQogIENPUkJBOjpBbnkgYW55OwogIGFueSA8PD0gbmY7
CiAgbm90aWZ5KGFueSk7Cn0KCnZvaWQgVGVsbHRhbGVJbXBsOjpjb25zdHJhaW50KFRlbGx0YWxl
Q29uc3RyYWludF9wdHIgY29uc3RyYWludCkKewogIFByYWd1ZTo6R3VhcmQ8TXV0ZXg+IGd1YXJk
KF9tdXRleCk7CiAgX2NvbnN0cmFpbnQgPSBjb25zdHJhaW50Owp9CgoKVGVsbHRhbGVDb25zdHJh
aW50X3B0ciBUZWxsdGFsZUltcGw6OmNvbnN0cmFpbnQoKQp7CiAgUHJhZ3VlOjpHdWFyZDxNdXRl
eD4gZ3VhcmQoX211dGV4KTsKICByZXR1cm4gVGVsbHRhbGVDb25zdHJhaW50OjpfZHVwbGljYXRl
KF9jb25zdHJhaW50KTsKfQoKdm9pZCBUZWxsdGFsZUNvbnN0cmFpbnRJbXBsOjphZGQoVGVsbHRh
bGVfcHRyIHQpCnsKICBQcmFndWU6Okd1YXJkPE11dGV4PiBndWFyZChfbXV0ZXgpOwogIF90ZWxs
dGFsZXMucHVzaF9iYWNrKFRlbGx0YWxlOjpfZHVwbGljYXRlKHQpKTsKICB0LT5jb25zdHJhaW50
KFRlbGx0YWxlQ29uc3RyYWludF92YXIoX3RoaXMoKSkpOwp9Cgp2b2lkIFRlbGx0YWxlQ29uc3Ry
YWludEltcGw6OnJlbW92ZShUZWxsdGFsZV9wdHIgdCkKewogIFByYWd1ZTo6R3VhcmQ8TXV0ZXg+
IGd1YXJkKF9tdXRleCk7CiAgZm9yICh0bGlzdF90OjppdGVyYXRvciBpID0gX3RlbGx0YWxlcy5i
ZWdpbigpOyBpICE9IF90ZWxsdGFsZXMuZW5kKCk7ICsraSkKICAgIGlmICgoKmkpID09IHQpCiAg
ICAgIHsKICAgICAgICBfdGVsbHRhbGVzLmVyYXNlKGkpOwogICAgICAgIGJyZWFrOwogICAgICB9
Cn0KCkV4Y2x1c2l2ZUNob2ljZTo6RXhjbHVzaXZlQ2hvaWNlKFdhcnNhdzo6VGVsbHRhbGU6Ok1h
c2sgbSkKICA6IF9tYXNrKG0pCnt9Cgp2b2lkIEV4Y2x1c2l2ZUNob2ljZTo6dHJ5bW9kaWZ5KFRl
bGx0YWxlX3B0ciB0LCBXYXJzYXc6OlRlbGx0YWxlOjpNYXNrIG0sIENPUkJBOjpCb29sZWFuIGIp
CnsKICBQcmFndWU6Okd1YXJkPE11dGV4PiBndWFyZChfbXV0ZXgpOwogIGlmIChiKQogICAgZm9y
ICh0bGlzdF90OjppdGVyYXRvciBpID0gX3RlbGx0YWxlcy5iZWdpbigpOyBpICE9IF90ZWxsdGFs
ZXMuZW5kKCk7ICsraSkKICAgICAgaWYgKCgqaSktPnRlc3QobSkpICgqaSktPm1vZGlmeShtLCBm
YWxzZSk7CiAgdC0+bW9kaWZ5KG0sIGIpOwp9CgpTZWxlY3Rpb25SZXF1aXJlZDo6U2VsZWN0aW9u
UmVxdWlyZWQoV2Fyc2F3OjpUZWxsdGFsZTo6TWFzayBtKQogIDogX21hc2sobSkKewp9Cgp2b2lk
IFNlbGVjdGlvblJlcXVpcmVkOjp0cnltb2RpZnkoVGVsbHRhbGVfcHRyIHQsIFdhcnNhdzo6VGVs
bHRhbGU6Ok1hc2sgbSwgQ09SQkE6OkJvb2xlYW4gYikKewogIFByYWd1ZTo6R3VhcmQ8TXV0ZXg+
IGd1YXJkKF9tdXRleCk7CiAgc2l6ZV90IHNlbGVjdGVkID0gMDsKICBpZiAoIWIpCiAgICBmb3Ig
KHRsaXN0X3Q6Oml0ZXJhdG9yIGkgPSBfdGVsbHRhbGVzLmJlZ2luKCk7IGkgIT0gX3RlbGx0YWxl
cy5lbmQoKTsgKytpKQogICAgICBpZiAoKCppKS0+dGVzdChtKSkgc2VsZWN0ZWQrKzsKICBpZiAo
YiB8fCBzZWxlY3RlZCA+IDEpIHQtPm1vZGlmeShtLCBiKTsKfQoKRXhjbHVzaXZlUmVxdWlyZWQ6
OkV4Y2x1c2l2ZVJlcXVpcmVkKFdhcnNhdzo6VGVsbHRhbGU6Ok1hc2sgbSkKICA6IF9tYXNrKG0p
Cnt9Cgp2b2lkIEV4Y2x1c2l2ZVJlcXVpcmVkOjp0cnltb2RpZnkoVGVsbHRhbGVfcHRyIHQsIFdh
cnNhdzo6VGVsbHRhbGU6Ok1hc2sgbSwgQ09SQkE6OkJvb2xlYW4gYikKewogIFByYWd1ZTo6R3Vh
cmQ8TXV0ZXg+IGd1YXJkKF9tdXRleCk7CiAgaWYgKGIpCiAgICB7CiAgICAgIGZvciAodGxpc3Rf
dDo6aXRlcmF0b3IgaSA9IF90ZWxsdGFsZXMuYmVnaW4oKTsgaSAhPSBfdGVsbHRhbGVzLmVuZCgp
OyArK2kpCiAgICAgICAgaWYgKCgqaSktPnRlc3QobSkpICgqaSktPm1vZGlmeShtLCBmYWxzZSk7
CiAgICAgIHQtPm1vZGlmeShtLCB0cnVlKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHNpemVf
dCBzZWxlY3RlZCA9IDA7CiAgICAgIGZvciAodGxpc3RfdDo6aXRlcmF0b3IgaSA9IF90ZWxsdGFs
ZXMuYmVnaW4oKTsgaSAhPSBfdGVsbHRhbGVzLmVuZCgpOyArK2kpCiAgICAgICAgaWYgKCgqaSkt
PnRlc3QobSkpIHNlbGVjdGVkKys7CiAgICAgIGlmIChzZWxlY3RlZCA+IDEpIHQtPm1vZGlmeSht
LCBmYWxzZSk7CiAgICB9Cn0K


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

* Re: c++/3277: compiler segfaults compiling attached file
@ 2001-07-25  6:47 nathan
  0 siblings, 0 replies; 2+ messages in thread
From: nathan @ 2001-07-25  6:47 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, seefeld

Synopsis: compiler segfaults compiling attached file

State-Changed-From-To: open->closed
State-Changed-By: nathan
State-Changed-When: Wed Jul 25 06:47:22 2001
State-Changed-Why:
    this is already fixed in the 3.0.1 branch

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


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

end of thread, other threads:[~2001-07-25  6:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-19 19:56 c++/3277: compiler segfaults compiling attached file seefeld
2001-07-25  6:47 nathan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).